bunqueue 1.1.4 → 1.2.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.
Files changed (88) hide show
  1. package/dist/application/dlqManager.d.ts.map +1 -1
  2. package/dist/application/dlqManager.js +11 -3
  3. package/dist/application/dlqManager.js.map +1 -1
  4. package/dist/application/eventsManager.d.ts +10 -1
  5. package/dist/application/eventsManager.d.ts.map +1 -1
  6. package/dist/application/eventsManager.js +91 -21
  7. package/dist/application/eventsManager.js.map +1 -1
  8. package/dist/application/operations/ack.d.ts +16 -1
  9. package/dist/application/operations/ack.d.ts.map +1 -1
  10. package/dist/application/operations/ack.js +269 -5
  11. package/dist/application/operations/ack.js.map +1 -1
  12. package/dist/application/operations/jobManagement.d.ts.map +1 -1
  13. package/dist/application/operations/jobManagement.js +17 -3
  14. package/dist/application/operations/jobManagement.js.map +1 -1
  15. package/dist/application/operations/pull.d.ts +1 -0
  16. package/dist/application/operations/pull.d.ts.map +1 -1
  17. package/dist/application/operations/pull.js +106 -8
  18. package/dist/application/operations/pull.js.map +1 -1
  19. package/dist/application/operations/push.d.ts.map +1 -1
  20. package/dist/application/operations/push.js +9 -0
  21. package/dist/application/operations/push.js.map +1 -1
  22. package/dist/application/operations/queueControl.d.ts +4 -1
  23. package/dist/application/operations/queueControl.d.ts.map +1 -1
  24. package/dist/application/operations/queueControl.js +16 -13
  25. package/dist/application/operations/queueControl.js.map +1 -1
  26. package/dist/application/queueManager.d.ts +28 -2
  27. package/dist/application/queueManager.d.ts.map +1 -1
  28. package/dist/application/queueManager.js +132 -34
  29. package/dist/application/queueManager.js.map +1 -1
  30. package/dist/application/webhookManager.d.ts +7 -1
  31. package/dist/application/webhookManager.d.ts.map +1 -1
  32. package/dist/application/webhookManager.js +38 -6
  33. package/dist/application/webhookManager.js.map +1 -1
  34. package/dist/application/workerManager.d.ts +5 -1
  35. package/dist/application/workerManager.d.ts.map +1 -1
  36. package/dist/application/workerManager.js +35 -10
  37. package/dist/application/workerManager.js.map +1 -1
  38. package/dist/bunqueue +0 -0
  39. package/dist/domain/queue/priorityQueue.d.ts +15 -0
  40. package/dist/domain/queue/priorityQueue.d.ts.map +1 -1
  41. package/dist/domain/queue/priorityQueue.js +40 -0
  42. package/dist/domain/queue/priorityQueue.js.map +1 -1
  43. package/dist/domain/queue/shard.d.ts +67 -0
  44. package/dist/domain/queue/shard.d.ts.map +1 -1
  45. package/dist/domain/queue/shard.js +198 -0
  46. package/dist/domain/queue/shard.js.map +1 -1
  47. package/dist/infrastructure/persistence/sqlite.d.ts +3 -1
  48. package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
  49. package/dist/infrastructure/persistence/sqlite.js +25 -4
  50. package/dist/infrastructure/persistence/sqlite.js.map +1 -1
  51. package/dist/infrastructure/scheduler/cronScheduler.d.ts +7 -0
  52. package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -1
  53. package/dist/infrastructure/scheduler/cronScheduler.js +49 -18
  54. package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
  55. package/dist/infrastructure/server/handlers/advanced.d.ts +1 -1
  56. package/dist/infrastructure/server/handlers/advanced.d.ts.map +1 -1
  57. package/dist/infrastructure/server/handlers/advanced.js +14 -11
  58. package/dist/infrastructure/server/handlers/advanced.js.map +1 -1
  59. package/dist/infrastructure/server/handlers/core.d.ts +2 -2
  60. package/dist/infrastructure/server/handlers/core.d.ts.map +1 -1
  61. package/dist/infrastructure/server/handlers/core.js +6 -12
  62. package/dist/infrastructure/server/handlers/core.js.map +1 -1
  63. package/dist/infrastructure/server/http.d.ts.map +1 -1
  64. package/dist/infrastructure/server/http.js +22 -27
  65. package/dist/infrastructure/server/http.js.map +1 -1
  66. package/dist/infrastructure/server/rateLimiter.d.ts +4 -3
  67. package/dist/infrastructure/server/rateLimiter.d.ts.map +1 -1
  68. package/dist/infrastructure/server/rateLimiter.js +71 -19
  69. package/dist/infrastructure/server/rateLimiter.js.map +1 -1
  70. package/dist/main.js +3 -0
  71. package/dist/main.js.map +1 -1
  72. package/dist/shared/hash.d.ts +4 -4
  73. package/dist/shared/hash.d.ts.map +1 -1
  74. package/dist/shared/hash.js +20 -4
  75. package/dist/shared/hash.js.map +1 -1
  76. package/dist/shared/lock.d.ts +7 -1
  77. package/dist/shared/lock.d.ts.map +1 -1
  78. package/dist/shared/lock.js +75 -40
  79. package/dist/shared/lock.js.map +1 -1
  80. package/dist/shared/lru.d.ts +55 -0
  81. package/dist/shared/lru.d.ts.map +1 -1
  82. package/dist/shared/lru.js +165 -2
  83. package/dist/shared/lru.js.map +1 -1
  84. package/dist/shared/minHeap.d.ts +35 -0
  85. package/dist/shared/minHeap.d.ts.map +1 -0
  86. package/dist/shared/minHeap.js +116 -0
  87. package/dist/shared/minHeap.js.map +1 -0
  88. package/package.json +1 -1
