bunqueue 1.9.3 → 1.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -5
- package/dist/application/operations/push.d.ts.map +1 -1
- package/dist/application/operations/push.js +48 -9
- package/dist/application/operations/push.js.map +1 -1
- package/dist/application/queueManager.d.ts +25 -0
- package/dist/application/queueManager.d.ts.map +1 -1
- package/dist/application/queueManager.js +122 -2
- package/dist/application/queueManager.js.map +1 -1
- package/dist/cli/commands/cron.js +3 -0
- package/dist/cli/commands/cron.js.map +1 -1
- package/dist/cli/commands/server.d.ts.map +1 -1
- package/dist/cli/commands/server.js +6 -0
- package/dist/cli/commands/server.js.map +1 -1
- package/dist/client/queue/queue.d.ts +22 -0
- package/dist/client/queue/queue.d.ts.map +1 -1
- package/dist/client/queue/queue.js +77 -0
- package/dist/client/queue/queue.js.map +1 -1
- package/dist/domain/queue/shard.d.ts +15 -4
- package/dist/domain/queue/shard.d.ts.map +1 -1
- package/dist/domain/queue/shard.js +70 -6
- package/dist/domain/queue/shard.js.map +1 -1
- package/dist/domain/types/command.d.ts +12 -1
- package/dist/domain/types/command.d.ts.map +1 -1
- package/dist/domain/types/cron.d.ts +4 -0
- package/dist/domain/types/cron.d.ts.map +1 -1
- package/dist/domain/types/cron.js +1 -0
- package/dist/domain/types/cron.js.map +1 -1
- package/dist/domain/types/deduplication.d.ts +44 -0
- package/dist/domain/types/deduplication.d.ts.map +1 -0
- package/dist/domain/types/deduplication.js +27 -0
- package/dist/domain/types/deduplication.js.map +1 -0
- package/dist/domain/types/job.d.ts +9 -0
- package/dist/domain/types/job.d.ts.map +1 -1
- package/dist/domain/types/job.js.map +1 -1
- package/dist/infrastructure/persistence/schema.d.ts +1 -1
- package/dist/infrastructure/persistence/schema.d.ts.map +1 -1
- package/dist/infrastructure/persistence/schema.js +2 -1
- package/dist/infrastructure/persistence/schema.js.map +1 -1
- package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
- package/dist/infrastructure/persistence/sqlite.js +2 -1
- package/dist/infrastructure/persistence/sqlite.js.map +1 -1
- package/dist/infrastructure/persistence/statements.d.ts +1 -0
- package/dist/infrastructure/persistence/statements.d.ts.map +1 -1
- package/dist/infrastructure/persistence/statements.js +2 -2
- package/dist/infrastructure/scheduler/cronParser.d.ts +4 -2
- package/dist/infrastructure/scheduler/cronParser.d.ts.map +1 -1
- package/dist/infrastructure/scheduler/cronParser.js +6 -4
- package/dist/infrastructure/scheduler/cronParser.js.map +1 -1
- package/dist/infrastructure/scheduler/cronScheduler.js +3 -3
- package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
- package/dist/infrastructure/server/handler.d.ts.map +1 -1
- package/dist/infrastructure/server/handler.js +6 -2
- package/dist/infrastructure/server/handler.js.map +1 -1
- package/dist/infrastructure/server/handlers/cron.d.ts.map +1 -1
- package/dist/infrastructure/server/handlers/cron.js +3 -0
- package/dist/infrastructure/server/handlers/cron.js.map +1 -1
- package/dist/infrastructure/server/handlers/dlq.d.ts +4 -0
- package/dist/infrastructure/server/handlers/dlq.d.ts.map +1 -1
- package/dist/infrastructure/server/handlers/dlq.js +10 -0
- package/dist/infrastructure/server/handlers/dlq.js.map +1 -1
- package/dist/infrastructure/server/handlers/query.d.ts +7 -3
- package/dist/infrastructure/server/handlers/query.d.ts.map +1 -1
- package/dist/infrastructure/server/handlers/query.js +14 -5
- package/dist/infrastructure/server/handlers/query.js.map +1 -1
- package/dist/main.js +6 -0
- package/dist/main.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -81,18 +81,20 @@ bunqueue works in **two modes**:
|
|
|
81
81
|
|
|
82
82
|
No server required. BullMQ-compatible API.
|
|
83
83
|
|
|
84
|
+
> **Important:** Both `Queue` and `Worker` must have `embedded: true` to use embedded mode.
|
|
85
|
+
|
|
84
86
|
```typescript
|
|
85
87
|
import { Queue, Worker } from 'bunqueue/client';
|
|
86
88
|
|
|
87
|
-
// Create queue
|
|
88
|
-
const queue = new Queue('emails');
|
|
89
|
+
// Create queue - MUST have embedded: true
|
|
90
|
+
const queue = new Queue('emails', { embedded: true });
|
|
89
91
|
|
|
90
|
-
// Create worker
|
|
92
|
+
// Create worker - MUST have embedded: true
|
|
91
93
|
const worker = new Worker('emails', async (job) => {
|
|
92
94
|
console.log('Sending email to:', job.data.to);
|
|
93
95
|
await job.updateProgress(50);
|
|
94
96
|
return { sent: true };
|
|
95
|
-
}, { concurrency: 5 });
|
|
97
|
+
}, { embedded: true, concurrency: 5 });
|
|
96
98
|
|
|
97
99
|
// Handle events
|
|
98
100
|
worker.on('completed', (job, result) => {
|
|
@@ -107,6 +109,20 @@ worker.on('failed', (job, err) => {
|
|
|
107
109
|
await queue.add('send-welcome', { to: 'user@example.com' });
|
|
108
110
|
```
|
|
109
111
|
|
|
112
|
+
**With persistence (SQLite):**
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
// Set DATA_PATH BEFORE importing bunqueue
|
|
116
|
+
process.env.DATA_PATH = './data/bunqueue.db';
|
|
117
|
+
|
|
118
|
+
import { Queue, Worker } from 'bunqueue/client';
|
|
119
|
+
|
|
120
|
+
const queue = new Queue('emails', { embedded: true });
|
|
121
|
+
const worker = new Worker('emails', processor, { embedded: true });
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
> Without `DATA_PATH`, bunqueue runs in-memory (no persistence across restarts).
|
|
125
|
+
|
|
110
126
|
### Server Mode
|
|
111
127
|
|
|
112
128
|
For multi-process or microservice architectures.
|
|
@@ -178,12 +194,15 @@ while (true) {
|
|
|
178
194
|
|
|
179
195
|
## Embedded Mode
|
|
180
196
|
|
|
197
|
+
> **Important:** Both `Queue` and `Worker` require `embedded: true` to work in embedded mode.
|
|
198
|
+
> Without it, they default to TCP mode and try to connect to a bunqueue server.
|
|
199
|
+
|
|
181
200
|
### Queue API
|
|
182
201
|
|
|
183
202
|
```typescript
|
|
184
203
|
import { Queue } from 'bunqueue/client';
|
|
185
204
|
|
|
186
|
-
const queue = new Queue('my-queue');
|
|
205
|
+
const queue = new Queue('my-queue', { embedded: true });
|
|
187
206
|
|
|
188
207
|
// Add job
|
|
189
208
|
const job = await queue.add('task-name', { data: 'value' });
|
|
@@ -240,6 +259,7 @@ const worker = new Worker('my-queue', async (job) => {
|
|
|
240
259
|
// Return result
|
|
241
260
|
return { success: true };
|
|
242
261
|
}, {
|
|
262
|
+
embedded: true, // Required for embedded mode
|
|
243
263
|
concurrency: 10, // Parallel jobs
|
|
244
264
|
autorun: true, // Start automatically
|
|
245
265
|
});
|
|
@@ -484,6 +504,54 @@ const worker = new Worker('pipeline', async (job) => {
|
|
|
484
504
|
});
|
|
485
505
|
```
|
|
486
506
|
|
|
507
|
+
### Multi-File Setup
|
|
508
|
+
|
|
509
|
+
When using bunqueue across multiple files, ensure `DATA_PATH` is set before any imports:
|
|
510
|
+
|
|
511
|
+
**main.ts:**
|
|
512
|
+
```typescript
|
|
513
|
+
// 1. Set DATA_PATH FIRST (before any bunqueue imports)
|
|
514
|
+
import { mkdirSync } from 'fs';
|
|
515
|
+
mkdirSync('./data', { recursive: true });
|
|
516
|
+
process.env.DATA_PATH = './data/bunqueue.db';
|
|
517
|
+
|
|
518
|
+
// 2. Then import your queue module
|
|
519
|
+
import { recoverJobs, startWorker } from './queue';
|
|
520
|
+
|
|
521
|
+
// 3. Start worker and recover jobs
|
|
522
|
+
startWorker();
|
|
523
|
+
await recoverJobs();
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
**queue.ts:**
|
|
527
|
+
```typescript
|
|
528
|
+
import { Queue, Worker } from 'bunqueue/client';
|
|
529
|
+
|
|
530
|
+
const queue = new Queue<{ id: string }>('tasks', { embedded: true });
|
|
531
|
+
|
|
532
|
+
const worker = new Worker<{ id: string }>('tasks', async (job) => {
|
|
533
|
+
console.log('Processing:', job.data.id);
|
|
534
|
+
return { success: true };
|
|
535
|
+
}, {
|
|
536
|
+
embedded: true,
|
|
537
|
+
autorun: false, // Don't start automatically
|
|
538
|
+
});
|
|
539
|
+
|
|
540
|
+
export function startWorker() {
|
|
541
|
+
worker.run();
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
export async function recoverJobs() {
|
|
545
|
+
// Your recovery logic
|
|
546
|
+
await queue.add('task', { id: 'job-1' });
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
export { queue, worker };
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
> **Why `autorun: false`?** When `autorun: true` (default), the Worker starts polling immediately on import.
|
|
553
|
+
> If `DATA_PATH` isn't set yet, bunqueue uses in-memory mode. Use `autorun: false` and call `worker.run()` manually after setup.
|
|
554
|
+
|
|
487
555
|
### Shutdown
|
|
488
556
|
|
|
489
557
|
```typescript
|
|
@@ -493,6 +561,26 @@ import { shutdownManager } from 'bunqueue/client';
|
|
|
493
561
|
shutdownManager();
|
|
494
562
|
```
|
|
495
563
|
|
|
564
|
+
### Troubleshooting
|
|
565
|
+
|
|
566
|
+
**"Command timeout" error:**
|
|
567
|
+
```
|
|
568
|
+
error: Command timeout
|
|
569
|
+
queue: "my-queue",
|
|
570
|
+
context: "pull"
|
|
571
|
+
```
|
|
572
|
+
This means your Worker is in TCP mode (trying to connect to a server) instead of embedded mode.
|
|
573
|
+
**Fix:** Add `embedded: true` to your Worker options.
|
|
574
|
+
|
|
575
|
+
**SQLite database not created:**
|
|
576
|
+
- Set `DATA_PATH` environment variable before importing bunqueue
|
|
577
|
+
- Ensure the directory exists: `mkdirSync('./data', { recursive: true })`
|
|
578
|
+
- Without `DATA_PATH`, bunqueue runs in-memory (no persistence)
|
|
579
|
+
|
|
580
|
+
**Jobs not being processed:**
|
|
581
|
+
- Ensure both Queue AND Worker have `embedded: true`
|
|
582
|
+
- Check Worker is running: use `worker.run()` if `autorun: false`
|
|
583
|
+
|
|
496
584
|
---
|
|
497
585
|
|
|
498
586
|
## Server Mode
|
|
@@ -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,EAGd,MAAM,wBAAwB,CAAC;AAChC,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;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,
|
|
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,EAGd,MAAM,wBAAwB,CAAC;AAChC,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;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,CAiH5F;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"}
|
|
@@ -31,18 +31,53 @@ export async function pushJob(queue, input, ctx) {
|
|
|
31
31
|
const mayNeedWaitingDeps = job.dependsOn.length > 0 && !job.dependsOn.every((depId) => ctx.completedJobs.has(depId));
|
|
32
32
|
// Insert into shard
|
|
33
33
|
const idx = shardIndex(queue);
|
|
34
|
+
let returnedJob;
|
|
34
35
|
await withWriteLock(ctx.shardLocks[idx], () => {
|
|
35
36
|
const shard = ctx.shards[idx];
|
|
36
|
-
// Check unique key
|
|
37
|
-
if (job.uniqueKey && !shard.isUniqueAvailable(queue, job.uniqueKey)) {
|
|
38
|
-
// Rollback custom ID
|
|
39
|
-
if (input.customId) {
|
|
40
|
-
ctx.customIdMap.delete(input.customId);
|
|
41
|
-
}
|
|
42
|
-
throw new Error('Duplicate unique_key');
|
|
43
|
-
}
|
|
37
|
+
// Check unique key with advanced deduplication support
|
|
44
38
|
if (job.uniqueKey) {
|
|
45
|
-
shard.
|
|
39
|
+
const existingEntry = shard.getUniqueKeyEntry(queue, job.uniqueKey);
|
|
40
|
+
if (existingEntry) {
|
|
41
|
+
// Duplicate detected - handle based on dedup options
|
|
42
|
+
const dedupOpts = input.dedup;
|
|
43
|
+
if (dedupOpts?.replace) {
|
|
44
|
+
// Replace strategy: remove old job, insert new
|
|
45
|
+
const existingJob = shard.getQueue(queue).find(existingEntry.jobId);
|
|
46
|
+
if (existingJob) {
|
|
47
|
+
shard.getQueue(queue).remove(existingEntry.jobId);
|
|
48
|
+
shard.decrementQueued(existingEntry.jobId);
|
|
49
|
+
ctx.jobIndex.delete(existingEntry.jobId);
|
|
50
|
+
}
|
|
51
|
+
// Register new key with TTL
|
|
52
|
+
shard.registerUniqueKeyWithTtl(queue, job.uniqueKey, job.id, dedupOpts?.ttl);
|
|
53
|
+
}
|
|
54
|
+
else if (dedupOpts?.extend && dedupOpts?.ttl) {
|
|
55
|
+
// Extend strategy: reset TTL, return existing job
|
|
56
|
+
shard.extendUniqueKeyTtl(queue, job.uniqueKey, dedupOpts.ttl);
|
|
57
|
+
// Rollback custom ID since we're not inserting
|
|
58
|
+
if (input.customId) {
|
|
59
|
+
ctx.customIdMap.delete(input.customId);
|
|
60
|
+
}
|
|
61
|
+
// Set returnedJob to existing job
|
|
62
|
+
const existingJob = shard.getQueue(queue).find(existingEntry.jobId);
|
|
63
|
+
if (existingJob) {
|
|
64
|
+
returnedJob = existingJob;
|
|
65
|
+
return; // Exit early from withWriteLock
|
|
66
|
+
}
|
|
67
|
+
throw new Error('Duplicate unique_key (extended TTL)');
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Default: reject
|
|
71
|
+
if (input.customId) {
|
|
72
|
+
ctx.customIdMap.delete(input.customId);
|
|
73
|
+
}
|
|
74
|
+
throw new Error('Duplicate unique_key');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// No existing entry - register with TTL if specified
|
|
79
|
+
shard.registerUniqueKeyWithTtl(queue, job.uniqueKey, job.id, input.dedup?.ttl);
|
|
80
|
+
}
|
|
46
81
|
}
|
|
47
82
|
// Double-check dependencies inside lock to avoid race condition
|
|
48
83
|
// (a dependency might have completed between pre-check and lock acquisition)
|
|
@@ -63,6 +98,10 @@ export async function pushJob(queue, input, ctx) {
|
|
|
63
98
|
// Index job
|
|
64
99
|
ctx.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: queue });
|
|
65
100
|
});
|
|
101
|
+
// If extend strategy returned existing job, return it without persisting
|
|
102
|
+
if (returnedJob) {
|
|
103
|
+
return returnedJob;
|
|
104
|
+
}
|
|
66
105
|
// Persist
|
|
67
106
|
ctx.storage?.insertJob(job);
|
|
68
107
|
// Update metrics & notify
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/application/operations/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAIL,SAAS,EACT,aAAa,GACd,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAoB/C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAa,EAAE,KAAe,EAAE,GAAgB;IAC5E,qBAAqB;IACrB,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IAE3B,+BAA+B;IAC/B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,QAAQ,EAAE,CAAC;gBACb,uDAAuD;gBACvD,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,QAAQ,iBAAiB,CAAC,CAAC;YACxE,CAAC;YACD,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QACD,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,aAAa;IACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAE7C,6EAA6E;IAC7E,MAAM,kBAAkB,GACtB,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAE5F,oBAAoB;IACpB,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE;QAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE9B,
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/application/operations/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -176,9 +176,34 @@ export declare class QueueManager {
|
|
|
176
176
|
/** Unregister queue name from cache - called on obliterate */
|
|
177
177
|
private unregisterQueueName;
|
|
178
178
|
clean(queue: string, graceMs: number, state?: string, limit?: number): number;
|
|
179
|
+
/** Get job counts grouped by priority for a queue */
|
|
180
|
+
getCountsPerPriority(queue: string): Record<number, number>;
|
|
181
|
+
/**
|
|
182
|
+
* Get jobs with filtering and pagination
|
|
183
|
+
* @param queue - Queue name
|
|
184
|
+
* @param options - Filter options
|
|
185
|
+
* @returns Array of jobs matching the criteria
|
|
186
|
+
*/
|
|
187
|
+
getJobs(queue: string, options?: {
|
|
188
|
+
state?: 'waiting' | 'delayed' | 'active' | 'completed' | 'failed';
|
|
189
|
+
start?: number;
|
|
190
|
+
end?: number;
|
|
191
|
+
asc?: boolean;
|
|
192
|
+
}): Job[];
|
|
179
193
|
getDlq(queue: string, count?: number): Job[];
|
|
180
194
|
retryDlq(queue: string, jobId?: JobId): number;
|
|
181
195
|
purgeDlq(queue: string): number;
|
|
196
|
+
/**
|
|
197
|
+
* Retry a completed job by re-queueing it
|
|
198
|
+
* @param queue - Queue name
|
|
199
|
+
* @param jobId - Specific job ID to retry (optional - retries all if not specified)
|
|
200
|
+
* @returns Number of jobs retried
|
|
201
|
+
*/
|
|
202
|
+
retryCompleted(queue: string, jobId?: JobId): number;
|
|
203
|
+
/**
|
|
204
|
+
* Internal helper to re-queue a completed job
|
|
205
|
+
*/
|
|
206
|
+
private requeueCompletedJob;
|
|
182
207
|
setRateLimit(queue: string, limit: number): void;
|
|
183
208
|
clearRateLimit(queue: string): void;
|
|
184
209
|
setConcurrency(queue: string, limit: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queueManager.d.ts","sourceRoot":"","sources":["../../src/application/queueManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"queueManager.d.ts","sourceRoot":"","sources":["../../src/application/queueManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -640,6 +640,65 @@ export class QueueManager {
|
|
|
640
640
|
clean(queue, graceMs, state, limit) {
|
|
641
641
|
return queueControl.cleanQueue(queue, graceMs, { shards: this.shards, jobIndex: this.jobIndex }, state, limit);
|
|
642
642
|
}
|
|
643
|
+
/** Get job counts grouped by priority for a queue */
|
|
644
|
+
getCountsPerPriority(queue) {
|
|
645
|
+
const idx = shardIndex(queue);
|
|
646
|
+
const counts = this.shards[idx].getCountsPerPriority(queue);
|
|
647
|
+
return Object.fromEntries(counts);
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* Get jobs with filtering and pagination
|
|
651
|
+
* @param queue - Queue name
|
|
652
|
+
* @param options - Filter options
|
|
653
|
+
* @returns Array of jobs matching the criteria
|
|
654
|
+
*/
|
|
655
|
+
getJobs(queue, options = {}) {
|
|
656
|
+
const { state, start = 0, end = 100, asc = true } = options;
|
|
657
|
+
const idx = shardIndex(queue);
|
|
658
|
+
const shard = this.shards[idx];
|
|
659
|
+
const now = Date.now();
|
|
660
|
+
const jobs = [];
|
|
661
|
+
// Collect jobs based on state filter
|
|
662
|
+
if (!state || state === 'waiting') {
|
|
663
|
+
const queueJobs = shard.getQueue(queue).values();
|
|
664
|
+
jobs.push(...queueJobs.filter((j) => j.runAt <= now));
|
|
665
|
+
}
|
|
666
|
+
if (!state || state === 'delayed') {
|
|
667
|
+
const queueJobs = shard.getQueue(queue).values();
|
|
668
|
+
jobs.push(...queueJobs.filter((j) => j.runAt > now));
|
|
669
|
+
}
|
|
670
|
+
if (!state || state === 'active') {
|
|
671
|
+
for (let i = 0; i < SHARD_COUNT; i++) {
|
|
672
|
+
for (const job of this.processingShards[i].values()) {
|
|
673
|
+
if (job.queue === queue) {
|
|
674
|
+
jobs.push(job);
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
if (!state || state === 'failed') {
|
|
680
|
+
const dlqJobs = shard.getDlq(queue);
|
|
681
|
+
jobs.push(...dlqJobs);
|
|
682
|
+
}
|
|
683
|
+
// For completed jobs, check completed jobs set
|
|
684
|
+
if (state === 'completed') {
|
|
685
|
+
// Iterate completedJobs and filter by queue
|
|
686
|
+
// Note: This is not efficient for large sets, but provides the data
|
|
687
|
+
for (const jobId of this.completedJobs) {
|
|
688
|
+
const result = this.jobResults.get(jobId);
|
|
689
|
+
if (result) {
|
|
690
|
+
// We don't have the full job object for completed jobs in memory
|
|
691
|
+
// Just count them or return IDs - for now skip completed state
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
// Completed jobs are stored in SQLite, would need storage access
|
|
695
|
+
// For now, return empty for completed state if not in DLQ
|
|
696
|
+
}
|
|
697
|
+
// Sort by createdAt
|
|
698
|
+
jobs.sort((a, b) => (asc ? a.createdAt - b.createdAt : b.createdAt - a.createdAt));
|
|
699
|
+
// Apply pagination
|
|
700
|
+
return jobs.slice(start, end);
|
|
701
|
+
}
|
|
643
702
|
// ============ DLQ Operations (delegated) ============
|
|
644
703
|
getDlq(queue, count) {
|
|
645
704
|
return dlqOps.getDlqJobs(queue, this.getDlqContext(), count);
|
|
@@ -650,6 +709,61 @@ export class QueueManager {
|
|
|
650
709
|
purgeDlq(queue) {
|
|
651
710
|
return dlqOps.purgeDlqJobs(queue, this.getDlqContext());
|
|
652
711
|
}
|
|
712
|
+
/**
|
|
713
|
+
* Retry a completed job by re-queueing it
|
|
714
|
+
* @param queue - Queue name
|
|
715
|
+
* @param jobId - Specific job ID to retry (optional - retries all if not specified)
|
|
716
|
+
* @returns Number of jobs retried
|
|
717
|
+
*/
|
|
718
|
+
retryCompleted(queue, jobId) {
|
|
719
|
+
if (jobId) {
|
|
720
|
+
// Check if job is in completedJobs set
|
|
721
|
+
if (!this.completedJobs.has(jobId)) {
|
|
722
|
+
return 0;
|
|
723
|
+
}
|
|
724
|
+
// Get job from storage
|
|
725
|
+
const job = this.storage?.getJob(jobId);
|
|
726
|
+
if (job?.queue !== queue) {
|
|
727
|
+
return 0;
|
|
728
|
+
}
|
|
729
|
+
return this.requeueCompletedJob(job);
|
|
730
|
+
}
|
|
731
|
+
// Retry all completed jobs for queue
|
|
732
|
+
let count = 0;
|
|
733
|
+
for (const id of this.completedJobs) {
|
|
734
|
+
const job = this.storage?.getJob(id);
|
|
735
|
+
if (job?.queue === queue) {
|
|
736
|
+
count += this.requeueCompletedJob(job);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
return count;
|
|
740
|
+
}
|
|
741
|
+
/**
|
|
742
|
+
* Internal helper to re-queue a completed job
|
|
743
|
+
*/
|
|
744
|
+
requeueCompletedJob(job) {
|
|
745
|
+
// Reset job state
|
|
746
|
+
job.attempts = 0;
|
|
747
|
+
job.startedAt = null;
|
|
748
|
+
job.completedAt = null;
|
|
749
|
+
job.runAt = Date.now();
|
|
750
|
+
job.progress = 0;
|
|
751
|
+
// Re-queue
|
|
752
|
+
const idx = shardIndex(job.queue);
|
|
753
|
+
const shard = this.shards[idx];
|
|
754
|
+
shard.getQueue(job.queue).push(job);
|
|
755
|
+
shard.incrementQueued(job.id, false, job.createdAt, job.queue, job.runAt);
|
|
756
|
+
// Update index
|
|
757
|
+
this.jobIndex.set(job.id, { type: 'queue', shardIdx: idx, queueName: job.queue });
|
|
758
|
+
// Cleanup completed tracking
|
|
759
|
+
this.completedJobs.delete(job.id);
|
|
760
|
+
this.jobResults.delete(job.id);
|
|
761
|
+
// Update storage
|
|
762
|
+
this.storage?.updateForRetry(job);
|
|
763
|
+
// Notify
|
|
764
|
+
shard.notify();
|
|
765
|
+
return 1;
|
|
766
|
+
}
|
|
653
767
|
// ============ Rate Limiting ============
|
|
654
768
|
setRateLimit(queue, limit) {
|
|
655
769
|
this.shards[shardIndex(queue)].setRateLimit(queue, limit);
|
|
@@ -1115,14 +1229,20 @@ export class QueueManager {
|
|
|
1115
1229
|
queueLog.warn('Cleaned stale waiting dependency', { jobId: String(job.id) });
|
|
1116
1230
|
}
|
|
1117
1231
|
}
|
|
1118
|
-
// Clean orphaned unique keys
|
|
1232
|
+
// Clean orphaned and expired unique keys
|
|
1119
1233
|
for (let i = 0; i < SHARD_COUNT; i++) {
|
|
1120
1234
|
const shard = this.shards[i];
|
|
1235
|
+
// First, clean expired unique keys
|
|
1236
|
+
const expiredCleaned = shard.cleanExpiredUniqueKeys();
|
|
1237
|
+
if (expiredCleaned > 0) {
|
|
1238
|
+
queueLog.info('Cleaned expired unique keys', { shard: i, removed: expiredCleaned });
|
|
1239
|
+
}
|
|
1240
|
+
// Then trim if too many keys remain
|
|
1121
1241
|
for (const [queueName, keys] of shard.uniqueKeys) {
|
|
1122
1242
|
if (keys.size > 1000) {
|
|
1123
1243
|
// If too many keys, trim oldest half
|
|
1124
1244
|
const toRemove = Math.floor(keys.size / 2);
|
|
1125
|
-
const iter = keys.
|
|
1245
|
+
const iter = keys.keys();
|
|
1126
1246
|
for (let j = 0; j < toRemove; j++) {
|
|
1127
1247
|
const { value, done } = iter.next();
|
|
1128
1248
|
if (done)
|