@sidequest/engine 1.15.0 → 1.16.0
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/constants.cjs +7 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.ts +7 -1
- package/dist/constants.js +7 -1
- package/dist/constants.js.map +1 -1
- package/dist/engine.cjs +23 -2
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.ts +44 -0
- package/dist/engine.js +24 -3
- package/dist/engine.js.map +1 -1
- package/dist/execution/dispatcher.cjs +5 -2
- package/dist/execution/dispatcher.cjs.map +1 -1
- package/dist/execution/dispatcher.js +5 -2
- package/dist/execution/dispatcher.js.map +1 -1
- package/dist/execution/executor-manager.cjs +62 -26
- package/dist/execution/executor-manager.cjs.map +1 -1
- package/dist/execution/executor-manager.d.ts +13 -1
- package/dist/execution/executor-manager.js +63 -27
- package/dist/execution/executor-manager.js.map +1 -1
- package/dist/index.cjs +5 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/job/job-builder.cjs +1 -0
- package/dist/job/job-builder.cjs.map +1 -1
- package/dist/job/job-builder.js +1 -0
- package/dist/job/job-builder.js.map +1 -1
- package/dist/routines/release-stale-jobs.cjs +1 -0
- package/dist/routines/release-stale-jobs.cjs.map +1 -1
- package/dist/routines/release-stale-jobs.js +1 -0
- package/dist/routines/release-stale-jobs.js.map +1 -1
- package/dist/shared-runner/inline-runner.cjs +44 -0
- package/dist/shared-runner/inline-runner.cjs.map +1 -0
- package/dist/shared-runner/inline-runner.d.ts +35 -0
- package/dist/shared-runner/inline-runner.js +42 -0
- package/dist/shared-runner/inline-runner.js.map +1 -0
- package/dist/shared-runner/job-runner.d.ts +24 -0
- package/dist/shared-runner/runner-pool.cjs +34 -2
- package/dist/shared-runner/runner-pool.cjs.map +1 -1
- package/dist/shared-runner/runner-pool.d.ts +10 -4
- package/dist/shared-runner/runner-pool.js +35 -3
- package/dist/shared-runner/runner-pool.js.map +1 -1
- package/dist/shared-runner/runner.cjs +45 -4
- package/dist/shared-runner/runner.cjs.map +1 -1
- package/dist/shared-runner/runner.d.ts +12 -2
- package/dist/shared-runner/runner.js +46 -5
- package/dist/shared-runner/runner.js.map +1 -1
- package/dist/workers/main.cjs +12 -77
- package/dist/workers/main.cjs.map +1 -1
- package/dist/workers/main.d.ts +1 -22
- package/dist/workers/main.js +12 -77
- package/dist/workers/main.js.map +1 -1
- package/dist/workers/worker-runtime.cjs +88 -0
- package/dist/workers/worker-runtime.cjs.map +1 -0
- package/dist/workers/worker-runtime.d.ts +44 -0
- package/dist/workers/worker-runtime.js +86 -0
- package/dist/workers/worker-runtime.js.map +1 -0
- package/package.json +4 -4
package/dist/constants.cjs
CHANGED
|
@@ -4,7 +4,14 @@ var path = require('path');
|
|
|
4
4
|
|
|
5
5
|
const DEFAULT_WORKER_PATH = path.resolve(__dirname, "workers", "main.cjs");
|
|
6
6
|
const DEFAULT_RUNNER_PATH = path.resolve(__dirname, "shared-runner", "runner.cjs");
|
|
7
|
+
/**
|
|
8
|
+
* argv flag the engine passes when it forks the main worker. The worker module gates its
|
|
9
|
+
* bootstrap on this flag instead of `!!process.send`, so it stays inert when merely imported
|
|
10
|
+
* inside another forked process (e.g. a Vitest `pool: 'forks'` test worker).
|
|
11
|
+
*/
|
|
12
|
+
const WORKER_PROCESS_FLAG = "--sidequest-worker";
|
|
7
13
|
|
|
8
14
|
exports.DEFAULT_RUNNER_PATH = DEFAULT_RUNNER_PATH;
|
|
9
15
|
exports.DEFAULT_WORKER_PATH = DEFAULT_WORKER_PATH;
|
|
16
|
+
exports.WORKER_PROCESS_FLAG = WORKER_PROCESS_FLAG;
|
|
10
17
|
//# sourceMappingURL=constants.cjs.map
|
package/dist/constants.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","sources":["../src/constants.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAEO,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAmB,EAAE,SAAA,EAAA,UAAoB;AAClF,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAmB,EAAE,eAAA,EAAA,YAA4B
|
|
1
|
+
{"version":3,"file":"constants.cjs","sources":["../src/constants.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAEO,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAmB,EAAE,SAAA,EAAA,UAAoB;AAClF,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAmB,EAAE,eAAA,EAAA,YAA4B;AAEjG;;;;AAIG;AACI,MAAM,mBAAmB,GAAG;;;;;;"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
declare const DEFAULT_WORKER_PATH: string;
|
|
2
2
|
declare const DEFAULT_RUNNER_PATH: string;
|
|
3
|
+
/**
|
|
4
|
+
* argv flag the engine passes when it forks the main worker. The worker module gates its
|
|
5
|
+
* bootstrap on this flag instead of `!!process.send`, so it stays inert when merely imported
|
|
6
|
+
* inside another forked process (e.g. a Vitest `pool: 'forks'` test worker).
|
|
7
|
+
*/
|
|
8
|
+
declare const WORKER_PROCESS_FLAG = "--sidequest-worker";
|
|
3
9
|
|
|
4
|
-
export { DEFAULT_RUNNER_PATH, DEFAULT_WORKER_PATH };
|
|
10
|
+
export { DEFAULT_RUNNER_PATH, DEFAULT_WORKER_PATH, WORKER_PROCESS_FLAG };
|
package/dist/constants.js
CHANGED
|
@@ -2,6 +2,12 @@ import path from 'path';
|
|
|
2
2
|
|
|
3
3
|
const DEFAULT_WORKER_PATH = path.resolve(import.meta.dirname, "workers", "main.js");
|
|
4
4
|
const DEFAULT_RUNNER_PATH = path.resolve(import.meta.dirname, "shared-runner", "runner.js");
|
|
5
|
+
/**
|
|
6
|
+
* argv flag the engine passes when it forks the main worker. The worker module gates its
|
|
7
|
+
* bootstrap on this flag instead of `!!process.send`, so it stays inert when merely imported
|
|
8
|
+
* inside another forked process (e.g. a Vitest `pool: 'forks'` test worker).
|
|
9
|
+
*/
|
|
10
|
+
const WORKER_PROCESS_FLAG = "--sidequest-worker";
|
|
5
11
|
|
|
6
|
-
export { DEFAULT_RUNNER_PATH, DEFAULT_WORKER_PATH };
|
|
12
|
+
export { DEFAULT_RUNNER_PATH, DEFAULT_WORKER_PATH, WORKER_PROCESS_FLAG };
|
|
7
13
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEO,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS;AAClF,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW;;;;"}
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEO,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS;AAClF,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW;AAEjG;;;;AAIG;AACI,MAAM,mBAAmB,GAAG;;;;"}
|
package/dist/engine.cjs
CHANGED
|
@@ -17,7 +17,9 @@ require('node:fs');
|
|
|
17
17
|
require('node:url');
|
|
18
18
|
var shutdown = require('./utils/shutdown.cjs');
|
|
19
19
|
var manualLoader = require('./shared-runner/manual-loader.cjs');
|
|
20
|
+
require('node:worker_threads');
|
|
20
21
|
require('piscina');
|
|
22
|
+
var workerRuntime = require('./workers/worker-runtime.cjs');
|
|
21
23
|
|
|
22
24
|
/**
|
|
23
25
|
* The main engine for managing job queues and workers in Sidequest.
|
|
@@ -28,6 +30,11 @@ class Engine {
|
|
|
28
30
|
* This is created when the engine is started and handles job processing.
|
|
29
31
|
*/
|
|
30
32
|
mainWorker;
|
|
33
|
+
/**
|
|
34
|
+
* Worker runtime when the engine runs in-process (`fork: false`).
|
|
35
|
+
* Mutually exclusive with {@link mainWorker}.
|
|
36
|
+
*/
|
|
37
|
+
inProcessRuntime;
|
|
31
38
|
/**
|
|
32
39
|
* Flag indicating whether the engine is currently shutting down.
|
|
33
40
|
* This is used to prevent multiple shutdown attempts and ensure graceful shutdown behavior.
|
|
@@ -59,6 +66,9 @@ class Engine {
|
|
|
59
66
|
json: config?.logger?.json ?? false,
|
|
60
67
|
},
|
|
61
68
|
gracefulShutdown: config?.gracefulShutdown ?? true,
|
|
69
|
+
fork: config?.fork ?? true,
|
|
70
|
+
runner: config?.runner ?? "thread",
|
|
71
|
+
abortGracePeriodMs: config?.abortGracePeriodMs ?? 0,
|
|
62
72
|
minThreads: config?.minThreads ?? os.cpus().length,
|
|
63
73
|
maxThreads: config?.maxThreads ?? os.cpus().length * 2,
|
|
64
74
|
idleWorkerTimeout: config?.idleWorkerTimeout ?? 10_000,
|
|
@@ -138,7 +148,7 @@ class Engine {
|
|
|
138
148
|
* @param config Optional configuration object.
|
|
139
149
|
*/
|
|
140
150
|
async start(config) {
|
|
141
|
-
if (this.mainWorker) {
|
|
151
|
+
if (this.mainWorker || this.inProcessRuntime) {
|
|
142
152
|
core.logger("Engine").warn("Sidequest engine already started");
|
|
143
153
|
return;
|
|
144
154
|
}
|
|
@@ -149,6 +159,13 @@ class Engine {
|
|
|
149
159
|
await grantQueueConfig.grantQueueConfig(dependencyRegistry.dependencyRegistry.get(dependencyRegistry.Dependency.Backend), queue, nonNullConfig.queueDefaults, true);
|
|
150
160
|
}
|
|
151
161
|
}
|
|
162
|
+
if (!nonNullConfig.fork) {
|
|
163
|
+
core.logger("Engine").info("Starting Sidequest in-process (fork disabled)");
|
|
164
|
+
this.inProcessRuntime = new workerRuntime.WorkerRuntime(dependencyRegistry.dependencyRegistry.get(dependencyRegistry.Dependency.Backend), nonNullConfig);
|
|
165
|
+
await this.inProcessRuntime.start();
|
|
166
|
+
shutdown.gracefulShutdown(this.close.bind(this), "Engine", nonNullConfig.gracefulShutdown);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
152
169
|
return new Promise((resolve, reject) => {
|
|
153
170
|
const timeout = setTimeout(() => {
|
|
154
171
|
reject(new Error("Timeout on starting sidequest fork!"));
|
|
@@ -156,7 +173,7 @@ class Engine {
|
|
|
156
173
|
if (!this.mainWorker) {
|
|
157
174
|
const runWorker = () => {
|
|
158
175
|
core.logger("Engine").debug("Starting main worker...");
|
|
159
|
-
this.mainWorker = child_process.fork(constants$1.DEFAULT_WORKER_PATH);
|
|
176
|
+
this.mainWorker = child_process.fork(constants$1.DEFAULT_WORKER_PATH, [constants$1.WORKER_PROCESS_FLAG]);
|
|
160
177
|
core.logger("Engine").debug(`Worker PID: ${this.mainWorker.pid}`);
|
|
161
178
|
this.mainWorker.on("message", (msg) => {
|
|
162
179
|
if (msg === "ready") {
|
|
@@ -208,6 +225,9 @@ class Engine {
|
|
|
208
225
|
this.mainWorker.send({ type: "shutdown" });
|
|
209
226
|
await promise;
|
|
210
227
|
}
|
|
228
|
+
if (this.inProcessRuntime) {
|
|
229
|
+
await this.inProcessRuntime.shutdown();
|
|
230
|
+
}
|
|
211
231
|
try {
|
|
212
232
|
await dependencyRegistry.dependencyRegistry.get(dependencyRegistry.Dependency.Backend)?.close();
|
|
213
233
|
}
|
|
@@ -215,6 +235,7 @@ class Engine {
|
|
|
215
235
|
core.logger("Engine").error("Error closing backend:", error);
|
|
216
236
|
}
|
|
217
237
|
this.mainWorker = undefined;
|
|
238
|
+
this.inProcessRuntime = undefined;
|
|
218
239
|
// Reset the shutting down flag after closing
|
|
219
240
|
// This allows the engine to be reconfigured or restarted later
|
|
220
241
|
shutdown.clearGracefulShutdown();
|
package/dist/engine.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.cjs","sources":["../src/engine.ts"],"sourcesContent":[null],"names":["logger","cpus","MISC_FALLBACK","JOB_BUILDER_FALLBACK","QUEUE_FALLBACK","dependencyRegistry","Dependency","inspect","configureLogger","backend","LazyBackend","resolveScriptPath","existsSync","fileURLToPath","findSidequestJobsScriptInParentDirs","grantQueueConfig","fork","DEFAULT_WORKER_PATH","
|
|
1
|
+
{"version":3,"file":"engine.cjs","sources":["../src/engine.ts"],"sourcesContent":[null],"names":["logger","cpus","MISC_FALLBACK","JOB_BUILDER_FALLBACK","QUEUE_FALLBACK","dependencyRegistry","Dependency","inspect","configureLogger","backend","LazyBackend","resolveScriptPath","existsSync","fileURLToPath","findSidequestJobsScriptInParentDirs","grantQueueConfig","WorkerRuntime","gracefulShutdown","fork","DEFAULT_WORKER_PATH","WORKER_PROCESS_FLAG","ScheduledJobRegistry","clearGracefulShutdown","JobBuilder"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2JA;;AAEG;MACU,MAAM,CAAA;AACjB;;;AAGG;AACK,IAAA,UAAU;AAElB;;;AAGG;AACK,IAAA,gBAAgB;AAExB;;;AAGG;IACK,YAAY,GAAG,KAAK;AAE5B;;;;AAIG;IACH,MAAM,SAAS,CAAC,MAAqB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpBA,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC;AACtD,YAAA,OAAO,IAAI,CAAC,SAAS,EAAG;QAC1B;AACA,QAAA,MAAM,aAAa,GAA4B;AAC7C,YAAA,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE;AAC5B,YAAA,OAAO,EAAE;AACP,gBAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,2BAA2B;AAC9D,gBAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,oBAAoB;AACxD,aAAA;AACD,YAAA,8BAA8B,EAAE,MAAM,EAAE,8BAA8B,IAAI,EAAE;AAC5E,YAAA,4BAA4B,EAAE,MAAM,EAAE,4BAA4B,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAC9F,YAAA,2BAA2B,EAAE,MAAM,EAAE,2BAA2B,IAAI,EAAE;AACtE,YAAA,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,IAAI,EAAE;AAClD,YAAA,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI,KAAK;AAC7C,YAAA,MAAM,EAAE;AACN,gBAAA,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,MAAM;AACtC,gBAAA,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK;AACpC,aAAA;AACD,YAAA,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,IAAI,IAAI;AAClD,YAAA,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI;AAC1B,YAAA,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ;AAClC,YAAA,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,IAAI,CAAC;YACnD,UAAU,EAAE,MAAM,EAAE,UAAU,IAAIC,OAAI,EAAE,CAAC,MAAM;YAC/C,UAAU,EAAE,MAAM,EAAE,UAAU,IAAIA,OAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AACnD,YAAA,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,IAAI,MAAM;YACtD,0BAA0B,EAAE,MAAM,EAAE,0BAA0B,IAAIC,qBAAa,CAAC,UAAU;YAC1F,4BAA4B,EAAE,MAAM,EAAE,4BAA4B,IAAIA,qBAAa,CAAC,YAAY;AAChG,YAAA,WAAW,EAAE;gBACX,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,IAAIC,8BAAoB,CAAC,KAAM;gBAChE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,IAAIA,8BAAoB,CAAC,WAAY;;;AAGlF,gBAAA,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW;gBAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,IAAIA,8BAAoB,CAAC,OAAQ;gBACtE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,IAAIA,8BAAoB,CAAC,UAAW;gBAC/E,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,IAAIA,8BAAoB,CAAC,eAAgB;gBAC9F,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,IAAIA,8BAAoB,CAAC,UAAW;gBAC/E,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,IAAIA,8BAAoB,CAAC,eAAgB;AAC/F,aAAA;AACD,YAAA,aAAa,EAAE;gBACb,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,IAAIC,sBAAc,CAAC,WAAW;gBAC7E,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,IAAIA,sBAAc,CAAC,QAAQ;gBACpE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,IAAIA,sBAAc,CAAC,KAAK;AAC5D,aAAA;AACD,YAAA,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,IAAI,KAAK;YACzD,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE;AAChD,YAAA,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,IAAI,GAAG;SACtD;QACDC,qCAAkB,CAAC,QAAQ,CAACC,6BAAU,CAAC,MAAM,EAAE,aAAa,CAAC;QAE7D,IAAI,CAAC,cAAc,EAAE;AAErB,QAAAN,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA,8BAAA,EAAiCO,YAAO,CAAC,aAAa,CAAC,CAAA,CAAE,CAAC;AAEjF,QAAA,IAAI,aAAa,CAAC,MAAM,EAAE;AACxB,YAAAC,oBAAe,CAAC,aAAa,CAAC,MAAM,CAAC;QACvC;AAEA,QAAA,MAAMC,SAAO,GAAGJ,qCAAkB,CAAC,QAAQ,CAACC,6BAAU,CAAC,OAAO,EAAE,IAAII,mBAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACvG,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AAChC,YAAA,MAAMD,SAAO,CAAC,OAAO,EAAE;QACzB;AAEA,QAAA,OAAO,aAAa;IACtB;AAEA;;;;;;;;;;;;;;;AAeG;IACH,cAAc,GAAA;AACZ,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,QAAA,IAAI,MAAO,CAAC,iBAAiB,KAAK,SAAS,IAAI,MAAO,CAAC,iBAAiB,GAAG,CAAC,EAAE;AAC5E,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sDAAA,CAAwD,CAAC;QAC3E;AAEA,QAAA,IAAI,MAAO,CAAC,mBAAmB,EAAE;AAC/B,YAAA,IAAI,MAAO,CAAC,YAAY,EAAE;gBACxB,MAAM,SAAS,GAAGE,8BAAiB,CAAC,MAAO,CAAC,YAAY,CAAC;gBACzD,IAAI,CAACC,aAAU,CAACC,iBAAa,CAAC,SAAS,CAAC,CAAC,EAAE;AACzC,oBAAA,MAAM,IAAI,KAAK,CAAC,2DAA2D,SAAS,CAAA,CAAE,CAAC;gBACzF;AACA,gBAAAb,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA,2BAAA,EAA8B,MAAO,CAAC,YAAY,CAAA,CAAE,CAAC;AAC3E,gBAAA,MAAO,CAAC,YAAY,GAAG,SAAS;YAClC;iBAAO;;AAEL,gBAAAc,gDAAmC,EAAE;YACvC;QACF;IACF;AAEA;;;AAGG;IACH,MAAM,KAAK,CAAC,MAAoB,EAAA;QAC9B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC5Cd,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC;YACzD;QACF;QAEA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAElD,QAAAA,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA,iCAAA,EAAoC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAA,CAAE,CAAC;AAEzF,QAAA,IAAI,aAAa,CAAC,MAAM,EAAE;AACxB,YAAA,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,EAAE;AACxC,gBAAA,MAAMe,iCAAgB,CAACV,qCAAkB,CAAC,GAAG,CAACC,6BAAU,CAAC,OAAO,CAAE,EAAE,KAAK,EAAE,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC;YAC/G;QACF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;YACvBN,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,+CAA+C,CAAC;AACtE,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAIgB,2BAAa,CAACX,qCAAkB,CAAC,GAAG,CAACC,6BAAU,CAAC,OAAO,CAAE,EAAE,aAAa,CAAC;AACrG,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACnC,YAAAW,yBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC;YACjF;QACF;QAEA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;AAC9B,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YAC1D,CAAC,EAAE,IAAI,CAAC;AAER,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,MAAM,SAAS,GAAG,MAAK;oBACrBjB,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC;oBACjD,IAAI,CAAC,UAAU,GAAGkB,kBAAI,CAACC,+BAAmB,EAAE,CAACC,+BAAmB,CAAC,CAAC;AAClE,oBAAApB,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,UAAU,CAAC,GAAG,CAAA,CAAE,CAAC;oBAC5D,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,KAAI;AACpC,wBAAA,IAAI,GAAG,KAAK,OAAO,EAAE;4BACnBA,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;AAC9C,4BAAA,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;4BACxE,YAAY,CAAC,OAAO,CAAC;AACrB,4BAAA,OAAO,EAAE;wBACX;AACF,oBAAA,CAAC,CAAC;oBAEF,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAK;AAC9B,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;4BACtBA,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,wCAAwC,CAAC;AAChE,4BAAA,SAAS,EAAE;wBACb;AACF,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC;AAED,gBAAA,SAAS,EAAE;AACX,gBAAAiB,yBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC;YACnF;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACH,SAAS,GAAA;QACP,OAAOZ,qCAAkB,CAAC,GAAG,CAACC,6BAAU,CAAC,MAAM,CAAC;IAClD;AAEA;;;AAGG;IACH,UAAU,GAAA;QACR,OAAOD,qCAAkB,CAAC,GAAG,CAACC,6BAAU,CAAC,OAAO,CAAC;IACnD;AAEA;;AAEG;AACH,IAAA,MAAM,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxBN,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC;;AAGrD,YAAA,MAAMqB,iCAAoB,CAAC,OAAO,EAAE;AAEpC,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;oBACtC,IAAI,CAAC,UAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;AACtC,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC1C,gBAAA,MAAM,OAAO;YACf;AACA,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,gBAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YACxC;AACA,YAAA,IAAI;gBACF,MAAMhB,qCAAkB,CAAC,GAAG,CAACC,6BAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;YAC3D;YAAE,OAAO,KAAK,EAAE;gBACdN,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;YACzD;AACA,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;;;AAGjC,YAAAsB,8BAAqB,EAAE;YACvBtB,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC;AAClD,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;;YAEzBK,qCAAkB,CAAC,KAAK,EAAE;QAC5B;IACF;AAEA;;;;AAIG;AACH,IAAA,KAAK,CAAyB,QAAW,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC;QAC5F;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;QAC/D;AACA,QAAAL,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA,wBAAA,EAA2B,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;AAClE,QAAA,OAAO,IAAIuB,qBAAU,CACnB,OAAO,EACP,QAAQ,EACR;YACE,GAAG,MAAM,CAAC,WAAW;;;YAGrB,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,IAAIpB,8BAAoB,CAAC,WAAY;AACjF,SAAA,EACD,MAAM,CAAC,mBAAmB,CAC3B;IACH;AACD;;;;"}
|
package/dist/engine.d.ts
CHANGED
|
@@ -30,6 +30,45 @@ interface EngineConfig {
|
|
|
30
30
|
cleanupFinishedJobsOlderThan?: number;
|
|
31
31
|
/** Whether to enable graceful shutdown handling. Defaults to `true` */
|
|
32
32
|
gracefulShutdown?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Whether to run the engine in a forked child process.
|
|
35
|
+
*
|
|
36
|
+
* - `true` (default): the engine runs in a `child_process.fork`, isolating job-code crashes from
|
|
37
|
+
* the host application.
|
|
38
|
+
* - `false`: the engine runs in the host process. A crash in job code can take down the host, but
|
|
39
|
+
* jobs can reach live in-process state. Useful for single-process setups (serverless, tests)
|
|
40
|
+
* and required by framework integrations that rely on in-process execution.
|
|
41
|
+
*
|
|
42
|
+
* Defaults to `true`.
|
|
43
|
+
*/
|
|
44
|
+
fork?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* How jobs are executed.
|
|
47
|
+
*
|
|
48
|
+
* - `"thread"` (default): jobs run in a pool of worker threads (piscina). Gives CPU isolation
|
|
49
|
+
* and lets timeouts/cancellation forcibly abort a running job.
|
|
50
|
+
* - `"inline"`: jobs run in the current process/thread, with no worker pool. A running job cannot
|
|
51
|
+
* be forcibly terminated, so timeouts and cancellation are delivered cooperatively via
|
|
52
|
+
* `this.abortSignal` inside the job (the job must honor it to stop early); a job that ignores it
|
|
53
|
+
* runs to completion, and a CPU-bound job will block the event loop. Useful for single-process
|
|
54
|
+
* setups (serverless, tests, SQLite) and required when jobs need access to live in-process state.
|
|
55
|
+
*
|
|
56
|
+
* Defaults to `"thread"`.
|
|
57
|
+
*/
|
|
58
|
+
runner?: "thread" | "inline";
|
|
59
|
+
/**
|
|
60
|
+
* Grace period, in milliseconds, between cooperatively aborting a running job (timeout or
|
|
61
|
+
* cancellation) and forcibly terminating its worker thread.
|
|
62
|
+
*
|
|
63
|
+
* Only applies to `runner: "thread"`. When greater than `0`, the abort is first delivered to the
|
|
64
|
+
* job via `this.abortSignal` so it can stop and clean up; if it has not finished after this many
|
|
65
|
+
* milliseconds, the worker thread is terminated. When `0` (default), the worker is terminated
|
|
66
|
+
* immediately with no cooperative window, preserving the previous behavior. Has no effect in
|
|
67
|
+
* `runner: "inline"` (there is no thread to terminate).
|
|
68
|
+
*
|
|
69
|
+
* Defaults to `0`.
|
|
70
|
+
*/
|
|
71
|
+
abortGracePeriodMs?: number;
|
|
33
72
|
/** Minimum number of worker threads to use. Defaults to number of CPUs */
|
|
34
73
|
minThreads?: number;
|
|
35
74
|
/** Maximum number of worker threads to use. Defaults to `minThreads * 2` */
|
|
@@ -110,6 +149,11 @@ declare class Engine {
|
|
|
110
149
|
* This is created when the engine is started and handles job processing.
|
|
111
150
|
*/
|
|
112
151
|
private mainWorker?;
|
|
152
|
+
/**
|
|
153
|
+
* Worker runtime when the engine runs in-process (`fork: false`).
|
|
154
|
+
* Mutually exclusive with {@link mainWorker}.
|
|
155
|
+
*/
|
|
156
|
+
private inProcessRuntime?;
|
|
113
157
|
/**
|
|
114
158
|
* Flag indicating whether the engine is currently shutting down.
|
|
115
159
|
* This is used to prevent multiple shutdown attempts and ensure graceful shutdown behavior.
|
package/dist/engine.js
CHANGED
|
@@ -5,7 +5,7 @@ import { existsSync } from 'fs';
|
|
|
5
5
|
import { cpus } from 'os';
|
|
6
6
|
import { fileURLToPath } from 'url';
|
|
7
7
|
import { inspect } from 'util';
|
|
8
|
-
import { DEFAULT_WORKER_PATH } from './constants.js';
|
|
8
|
+
import { DEFAULT_WORKER_PATH, WORKER_PROCESS_FLAG } from './constants.js';
|
|
9
9
|
import { dependencyRegistry, Dependency } from './dependency-registry.js';
|
|
10
10
|
import { JOB_BUILDER_FALLBACK } from './job/constants.js';
|
|
11
11
|
import { ScheduledJobRegistry } from './job/cron-registry.js';
|
|
@@ -15,7 +15,9 @@ import 'node:fs';
|
|
|
15
15
|
import 'node:url';
|
|
16
16
|
import { gracefulShutdown, clearGracefulShutdown } from './utils/shutdown.js';
|
|
17
17
|
import { resolveScriptPath, findSidequestJobsScriptInParentDirs } from './shared-runner/manual-loader.js';
|
|
18
|
+
import 'node:worker_threads';
|
|
18
19
|
import 'piscina';
|
|
20
|
+
import { WorkerRuntime } from './workers/worker-runtime.js';
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* The main engine for managing job queues and workers in Sidequest.
|
|
@@ -26,6 +28,11 @@ class Engine {
|
|
|
26
28
|
* This is created when the engine is started and handles job processing.
|
|
27
29
|
*/
|
|
28
30
|
mainWorker;
|
|
31
|
+
/**
|
|
32
|
+
* Worker runtime when the engine runs in-process (`fork: false`).
|
|
33
|
+
* Mutually exclusive with {@link mainWorker}.
|
|
34
|
+
*/
|
|
35
|
+
inProcessRuntime;
|
|
29
36
|
/**
|
|
30
37
|
* Flag indicating whether the engine is currently shutting down.
|
|
31
38
|
* This is used to prevent multiple shutdown attempts and ensure graceful shutdown behavior.
|
|
@@ -57,6 +64,9 @@ class Engine {
|
|
|
57
64
|
json: config?.logger?.json ?? false,
|
|
58
65
|
},
|
|
59
66
|
gracefulShutdown: config?.gracefulShutdown ?? true,
|
|
67
|
+
fork: config?.fork ?? true,
|
|
68
|
+
runner: config?.runner ?? "thread",
|
|
69
|
+
abortGracePeriodMs: config?.abortGracePeriodMs ?? 0,
|
|
60
70
|
minThreads: config?.minThreads ?? cpus().length,
|
|
61
71
|
maxThreads: config?.maxThreads ?? cpus().length * 2,
|
|
62
72
|
idleWorkerTimeout: config?.idleWorkerTimeout ?? 10_000,
|
|
@@ -136,7 +146,7 @@ class Engine {
|
|
|
136
146
|
* @param config Optional configuration object.
|
|
137
147
|
*/
|
|
138
148
|
async start(config) {
|
|
139
|
-
if (this.mainWorker) {
|
|
149
|
+
if (this.mainWorker || this.inProcessRuntime) {
|
|
140
150
|
logger("Engine").warn("Sidequest engine already started");
|
|
141
151
|
return;
|
|
142
152
|
}
|
|
@@ -147,6 +157,13 @@ class Engine {
|
|
|
147
157
|
await grantQueueConfig(dependencyRegistry.get(Dependency.Backend), queue, nonNullConfig.queueDefaults, true);
|
|
148
158
|
}
|
|
149
159
|
}
|
|
160
|
+
if (!nonNullConfig.fork) {
|
|
161
|
+
logger("Engine").info("Starting Sidequest in-process (fork disabled)");
|
|
162
|
+
this.inProcessRuntime = new WorkerRuntime(dependencyRegistry.get(Dependency.Backend), nonNullConfig);
|
|
163
|
+
await this.inProcessRuntime.start();
|
|
164
|
+
gracefulShutdown(this.close.bind(this), "Engine", nonNullConfig.gracefulShutdown);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
150
167
|
return new Promise((resolve, reject) => {
|
|
151
168
|
const timeout = setTimeout(() => {
|
|
152
169
|
reject(new Error("Timeout on starting sidequest fork!"));
|
|
@@ -154,7 +171,7 @@ class Engine {
|
|
|
154
171
|
if (!this.mainWorker) {
|
|
155
172
|
const runWorker = () => {
|
|
156
173
|
logger("Engine").debug("Starting main worker...");
|
|
157
|
-
this.mainWorker = fork(DEFAULT_WORKER_PATH);
|
|
174
|
+
this.mainWorker = fork(DEFAULT_WORKER_PATH, [WORKER_PROCESS_FLAG]);
|
|
158
175
|
logger("Engine").debug(`Worker PID: ${this.mainWorker.pid}`);
|
|
159
176
|
this.mainWorker.on("message", (msg) => {
|
|
160
177
|
if (msg === "ready") {
|
|
@@ -206,6 +223,9 @@ class Engine {
|
|
|
206
223
|
this.mainWorker.send({ type: "shutdown" });
|
|
207
224
|
await promise;
|
|
208
225
|
}
|
|
226
|
+
if (this.inProcessRuntime) {
|
|
227
|
+
await this.inProcessRuntime.shutdown();
|
|
228
|
+
}
|
|
209
229
|
try {
|
|
210
230
|
await dependencyRegistry.get(Dependency.Backend)?.close();
|
|
211
231
|
}
|
|
@@ -213,6 +233,7 @@ class Engine {
|
|
|
213
233
|
logger("Engine").error("Error closing backend:", error);
|
|
214
234
|
}
|
|
215
235
|
this.mainWorker = undefined;
|
|
236
|
+
this.inProcessRuntime = undefined;
|
|
216
237
|
// Reset the shutting down flag after closing
|
|
217
238
|
// This allows the engine to be reconfigured or restarted later
|
|
218
239
|
clearGracefulShutdown();
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sources":["../src/engine.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine.js","sources":["../src/engine.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -55,8 +55,11 @@ class Dispatcher {
|
|
|
55
55
|
// because the execution is not awaited. This way we ensure that available slots
|
|
56
56
|
// are correctly calculated.
|
|
57
57
|
this.executorManager.queueJob(queue, job);
|
|
58
|
-
// does not await for job execution.
|
|
59
|
-
|
|
58
|
+
// does not await for job execution. Guard against any unexpected rejection so a single
|
|
59
|
+
// job can never crash the engine with an unhandled promise rejection.
|
|
60
|
+
void this.executorManager.execute(queue, job).catch((error) => {
|
|
61
|
+
core.logger("Dispatcher").error(`Unexpected error executing job ${job.id}:`, error);
|
|
62
|
+
});
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
if (shouldSleep) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.cjs","sources":["../../src/execution/dispatcher.ts"],"sourcesContent":[null],"names":["logger"],"mappings":";;;;AAKA;;AAEG;MACU,UAAU,CAAA;AAWX,IAAA,OAAA;AACA,IAAA,YAAA;AACA,IAAA,eAAA;AACA,IAAA,UAAA;;IAZF,SAAS,GAAG,KAAK;AAEzB;;;;;AAKG;AACH,IAAA,WAAA,CACU,OAAgB,EAChB,YAA0B,EAC1B,eAAgC,EAChC,UAAkB,EAAA;QAHlB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,UAAU,GAAV,UAAU;IACjB;AAEH;;;AAGG;AACK,IAAA,MAAM,MAAM,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,+BAA+B,EAAE;YAExE,IAAI,WAAW,GAAG,IAAI;AAEtB,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACxE,gBAAA,IAAI,cAAc,IAAI,CAAC,EAAE;AACvB,oBAAAA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,MAAA,EAAS,KAAK,CAAC,IAAI,CAAA,eAAA,CAAiB,CAAC;oBAChE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;oBACjC;gBACF;gBAEA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;AAC/D,gBAAA,IAAI,WAAW,IAAI,CAAC,EAAE;oBACpBA,WAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,iCAAA,CAAmC,CAAC;oBAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;oBACjC;gBACF;gBAEA,MAAM,IAAI,GAAc,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AAE7G,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;;oBAEnB,WAAW,GAAG,KAAK;gBACrB;AAEA,gBAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;;;;oBAItB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"dispatcher.cjs","sources":["../../src/execution/dispatcher.ts"],"sourcesContent":[null],"names":["logger"],"mappings":"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"}
|
|
@@ -53,8 +53,11 @@ class Dispatcher {
|
|
|
53
53
|
// because the execution is not awaited. This way we ensure that available slots
|
|
54
54
|
// are correctly calculated.
|
|
55
55
|
this.executorManager.queueJob(queue, job);
|
|
56
|
-
// does not await for job execution.
|
|
57
|
-
|
|
56
|
+
// does not await for job execution. Guard against any unexpected rejection so a single
|
|
57
|
+
// job can never crash the engine with an unhandled promise rejection.
|
|
58
|
+
void this.executorManager.execute(queue, job).catch((error) => {
|
|
59
|
+
logger("Dispatcher").error(`Unexpected error executing job ${job.id}:`, error);
|
|
60
|
+
});
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
63
|
if (shouldSleep) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sources":["../../src/execution/dispatcher.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAKA;;AAEG;MACU,UAAU,CAAA;AAWX,IAAA,OAAA;AACA,IAAA,YAAA;AACA,IAAA,eAAA;AACA,IAAA,UAAA;;IAZF,SAAS,GAAG,KAAK;AAEzB;;;;;AAKG;AACH,IAAA,WAAA,CACU,OAAgB,EAChB,YAA0B,EAC1B,eAAgC,EAChC,UAAkB,EAAA;QAHlB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,UAAU,GAAV,UAAU;IACjB;AAEH;;;AAGG;AACK,IAAA,MAAM,MAAM,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,+BAA+B,EAAE;YAExE,IAAI,WAAW,GAAG,IAAI;AAEtB,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACxE,gBAAA,IAAI,cAAc,IAAI,CAAC,EAAE;AACvB,oBAAA,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,MAAA,EAAS,KAAK,CAAC,IAAI,CAAA,eAAA,CAAiB,CAAC;oBAChE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;oBACjC;gBACF;gBAEA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;AAC/D,gBAAA,IAAI,WAAW,IAAI,CAAC,EAAE;oBACpB,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAA,iCAAA,CAAmC,CAAC;oBAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;oBACjC;gBACF;gBAEA,MAAM,IAAI,GAAc,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AAE7G,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;;oBAEnB,WAAW,GAAG,KAAK;gBACrB;AAEA,gBAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;;;;oBAItB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sources":["../../src/execution/dispatcher.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var core = require('@sidequest/core');
|
|
4
|
-
var EventEmitter = require('events');
|
|
5
4
|
var util = require('util');
|
|
6
5
|
var jobTransitioner = require('../job/job-transitioner.cjs');
|
|
7
6
|
require('node:fs');
|
|
8
7
|
require('node:url');
|
|
9
8
|
require('node:path');
|
|
9
|
+
var inlineRunner = require('../shared-runner/inline-runner.cjs');
|
|
10
10
|
var runnerPool = require('../shared-runner/runner-pool.cjs');
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -17,7 +17,7 @@ class ExecutorManager {
|
|
|
17
17
|
nonNullConfig;
|
|
18
18
|
activeByQueue;
|
|
19
19
|
activeJobs;
|
|
20
|
-
|
|
20
|
+
jobRunner;
|
|
21
21
|
/**
|
|
22
22
|
* Creates a new ExecutorManager.
|
|
23
23
|
* @param backend The backend instance.
|
|
@@ -28,7 +28,10 @@ class ExecutorManager {
|
|
|
28
28
|
this.nonNullConfig = nonNullConfig;
|
|
29
29
|
this.activeByQueue = {};
|
|
30
30
|
this.activeJobs = new Set();
|
|
31
|
-
this.
|
|
31
|
+
this.jobRunner =
|
|
32
|
+
this.nonNullConfig.runner === "inline"
|
|
33
|
+
? new inlineRunner.InlineRunner(this.nonNullConfig)
|
|
34
|
+
: new runnerPool.RunnerPool(this.nonNullConfig);
|
|
32
35
|
}
|
|
33
36
|
/**
|
|
34
37
|
* Gets the number of available slots for a given queue.
|
|
@@ -85,6 +88,8 @@ class ExecutorManager {
|
|
|
85
88
|
*/
|
|
86
89
|
async execute(queueConfig, job) {
|
|
87
90
|
let isRunning = false;
|
|
91
|
+
const controller = new AbortController();
|
|
92
|
+
let timeoutHandle;
|
|
88
93
|
try {
|
|
89
94
|
core.logger("Executor Manager").debug(`Submitting job ${job.id} for execution in queue ${queueConfig.name}`);
|
|
90
95
|
// We call prepareJob here again to make sure the jobs are in the queues.
|
|
@@ -92,54 +97,85 @@ class ExecutorManager {
|
|
|
92
97
|
this.queueJob(queueConfig, job);
|
|
93
98
|
job = await jobTransitioner.JobTransitioner.apply(this.backend, job, new core.RunTransition());
|
|
94
99
|
isRunning = true;
|
|
95
|
-
const signal = new EventEmitter();
|
|
96
100
|
const cancellationCheck = async () => {
|
|
97
101
|
while (isRunning) {
|
|
98
102
|
const watchedJob = await this.backend.getJob(job.id);
|
|
99
|
-
if (watchedJob
|
|
100
|
-
core.logger("Executor Manager").debug(`
|
|
101
|
-
|
|
103
|
+
if (watchedJob?.state === "canceled") {
|
|
104
|
+
core.logger("Executor Manager").debug(`Aborting job ${job.id}: canceled`);
|
|
105
|
+
controller.abort(new core.JobCanceled());
|
|
102
106
|
isRunning = false;
|
|
103
107
|
return;
|
|
104
108
|
}
|
|
105
109
|
await new Promise((r) => setTimeout(r, 1000));
|
|
106
110
|
}
|
|
107
111
|
};
|
|
108
|
-
void cancellationCheck()
|
|
112
|
+
void cancellationCheck().catch((error) => {
|
|
113
|
+
core.logger("Executor Manager").error(`Cancellation watcher for job ${job.id} failed:`, error);
|
|
114
|
+
});
|
|
109
115
|
core.logger("Executor Manager").debug(`Running job ${job.id} in queue ${queueConfig.name}`);
|
|
110
|
-
const runPromise = this.
|
|
116
|
+
const runPromise = this.jobRunner.run(job, controller.signal);
|
|
111
117
|
if (job.timeout) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
});
|
|
118
|
+
// Only signal the abort here. The terminal transition is decided when the run actually ends
|
|
119
|
+
// (resolve or reject) so a still-running job is never re-queued underneath itself.
|
|
120
|
+
timeoutHandle = setTimeout(() => {
|
|
121
|
+
core.logger("Executor Manager").debug(`Job ${job.id} timed out after ${job.timeout}ms, aborting.`);
|
|
122
|
+
controller.abort(new core.JobTimeout(job.timeout));
|
|
123
|
+
}, job.timeout);
|
|
119
124
|
}
|
|
120
125
|
const result = await runPromise;
|
|
121
126
|
isRunning = false;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
127
|
+
// The job ran to a conclusion and returned a state (even if a timeout/cancel was signaled);
|
|
128
|
+
// respect it and transition accordingly.
|
|
129
|
+
core.logger("Executor Manager").debug(`Job ${job.id} settled with result: ${util.inspect(result)}`);
|
|
130
|
+
await this.applyTerminalTransition(job, core.JobTransitionFactory.create(result));
|
|
125
131
|
}
|
|
126
132
|
catch (error) {
|
|
127
133
|
isRunning = false;
|
|
128
134
|
const err = error;
|
|
129
|
-
if (
|
|
130
|
-
|
|
135
|
+
if (controller.signal.aborted) {
|
|
136
|
+
// The run produced no result because the worker was hard-killed (thread). Only a clear
|
|
137
|
+
// cancellation maps to canceled; every other abort reason (timeout, or anything else) defaults
|
|
138
|
+
// to a retry as a failsafe. The rejection is logged so a real error during the abort is kept.
|
|
139
|
+
const reason = controller.signal.reason;
|
|
140
|
+
core.logger("Executor Manager").debug(`Job ${job.id} was hard-killed (${String(reason)}): ${err.message}`);
|
|
141
|
+
const transition = reason instanceof core.JobCanceled
|
|
142
|
+
? new core.CancelTransition()
|
|
143
|
+
: new core.RetryTransition(reason instanceof Error ? reason : new Error(`Job aborted: ${String(reason)}`));
|
|
144
|
+
await this.applyTerminalTransition(job, transition);
|
|
131
145
|
}
|
|
132
146
|
else {
|
|
133
147
|
core.logger("Executor Manager").error(`Unhandled error while executing job ${job.id}: ${err.message}`);
|
|
134
|
-
await
|
|
148
|
+
await this.applyTerminalTransition(job, new core.RetryTransition(err));
|
|
135
149
|
}
|
|
136
150
|
}
|
|
137
151
|
finally {
|
|
138
152
|
isRunning = false;
|
|
153
|
+
if (timeoutHandle) {
|
|
154
|
+
clearTimeout(timeoutHandle);
|
|
155
|
+
}
|
|
139
156
|
this.activeByQueue[queueConfig.name].delete(job.id);
|
|
140
157
|
this.activeJobs.delete(job.id);
|
|
141
158
|
}
|
|
142
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Applies a job's final transition, tolerating the job row having disappeared.
|
|
162
|
+
*
|
|
163
|
+
* A job's row can be deleted while it runs (cleanup routine, an explicit delete, or a test
|
|
164
|
+
* truncating the table). Recording its terminal state is then impossible and safe to skip. This
|
|
165
|
+
* must never throw: `execute` is fire-and-forget, so an error here would surface as an unhandled
|
|
166
|
+
* rejection.
|
|
167
|
+
*
|
|
168
|
+
* @param job The job being finalized.
|
|
169
|
+
* @param transition The terminal transition to apply.
|
|
170
|
+
*/
|
|
171
|
+
async applyTerminalTransition(job, transition) {
|
|
172
|
+
try {
|
|
173
|
+
await jobTransitioner.JobTransitioner.apply(this.backend, job, transition);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
core.logger("Executor Manager").warn(`Could not record terminal state for job ${job.id} (it may no longer exist): ${error instanceof Error ? error.message : String(error)}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
143
179
|
/**
|
|
144
180
|
* Destroys the runner pool and releases resources.
|
|
145
181
|
*/
|
|
@@ -147,14 +183,14 @@ class ExecutorManager {
|
|
|
147
183
|
await new Promise((resolve, reject) => {
|
|
148
184
|
const checkJobs = () => {
|
|
149
185
|
if (this.totalActiveWorkers() === 0) {
|
|
150
|
-
core.logger("ExecutorManager").info("All active jobs finished. Destroying runner
|
|
186
|
+
core.logger("ExecutorManager").info("All active jobs finished. Destroying runner.");
|
|
151
187
|
try {
|
|
152
|
-
this.
|
|
153
|
-
core.logger("ExecutorManager").debug("Runner
|
|
188
|
+
this.jobRunner.destroy();
|
|
189
|
+
core.logger("ExecutorManager").debug("Runner destroyed. Returning.");
|
|
154
190
|
resolve();
|
|
155
191
|
}
|
|
156
192
|
catch (error) {
|
|
157
|
-
core.logger("ExecutorManager").error("Error while destroying runner
|
|
193
|
+
core.logger("ExecutorManager").error("Error while destroying runner:", error);
|
|
158
194
|
reject(error);
|
|
159
195
|
}
|
|
160
196
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor-manager.cjs","sources":["../../src/execution/executor-manager.ts"],"sourcesContent":[null],"names":["RunnerPool","logger","JobTransitioner","RunTransition","
|
|
1
|
+
{"version":3,"file":"executor-manager.cjs","sources":["../../src/execution/executor-manager.ts"],"sourcesContent":[null],"names":["InlineRunner","RunnerPool","logger","JobTransitioner","RunTransition","JobCanceled","JobTimeout","inspect","JobTransitionFactory","CancelTransition","RetryTransition"],"mappings":"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"}
|