diff --git a/src/pg-backend.ts b/src/pg-backend.ts index d9ac6ff..087b5e8 100644 --- a/src/pg-backend.ts +++ b/src/pg-backend.ts @@ -348,18 +348,15 @@ export class PgBackend { DELETE FROM minion_workers WHERE notified < NOW() - INTERVAL '1 millisecond' * ${minion.missingAfter} `; - // Old jobs with no unresolved dependencies and expired jobs + // Old jobs await pg.query` - DELETE FROM minion_jobs WHERE id IN ( - SELECT j.id FROM minion_jobs AS j LEFT JOIN minion_jobs AS children - ON children.state != 'finished' AND ARRAY_LENGTH(children.parents, 1) > 0 AND j.id = ANY(children.parents) - WHERE j.state = 'finished' AND j.finished <= NOW() - INTERVAL '1 millisecond' * ${minion.removeAfter} - AND children.id IS NULL - UNION ALL - SELECT id FROM minion_jobs WHERE state = 'inactive' AND expires <= NOW() - ) + DELETE FROM minion_jobs + WHERE state = 'finished' AND finished <= NOW() - INTERVAL '1 millisecond' * ${minion.removeAfter} `; + // Expired jobs + await pg.query`DELETE FROM minion_jobs WHERE state = 'inactive' AND expires <= NOW()`; + // Jobs with missing worker (can be retried) const jobs = await pg.query` SELECT id, retries FROM minion_jobs AS j diff --git a/test/pg.js b/test/pg.js index 8ec36c1..e99e05f 100644 --- a/test/pg.js +++ b/test/pg.js @@ -1027,9 +1027,9 @@ t.test('PostgreSQL backend', skip, async t => { t.same((await job4.info()).parents, [id, id2]); t.equal((await minion.stats()).finished_jobs, 2); await minion.repair(); - t.equal((await minion.stats()).finished_jobs, 2); + t.equal((await minion.stats()).finished_jobs, 0); t.ok(await job4.finish()); - t.equal((await minion.stats()).finished_jobs, 3); + t.equal((await minion.stats()).finished_jobs, 1); await minion.repair(); t.equal((await minion.stats()).finished_jobs, 0);