bunqueue 2.3.1 → 2.4.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.
Files changed (83) hide show
  1. package/dist/application/queueManager.d.ts.map +1 -1
  2. package/dist/application/queueManager.js +1 -37
  3. package/dist/application/queueManager.js.map +1 -1
  4. package/dist/application/statsManager.d.ts +10 -0
  5. package/dist/application/statsManager.d.ts.map +1 -1
  6. package/dist/application/statsManager.js +42 -0
  7. package/dist/application/statsManager.js.map +1 -1
  8. package/dist/client/jobConversion.d.ts +3 -76
  9. package/dist/client/jobConversion.d.ts.map +1 -1
  10. package/dist/client/jobConversion.js +2 -100
  11. package/dist/client/jobConversion.js.map +1 -1
  12. package/dist/client/jobConversionHelpers.d.ts +13 -0
  13. package/dist/client/jobConversionHelpers.d.ts.map +1 -0
  14. package/dist/client/jobConversionHelpers.js +105 -0
  15. package/dist/client/jobConversionHelpers.js.map +1 -0
  16. package/dist/client/jobConversionTypes.d.ts +81 -0
  17. package/dist/client/jobConversionTypes.d.ts.map +1 -0
  18. package/dist/client/jobConversionTypes.js +6 -0
  19. package/dist/client/jobConversionTypes.js.map +1 -0
  20. package/dist/client/queue/addBatcher.d.ts +60 -0
  21. package/dist/client/queue/addBatcher.d.ts.map +1 -0
  22. package/dist/client/queue/addBatcher.js +137 -0
  23. package/dist/client/queue/addBatcher.js.map +1 -0
  24. package/dist/client/queue/queue.d.ts +1 -0
  25. package/dist/client/queue/queue.d.ts.map +1 -1
  26. package/dist/client/queue/queue.js +25 -2
  27. package/dist/client/queue/queue.js.map +1 -1
  28. package/dist/client/types.d.ts +16 -0
  29. package/dist/client/types.d.ts.map +1 -1
  30. package/dist/client/types.js.map +1 -1
  31. package/dist/client/worker/worker.d.ts +4 -95
  32. package/dist/client/worker/worker.d.ts.map +1 -1
  33. package/dist/client/worker/worker.js +50 -282
  34. package/dist/client/worker/worker.js.map +1 -1
  35. package/dist/client/worker/workerHeartbeat.d.ts +16 -0
  36. package/dist/client/worker/workerHeartbeat.d.ts.map +1 -0
  37. package/dist/client/worker/workerHeartbeat.js +44 -0
  38. package/dist/client/worker/workerHeartbeat.js.map +1 -0
  39. package/dist/client/worker/workerPull.d.ts +21 -0
  40. package/dist/client/worker/workerPull.d.ts.map +1 -0
  41. package/dist/client/worker/workerPull.js +60 -0
  42. package/dist/client/worker/workerPull.js.map +1 -0
  43. package/dist/client/worker/workerRateLimiter.d.ts +37 -0
  44. package/dist/client/worker/workerRateLimiter.d.ts.map +1 -0
  45. package/dist/client/worker/workerRateLimiter.js +84 -0
  46. package/dist/client/worker/workerRateLimiter.js.map +1 -0
  47. package/dist/domain/queue/shard.d.ts +8 -23
  48. package/dist/domain/queue/shard.d.ts.map +1 -1
  49. package/dist/domain/queue/shard.js +30 -90
  50. package/dist/domain/queue/shard.js.map +1 -1
  51. package/dist/domain/queue/shardCounters.d.ts +36 -0
  52. package/dist/domain/queue/shardCounters.d.ts.map +1 -0
  53. package/dist/domain/queue/shardCounters.js +68 -0
  54. package/dist/domain/queue/shardCounters.js.map +1 -0
  55. package/dist/domain/queue/waiterManager.d.ts +19 -0
  56. package/dist/domain/queue/waiterManager.d.ts.map +1 -0
  57. package/dist/domain/queue/waiterManager.js +64 -0
  58. package/dist/domain/queue/waiterManager.js.map +1 -0
  59. package/dist/shared/boundedMap.d.ts +31 -0
  60. package/dist/shared/boundedMap.d.ts.map +1 -0
  61. package/dist/shared/boundedMap.js +78 -0
  62. package/dist/shared/boundedMap.js.map +1 -0
  63. package/dist/shared/boundedSet.d.ts +27 -0
  64. package/dist/shared/boundedSet.d.ts.map +1 -0
  65. package/dist/shared/boundedSet.js +64 -0
  66. package/dist/shared/boundedSet.js.map +1 -0
  67. package/dist/shared/lru.d.ts +5 -197
  68. package/dist/shared/lru.d.ts.map +1 -1
  69. package/dist/shared/lru.js +5 -538
  70. package/dist/shared/lru.js.map +1 -1
  71. package/dist/shared/lruMap.d.ts +43 -0
  72. package/dist/shared/lruMap.d.ts.map +1 -0
  73. package/dist/shared/lruMap.js +142 -0
  74. package/dist/shared/lruMap.js.map +1 -0
  75. package/dist/shared/lruSet.d.ts +37 -0
  76. package/dist/shared/lruSet.d.ts.map +1 -0
  77. package/dist/shared/lruSet.js +106 -0
  78. package/dist/shared/lruSet.js.map +1 -0
  79. package/dist/shared/ttlMap.d.ts +82 -0
  80. package/dist/shared/ttlMap.d.ts.map +1 -0
  81. package/dist/shared/ttlMap.js +169 -0
  82. package/dist/shared/ttlMap.js.map +1 -0
  83. package/package.json +1 -1