@@ -13,6 +13,10 @@ const WORKER_TIMEOUT_MS = 30_000;
13
13
  export class WorkerManager {
14
14
  workers = new Map();
15
15
  cleanupInterval = null;
16
+ /** Running counters for O(1) stats - avoids O(n) reduce operations */
17
+ totalProcessedCounter = 0;
18
+ totalFailedCounter = 0;
19
+ totalActiveJobsCounter = 0;
16
20
  constructor() {
17
21
  this.startCleanup();
18
22
  }
@@ -25,6 +29,11 @@ export class WorkerManager {
25
29
  }
26
30
  /** Unregister a worker */
27
31
  unregister(id) {
32
+ const worker = this.workers.get(id);
33
+ if (worker) {
34
+ // Adjust running counters before removal
35
+ this.totalActiveJobsCounter -= worker.activeJobs;
36
+ }
28
37
  const removed = this.workers.delete(id);
29
38
  if (removed) {
30
39
  workerLog.info('Unregistered worker', { workerId: id });
@@ -48,6 +57,7 @@ export class WorkerManager {
48
57
  const worker = this.workers.get(id);
49
58
  if (worker) {
50
59
  worker.activeJobs++;
60
+ this.totalActiveJobsCounter++;
51
61
  worker.lastSeen = Date.now();
52
62
  }
53
63
  }
@@ -55,8 +65,12 @@ export class WorkerManager {
55
65
  jobCompleted(id) {
56
66
  const worker = this.workers.get(id);
57
67
  if (worker) {
58
- worker.activeJobs = Math.max(0, worker.activeJobs - 1);
68
+ if (worker.activeJobs > 0) {
69
+ worker.activeJobs--;
70
+ this.totalActiveJobsCounter--;
71
+ }
59
72
  worker.processedJobs++;
73
+ this.totalProcessedCounter++;
60
74
  worker.lastSeen = Date.now();
61
75
  }
62
76
  }
@@ -64,8 +78,12 @@ export class WorkerManager {
64
78
  jobFailed(id) {
65
79
  const worker = this.workers.get(id);
66
80
  if (worker) {
67
- worker.activeJobs = Math.max(0, worker.activeJobs - 1);
81
+ if (worker.activeJobs > 0) {
82
+ worker.activeJobs--;
83
+ this.totalActiveJobsCounter--;
84
+ }
68
85
  worker.failedJobs++;
86
+ this.totalFailedCounter++;
69
87
  worker.lastSeen = Date.now();
70
88
  }
71
89
  }
@@ -94,6 +112,8 @@ export class WorkerManager {
94
112
  const staleTimeout = WORKER_TIMEOUT_MS * 3; // Give extra time before removal
95
113
  for (const [id, worker] of this.workers) {
96
114
  if (now - worker.lastSeen > staleTimeout) {
115
+ // Adjust running counters before removal
116
+ this.totalActiveJobsCounter -= worker.activeJobs;
97
117
  this.workers.delete(id);
98
118
  workerLog.info('Removed stale worker', { workerId: id, name: worker.name });
99
119
  }
@@ -106,17 +126,22 @@ export class WorkerManager {
106
126
  this.cleanupInterval = null;
107
127
  }
108
128
  }
109
- /** Get stats */
129
+ /** Get stats - O(n) only for active count, O(1) for other metrics */
110
130
  getStats() {
111
- const workers = Array.from(this.workers.values());
112
131
  const now = Date.now();
113
- const active = workers.filter((w) => now - w.lastSeen < WORKER_TIMEOUT_MS);
132
+ let activeWorkers = 0;
133
+ // Only iterate once for active count (time-based, can't use counter)
134
+ for (const worker of this.workers.values()) {
135
+ if (now - worker.lastSeen < WORKER_TIMEOUT_MS) {
136
+ activeWorkers++;
137
+ }
138
+ }
114
139
  return {
115
- total: workers.length,
116
- active: active.length,
117
- totalProcessed: workers.reduce((sum, w) => sum + w.processedJobs, 0),
118
- totalFailed: workers.reduce((sum, w) => sum + w.failedJobs, 0),
119
- activeJobs: workers.reduce((sum, w) => sum + w.activeJobs, 0),
140
+ total: this.workers.size,
141
+ active: activeWorkers,
142
+ totalProcessed: this.totalProcessedCounter,
143
+ totalFailed: this.totalFailedCounter,
144
+ activeJobs: this.totalActiveJobsCounter,
120
145
  };
121
146
  }
122
147
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workerManager.js","sourceRoot":"","sources":["../../src/application/workerManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workerManager.js","sourceRoot":"","sources":["../../src/application/workerManager.ts"],"names":[],"mappings":"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"}
package/dist/bunqueue ADDED
Binary file
@@ -37,6 +37,21 @@ export declare class IndexedPriorityQueue {
37
37
  values(): Job[];
38
38
  /** Clear the queue */
39
39
  clear(): void;
40
+ /**
41
+ * Get the ratio of stale entries in the heap
42
+ * Used to decide when to compact
43
+ */
44
+ getStaleRatio(): number;
45
+ /**
46
+ * Compact the heap by removing stale entries
47
+ * Call when stale ratio exceeds threshold (e.g., 20%)
48
+ * O(n) operation but reclaims memory and improves performance
49
+ */
50
+ compact(): void;
51
+ /** Rebuild heap property from arbitrary array - O(n) */
52
+ private heapify;
53
+ /** Check if compaction is needed (stale ratio > threshold) */
54
+ needsCompaction(threshold?: number): boolean;
40
55
  private removeTop;
41
56
  private bubbleUp;
42
57
  private bubbleDown;
@@ -1 +1 @@
1
- {"version":3,"file":"priorityQueue.d.ts","sourceRoot":"","sources":["../../../src/domain/queue/priorityQueue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAgD/C;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2D;IACjF,OAAO,CAAC,UAAU,CAAM;IAExB,uBAAuB;IACvB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,qBAAqB;IACrB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gCAAgC;IAChC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAkBpB,mCAAmC;IACnC,GAAG,IAAI,GAAG,GAAG,IAAI;IAmBjB,wDAAwD;IACxD,IAAI,IAAI,GAAG,GAAG,IAAI;IAgBlB,8BAA8B;IAC9B,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI;IAI9B,iCAAiC;IACjC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAI1B,8DAA8D;IAC9D,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI;IAShC,qCAAqC;IACrC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAyB1D,sDAAsD;IACtD,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAyBpD,mCAAmC;IACnC,MAAM,IAAI,GAAG,EAAE;IAIf,sBAAsB;IACtB,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,IAAI;CAKb"}
1
+ {"version":3,"file":"priorityQueue.d.ts","sourceRoot":"","sources":["../../../src/domain/queue/priorityQueue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAgD/C;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2D;IACjF,OAAO,CAAC,UAAU,CAAM;IAExB,uBAAuB;IACvB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,qBAAqB;IACrB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gCAAgC;IAChC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAkBpB,mCAAmC;IACnC,GAAG,IAAI,GAAG,GAAG,IAAI;IAmBjB,wDAAwD;IACxD,IAAI,IAAI,GAAG,GAAG,IAAI;IAgBlB,8BAA8B;IAC9B,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI;IAI9B,iCAAiC;IACjC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAI1B,8DAA8D;IAC9D,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI;IAShC,qCAAqC;IACrC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAyB1D,sDAAsD;IACtD,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAyBpD,mCAAmC;IACnC,MAAM,IAAI,GAAG,EAAE;IAIf,sBAAsB;IACtB,KAAK,IAAI,IAAI;IAMb;;;OAGG;IACH,aAAa,IAAI,MAAM;IAKvB;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAiBf,wDAAwD;IACxD,OAAO,CAAC,OAAO;IAOf,8DAA8D;IAC9D,eAAe,CAAC,SAAS,GAAE,MAAY,GAAG,OAAO;IAMjD,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,IAAI;CAKb"}
@@ -175,6 +175,46 @@ export class IndexedPriorityQueue {
175
175
  this.index.clear();
176
176
  this.generation = 0n;
177
177
  }
178
+ /**
179
+ * Get the ratio of stale entries in the heap
180
+ * Used to decide when to compact
181
+ */
182
+ getStaleRatio() {
183
+ if (this.heap.length === 0)
184
+ return 0;
185
+ return 1 - this.index.size / this.heap.length;
186
+ }
187
+ /**
188
+ * Compact the heap by removing stale entries
189
+ * Call when stale ratio exceeds threshold (e.g., 20%)
190
+ * O(n) operation but reclaims memory and improves performance
191
+ */
192
+ compact() {
193
+ if (this.heap.length === 0)
194
+ return;
195
+ // Filter out stale entries
196
+ const validEntries = [];
197
+ for (const entry of this.heap) {
198
+ const indexed = this.index.get(entry.jobId);
199
+ if (indexed?.generation === entry.generation) {
200
+ validEntries.push(entry);
201
+ }
202
+ }
203
+ // Rebuild heap - O(n) heapify
204
+ this.heap = validEntries;
205
+ this.heapify();
206
+ }
207
+ /** Rebuild heap property from arbitrary array - O(n) */
208
+ heapify() {
209
+ // Start from last non-leaf node and bubble down
210
+ for (let i = Math.floor(this.heap.length / 2) - 1; i >= 0; i--) {
211
+ this.bubbleDown(i);
212
+ }
213
+ }
214
+ /** Check if compaction is needed (stale ratio > threshold) */
215
+ needsCompaction(threshold = 0.2) {
216
+ return this.getStaleRatio() > threshold;
217
+ }
178
218
  // ============ Heap Operations ============
179
219
  removeTop() {
180
220
  if (this.heap.length <= 1) {
@@ -1 +1 @@
1
- {"version":3,"file":"priorityQueue.js","sourceRoot":"","sources":["../../../src/domain/queue/priorityQueue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"priorityQueue.js","sourceRoot":"","sources":["../../../src/domain/queue/priorityQueue.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,15 @@
5
5
  import type { Job, JobId } from '../types/job';
6
6
  import { type QueueState, RateLimiter, ConcurrencyLimiter } from '../types/queue';
7
7
  import { IndexedPriorityQueue } from './priorityQueue';
8
+ /** Shard statistics counters for O(1) stats retrieval */
9
+ export interface ShardStats {
10
+ /** Total jobs in all queues (waiting + delayed) */
11
+ queuedJobs: number;
12
+ /** Jobs with runAt > now at time of push */
13
+ delayedJobs: number;
14
+ /** Total jobs in DLQ */
15
+ dlqJobs: number;
16
+ }
8
17
  /**
9
18
  * Shard contains:
10
19
  * - Queues (waiting + delayed jobs)
@@ -18,10 +27,24 @@ export declare class Shard {
18
27
  readonly queues: Map<string, IndexedPriorityQueue>;
19
28
  /** Dead letter queue by queue name */
20
29
  readonly dlq: Map<string, Job[]>;
30
+ /** Running counters for O(1) stats - updated on every operation */
31
+ private readonly stats;
32
+ /** Set of delayed job IDs for tracking when they become ready */
33
+ private readonly delayedJobIds;
34
+ /**
35
+ * Temporal index: sorted array of (createdAt, jobId) for efficient cleanQueue
36
+ * Kept sorted by createdAt for O(log n) binary search + O(k) cleanup
37
+ */
38
+ private readonly temporalIndex;
21
39
  /** Unique keys per queue for deduplication */
22
40
  readonly uniqueKeys: Map<string, Set<string>>;
23
41
  /** Jobs waiting for dependencies */
24
42
  readonly waitingDeps: Map<JobId, Job>;
43
+ /**
44
+ * Reverse index: depId -> Set of jobIds waiting for that dependency
45
+ * Enables O(1) lookup when a dependency completes instead of O(n) scan
46
+ */
47
+ readonly dependencyIndex: Map<JobId, Set<JobId>>;
25
48
  /** Parent jobs waiting for children to complete */
26
49
  readonly waitingChildren: Map<JobId, Job>;
27
50
  /** Queue state (pause, rate limit, concurrency) */
@@ -76,6 +99,20 @@ export declare class Shard {
76
99
  releaseConcurrency(queue: string): void;
77
100
  /** Release all resources for a job */
78
101
  releaseJobResources(queue: string, uniqueKey: string | null, groupId: string | null): void;
102
+ /**
103
+ * Register a job's dependencies in the reverse index
104
+ * Call when adding a job to waitingDeps
105
+ */
106
+ registerDependencies(jobId: JobId, dependsOn: JobId[]): void;
107
+ /**
108
+ * Unregister a job's dependencies from the reverse index
109
+ * Call when removing a job from waitingDeps
110
+ */
111
+ unregisterDependencies(jobId: JobId, dependsOn: JobId[]): void;
112
+ /**
113
+ * Get jobs waiting for a specific dependency - O(1)
114
+ */
115
+ getJobsWaitingFor(depId: JobId): Set<JobId> | undefined;
79
116
  /** Add job to DLQ */
80
117
  addToDlq(job: Job): void;
81
118
  /** Get DLQ jobs */
@@ -90,6 +127,36 @@ export declare class Shard {
90
127
  getDlqCount(queue: string): number;
91
128
  /** Get all queue names in this shard */
92
129
  getQueueNames(): string[];
130
+ /** Get shard statistics - O(1) */
131
+ getStats(): ShardStats;
132
+ /** Increment queued jobs counter and add to temporal index */
133
+ incrementQueued(jobId: JobId, isDelayed: boolean, createdAt?: number, queue?: string): void;
134
+ /** Decrement queued jobs counter and remove from temporal index */
135
+ decrementQueued(jobId: JobId): void;
136
+ /** Increment DLQ counter */
137
+ incrementDlq(): void;
138
+ /** Decrement DLQ counter */
139
+ decrementDlq(count?: number): void;
140
+ /** Update delayed jobs that have become ready (call periodically) */
141
+ refreshDelayedCount(now: number): void;
142
+ /** Reset all counters (used after drain/obliterate) */
143
+ resetQueuedCounters(): void;
144
+ /** Reset DLQ counter */
145
+ resetDlqCounter(): void;
146
+ /** Add job to temporal index - maintains sorted order by createdAt */
147
+ private addToTemporalIndex;
148
+ /**
149
+ * Get old jobs from temporal index - O(log n + k) where k = returned jobs
150
+ * Returns jobs older than threshold, up to limit
151
+ */
152
+ getOldJobs(queue: string, thresholdMs: number, limit: number): Array<{
153
+ jobId: JobId;
154
+ createdAt: number;
155
+ }>;
156
+ /** Remove job from temporal index (called after job is cleaned) */
157
+ removeFromTemporalIndex(jobId: JobId): void;
158
+ /** Clear temporal index for a queue */
159
+ clearTemporalIndexForQueue(queue: string): void;
93
160
  /** Drain all waiting jobs from queue */
94
161
  drain(queue: string): number;
95
162
  /** Obliterate queue completely */
@@ -1 +1 @@
1
- {"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../../src/domain/queue/shard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,KAAK,UAAU,EAAoB,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;;;;;;GAOG;AACH,qBAAa,KAAK;IAChB,oCAAoC;IACpC,QAAQ,CAAC,MAAM,oCAA2C;IAE1D,sCAAsC;IACtC,QAAQ,CAAC,GAAG,qBAA4B;IAExC,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,2BAAkC;IAErD,oCAAoC;IACpC,QAAQ,CAAC,WAAW,kBAAyB;IAE7C,mDAAmD;IACnD,QAAQ,CAAC,eAAe,kBAAyB;IAEjD,mDAAmD;IACnD,QAAQ,CAAC,UAAU,0BAAiC;IAEpD,mCAAmC;IACnC,QAAQ,CAAC,YAAY,2BAAkC;IAEvD,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,2BAAkC;IAEvD,qCAAqC;IACrC,QAAQ,CAAC,mBAAmB,kCAAyC;IAErE,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IAEjD,yDAAyD;IACzD,MAAM,IAAI,IAAI;IAOd,wDAAwD;IACxD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B5C,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB;IAS5C,sBAAsB;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IASlC,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/B,kBAAkB;IAClB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,mBAAmB;IACnB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO1B,uCAAuC;IACvC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAItD,0BAA0B;IAC1B,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IASnD,yBAAyB;IACzB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAMlD,oCAAoC;IACpC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAItD,gCAAgC;IAChC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IASnD,yBAAyB;IACzB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMlD,+BAA+B;IAC/B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKhD,uBAAuB;IACvB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMnC,sCAAsC;IACtC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAK3C,sCAAsC;IACtC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAWlD,8BAA8B;IAC9B,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMrC,sCAAsC;IACtC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAK7C,+BAA+B;IAC/B,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMvC,sCAAsC;IACtC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAY1F,qBAAqB;IACrB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IASxB,mBAAmB;IACnB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;IAM5C,0BAA0B;IAC1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI;IAQtD,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAU/B,sCAAsC;IACtC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAItC,8BAA8B;IAC9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC,wCAAwC;IACxC,aAAa,IAAI,MAAM,EAAE;IAQzB,wCAAwC;IACxC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ5B,kCAAkC;IAClC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAShC"}
1
+ {"version":3,"file":"shard.d.ts","sourceRoot":"","sources":["../../../src/domain/queue/shard.ts"],"names":[],"mappings":"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"}
@@ -17,10 +17,28 @@ export class Shard {
17
17
  queues = new Map();
18
18
  /** Dead letter queue by queue name */
19
19
  dlq = new Map();
20
+ /** Running counters for O(1) stats - updated on every operation */
21
+ stats = {
22
+ queuedJobs: 0,
23
+ delayedJobs: 0,
24
+ dlqJobs: 0,
25
+ };
26
+ /** Set of delayed job IDs for tracking when they become ready */
27
+ delayedJobIds = new Set();
28
+ /**
29
+ * Temporal index: sorted array of (createdAt, jobId) for efficient cleanQueue
30
+ * Kept sorted by createdAt for O(log n) binary search + O(k) cleanup
31
+ */
32
+ temporalIndex = [];
20
33
  /** Unique keys per queue for deduplication */
21
34
  uniqueKeys = new Map();
22
35
  /** Jobs waiting for dependencies */
23
36
  waitingDeps = new Map();
37
+ /**
38
+ * Reverse index: depId -> Set of jobIds waiting for that dependency
39
+ * Enables O(1) lookup when a dependency completes instead of O(n) scan
40
+ */
41
+ dependencyIndex = new Map();
24
42
  /** Parent jobs waiting for children to complete */
25
43
  waitingChildren = new Map();
26
44
  /** Queue state (pause, rate limit, concurrency) */
@@ -190,6 +208,42 @@ export class Shard {
190
208
  }
191
209
  this.releaseConcurrency(queue);
192
210
  }
211
+ // ============ Dependency Index Operations ============
212
+ /**
213
+ * Register a job's dependencies in the reverse index
214
+ * Call when adding a job to waitingDeps
215
+ */
216
+ registerDependencies(jobId, dependsOn) {
217
+ for (const depId of dependsOn) {
218
+ let waiters = this.dependencyIndex.get(depId);
219
+ if (!waiters) {
220
+ waiters = new Set();
221
+ this.dependencyIndex.set(depId, waiters);
222
+ }
223
+ waiters.add(jobId);
224
+ }
225
+ }
226
+ /**
227
+ * Unregister a job's dependencies from the reverse index
228
+ * Call when removing a job from waitingDeps
229
+ */
230
+ unregisterDependencies(jobId, dependsOn) {
231
+ for (const depId of dependsOn) {
232
+ const waiters = this.dependencyIndex.get(depId);
233
+ if (waiters) {
234
+ waiters.delete(jobId);
235
+ if (waiters.size === 0) {
236
+ this.dependencyIndex.delete(depId);
237
+ }
238
+ }
239
+ }
240
+ }
241
+ /**
242
+ * Get jobs waiting for a specific dependency - O(1)
243
+ */
244
+ getJobsWaitingFor(depId) {
245
+ return this.dependencyIndex.get(depId);
246
+ }
193
247
  // ============ DLQ Operations ============
194
248
  /** Add job to DLQ */
195
249
  addToDlq(job) {
@@ -199,6 +253,7 @@ export class Shard {
199
253
  this.dlq.set(job.queue, dlq);
200
254
  }
201
255
  dlq.push(job);
256
+ this.incrementDlq();
202
257
  }
203
258
  /** Get DLQ jobs */
204
259
  getDlq(queue, count) {
@@ -215,6 +270,7 @@ export class Shard {
215
270
  const idx = dlq.findIndex((j) => j.id === jobId);
216
271
  if (idx === -1)
217
272
  return null;
273
+ this.decrementDlq();
218
274
  return dlq.splice(idx, 1)[0];
219
275
  }
220
276
  /** Clear DLQ for queue */
@@ -224,6 +280,7 @@ export class Shard {
224
280
  return 0;
225
281
  const count = dlq.length;
226
282
  this.dlq.delete(queue);
283
+ this.decrementDlq(count);
227
284
  return count;
228
285
  }
229
286
  // ============ Queue Stats ============
@@ -246,17 +303,158 @@ export class Shard {
246
303
  names.add(name);
247
304
  return Array.from(names);
248
305
  }
306
+ // ============ Running Counters (O(1) Stats) ============
307
+ /** Get shard statistics - O(1) */
308
+ getStats() {
309
+ return { ...this.stats };
310
+ }
311
+ /** Increment queued jobs counter and add to temporal index */
312
+ incrementQueued(jobId, isDelayed, createdAt, queue) {
313
+ this.stats.queuedJobs++;
314
+ if (isDelayed) {
315
+ this.stats.delayedJobs++;
316
+ this.delayedJobIds.add(jobId);
317
+ }
318
+ // Add to temporal index for efficient cleanQueue
319
+ if (createdAt !== undefined && queue !== undefined) {
320
+ this.addToTemporalIndex(createdAt, jobId, queue);
321
+ }
322
+ }
323
+ /** Decrement queued jobs counter and remove from temporal index */
324
+ decrementQueued(jobId) {
325
+ this.stats.queuedJobs = Math.max(0, this.stats.queuedJobs - 1);
326
+ if (this.delayedJobIds.has(jobId)) {
327
+ this.stats.delayedJobs = Math.max(0, this.stats.delayedJobs - 1);
328
+ this.delayedJobIds.delete(jobId);
329
+ }
330
+ // Remove from temporal index (lazy removal - will be cleaned on next cleanQueue)
331
+ }
332
+ /** Increment DLQ counter */
333
+ incrementDlq() {
334
+ this.stats.dlqJobs++;
335
+ }
336
+ /** Decrement DLQ counter */
337
+ decrementDlq(count = 1) {
338
+ this.stats.dlqJobs = Math.max(0, this.stats.dlqJobs - count);
339
+ }
340
+ /** Update delayed jobs that have become ready (call periodically) */
341
+ refreshDelayedCount(now) {
342
+ const toRemove = [];
343
+ for (const jobId of this.delayedJobIds) {
344
+ // Find job in queues to check runAt
345
+ for (const q of this.queues.values()) {
346
+ const job = q.find(jobId);
347
+ if (job && job.runAt <= now) {
348
+ toRemove.push(jobId);
349
+ break;
350
+ }
351
+ }
352
+ }
353
+ for (const jobId of toRemove) {
354
+ this.delayedJobIds.delete(jobId);
355
+ this.stats.delayedJobs = Math.max(0, this.stats.delayedJobs - 1);
356
+ }
357
+ }
358
+ /** Reset all counters (used after drain/obliterate) */
359
+ resetQueuedCounters() {
360
+ this.stats.queuedJobs = 0;
361
+ this.stats.delayedJobs = 0;
362
+ this.delayedJobIds.clear();
363
+ }
364
+ /** Reset DLQ counter */
365
+ resetDlqCounter() {
366
+ this.stats.dlqJobs = 0;
367
+ }
368
+ // ============ Temporal Index (for efficient cleanQueue) ============
369
+ /** Add job to temporal index - maintains sorted order by createdAt */
370
+ addToTemporalIndex(createdAt, jobId, queue) {
371
+ // Binary search to find insertion point
372
+ let lo = 0;
373
+ let hi = this.temporalIndex.length;
374
+ while (lo < hi) {
375
+ const mid = (lo + hi) >>> 1;
376
+ if (this.temporalIndex[mid].createdAt < createdAt) {
377
+ lo = mid + 1;
378
+ }
379
+ else {
380
+ hi = mid;
381
+ }
382
+ }
383
+ this.temporalIndex.splice(lo, 0, { createdAt, jobId, queue });
384
+ }
385
+ /**
386
+ * Get old jobs from temporal index - O(log n + k) where k = returned jobs
387
+ * Returns jobs older than threshold, up to limit
388
+ */
389
+ getOldJobs(queue, thresholdMs, limit) {
390
+ const now = Date.now();
391
+ const threshold = now - thresholdMs;
392
+ const result = [];
393
+ // Temporal index is sorted by createdAt ascending (oldest first)
394
+ // Iterate from start until we find jobs newer than threshold
395
+ for (const entry of this.temporalIndex) {
396
+ if (entry.createdAt > threshold)
397
+ break;
398
+ if (entry.queue === queue) {
399
+ result.push({ jobId: entry.jobId, createdAt: entry.createdAt });
400
+ if (result.length >= limit)
401
+ break;
402
+ }
403
+ }
404
+ return result;
405
+ }
406
+ /** Remove job from temporal index (called after job is cleaned) */
407
+ removeFromTemporalIndex(jobId) {
408
+ const idx = this.temporalIndex.findIndex((e) => e.jobId === jobId);
409
+ if (idx !== -1) {
410
+ this.temporalIndex.splice(idx, 1);
411
+ }
412
+ }
413
+ /** Clear temporal index for a queue */
414
+ clearTemporalIndexForQueue(queue) {
415
+ // Filter out entries for this queue
416
+ for (let i = this.temporalIndex.length - 1; i >= 0; i--) {
417
+ if (this.temporalIndex[i].queue === queue) {
418
+ this.temporalIndex.splice(i, 1);
419
+ }
420
+ }
421
+ }
249
422
  /** Drain all waiting jobs from queue */
250
423
  drain(queue) {
251
424
  const q = this.queues.get(queue);
252
425
  if (!q)
253
426
  return 0;
254
427
  const count = q.size;
428
+ // Remove delayed job tracking for drained jobs
429
+ for (const job of q.values()) {
430
+ this.delayedJobIds.delete(job.id);
431
+ }
255
432
  q.clear();
433
+ // Clear temporal index for this queue
434
+ this.clearTemporalIndexForQueue(queue);
435
+ // Update counters
436
+ this.stats.queuedJobs = Math.max(0, this.stats.queuedJobs - count);
437
+ this.stats.delayedJobs = Math.max(0, this.stats.delayedJobs);
256
438
  return count;
257
439
  }
258
440
  /** Obliterate queue completely */
259
441
  obliterate(queue) {
442
+ // Update counters before deleting
443
+ const q = this.queues.get(queue);
444
+ if (q) {
445
+ for (const job of q.values()) {
446
+ this.delayedJobIds.delete(job.id);
447
+ }
448
+ this.stats.queuedJobs = Math.max(0, this.stats.queuedJobs - q.size);
449
+ }
450
+ const dlqJobs = this.dlq.get(queue);
451
+ if (dlqJobs) {
452
+ this.stats.dlqJobs = Math.max(0, this.stats.dlqJobs - dlqJobs.length);
453
+ }
454
+ // Recalculate delayed count
455
+ this.stats.delayedJobs = this.delayedJobIds.size;
456
+ // Clear temporal index for this queue
457
+ this.clearTemporalIndexForQueue(queue);
260
458
  this.queues.delete(queue);
261
459
  this.dlq.delete(queue);
262
460
  this.uniqueKeys.delete(queue);
@@ -1 +1 @@
1
- {"version":3,"file":"shard.js","sourceRoot":"","sources":["../../../src/domain/queue/shard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shard.js","sourceRoot":"","sources":["../../../src/domain/queue/shard.ts"],"names":[],"mappings":"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"}