bunqueue 2.0.5 → 2.0.6

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.
@@ -31,7 +31,6 @@ export interface PullContext {
31
31
  export declare function pullJob(queue: string, timeoutMs: number, ctx: PullContext): Promise<Job | null>;
32
32
  /**
33
33
  * Pull multiple jobs from queue
34
- * Optimized: single lock acquisition for all jobs instead of O(count) locks
35
34
  */
36
35
  export declare function pullJobBatch(queue: string, count: number, timeoutMs: number, ctx: PullContext): Promise<Job[]>;
37
36
  //# sourceMappingURL=pull.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/application/operations/pull.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIhD,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IACpC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClC,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,SAAS,EAAE,CAAC,KAAK,EAAE;QACjB,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,IAAI,CAAC;CACZ;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAwCrB;AAkED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,GAAG,EAAE,CAAC,CA8DhB"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/application/operations/pull.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA0BhD,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IACpC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClC,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,SAAS,EAAE,CAAC,KAAK,EAAE;QACjB,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,IAAI,CAAC;CACZ;AA0HD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAqBrB;AAqCD;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,GAAG,EAAE,CAAC,CA0BhB"}
@@ -5,6 +5,117 @@
5
5
  import { isExpired, isReady } from '../../domain/types/job';
6
6
  import { withWriteLock } from '../../shared/lock';
7
7
  import { shardIndex, processingShardIndex } from '../../shared/hash';
8
+ const LOG_PREFIX = '[Pull]';
9
+ /** Structured log helper */
10
+ function log(level, message, data) {
11
+ const entry = data ? { message, ...data } : message;
12
+ switch (level) {
13
+ case 'info':
14
+ console.log(LOG_PREFIX, entry);
15
+ break;
16
+ case 'warn':
17
+ console.warn(LOG_PREFIX, entry);
18
+ break;
19
+ case 'error':
20
+ console.error(LOG_PREFIX, entry);
21
+ break;
22
+ }
23
+ }
24
+ /**
25
+ * Try to dequeue next ready job from queue
26
+ * Handles: expired skip, ready check, group blocking, timestamps
27
+ */
28
+ function tryDequeueNextJob(shard, queue, now, ctx) {
29
+ const q = shard.getQueue(queue);
30
+ const job = q.peek();
31
+ if (!job)
32
+ return { status: 'stop' };
33
+ // Skip expired jobs
34
+ if (isExpired(job, now)) {
35
+ q.pop();
36
+ shard.decrementQueued(job.id);
37
+ ctx.jobIndex.delete(job.id);
38
+ log('warn', 'Skipped expired job', {
39
+ queue,
40
+ jobId: String(job.id),
41
+ ttl: job.ttl,
42
+ });
43
+ return { status: 'skip' };
44
+ }
45
+ // Not ready yet (delayed)
46
+ if (!isReady(job, now))
47
+ return { status: 'stop' };
48
+ // FIFO group blocked
49
+ if (job.groupId && shard.isGroupActive(queue, job.groupId)) {
50
+ return { status: 'stop' };
51
+ }
52
+ // Dequeue and update
53
+ q.pop();
54
+ shard.decrementQueued(job.id);
55
+ if (job.groupId) {
56
+ shard.activateGroup(queue, job.groupId);
57
+ }
58
+ job.startedAt = now;
59
+ job.lastHeartbeat = now;
60
+ return { status: 'job', job };
61
+ }
62
+ /**
63
+ * Move job to processing shard and broadcast
64
+ */
65
+ async function moveToProcessing(job, queue, ctx) {
66
+ const procIdx = processingShardIndex(job.id);
67
+ const now = Date.now();
68
+ await withWriteLock(ctx.processingLocks[procIdx], () => {
69
+ ctx.processingShards[procIdx].set(job.id, job);
70
+ });
71
+ ctx.jobIndex.set(job.id, { type: 'processing', shardIdx: procIdx });
72
+ ctx.storage?.markActive(job.id, job.startedAt ?? now);
73
+ ctx.totalPulled.value++;
74
+ ctx.broadcast({
75
+ eventType: 'pulled',
76
+ queue,
77
+ jobId: job.id,
78
+ timestamp: now,
79
+ });
80
+ }
81
+ /**
82
+ * Move multiple jobs to processing shards (optimized: groups by shard)
83
+ */
84
+ async function moveToProcessingBatch(jobs, queue, ctx) {
85
+ // Group by processing shard for efficiency
86
+ const byProcShard = new Map();
87
+ for (const job of jobs) {
88
+ const procIdx = processingShardIndex(job.id);
89
+ const shardJobs = byProcShard.get(procIdx) ?? [];
90
+ if (shardJobs.length === 0)
91
+ byProcShard.set(procIdx, shardJobs);
92
+ shardJobs.push(job);
93
+ }
94
+ // Add to processing shards in parallel
95
+ const lockPromises = [];
96
+ for (const [procIdx, shardJobs] of byProcShard) {
97
+ lockPromises.push(withWriteLock(ctx.processingLocks[procIdx], () => {
98
+ for (const job of shardJobs) {
99
+ ctx.processingShards[procIdx].set(job.id, job);
100
+ }
101
+ }));
102
+ }
103
+ await Promise.all(lockPromises);
104
+ // Update indexes and broadcast
105
+ const now = Date.now();
106
+ for (const job of jobs) {
107
+ const procIdx = processingShardIndex(job.id);
108
+ ctx.jobIndex.set(job.id, { type: 'processing', shardIdx: procIdx });
109
+ ctx.storage?.markActive(job.id, job.startedAt ?? now);
110
+ ctx.totalPulled.value++;
111
+ ctx.broadcast({
112
+ eventType: 'pulled',
113
+ queue,
114
+ jobId: job.id,
115
+ timestamp: now,
116
+ });
117
+ }
118
+ }
8
119
  /**
9
120
  * Pull next job from queue
10
121
  */
@@ -14,30 +125,14 @@ export async function pullJob(queue, timeoutMs, ctx) {
14
125
  while (true) {
15
126
  const job = await tryPullFromShard(queue, idx, ctx);
16
127
  if (job) {
17
- // Move to processing
18
- const procIdx = processingShardIndex(job.id);
19
- await withWriteLock(ctx.processingLocks[procIdx], () => {
20
- ctx.processingShards[procIdx].set(job.id, job);
21
- });
22
- ctx.jobIndex.set(job.id, { type: 'processing', shardIdx: procIdx });
23
- // Persist state change
24
- const startedAt = job.startedAt ?? Date.now();
25
- ctx.storage?.markActive(job.id, startedAt);
26
- // Update metrics
27
- ctx.totalPulled.value++;
28
- ctx.broadcast({
29
- eventType: 'pulled',
30
- queue,
31
- jobId: job.id,
32
- timestamp: Date.now(),
33
- });
128
+ await moveToProcessing(job, queue, ctx);
34
129
  return job;
35
130
  }
36
131
  // No job available, check timeout
37
132
  if (deadline === 0 || Date.now() >= deadline) {
38
133
  return null;
39
134
  }
40
- // Wait for notification or timeout (event-based, not polling)
135
+ // Wait for notification or timeout
41
136
  const remaining = deadline - Date.now();
42
137
  await ctx.shards[idx].waitForJob(remaining);
43
138
  }
@@ -49,101 +144,44 @@ async function tryPullFromShard(queue, idx, ctx) {
49
144
  return await withWriteLock(ctx.shardLocks[idx], () => {
50
145
  const shard = ctx.shards[idx];
51
146
  const state = shard.getState(queue);
52
- // Check if paused
53
- if (state.paused)
147
+ if (state.paused) {
148
+ log('info', 'Queue is paused, skipping pull', { queue });
54
149
  return null;
55
- // Check rate limit
56
- if (!shard.tryAcquireRateLimit(queue))
150
+ }
151
+ if (!shard.tryAcquireRateLimit(queue)) {
152
+ log('info', 'Rate limit reached', { queue });
57
153
  return null;
58
- // Check concurrency
59
- if (!shard.tryAcquireConcurrency(queue))
154
+ }
155
+ if (!shard.tryAcquireConcurrency(queue)) {
156
+ log('info', 'Concurrency limit reached', { queue });
60
157
  return null;
61
- const q = shard.getQueue(queue);
158
+ }
62
159
  const now = Date.now();
63
- // Find ready job
64
160
  while (true) {
65
- const job = q.peek();
66
- if (!job)
67
- break;
68
- // Skip expired jobs
69
- if (isExpired(job, now)) {
70
- q.pop();
71
- // Update running counters for O(1) stats
72
- shard.decrementQueued(job.id);
73
- ctx.jobIndex.delete(job.id);
74
- continue;
75
- }
76
- // Check if ready
77
- if (!isReady(job, now))
78
- break;
79
- // Check FIFO group
80
- if (job.groupId && shard.isGroupActive(queue, job.groupId)) {
81
- // Skip, will retry
82
- break;
83
- }
84
- // Dequeue
85
- q.pop();
86
- // Update running counters for O(1) stats
87
- shard.decrementQueued(job.id);
88
- // Mark group active
89
- if (job.groupId) {
90
- shard.activateGroup(queue, job.groupId);
91
- }
92
- // Update job
93
- job.startedAt = now;
94
- job.lastHeartbeat = now;
95
- return job;
161
+ const result = tryDequeueNextJob(shard, queue, now, ctx);
162
+ if (result.status === 'job')
163
+ return result.job;
164
+ if (result.status === 'stop')
165
+ return null;
166
+ // status === 'skip': continue loop
96
167
  }
97
- return null;
98
168
  });
99
169
  }
100
170
  /**
101
171
  * Pull multiple jobs from queue
102
- * Optimized: single lock acquisition for all jobs instead of O(count) locks
103
172
  */
104
173
  export async function pullJobBatch(queue, count, timeoutMs, ctx) {
105
174
  const deadline = timeoutMs > 0 ? Date.now() + timeoutMs : 0;
106
175
  const idx = shardIndex(queue);
107
176
  while (true) {
108
- // Try to pull multiple jobs with single lock
109
177
  const jobs = await tryPullBatchFromShard(queue, idx, count, ctx);
110
178
  if (jobs.length > 0) {
111
- // Move all jobs to processing - group by processing shard for efficiency
112
- const byProcShard = new Map();
113
- for (const job of jobs) {
114
- const procIdx = processingShardIndex(job.id);
115
- let shardJobs = byProcShard.get(procIdx);
116
- if (!shardJobs) {
117
- shardJobs = [];
118
- byProcShard.set(procIdx, shardJobs);
119
- }
120
- shardJobs.push(job);
121
- }
122
- // Add to processing shards in parallel - avoid Array.from allocation
123
- const now = Date.now();
124
- const lockPromises = [];
125
- for (const [procIdx, shardJobs] of byProcShard) {
126
- lockPromises.push(withWriteLock(ctx.processingLocks[procIdx], () => {
127
- for (const job of shardJobs) {
128
- ctx.processingShards[procIdx].set(job.id, job);
129
- }
130
- }));
131
- }
132
- await Promise.all(lockPromises);
133
- // Update indexes and metrics
134
- for (const job of jobs) {
135
- const procIdx = processingShardIndex(job.id);
136
- ctx.jobIndex.set(job.id, { type: 'processing', shardIdx: procIdx });
137
- const startedAt = job.startedAt ?? now;
138
- ctx.storage?.markActive(job.id, startedAt);
139
- ctx.totalPulled.value++;
140
- ctx.broadcast({
141
- eventType: 'pulled',
142
- queue,
143
- jobId: job.id,
144
- timestamp: now,
145
- });
146
- }
179
+ await moveToProcessingBatch(jobs, queue, ctx);
180
+ log('info', 'Batch pull completed', {
181
+ queue,
182
+ count: jobs.length,
183
+ requested: count,
184
+ });
147
185
  return jobs;
148
186
  }
149
187
  // No jobs available, check timeout
@@ -156,54 +194,38 @@ export async function pullJobBatch(queue, count, timeoutMs, ctx) {
156
194
  }
157
195
  }
158
196
  /**
159
- * Try to pull multiple jobs from a shard with single lock
197
+ * Try to pull multiple jobs from a shard
160
198
  */
161
199
  async function tryPullBatchFromShard(queue, idx, count, ctx) {
162
200
  return await withWriteLock(ctx.shardLocks[idx], () => {
163
201
  const shard = ctx.shards[idx];
164
202
  const state = shard.getState(queue);
165
203
  const jobs = [];
166
- // Check if paused
167
204
  if (state.paused)
168
205
  return jobs;
169
- const q = shard.getQueue(queue);
170
206
  const now = Date.now();
171
- // Pull up to count jobs
172
207
  while (jobs.length < count) {
173
- // Check rate limit for each job
174
- if (!shard.tryAcquireRateLimit(queue))
175
- break;
176
- // Check concurrency for each job
177
- if (!shard.tryAcquireConcurrency(queue))
178
- break;
179
- const job = q.peek();
180
- if (!job)
208
+ // Check limits per job
209
+ if (!shard.tryAcquireRateLimit(queue)) {
210
+ if (jobs.length === 0) {
211
+ log('info', 'Rate limit reached', { queue });
212
+ }
181
213
  break;
182
- // Skip expired jobs
183
- if (isExpired(job, now)) {
184
- q.pop();
185
- shard.decrementQueued(job.id);
186
- ctx.jobIndex.delete(job.id);
187
- continue;
188
214
  }
189
- // Check if ready
190
- if (!isReady(job, now))
191
- break;
192
- // Check FIFO group
193
- if (job.groupId && shard.isGroupActive(queue, job.groupId)) {
215
+ if (!shard.tryAcquireConcurrency(queue)) {
216
+ if (jobs.length === 0) {
217
+ log('info', 'Concurrency limit reached', { queue });
218
+ }
194
219
  break;
195
220
  }
196
- // Dequeue
197
- q.pop();
198
- shard.decrementQueued(job.id);
199
- // Mark group active
200
- if (job.groupId) {
201
- shard.activateGroup(queue, job.groupId);
221
+ const result = tryDequeueNextJob(shard, queue, now, ctx);
222
+ if (result.status === 'job') {
223
+ jobs.push(result.job);
224
+ }
225
+ else if (result.status === 'stop') {
226
+ break;
202
227
  }
203
- // Update job
204
- job.startedAt = now;
205
- job.lastHeartbeat = now;
206
- jobs.push(job);
228
+ // status === 'skip': continue loop
207
229
  }
208
230
  return jobs;
209
231
  });
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/application/operations/pull.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/application/operations/pull.ts"],"names":[],"mappings":"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"}
@@ -28,10 +28,12 @@ export interface PushContext {
28
28
  }
29
29
  /**
30
30
  * Push a single job to queue
31
+ * NOTE: customId check happens OUTSIDE lock for performance (unlike batch)
31
32
  */
32
33
  export declare function pushJob(queue: string, input: JobInput, ctx: PushContext): Promise<Job>;
33
34
  /**
34
35
  * Push multiple jobs to queue
36
+ * NOTE: customId check happens INSIDE lock (safer for concurrent batch inserts)
35
37
  */
36
38
  export declare function pushJobBatch(queue: string, inputs: JobInput[], ctx: PushContext): Promise<JobId[]>;
37
39
  //# sourceMappingURL=push.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/application/operations/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,GAAG,EACR,KAAK,KAAK,EACV,KAAK,QAAQ,EAId,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEzD,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClC,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,SAAS,EAAE,CAAC,KAAK,EAAE;QACjB,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,IAAI,CAAC;CACZ;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAsI5F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,QAAQ,EAAE,EAClB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,KAAK,EAAE,CAAC,CAmClB"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/application/operations/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,GAAG,EACR,KAAK,KAAK,EACV,KAAK,QAAQ,EAId,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAwBzD,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClC,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,SAAS,EAAE,CAAC,KAAK,EAAE;QACjB,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,IAAI,CAAC;CACZ;AA0JD;;;GAGG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAkE5F;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,QAAQ,EAAE,EAClB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,KAAK,EAAE,CAAC,CAgDlB"}
@@ -5,162 +5,247 @@
5
5
  import { createJob, generateJobId, jobId, } from '../../domain/types/job';
6
6
  import { withWriteLock } from '../../shared/lock';
7
7
  import { shardIndex } from '../../shared/hash';
8
+ const LOG_PREFIX = '[Push]';
9
+ /** Structured log helper */
10
+ function log(level, message, data) {
11
+ const entry = data ? { message, ...data } : message;
12
+ switch (level) {
13
+ case 'info':
14
+ console.log(LOG_PREFIX, entry);
15
+ break;
16
+ case 'warn':
17
+ console.warn(LOG_PREFIX, entry);
18
+ break;
19
+ case 'error':
20
+ console.error(LOG_PREFIX, entry);
21
+ break;
22
+ }
23
+ }
24
+ /**
25
+ * Handle custom ID idempotency check
26
+ * Returns existing job if found, or new ID to use
27
+ */
28
+ function handleCustomId(input, shard, ctx) {
29
+ if (!input.customId) {
30
+ return { skip: false, id: generateJobId() };
31
+ }
32
+ const id = jobId(input.customId);
33
+ const existing = ctx.customIdMap.get(input.customId);
34
+ // No existing mapping - register and proceed
35
+ if (!existing) {
36
+ ctx.customIdMap.set(input.customId, id);
37
+ return { skip: false, id };
38
+ }
39
+ // Check if existing job is still in queue
40
+ const location = ctx.jobIndex.get(existing);
41
+ const existingJob = location?.type === 'queue' ? shard.getQueue(location.queueName).find(existing) : null;
42
+ if (existingJob) {
43
+ log('info', 'Duplicate customId, returning existing job', {
44
+ customId: input.customId,
45
+ existingJobId: String(existing),
46
+ });
47
+ return { skip: true, existingJob };
48
+ }
49
+ // Job gone (processing/completed) - allow reuse of customId
50
+ ctx.customIdMap.delete(input.customId);
51
+ ctx.customIdMap.set(input.customId, id);
52
+ return { skip: false, id };
53
+ }
54
+ /**
55
+ * Handle unique key deduplication
56
+ * Returns existing job ID if duplicate found and should skip, or allows insert
57
+ */
58
+ function handleDeduplication(job, input, queue, shard, ctx) {
59
+ if (!job.uniqueKey) {
60
+ return { skip: false };
61
+ }
62
+ const q = shard.getQueue(queue);
63
+ const existingEntry = shard.getUniqueKeyEntry(queue, job.uniqueKey);
64
+ if (!existingEntry) {
65
+ shard.registerUniqueKeyWithTtl(queue, job.uniqueKey, job.id, input.dedup?.ttl);
66
+ return { skip: false };
67
+ }
68
+ const dedupOpts = input.dedup;
69
+ // Replace strategy: remove old, insert new
70
+ if (dedupOpts?.replace) {
71
+ const existingJob = q.find(existingEntry.jobId);
72
+ if (existingJob) {
73
+ q.remove(existingEntry.jobId);
74
+ shard.decrementQueued(existingEntry.jobId);
75
+ ctx.jobIndex.delete(existingEntry.jobId);
76
+ log('info', 'Dedup replace: removed existing job', {
77
+ queue,
78
+ uniqueKey: job.uniqueKey,
79
+ removedJobId: String(existingEntry.jobId),
80
+ newJobId: String(job.id),
81
+ });
82
+ }
83
+ shard.releaseUniqueKey(queue, job.uniqueKey);
84
+ shard.registerUniqueKeyWithTtl(queue, job.uniqueKey, job.id, dedupOpts?.ttl);
85
+ return { skip: false };
86
+ }
87
+ // Extend strategy: reset TTL, return existing
88
+ if (dedupOpts?.extend && dedupOpts?.ttl) {
89
+ shard.extendUniqueKeyTtl(queue, job.uniqueKey, dedupOpts.ttl);
90
+ if (input.customId)
91
+ ctx.customIdMap.delete(input.customId);
92
+ const existingJob = q.find(existingEntry.jobId);
93
+ if (existingJob) {
94
+ log('info', 'Dedup extend: extended TTL, returning existing job', {
95
+ queue,
96
+ uniqueKey: job.uniqueKey,
97
+ existingJobId: String(existingEntry.jobId),
98
+ ttl: dedupOpts.ttl,
99
+ });
100
+ return { skip: true, existingId: existingEntry.jobId };
101
+ }
102
+ throw new Error('Duplicate unique_key (extended TTL)');
103
+ }
104
+ // Default: return existing job (BullMQ-style)
105
+ if (input.customId)
106
+ ctx.customIdMap.delete(input.customId);
107
+ const existingJob = q.find(existingEntry.jobId);
108
+ if (existingJob) {
109
+ ctx.broadcast({
110
+ eventType: "duplicated" /* EventType.Duplicated */,
111
+ queue,
112
+ jobId: existingEntry.jobId,
113
+ timestamp: Date.now(),
114
+ });
115
+ return { skip: true, existingId: existingEntry.jobId };
116
+ }
117
+ // Job not in queue (completed/failed) - allow new insert
118
+ shard.registerUniqueKeyWithTtl(queue, job.uniqueKey, job.id, input.dedup?.ttl);
119
+ return { skip: false };
120
+ }
121
+ /**
122
+ * Insert job into shard (queue or waitingDeps)
123
+ */
124
+ function insertJobToShard(job, queue, shard, shardIdx, ctx) {
125
+ const hasDeps = job.dependsOn.length > 0;
126
+ const needsWaiting = hasDeps && !job.dependsOn.every((depId) => ctx.completedJobs.has(depId));
127
+ if (needsWaiting) {
128
+ shard.waitingDeps.set(job.id, job);
129
+ shard.registerDependencies(job.id, job.dependsOn);
130
+ log('info', 'Job waiting for dependencies', {
131
+ queue,
132
+ jobId: String(job.id),
133
+ pendingDeps: job.dependsOn.filter((d) => !ctx.completedJobs.has(d)).map(String),
134
+ });
135
+ }
136
+ else {
137
+ shard.getQueue(queue).push(job);
138
+ const isDelayed = job.runAt > Date.now();
139
+ shard.incrementQueued(job.id, isDelayed, job.createdAt, queue, job.runAt);
140
+ }
141
+ ctx.jobIndex.set(job.id, { type: 'queue', shardIdx, queueName: queue });
142
+ }
8
143
  /**
9
144
  * Push a single job to queue
145
+ * NOTE: customId check happens OUTSIDE lock for performance (unlike batch)
10
146
  */
11
147
  export async function pushJob(queue, input, ctx) {
12
- // BullMQ compatibility: use customId as actual job ID if provided
148
+ const idx = shardIndex(queue);
149
+ const now = Date.now();
150
+ // Check custom ID idempotency OUTSIDE lock (original behavior)
13
151
  const id = input.customId ? jobId(input.customId) : generateJobId();
14
- // Handle custom ID idempotency (BullMQ-style: return existing job)
15
152
  if (input.customId) {
16
153
  const existing = ctx.customIdMap.get(input.customId);
17
154
  if (existing) {
18
155
  const location = ctx.jobIndex.get(existing);
19
156
  if (location?.type === 'queue') {
20
- // BullMQ-style: return existing job instead of creating a duplicate
21
157
  const shard = ctx.shards[location.shardIdx];
22
158
  const existingJob = shard.getQueue(location.queueName).find(existing);
23
159
  if (existingJob) {
160
+ log('info', 'Duplicate customId, returning existing job', {
161
+ queue,
162
+ customId: input.customId,
163
+ existingJobId: String(existing),
164
+ });
24
165
  return existingJob;
25
166
  }
26
167
  }
27
- // If job is processing, completed, or not found, clean up the map entry
28
- // and allow creating a new job with the same customId
29
168
  ctx.customIdMap.delete(input.customId);
30
169
  }
31
170
  ctx.customIdMap.set(input.customId, id);
32
171
  }
33
- // Create job
34
- const now = Date.now();
35
172
  const job = createJob(id, queue, input, now);
36
- // Pre-check: does job have any dependencies?
37
- // Note: The actual dependency check MUST happen inside the lock to avoid race conditions
38
- const hasDependencies = job.dependsOn.length > 0;
39
- // Insert into shard
40
- const idx = shardIndex(queue);
41
- let returnedJob;
173
+ let result;
42
174
  await withWriteLock(ctx.shardLocks[idx], () => {
43
175
  const shard = ctx.shards[idx];
44
- // Check unique key with advanced deduplication support
45
- if (job.uniqueKey) {
46
- const existingEntry = shard.getUniqueKeyEntry(queue, job.uniqueKey);
47
- if (existingEntry) {
48
- // Duplicate detected - handle based on dedup options
49
- const dedupOpts = input.dedup;
50
- if (dedupOpts?.replace) {
51
- // Replace strategy: remove old job, insert new
52
- const existingJob = shard.getQueue(queue).find(existingEntry.jobId);
53
- if (existingJob) {
54
- shard.getQueue(queue).remove(existingEntry.jobId);
55
- shard.decrementQueued(existingEntry.jobId);
56
- ctx.jobIndex.delete(existingEntry.jobId);
57
- }
58
- // Release old unique key entry before registering new one to avoid stale TTL
59
- shard.releaseUniqueKey(queue, job.uniqueKey);
60
- // Register new key with TTL
61
- shard.registerUniqueKeyWithTtl(queue, job.uniqueKey, job.id, dedupOpts?.ttl);
62
- }
63
- else if (dedupOpts?.extend && dedupOpts?.ttl) {
64
- // Extend strategy: reset TTL, return existing job
65
- shard.extendUniqueKeyTtl(queue, job.uniqueKey, dedupOpts.ttl);
66
- // Rollback custom ID since we're not inserting
67
- if (input.customId) {
68
- ctx.customIdMap.delete(input.customId);
69
- }
70
- // Set returnedJob to existing job
71
- const existingJob = shard.getQueue(queue).find(existingEntry.jobId);
72
- if (existingJob) {
73
- returnedJob = existingJob;
74
- return; // Exit early from withWriteLock
75
- }
76
- throw new Error('Duplicate unique_key (extended TTL)');
77
- }
78
- else {
79
- // Default: return existing job (BullMQ-style idempotency)
80
- if (input.customId) {
81
- ctx.customIdMap.delete(input.customId);
82
- }
83
- const existingJob = shard.getQueue(queue).find(existingEntry.jobId);
84
- if (existingJob) {
85
- // Emit duplicated event (BullMQ v5)
86
- ctx.broadcast({
87
- eventType: "duplicated" /* EventType.Duplicated */,
88
- queue,
89
- jobId: existingEntry.jobId,
90
- timestamp: Date.now(),
91
- });
92
- returnedJob = existingJob;
93
- return; // Exit early, return existing job
94
- }
95
- // Job not in queue (maybe completed/failed) - allow new insert
96
- shard.registerUniqueKeyWithTtl(queue, job.uniqueKey, job.id, input.dedup?.ttl);
97
- }
176
+ // Check deduplication
177
+ const dedupResult = handleDeduplication(job, input, queue, shard, ctx);
178
+ if (dedupResult.skip) {
179
+ const existingJob = shard.getQueue(queue).find(dedupResult.existingId);
180
+ if (existingJob) {
181
+ result = { job: existingJob, persisted: false };
182
+ return;
98
183
  }
99
- else {
100
- // No existing entry - register with TTL if specified
101
- shard.registerUniqueKeyWithTtl(queue, job.uniqueKey, job.id, input.dedup?.ttl);
102
- }
103
- }
104
- // Always check dependencies inside lock if job has any
105
- // This avoids a race condition where dependencies could change between pre-check and lock acquisition
106
- const needsWaitingDeps = hasDependencies && !job.dependsOn.every((depId) => ctx.completedJobs.has(depId));
107
- // Insert based on state
108
- if (needsWaitingDeps) {
109
- shard.waitingDeps.set(job.id, job);
110
- // Register in dependency index for O(1) lookup when deps complete
111
- shard.registerDependencies(job.id, job.dependsOn);
112
184
  }
113
- else {
114
- shard.getQueue(queue).push(job);
115
- // Update running counters for O(1) stats and temporal index for cleanQueue
116
- const isDelayed = job.runAt > Date.now();
117
- shard.incrementQueued(job.id, isDelayed, job.createdAt, queue, job.runAt);
118
- shard.notify();
119
- }
120
- // Index job
121
- ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: queue });
185
+ // Insert to shard
186
+ insertJobToShard(job, queue, shard, idx, ctx);
187
+ shard.notify();
188
+ result = { job, persisted: true };
122
189
  });
123
- // If extend strategy returned existing job, return it without persisting
124
- if (returnedJob) {
125
- return returnedJob;
190
+ if (!result) {
191
+ log('error', 'Push failed unexpectedly', { queue, jobId: String(id) });
192
+ throw new Error('Push failed');
126
193
  }
127
- // Persist (with optional durable flag for critical jobs)
128
- ctx.storage?.insertJob(job, input.durable);
129
- // Update metrics & notify
130
- ctx.totalPushed.value++;
131
- ctx.broadcast({ eventType: 'pushed', queue, jobId: id, timestamp: now });
132
- return job;
194
+ if (result.persisted) {
195
+ ctx.storage?.insertJob(result.job, input.durable);
196
+ ctx.totalPushed.value++;
197
+ ctx.broadcast({
198
+ eventType: 'pushed',
199
+ queue,
200
+ jobId: result.job.id,
201
+ timestamp: now,
202
+ });
203
+ }
204
+ return result.job;
133
205
  }
134
206
  /**
135
207
  * Push multiple jobs to queue
208
+ * NOTE: customId check happens INSIDE lock (safer for concurrent batch inserts)
136
209
  */
137
210
  export async function pushJobBatch(queue, inputs, ctx) {
138
- const jobs = [];
139
211
  const now = Date.now();
140
- // Generate all jobs
141
- for (const input of inputs) {
142
- const id = generateJobId();
143
- jobs.push(createJob(id, queue, input, now));
144
- }
145
- // Insert into shard
146
212
  const idx = shardIndex(queue);
213
+ const resultIds = [];
214
+ const jobsToInsert = [];
147
215
  await withWriteLock(ctx.shardLocks[idx], () => {
148
216
  const shard = ctx.shards[idx];
149
- const q = shard.getQueue(queue);
150
- const now = Date.now();
151
- for (const job of jobs) {
152
- q.push(job);
153
- ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: queue });
154
- // Update running counters for O(1) stats and temporal index for cleanQueue
155
- const isDelayed = job.runAt > now;
156
- shard.incrementQueued(job.id, isDelayed, job.createdAt, queue, job.runAt);
217
+ for (const input of inputs) {
218
+ // Check custom ID idempotency
219
+ const customIdResult = handleCustomId(input, shard, ctx);
220
+ if (customIdResult.skip) {
221
+ resultIds.push(customIdResult.existingJob.id);
222
+ continue;
223
+ }
224
+ const job = createJob(customIdResult.id, queue, input, now);
225
+ // Check deduplication
226
+ const dedupResult = handleDeduplication(job, input, queue, shard, ctx);
227
+ if (dedupResult.skip) {
228
+ resultIds.push(dedupResult.existingId);
229
+ continue;
230
+ }
231
+ // Insert to shard
232
+ insertJobToShard(job, queue, shard, idx, ctx);
233
+ jobsToInsert.push(job);
234
+ resultIds.push(job.id);
235
+ }
236
+ if (jobsToInsert.length > 0) {
237
+ shard.notify();
157
238
  }
158
- shard.notify();
159
239
  });
160
- // Persist batch
161
- ctx.storage?.insertJobsBatch(jobs);
162
- // Update metrics
163
- ctx.totalPushed.value += BigInt(jobs.length);
164
- return jobs.map((j) => j.id);
240
+ if (jobsToInsert.length > 0) {
241
+ ctx.storage?.insertJobsBatch(jobsToInsert);
242
+ ctx.totalPushed.value += BigInt(jobsToInsert.length);
243
+ log('info', 'Batch push completed', {
244
+ queue,
245
+ inserted: jobsToInsert.length,
246
+ duplicates: inputs.length - jobsToInsert.length,
247
+ });
248
+ }
249
+ return resultIds;
165
250
  }
166
251
  //# sourceMappingURL=push.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/application/operations/push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/application/operations/push.ts"],"names":[],"mappings":"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"}
@@ -54,8 +54,8 @@ export interface IPCRequest {
54
54
  }
55
55
  /** IPC message from worker to main */
56
56
  export interface IPCResponse {
57
- type: 'result' | 'error' | 'progress';
58
- jobId: string;
57
+ type: 'result' | 'error' | 'progress' | 'ready';
58
+ jobId?: string;
59
59
  result?: unknown;
60
60
  error?: string;
61
61
  progress?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/sandboxed/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,GAAG,IAAI,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE/D,qCAAqC;AACrC,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,6CAA6C;AAC7C,MAAM,WAAW,8BAA8B;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC;CACzB;AAED,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/sandboxed/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,GAAG,IAAI,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE/D,qCAAqC;AACrC,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,6CAA6C;AAC7C,MAAM,WAAW,8BAA8B;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC;CACzB;AAED,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -27,6 +27,8 @@ export declare class SandboxedWorker {
27
27
  idle: number;
28
28
  restarts: number;
29
29
  };
30
+ /** Reset worker state to idle */
31
+ private resetWorkerState;
30
32
  private spawnWorker;
31
33
  private pullLoop;
32
34
  private dispatch;
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/client/sandboxed/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,sBAAsB,EAKvB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB;IAe9D,sCAAsC;IAChC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,kCAAkC;IAC5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,4BAA4B;IAC5B,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAM3E,OAAO,CAAC,WAAW;YAyBL,QAAQ;IAatB,OAAO,CAAC,QAAQ;IAyBhB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,IAAI;IAiBZ,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,WAAW;CA0BpB"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/client/sandboxed/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,sBAAsB,EAKvB,MAAM,SAAS,CAAC;AAyBjB;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB;IAe9D,sCAAsC;IAChC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B,kCAAkC;IAC5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,4BAA4B;IAC5B,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAM3E,iCAAiC;IACjC,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,WAAW;YAmDL,QAAQ;IAatB,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,IAAI;IAcZ,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,WAAW;CAwBpB"}
@@ -4,6 +4,22 @@
4
4
  */
5
5
  import { getSharedManager } from '../manager';
6
6
  import { createWrapperScript, cleanupWrapperScript } from './wrapper';
7
+ const LOG_PREFIX = '[SandboxedWorker]';
8
+ /** Structured log helper */
9
+ function log(level, message, data) {
10
+ const entry = data ? { message, ...data } : message;
11
+ switch (level) {
12
+ case 'info':
13
+ console.log(LOG_PREFIX, entry);
14
+ break;
15
+ case 'warn':
16
+ console.warn(LOG_PREFIX, entry);
17
+ break;
18
+ case 'error':
19
+ console.error(LOG_PREFIX, entry);
20
+ break;
21
+ }
22
+ }
7
23
  /**
8
24
  * Sandboxed Worker - runs processors in isolated Bun Worker processes
9
25
  */
@@ -36,9 +52,12 @@ export class SandboxedWorker {
36
52
  return;
37
53
  this.running = true;
38
54
  this.wrapperPath = await createWrapperScript(this.queueName, this.options.processor);
55
+ // Spawn all workers and wait for them to be ready
56
+ const spawnPromises = [];
39
57
  for (let i = 0; i < this.options.concurrency; i++) {
40
- this.spawnWorker(i);
58
+ spawnPromises.push(this.spawnWorker(i));
41
59
  }
60
+ await Promise.all(spawnPromises);
42
61
  this.pullPromise = this.pullLoop();
43
62
  }
44
63
  /** Stop all workers gracefully */
@@ -60,29 +79,62 @@ export class SandboxedWorker {
60
79
  const restarts = this.workers.reduce((sum, w) => sum + w.restarts, 0);
61
80
  return { total: this.workers.length, busy, idle: this.workers.length - busy, restarts };
62
81
  }
82
+ /** Reset worker state to idle */
83
+ resetWorkerState(wp) {
84
+ if (wp.timeoutId) {
85
+ clearTimeout(wp.timeoutId);
86
+ wp.timeoutId = null;
87
+ }
88
+ wp.busy = false;
89
+ wp.currentJob = null;
90
+ wp.currentToken = null;
91
+ }
63
92
  spawnWorker(index) {
64
- if (!this.wrapperPath)
65
- return;
66
- const worker = new Worker(this.wrapperPath, { smol: this.options.maxMemory <= 64 });
67
- const wp = {
68
- worker,
69
- busy: false,
70
- currentJob: null,
71
- currentToken: null,
72
- restarts: this.workers[index]?.restarts ?? 0,
73
- timeoutId: null,
74
- };
75
- worker.onmessage = (event) => {
76
- this.handleMessage(wp, event.data);
77
- };
78
- worker.onerror = (error) => {
79
- console.error(`[SandboxedWorker] Worker ${index} error:`, error.message);
80
- this.handleCrash(wp, index);
81
- };
82
- if (this.workers[index])
83
- this.workers[index] = wp;
84
- else
85
- this.workers.push(wp);
93
+ return new Promise((resolve, reject) => {
94
+ if (!this.wrapperPath) {
95
+ resolve();
96
+ return;
97
+ }
98
+ const worker = new Worker(this.wrapperPath, { smol: this.options.maxMemory <= 64 });
99
+ const wp = {
100
+ worker,
101
+ busy: false,
102
+ currentJob: null,
103
+ currentToken: null,
104
+ restarts: this.workers[index]?.restarts ?? 0,
105
+ timeoutId: null,
106
+ };
107
+ let resolved = false;
108
+ const readyTimeout = setTimeout(() => {
109
+ if (!resolved) {
110
+ resolved = true;
111
+ log('warn', 'Worker ready timeout, continuing anyway', { workerIndex: index });
112
+ resolve();
113
+ }
114
+ }, 5000);
115
+ worker.onmessage = (event) => {
116
+ if (event.data.type === 'ready' && !resolved) {
117
+ resolved = true;
118
+ clearTimeout(readyTimeout);
119
+ resolve();
120
+ return;
121
+ }
122
+ this.handleMessage(wp, event.data);
123
+ };
124
+ worker.onerror = (error) => {
125
+ log('error', 'Worker error', { workerIndex: index, error: error.message });
126
+ if (!resolved) {
127
+ resolved = true;
128
+ clearTimeout(readyTimeout);
129
+ reject(new Error(error.message));
130
+ }
131
+ this.handleCrash(wp, index);
132
+ };
133
+ if (this.workers[index])
134
+ this.workers[index] = wp;
135
+ else
136
+ this.workers.push(wp);
137
+ });
86
138
  }
87
139
  async pullLoop() {
88
140
  while (this.running) {
@@ -111,16 +163,19 @@ export class SandboxedWorker {
111
163
  wp.worker.postMessage(request);
112
164
  }
113
165
  catch (err) {
114
- // Worker may have been terminated - clean up and requeue job
115
- clearTimeout(wp.timeoutId);
116
- wp.timeoutId = null;
117
- wp.busy = false;
118
- wp.currentJob = null;
119
- wp.currentToken = null;
120
- console.error(`[SandboxedWorker] Failed to dispatch job ${job.id}:`, err);
166
+ log('error', 'Failed to dispatch job', {
167
+ jobId: String(job.id),
168
+ error: err instanceof Error ? err.message : String(err),
169
+ });
170
+ this.resetWorkerState(wp);
171
+ this.manager
172
+ .fail(job.id, 'Dispatch failed: worker terminated', token ?? undefined)
173
+ .catch(() => { });
121
174
  }
122
175
  }
123
176
  handleMessage(wp, msg) {
177
+ if (msg.type === 'ready')
178
+ return;
124
179
  if (!wp.currentJob || msg.jobId !== String(wp.currentJob.id))
125
180
  return;
126
181
  switch (msg.type) {
@@ -138,72 +193,67 @@ export class SandboxedWorker {
138
193
  }
139
194
  }
140
195
  complete(wp, result) {
141
- if (wp.timeoutId) {
142
- clearTimeout(wp.timeoutId);
143
- wp.timeoutId = null;
144
- }
145
196
  if (wp.currentJob) {
146
197
  const jobId = wp.currentJob.id;
147
198
  const token = wp.currentToken ?? undefined;
148
199
  this.manager.ack(jobId, result, token).catch((e) => {
149
- console.error(`[SandboxedWorker] Failed to ack job ${jobId}:`, e);
200
+ log('error', 'Failed to ack job', {
201
+ jobId: String(jobId),
202
+ error: e instanceof Error ? e.message : String(e),
203
+ });
150
204
  });
151
205
  }
152
- wp.busy = false;
153
- wp.currentJob = null;
154
- wp.currentToken = null;
206
+ this.resetWorkerState(wp);
155
207
  }
156
208
  fail(wp, error) {
157
- if (wp.timeoutId) {
158
- clearTimeout(wp.timeoutId);
159
- wp.timeoutId = null;
160
- }
161
209
  if (wp.currentJob) {
162
210
  const jobId = wp.currentJob.id;
163
211
  const token = wp.currentToken ?? undefined;
164
212
  this.manager.fail(jobId, error, token).catch((e) => {
165
- console.error(`[SandboxedWorker] Failed to fail job ${jobId}:`, e);
213
+ log('error', 'Failed to mark job as failed', {
214
+ jobId: String(jobId),
215
+ error: e instanceof Error ? e.message : String(e),
216
+ });
166
217
  });
167
218
  }
168
- wp.busy = false;
169
- wp.currentJob = null;
170
- wp.currentToken = null;
219
+ this.resetWorkerState(wp);
171
220
  }
172
221
  handleTimeout(wp, job) {
173
- console.error(`[SandboxedWorker] Job ${job.id} timed out after ${this.options.timeout}ms`);
222
+ log('warn', 'Job timed out', {
223
+ jobId: String(job.id),
224
+ timeoutMs: this.options.timeout,
225
+ });
174
226
  wp.worker.terminate();
175
227
  const token = wp.currentToken ?? undefined;
176
228
  this.manager
177
229
  .fail(job.id, `Job timed out after ${this.options.timeout}ms`, token)
178
230
  .catch(() => { });
179
- // Clear job state so handleCrash won't fail it again
180
- wp.currentJob = null;
181
- wp.currentToken = null;
182
- wp.timeoutId = null;
231
+ this.resetWorkerState(wp);
183
232
  const index = this.workers.indexOf(wp);
184
233
  if (index !== -1)
185
234
  this.handleCrash(wp, index);
186
235
  }
187
236
  handleCrash(wp, index) {
188
- // Clear timeout if still pending (e.g., when called from onerror)
189
- if (wp.timeoutId) {
190
- clearTimeout(wp.timeoutId);
191
- wp.timeoutId = null;
192
- }
193
237
  if (wp.currentJob) {
194
238
  const token = wp.currentToken ?? undefined;
195
239
  this.manager.fail(wp.currentJob.id, 'Worker crashed', token).catch(() => { });
196
240
  }
197
- wp.busy = false;
198
- wp.currentJob = null;
199
- wp.currentToken = null;
241
+ this.resetWorkerState(wp);
200
242
  wp.restarts++;
201
243
  if (this.options.autoRestart && wp.restarts < this.options.maxRestarts && this.running) {
202
- console.log(`[SandboxedWorker] Restarting worker ${index} (attempt ${wp.restarts})`);
203
- this.spawnWorker(index);
244
+ log('info', 'Restarting worker', { workerIndex: index, attempt: wp.restarts });
245
+ this.spawnWorker(index).catch((err) => {
246
+ log('error', 'Failed to restart worker', {
247
+ workerIndex: index,
248
+ error: err instanceof Error ? err.message : String(err),
249
+ });
250
+ });
204
251
  }
205
252
  else if (wp.restarts >= this.options.maxRestarts) {
206
- console.error(`[SandboxedWorker] Worker ${index} exceeded max restarts (${this.options.maxRestarts})`);
253
+ log('error', 'Worker exceeded max restarts', {
254
+ workerIndex: index,
255
+ maxRestarts: this.options.maxRestarts,
256
+ });
207
257
  }
208
258
  }
209
259
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/client/sandboxed/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/client/sandboxed/worker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../src/client/sandboxed/wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAgDjB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpF"}
1
+ {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../src/client/sandboxed/wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAmDjB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpF"}
@@ -23,6 +23,9 @@ export async function createWrapperScript(queueName, processorPath) {
23
23
  // Sandboxed Worker Wrapper
24
24
  const processor = (await import('${escapedPath}')).default;
25
25
 
26
+ // Signal ready to parent
27
+ self.postMessage({ type: 'ready' });
28
+
26
29
  self.onmessage = async (event) => {
27
30
  const { type, job } = event.data;
28
31
  if (type !== 'job') return;
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/client/sandboxed/wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;;GAGG;AACH,SAAS,wBAAwB,CAAC,GAAW;IAC3C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,aAAqB;IAErB,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC;QAC5C,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,aAAa,EAAE,CAAC;IAExC,kFAAkF;IAClF,MAAM,WAAW,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG;;mCAEa,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B7C,CAAC;IAEA,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,mBAAmB,CAAC;IAC/D,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,OAAO,WAAW,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;IACtE,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAE1C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAA0B;IACnE,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/client/sandboxed/wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;;GAGG;AACH,SAAS,wBAAwB,CAAC,GAAW;IAC3C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,aAAqB;IAErB,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC;QAC5C,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,aAAa,EAAE,CAAC;IAExC,kFAAkF;IAClF,MAAM,WAAW,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG;;mCAEa,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B7C,CAAC;IAEA,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,mBAAmB,CAAC;IAC/D,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,OAAO,WAAW,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;IACtE,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAE1C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAA0B;IACnE,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunqueue",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
4
4
  "description": "High-performance job queue server written in Bun. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks. Minimal dependencies.",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",