@@ -9,6 +9,9 @@ import { FORCE_EMBEDDED, WORKER_CONSTANTS } from './types';
9
9
  import { AckBatcher } from './ackBatcher';
10
10
  import { parseJobFromResponse } from './jobParser';
11
11
  import { processJob } from './processor';
12
+ import { WorkerRateLimiter } from './workerRateLimiter';
13
+ import { startHeartbeat } from './workerHeartbeat';
14
+ import { pullEmbedded, pullTcp } from './workerPull';
12
15
  /**
13
16
  * Worker class for processing jobs
14
17
  */
@@ -20,6 +23,7 @@ export class Worker extends EventEmitter {
20
23
  tcp;
21
24
  tcpPool;
22
25
  ackBatcher;
26
+ rateLimiter;
23
27
  running = false;
24
28
  paused = false;
25
29
  closing = false;
@@ -40,9 +44,6 @@ export class Worker extends EventEmitter {
40
44
  pendingJobs = [];
41
45
  pendingJobsHead = 0;
42
46
  processingScheduled = false; // Prevent multiple setImmediate calls
43
- // Rate limiter state (BullMQ v5 compatible)
44
- limiter;
45
- limiterTokens = []; // Timestamps of recent job completions
46
47
  // Drained event tracking
47
48
  lastDrainedEmit = 0;
48
49
  // Stalled event subscription (BullMQ v5 compatible)
@@ -62,11 +63,10 @@ export class Worker extends EventEmitter {
62
63
  batchSize: Math.min(opts.batchSize ?? 10, 1000),
63
64
  pollTimeout: Math.min(opts.pollTimeout ?? 0, WORKER_CONSTANTS.MAX_POLL_TIMEOUT),
64
65
  embedded: this.embedded,
65
- // Lock-based ownership: disable for high-throughput scenarios where stall detection is sufficient
66
66
  useLocks: opts.useLocks ?? true,
67
67
  };
68
- // Initialize rate limiter if provided
69
- this.limiter = opts.limiter ?? null;
68
+ // Initialize rate limiter
69
+ this.rateLimiter = new WorkerRateLimiter(opts.limiter ?? null);
70
70
  this.ackBatcher = new AckBatcher({
71
71
  batchSize: opts.batchSize ?? 10,
72
72
  interval: WORKER_CONSTANTS.DEFAULT_ACK_INTERVAL,
@@ -108,7 +108,8 @@ export class Worker extends EventEmitter {
108
108
  this.subscribeToStalledEvents();
109
109
  }
110
110
  if (!this.embedded && this.opts.heartbeatInterval > 0) {
111
- this.startHeartbeat();
111
+ const deps = this.getHeartbeatDeps();
112
+ this.heartbeatTimer = startHeartbeat(deps, this.opts.heartbeatInterval);
112
113
  }
113
114
  this.poll();
114
115
  }
@@ -121,7 +122,6 @@ export class Worker extends EventEmitter {
121
122
  if (event.queue !== this.name)
122
123
  return;
123
124
  if (event.eventType === "stalled" /* EventType.Stalled */) {
124
- // Emit stalled event (BullMQ v5 format: jobId, prev)
125
125
  this.emit('stalled', event.jobId, 'active');
126
126
  }
127
127
  });
@@ -144,38 +144,22 @@ export class Worker extends EventEmitter {
144
144
  this.paused = false;
145
145
  this.run();
146
146
  }
147
- /** Check if worker is currently running */
148
147
  isRunning() {
149
148
  return this.running;
150
149
  }
151
- /** Check if worker is paused */
152
150
  isPaused() {
153
151
  return this.paused && !this.closed;
154
152
  }
155
- /** Check if worker is closed */
156
153
  isClosed() {
157
154
  return this.closed;
158
155
  }
159
- /**
160
- * Wait until the worker is ready (BullMQ v5 compatible).
161
- * In embedded mode, resolves immediately.
162
- * In TCP mode, waits for connection to be established.
163
- */
164
156
  async waitUntilReady() {
165
- if (this.embedded) {
166
- // Embedded mode is always ready
157
+ if (this.embedded)
167
158
  return;
168
- }
169
159
  if (this.tcpPool) {
170
- // Wait for TCP connection by sending a ping
171
160
  await this.tcpPool.send({ cmd: 'Ping' });
172
161
  }
173
162
  }
174
- /**
175
- * Mark a job for cancellation (BullMQ v5 compatible).
176
- * The job will be failed with the given reason when it completes processing.
177
- * Returns true if the job was found and marked for cancellation.
178
- */
179
163
  cancelJob(jobId, reason) {
180
164
  if (this.activeJobIds.has(jobId)) {
181
165
  this.cancelledJobs.add(jobId);
@@ -184,123 +168,29 @@ export class Worker extends EventEmitter {
184
168
  }
185
169
  return false;
186
170
  }
187
- /**
188
- * Mark all active jobs for cancellation (BullMQ v5 compatible).
189
- */
190
171
  cancelAllJobs(reason) {
191
172
  for (const jobId of this.activeJobIds) {
192
173
  this.cancelledJobs.add(jobId);
193
174
  this.emit('cancelled', { jobId, reason: reason ?? 'All jobs cancelled' });
194
175
  }
195
176
  }
196
- /**
197
- * Check if a job has been marked for cancellation.
198
- * Can be called from within a processor to check if the job should stop.
199
- */
200
177
  isJobCancelled(jobId) {
201
178
  return this.cancelledJobs.has(jobId);
202
179
  }
203
- /**
204
- * Check if rate limiter allows processing another job.
205
- * Returns true if we can process, false if rate limited.
206
- */
207
- canProcessWithinLimit() {
208
- if (!this.limiter)
209
- return true;
210
- const now = Date.now();
211
- const windowStart = now - this.limiter.duration;
212
- // Remove expired tokens
213
- this.limiterTokens = this.limiterTokens.filter((t) => t > windowStart);
214
- // Check if we have capacity
215
- return this.limiterTokens.length < this.limiter.max;
216
- }
217
- /**
218
- * Record a job completion for rate limiting.
219
- */
220
- recordJobForLimiter() {
221
- if (!this.limiter)
222
- return;
223
- this.limiterTokens.push(Date.now());
224
- }
225
- /**
226
- * Get time until rate limiter allows next job (ms).
227
- * Returns 0 if not rate limited.
228
- */
229
- getTimeUntilNextSlot() {
230
- if (!this.limiter)
231
- return 0;
232
- const now = Date.now();
233
- const windowStart = now - this.limiter.duration;
234
- // Remove expired tokens
235
- this.limiterTokens = this.limiterTokens.filter((t) => t > windowStart);
236
- if (this.limiterTokens.length < this.limiter.max) {
237
- return 0;
238
- }
239
- // Find oldest token and calculate when it expires
240
- const oldestToken = Math.min(...this.limiterTokens);
241
- return oldestToken + this.limiter.duration - now;
242
- }
243
- /**
244
- * Get rate limiter info (for debugging/monitoring).
245
- */
180
+ // ============ Rate Limiter (delegated) ============
246
181
  getRateLimiterInfo() {
247
- if (!this.limiter)
248
- return null;
249
- const now = Date.now();
250
- const windowStart = now - this.limiter.duration;
251
- const currentTokens = this.limiterTokens.filter((t) => t > windowStart).length;
252
- return {
253
- current: currentTokens,
254
- max: this.limiter.max,
255
- duration: this.limiter.duration,
256
- };
182
+ return this.rateLimiter.getRateLimiterInfo();
257
183
  }
258
- /**
259
- * Apply rate limiting to this worker (BullMQ v5 compatible).
260
- * The worker will not process jobs until the rate limit expires.
261
- *
262
- * @param expireTimeMs - Time in milliseconds until rate limit expires
263
- */
264
184
  rateLimit(expireTimeMs) {
265
- if (expireTimeMs <= 0)
266
- return;
267
- // Fill rate limiter tokens to block processing
268
- if (this.limiter) {
269
- const now = Date.now();
270
- // Add enough tokens to block for the specified time
271
- for (let i = 0; i < this.limiter.max; i++) {
272
- this.limiterTokens.push(now + expireTimeMs - this.limiter.duration);
273
- }
274
- }
275
- // Store rate limit expiration
276
- this.rateLimitExpiration = Date.now() + expireTimeMs;
185
+ this.rateLimiter.rateLimit(expireTimeMs);
277
186
  }
278
- /** Rate limit expiration timestamp (internal) */
279
- rateLimitExpiration = 0;
280
- /**
281
- * Check if worker is currently rate limited.
282
- */
283
187
  isRateLimited() {
284
- return Date.now() < this.rateLimitExpiration;
188
+ return this.rateLimiter.isRateLimited();
285
189
  }
286
- /**
287
- * Manually start the stalled job check timer (BullMQ v5 compatible).
288
- * The check will run once immediately and then every stalledInterval ms.
289
- * In bunqueue, stall detection is handled automatically by the manager/server.
290
- */
190
+ // ============ BullMQ v5 Compatibility ============
291
191
  async startStalledCheckTimer() {
292
- // In bunqueue, stall detection is handled automatically by:
293
- // - Embedded mode: QueueManager.checkStalledJobs() runs periodically
294
- // - TCP mode: Server-side stall detection
295
- // This method is a no-op for API compatibility
192
+ // No-op for API compatibility - stall detection is automatic
296
193
  }
297
- /**
298
- * Delay processing for a specified time (BullMQ v5 compatible).
299
- * The worker will not pick up new jobs during this delay.
300
- *
301
- * @param milliseconds - Time to delay in ms (default: 0)
302
- * @param abortController - Optional AbortController to cancel the delay
303
- */
304
194
  async delay(milliseconds = 0, abortController) {
305
195
  if (milliseconds <= 0)
306
196
  return;
@@ -314,17 +204,7 @@ export class Worker extends EventEmitter {
314
204
  }
315
205
  });
316
206
  }
317
- // ============================================================================
318
- // BullMQ v5 Manual Job Control Methods
319
- // ============================================================================
320
- /**
321
- * Get the next job from the queue (BullMQ v5 compatible).
322
- * This is for manual job processing - typically you'd use the processor callback instead.
323
- *
324
- * @param token - Lock token for job ownership
325
- * @param opts - Options (currently unused, for API compatibility)
326
- * @returns The next job or undefined if queue is empty
327
- */
207
+ // ============ Manual Job Control ============
328
208
  async getNextJob(token, _opts) {
329
209
  if (this.closed)
330
210
  return undefined;
@@ -369,15 +249,6 @@ export class Worker extends EventEmitter {
369
249
  }
370
250
  return job;
371
251
  }
372
- /**
373
- * Manually process a job (BullMQ v5 compatible).
374
- * This is for advanced use cases where you need manual control over job processing.
375
- *
376
- * @param job - The job to process
377
- * @param token - Lock token for job ownership
378
- * @param fetchNextCallback - Optional callback to fetch next job after completion
379
- * @returns The processed job or void
380
- */
381
252
  async processJobManually(job, token, fetchNextCallback) {
382
253
  if (this.closed)
383
254
  return undefined;
@@ -398,7 +269,6 @@ export class Worker extends EventEmitter {
398
269
  emitter: this,
399
270
  token: this.opts.useLocks ? token : undefined,
400
271
  });
401
- // Fetch next job if callback provided
402
272
  if (fetchNextCallback) {
403
273
  return await fetchNextCallback();
404
274
  }
@@ -411,18 +281,9 @@ export class Worker extends EventEmitter {
411
281
  if (this.opts.useLocks) {
412
282
  this.jobTokens.delete(jobIdStr);
413
283
  }
414
- this.recordJobForLimiter();
284
+ this.rateLimiter.recordJobForLimiter();
415
285
  }
416
286
  }
