@cat-factory/node-server 0.54.1 → 0.54.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/execution/bootstrapRunner.d.ts +1 -0
- package/dist/execution/bootstrapRunner.d.ts.map +1 -1
- package/dist/execution/bootstrapRunner.js +2 -1
- package/dist/execution/bootstrapRunner.js.map +1 -1
- package/dist/execution/config.d.ts.map +1 -1
- package/dist/execution/config.js +3 -0
- package/dist/execution/config.js.map +1 -1
- package/dist/execution/envConfigRepairRunner.d.ts +1 -0
- package/dist/execution/envConfigRepairRunner.d.ts.map +1 -1
- package/dist/execution/envConfigRepairRunner.js +2 -1
- package/dist/execution/envConfigRepairRunner.js.map +1 -1
- package/dist/execution/pgBossRunner.d.ts +39 -10
- package/dist/execution/pgBossRunner.d.ts.map +1 -1
- package/dist/execution/pgBossRunner.js +85 -18
- package/dist/execution/pgBossRunner.js.map +1 -1
- package/dist/execution/reclaim.d.ts +46 -0
- package/dist/execution/reclaim.d.ts.map +1 -0
- package/dist/execution/reclaim.js +48 -0
- package/dist/execution/reclaim.js.map +1 -0
- package/dist/repositories/drizzle.d.ts.map +1 -1
- package/dist/repositories/drizzle.js +22 -1
- package/dist/repositories/drizzle.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/package.json +17 -17
|
@@ -3,6 +3,7 @@ import type { Logger, ServerContainer } from '@cat-factory/server';
|
|
|
3
3
|
import type { PgBoss } from 'pg-boss';
|
|
4
4
|
import type { AdvanceQueueOptions } from './pgBossRunner.js';
|
|
5
5
|
import type { DriveConfig } from './drive.js';
|
|
6
|
+
export declare const BOOTSTRAP_QUEUE = "bootstrap.advance";
|
|
6
7
|
/**
|
|
7
8
|
* Poll a bootstrap run to a terminal state, sleeping between polls — the Node analogue
|
|
8
9
|
* of the BootstrapWorkflow's `step.sleep` + `pollBootstrapJob` loop, with plain async
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapRunner.d.ts","sourceRoot":"","sources":["../../src/execution/bootstrapRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAO,MAAM,EAAe,MAAM,SAAS,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"bootstrapRunner.d.ts","sourceRoot":"","sources":["../../src/execution/bootstrapRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAO,MAAM,EAAe,MAAM,SAAS,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAU7C,eAAO,MAAM,eAAe,sBAAsB,CAAA;AAyBlD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,qBAAa,qBAAsB,YAAW,eAAe;IAEzD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAF/B,YACmB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,mBAAmB,EAChD;IAEE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhE;IAEK,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;CACF;AAED,wFAAwF;AACxF,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,eAAe,EAC1B,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,wEAAwE;AACxE,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
// record in Postgres is authoritative, so a crash mid-run is recovered by pg-boss's
|
|
6
6
|
// retry of the expired/failed drive job and by the stale-run sweeper (which now re-drives
|
|
7
7
|
// stale `bootstrap` runs too).
|
|
8
|
-
const
|
|
8
|
+
export const BOOTSTRAP_QUEUE = 'bootstrap.advance';
|
|
9
|
+
const QUEUE = BOOTSTRAP_QUEUE;
|
|
9
10
|
// `exclusive` so (queue, singletonKey=jobId) is unique across created/active/retry — at
|
|
10
11
|
// most one drive job per bootstrap run alive, and duplicate sends are no-ops. Mirrors the
|
|
11
12
|
// execution advance queue.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapRunner.js","sourceRoot":"","sources":["../../src/execution/bootstrapRunner.ts"],"names":[],"mappings":"AAMA,uFAAuF;AACvF,qFAAqF;AACrF,wFAAwF;AACxF,sFAAsF;AACtF,oFAAoF;AACpF,0FAA0F;AAC1F,+BAA+B;AAE/B,MAAM,
|
|
1
|
+
{"version":3,"file":"bootstrapRunner.js","sourceRoot":"","sources":["../../src/execution/bootstrapRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/execution/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAO3E,+FAA+F;AAC/F,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,mBAAmB,CAAA;IAC1B,OAAO,EAAE,aAAa,CAAA;IACtB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/execution/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAO3E,+FAA+F;AAC/F,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,mBAAmB,CAAA;IAC1B,OAAO,EAAE,aAAa,CAAA;IACtB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,gBAAgB,CAoD5F"}
|
package/dist/execution/config.js
CHANGED
|
@@ -71,6 +71,9 @@ export function executionRuntime(config, env) {
|
|
|
71
71
|
const sweeper = {
|
|
72
72
|
intervalMs: Math.max(1, Number(env.STALE_RUN_SWEEP_MINUTES) || 5) * 60_000,
|
|
73
73
|
leaseMs: Math.max(1, Number(env.STALE_RUN_LEASE_MINUTES) || 10) * 60_000,
|
|
74
|
+
// A run orphaned this long (no live driver) is failed `stalled` instead of re-driven
|
|
75
|
+
// forever. Generous by default so only genuinely unrecoverable runs are given up on.
|
|
76
|
+
hardStallMs: Math.max(1, Number(env.STALE_RUN_HARD_FAIL_MINUTES) || 60) * 60_000,
|
|
74
77
|
};
|
|
75
78
|
const concurrency = Math.max(1, num(env.EXECUTION_CONCURRENCY) ?? 10);
|
|
76
79
|
return { drive, queue, sweeper, concurrency };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/execution/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/execution/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { Logger, ServerContainer } from '@cat-factory/server';
|
|
|
3
3
|
import type { PgBoss } from 'pg-boss';
|
|
4
4
|
import type { AdvanceQueueOptions } from './pgBossRunner.js';
|
|
5
5
|
import type { DriveConfig } from './drive.js';
|
|
6
|
+
export declare const ENV_CONFIG_REPAIR_QUEUE = "env-config-repair.advance";
|
|
6
7
|
/**
|
|
7
8
|
* Poll an env-config-repair run to a terminal state, sleeping between polls — the Node
|
|
8
9
|
* analogue of the EnvConfigRepairWorkflow's `step.sleep` + `pollJob` loop, with plain async
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envConfigRepairRunner.d.ts","sourceRoot":"","sources":["../../src/execution/envConfigRepairRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAO,MAAM,EAAe,MAAM,SAAS,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"envConfigRepairRunner.d.ts","sourceRoot":"","sources":["../../src/execution/envConfigRepairRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAO,MAAM,EAAe,MAAM,SAAS,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAU7C,eAAO,MAAM,uBAAuB,8BAA8B,CAAA;AAwBlE;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,qBAAa,2BAA4B,YAAW,qBAAqB;IAErE,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAF/B,YACmB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,mBAAmB,EAChD;IAEE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhE;IAEK,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;CACF;AAED,6FAA6F;AAC7F,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,eAAe,EAC1B,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,gFAAgF;AAChF,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
// record in Postgres is authoritative, so a crash mid-run is recovered by pg-boss's retry of
|
|
6
6
|
// the expired/failed drive job and by the stale-run sweeper (which re-drives stale
|
|
7
7
|
// `env-config-repair` runs too).
|
|
8
|
-
const
|
|
8
|
+
export const ENV_CONFIG_REPAIR_QUEUE = 'env-config-repair.advance';
|
|
9
|
+
const QUEUE = ENV_CONFIG_REPAIR_QUEUE;
|
|
9
10
|
// `exclusive` so (queue, singletonKey=jobId) is unique across created/active/retry — at most
|
|
10
11
|
// one drive job per repair run alive, and duplicate sends are no-ops.
|
|
11
12
|
const QUEUE_POLICY = 'exclusive';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envConfigRepairRunner.js","sourceRoot":"","sources":["../../src/execution/envConfigRepairRunner.ts"],"names":[],"mappings":"AAMA,6EAA6E;AAC7E,0FAA0F;AAC1F,4FAA4F;AAC5F,yFAAyF;AACzF,6FAA6F;AAC7F,mFAAmF;AACnF,iCAAiC;AAEjC,MAAM,
|
|
1
|
+
{"version":3,"file":"envConfigRepairRunner.js","sourceRoot":"","sources":["../../src/execution/envConfigRepairRunner.ts"],"names":[],"mappings":"AAMA,6EAA6E;AAC7E,0FAA0F;AAC1F,4FAA4F;AAC5F,yFAAyF;AACzF,6FAA6F;AAC7F,mFAAmF;AACnF,iCAAiC;AAEjC,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAA;AAClE,MAAM,KAAK,GAAG,uBAAuB,CAAA;AACrC,6FAA6F;AAC7F,sEAAsE;AACtE,MAAM,YAAY,GAAG,WAAoB,CAAA;AAOzC,SAAS,WAAW,CAAC,KAAa,EAAE,IAAyB;IAC3D,OAAO;QACL,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,iBAAiB;QAClC,YAAY,EAAE,IAAI;KACnB,CAAA;AACH,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAErF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAA0B,EAC1B,WAAmB,EACnB,KAAa,EACb,GAAgB,EAChB,GAAW;IAEX,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAA;IACxC,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QAC/D,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAM;QAChE,MAAM,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACpC,CAAC;IACD,GAAG,CAAC,IAAI,CACN,EAAE,WAAW,EAAE,KAAK,EAAE,EACtB,0EAA0E,CAC3E,CAAA;AACH,CAAC;AAED,MAAM,OAAO,2BAA2B;IAEnB,IAAI;IACJ,YAAY;IAF/B,YACmB,IAAY,EACZ,YAAiC;oBADjC,IAAI;4BACJ,YAAY;IAC5B,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,WAAmB,EAAE,KAAa;QAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;IAC5F,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,YAAoB,EAAE,MAAc;QAClD,0FAA0F;QAC1F,8EAA8E;IAChF,CAAC;CACF;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAY,EACZ,SAA0B,EAC1B,GAAgB,EAChB,GAAW,EACX,OAAO,GAA6B,EAAE;IAEtC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;IAC1D,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;IACvD,MAAM,IAAI,CAAC,IAAI,CACb,KAAK,EACL,EAAE,gBAAgB,EAAE,WAAW,EAAE,EACjC,KAAK,EAAE,IAA+B,EAAE,EAAE;QACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;YACvC,IAAI,CAAC;gBACH,MAAM,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;YACrE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,KAAK,CACP,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACnF,gCAAgC,CACjC,CAAA;gBACD,MAAM,KAAK,CAAA,CAAC,mDAAmD;YACjE,CAAC;QACH,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAY,EACZ,WAAmB,EACnB,KAAa,EACb,YAAiC;IAEjC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAA;AAClF,CAAC"}
|
|
@@ -2,6 +2,7 @@ import type { WorkRunner } from '@cat-factory/kernel';
|
|
|
2
2
|
import type { Logger, ServerContainer } from '@cat-factory/server';
|
|
3
3
|
import type { PgBoss } from 'pg-boss';
|
|
4
4
|
import { type DriveConfig } from './drive.js';
|
|
5
|
+
import { type JobStore } from './reclaim.js';
|
|
5
6
|
/**
|
|
6
7
|
* Send options for an advance job. `singletonKey` (the run id) is the linchpin — but only
|
|
7
8
|
* because the queue is created `exclusive` (see {@link QUEUE_POLICY}): while an advance job
|
|
@@ -52,20 +53,48 @@ export declare class PgBossWorkRunner implements WorkRunner {
|
|
|
52
53
|
export declare function startExecutionWorker(boss: PgBoss, container: ServerContainer, cfg: DriveConfig, log: Logger, options?: {
|
|
53
54
|
concurrency?: number;
|
|
54
55
|
}): Promise<void>;
|
|
55
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* How often the stale-run sweeper runs, how stale a `running` run must be to re-drive, and
|
|
58
|
+
* how long an orphaned run may stay unrecovered before it is failed as `stalled`.
|
|
59
|
+
*/
|
|
56
60
|
export interface SweeperConfig {
|
|
57
61
|
intervalMs: number;
|
|
58
62
|
leaseMs: number;
|
|
63
|
+
/**
|
|
64
|
+
* Hard deadline: a `running` execution this process has been UNABLE TO RECOVER for this
|
|
65
|
+
* long (its advance job stays not-live across ticks despite re-driving) is failed `stalled`
|
|
66
|
+
* rather than re-driven forever — so a run orphaned by a crashed orchestrator that recovery
|
|
67
|
+
* can't resume stops spinning silently and surfaces (loudly) the failure banner + retry.
|
|
68
|
+
*
|
|
69
|
+
* The clock is per-PROCESS (measured from the first tick that observed the run orphaned),
|
|
70
|
+
* NOT the raw lease age: a long orchestrator downtime inflates `updated_at`, so keying the
|
|
71
|
+
* deadline off lease age would fail an otherwise-recoverable run on the very first boot tick
|
|
72
|
+
* — before recovery was even attempted. Measuring from first-observed-orphaned excludes the
|
|
73
|
+
* downtime and guarantees at least one re-drive attempt before giving up.
|
|
74
|
+
*/
|
|
75
|
+
hardStallMs: number;
|
|
59
76
|
}
|
|
60
77
|
/**
|
|
61
|
-
* Backstop for runs
|
|
62
|
-
* (the worker crashed/was evicted
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
78
|
+
* Backstop for runs still `running` in storage but whose durable advance job is gone or
|
|
79
|
+
* orphaned (the worker crashed/was evicted). Mirrors — and now matches the recovery power
|
|
80
|
+
* of — the Worker's cron `sweepStuckRuns`.
|
|
81
|
+
*
|
|
82
|
+
* Per stale run, the sweeper first classifies its advance job by pg-boss's own heartbeat
|
|
83
|
+
* (see {@link classifyAdvanceJob}), because the `exclusive` queue makes a bare re-`send` a
|
|
84
|
+
* no-op while ANY advance job exists — which previously left an ORPHANED-`active` run (job
|
|
85
|
+
* stuck active, worker dead, heartbeat frozen) permanently un-recoverable by this sweeper:
|
|
86
|
+
*
|
|
87
|
+
* - `live` — a real drive is running (or a job is queued to run). Leave it.
|
|
88
|
+
* - `orphaned` — reclaim the dead job to free its singletonKey, then re-drive (or fail).
|
|
89
|
+
* - `missing` — re-drive directly.
|
|
90
|
+
*
|
|
91
|
+
* An execution this process has been unable to recover for `hardStallMs` (measured from the
|
|
92
|
+
* first tick that saw it orphaned, so a long downtime doesn't count) is failed `stalled`
|
|
93
|
+
* instead of re-driven forever, so an unrecoverable run doesn't spin `running` forever — but
|
|
94
|
+
* every orphan still gets at least one re-drive attempt first. Decision-parked (`blocked`)
|
|
95
|
+
* and spend-paused (`paused`) runs aren't `running`, so they're left alone. Returns a stop
|
|
96
|
+
* function; also runs one tick immediately (boot reconcile — recover runs a crashed previous
|
|
97
|
+
* process orphaned without waiting a full interval).
|
|
69
98
|
*/
|
|
70
|
-
export declare function startStaleRunSweeper(boss: PgBoss, container: ServerContainer, cfg: SweeperConfig, queueOptions: AdvanceQueueOptions, log: Logger): () => void;
|
|
99
|
+
export declare function startStaleRunSweeper(boss: PgBoss, jobs: JobStore, container: ServerContainer, cfg: SweeperConfig, queueOptions: AdvanceQueueOptions, log: Logger): () => void;
|
|
71
100
|
//# sourceMappingURL=pgBossRunner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pgBossRunner.d.ts","sourceRoot":"","sources":["../../src/execution/pgBossRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAO,MAAM,EAAe,MAAM,SAAS,CAAA;AAGvD,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"pgBossRunner.d.ts","sourceRoot":"","sources":["../../src/execution/pgBossRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAO,MAAM,EAAe,MAAM,SAAS,CAAA;AAGvD,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,cAAc,CAAA;AAwBnF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAaD,qBAAa,gBAAiB,YAAW,UAAU;IAE/C,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAF/B,YACmB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,mBAAmB,EAChD;IAEE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtE;IAEK,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAQf;IAEK,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,eAAe,EAC1B,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;;;;;;OAWG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB;AAUD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,eAAe,EAC1B,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,mBAAmB,EACjC,GAAG,EAAE,MAAM,GACV,MAAM,IAAI,CA8GZ"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { reenqueueStaleBootstrap } from './bootstrapRunner.js';
|
|
2
|
-
import { reenqueueStaleEnvConfigRepair } from './envConfigRepairRunner.js';
|
|
1
|
+
import { BOOTSTRAP_QUEUE, reenqueueStaleBootstrap } from './bootstrapRunner.js';
|
|
2
|
+
import { ENV_CONFIG_REPAIR_QUEUE, reenqueueStaleEnvConfigRepair } from './envConfigRepairRunner.js';
|
|
3
3
|
import { driveExecution } from './drive.js';
|
|
4
|
+
import { classifyAdvanceJob, reclaimAdvanceJob } from './reclaim.js';
|
|
4
5
|
// Durable execution on pg-boss: the analogue of the Worker's Cloudflare Workflows
|
|
5
6
|
// driver. `startRun` enqueues an advance job (deduped per run via singletonKey); a
|
|
6
7
|
// registered worker drives the run to a standstill via `driveExecution`. A resolved
|
|
@@ -91,25 +92,84 @@ export async function startExecutionWorker(boss, container, cfg, log, options =
|
|
|
91
92
|
}
|
|
92
93
|
});
|
|
93
94
|
}
|
|
95
|
+
/** Queue name carrying a run kind's durable advance/drive job. */
|
|
96
|
+
function queueForKind(kind) {
|
|
97
|
+
if (kind === 'execution')
|
|
98
|
+
return QUEUE;
|
|
99
|
+
if (kind === 'bootstrap')
|
|
100
|
+
return BOOTSTRAP_QUEUE;
|
|
101
|
+
if (kind === 'env-config-repair')
|
|
102
|
+
return ENV_CONFIG_REPAIR_QUEUE;
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
94
105
|
/**
|
|
95
|
-
* Backstop for runs
|
|
96
|
-
* (the worker crashed/was evicted
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
106
|
+
* Backstop for runs still `running` in storage but whose durable advance job is gone or
|
|
107
|
+
* orphaned (the worker crashed/was evicted). Mirrors — and now matches the recovery power
|
|
108
|
+
* of — the Worker's cron `sweepStuckRuns`.
|
|
109
|
+
*
|
|
110
|
+
* Per stale run, the sweeper first classifies its advance job by pg-boss's own heartbeat
|
|
111
|
+
* (see {@link classifyAdvanceJob}), because the `exclusive` queue makes a bare re-`send` a
|
|
112
|
+
* no-op while ANY advance job exists — which previously left an ORPHANED-`active` run (job
|
|
113
|
+
* stuck active, worker dead, heartbeat frozen) permanently un-recoverable by this sweeper:
|
|
114
|
+
*
|
|
115
|
+
* - `live` — a real drive is running (or a job is queued to run). Leave it.
|
|
116
|
+
* - `orphaned` — reclaim the dead job to free its singletonKey, then re-drive (or fail).
|
|
117
|
+
* - `missing` — re-drive directly.
|
|
118
|
+
*
|
|
119
|
+
* An execution this process has been unable to recover for `hardStallMs` (measured from the
|
|
120
|
+
* first tick that saw it orphaned, so a long downtime doesn't count) is failed `stalled`
|
|
121
|
+
* instead of re-driven forever, so an unrecoverable run doesn't spin `running` forever — but
|
|
122
|
+
* every orphan still gets at least one re-drive attempt first. Decision-parked (`blocked`)
|
|
123
|
+
* and spend-paused (`paused`) runs aren't `running`, so they're left alone. Returns a stop
|
|
124
|
+
* function; also runs one tick immediately (boot reconcile — recover runs a crashed previous
|
|
125
|
+
* process orphaned without waiting a full interval).
|
|
103
126
|
*/
|
|
104
|
-
export function startStaleRunSweeper(boss, container, cfg, queueOptions, log) {
|
|
127
|
+
export function startStaleRunSweeper(boss, jobs, container, cfg, queueOptions, log) {
|
|
128
|
+
// A live drive heartbeats its active job every `heartbeatSeconds`; treat a heartbeat older
|
|
129
|
+
// than a generous multiple of that (but at least the lease) as a dead worker.
|
|
130
|
+
const staleHeartbeatMs = Math.max(cfg.leaseMs, queueOptions.heartbeatSeconds * 1000 * 3);
|
|
131
|
+
// Per-PROCESS "first observed orphaned" clock, keyed by run id. The hard-stall deadline is
|
|
132
|
+
// measured from this — NOT the raw lease age — so a long orchestrator downtime (which
|
|
133
|
+
// inflates `updated_at`) can't fail an otherwise-recoverable run before recovery is even
|
|
134
|
+
// attempted. Entries are dropped once a run recovers or leaves the stale set.
|
|
135
|
+
const orphanedSince = new Map();
|
|
105
136
|
const tick = async () => {
|
|
106
137
|
try {
|
|
107
|
-
const
|
|
138
|
+
const now = Date.now();
|
|
139
|
+
const stale = await container.agentRunRepository.listStale(now - cfg.leaseMs);
|
|
140
|
+
const stillOrphaned = new Set();
|
|
108
141
|
for (const ref of stale) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
//
|
|
142
|
+
const queue = queueForKind(ref.kind);
|
|
143
|
+
if (!queue)
|
|
144
|
+
continue;
|
|
145
|
+
// Distinguish a healthy long drive (heartbeating) from an orphaned job whose worker
|
|
146
|
+
// died, so we recover the orphan instead of silently no-op re-sending onto it.
|
|
147
|
+
const { state, jobId } = await classifyAdvanceJob(jobs, queue, ref.id, staleHeartbeatMs, now);
|
|
148
|
+
if (state === 'live') {
|
|
149
|
+
orphanedSince.delete(ref.id);
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
// Start (or carry forward) this run's per-process orphaned clock.
|
|
153
|
+
const firstSeenOrphaned = orphanedSince.get(ref.id) ?? now;
|
|
154
|
+
orphanedSince.set(ref.id, firstSeenOrphaned);
|
|
155
|
+
stillOrphaned.add(ref.id);
|
|
156
|
+
if (state === 'orphaned' && jobId) {
|
|
157
|
+
log.warn({ workspaceId: ref.workspaceId, runId: ref.id, kind: ref.kind, jobId }, 'reclaiming orphaned advance job (dead worker) before re-drive');
|
|
158
|
+
await reclaimAdvanceJob(boss, queue, jobId).catch((err) => log.error({ runId: ref.id, err: err instanceof Error ? err.message : String(err) }, 'failed to reclaim orphaned advance job'));
|
|
159
|
+
}
|
|
160
|
+
// Hard-stall backstop (execution only): a run this process has been unable to recover
|
|
161
|
+
// for the whole deadline — re-driven on earlier ticks yet still not live — is failed
|
|
162
|
+
// rather than left spinning `running`. Gated on the per-process clock (not lease age),
|
|
163
|
+
// so a run first seen orphaned this tick (e.g. right after a long downtime) is always
|
|
164
|
+
// re-driven at least once below before it can ever be given up on.
|
|
165
|
+
if (ref.kind === 'execution' && now - firstSeenOrphaned > cfg.hardStallMs) {
|
|
166
|
+
const mins = Math.round((now - ref.updatedAt) / 60_000);
|
|
167
|
+
log.warn({ workspaceId: ref.workspaceId, executionId: ref.id, staleMinutes: mins }, 'run stalled past hard deadline; recovery could not resume it; failing');
|
|
168
|
+
await container.executionService.failRun(ref.workspaceId, ref.id, `Run stalled: no progress for ${mins} minutes and recovery could not resume it.`, 'stalled', null);
|
|
169
|
+
orphanedSince.delete(ref.id);
|
|
170
|
+
stillOrphaned.delete(ref.id);
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
113
173
|
if (ref.kind === 'bootstrap') {
|
|
114
174
|
log.warn({ workspaceId: ref.workspaceId, jobId: ref.id }, 're-driving stale bootstrap');
|
|
115
175
|
await reenqueueStaleBootstrap(boss, ref.workspaceId, ref.id, queueOptions);
|
|
@@ -120,16 +180,23 @@ export function startStaleRunSweeper(boss, container, cfg, queueOptions, log) {
|
|
|
120
180
|
await reenqueueStaleEnvConfigRepair(boss, ref.workspaceId, ref.id, queueOptions);
|
|
121
181
|
continue;
|
|
122
182
|
}
|
|
123
|
-
if (ref.kind !== 'execution')
|
|
124
|
-
continue;
|
|
125
183
|
log.warn({ workspaceId: ref.workspaceId, executionId: ref.id }, 're-driving stale run');
|
|
126
184
|
await boss.send(QUEUE, { workspaceId: ref.workspaceId, executionId: ref.id }, sendOptions(ref.id, queueOptions));
|
|
127
185
|
}
|
|
186
|
+
// Forget runs that recovered (bumped their lease → left the stale set) or went terminal,
|
|
187
|
+
// so their per-process orphaned clock restarts if they ever stall again.
|
|
188
|
+
for (const id of orphanedSince.keys()) {
|
|
189
|
+
if (!stillOrphaned.has(id))
|
|
190
|
+
orphanedSince.delete(id);
|
|
191
|
+
}
|
|
128
192
|
}
|
|
129
193
|
catch (error) {
|
|
130
194
|
log.error({ err: error instanceof Error ? error.message : String(error) }, 'stale-run sweep failed');
|
|
131
195
|
}
|
|
132
196
|
};
|
|
197
|
+
// Boot reconcile: recover runs a crashed previous process orphaned right away, not after
|
|
198
|
+
// one full interval (the incident that motivated this: a restart left a run frozen).
|
|
199
|
+
void tick();
|
|
133
200
|
const timer = setInterval(() => void tick(), cfg.intervalMs);
|
|
134
201
|
timer.unref?.(); // never keep the process alive on the sweep timer alone
|
|
135
202
|
return () => clearInterval(timer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pgBossRunner.js","sourceRoot":"","sources":["../../src/execution/pgBossRunner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"pgBossRunner.js","sourceRoot":"","sources":["../../src/execution/pgBossRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { PgBoss } from 'pg-boss';
|
|
2
|
+
/**
|
|
3
|
+
* Minimal read seam over the pg-boss job table. The pg `Pool` satisfies it structurally,
|
|
4
|
+
* so the sweeper can classify a run's advance job without importing `pg` directly or
|
|
5
|
+
* widening the runner's constructor surface.
|
|
6
|
+
*/
|
|
7
|
+
export interface JobStore {
|
|
8
|
+
query(text: string, values?: unknown[]): Promise<{
|
|
9
|
+
rows: Array<Record<string, unknown>>;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export type AdvanceJobState = 'live' | 'orphaned' | 'missing';
|
|
13
|
+
export interface AdvanceJobStatus {
|
|
14
|
+
state: AdvanceJobState;
|
|
15
|
+
jobId: string | null;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Classify a run's live advance job so the stale-run sweeper can recover an orphan without
|
|
19
|
+
* double-driving a healthy run.
|
|
20
|
+
*
|
|
21
|
+
* The `exclusive` queue policy makes a bare re-`send` an `ON CONFLICT DO NOTHING` no-op while
|
|
22
|
+
* ANY advance job for the run is `created`/`active`/`retry`. That is the whole point for a
|
|
23
|
+
* run that is genuinely being driven — but it also means the sweeper cannot tell (and so
|
|
24
|
+
* cannot recover) an ORPHANED run, whose worker crashed leaving the job stuck `active` with a
|
|
25
|
+
* frozen heartbeat, from a HEALTHY long drive that is merely sleeping between container polls
|
|
26
|
+
* (and still heartbeating its active job). Both look identical to `listStale`, which keys off
|
|
27
|
+
* `agent_runs.updated_at` — and a sleeping drive does not write that between polls.
|
|
28
|
+
*
|
|
29
|
+
* This reads pg-boss's own `heartbeat_on` — the same signal pg-boss maintenance uses to
|
|
30
|
+
* reclaim crashed workers — to disambiguate:
|
|
31
|
+
*
|
|
32
|
+
* - `live` — an `active` job with a fresh heartbeat (a real drive), or a `created`/`retry`
|
|
33
|
+
* job about to be picked up. Leave it; a re-send would no-op anyway.
|
|
34
|
+
* - `orphaned` — an `active` job whose heartbeat is older than `staleHeartbeatMs`: the worker
|
|
35
|
+
* is gone but its singletonKey is still held, so a re-send no-ops. The caller
|
|
36
|
+
* must {@link reclaimAdvanceJob} to free the key before re-driving.
|
|
37
|
+
* - `missing` — no created/active/retry job at all: a re-send re-drives cleanly.
|
|
38
|
+
*
|
|
39
|
+
* Reaching into pg-boss's schema is acceptable here (this project is pre-1.0, and the runner
|
|
40
|
+
* already depends on the `exclusive`/`singletonKey`/`heartbeatSeconds` internals). The default
|
|
41
|
+
* pg-boss schema is `pgboss`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function classifyAdvanceJob(jobs: JobStore, queue: string, singletonKey: string, staleHeartbeatMs: number, now: number): Promise<AdvanceJobStatus>;
|
|
44
|
+
/** Free an orphaned advance job's singletonKey so a fresh advance can be enqueued. */
|
|
45
|
+
export declare function reclaimAdvanceJob(boss: PgBoss, queue: string, jobId: string): Promise<void>;
|
|
46
|
+
//# sourceMappingURL=reclaim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reclaim.d.ts","sourceRoot":"","sources":["../../src/execution/reclaim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAErC;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC,CAAA;CAC3F;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAA;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED,sFAAsF;AACtF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classify a run's live advance job so the stale-run sweeper can recover an orphan without
|
|
3
|
+
* double-driving a healthy run.
|
|
4
|
+
*
|
|
5
|
+
* The `exclusive` queue policy makes a bare re-`send` an `ON CONFLICT DO NOTHING` no-op while
|
|
6
|
+
* ANY advance job for the run is `created`/`active`/`retry`. That is the whole point for a
|
|
7
|
+
* run that is genuinely being driven — but it also means the sweeper cannot tell (and so
|
|
8
|
+
* cannot recover) an ORPHANED run, whose worker crashed leaving the job stuck `active` with a
|
|
9
|
+
* frozen heartbeat, from a HEALTHY long drive that is merely sleeping between container polls
|
|
10
|
+
* (and still heartbeating its active job). Both look identical to `listStale`, which keys off
|
|
11
|
+
* `agent_runs.updated_at` — and a sleeping drive does not write that between polls.
|
|
12
|
+
*
|
|
13
|
+
* This reads pg-boss's own `heartbeat_on` — the same signal pg-boss maintenance uses to
|
|
14
|
+
* reclaim crashed workers — to disambiguate:
|
|
15
|
+
*
|
|
16
|
+
* - `live` — an `active` job with a fresh heartbeat (a real drive), or a `created`/`retry`
|
|
17
|
+
* job about to be picked up. Leave it; a re-send would no-op anyway.
|
|
18
|
+
* - `orphaned` — an `active` job whose heartbeat is older than `staleHeartbeatMs`: the worker
|
|
19
|
+
* is gone but its singletonKey is still held, so a re-send no-ops. The caller
|
|
20
|
+
* must {@link reclaimAdvanceJob} to free the key before re-driving.
|
|
21
|
+
* - `missing` — no created/active/retry job at all: a re-send re-drives cleanly.
|
|
22
|
+
*
|
|
23
|
+
* Reaching into pg-boss's schema is acceptable here (this project is pre-1.0, and the runner
|
|
24
|
+
* already depends on the `exclusive`/`singletonKey`/`heartbeatSeconds` internals). The default
|
|
25
|
+
* pg-boss schema is `pgboss`.
|
|
26
|
+
*/
|
|
27
|
+
export async function classifyAdvanceJob(jobs, queue, singletonKey, staleHeartbeatMs, now) {
|
|
28
|
+
const { rows } = await jobs.query(`SELECT id, state, (extract(epoch from heartbeat_on) * 1000)::bigint AS heartbeat_ms
|
|
29
|
+
FROM pgboss.job
|
|
30
|
+
WHERE name = $1 AND singleton_key = $2 AND state IN ('created', 'active', 'retry')
|
|
31
|
+
ORDER BY created_on DESC
|
|
32
|
+
LIMIT 1`, [queue, singletonKey]);
|
|
33
|
+
const row = rows[0];
|
|
34
|
+
if (!row)
|
|
35
|
+
return { state: 'missing', jobId: null };
|
|
36
|
+
const jobId = String(row.id);
|
|
37
|
+
// `created`/`retry` jobs are queued and will be (re)driven by a worker without our help.
|
|
38
|
+
if (row.state !== 'active')
|
|
39
|
+
return { state: 'live', jobId };
|
|
40
|
+
const heartbeatMs = row.heartbeat_ms == null ? null : Number(row.heartbeat_ms);
|
|
41
|
+
const fresh = heartbeatMs != null && now - heartbeatMs < staleHeartbeatMs;
|
|
42
|
+
return { state: fresh ? 'live' : 'orphaned', jobId };
|
|
43
|
+
}
|
|
44
|
+
/** Free an orphaned advance job's singletonKey so a fresh advance can be enqueued. */
|
|
45
|
+
export async function reclaimAdvanceJob(boss, queue, jobId) {
|
|
46
|
+
await boss.deleteJob(queue, jobId);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=reclaim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reclaim.js","sourceRoot":"","sources":["../../src/execution/reclaim.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAc,EACd,KAAa,EACb,YAAoB,EACpB,gBAAwB,EACxB,GAAW;IAEX,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B;;;;cAIU,EACV,CAAC,KAAK,EAAE,YAAY,CAAC,CACtB,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5B,yFAAyF;IACzF,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC3D,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAC9E,MAAM,KAAK,GAAG,WAAW,IAAI,IAAI,IAAI,GAAG,GAAG,WAAW,GAAG,gBAAgB,CAAA;IACzE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAA;AACtD,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,KAAa,EAAE,KAAa;IAChF,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../src/repositories/drizzle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../src/repositories/drizzle.ts"],"names":[],"mappings":"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"}
|
|
@@ -384,13 +384,19 @@ class DrizzleAgentRunRepository {
|
|
|
384
384
|
}
|
|
385
385
|
async listStale(olderThanEpochMs) {
|
|
386
386
|
const rows = await this.db
|
|
387
|
-
.select({
|
|
387
|
+
.select({
|
|
388
|
+
workspaceId: agentRuns.workspace_id,
|
|
389
|
+
id: agentRuns.id,
|
|
390
|
+
kind: agentRuns.kind,
|
|
391
|
+
updatedAt: agentRuns.updated_at,
|
|
392
|
+
})
|
|
388
393
|
.from(agentRuns)
|
|
389
394
|
.where(and(eq(agentRuns.status, 'running'), lt(agentRuns.updated_at, olderThanEpochMs)))
|
|
390
395
|
.orderBy(agentRuns.updated_at);
|
|
391
396
|
return rows.map((r) => ({
|
|
392
397
|
workspaceId: r.workspaceId,
|
|
393
398
|
id: r.id,
|
|
399
|
+
updatedAt: r.updatedAt,
|
|
394
400
|
kind: decodeEnum(agentRunKindSchema, r.kind, {
|
|
395
401
|
table: 'agent_runs',
|
|
396
402
|
column: 'kind',
|
|
@@ -398,6 +404,21 @@ class DrizzleAgentRunRepository {
|
|
|
398
404
|
}),
|
|
399
405
|
}));
|
|
400
406
|
}
|
|
407
|
+
async liveRunIds(ids) {
|
|
408
|
+
if (ids.length === 0)
|
|
409
|
+
return [];
|
|
410
|
+
const live = [];
|
|
411
|
+
// Chunk the IN list (batch, not a point-read per id) so a large set stays one query each.
|
|
412
|
+
for (let i = 0; i < ids.length; i += 500) {
|
|
413
|
+
const rows = await this.db
|
|
414
|
+
.select({ id: agentRuns.id })
|
|
415
|
+
.from(agentRuns)
|
|
416
|
+
.where(and(inArray(agentRuns.status, ['running', 'blocked', 'paused', 'pending']), inArray(agentRuns.id, ids.slice(i, i + 500))));
|
|
417
|
+
for (const r of rows)
|
|
418
|
+
live.push(r.id);
|
|
419
|
+
}
|
|
420
|
+
return live;
|
|
421
|
+
}
|
|
401
422
|
}
|
|
402
423
|
function rowToAccount(row) {
|
|
403
424
|
return {
|