Count views and evict server copies by retention criteria before LRU
This commit is contained in:
38
server/p2p-retention.test.js
Normal file
38
server/p2p-retention.test.js
Normal file
@@ -0,0 +1,38 @@
|
||||
import { test, expect, beforeAll } from 'bun:test';
|
||||
import { mkdtempSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
|
||||
const root = mkdtempSync(join(tmpdir(), 'ytp-retention-test-'));
|
||||
process.env.DB_PATH = join(root, 'test.db');
|
||||
const dbmod = await import('./db.js');
|
||||
const P = await import('./p2p-db.js');
|
||||
|
||||
const DAY = 86400_000;
|
||||
const NOW = Date.UTC(2026, 8, 29, 12);
|
||||
const opts = { now: NOW, keepMinViews: 3, keepDays: 30, keepRecentDays: 14 };
|
||||
|
||||
beforeAll(async () => {
|
||||
await dbmod.initDb();
|
||||
await P.initP2pSchema();
|
||||
const add = (id, lastAccessDaysAgo) => dbmod.upsertMedia(id, { status: 'ready', size: 100, last_access: NOW - lastAccessDaysAgo * DAY });
|
||||
await add('topOld00001', 60); // 5 views in window → top, but old
|
||||
await add('recent00001', 2); // 0 views, played 2 days ago → recent
|
||||
await add('cold0000001', 40); // 1 view in window, old → evict first-ish
|
||||
await add('cold0000002', 20); // 0 views, 20 days → evict first
|
||||
await add('cold0000003', 50); // 0 views, 50 days → evict first (older than cold2)
|
||||
for (let i = 0; i < 5; i++) await P.addView('topOld00001', NOW - 5 * DAY);
|
||||
await P.addView('cold0000001', NOW - 3 * DAY);
|
||||
await P.addView('cold0000002', NOW - 45 * DAY); // outside the 30-day window
|
||||
});
|
||||
|
||||
test('non-qualifying copies go first (fewest views, then oldest); qualifying ones by LRU', async () => {
|
||||
const order = (await P.listMediaEvictionOrder(opts)).map((r) => [r.video_id, r.qualifies]);
|
||||
expect(order).toEqual([
|
||||
['cold0000003', false],
|
||||
['cold0000002', false],
|
||||
['cold0000001', false],
|
||||
['topOld00001', true],
|
||||
['recent00001', true],
|
||||
]);
|
||||
});
|
||||
Reference in New Issue
Block a user