417
- /**
418
- * Extend locks on multiple jobs (BullMQ v5 compatible).
419
- * Used to prevent jobs from being considered stalled during long processing.
420
- *
421
- * @param jobIds - Array of job IDs to extend locks for
422
- * @param tokens - Array of lock tokens corresponding to each job
423
- * @param duration - Duration in milliseconds to extend the lock
424
- * @returns Number of locks successfully extended
425
- */
426
287
  async extendJobLocks(jobIds, tokens, duration) {
427
288
  if (this.closed || jobIds.length === 0)
428
289
  return 0;
@@ -439,7 +300,6 @@ export class Worker extends EventEmitter {
439
300
  }
440
301
  return extended;
441
302
  }
442
- // TCP mode
443
303
  if (!this.tcp)
444
304
  return 0;
445
305
  const response = await this.tcp.send({
@@ -451,7 +311,7 @@ export class Worker extends EventEmitter {
451
311
  const extended = response.extended;
452
312
  return extended ?? 0;
453
313
  }
454
- /** Close worker gracefully */
314
+ // ============ Lifecycle ============
455
315
  async close(force = false) {
456
316
  if (this.closed)
457
317
  return;
@@ -467,25 +327,19 @@ export class Worker extends EventEmitter {
467
327
  this.heartbeatTimer = null;
468
328
  }
469
329
  if (!force) {
470
- // Wait for buffered jobs to be processed and all active jobs to finish
471
330
  const bufferSize = () => this.pendingJobs.length - this.pendingJobsHead;
472
331
  while (this.activeJobs > 0 || bufferSize() > 0) {
473
332
  await Bun.sleep(50);
474
333
  }
475
334
  }
476
- // Flush any remaining pending acks
477
335
  await this.ackBatcher.flush();
478
- // Wait for ALL in-flight flushes to complete (critical!)
479
336
  await this.ackBatcher.waitForInFlight();
480
337
  this.ackBatcher.stop();
481
- // Small delay to ensure TCP responses are processed
482
338
  await Bun.sleep(100);
483
- // Unsubscribe from stalled events
484
339
  if (this.stalledUnsubscribe) {
485
340
  this.stalledUnsubscribe();
486
341
  this.stalledUnsubscribe = null;
487
342
  }
488
- // Clear tracking sets
489
343
  this.activeJobIds.clear();
490
344
  this.pulledJobIds.clear();
491
345
  this.jobTokens.clear();
@@ -498,45 +352,7 @@ export class Worker extends EventEmitter {
498
352
  this.closing = false;
499
353
  this.emit('closed');
500
354
  }
501
- startHeartbeat() {
502
- this.heartbeatTimer = setInterval(() => void this.sendHeartbeat(), this.opts.heartbeatInterval);
503
- }
504
- async sendHeartbeat() {
505
- // Send heartbeat for ALL pulled jobs (including buffered ones)
506
- // This is critical: when locks are enabled, we need to renew them
507
- // even for jobs sitting in the buffer waiting to be processed
508
- if (this.pulledJobIds.size === 0 || !this.tcp)
509
- return;
510
- try {
511
- // Always take a fresh snapshot - avoids race with job start/complete
512
- const ids = Array.from(this.pulledJobIds);
513
- if (ids.length === 0)
514
- return;
515
- if (this.opts.useLocks) {
516
- // With locks: include tokens for lock renewal
517
- const tokens = ids.map((id) => this.jobTokens.get(id) ?? '');
518
- if (ids.length === 1) {
519
- await this.tcp.send({ cmd: 'JobHeartbeat', id: ids[0], token: tokens[0] || undefined });
520
- }
521
- else {
522
- await this.tcp.send({ cmd: 'JobHeartbeatB', ids, tokens });
523
- }
524
- }
525
- else {
526
- // Without locks: simple heartbeat for stall detection only
527
- if (ids.length === 1) {
528
- await this.tcp.send({ cmd: 'JobHeartbeat', id: ids[0] });
529
- }
530
- else {
531
- await this.tcp.send({ cmd: 'JobHeartbeatB', ids });
532
- }
533
- }
534
- }
535
- catch (err) {
536
- const error = err instanceof Error ? err : new Error(String(err));
537
- this.emit('error', Object.assign(error, { context: 'heartbeat' }));
538
- }
539
- }
355
+ // ============ Processing Pipeline ============
540
356
  poll() {
541
357
  if (!this.running || this.closing)
542
358
  return;
@@ -547,8 +363,8 @@ export class Worker extends EventEmitter {
547
363
  return;
548
364
  }
549
365
  // Check rate limiter
550
- if (!this.canProcessWithinLimit()) {
551
- const waitTime = this.getTimeUntilNextSlot();
366
+ if (!this.rateLimiter.canProcessWithinLimit()) {
367
+ const waitTime = this.rateLimiter.getTimeUntilNextSlot();
552
368
  this.pollTimer = setTimeout(() => {
553
369
  this.poll();
554
370
  }, Math.max(waitTime, 10));
@@ -562,23 +378,19 @@ export class Worker extends EventEmitter {
562
378
  try {
563
379
  let item = this.getBufferedJob();
564
380
  if (!item) {
565
- const items = await this.pullBatch();
381
+ const items = await this.doPullBatch();
566
382
  // Re-check state after async operation (can be modified during await)
567
383
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
568
384
  if (!this.running || this.closing)
569
385
  return;
570
386
  if (items.length > 0) {
571
- // Register ALL pulled jobs for heartbeat tracking immediately
572
387
  this.registerPulledJobs(items);
573
388
  item = items[0];
574
- // IMPORTANT: Only set pendingJobs if buffer is empty to avoid race condition
575
- // where concurrent tryProcess() calls could overwrite each other's buffers
576
389
  if (this.pendingJobsHead >= this.pendingJobs.length) {
577
390
  this.pendingJobs = items;
578
391
  this.pendingJobsHead = 1;
579
392
  }
580
393
  else {
581
- // Buffer still has items - append new items instead of replacing
582
394
  this.pendingJobs = this.pendingJobs.slice(this.pendingJobsHead).concat(items.slice(1));
583
395
  this.pendingJobsHead = 0;
584
396
  }
@@ -589,7 +401,6 @@ export class Worker extends EventEmitter {
589
401
  this.startJob(item.job, item.token);
590
402
  }
591
403
  else {
592
- // Emit drained event when queue is empty (throttled to avoid spam)
593
404
  const now = Date.now();
594
405
  if (now - this.lastDrainedEmit > 1000) {
595
406
  this.lastDrainedEmit = now;
@@ -602,17 +413,13 @@ export class Worker extends EventEmitter {
602
413
  }
603
414
  }
604
415
  catch (err) {
605
- // Re-check running state - could have changed during async pullBatch()
606
416
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
607
417
  if (!this.running)
608
418
  return;
609
419
  this.handlePullError(err);
610
420
  }
611
421
  }
612
- /** Register pulled jobs for heartbeat tracking */
613
422
  registerPulledJobs(items) {
614
- // When locks are enabled: jobs need heartbeats to renew locks
615
- // Without locks: still track for stall detection heartbeats
616
423
  for (const pulledItem of items) {
617
424
  const jobIdStr = String(pulledItem.job.id);
618
425
  this.pulledJobIds.add(jobIdStr);
@@ -631,79 +438,24 @@ export class Worker extends EventEmitter {
631
438
  }
632
439
  return item;
633
440
  }
634
- async pullBatch() {
441
+ async doPullBatch() {
635
442
  const slots = this.opts.concurrency - this.activeJobs;
636
443
  const batchSize = Math.min(this.opts.batchSize, slots, 1000);
637
444
  if (batchSize <= 0)
638
445
  return [];
639
- return this.embedded ? this.pullEmbedded(batchSize) : this.pullTcp(batchSize);
640
- }
641
- async pullEmbedded(count) {
642
- const manager = getSharedManager();
643
- // Use lock-based pull only when useLocks is enabled
644
- if (this.opts.useLocks) {
645
- if (count === 1) {
646
- const { job, token } = await manager.pullWithLock(this.name, this.workerId, 0);
647
- return job ? [{ job, token }] : [];
648
- }
649
- const { jobs, tokens } = await manager.pullBatchWithLock(this.name, count, this.workerId, 0);
650
- return jobs.map((job, i) => ({ job, token: tokens[i] || null }));
651
- }
652
- // No locks - use regular pull
653
- if (count === 1) {
654
- const job = await manager.pull(this.name, 0);
655
- return job ? [{ job, token: null }] : [];
656
- }
657
- const jobs = await manager.pullBatch(this.name, count, 0);
658
- return jobs.map((job) => ({ job, token: null }));
659
- }
660
- async pullTcp(count) {
661
- if (!this.tcp || this.closing)
662
- return [];
663
- // Build pull command - only request locks if useLocks is enabled
664
- const cmd = {
665
- cmd: count === 1 ? 'PULL' : 'PULLB',
666
- queue: this.name,
667
- timeout: this.opts.pollTimeout,
668
- count,
669
- };
670
- // Only request lock ownership when useLocks is enabled
671
- if (this.opts.useLocks) {
672
- cmd.owner = this.workerId;
673
- }
674
- const response = await this.tcp.send(cmd);
675
- if (!response.ok)
676
- return [];
677
- if (count === 1) {
678
- const job = response.job;
679
- // Only expect token if locks are enabled
680
- const token = this.opts.useLocks
681
- ? (response.token ?? null)
682
- : null;
683
- if (job) {
684
- return [{ job: parseJobFromResponse(job, this.name), token }];
685
- }
686
- return [];
687
- }
688
- const jobs = response.jobs;
689
- // Only expect tokens if locks are enabled
690
- const tokens = this.opts.useLocks ? (response.tokens ?? []) : [];
691
- return (jobs?.map((j, i) => ({
692
- job: parseJobFromResponse(j, this.name),
693
- token: tokens[i] || null,
694
- })) ?? []);
446
+ const config = this.getPullConfig();
447
+ return this.embedded
448
+ ? pullEmbedded(config, batchSize)
449
+ : pullTcp(config, this.tcp, batchSize, this.closing);
695
450
  }
696
451
  startJob(job, token) {
697
452
  this.activeJobs++;
698
453
  const jobIdStr = String(job.id);
699
454
  this.activeJobIds.add(jobIdStr);
700
- // Token management only when locks are enabled
701
455
  if (this.opts.useLocks && token && !this.jobTokens.has(jobIdStr)) {
702
456
  this.jobTokens.set(jobIdStr, token);
703
457
  }
704
- // Ensure job is in pulledJobIds for heartbeat (should already be there from pullBatch)
705
458
  this.pulledJobIds.add(jobIdStr);
706
- // Only pass token if locks are enabled
707
459
  const tokenForProcess = this.opts.useLocks ? token : undefined;
708
460
  void processJob(job, {
709
461
  name: this.name,
@@ -712,21 +464,19 @@ export class Worker extends EventEmitter {
712
464
  tcp: this.tcp,
713
465
  ackBatcher: this.ackBatcher,
714
466
  emitter: this,
715
- token: tokenForProcess, // Pass token for ACK/FAIL verification (only when locks enabled)
467
+ token: tokenForProcess,
716
468
  }).finally(() => {
717
469
  this.activeJobs--;
718
470
  this.activeJobIds.delete(jobIdStr);
719
- this.pulledJobIds.delete(jobIdStr); // Remove from heartbeat tracking
720
- this.cancelledJobs.delete(jobIdStr); // Clean up cancellation flag
471
+ this.pulledJobIds.delete(jobIdStr);
472
+ this.cancelledJobs.delete(jobIdStr);
721
473
  if (this.opts.useLocks) {
722
- this.jobTokens.delete(jobIdStr); // Clean up token
474
+ this.jobTokens.delete(jobIdStr);
723
475
  }
724
- // Record job completion for rate limiter
725
- this.recordJobForLimiter();
476
+ this.rateLimiter.recordJobForLimiter();
726
477
  if (this.running && !this.closing)
727
478
  this.poll();
728
479
  });
729
- // Prevent multiple setImmediate calls (event loop starvation)
730
480
  if (this.activeJobs < this.opts.concurrency && !this.closing && !this.processingScheduled) {
731
481
  this.processingScheduled = true;
732
482
  setImmediate(() => {
@@ -748,5 +498,23 @@ export class Worker extends EventEmitter {
748
498
  this.poll();
749
499
  }, backoffMs);
750
500
  }
501
+ // ============ Private Helpers ============
502
+ getHeartbeatDeps() {
503
+ return {
504
+ pulledJobIds: this.pulledJobIds,
505
+ jobTokens: this.jobTokens,
506
+ tcp: this.tcp,
507
+ useLocks: this.opts.useLocks,
508
+ emitter: this,
509
+ };
510
+ }
511
+ getPullConfig() {
512
+ return {
513
+ name: this.name,
514
+ workerId: this.workerId,
515
+ useLocks: this.opts.useLocks,
516
+ pollTimeout: this.opts.pollTimeout,
517
+ };
518
+ }
751
519
  }
752
520
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/client/worker/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/client/worker/worker.ts"],"names":[],"mappings":"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"}