nestworker 2.1.0 → 2.1.1
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/README.md +47 -2
- package/dist/core/worker.pool.js +72 -32
- package/dist/core/worker.pool.js.map +1 -1
- package/dist/core/worker.service.d.ts +2 -0
- package/dist/core/worker.service.js +51 -24
- package/dist/core/worker.service.js.map +1 -1
- package/dist/example/bench.d.ts +13 -0
- package/dist/example/bench.js +85 -0
- package/dist/example/bench.js.map +1 -0
- package/dist/worker/worker-runtime.js +29 -16
- package/dist/worker/worker-runtime.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ Enterprise-grade worker thread module for NestJS. Offload CPU-bound work to a ma
|
|
|
42
42
|
|
|
43
43
|
| Package | Version |
|
|
44
44
|
|---|---|
|
|
45
|
-
| Node.js | ≥
|
|
45
|
+
| Node.js | ≥ 18 (uses the global `structuredClone`, available since Node 17) |
|
|
46
46
|
| `@nestjs/common` | `^10` or `^11` |
|
|
47
47
|
| `@nestjs/core` | `^10` or `^11` |
|
|
48
48
|
| `reflect-metadata` | `^0.1` or `^0.2` |
|
|
@@ -183,7 +183,9 @@ Marks a method to be offloaded to a worker thread.
|
|
|
183
183
|
| `priority` | `'HIGH' \| 'NORMAL' \| 'LOW'` | `'NORMAL'` | Queue priority |
|
|
184
184
|
| `timeout` | `number` | — | Reject after this many ms |
|
|
185
185
|
| `retry` | `number` | `0` | Extra attempts after first failure |
|
|
186
|
-
| `retryDelay` | `number` | `0` | Ms between retry attempts |
|
|
186
|
+
| `retryDelay` | `number \| (attempt: number) => number` | `0` | Ms between retry attempts. See note below. |
|
|
187
|
+
|
|
188
|
+
> **`retryDelay` as a function:** functions can't cross the worker boundary, so when a function is supplied it's evaluated on the main thread at discovery time as the average of `fn(1)`, `fn(2)`, `fn(3)` and a warning is logged. For precise control (including exponential backoff) pass a number and recreate the curve with the per-call `RunOptions.retryDelay` override.
|
|
187
189
|
|
|
188
190
|
---
|
|
189
191
|
|
|
@@ -219,6 +221,26 @@ workerService.onDead((event) => { ... }); // job exhausted all retries
|
|
|
219
221
|
|
|
220
222
|
---
|
|
221
223
|
|
|
224
|
+
### `WorkerService.stats()`
|
|
225
|
+
|
|
226
|
+
Returns a point-in-time snapshot of the pool — used by the health indicator and metrics service, but also useful on its own:
|
|
227
|
+
|
|
228
|
+
```ts
|
|
229
|
+
const { poolSize, idle, busy, queued, warmingUp } = workerService.stats();
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
```ts
|
|
233
|
+
interface PoolStats {
|
|
234
|
+
poolSize: number;
|
|
235
|
+
idle: number;
|
|
236
|
+
busy: number;
|
|
237
|
+
queued: number;
|
|
238
|
+
warmingUp: number;
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
222
244
|
## `deps` vs `proxy`
|
|
223
245
|
|
|
224
246
|
This is the most important decision when declaring a `@WorkerClass`.
|
|
@@ -405,6 +427,29 @@ process(): void {
|
|
|
405
427
|
|
|
406
428
|
---
|
|
407
429
|
|
|
430
|
+
## OpenTelemetry Trace Propagation
|
|
431
|
+
|
|
432
|
+
If `@opentelemetry/api` is installed in your app, nestworker captures the active span context on every `run()` and re-activates it inside the worker before the task runs — distributed traces stay continuous across the thread boundary. There is **no hard dependency**: the lookup is a one-shot cached `require()` and silently no-ops when the package isn't present.
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
npm install @opentelemetry/api
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
```ts
|
|
439
|
+
// Spans created inside @WorkerTask methods will be children of the
|
|
440
|
+
// active span on the main thread at the moment run() was called.
|
|
441
|
+
@WorkerTask()
|
|
442
|
+
async heavyWork(): Promise<void> {
|
|
443
|
+
const tracer = trace.getTracer('my-app');
|
|
444
|
+
await tracer.startActiveSpan('heavy-work', async (span) => {
|
|
445
|
+
// ...
|
|
446
|
+
span.end();
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
408
453
|
## Health Indicator
|
|
409
454
|
|
|
410
455
|
```ts
|
package/dist/core/worker.pool.js
CHANGED
|
@@ -70,7 +70,8 @@ class WorkerPool extends node_events_1.EventEmitter {
|
|
|
70
70
|
try {
|
|
71
71
|
worker.postMessage({ type: 'abort', abortSignalId: job.abortSignalId });
|
|
72
72
|
}
|
|
73
|
-
catch { /* worker gone */
|
|
73
|
+
catch { /* worker gone */
|
|
74
|
+
}
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
}, { once: true });
|
|
@@ -92,33 +93,55 @@ class WorkerPool extends node_events_1.EventEmitter {
|
|
|
92
93
|
const worker = new node_worker_threads_1.Worker(node_path_1.default.resolve(__dirname, '../worker/worker-runtime.js'), { workerData: { services: this.services } });
|
|
93
94
|
this.workers.push(worker);
|
|
94
95
|
this.warmingUp.add(worker);
|
|
95
|
-
|
|
96
|
+
// ── Single persistent message listener ───────────────────────────────
|
|
97
|
+
// We used to add/remove a listener per dispatch — that allocated several
|
|
98
|
+
// closures and mutated the EventEmitter's listener array on every task.
|
|
99
|
+
// Instead we install one listener whose behaviour switches based on
|
|
100
|
+
// whether this worker is currently warming up or running a task.
|
|
101
|
+
const onMessage = (msg) => {
|
|
96
102
|
const message = msg;
|
|
97
|
-
if (
|
|
103
|
+
if (this.warmingUp.has(worker)) {
|
|
104
|
+
if (message?.type !== 'worker:ready')
|
|
105
|
+
return;
|
|
106
|
+
this.warmingUp.delete(worker);
|
|
107
|
+
if (!this.destroyed) {
|
|
108
|
+
this.idle.push(worker);
|
|
109
|
+
this.schedule();
|
|
110
|
+
}
|
|
98
111
|
return;
|
|
99
|
-
worker.removeListener('message', onReady);
|
|
100
|
-
this.warmingUp.delete(worker);
|
|
101
|
-
if (!this.destroyed) {
|
|
102
|
-
this.idle.push(worker);
|
|
103
|
-
this.schedule();
|
|
104
112
|
}
|
|
113
|
+
// Spurious `worker:ready` after warmup → ignore.
|
|
114
|
+
if (message?.type === 'worker:ready')
|
|
115
|
+
return;
|
|
116
|
+
const running = this.active.get(worker);
|
|
117
|
+
if (!running)
|
|
118
|
+
return; // late message for an aborted/timed-out task
|
|
119
|
+
running.handler(message);
|
|
105
120
|
};
|
|
106
|
-
worker.on('message',
|
|
121
|
+
worker.on('message', onMessage);
|
|
107
122
|
worker.once('error', (err) => this.handleWorkerError(worker, err));
|
|
108
123
|
worker.once('exit', (code) => this.handleWorkerExit(worker, code));
|
|
109
124
|
return worker;
|
|
110
125
|
}
|
|
111
126
|
enqueue(task) {
|
|
112
127
|
const weight = PRIORITY_WEIGHT[task.job.priority];
|
|
113
|
-
|
|
128
|
+
const q = this.queue;
|
|
129
|
+
const n = q.length;
|
|
130
|
+
// Fast path: empty queue, or tail has >= priority → just push (O(1)).
|
|
131
|
+
// This is by far the most common case under steady-state load.
|
|
132
|
+
if (n === 0 || PRIORITY_WEIGHT[q[n - 1].job.priority] >= weight) {
|
|
133
|
+
q.push(task);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
let lo = 0, hi = n;
|
|
114
137
|
while (lo < hi) {
|
|
115
138
|
const mid = (lo + hi) >>> 1;
|
|
116
|
-
if (PRIORITY_WEIGHT[
|
|
139
|
+
if (PRIORITY_WEIGHT[q[mid].job.priority] < weight)
|
|
117
140
|
hi = mid;
|
|
118
141
|
else
|
|
119
142
|
lo = mid + 1;
|
|
120
143
|
}
|
|
121
|
-
|
|
144
|
+
q.splice(lo, 0, task);
|
|
122
145
|
}
|
|
123
146
|
schedule() {
|
|
124
147
|
if (this.destroyed)
|
|
@@ -135,13 +158,10 @@ class WorkerPool extends node_events_1.EventEmitter {
|
|
|
135
158
|
const startedAt = Date.now();
|
|
136
159
|
task.attempts++;
|
|
137
160
|
task.job.attempt = task.attempts - 1;
|
|
138
|
-
this.active.set(worker, { task, priority: task.job.priority, startedAt });
|
|
139
161
|
if (task.job.abortSignalId) {
|
|
140
162
|
this.signalWorkerMap.set(task.job.abortSignalId, worker);
|
|
141
163
|
}
|
|
142
|
-
this.emit('taskStart', task.job);
|
|
143
164
|
const cleanup = () => {
|
|
144
|
-
worker.removeListener('message', onMessage);
|
|
145
165
|
if (timeoutHandle)
|
|
146
166
|
clearTimeout(timeoutHandle);
|
|
147
167
|
if (task.job.abortSignalId) {
|
|
@@ -192,7 +212,7 @@ class WorkerPool extends node_events_1.EventEmitter {
|
|
|
192
212
|
this.emit('dead', dlEvent);
|
|
193
213
|
task.reject(deserializeError(serializedError));
|
|
194
214
|
};
|
|
195
|
-
const
|
|
215
|
+
const handler = (msg) => {
|
|
196
216
|
const message = msg;
|
|
197
217
|
// ── IPC invoke from worker ────────────────────────────────────────
|
|
198
218
|
if (message.type === 'ipc:invoke') {
|
|
@@ -210,31 +230,43 @@ class WorkerPool extends node_events_1.EventEmitter {
|
|
|
210
230
|
`is not structuredClone-compatible.`,
|
|
211
231
|
});
|
|
212
232
|
}
|
|
213
|
-
catch { /* worker gone */
|
|
233
|
+
catch { /* worker gone */
|
|
234
|
+
}
|
|
214
235
|
}
|
|
215
236
|
};
|
|
216
237
|
if (!svcInstance) {
|
|
217
|
-
reply({
|
|
218
|
-
|
|
238
|
+
reply({
|
|
239
|
+
type: 'ipc:result', callId: req.callId, ok: false,
|
|
240
|
+
error: `No proxy registered for "${req.propertyKey}"`,
|
|
241
|
+
});
|
|
219
242
|
return;
|
|
220
243
|
}
|
|
221
244
|
const method = svcInstance[req.methodName];
|
|
222
245
|
if (typeof method !== 'function') {
|
|
223
|
-
reply({
|
|
224
|
-
|
|
246
|
+
reply({
|
|
247
|
+
type: 'ipc:result', callId: req.callId, ok: false,
|
|
248
|
+
error: `Method "${req.methodName}" not found on "${req.propertyKey}"`,
|
|
249
|
+
});
|
|
225
250
|
return;
|
|
226
251
|
}
|
|
252
|
+
// Invoke via svcInstance[methodName](...) to preserve `this` binding.
|
|
253
|
+
// Use Promise.resolve to handle both sync and async returns without
|
|
254
|
+
// forcing an async function allocation per call.
|
|
255
|
+
let p;
|
|
227
256
|
try {
|
|
228
|
-
|
|
229
|
-
// Detached call (const fn = svcInstance[m]; fn()) loses `this`
|
|
230
|
-
// in strict mode, breaking any method that reads instance properties.
|
|
231
|
-
const data = await svcInstance[req.methodName](...req.args);
|
|
232
|
-
reply({ type: 'ipc:result', callId: req.callId, ok: true, data });
|
|
257
|
+
p = svcInstance[req.methodName](...req.args);
|
|
233
258
|
}
|
|
234
259
|
catch (err) {
|
|
235
|
-
reply({
|
|
236
|
-
|
|
260
|
+
reply({
|
|
261
|
+
type: 'ipc:result', callId: req.callId, ok: false,
|
|
262
|
+
error: err.message ?? String(err),
|
|
263
|
+
});
|
|
264
|
+
return;
|
|
237
265
|
}
|
|
266
|
+
Promise.resolve(p).then((data) => reply({ type: 'ipc:result', callId: req.callId, ok: true, data }), (err) => reply({
|
|
267
|
+
type: 'ipc:result', callId: req.callId, ok: false,
|
|
268
|
+
error: err.message ?? String(err),
|
|
269
|
+
}));
|
|
238
270
|
return;
|
|
239
271
|
}
|
|
240
272
|
if (message.type === 'worker:ready')
|
|
@@ -255,7 +287,8 @@ class WorkerPool extends node_events_1.EventEmitter {
|
|
|
255
287
|
}
|
|
256
288
|
});
|
|
257
289
|
};
|
|
258
|
-
|
|
290
|
+
this.active.set(worker, { task, priority: task.job.priority, startedAt, handler });
|
|
291
|
+
this.emit('taskStart', task.job);
|
|
259
292
|
if (task.job.timeout && task.job.timeout > 0) {
|
|
260
293
|
timeoutHandle = setTimeout(async () => {
|
|
261
294
|
if (settled)
|
|
@@ -272,7 +305,8 @@ class WorkerPool extends node_events_1.EventEmitter {
|
|
|
272
305
|
try {
|
|
273
306
|
await worker.terminate();
|
|
274
307
|
}
|
|
275
|
-
catch {
|
|
308
|
+
catch {
|
|
309
|
+
}
|
|
276
310
|
this.replaceWorker(worker);
|
|
277
311
|
this.schedule();
|
|
278
312
|
}, task.job.timeout);
|
|
@@ -325,8 +359,14 @@ class WorkerPool extends node_events_1.EventEmitter {
|
|
|
325
359
|
Promise.allSettled(Array.from(this.active.values()).map(({ task }) => new Promise((res) => {
|
|
326
360
|
const orig = task.resolve;
|
|
327
361
|
const origRej = task.reject;
|
|
328
|
-
task.resolve = (v) => {
|
|
329
|
-
|
|
362
|
+
task.resolve = (v) => {
|
|
363
|
+
orig(v);
|
|
364
|
+
res();
|
|
365
|
+
};
|
|
366
|
+
task.reject = (e) => {
|
|
367
|
+
origRej(e);
|
|
368
|
+
res();
|
|
369
|
+
};
|
|
330
370
|
}))),
|
|
331
371
|
// Force after timeout
|
|
332
372
|
new Promise((res) => setTimeout(res, this.shutdownTimeout)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.pool.js","sourceRoot":"","sources":["../../src/core/worker.pool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker.pool.js","sourceRoot":"","sources":["../../src/core/worker.pool.ts"],"names":[],"mappings":";;;;;;AAAA,6DAA6C;AAC7C,6CAA2C;AAC3C,sDAAyB;AACzB,0DAA6B;AAiB7B,MAAM,eAAe,GAAiC;IACpD,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACP,CAAC;AAkCF,MAAa,UAAW,SAAQ,0BAAY;IAoBvB;IAEA;IACA;IAtBF,OAAO,GAAa,EAAE,CAAC;IACvB,IAAI,GAAa,EAAE,CAAC;IACpB,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,GAAkB,EAAE,CAAC;IACnC,SAAS,GAAG,KAAK,CAAC;IACT,MAAM,GAAG,IAAI,GAAG,EAG9B,CAAC;IAEJ,6DAA6D;IAC5C,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,QAAQ,GAAG,IAAI,GAAG,EAGhC,CAAC;IAEJ,YACmB,QAA6B,EAC9C,cAA+B,EACd,OAAO,iBAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EACvB,kBAAkB,MAAM;QAEzC,KAAK,EAAE,CAAC;QALS,aAAQ,GAAR,QAAQ,CAAqB;QAE7B,SAAI,GAAJ,IAAI,CAAmB;QACvB,oBAAe,GAAf,eAAe,CAAS;QAGzC,KAAK,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,cAAc,EAAE,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,CAAc,GAAc,EAAE,MAAoB;QACvD,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAE7E,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,wCAAwC;YACxC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,YAAY,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC,CAAC;gBACtE,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAgB;gBACxB,GAAG;gBACH,OAAO,EAAE,OAA+B;gBACxC,MAAM;gBACN,QAAQ,EAAE,CAAC;gBACX,MAAM;aACP,CAAC;YAEF,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBACpC,0CAA0C;oBAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACrC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;wBACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;wBAC1B,MAAM,CAAC,IAAI,YAAY,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;wBACvD,OAAO;oBACT,CAAC;oBACD,gDAAgD;oBAChD,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;wBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;wBAC3D,IAAI,MAAM,EAAE,CAAC;4BACX,IAAI,CAAC;gCACH,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;4BAC1E,CAAC;4BAAC,MAAM,CAAC,CAAC,iBAAiB;4BAC3B,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACrB,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;SAC/B,CAAC;IACJ,CAAC;IAEO,WAAW;QACjB,MAAM,MAAM,GAAG,IAAI,4BAAM,CACvB,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,6BAA6B,CAAC,EACtD,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAC5C,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE3B,wEAAwE;QACxE,yEAAyE;QACzE,wEAAwE;QACxE,oEAAoE;QACpE,iEAAiE;QACjE,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,GAAwB,CAAC;YAEzC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/B,IAAI,OAAO,EAAE,IAAI,KAAK,cAAc;oBAAE,OAAO;gBAC7C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,iDAAiD;YACjD,IAAI,OAAO,EAAE,IAAI,KAAK,cAAc;gBAAE,OAAO;YAE7C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,6CAA6C;YACnE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,OAAO,CAAC,IAAiB;QAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACnB,sEAAsE;QACtE,+DAA+D;QAC/D,IAAI,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;YAChE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM;gBAAE,EAAE,GAAG,GAAG,CAAC;;gBACvD,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAG,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,MAAc,EAAE,IAAiB;QAChD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,aAAyC,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QAGD,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,aAAa;gBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBAC3B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,EAAc,EAAE,EAAE;YAChC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,EAAE,EAAE,CAAC;YACL,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,CAAC,eAAgC,EAAE,EAAE;YACzD,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;YAElD,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC9B,wBAAwB;gBACxB,MAAM,KAAK,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9D,MAAM,aAAa,GAAG,GAAG,EAAE;oBACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,CAAC,CAAC;gBACF,IAAI,KAAK,GAAG,CAAC;oBAAE,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;;oBAC3C,aAAa,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,uCAAuC;YACvC,MAAM,OAAO,GAAoB;gBAC/B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;gBACrB,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW;gBACjC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU;gBAC/B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE,IAAI,IAAI,EAAE;aACrB,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE;YAC/B,MAAM,OAAO,GAAG,GAA4B,CAAC;YAE7C,qEAAqE;YACrE,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,OAA2B,CAAC;gBACxC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAEvD,MAAM,KAAK,GAAG,CAAC,GAAsB,EAAE,EAAE;oBACvC,IAAI,CAAC;wBACH,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC1B,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,CAAC;4BACH,MAAM,CAAC,WAAW,CAAC;gCACjB,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK;gCACjD,KAAK,EAAE,mBAAmB,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,IAAI;oCAC7D,oCAAoC;6BACX,CAAC,CAAC;wBACjC,CAAC;wBAAC,MAAM,CAAC,CAAC,iBAAiB;wBAC3B,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;gBAEF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,KAAK,CAAC;wBACJ,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK;wBACjD,KAAK,EAAE,4BAA4B,GAAG,CAAC,WAAW,GAAG;qBACtD,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC3C,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;oBACjC,KAAK,CAAC;wBACJ,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK;wBACjD,KAAK,EAAE,WAAW,GAAG,CAAC,UAAU,mBAAmB,GAAG,CAAC,WAAW,GAAG;qBACtE,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,sEAAsE;gBACtE,oEAAoE;gBACpE,iDAAiD;gBACjD,IAAI,CAAU,CAAC;gBACf,IAAI,CAAC;oBACH,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAI,GAAG,CAAC,IAAkB,CAAC,CAAC;gBAC9D,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACtB,KAAK,CAAC;wBACJ,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK;wBACjD,KAAK,EAAG,GAAa,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;qBAC7C,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CACrB,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAC3E,CAAC,GAAY,EAAE,EAAE,CAAC,KAAK,CAAC;oBACtB,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK;oBACjD,KAAK,EAAG,GAAa,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;iBAC7C,CAAC,CACH,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc;gBAAE,OAAO;YAE5C,qEAAqE;YACrE,MAAM,MAAM,GAAG,OAAuB,CAAC;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE1C,MAAM,CAAC,GAAG,EAAE;gBACV,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;oBACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;oBAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI;wBAC5B,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,sBAAsB;qBAChC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YAC7C,aAAa,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gBACpC,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE3B,MAAM,eAAe,GAAoB;oBACvC,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI;wBAC/D,mBAAmB,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI;iBAC1C,CAAC;gBACF,aAAa,CAAC,eAAe,CAAC,CAAC;gBAE/B,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3B,CAAC;gBAAC,MAAM,CAAC;gBACT,CAAC;gBACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEO,iBAAiB,CAAC,MAAc,EAAE,GAAU;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,sBAAsB,WAAW,IAAI,UAAU,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9F,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAEO,gBAAgB,CAAC,MAAc,EAAE,IAAY;QACnD,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAC3B,2BAA2B,IAAI,iBAAiB;gBAChD,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CACnE,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAEO,aAAa,CAAC,SAAiB;QACrC,MAAM,MAAM,GAAG,CAAC,GAAa,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,mEAAmE;QACnE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,qCAAqC;gBACrC,OAAO,CAAC,UAAU,CAChB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAClC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;oBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC5B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;wBACnB,IAAI,CAAC,CAAC,CAAC,CAAC;wBACR,GAAG,EAAE,CAAC;oBACR,CAAC,CAAC;oBACF,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE;wBAClB,OAAO,CAAC,CAAC,CAAC,CAAC;wBACX,GAAG,EAAE,CAAC;oBACR,CAAC,CAAC;gBACJ,CAAC,CAAC,CACH,CACF;gBACD,sBAAsB;gBACtB,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;aAClE,CAAC,CAAC;QACL,CAAC;QAED,+BAA+B;QAC/B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtB,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACvB,CAAC;CACF;AA1ZD,gCA0ZC;AAED,SAAS,gBAAgB,CAAC,UAA2B;IACnD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1C,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAC3B,IAAI,UAAU,CAAC,KAAK;QAAE,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IACnD,IAAI,UAAU,CAAC,KAAK;QAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -16,6 +16,8 @@ export declare class WorkerService implements OnModuleInit, OnModuleDestroy {
|
|
|
16
16
|
private pool;
|
|
17
17
|
private readonly taskDefaults;
|
|
18
18
|
private readonly taskProxies;
|
|
19
|
+
/** Cached array of ALS storages — avoids `?? []` + entries() per call. */
|
|
20
|
+
private alsStorages;
|
|
19
21
|
constructor(discovery: WorkerDiscoveryService, options: WorkerModuleOptions);
|
|
20
22
|
onModuleInit(): void;
|
|
21
23
|
private initPool;
|
|
@@ -11,17 +11,23 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
-
};
|
|
17
14
|
var WorkerService_1;
|
|
18
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
16
|
exports.WorkerService = void 0;
|
|
20
17
|
const common_1 = require("@nestjs/common");
|
|
21
|
-
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
22
18
|
const worker_pool_1 = require("./worker.pool");
|
|
23
19
|
const discovery_service_1 = require("../discovery/discovery.service");
|
|
24
20
|
const di_serializer_1 = require("../di/di-serializer");
|
|
21
|
+
// Monotonic ID generator — far cheaper than crypto.randomUUID() and unique
|
|
22
|
+
// per-process which is all we need (jobs never leave this process).
|
|
23
|
+
let __jobIdCounter = 0;
|
|
24
|
+
const __jobIdPrefix = `j${Date.now().toString(36)}-`;
|
|
25
|
+
const nextId = () => __jobIdPrefix + (++__jobIdCounter).toString(36);
|
|
26
|
+
// Hot-path shared frozen sentinels — let v8 elide allocations on the common
|
|
27
|
+
// "no proxies / no ALS context" path.
|
|
28
|
+
const EMPTY_PROXIES = Object.freeze([]);
|
|
29
|
+
const EMPTY_ALS = Object.freeze({});
|
|
30
|
+
const DEFAULT_TASK = Object.freeze({ priority: 'NORMAL' });
|
|
25
31
|
let WorkerService = WorkerService_1 = class WorkerService {
|
|
26
32
|
discovery;
|
|
27
33
|
options;
|
|
@@ -29,6 +35,8 @@ let WorkerService = WorkerService_1 = class WorkerService {
|
|
|
29
35
|
pool = null;
|
|
30
36
|
taskDefaults = new Map();
|
|
31
37
|
taskProxies = new Map();
|
|
38
|
+
/** Cached array of ALS storages — avoids `?? []` + entries() per call. */
|
|
39
|
+
alsStorages = [];
|
|
32
40
|
constructor(discovery, options) {
|
|
33
41
|
this.discovery = discovery;
|
|
34
42
|
this.options = options;
|
|
@@ -39,6 +47,7 @@ let WorkerService = WorkerService_1 = class WorkerService {
|
|
|
39
47
|
initPool() {
|
|
40
48
|
if (this.pool)
|
|
41
49
|
return;
|
|
50
|
+
this.alsStorages = (this.options.asyncLocalStorages ?? []);
|
|
42
51
|
const tasks = this.discovery.scan();
|
|
43
52
|
const proxyMap = new Map();
|
|
44
53
|
for (const task of tasks) {
|
|
@@ -79,21 +88,24 @@ let WorkerService = WorkerService_1 = class WorkerService {
|
|
|
79
88
|
*/
|
|
80
89
|
run(serviceName, methodName, args = [], options = {}) {
|
|
81
90
|
const key = `${serviceName}.${methodName}`;
|
|
82
|
-
const defaults = this.taskDefaults.get(key) ??
|
|
83
|
-
const proxyServices = this.taskProxies.get(key) ??
|
|
84
|
-
// Capture ALS context
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
91
|
+
const defaults = this.taskDefaults.get(key) ?? DEFAULT_TASK;
|
|
92
|
+
const proxyServices = this.taskProxies.get(key) ?? EMPTY_PROXIES;
|
|
93
|
+
// Capture ALS context only if any storages are registered. Empty objects
|
|
94
|
+
// still cost allocation + a structuredClone hop across the worker boundary.
|
|
95
|
+
let alsContext;
|
|
96
|
+
const storages = this.alsStorages;
|
|
97
|
+
for (let i = 0, len = storages.length; i < len; i++) {
|
|
98
|
+
const store = storages[i].getStore();
|
|
99
|
+
if (store !== undefined) {
|
|
100
|
+
(alsContext ??= {})[i < 10 ? String.fromCharCode(48 + i) : String(i)] = store;
|
|
101
|
+
}
|
|
90
102
|
}
|
|
91
|
-
// Capture OTEL trace context if available
|
|
103
|
+
// Capture OTEL trace context if available (lazy, cached lookup).
|
|
92
104
|
const traceContext = captureTraceContext();
|
|
93
105
|
// Generate a unique signal ID if an AbortSignal was provided
|
|
94
|
-
const abortSignalId = options.signal ?
|
|
106
|
+
const abortSignalId = options.signal ? nextId() : undefined;
|
|
95
107
|
return this.pool.execute({
|
|
96
|
-
jobId:
|
|
108
|
+
jobId: nextId(),
|
|
97
109
|
serviceName,
|
|
98
110
|
methodName,
|
|
99
111
|
args,
|
|
@@ -102,7 +114,7 @@ let WorkerService = WorkerService_1 = class WorkerService {
|
|
|
102
114
|
retry: options.retry ?? defaults.retry ?? 0,
|
|
103
115
|
retryDelay: options.retryDelay ?? defaults.retryDelay ?? 0,
|
|
104
116
|
proxyServices,
|
|
105
|
-
alsContext,
|
|
117
|
+
alsContext: alsContext ?? EMPTY_ALS,
|
|
106
118
|
traceContext,
|
|
107
119
|
abortSignalId,
|
|
108
120
|
}, options.signal);
|
|
@@ -145,17 +157,32 @@ exports.WorkerService = WorkerService = WorkerService_1 = __decorate([
|
|
|
145
157
|
/**
|
|
146
158
|
* Capture the active OpenTelemetry trace context if @opentelemetry/api is
|
|
147
159
|
* available. Returns an empty object otherwise — no hard dependency.
|
|
160
|
+
*
|
|
161
|
+
* The require() lookup is performed at most once and cached, since it shows
|
|
162
|
+
* up on the hot path of every `run()` call.
|
|
148
163
|
*/
|
|
164
|
+
const EMPTY_TRACE = Object.freeze({});
|
|
165
|
+
let __otelApi;
|
|
149
166
|
function captureTraceContext() {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
167
|
+
if (__otelApi === undefined) {
|
|
168
|
+
try {
|
|
169
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
170
|
+
__otelApi = require('@opentelemetry/api');
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
__otelApi = null;
|
|
174
|
+
}
|
|
156
175
|
}
|
|
157
|
-
|
|
158
|
-
return
|
|
176
|
+
if (!__otelApi)
|
|
177
|
+
return EMPTY_TRACE;
|
|
178
|
+
const carrier = {};
|
|
179
|
+
__otelApi.propagation.inject(__otelApi.context.active(), carrier);
|
|
180
|
+
// Return the shared empty object when nothing was injected to avoid
|
|
181
|
+
// a per-call structuredClone of an empty object across the worker boundary.
|
|
182
|
+
for (const _k in carrier) {
|
|
183
|
+
void _k;
|
|
184
|
+
return carrier;
|
|
159
185
|
}
|
|
186
|
+
return EMPTY_TRACE;
|
|
160
187
|
}
|
|
161
188
|
//# sourceMappingURL=worker.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.service.js","sourceRoot":"","sources":["../../src/core/worker.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker.service.js","sourceRoot":"","sources":["../../src/core/worker.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Throughput / latency micro-benchmark.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* npx ts-node src/example/bench.ts # default 5000 tasks
|
|
6
|
+
* TASKS=20000 POOL=8 npx ts-node src/example/bench.ts
|
|
7
|
+
*
|
|
8
|
+
* Reports:
|
|
9
|
+
* - cold-start time (until pool is ready for first task)
|
|
10
|
+
* - p50 / p95 / p99 / max round-trip latency
|
|
11
|
+
* - sustained throughput (tasks / second)
|
|
12
|
+
*/
|
|
13
|
+
import 'reflect-metadata';
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
/**
|
|
13
|
+
* Throughput / latency micro-benchmark.
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* npx ts-node src/example/bench.ts # default 5000 tasks
|
|
17
|
+
* TASKS=20000 POOL=8 npx ts-node src/example/bench.ts
|
|
18
|
+
*
|
|
19
|
+
* Reports:
|
|
20
|
+
* - cold-start time (until pool is ready for first task)
|
|
21
|
+
* - p50 / p95 / p99 / max round-trip latency
|
|
22
|
+
* - sustained throughput (tasks / second)
|
|
23
|
+
*/
|
|
24
|
+
require("reflect-metadata");
|
|
25
|
+
const core_1 = require("@nestjs/core");
|
|
26
|
+
const common_1 = require("@nestjs/common");
|
|
27
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
28
|
+
const node_perf_hooks_1 = require("node:perf_hooks");
|
|
29
|
+
const worker_module_1 = require("../core/worker.module");
|
|
30
|
+
const worker_service_1 = require("../core/worker.service");
|
|
31
|
+
const config_service_1 = require("./config.service");
|
|
32
|
+
const image_service_1 = require("./image.service");
|
|
33
|
+
const TASKS = Number(process.env.TASKS ?? 5_000);
|
|
34
|
+
const POOL = Number(process.env.POOL ?? node_os_1.default.cpus().length);
|
|
35
|
+
const WARMUP = Number(process.env.WARMUP ?? 200);
|
|
36
|
+
let BenchModule = class BenchModule {
|
|
37
|
+
};
|
|
38
|
+
BenchModule = __decorate([
|
|
39
|
+
(0, common_1.Module)({
|
|
40
|
+
imports: [worker_module_1.WorkerModule.forRoot({ poolSize: POOL, shutdownTimeout: 5_000 })],
|
|
41
|
+
providers: [config_service_1.ConfigService, image_service_1.ImageService],
|
|
42
|
+
})
|
|
43
|
+
], BenchModule);
|
|
44
|
+
function pct(sorted, p) {
|
|
45
|
+
if (sorted.length === 0)
|
|
46
|
+
return 0;
|
|
47
|
+
const idx = Math.min(sorted.length - 1, Math.floor((p / 100) * sorted.length));
|
|
48
|
+
return sorted[idx];
|
|
49
|
+
}
|
|
50
|
+
async function run() {
|
|
51
|
+
console.log(`▶ bench: tasks=${TASKS} pool=${POOL} warmup=${WARMUP}`);
|
|
52
|
+
const t0 = node_perf_hooks_1.performance.now();
|
|
53
|
+
const app = await core_1.NestFactory.createApplicationContext(BenchModule, { logger: false });
|
|
54
|
+
const ws = app.get(worker_service_1.WorkerService);
|
|
55
|
+
// Cold-start: first task forces pool readiness.
|
|
56
|
+
await ws.run('ImageService', 'moduleRequire');
|
|
57
|
+
const cold = node_perf_hooks_1.performance.now() - t0;
|
|
58
|
+
console.log(` cold-start: ${cold.toFixed(1)} ms`);
|
|
59
|
+
// Warm-up — JIT, MessagePort priming, etc.
|
|
60
|
+
await Promise.all(Array.from({ length: WARMUP }, () => ws.run('ImageService', 'moduleRequire')));
|
|
61
|
+
// Measured run — uses the cheapest task (cached require) so we measure
|
|
62
|
+
// pool + IPC overhead rather than CPU work.
|
|
63
|
+
const latencies = new Float64Array(TASKS);
|
|
64
|
+
const start = node_perf_hooks_1.performance.now();
|
|
65
|
+
await Promise.all(Array.from({ length: TASKS }, (_, i) => {
|
|
66
|
+
const t = node_perf_hooks_1.performance.now();
|
|
67
|
+
return ws.run('ImageService', 'moduleRequire').then(() => {
|
|
68
|
+
latencies[i] = node_perf_hooks_1.performance.now() - t;
|
|
69
|
+
});
|
|
70
|
+
}));
|
|
71
|
+
const wall = node_perf_hooks_1.performance.now() - start;
|
|
72
|
+
const sorted = Array.from(latencies).sort((a, b) => a - b);
|
|
73
|
+
console.log(` wall: ${wall.toFixed(1)} ms`);
|
|
74
|
+
console.log(` throughput: ${(TASKS / (wall / 1000)).toFixed(0)} tasks/s`);
|
|
75
|
+
console.log(` p50: ${pct(sorted, 50).toFixed(3)} ms`);
|
|
76
|
+
console.log(` p95: ${pct(sorted, 95).toFixed(3)} ms`);
|
|
77
|
+
console.log(` p99: ${pct(sorted, 99).toFixed(3)} ms`);
|
|
78
|
+
console.log(` max: ${sorted[sorted.length - 1].toFixed(3)} ms`);
|
|
79
|
+
await app.close();
|
|
80
|
+
}
|
|
81
|
+
run().catch((err) => {
|
|
82
|
+
console.error('Bench failed:', err);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bench.js","sourceRoot":"","sources":["../../src/example/bench.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
const node_worker_threads_1 = require("node:worker_threads");
|
|
7
4
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
8
|
-
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
9
5
|
const worker_container_1 = require("../di/worker-container");
|
|
10
6
|
const services = node_worker_threads_1.workerData?.services ?? [];
|
|
11
7
|
const container = new worker_container_1.WorkerContainer();
|
|
@@ -48,27 +44,32 @@ node_worker_threads_1.parentPort?.on('message', (msg) => {
|
|
|
48
44
|
});
|
|
49
45
|
function buildProxy(descriptor) {
|
|
50
46
|
const proxy = {};
|
|
47
|
+
const propertyKey = descriptor.propertyKey;
|
|
51
48
|
for (const methodName of descriptor.methodNames) {
|
|
52
49
|
proxy[methodName] = (...args) => new Promise((resolve, reject) => {
|
|
53
|
-
const callId =
|
|
50
|
+
const callId = nextCallId();
|
|
54
51
|
pendingIpc.set(callId, { resolve, reject });
|
|
55
52
|
const request = {
|
|
56
53
|
type: 'ipc:invoke', callId,
|
|
57
|
-
propertyKey
|
|
54
|
+
propertyKey,
|
|
58
55
|
methodName, args,
|
|
59
56
|
};
|
|
60
57
|
try {
|
|
61
|
-
node_worker_threads_1.parentPort
|
|
58
|
+
node_worker_threads_1.parentPort.postMessage(request);
|
|
62
59
|
}
|
|
63
60
|
catch (err) {
|
|
64
61
|
pendingIpc.delete(callId);
|
|
65
|
-
reject(new Error(`IPC proxy "${
|
|
62
|
+
reject(new Error(`IPC proxy "${propertyKey}.${methodName}" could not serialise args: ` +
|
|
66
63
|
`${err.message}`));
|
|
67
64
|
}
|
|
68
65
|
});
|
|
69
66
|
}
|
|
70
67
|
return proxy;
|
|
71
68
|
}
|
|
69
|
+
// Counter-based call IDs — far cheaper than crypto.randomUUID() and only
|
|
70
|
+
// need to be unique within this worker process.
|
|
71
|
+
let __callCounter = 0;
|
|
72
|
+
const nextCallId = () => 'c' + (++__callCounter).toString(36);
|
|
72
73
|
const queue = [];
|
|
73
74
|
let busy = false;
|
|
74
75
|
async function runNext() {
|
|
@@ -91,7 +92,8 @@ async function runNext() {
|
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
94
|
// Restore ALS context and run the task inside it
|
|
94
|
-
const alsContext = job.alsContext
|
|
95
|
+
const alsContext = job.alsContext;
|
|
96
|
+
const hasAls = alsContext && hasOwnKeys(alsContext);
|
|
95
97
|
const run = async () => {
|
|
96
98
|
const inst = instances.get(job.serviceName);
|
|
97
99
|
if (!inst)
|
|
@@ -108,10 +110,10 @@ async function runNext() {
|
|
|
108
110
|
return inst[job.methodName](...args);
|
|
109
111
|
};
|
|
110
112
|
try {
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
const data = await workerAls.run(alsContext, run);
|
|
114
|
-
node_worker_threads_1.parentPort
|
|
113
|
+
// Skip the ALS wrapper entirely when there's no context to propagate —
|
|
114
|
+
// ALS.run() has measurable overhead (async-hooks resource tracking).
|
|
115
|
+
const data = hasAls ? await workerAls.run(alsContext, run) : await run();
|
|
116
|
+
node_worker_threads_1.parentPort.postMessage({ ok: true, data });
|
|
115
117
|
}
|
|
116
118
|
catch (error) {
|
|
117
119
|
const e = error;
|
|
@@ -123,16 +125,26 @@ async function runNext() {
|
|
|
123
125
|
// Capture any extra own enumerable properties (e.g. HttpException.status)
|
|
124
126
|
extra: serializeExtraProps(e),
|
|
125
127
|
};
|
|
126
|
-
node_worker_threads_1.parentPort
|
|
128
|
+
node_worker_threads_1.parentPort.postMessage({ ok: false, error: serialized });
|
|
127
129
|
}
|
|
128
130
|
finally {
|
|
129
131
|
if (job.abortSignalId) {
|
|
130
132
|
pendingAborts.delete(job.abortSignalId);
|
|
131
133
|
}
|
|
132
134
|
busy = false;
|
|
133
|
-
|
|
135
|
+
if (queue.length > 0)
|
|
136
|
+
runNext();
|
|
134
137
|
}
|
|
135
138
|
}
|
|
139
|
+
function hasOwnKeys(obj) {
|
|
140
|
+
// Cheaper than Object.keys(obj).length > 0 — no array allocation.
|
|
141
|
+
// noinspection LoopStatementThatDoesntLoopJS
|
|
142
|
+
for (const _k in obj) {
|
|
143
|
+
void _k;
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
136
148
|
function serializeExtraProps(err) {
|
|
137
149
|
const skip = new Set(['name', 'message', 'stack', 'code']);
|
|
138
150
|
const extra = {};
|
|
@@ -145,7 +157,8 @@ function serializeExtraProps(err) {
|
|
|
145
157
|
extra[key] = err[key];
|
|
146
158
|
hasExtra = true;
|
|
147
159
|
}
|
|
148
|
-
catch { /* skip non-cloneable */
|
|
160
|
+
catch { /* skip non-cloneable */
|
|
161
|
+
}
|
|
149
162
|
}
|
|
150
163
|
return hasExtra ? extra : undefined;
|
|
151
164
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-runtime.js","sourceRoot":"","sources":["../../src/worker/worker-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker-runtime.js","sourceRoot":"","sources":["../../src/worker/worker-runtime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nestworker",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Enterprise-grade worker thread module for NestJS — priority pool, auto-discovery, DI in workers",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"build": "tsc -p tsconfig.build.json",
|
|
14
14
|
"build:watch": "tsc -p tsconfig.build.json --watch",
|
|
15
15
|
"example": "npm run build && node dist/example/main.js",
|
|
16
|
+
"bench": "npm run build && node dist/example/bench.js",
|
|
16
17
|
"prepublishOnly": "npm run build"
|
|
17
18
|
},
|
|
18
19
|
"keywords": [
|