nestworker 2.0.8 → 2.1.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.
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.WorkerPool = void 0;
7
7
  const node_worker_threads_1 = require("node:worker_threads");
8
+ const node_events_1 = require("node:events");
8
9
  const node_os_1 = __importDefault(require("node:os"));
9
10
  const node_path_1 = __importDefault(require("node:path"));
10
11
  const PRIORITY_WEIGHT = {
@@ -12,89 +13,118 @@ const PRIORITY_WEIGHT = {
12
13
  NORMAL: 2,
13
14
  LOW: 1,
14
15
  };
15
- class WorkerPool {
16
+ class WorkerPool extends node_events_1.EventEmitter {
16
17
  services;
17
18
  size;
19
+ shutdownTimeout;
18
20
  workers = [];
19
21
  idle = [];
22
+ warmingUp = new Set();
20
23
  queue = [];
21
24
  destroyed = false;
22
25
  active = new Map();
23
- constructor(services, size = node_os_1.default.cpus().length) {
26
+ /** Maps abortSignalId worker currently running that job */
27
+ signalWorkerMap = new Map();
28
+ proxyMap = new Map();
29
+ constructor(services, proxyInstances, size = node_os_1.default.cpus().length, shutdownTimeout = 30_000) {
30
+ super();
24
31
  this.services = services;
25
32
  this.size = size;
33
+ this.shutdownTimeout = shutdownTimeout;
34
+ for (const { propertyKey, instance } of proxyInstances) {
35
+ this.proxyMap.set(propertyKey, instance);
36
+ }
26
37
  for (let i = 0; i < this.size; i++) {
27
- const worker = this.spawnWorker();
28
- this.workers.push(worker);
29
- this.idle.push(worker);
38
+ this.spawnWorker();
30
39
  }
31
40
  }
32
- execute(job) {
33
- if (this.destroyed) {
41
+ execute(job, signal) {
42
+ if (this.destroyed)
34
43
  return Promise.reject(new Error('WorkerPool destroyed'));
35
- }
36
- return new Promise(async (resolve, reject) => {
44
+ return new Promise((resolve, reject) => {
45
+ // Reject immediately if already aborted
46
+ if (signal?.aborted) {
47
+ reject(new DOMException('Task aborted before enqueue', 'AbortError'));
48
+ return;
49
+ }
37
50
  const task = {
38
51
  job,
39
52
  resolve: resolve,
40
53
  reject,
54
+ attempts: 0,
55
+ signal,
41
56
  };
42
- await this.preemptIfNeeded(task);
43
- // ALWAYS enqueue first
44
- // otherwise priority is bypassed
57
+ if (signal) {
58
+ signal.addEventListener('abort', () => {
59
+ // Remove from queue if not yet dispatched
60
+ const idx = this.queue.indexOf(task);
61
+ if (idx >= 0) {
62
+ this.queue.splice(idx, 1);
63
+ reject(new DOMException('Task aborted', 'AbortError'));
64
+ return;
65
+ }
66
+ // Already running — send abort signal to worker
67
+ if (job.abortSignalId) {
68
+ const worker = this.signalWorkerMap.get(job.abortSignalId);
69
+ if (worker) {
70
+ try {
71
+ worker.postMessage({ type: 'abort', abortSignalId: job.abortSignalId });
72
+ }
73
+ catch { /* worker gone */ }
74
+ }
75
+ }
76
+ }, { once: true });
77
+ }
45
78
  this.enqueue(task);
46
- // process queue
47
79
  this.schedule();
48
80
  });
49
81
  }
50
- async preemptIfNeeded(incoming) {
51
- if (incoming.job.priority !== 'HIGH') {
52
- return false;
53
- }
54
- for (const [worker, running] of this.active) {
55
- if (running.priority === 'LOW') {
56
- // stop LOW task
57
- await worker.terminate();
58
- // requeue interrupted LOW task
59
- this.enqueue(running.task);
60
- // remove dead worker
61
- this.active.delete(worker);
62
- const idx = this.workers.indexOf(worker);
63
- if (idx >= 0) {
64
- this.workers.splice(idx, 1);
65
- }
66
- // create replacement worker
67
- const replacement = this.spawnWorker();
68
- this.workers.push(replacement);
69
- // dispatch HIGH immediately
70
- this.dispatch(replacement, incoming);
71
- return true;
82
+ stats() {
83
+ return {
84
+ poolSize: this.size,
85
+ idle: this.idle.length,
86
+ busy: this.active.size,
87
+ queued: this.queue.length,
88
+ warmingUp: this.warmingUp.size,
89
+ };
90
+ }
91
+ spawnWorker() {
92
+ const worker = new node_worker_threads_1.Worker(node_path_1.default.resolve(__dirname, '../worker/worker-runtime.js'), { workerData: { services: this.services } });
93
+ this.workers.push(worker);
94
+ this.warmingUp.add(worker);
95
+ const onReady = (msg) => {
96
+ const message = msg;
97
+ if (message?.type !== 'worker:ready')
98
+ return;
99
+ worker.removeListener('message', onReady);
100
+ this.warmingUp.delete(worker);
101
+ if (!this.destroyed) {
102
+ this.idle.push(worker);
103
+ this.schedule();
72
104
  }
73
- }
74
- return false;
105
+ };
106
+ worker.on('message', onReady);
107
+ worker.once('error', (err) => this.handleWorkerError(worker, err));
108
+ worker.once('exit', (code) => this.handleWorkerExit(worker, code));
109
+ return worker;
75
110
  }
76
111
  enqueue(task) {
77
112
  const weight = PRIORITY_WEIGHT[task.job.priority];
78
- let lo = 0;
79
- let hi = this.queue.length;
113
+ let lo = 0, hi = this.queue.length;
80
114
  while (lo < hi) {
81
115
  const mid = (lo + hi) >>> 1;
82
- if (PRIORITY_WEIGHT[this.queue[mid].job.priority] < weight) {
116
+ if (PRIORITY_WEIGHT[this.queue[mid].job.priority] < weight)
83
117
  hi = mid;
84
- }
85
- else {
118
+ else
86
119
  lo = mid + 1;
87
- }
88
120
  }
89
121
  this.queue.splice(lo, 0, task);
90
122
  }
91
123
  schedule() {
92
124
  if (this.destroyed)
93
125
  return;
94
- while (this.idle.length > 0 &&
95
- this.queue.length > 0) {
126
+ while (this.idle.length > 0 && this.queue.length > 0) {
96
127
  const worker = this.idle.pop();
97
- // highest priority task first
98
128
  const task = this.queue.shift();
99
129
  this.dispatch(worker, task);
100
130
  }
@@ -102,109 +132,224 @@ class WorkerPool {
102
132
  dispatch(worker, task) {
103
133
  let settled = false;
104
134
  let timeoutHandle;
135
+ const startedAt = Date.now();
136
+ task.attempts++;
137
+ task.job.attempt = task.attempts - 1;
138
+ this.active.set(worker, { task, priority: task.job.priority, startedAt });
139
+ if (task.job.abortSignalId) {
140
+ this.signalWorkerMap.set(task.job.abortSignalId, worker);
141
+ }
142
+ this.emit('taskStart', task.job);
105
143
  const cleanup = () => {
106
144
  worker.removeListener('message', onMessage);
107
- worker.removeListener('error', onError);
108
- worker.removeListener('exit', onExit);
109
- if (timeoutHandle) {
145
+ if (timeoutHandle)
110
146
  clearTimeout(timeoutHandle);
147
+ if (task.job.abortSignalId) {
148
+ this.signalWorkerMap.delete(task.job.abortSignalId);
111
149
  }
112
150
  };
113
151
  const recycle = () => {
114
152
  cleanup();
115
- if (this.destroyed)
116
- return;
117
- this.idle.push(worker);
118
- // continue processing
119
- this.schedule();
153
+ this.active.delete(worker);
154
+ if (!this.destroyed) {
155
+ this.idle.push(worker);
156
+ this.schedule();
157
+ }
120
158
  };
121
159
  const settle = (fn) => {
122
160
  if (settled)
123
161
  return;
124
162
  settled = true;
125
- Promise.resolve(fn())
126
- .catch(() => { })
127
- .finally(() => {
128
- recycle();
129
- });
163
+ fn();
164
+ recycle();
165
+ };
166
+ const handleFailure = (serializedError) => {
167
+ const { retry = 0, retryDelay = 0 } = task.job;
168
+ this.emit('taskError', task.job, serializedError);
169
+ if (task.attempts < retry + 1) {
170
+ // Re-enqueue with delay
171
+ const delay = typeof retryDelay === 'number' ? retryDelay : 0;
172
+ const scheduleRetry = () => {
173
+ this.enqueue(task);
174
+ this.schedule();
175
+ };
176
+ if (delay > 0)
177
+ setTimeout(scheduleRetry, delay);
178
+ else
179
+ scheduleRetry();
180
+ return;
181
+ }
182
+ // All attempts exhausted → dead letter
183
+ const dlEvent = {
184
+ jobId: task.job.jobId,
185
+ serviceName: task.job.serviceName,
186
+ methodName: task.job.methodName,
187
+ args: task.job.args,
188
+ attempts: task.attempts,
189
+ error: serializedError,
190
+ failedAt: new Date(),
191
+ };
192
+ this.emit('dead', dlEvent);
193
+ task.reject(deserializeError(serializedError));
130
194
  };
131
- const onMessage = (result) => {
195
+ const onMessage = async (msg) => {
196
+ const message = msg;
197
+ // ── IPC invoke from worker ────────────────────────────────────────
198
+ if (message.type === 'ipc:invoke') {
199
+ const req = message;
200
+ const svcInstance = this.proxyMap.get(req.propertyKey);
201
+ const reply = (res) => {
202
+ try {
203
+ worker.postMessage(res);
204
+ }
205
+ catch {
206
+ try {
207
+ worker.postMessage({
208
+ type: 'ipc:result', callId: res.callId, ok: false,
209
+ error: `IPC result for "${req.propertyKey}.${req.methodName}" ` +
210
+ `is not structuredClone-compatible.`,
211
+ });
212
+ }
213
+ catch { /* worker gone */ }
214
+ }
215
+ };
216
+ if (!svcInstance) {
217
+ reply({ type: 'ipc:result', callId: req.callId, ok: false,
218
+ error: `No proxy registered for "${req.propertyKey}"` });
219
+ return;
220
+ }
221
+ const method = svcInstance[req.methodName];
222
+ if (typeof method !== 'function') {
223
+ reply({ type: 'ipc:result', callId: req.callId, ok: false,
224
+ error: `Method "${req.methodName}" not found on "${req.propertyKey}"` });
225
+ return;
226
+ }
227
+ try {
228
+ // Call via svcInstance[method]() to preserve `this` binding.
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 });
233
+ }
234
+ catch (err) {
235
+ reply({ type: 'ipc:result', callId: req.callId, ok: false,
236
+ error: err.message ?? String(err) });
237
+ }
238
+ return;
239
+ }
240
+ if (message.type === 'worker:ready')
241
+ return;
242
+ // ── Job result ────────────────────────────────────────────────────
243
+ const result = message;
244
+ const durationMs = Date.now() - startedAt;
132
245
  settle(() => {
133
246
  if (result.ok) {
247
+ this.emit('taskEnd', task.job, durationMs);
134
248
  task.resolve(result.data);
135
249
  }
136
250
  else {
137
- task.reject(new Error(result.error?.message ??
138
- 'Worker error'));
251
+ handleFailure(result.error ?? {
252
+ name: 'Error',
253
+ message: 'Unknown worker error',
254
+ });
139
255
  }
140
256
  });
141
257
  };
142
- const onError = async (err) => {
143
- settle(async () => {
144
- task.reject(err);
145
- await this.replaceWorker(worker);
146
- });
147
- };
148
- const onExit = async (code) => {
149
- if (this.destroyed)
150
- return;
151
- settle(async () => {
152
- task.reject(new Error(`Worker exited unexpectedly with code ${code} ` +
153
- `while running "${task.job.serviceName}.${task.job.methodName}"`));
154
- await this.replaceWorker(worker);
155
- });
156
- };
157
- worker.once('message', onMessage);
158
- worker.once('error', onError);
159
- worker.once('exit', onExit);
160
- if (task.job.timeout &&
161
- task.job.timeout > 0) {
258
+ worker.on('message', onMessage);
259
+ if (task.job.timeout && task.job.timeout > 0) {
162
260
  timeoutHandle = setTimeout(async () => {
163
261
  if (settled)
164
262
  return;
165
263
  settled = true;
166
264
  cleanup();
167
- task.reject(new Error(`Task "${task.job.serviceName}.${task.job.methodName}" timed out after ${task.job.timeout}ms`));
265
+ this.active.delete(worker);
266
+ const serializedError = {
267
+ name: 'TimeoutError',
268
+ message: `Task "${task.job.serviceName}.${task.job.methodName}" ` +
269
+ `timed out after ${task.job.timeout}ms`,
270
+ };
271
+ handleFailure(serializedError);
168
272
  try {
169
273
  await worker.terminate();
170
274
  }
171
275
  catch { }
172
- await this.replaceWorker(worker);
276
+ this.replaceWorker(worker);
173
277
  this.schedule();
174
278
  }, task.job.timeout);
175
279
  }
176
280
  worker.postMessage(task.job);
177
281
  }
178
- spawnWorker() {
179
- return new node_worker_threads_1.Worker(node_path_1.default.resolve(__dirname, '../worker/worker-runtime.js'), {
180
- workerData: {
181
- services: this.services,
182
- },
183
- });
282
+ handleWorkerError(worker, err) {
283
+ const running = this.active.get(worker);
284
+ if (running) {
285
+ const { serviceName, methodName } = running.task.job;
286
+ const wrapped = new Error(`Worker crashed in "${serviceName}.${methodName}": ${err.message}`);
287
+ wrapped.stack = err.stack;
288
+ this.emit('error', wrapped, running.task.job);
289
+ running.task.reject(wrapped);
290
+ this.active.delete(worker);
291
+ }
292
+ this.replaceWorker(worker);
184
293
  }
185
- async replaceWorker(oldWorker) {
186
- const workerIndex = this.workers.indexOf(oldWorker);
187
- if (workerIndex >= 0) {
188
- this.workers.splice(workerIndex, 1);
294
+ handleWorkerExit(worker, code) {
295
+ if (this.destroyed)
296
+ return;
297
+ const running = this.active.get(worker);
298
+ if (running) {
299
+ running.task.reject(new Error(`Worker exited with code ${code} while running ` +
300
+ `"${running.task.job.serviceName}.${running.task.job.methodName}"`));
301
+ this.active.delete(worker);
189
302
  }
190
- const idleIndex = this.idle.indexOf(oldWorker);
191
- if (idleIndex >= 0) {
192
- this.idle.splice(idleIndex, 1);
303
+ this.replaceWorker(worker);
304
+ }
305
+ replaceWorker(oldWorker) {
306
+ const remove = (arr) => {
307
+ const i = arr.indexOf(oldWorker);
308
+ if (i >= 0)
309
+ arr.splice(i, 1);
310
+ };
311
+ remove(this.workers);
312
+ remove(this.idle);
313
+ this.warmingUp.delete(oldWorker);
314
+ if (!this.destroyed) {
315
+ this.spawnWorker();
316
+ this.schedule();
193
317
  }
194
- const newWorker = this.spawnWorker();
195
- this.workers.push(newWorker);
196
- this.idle.push(newWorker);
197
318
  }
198
319
  async destroy() {
199
320
  this.destroyed = true;
321
+ // Drain: wait for all active jobs to finish, up to shutdownTimeout
322
+ if (this.active.size > 0) {
323
+ await Promise.race([
324
+ // Wait for all active jobs to settle
325
+ Promise.allSettled(Array.from(this.active.values()).map(({ task }) => new Promise((res) => {
326
+ const orig = task.resolve;
327
+ const origRej = task.reject;
328
+ task.resolve = (v) => { orig(v); res(); };
329
+ task.reject = (e) => { origRej(e); res(); };
330
+ }))),
331
+ // Force after timeout
332
+ new Promise((res) => setTimeout(res, this.shutdownTimeout)),
333
+ ]);
334
+ }
335
+ // Reject anything still queued
200
336
  for (const queued of this.queue) {
201
337
  queued.reject(new Error('WorkerPool destroyed'));
202
338
  }
203
339
  this.queue.length = 0;
204
- await Promise.allSettled(this.workers.map((worker) => worker.terminate()));
340
+ await Promise.allSettled(this.workers.map((w) => w.terminate()));
205
341
  this.workers.length = 0;
206
342
  this.idle.length = 0;
207
343
  }
208
344
  }
209
345
  exports.WorkerPool = WorkerPool;
346
+ function deserializeError(serialized) {
347
+ const err = new Error(serialized.message);
348
+ err.name = serialized.name;
349
+ if (serialized.stack)
350
+ err.stack = serialized.stack;
351
+ if (serialized.extra)
352
+ Object.assign(err, serialized.extra);
353
+ return err;
354
+ }
210
355
  //# sourceMappingURL=worker.pool.js.map
@@ -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":"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"}
@@ -1,88 +1,40 @@
1
1
  import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
2
2
  import { WorkerDiscoveryService } from '../discovery/discovery.service';
3
- import type { TaskPriority, WorkerModuleOptions } from './worker.interfaces';
4
- /**
5
- * WorkerService
6
- *
7
- * Main entry point for executing worker-thread tasks.
8
- *
9
- * Features:
10
- * - Lazy worker pool initialization
11
- * - Automatic worker discovery
12
- * - Priority queue support
13
- * - Timeout support
14
- * - Worker thread execution
15
- * - NestJS dependency integration
16
- *
17
- * Lifecycle:
18
- * 1. Discovers worker-enabled services
19
- * 2. Serializes metadata for worker runtime
20
- * 3. Creates WorkerPool
21
- * 4. Dispatches tasks to workers
22
- * 5. Handles graceful shutdown
23
- *
24
- * Example:
25
- *
26
- * ```ts
27
- * await workerService.run(
28
- * 'ImageService',
29
- * 'resizeImage',
30
- * [500],
31
- * {
32
- * priority: 'HIGH',
33
- * timeout: 5000,
34
- * },
35
- * );
36
- * ```
37
- */
3
+ import type { TaskPriority, WorkerModuleOptions, DeadLetterEvent, PoolStats, SerializedError, WorkerJob } from './worker.interfaces';
4
+ export type { DeadLetterEvent, PoolStats };
5
+ export interface RunOptions {
6
+ priority?: TaskPriority;
7
+ timeout?: number;
8
+ retry?: number;
9
+ retryDelay?: number;
10
+ signal?: AbortSignal;
11
+ }
38
12
  export declare class WorkerService implements OnModuleInit, OnModuleDestroy {
39
13
  private readonly discovery;
40
14
  private readonly options;
15
+ private readonly logger;
41
16
  private pool;
42
- private readonly taskOptions;
17
+ private readonly taskDefaults;
18
+ private readonly taskProxies;
43
19
  constructor(discovery: WorkerDiscoveryService, options: WorkerModuleOptions);
44
20
  onModuleInit(): void;
45
21
  private initPool;
46
22
  /**
47
- * Executes a worker task.
48
- *
49
- * Parameters:
50
- * - serviceName: target service
51
- * - methodName: target method
52
- * - args: serialized arguments
53
- * - overrides: runtime priority/timeout overrides
54
- *
55
- * Priority:
56
- * - HIGH
57
- * - NORMAL
58
- * - LOW
59
- *
60
- * Timeout:
61
- * Automatically terminates timed-out workers.
62
- *
63
- * Example:
64
- *
65
- * ```ts
66
- * await workerService.run(
67
- * 'ImageService',
68
- * 'generateThumbnail',
69
- * [1920, 1080],
70
- * {
71
- * priority: 'HIGH',
72
- * timeout: 3000,
73
- * },
74
- * );
75
- * ```
76
- */
77
- run<T = unknown>(serviceName: string, methodName: string, args?: unknown[], overrides?: {
78
- priority?: TaskPriority;
79
- timeout?: number;
80
- }): Promise<T>;
81
- /**
82
- * Gracefully shuts down worker pool.
23
+ * Run a @WorkerTask method in a worker thread.
83
24
  *
84
- * Called automatically by NestJS
85
- * during application shutdown.
25
+ * @param serviceName Class name of the @WorkerClass provider
26
+ * @param methodName Method decorated with @WorkerTask
27
+ * @param args structuredClone-compatible arguments
28
+ * @param options Optional priority / timeout / retry / AbortSignal overrides
86
29
  */
30
+ run<T = unknown>(serviceName: string, methodName: string, args?: unknown[], options?: RunOptions): Promise<T>;
31
+ /** Listen for dead-letter events (jobs that exhausted all retry attempts) */
32
+ onDead(listener: (event: DeadLetterEvent) => void): this;
33
+ /** Listen for task lifecycle events */
34
+ onTaskEnd(listener: (job: WorkerJob, durationMs: number) => void): this;
35
+ onTaskStart(listener: (job: WorkerJob) => void): this;
36
+ onTaskError(listener: (job: WorkerJob, error: SerializedError) => void): this;
37
+ /** Current pool stats — use for health checks and metrics */
38
+ stats(): PoolStats;
87
39
  onModuleDestroy(): Promise<void>;
88
40
  }