@sidequest/engine 1.15.1 → 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/engine.cjs +22 -1
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.ts +44 -0
- package/dist/engine.js +22 -1
- 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 +4 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- 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 +6 -76
- package/dist/workers/main.cjs.map +1 -1
- package/dist/workers/main.d.ts +1 -22
- package/dist/workers/main.js +6 -76
- 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
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { logger, RunTransition,
|
|
2
|
-
import EventEmitter from 'events';
|
|
1
|
+
import { logger, RunTransition, JobCanceled, JobTimeout, JobTransitionFactory, CancelTransition, RetryTransition } from '@sidequest/core';
|
|
3
2
|
import { inspect } from 'util';
|
|
4
3
|
import { JobTransitioner } from '../job/job-transitioner.js';
|
|
5
4
|
import 'node:fs';
|
|
6
5
|
import 'node:url';
|
|
7
6
|
import 'node:path';
|
|
7
|
+
import { InlineRunner } from '../shared-runner/inline-runner.js';
|
|
8
8
|
import { RunnerPool } from '../shared-runner/runner-pool.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -15,7 +15,7 @@ class ExecutorManager {
|
|
|
15
15
|
nonNullConfig;
|
|
16
16
|
activeByQueue;
|
|
17
17
|
activeJobs;
|
|
18
|
-
|
|
18
|
+
jobRunner;
|
|
19
19
|
/**
|
|
20
20
|
* Creates a new ExecutorManager.
|
|
21
21
|
* @param backend The backend instance.
|
|
@@ -26,7 +26,10 @@ class ExecutorManager {
|
|
|
26
26
|
this.nonNullConfig = nonNullConfig;
|
|
27
27
|
this.activeByQueue = {};
|
|
28
28
|
this.activeJobs = new Set();
|
|
29
|
-
this.
|
|
29
|
+
this.jobRunner =
|
|
30
|
+
this.nonNullConfig.runner === "inline"
|
|
31
|
+
? new InlineRunner(this.nonNullConfig)
|
|
32
|
+
: new RunnerPool(this.nonNullConfig);
|
|
30
33
|
}
|
|
31
34
|
/**
|
|
32
35
|
* Gets the number of available slots for a given queue.
|
|
@@ -83,6 +86,8 @@ class ExecutorManager {
|
|
|
83
86
|
*/
|
|
84
87
|
async execute(queueConfig, job) {
|
|
85
88
|
let isRunning = false;
|
|
89
|
+
const controller = new AbortController();
|
|
90
|
+
let timeoutHandle;
|
|
86
91
|
try {
|
|
87
92
|
logger("Executor Manager").debug(`Submitting job ${job.id} for execution in queue ${queueConfig.name}`);
|
|
88
93
|
// We call prepareJob here again to make sure the jobs are in the queues.
|
|
@@ -90,54 +95,85 @@ class ExecutorManager {
|
|
|
90
95
|
this.queueJob(queueConfig, job);
|
|
91
96
|
job = await JobTransitioner.apply(this.backend, job, new RunTransition());
|
|
92
97
|
isRunning = true;
|
|
93
|
-
const signal = new EventEmitter();
|
|
94
98
|
const cancellationCheck = async () => {
|
|
95
99
|
while (isRunning) {
|
|
96
100
|
const watchedJob = await this.backend.getJob(job.id);
|
|
97
|
-
if (watchedJob
|
|
98
|
-
logger("Executor Manager").debug(`
|
|
99
|
-
|
|
101
|
+
if (watchedJob?.state === "canceled") {
|
|
102
|
+
logger("Executor Manager").debug(`Aborting job ${job.id}: canceled`);
|
|
103
|
+
controller.abort(new JobCanceled());
|
|
100
104
|
isRunning = false;
|
|
101
105
|
return;
|
|
102
106
|
}
|
|
103
107
|
await new Promise((r) => setTimeout(r, 1000));
|
|
104
108
|
}
|
|
105
109
|
};
|
|
106
|
-
void cancellationCheck()
|
|
110
|
+
void cancellationCheck().catch((error) => {
|
|
111
|
+
logger("Executor Manager").error(`Cancellation watcher for job ${job.id} failed:`, error);
|
|
112
|
+
});
|
|
107
113
|
logger("Executor Manager").debug(`Running job ${job.id} in queue ${queueConfig.name}`);
|
|
108
|
-
const runPromise = this.
|
|
114
|
+
const runPromise = this.jobRunner.run(job, controller.signal);
|
|
109
115
|
if (job.timeout) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
});
|
|
116
|
+
// Only signal the abort here. The terminal transition is decided when the run actually ends
|
|
117
|
+
// (resolve or reject) so a still-running job is never re-queued underneath itself.
|
|
118
|
+
timeoutHandle = setTimeout(() => {
|
|
119
|
+
logger("Executor Manager").debug(`Job ${job.id} timed out after ${job.timeout}ms, aborting.`);
|
|
120
|
+
controller.abort(new JobTimeout(job.timeout));
|
|
121
|
+
}, job.timeout);
|
|
117
122
|
}
|
|
118
123
|
const result = await runPromise;
|
|
119
124
|
isRunning = false;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
125
|
+
// The job ran to a conclusion and returned a state (even if a timeout/cancel was signaled);
|
|
126
|
+
// respect it and transition accordingly.
|
|
127
|
+
logger("Executor Manager").debug(`Job ${job.id} settled with result: ${inspect(result)}`);
|
|
128
|
+
await this.applyTerminalTransition(job, JobTransitionFactory.create(result));
|
|
123
129
|
}
|
|
124
130
|
catch (error) {
|
|
125
131
|
isRunning = false;
|
|
126
132
|
const err = error;
|
|
127
|
-
if (
|
|
128
|
-
|
|
133
|
+
if (controller.signal.aborted) {
|
|
134
|
+
// The run produced no result because the worker was hard-killed (thread). Only a clear
|
|
135
|
+
// cancellation maps to canceled; every other abort reason (timeout, or anything else) defaults
|
|
136
|
+
// to a retry as a failsafe. The rejection is logged so a real error during the abort is kept.
|
|
137
|
+
const reason = controller.signal.reason;
|
|
138
|
+
logger("Executor Manager").debug(`Job ${job.id} was hard-killed (${String(reason)}): ${err.message}`);
|
|
139
|
+
const transition = reason instanceof JobCanceled
|
|
140
|
+
? new CancelTransition()
|
|
141
|
+
: new RetryTransition(reason instanceof Error ? reason : new Error(`Job aborted: ${String(reason)}`));
|
|
142
|
+
await this.applyTerminalTransition(job, transition);
|
|
129
143
|
}
|
|
130
144
|
else {
|
|
131
145
|
logger("Executor Manager").error(`Unhandled error while executing job ${job.id}: ${err.message}`);
|
|
132
|
-
await
|
|
146
|
+
await this.applyTerminalTransition(job, new RetryTransition(err));
|
|
133
147
|
}
|
|
134
148
|
}
|
|
135
149
|
finally {
|
|
136
150
|
isRunning = false;
|
|
151
|
+
if (timeoutHandle) {
|
|
152
|
+
clearTimeout(timeoutHandle);
|
|
153
|
+
}
|
|
137
154
|
this.activeByQueue[queueConfig.name].delete(job.id);
|
|
138
155
|
this.activeJobs.delete(job.id);
|
|
139
156
|
}
|
|
140
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Applies a job's final transition, tolerating the job row having disappeared.
|
|
160
|
+
*
|
|
161
|
+
* A job's row can be deleted while it runs (cleanup routine, an explicit delete, or a test
|
|
162
|
+
* truncating the table). Recording its terminal state is then impossible and safe to skip. This
|
|
163
|
+
* must never throw: `execute` is fire-and-forget, so an error here would surface as an unhandled
|
|
164
|
+
* rejection.
|
|
165
|
+
*
|
|
166
|
+
* @param job The job being finalized.
|
|
167
|
+
* @param transition The terminal transition to apply.
|
|
168
|
+
*/
|
|
169
|
+
async applyTerminalTransition(job, transition) {
|
|
170
|
+
try {
|
|
171
|
+
await JobTransitioner.apply(this.backend, job, transition);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
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)}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
141
177
|
/**
|
|
142
178
|
* Destroys the runner pool and releases resources.
|
|
143
179
|
*/
|
|
@@ -145,14 +181,14 @@ class ExecutorManager {
|
|
|
145
181
|
await new Promise((resolve, reject) => {
|
|
146
182
|
const checkJobs = () => {
|
|
147
183
|
if (this.totalActiveWorkers() === 0) {
|
|
148
|
-
logger("ExecutorManager").info("All active jobs finished. Destroying runner
|
|
184
|
+
logger("ExecutorManager").info("All active jobs finished. Destroying runner.");
|
|
149
185
|
try {
|
|
150
|
-
this.
|
|
151
|
-
logger("ExecutorManager").debug("Runner
|
|
186
|
+
this.jobRunner.destroy();
|
|
187
|
+
logger("ExecutorManager").debug("Runner destroyed. Returning.");
|
|
152
188
|
resolve();
|
|
153
189
|
}
|
|
154
190
|
catch (error) {
|
|
155
|
-
logger("ExecutorManager").error("Error while destroying runner
|
|
191
|
+
logger("ExecutorManager").error("Error while destroying runner:", error);
|
|
156
192
|
reject(error);
|
|
157
193
|
}
|
|
158
194
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor-manager.js","sources":["../../src/execution/executor-manager.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"executor-manager.js","sources":["../../src/execution/executor-manager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -13,11 +13,13 @@ var grantQueueConfig = require('./queue/grant-queue-config.cjs');
|
|
|
13
13
|
var cleanupFinishedJob = require('./routines/cleanup-finished-job.cjs');
|
|
14
14
|
var releaseStaleJobs = require('./routines/release-stale-jobs.cjs');
|
|
15
15
|
var runner = require('./shared-runner/runner.cjs');
|
|
16
|
+
var inlineRunner = require('./shared-runner/inline-runner.cjs');
|
|
16
17
|
var manualLoader = require('./shared-runner/manual-loader.cjs');
|
|
17
18
|
var runnerPool = require('./shared-runner/runner-pool.cjs');
|
|
18
19
|
var _import = require('./utils/import.cjs');
|
|
19
20
|
var shutdown = require('./utils/shutdown.cjs');
|
|
20
21
|
var main = require('./workers/main.cjs');
|
|
22
|
+
var workerRuntime = require('./workers/worker-runtime.cjs');
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
|
|
@@ -37,6 +39,7 @@ exports.grantQueueConfig = grantQueueConfig.grantQueueConfig;
|
|
|
37
39
|
exports.cleanupFinishedJobs = cleanupFinishedJob.cleanupFinishedJobs;
|
|
38
40
|
exports.releaseStaleJobs = releaseStaleJobs.releaseStaleJobs;
|
|
39
41
|
exports.run = runner;
|
|
42
|
+
exports.InlineRunner = inlineRunner.InlineRunner;
|
|
40
43
|
exports.MANUAL_SCRIPT_TAG = manualLoader.MANUAL_SCRIPT_TAG;
|
|
41
44
|
exports.findSidequestJobsScriptInParentDirs = manualLoader.findSidequestJobsScriptInParentDirs;
|
|
42
45
|
exports.resolveScriptPath = manualLoader.resolveScriptPath;
|
|
@@ -45,4 +48,5 @@ exports.importSidequest = _import.importSidequest;
|
|
|
45
48
|
exports.clearGracefulShutdown = shutdown.clearGracefulShutdown;
|
|
46
49
|
exports.gracefulShutdown = shutdown.gracefulShutdown;
|
|
47
50
|
exports.MainWorker = main.MainWorker;
|
|
51
|
+
exports.WorkerRuntime = workerRuntime.WorkerRuntime;
|
|
48
52
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,8 +12,11 @@ export { cleanupFinishedJobs } from './routines/cleanup-finished-job.js';
|
|
|
12
12
|
export { releaseStaleJobs } from './routines/release-stale-jobs.js';
|
|
13
13
|
import * as runner from './shared-runner/runner.js';
|
|
14
14
|
export { runner as run };
|
|
15
|
+
export { InlineRunner } from './shared-runner/inline-runner.js';
|
|
16
|
+
export { JobRunner } from './shared-runner/job-runner.js';
|
|
15
17
|
export { MANUAL_SCRIPT_TAG, findSidequestJobsScriptInParentDirs, resolveScriptPath } from './shared-runner/manual-loader.js';
|
|
16
18
|
export { RunnerPool } from './shared-runner/runner-pool.js';
|
|
17
19
|
export { importSidequest } from './utils/import.js';
|
|
18
20
|
export { clearGracefulShutdown, gracefulShutdown } from './utils/shutdown.js';
|
|
19
21
|
export { MainWorker } from './workers/main.js';
|
|
22
|
+
export { WorkerRuntime } from './workers/worker-runtime.js';
|
package/dist/index.js
CHANGED
|
@@ -12,9 +12,11 @@ export { cleanupFinishedJobs } from './routines/cleanup-finished-job.js';
|
|
|
12
12
|
export { releaseStaleJobs } from './routines/release-stale-jobs.js';
|
|
13
13
|
import * as runner from './shared-runner/runner.js';
|
|
14
14
|
export { runner as run };
|
|
15
|
+
export { InlineRunner } from './shared-runner/inline-runner.js';
|
|
15
16
|
export { MANUAL_SCRIPT_TAG, findSidequestJobsScriptInParentDirs, resolveScriptPath } from './shared-runner/manual-loader.js';
|
|
16
17
|
export { RunnerPool } from './shared-runner/runner-pool.js';
|
|
17
18
|
export { importSidequest } from './utils/import.js';
|
|
18
19
|
export { clearGracefulShutdown, gracefulShutdown } from './utils/shutdown.js';
|
|
19
20
|
export { MainWorker } from './workers/main.js';
|
|
21
|
+
export { WorkerRuntime } from './workers/worker-runtime.js';
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|
package/dist/job/job-builder.cjs
CHANGED
|
@@ -6,6 +6,7 @@ var node_util = require('node:util');
|
|
|
6
6
|
require('node:fs');
|
|
7
7
|
require('node:url');
|
|
8
8
|
var manualLoader = require('../shared-runner/manual-loader.cjs');
|
|
9
|
+
require('node:worker_threads');
|
|
9
10
|
require('piscina');
|
|
10
11
|
require('../constants.cjs');
|
|
11
12
|
var constants = require('./constants.cjs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-builder.cjs","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":["JOB_BUILDER_FALLBACK","MANUAL_SCRIPT_TAG","UniquenessFactory","logger","inspect","ScheduledJobRegistry"],"mappings":"
|
|
1
|
+
{"version":3,"file":"job-builder.cjs","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":["JOB_BUILDER_FALLBACK","MANUAL_SCRIPT_TAG","UniquenessFactory","logger","inspect","ScheduledJobRegistry"],"mappings":"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"}
|
package/dist/job/job-builder.js
CHANGED
|
@@ -4,6 +4,7 @@ import { inspect } from 'node:util';
|
|
|
4
4
|
import 'node:fs';
|
|
5
5
|
import 'node:url';
|
|
6
6
|
import { MANUAL_SCRIPT_TAG } from '../shared-runner/manual-loader.js';
|
|
7
|
+
import 'node:worker_threads';
|
|
7
8
|
import 'piscina';
|
|
8
9
|
import '../constants.js';
|
|
9
10
|
import { JOB_BUILDER_FALLBACK } from './constants.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-builder.js","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"job-builder.js","sources":["../../src/job/job-builder.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-stale-jobs.cjs","sources":["../../src/routines/release-stale-jobs.ts"],"sourcesContent":[null],"names":["logger","inspect","JobTransitioner","RetryTransition"],"mappings":"
|
|
1
|
+
{"version":3,"file":"release-stale-jobs.cjs","sources":["../../src/routines/release-stale-jobs.ts"],"sourcesContent":[null],"names":["logger","inspect","JobTransitioner","RetryTransition"],"mappings":";;;;;;;;;;;;;;;AAKA;;;;;;AAMG;AACI,eAAe,gBAAgB,CAAC,OAAgB,EAAE,UAAkB,EAAE,YAAoB,EAAA;IAC/F,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC;AAEnE,IAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACxBA,WAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA,kDAAA,CAAoD,CAAC;AAC3E,QAAAA,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAeC,YAAO,CAAC,SAAS,CAAC,CAAA,CAAE,CAAC;AAC3D,QAAA,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE;AAC/B,YAAA,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;;;;AAI/B,gBAAA,MAAMC,+BAAe,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAIC,oBAAe,CAAC,8BAA8B,CAAC,CAAC;YACpG;iBAAO;;AAEL,gBAAA,OAAO,CAAC,KAAK,GAAG,SAAS;AACzB,gBAAA,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;YAClC;QACF;IACF;SAAO;QACLH,WAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA,mBAAA,CAAqB,CAAC;IAC/C;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-stale-jobs.js","sources":["../../src/routines/release-stale-jobs.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"release-stale-jobs.js","sources":["../../src/routines/release-stale-jobs.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;AAKA;;;;;;AAMG;AACI,eAAe,gBAAgB,CAAC,OAAgB,EAAE,UAAkB,EAAE,YAAoB,EAAA;IAC/F,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC;AAEnE,IAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA,kDAAA,CAAoD,CAAC;AAC3E,QAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,OAAO,CAAC,SAAS,CAAC,CAAA,CAAE,CAAC;AAC3D,QAAA,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE;AAC/B,YAAA,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;;;;AAI/B,gBAAA,MAAM,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,eAAe,CAAC,8BAA8B,CAAC,CAAC;YACpG;iBAAO;;AAEL,gBAAA,OAAO,CAAC,KAAK,GAAG,SAAS;AACzB,gBAAA,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;YAClC;QACF;IACF;SAAO;QACL,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA,mBAAA,CAAqB,CAAC;IAC/C;AACF;;;;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@sidequest/core');
|
|
4
|
+
var runner = require('./runner.cjs');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Runs jobs in the current process/thread instead of a worker thread pool.
|
|
8
|
+
*
|
|
9
|
+
* Used by the inline execution mode (`runner: "inline"`). Unlike {@link RunnerPool}, a running job
|
|
10
|
+
* cannot be forcibly aborted: cancellation and timeouts are best-effort only, and a CPU-bound job
|
|
11
|
+
* will block the event loop. In exchange, jobs run in the host process and can reach live
|
|
12
|
+
* in-process state (the basis for framework integrations like NestJS).
|
|
13
|
+
*/
|
|
14
|
+
class InlineRunner {
|
|
15
|
+
nonNullConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new InlineRunner.
|
|
18
|
+
* @param nonNullConfig The non-nullable engine configuration.
|
|
19
|
+
*/
|
|
20
|
+
constructor(nonNullConfig) {
|
|
21
|
+
this.nonNullConfig = nonNullConfig;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Runs a job in the current process. The abort signal is forwarded to the job (as
|
|
25
|
+
* `this.abortSignal`) so it can stop cooperatively: inline execution has no separate thread to
|
|
26
|
+
* terminate, so this is the only way timeouts and cancellation can take effect.
|
|
27
|
+
* @param job The job data to run.
|
|
28
|
+
* @param signal Abort signal handed to the job for cooperative cancellation.
|
|
29
|
+
* @returns A promise resolving to the job result.
|
|
30
|
+
*/
|
|
31
|
+
run(job, signal) {
|
|
32
|
+
core.logger("InlineRunner").debug(`Running job ${job.id} inline`);
|
|
33
|
+
return runner.default({ jobData: job, config: this.nonNullConfig, inline: true, signal });
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Releases resources. No-op for the inline runner.
|
|
37
|
+
*/
|
|
38
|
+
destroy() {
|
|
39
|
+
// There is no pool to tear down. In-flight jobs are awaited by the ExecutorManager.
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
exports.InlineRunner = InlineRunner;
|
|
44
|
+
//# sourceMappingURL=inline-runner.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-runner.cjs","sources":["../../src/shared-runner/inline-runner.ts"],"sourcesContent":[null],"names":["logger","run"],"mappings":";;;;;AAKA;;;;;;;AAOG;MACU,YAAY,CAAA;AAKH,IAAA,aAAA;AAJpB;;;AAGG;AACH,IAAA,WAAA,CAAoB,aAAsC,EAAA;QAAtC,IAAA,CAAA,aAAa,GAAb,aAAa;IAA4B;AAE7D;;;;;;;AAOG;IACH,GAAG,CAAC,GAAY,EAAE,MAAoB,EAAA;AACpC,QAAAA,WAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,EAAE,CAAA,OAAA,CAAS,CAAC;QAC5D,OAAOC,cAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAChF;AAEA;;AAEG;IACH,OAAO,GAAA;;IAEP;AACD;;;;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { JobData, JobResult } from '@sidequest/core';
|
|
2
|
+
import { NonNullableEngineConfig } from '../engine.js';
|
|
3
|
+
import { JobRunner } from './job-runner.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Runs jobs in the current process/thread instead of a worker thread pool.
|
|
7
|
+
*
|
|
8
|
+
* Used by the inline execution mode (`runner: "inline"`). Unlike {@link RunnerPool}, a running job
|
|
9
|
+
* cannot be forcibly aborted: cancellation and timeouts are best-effort only, and a CPU-bound job
|
|
10
|
+
* will block the event loop. In exchange, jobs run in the host process and can reach live
|
|
11
|
+
* in-process state (the basis for framework integrations like NestJS).
|
|
12
|
+
*/
|
|
13
|
+
declare class InlineRunner implements JobRunner {
|
|
14
|
+
private nonNullConfig;
|
|
15
|
+
/**
|
|
16
|
+
* Creates a new InlineRunner.
|
|
17
|
+
* @param nonNullConfig The non-nullable engine configuration.
|
|
18
|
+
*/
|
|
19
|
+
constructor(nonNullConfig: NonNullableEngineConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Runs a job in the current process. The abort signal is forwarded to the job (as
|
|
22
|
+
* `this.abortSignal`) so it can stop cooperatively: inline execution has no separate thread to
|
|
23
|
+
* terminate, so this is the only way timeouts and cancellation can take effect.
|
|
24
|
+
* @param job The job data to run.
|
|
25
|
+
* @param signal Abort signal handed to the job for cooperative cancellation.
|
|
26
|
+
* @returns A promise resolving to the job result.
|
|
27
|
+
*/
|
|
28
|
+
run(job: JobData, signal?: AbortSignal): Promise<JobResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Releases resources. No-op for the inline runner.
|
|
31
|
+
*/
|
|
32
|
+
destroy(): void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { InlineRunner };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { logger } from '@sidequest/core';
|
|
2
|
+
import run from './runner.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Runs jobs in the current process/thread instead of a worker thread pool.
|
|
6
|
+
*
|
|
7
|
+
* Used by the inline execution mode (`runner: "inline"`). Unlike {@link RunnerPool}, a running job
|
|
8
|
+
* cannot be forcibly aborted: cancellation and timeouts are best-effort only, and a CPU-bound job
|
|
9
|
+
* will block the event loop. In exchange, jobs run in the host process and can reach live
|
|
10
|
+
* in-process state (the basis for framework integrations like NestJS).
|
|
11
|
+
*/
|
|
12
|
+
class InlineRunner {
|
|
13
|
+
nonNullConfig;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a new InlineRunner.
|
|
16
|
+
* @param nonNullConfig The non-nullable engine configuration.
|
|
17
|
+
*/
|
|
18
|
+
constructor(nonNullConfig) {
|
|
19
|
+
this.nonNullConfig = nonNullConfig;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Runs a job in the current process. The abort signal is forwarded to the job (as
|
|
23
|
+
* `this.abortSignal`) so it can stop cooperatively: inline execution has no separate thread to
|
|
24
|
+
* terminate, so this is the only way timeouts and cancellation can take effect.
|
|
25
|
+
* @param job The job data to run.
|
|
26
|
+
* @param signal Abort signal handed to the job for cooperative cancellation.
|
|
27
|
+
* @returns A promise resolving to the job result.
|
|
28
|
+
*/
|
|
29
|
+
run(job, signal) {
|
|
30
|
+
logger("InlineRunner").debug(`Running job ${job.id} inline`);
|
|
31
|
+
return run({ jobData: job, config: this.nonNullConfig, inline: true, signal });
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Releases resources. No-op for the inline runner.
|
|
35
|
+
*/
|
|
36
|
+
destroy() {
|
|
37
|
+
// There is no pool to tear down. In-flight jobs are awaited by the ExecutorManager.
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { InlineRunner };
|
|
42
|
+
//# sourceMappingURL=inline-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-runner.js","sources":["../../src/shared-runner/inline-runner.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAKA;;;;;;;AAOG;MACU,YAAY,CAAA;AAKH,IAAA,aAAA;AAJpB;;;AAGG;AACH,IAAA,WAAA,CAAoB,aAAsC,EAAA;QAAtC,IAAA,CAAA,aAAa,GAAb,aAAa;IAA4B;AAE7D;;;;;;;AAOG;IACH,GAAG,CAAC,GAAY,EAAE,MAAoB,EAAA;AACpC,QAAA,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,EAAE,CAAA,OAAA,CAAS,CAAC;QAC5D,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAChF;AAEA;;AAEG;IACH,OAAO,GAAA;;IAEP;AACD;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { JobData, JobResult } from '@sidequest/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Abstraction over how a claimed job is actually executed.
|
|
5
|
+
*
|
|
6
|
+
* Implemented by the thread-based {@link RunnerPool} (piscina worker pool) and the
|
|
7
|
+
* {@link InlineRunner} (same-process execution). The {@link ExecutorManager} picks one based on
|
|
8
|
+
* the engine's `runner` configuration.
|
|
9
|
+
*/
|
|
10
|
+
interface JobRunner {
|
|
11
|
+
/**
|
|
12
|
+
* Runs a job and resolves with its result.
|
|
13
|
+
* @param job The job data to run.
|
|
14
|
+
* @param signal Abort signal for the run. The thread runner uses it to terminate the worker; the
|
|
15
|
+
* inline runner forwards it to the job so it can stop cooperatively.
|
|
16
|
+
*/
|
|
17
|
+
run(job: JobData, signal?: AbortSignal): Promise<JobResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Releases any resources held by the runner.
|
|
20
|
+
*/
|
|
21
|
+
destroy(): void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type { JobRunner };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var core = require('@sidequest/core');
|
|
4
|
+
var node_worker_threads = require('node:worker_threads');
|
|
4
5
|
var Piscina = require('piscina');
|
|
5
6
|
var constants = require('../constants.cjs');
|
|
6
7
|
|
|
@@ -27,13 +28,44 @@ class RunnerPool {
|
|
|
27
28
|
}
|
|
28
29
|
/**
|
|
29
30
|
* Runs a job in the worker pool.
|
|
31
|
+
*
|
|
32
|
+
* With `abortGracePeriodMs === 0` (default), an abort terminates the worker immediately. With a
|
|
33
|
+
* positive grace period, the abort is delivered to the job cooperatively over a transferred port
|
|
34
|
+
* (so it can stop via `this.abortSignal`), and the worker is only forcibly terminated if it has
|
|
35
|
+
* not finished within the grace period.
|
|
36
|
+
*
|
|
30
37
|
* @param job The job data to run.
|
|
31
|
-
* @param signal Optional
|
|
38
|
+
* @param signal Optional abort signal for cancellation/timeout.
|
|
32
39
|
* @returns A promise resolving to the job result.
|
|
33
40
|
*/
|
|
34
41
|
run(job, signal) {
|
|
35
42
|
core.logger("RunnerPool").debug(`Running job ${job.id} in pool`);
|
|
36
|
-
|
|
43
|
+
// Already aborted before we could start (e.g. canceled between claim and dispatch): don't run it.
|
|
44
|
+
if (signal?.aborted) {
|
|
45
|
+
return Promise.reject(signal.reason instanceof Error ? signal.reason : new Error("Job aborted before execution"));
|
|
46
|
+
}
|
|
47
|
+
const grace = this.nonNullConfig.abortGracePeriodMs;
|
|
48
|
+
if (!signal || grace <= 0) {
|
|
49
|
+
// Abort terminates the worker immediately.
|
|
50
|
+
return this.pool.run({ jobData: job, config: this.nonNullConfig }, { signal });
|
|
51
|
+
}
|
|
52
|
+
// Deliver the abort cooperatively first, then hard-terminate after the grace period.
|
|
53
|
+
const channel = new node_worker_threads.MessageChannel();
|
|
54
|
+
const hardKill = new AbortController();
|
|
55
|
+
let graceTimer;
|
|
56
|
+
const onAbort = () => {
|
|
57
|
+
channel.port1.postMessage(core.serializeAbortReason(signal.reason));
|
|
58
|
+
graceTimer = setTimeout(() => hardKill.abort(), grace);
|
|
59
|
+
};
|
|
60
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
61
|
+
return this.pool
|
|
62
|
+
.run({ jobData: job, config: this.nonNullConfig, abortPort: channel.port2 }, { transferList: [channel.port2], signal: hardKill.signal })
|
|
63
|
+
.finally(() => {
|
|
64
|
+
if (graceTimer)
|
|
65
|
+
clearTimeout(graceTimer);
|
|
66
|
+
signal.removeEventListener("abort", onAbort);
|
|
67
|
+
channel.port1.close();
|
|
68
|
+
});
|
|
37
69
|
}
|
|
38
70
|
/**
|
|
39
71
|
* Destroys the worker pool and releases resources.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-pool.cjs","sources":["../../src/shared-runner/runner-pool.ts"],"sourcesContent":[null],"names":["DEFAULT_RUNNER_PATH","logger"],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner-pool.cjs","sources":["../../src/shared-runner/runner-pool.ts"],"sourcesContent":[null],"names":["DEFAULT_RUNNER_PATH","logger","MessageChannel","serializeAbortReason"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { JobData, JobResult } from '@sidequest/core';
|
|
2
|
-
import EventEmitter from 'events';
|
|
3
2
|
import { NonNullableEngineConfig } from '../engine.js';
|
|
3
|
+
import { JobRunner } from './job-runner.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* A pool of worker threads for running jobs in parallel using Piscina.
|
|
7
7
|
*/
|
|
8
|
-
declare class RunnerPool {
|
|
8
|
+
declare class RunnerPool implements JobRunner {
|
|
9
9
|
private nonNullConfig;
|
|
10
10
|
/** The underlying Piscina worker pool. */
|
|
11
11
|
private readonly pool;
|
|
@@ -16,11 +16,17 @@ declare class RunnerPool {
|
|
|
16
16
|
constructor(nonNullConfig: NonNullableEngineConfig);
|
|
17
17
|
/**
|
|
18
18
|
* Runs a job in the worker pool.
|
|
19
|
+
*
|
|
20
|
+
* With `abortGracePeriodMs === 0` (default), an abort terminates the worker immediately. With a
|
|
21
|
+
* positive grace period, the abort is delivered to the job cooperatively over a transferred port
|
|
22
|
+
* (so it can stop via `this.abortSignal`), and the worker is only forcibly terminated if it has
|
|
23
|
+
* not finished within the grace period.
|
|
24
|
+
*
|
|
19
25
|
* @param job The job data to run.
|
|
20
|
-
* @param signal Optional
|
|
26
|
+
* @param signal Optional abort signal for cancellation/timeout.
|
|
21
27
|
* @returns A promise resolving to the job result.
|
|
22
28
|
*/
|
|
23
|
-
run(job: JobData, signal?:
|
|
29
|
+
run(job: JobData, signal?: AbortSignal): Promise<JobResult>;
|
|
24
30
|
/**
|
|
25
31
|
* Destroys the worker pool and releases resources.
|
|
26
32
|
*/
|