Fix retention query performance and cleanup scheduling
This commit is contained in:
@@ -6,6 +6,7 @@ vi.mock('../../src/lib/server/pipeline/beta-runner.js', () => ({ betaTick: vi.fn
|
||||
vi.mock('../../src/lib/server/maintenance/index.js', () => ({ runMaintenance: vi.fn() }));
|
||||
vi.mock('../../src/lib/server/game-files/index.js', () => ({ cleanupControllerLibraries: vi.fn(async () => {}) }));
|
||||
vi.mock('../../src/lib/server/provisioning/worker.js', () => ({ processProvisioning: vi.fn(async () => {}) }));
|
||||
vi.mock('../../src/lib/server/retention.js', () => ({ pruneHistory: vi.fn(), pruneSampleHistory: vi.fn() }));
|
||||
|
||||
function deferred() {
|
||||
let resolve!: () => void;
|
||||
@@ -31,6 +32,30 @@ async function setup() {
|
||||
}
|
||||
|
||||
describe('independent provisioning scheduling', () => {
|
||||
it('runs retention at most every five minutes across ticks and explicit kicks', async () => {
|
||||
const s = await setup();
|
||||
const { pruneHistory, pruneSampleHistory } = await import('../../src/lib/server/retention.js');
|
||||
vi.useFakeTimers();
|
||||
try {
|
||||
s.startWorker();
|
||||
expect(pruneHistory).toHaveBeenCalledTimes(1);
|
||||
expect(pruneSampleHistory).toHaveBeenCalledTimes(1);
|
||||
await vi.advanceTimersByTimeAsync(285_000);
|
||||
await s.kick();
|
||||
expect(pruneHistory).toHaveBeenCalledTimes(1);
|
||||
expect(pruneSampleHistory).toHaveBeenCalledTimes(1);
|
||||
await vi.advanceTimersByTimeAsync(15_000);
|
||||
expect(pruneHistory).toHaveBeenCalledTimes(2);
|
||||
expect(pruneSampleHistory).toHaveBeenCalledTimes(2);
|
||||
expect(s.process.mock.calls.length).toBeGreaterThan(2);
|
||||
} finally {
|
||||
s.stopWorker(); s.background.resolve();
|
||||
await vi.advanceTimersByTimeAsync(0);
|
||||
vi.useRealTimers();
|
||||
await vi.waitFor(() => expect(s.workerActivity()).toEqual([]));
|
||||
}
|
||||
});
|
||||
|
||||
it('runs controller library cleanup on worker ticks without overlapping a slow cleanup', async () => {
|
||||
const s = await setup();
|
||||
const { cleanupControllerLibraries } = await import('../../src/lib/server/game-files/index.js');
|
||||
|
||||
Reference in New Issue
Block a user