bunqueue 1.9.7 → 1.9.9
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/dist/application/backgroundTasks.d.ts +3 -6
- package/dist/application/backgroundTasks.d.ts.map +1 -1
- package/dist/application/backgroundTasks.js +10 -179
- package/dist/application/backgroundTasks.js.map +1 -1
- package/dist/application/cleanupTasks.d.ts +1 -1
- package/dist/application/cleanupTasks.d.ts.map +1 -1
- package/dist/application/cleanupTasks.js +61 -22
- package/dist/application/cleanupTasks.js.map +1 -1
- package/dist/application/clientTracking.d.ts +22 -0
- package/dist/application/clientTracking.d.ts.map +1 -0
- package/dist/application/clientTracking.js +118 -0
- package/dist/application/clientTracking.js.map +1 -0
- package/dist/application/contextFactory.d.ts +97 -0
- package/dist/application/contextFactory.d.ts.map +1 -0
- package/dist/application/contextFactory.js +170 -0
- package/dist/application/contextFactory.js.map +1 -0
- package/dist/application/dependencyProcessor.d.ts +11 -0
- package/dist/application/dependencyProcessor.d.ts.map +1 -0
- package/dist/application/dependencyProcessor.js +69 -0
- package/dist/application/dependencyProcessor.js.map +1 -0
- package/dist/application/dlqManager.d.ts +12 -0
- package/dist/application/dlqManager.d.ts.map +1 -1
- package/dist/application/dlqManager.js +36 -0
- package/dist/application/dlqManager.js.map +1 -1
- package/dist/application/lockManager.d.ts +3 -49
- package/dist/application/lockManager.d.ts.map +1 -1
- package/dist/application/lockManager.js +101 -272
- package/dist/application/lockManager.js.map +1 -1
- package/dist/application/lockOperations.d.ts +39 -0
- package/dist/application/lockOperations.d.ts.map +1 -0
- package/dist/application/lockOperations.js +101 -0
- package/dist/application/lockOperations.js.map +1 -0
- package/dist/application/operations/ack.d.ts +1 -5
- package/dist/application/operations/ack.d.ts.map +1 -1
- package/dist/application/operations/ack.js +43 -259
- package/dist/application/operations/ack.js.map +1 -1
- package/dist/application/operations/ackHelpers.d.ts +79 -0
- package/dist/application/operations/ackHelpers.d.ts.map +1 -0
- package/dist/application/operations/ackHelpers.js +173 -0
- package/dist/application/operations/ackHelpers.js.map +1 -0
- package/dist/application/operations/jobManagement.d.ts +2 -0
- package/dist/application/operations/jobManagement.d.ts.map +1 -1
- package/dist/application/operations/jobManagement.js +8 -0
- package/dist/application/operations/jobManagement.js.map +1 -1
- package/dist/application/operations/push.d.ts.map +1 -1
- package/dist/application/operations/push.js +20 -6
- package/dist/application/operations/push.js.map +1 -1
- package/dist/application/operations/queryOperations.d.ts +11 -0
- package/dist/application/operations/queryOperations.d.ts.map +1 -1
- package/dist/application/operations/queryOperations.js +32 -0
- package/dist/application/operations/queryOperations.js.map +1 -1
- package/dist/application/queueManager.d.ts +3 -11
- package/dist/application/queueManager.d.ts.map +1 -1
- package/dist/application/queueManager.js +98 -244
- package/dist/application/queueManager.js.map +1 -1
- package/dist/application/stallDetection.d.ts +11 -0
- package/dist/application/stallDetection.d.ts.map +1 -0
- package/dist/application/stallDetection.js +128 -0
- package/dist/application/stallDetection.js.map +1 -0
- package/dist/application/types.js +1 -1
- package/dist/application/types.js.map +1 -1
- package/dist/cli/client.d.ts +3 -5
- package/dist/cli/client.d.ts.map +1 -1
- package/dist/cli/client.js +31 -27
- package/dist/cli/client.js.map +1 -1
- package/dist/cli/commands/core.js +3 -3
- package/dist/cli/commands/core.js.map +1 -1
- package/dist/cli/commands/job.js +14 -14
- package/dist/cli/commands/job.js.map +1 -1
- package/dist/cli/commands/server.d.ts.map +1 -1
- package/dist/cli/commands/server.js +5 -29
- package/dist/cli/commands/server.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/client/events.d.ts +0 -1
- package/dist/client/events.d.ts.map +1 -1
- package/dist/client/events.js +4 -7
- package/dist/client/events.js.map +1 -1
- package/dist/client/flow.d.ts +23 -1
- package/dist/client/flow.d.ts.map +1 -1
- package/dist/client/flow.js +166 -68
- package/dist/client/flow.js.map +1 -1
- package/dist/client/queue/queue.d.ts.map +1 -1
- package/dist/client/queue/queue.js +3 -1
- package/dist/client/queue/queue.js.map +1 -1
- package/dist/client/sandboxed/types.d.ts +1 -0
- package/dist/client/sandboxed/types.d.ts.map +1 -1
- package/dist/client/sandboxed/worker.d.ts +1 -0
- package/dist/client/sandboxed/worker.d.ts.map +1 -1
- package/dist/client/sandboxed/worker.js +31 -8
- package/dist/client/sandboxed/worker.js.map +1 -1
- package/dist/client/sandboxed/wrapper.d.ts.map +1 -1
- package/dist/client/sandboxed/wrapper.js +10 -1
- package/dist/client/sandboxed/wrapper.js.map +1 -1
- package/dist/client/tcp/client.d.ts +4 -1
- package/dist/client/tcp/client.d.ts.map +1 -1
- package/dist/client/tcp/client.js +26 -8
- package/dist/client/tcp/client.js.map +1 -1
- package/dist/client/tcp/connection.d.ts +6 -8
- package/dist/client/tcp/connection.d.ts.map +1 -1
- package/dist/client/tcp/connection.js +24 -22
- package/dist/client/tcp/connection.js.map +1 -1
- package/dist/client/tcp/index.d.ts +0 -1
- package/dist/client/tcp/index.d.ts.map +1 -1
- package/dist/client/tcp/index.js +0 -1
- package/dist/client/tcp/index.js.map +1 -1
- package/dist/client/tcp/types.d.ts +8 -13
- package/dist/client/tcp/types.d.ts.map +1 -1
- package/dist/client/tcp/types.js +0 -1
- package/dist/client/tcp/types.js.map +1 -1
- package/dist/client/tcpPool.d.ts.map +1 -1
- package/dist/client/tcpPool.js +0 -6
- package/dist/client/tcpPool.js.map +1 -1
- package/dist/client/worker/ackBatcher.d.ts +1 -1
- package/dist/client/worker/ackBatcher.d.ts.map +1 -1
- package/dist/client/worker/ackBatcher.js +20 -18
- package/dist/client/worker/ackBatcher.js.map +1 -1
- package/dist/client/worker/jobParser.d.ts.map +1 -1
- package/dist/client/worker/jobParser.js +8 -7
- package/dist/client/worker/jobParser.js.map +1 -1
- package/dist/client/worker/processor.d.ts.map +1 -1
- package/dist/client/worker/processor.js +10 -6
- package/dist/client/worker/processor.js.map +1 -1
- package/dist/domain/queue/dependencyTracker.d.ts +74 -0
- package/dist/domain/queue/dependencyTracker.d.ts.map +1 -0
- package/dist/domain/queue/dependencyTracker.js +126 -0
- package/dist/domain/queue/dependencyTracker.js.map +1 -0
- package/dist/domain/queue/dlqShard.d.ts +61 -0
- package/dist/domain/queue/dlqShard.d.ts.map +1 -0
- package/dist/domain/queue/dlqShard.js +175 -0
- package/dist/domain/queue/dlqShard.js.map +1 -0
- package/dist/domain/queue/limiterManager.d.ts +44 -0
- package/dist/domain/queue/limiterManager.d.ts.map +1 -0
- package/dist/domain/queue/limiterManager.js +99 -0
- package/dist/domain/queue/limiterManager.js.map +1 -0
- package/dist/domain/queue/shard.d.ts +33 -124
- package/dist/domain/queue/shard.d.ts.map +1 -1
- package/dist/domain/queue/shard.js +157 -427
- package/dist/domain/queue/shard.js.map +1 -1
- package/dist/domain/queue/temporalManager.d.ts +82 -0
- package/dist/domain/queue/temporalManager.d.ts.map +1 -0
- package/dist/domain/queue/temporalManager.js +150 -0
- package/dist/domain/queue/temporalManager.js.map +1 -0
- package/dist/domain/queue/uniqueKeyManager.d.ts +32 -0
- package/dist/domain/queue/uniqueKeyManager.d.ts.map +1 -0
- package/dist/domain/queue/uniqueKeyManager.js +87 -0
- package/dist/domain/queue/uniqueKeyManager.js.map +1 -0
- package/dist/domain/types/command.d.ts +6 -0
- package/dist/domain/types/command.d.ts.map +1 -1
- package/dist/infrastructure/backup/s3Backup.d.ts +3 -40
- package/dist/infrastructure/backup/s3Backup.d.ts.map +1 -1
- package/dist/infrastructure/backup/s3Backup.js +10 -182
- package/dist/infrastructure/backup/s3Backup.js.map +1 -1
- package/dist/infrastructure/backup/s3BackupConfig.d.ts +67 -0
- package/dist/infrastructure/backup/s3BackupConfig.d.ts.map +1 -0
- package/dist/infrastructure/backup/s3BackupConfig.js +48 -0
- package/dist/infrastructure/backup/s3BackupConfig.js.map +1 -0
- package/dist/infrastructure/backup/s3BackupOperations.d.ts +23 -0
- package/dist/infrastructure/backup/s3BackupOperations.d.ts.map +1 -0
- package/dist/infrastructure/backup/s3BackupOperations.js +170 -0
- package/dist/infrastructure/backup/s3BackupOperations.js.map +1 -0
- package/dist/infrastructure/persistence/sqlite.d.ts +6 -13
- package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
- package/dist/infrastructure/persistence/sqlite.js +28 -179
- package/dist/infrastructure/persistence/sqlite.js.map +1 -1
- package/dist/infrastructure/persistence/sqliteBatch.d.ts +38 -0
- package/dist/infrastructure/persistence/sqliteBatch.d.ts.map +1 -0
- package/dist/infrastructure/persistence/sqliteBatch.js +124 -0
- package/dist/infrastructure/persistence/sqliteBatch.js.map +1 -0
- package/dist/infrastructure/persistence/sqliteSerializer.d.ts +17 -0
- package/dist/infrastructure/persistence/sqliteSerializer.d.ts.map +1 -0
- package/dist/infrastructure/persistence/sqliteSerializer.js +81 -0
- package/dist/infrastructure/persistence/sqliteSerializer.js.map +1 -0
- package/dist/infrastructure/persistence/statements.d.ts +1 -1
- package/dist/infrastructure/persistence/statements.d.ts.map +1 -1
- package/dist/infrastructure/persistence/statements.js +3 -2
- package/dist/infrastructure/persistence/statements.js.map +1 -1
- package/dist/infrastructure/scheduler/cronScheduler.d.ts +7 -0
- package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -1
- package/dist/infrastructure/scheduler/cronScheduler.js +23 -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 +1 -186
- package/dist/infrastructure/server/handler.js.map +1 -1
- package/dist/infrastructure/server/handlerRoutes.d.ts +23 -0
- package/dist/infrastructure/server/handlerRoutes.d.ts.map +1 -0
- package/dist/infrastructure/server/handlerRoutes.js +190 -0
- package/dist/infrastructure/server/handlerRoutes.js.map +1 -0
- package/dist/infrastructure/server/handlers/core.d.ts.map +1 -1
- package/dist/infrastructure/server/handlers/core.js +26 -19
- package/dist/infrastructure/server/handlers/core.js.map +1 -1
- package/dist/infrastructure/server/http.d.ts +4 -25
- package/dist/infrastructure/server/http.d.ts.map +1 -1
- package/dist/infrastructure/server/http.js +68 -285
- package/dist/infrastructure/server/http.js.map +1 -1
- package/dist/infrastructure/server/httpEndpoints.d.ts +19 -0
- package/dist/infrastructure/server/httpEndpoints.d.ts.map +1 -0
- package/dist/infrastructure/server/httpEndpoints.js +151 -0
- package/dist/infrastructure/server/httpEndpoints.js.map +1 -0
- package/dist/infrastructure/server/protocol.d.ts +15 -1
- package/dist/infrastructure/server/protocol.d.ts.map +1 -1
- package/dist/infrastructure/server/protocol.js +37 -3
- package/dist/infrastructure/server/protocol.js.map +1 -1
- package/dist/infrastructure/server/sseHandler.d.ts +27 -0
- package/dist/infrastructure/server/sseHandler.d.ts.map +1 -0
- package/dist/infrastructure/server/sseHandler.js +77 -0
- package/dist/infrastructure/server/sseHandler.js.map +1 -0
- package/dist/infrastructure/server/tcp.d.ts +8 -10
- package/dist/infrastructure/server/tcp.d.ts.map +1 -1
- package/dist/infrastructure/server/tcp.js +51 -42
- package/dist/infrastructure/server/tcp.js.map +1 -1
- package/dist/infrastructure/server/wsHandler.d.ts +31 -0
- package/dist/infrastructure/server/wsHandler.d.ts.map +1 -0
- package/dist/infrastructure/server/wsHandler.js +63 -0
- package/dist/infrastructure/server/wsHandler.js.map +1 -0
- package/dist/main.js +2 -4
- package/dist/main.js.map +1 -1
- package/dist/mcp/index.js +3 -465
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/mcpHandlers.d.ts +129 -0
- package/dist/mcp/mcpHandlers.d.ts.map +1 -0
- package/dist/mcp/mcpHandlers.js +204 -0
- package/dist/mcp/mcpHandlers.js.map +1 -0
- package/dist/mcp/mcpTools.d.ts +15 -0
- package/dist/mcp/mcpTools.d.ts.map +1 -0
- package/dist/mcp/mcpTools.js +277 -0
- package/dist/mcp/mcpTools.js.map +1 -0
- package/dist/shared/lru.d.ts +23 -0
- package/dist/shared/lru.d.ts.map +1 -1
- package/dist/shared/lru.js +61 -3
- package/dist/shared/lru.js.map +1 -1
- package/dist/shared/skipList.d.ts +10 -2
- package/dist/shared/skipList.d.ts.map +1 -1
- package/dist/shared/skipList.js +22 -1
- package/dist/shared/skipList.js.map +1 -1
- package/package.json +2 -2
- package/dist/cli/dashboard.d.ts +0 -32
- package/dist/cli/dashboard.d.ts.map +0 -1
- package/dist/cli/dashboard.js +0 -183
- package/dist/cli/dashboard.js.map +0 -1
- package/dist/client/tcp/lineBuffer.d.ts +0 -17
- package/dist/client/tcp/lineBuffer.d.ts.map +0 -1
- package/dist/client/tcp/lineBuffer.js +0 -32
- package/dist/client/tcp/lineBuffer.js.map +0 -1
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
import { calculateBackoff, canRetry } from '../../domain/types/job';
|
|
6
6
|
import { withWriteLock } from '../../shared/lock';
|
|
7
7
|
import { shardIndex, processingShardIndex } from '../../shared/hash';
|
|
8
|
+
import { groupByProcShard, groupItemsByProcShard, extractJobs, extractJobsWithResults, groupByQueueShard, releaseResources, finalizeBatchAck, } from './ackHelpers';
|
|
8
9
|
/**
|
|
9
10
|
* Acknowledge job completion
|
|
10
11
|
*/
|
|
11
12
|
export async function ackJob(jobId, result, ctx) {
|
|
12
13
|
const procIdx = processingShardIndex(jobId);
|
|
13
|
-
// Remove from processing
|
|
14
14
|
const job = await withWriteLock(ctx.processingLocks[procIdx], () => {
|
|
15
15
|
const job = ctx.processingShards[procIdx].get(jobId);
|
|
16
16
|
if (job) {
|
|
@@ -21,12 +21,14 @@ export async function ackJob(jobId, result, ctx) {
|
|
|
21
21
|
if (!job) {
|
|
22
22
|
throw new Error(`Job not found or not in processing state: ${jobId}`);
|
|
23
23
|
}
|
|
24
|
-
// Release resources
|
|
25
24
|
const idx = shardIndex(job.queue);
|
|
26
25
|
await withWriteLock(ctx.shardLocks[idx], () => {
|
|
27
26
|
ctx.shards[idx].releaseJobResources(job.queue, job.uniqueKey, job.groupId);
|
|
28
27
|
});
|
|
29
|
-
//
|
|
28
|
+
// Release customId so it can be reused
|
|
29
|
+
if (job.customId && ctx.customIdMap) {
|
|
30
|
+
ctx.customIdMap.delete(job.customId);
|
|
31
|
+
}
|
|
30
32
|
if (!job.removeOnComplete) {
|
|
31
33
|
ctx.completedJobs.add(jobId);
|
|
32
34
|
if (result !== undefined) {
|
|
@@ -40,7 +42,6 @@ export async function ackJob(jobId, result, ctx) {
|
|
|
40
42
|
ctx.jobIndex.delete(jobId);
|
|
41
43
|
ctx.storage?.deleteJob(jobId);
|
|
42
44
|
}
|
|
43
|
-
// Update metrics
|
|
44
45
|
ctx.totalCompleted.value++;
|
|
45
46
|
ctx.broadcast({
|
|
46
47
|
eventType: 'completed',
|
|
@@ -49,9 +50,7 @@ export async function ackJob(jobId, result, ctx) {
|
|
|
49
50
|
timestamp: Date.now(),
|
|
50
51
|
data: result,
|
|
51
52
|
});
|
|
52
|
-
// Notify completion (for dependencies and parent jobs)
|
|
53
53
|
ctx.onJobCompleted(jobId);
|
|
54
|
-
// Handle repeatable jobs
|
|
55
54
|
if (job.repeat && ctx.onRepeat) {
|
|
56
55
|
const shouldRepeat = job.repeat.limit === undefined || job.repeat.count < job.repeat.limit;
|
|
57
56
|
if (shouldRepeat) {
|
|
@@ -64,7 +63,6 @@ export async function ackJob(jobId, result, ctx) {
|
|
|
64
63
|
*/
|
|
65
64
|
export async function failJob(jobId, error, ctx) {
|
|
66
65
|
const procIdx = processingShardIndex(jobId);
|
|
67
|
-
// Remove from processing
|
|
68
66
|
const job = await withWriteLock(ctx.processingLocks[procIdx], () => {
|
|
69
67
|
const job = ctx.processingShards[procIdx].get(jobId);
|
|
70
68
|
if (job) {
|
|
@@ -75,37 +73,39 @@ export async function failJob(jobId, error, ctx) {
|
|
|
75
73
|
if (!job) {
|
|
76
74
|
throw new Error(`Job not found or not in processing state: ${jobId}`);
|
|
77
75
|
}
|
|
78
|
-
// Increment attempts
|
|
79
76
|
job.attempts++;
|
|
80
77
|
const idx = shardIndex(job.queue);
|
|
81
78
|
await withWriteLock(ctx.shardLocks[idx], () => {
|
|
82
79
|
const shard = ctx.shards[idx];
|
|
83
80
|
shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
|
|
84
81
|
if (canRetry(job)) {
|
|
85
|
-
// Retry with exponential backoff
|
|
86
82
|
const now = Date.now();
|
|
87
83
|
job.runAt = now + calculateBackoff(job);
|
|
88
84
|
shard.getQueue(job.queue).push(job);
|
|
89
|
-
// Update running counters for O(1) stats (retry jobs are always delayed)
|
|
90
85
|
shard.incrementQueued(jobId, true, job.createdAt, job.queue, job.runAt);
|
|
91
86
|
ctx.jobIndex.set(jobId, { type: 'queue', shardIdx: idx, queueName: job.queue });
|
|
92
87
|
ctx.storage?.updateForRetry(job);
|
|
93
88
|
}
|
|
94
89
|
else if (job.removeOnFail) {
|
|
95
|
-
// Remove completely - don't add to DLQ
|
|
96
90
|
ctx.jobIndex.delete(jobId);
|
|
97
91
|
ctx.storage?.deleteJob(jobId);
|
|
98
92
|
ctx.totalFailed.value++;
|
|
93
|
+
// Release customId when job is removed on fail
|
|
94
|
+
if (job.customId && ctx.customIdMap) {
|
|
95
|
+
ctx.customIdMap.delete(job.customId);
|
|
96
|
+
}
|
|
99
97
|
}
|
|
100
98
|
else {
|
|
101
|
-
|
|
102
|
-
const entry = shard.addToDlq(job);
|
|
99
|
+
const entry = shard.addToDlq(job, "max_attempts_exceeded" /* FailureReason.MaxAttemptsExceeded */, error ?? null);
|
|
103
100
|
ctx.jobIndex.set(jobId, { type: 'dlq', queueName: job.queue });
|
|
104
101
|
ctx.storage?.saveDlqEntry(entry);
|
|
105
102
|
ctx.totalFailed.value++;
|
|
103
|
+
// Release customId when job goes to DLQ
|
|
104
|
+
if (job.customId && ctx.customIdMap) {
|
|
105
|
+
ctx.customIdMap.delete(job.customId);
|
|
106
|
+
}
|
|
106
107
|
}
|
|
107
108
|
});
|
|
108
|
-
// Broadcast event
|
|
109
109
|
ctx.broadcast({
|
|
110
110
|
eventType: 'failed',
|
|
111
111
|
queue: job.queue,
|
|
@@ -114,151 +114,36 @@ export async function failJob(jobId, error, ctx) {
|
|
|
114
114
|
error,
|
|
115
115
|
});
|
|
116
116
|
}
|
|
117
|
-
/** Debug flag for ackBatch timing */
|
|
118
|
-
const DEBUG_ACK_BATCH = process.env.DEBUG_ACK_BATCH === '1';
|
|
119
117
|
/**
|
|
120
118
|
* Acknowledge multiple jobs - optimized batch processing
|
|
121
119
|
* Groups jobs by shard to minimize lock acquisitions: O(shards) instead of O(n)
|
|
122
120
|
*/
|
|
123
|
-
// eslint-disable-next-line complexity
|
|
124
121
|
export async function ackJobBatch(jobIds, ctx) {
|
|
125
122
|
if (jobIds.length === 0)
|
|
126
123
|
return;
|
|
127
|
-
// Small batches - use parallel individual acks
|
|
124
|
+
// Small batches - use parallel individual acks
|
|
128
125
|
if (jobIds.length <= 4) {
|
|
129
126
|
await Promise.all(jobIds.map((id) => ackJob(id, undefined, ctx)));
|
|
130
127
|
return;
|
|
131
128
|
}
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
// Use arrays instead of Map for faster iteration in step 5
|
|
147
|
-
const extractedJobs = [];
|
|
148
|
-
await Promise.all(Array.from(byProcShard.entries()).map(async ([procIdx, ids]) => {
|
|
149
|
-
await withWriteLock(ctx.processingLocks[procIdx], () => {
|
|
150
|
-
for (const jobId of ids) {
|
|
151
|
-
const job = ctx.processingShards[procIdx].get(jobId);
|
|
152
|
-
if (job) {
|
|
153
|
-
ctx.processingShards[procIdx].delete(jobId);
|
|
154
|
-
extractedJobs.push({ id: jobId, job });
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
}));
|
|
159
|
-
const t2 = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
160
|
-
// Step 3: Group extracted jobs by queue shard
|
|
161
|
-
const byQueueShard = new Map();
|
|
162
|
-
for (let i = 0; i < extractedJobs.length; i++) {
|
|
163
|
-
const job = extractedJobs[i].job;
|
|
164
|
-
const idx = shardIndex(job.queue);
|
|
165
|
-
let group = byQueueShard.get(idx);
|
|
166
|
-
if (!group) {
|
|
167
|
-
group = [];
|
|
168
|
-
byQueueShard.set(idx, group);
|
|
169
|
-
}
|
|
170
|
-
group.push(job);
|
|
171
|
-
}
|
|
172
|
-
const t3 = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
173
|
-
// Step 4: Release resources for each queue shard (one lock per shard)
|
|
174
|
-
await Promise.all(Array.from(byQueueShard.entries()).map(async ([idx, jobs]) => {
|
|
175
|
-
await withWriteLock(ctx.shardLocks[idx], () => {
|
|
176
|
-
const shard = ctx.shards[idx];
|
|
177
|
-
for (const job of jobs) {
|
|
178
|
-
shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
}));
|
|
182
|
-
const t4 = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
183
|
-
// Step 5: Update indexes and metrics (no locks needed - single-threaded)
|
|
184
|
-
// Optimized: use indexed for loop (faster than for-of), minimize function calls
|
|
185
|
-
const now = Date.now();
|
|
186
|
-
const completedLocation = { type: 'completed' };
|
|
187
|
-
const storage = ctx.storage;
|
|
188
|
-
const hasStorage = storage !== null;
|
|
189
|
-
const jobCount = extractedJobs.length;
|
|
190
|
-
// Pre-check flags (check once, not per job)
|
|
191
|
-
const needsBroadcast = ctx.needsBroadcast?.() ?? true;
|
|
192
|
-
const hasPendingDeps = ctx.hasPendingDeps?.() ?? true;
|
|
193
|
-
const t5a = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
194
|
-
// Batch counter update (single BigInt operation instead of N increments)
|
|
195
|
-
ctx.totalCompleted.value += BigInt(jobCount);
|
|
196
|
-
const t5b = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
197
|
-
// Main loop - indexed for loop is faster than for-of on arrays
|
|
198
|
-
for (let i = 0; i < jobCount; i++) {
|
|
199
|
-
const { id: jobId, job } = extractedJobs[i];
|
|
200
|
-
if (!job.removeOnComplete) {
|
|
201
|
-
ctx.completedJobs.add(jobId);
|
|
202
|
-
ctx.jobIndex.set(jobId, completedLocation);
|
|
203
|
-
if (hasStorage)
|
|
204
|
-
storage.markCompleted(jobId, now);
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
ctx.jobIndex.delete(jobId);
|
|
208
|
-
if (hasStorage)
|
|
209
|
-
storage.deleteJob(jobId);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
const t5c = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
213
|
-
// Broadcast events (only if listeners exist)
|
|
214
|
-
if (needsBroadcast) {
|
|
215
|
-
const event = {
|
|
216
|
-
eventType: 'completed',
|
|
217
|
-
queue: '',
|
|
218
|
-
jobId: '',
|
|
219
|
-
timestamp: now,
|
|
220
|
-
};
|
|
221
|
-
for (let i = 0; i < jobCount; i++) {
|
|
222
|
-
const { id: jobId, job } = extractedJobs[i];
|
|
223
|
-
event.queue = job.queue;
|
|
224
|
-
event.jobId = jobId;
|
|
225
|
-
ctx.broadcast(event);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
const t5d = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
229
|
-
// Batch notify completions (for dependency checking)
|
|
230
|
-
if (hasPendingDeps && ctx.onJobsCompleted) {
|
|
231
|
-
const completedIds = extractedJobs.map((e) => e.id);
|
|
232
|
-
ctx.onJobsCompleted(completedIds);
|
|
233
|
-
}
|
|
234
|
-
else if (hasPendingDeps) {
|
|
235
|
-
for (let i = 0; i < jobCount; i++) {
|
|
236
|
-
ctx.onJobCompleted(extractedJobs[i].id);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
const t5 = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
240
|
-
if (DEBUG_ACK_BATCH) {
|
|
241
|
-
console.log(` Step 5 details:`);
|
|
242
|
-
console.log(` 5a checks: ${(t5b - t5a).toFixed(2)}ms`);
|
|
243
|
-
console.log(` 5b main loop: ${(t5c - t5b).toFixed(2)}ms`);
|
|
244
|
-
console.log(` 5c broadcast: ${(t5d - t5c).toFixed(2)}ms (needsBroadcast=${needsBroadcast})`);
|
|
245
|
-
console.log(` 5d deps: ${(t5 - t5d).toFixed(2)}ms (hasPendingDeps=${hasPendingDeps})`);
|
|
246
|
-
}
|
|
247
|
-
if (DEBUG_ACK_BATCH) {
|
|
248
|
-
console.log(`ackBatch timing (${jobIds.length} jobs):`);
|
|
249
|
-
console.log(` Step 1 (group proc): ${(t1 - t0).toFixed(2)}ms`);
|
|
250
|
-
console.log(` Step 2 (extract): ${(t2 - t1).toFixed(2)}ms`);
|
|
251
|
-
console.log(` Step 3 (group queue): ${(t3 - t2).toFixed(2)}ms`);
|
|
252
|
-
console.log(` Step 4 (release): ${(t4 - t3).toFixed(2)}ms`);
|
|
253
|
-
console.log(` Step 5 (update idx): ${(t5 - t4).toFixed(2)}ms`);
|
|
254
|
-
console.log(` Total: ${(t5 - t0).toFixed(2)}ms`);
|
|
255
|
-
}
|
|
129
|
+
const batchCtx = {
|
|
130
|
+
processingShards: ctx.processingShards,
|
|
131
|
+
processingLocks: ctx.processingLocks,
|
|
132
|
+
shards: ctx.shards,
|
|
133
|
+
shardLocks: ctx.shardLocks,
|
|
134
|
+
};
|
|
135
|
+
// Step 1-2: Group and extract
|
|
136
|
+
const byProcShard = groupByProcShard(jobIds);
|
|
137
|
+
const extractedJobs = await extractJobs(byProcShard, batchCtx);
|
|
138
|
+
// Step 3-4: Group by queue shard and release
|
|
139
|
+
const byQueueShard = groupByQueueShard(extractedJobs);
|
|
140
|
+
await releaseResources(byQueueShard, batchCtx);
|
|
141
|
+
// Step 5: Finalize
|
|
142
|
+
finalizeBatchAck(extractedJobs, ctx, false);
|
|
256
143
|
}
|
|
257
144
|
/**
|
|
258
145
|
* Acknowledge multiple jobs with individual results - optimized batch processing
|
|
259
|
-
* Same as ackJobBatch but supports passing result data for each job
|
|
260
146
|
*/
|
|
261
|
-
// eslint-disable-next-line complexity
|
|
262
147
|
export async function ackJobBatchWithResults(items, ctx) {
|
|
263
148
|
if (items.length === 0)
|
|
264
149
|
return;
|
|
@@ -267,120 +152,19 @@ export async function ackJobBatchWithResults(items, ctx) {
|
|
|
267
152
|
await Promise.all(items.map((item) => ackJob(item.id, item.result, ctx)));
|
|
268
153
|
return;
|
|
269
154
|
}
|
|
270
|
-
const
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
// Keep result with each extracted job
|
|
285
|
-
const extractedJobs = [];
|
|
286
|
-
await Promise.all(Array.from(byProcShard.entries()).map(async ([procIdx, itemsInShard]) => {
|
|
287
|
-
await withWriteLock(ctx.processingLocks[procIdx], () => {
|
|
288
|
-
for (const item of itemsInShard) {
|
|
289
|
-
const job = ctx.processingShards[procIdx].get(item.id);
|
|
290
|
-
if (job) {
|
|
291
|
-
ctx.processingShards[procIdx].delete(item.id);
|
|
292
|
-
extractedJobs.push({ id: item.id, job, result: item.result });
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
});
|
|
296
|
-
}));
|
|
297
|
-
const t2 = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
298
|
-
// Step 3: Group extracted jobs by queue shard
|
|
299
|
-
const byQueueShard = new Map();
|
|
300
|
-
for (let i = 0; i < extractedJobs.length; i++) {
|
|
301
|
-
const job = extractedJobs[i].job;
|
|
302
|
-
const idx = shardIndex(job.queue);
|
|
303
|
-
let group = byQueueShard.get(idx);
|
|
304
|
-
if (!group) {
|
|
305
|
-
group = [];
|
|
306
|
-
byQueueShard.set(idx, group);
|
|
307
|
-
}
|
|
308
|
-
group.push(job);
|
|
309
|
-
}
|
|
310
|
-
const t3 = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
311
|
-
// Step 4: Release resources for each queue shard (one lock per shard)
|
|
312
|
-
await Promise.all(Array.from(byQueueShard.entries()).map(async ([idx, jobs]) => {
|
|
313
|
-
await withWriteLock(ctx.shardLocks[idx], () => {
|
|
314
|
-
const shard = ctx.shards[idx];
|
|
315
|
-
for (const job of jobs) {
|
|
316
|
-
shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
|
|
317
|
-
}
|
|
318
|
-
});
|
|
319
|
-
}));
|
|
320
|
-
const t4 = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
321
|
-
// Step 5: Update indexes, store results, and metrics
|
|
322
|
-
const now = Date.now();
|
|
323
|
-
const completedLocation = { type: 'completed' };
|
|
324
|
-
const storage = ctx.storage;
|
|
325
|
-
const hasStorage = storage !== null;
|
|
326
|
-
const jobCount = extractedJobs.length;
|
|
327
|
-
// Pre-check flags
|
|
328
|
-
const needsBroadcast = ctx.needsBroadcast?.() ?? true;
|
|
329
|
-
const hasPendingDeps = ctx.hasPendingDeps?.() ?? true;
|
|
330
|
-
// Batch counter update
|
|
331
|
-
ctx.totalCompleted.value += BigInt(jobCount);
|
|
332
|
-
// Main loop with result storage
|
|
333
|
-
for (let i = 0; i < jobCount; i++) {
|
|
334
|
-
const { id: jobId, job, result } = extractedJobs[i];
|
|
335
|
-
if (!job.removeOnComplete) {
|
|
336
|
-
ctx.completedJobs.add(jobId);
|
|
337
|
-
if (result !== undefined) {
|
|
338
|
-
ctx.jobResults.set(jobId, result);
|
|
339
|
-
if (hasStorage)
|
|
340
|
-
storage.storeResult(jobId, result);
|
|
341
|
-
}
|
|
342
|
-
ctx.jobIndex.set(jobId, completedLocation);
|
|
343
|
-
if (hasStorage)
|
|
344
|
-
storage.markCompleted(jobId, now);
|
|
345
|
-
}
|
|
346
|
-
else {
|
|
347
|
-
ctx.jobIndex.delete(jobId);
|
|
348
|
-
if (hasStorage)
|
|
349
|
-
storage.deleteJob(jobId);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
// Broadcast events with results (only if listeners exist)
|
|
353
|
-
if (needsBroadcast) {
|
|
354
|
-
for (let i = 0; i < jobCount; i++) {
|
|
355
|
-
const { id: jobId, job, result } = extractedJobs[i];
|
|
356
|
-
ctx.broadcast({
|
|
357
|
-
eventType: 'completed',
|
|
358
|
-
queue: job.queue,
|
|
359
|
-
jobId,
|
|
360
|
-
timestamp: now,
|
|
361
|
-
data: result,
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
// Batch notify completions (for dependency checking)
|
|
366
|
-
if (hasPendingDeps && ctx.onJobsCompleted) {
|
|
367
|
-
const completedIds = extractedJobs.map((e) => e.id);
|
|
368
|
-
ctx.onJobsCompleted(completedIds);
|
|
369
|
-
}
|
|
370
|
-
else if (hasPendingDeps) {
|
|
371
|
-
for (let i = 0; i < jobCount; i++) {
|
|
372
|
-
ctx.onJobCompleted(extractedJobs[i].id);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
const t5 = DEBUG_ACK_BATCH ? performance.now() : 0;
|
|
376
|
-
if (DEBUG_ACK_BATCH) {
|
|
377
|
-
console.log(`ackBatchWithResults timing (${items.length} jobs):`);
|
|
378
|
-
console.log(` Step 1 (group proc): ${(t1 - t0).toFixed(2)}ms`);
|
|
379
|
-
console.log(` Step 2 (extract): ${(t2 - t1).toFixed(2)}ms`);
|
|
380
|
-
console.log(` Step 3 (group queue): ${(t3 - t2).toFixed(2)}ms`);
|
|
381
|
-
console.log(` Step 4 (release): ${(t4 - t3).toFixed(2)}ms`);
|
|
382
|
-
console.log(` Step 5 (update+store): ${(t5 - t4).toFixed(2)}ms`);
|
|
383
|
-
console.log(` Total: ${(t5 - t0).toFixed(2)}ms`);
|
|
384
|
-
}
|
|
155
|
+
const batchCtx = {
|
|
156
|
+
processingShards: ctx.processingShards,
|
|
157
|
+
processingLocks: ctx.processingLocks,
|
|
158
|
+
shards: ctx.shards,
|
|
159
|
+
shardLocks: ctx.shardLocks,
|
|
160
|
+
};
|
|
161
|
+
// Step 1-2: Group and extract with results
|
|
162
|
+
const byProcShard = groupItemsByProcShard(items);
|
|
163
|
+
const extractedJobs = await extractJobsWithResults(byProcShard, batchCtx);
|
|
164
|
+
// Step 3-4: Group by queue shard and release
|
|
165
|
+
const byQueueShard = groupByQueueShard(extractedJobs);
|
|
166
|
+
await releaseResources(byQueueShard, batchCtx);
|
|
167
|
+
// Step 5: Finalize with results
|
|
168
|
+
finalizeBatchAck(extractedJobs, ctx, true);
|
|
385
169
|
}
|
|
386
170
|
//# sourceMappingURL=ack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ack.js","sourceRoot":"","sources":["../../../src/application/operations/ack.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ack.js","sourceRoot":"","sources":["../../../src/application/operations/ack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ack Helpers - Shared batch processing utilities
|
|
3
|
+
*/
|
|
4
|
+
import type { Job, JobId } from '../../domain/types/job';
|
|
5
|
+
import type { JobLocation, EventType } from '../../domain/types/queue';
|
|
6
|
+
import type { Shard } from '../../domain/queue/shard';
|
|
7
|
+
import type { RWLock } from '../../shared/lock';
|
|
8
|
+
import type { SetLike, MapLike } from '../../shared/lru';
|
|
9
|
+
import type { SqliteStorage } from '../../infrastructure/persistence/sqlite';
|
|
10
|
+
/** Extracted job with optional result */
|
|
11
|
+
export interface ExtractedJob<T = unknown> {
|
|
12
|
+
id: JobId;
|
|
13
|
+
job: Job;
|
|
14
|
+
result?: T;
|
|
15
|
+
}
|
|
16
|
+
/** Context for batch operations */
|
|
17
|
+
export interface BatchContext {
|
|
18
|
+
processingShards: Map<JobId, Job>[];
|
|
19
|
+
processingLocks: RWLock[];
|
|
20
|
+
shards: Shard[];
|
|
21
|
+
shardLocks: RWLock[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Group job IDs by processing shard
|
|
25
|
+
* Returns Map<shardIndex, jobIds[]>
|
|
26
|
+
*/
|
|
27
|
+
export declare function groupByProcShard(jobIds: JobId[]): Map<number, JobId[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Group items by processing shard (with results)
|
|
30
|
+
*/
|
|
31
|
+
export declare function groupItemsByProcShard<T extends {
|
|
32
|
+
id: JobId;
|
|
33
|
+
}>(items: T[]): Map<number, T[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Extract jobs from processing shards (one lock per shard)
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractJobs(byProcShard: Map<number, JobId[]>, ctx: BatchContext): Promise<ExtractedJob[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Extract jobs with results from processing shards
|
|
40
|
+
*/
|
|
41
|
+
export declare function extractJobsWithResults<T>(byProcShard: Map<number, Array<{
|
|
42
|
+
id: JobId;
|
|
43
|
+
result: T;
|
|
44
|
+
}>>, ctx: BatchContext): Promise<Array<ExtractedJob<T>>>;
|
|
45
|
+
/**
|
|
46
|
+
* Group extracted jobs by queue shard
|
|
47
|
+
*/
|
|
48
|
+
export declare function groupByQueueShard(extractedJobs: ExtractedJob[]): Map<number, Job[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Release resources for each queue shard (one lock per shard)
|
|
51
|
+
*/
|
|
52
|
+
export declare function releaseResources(byQueueShard: Map<number, Job[]>, ctx: BatchContext): Promise<void>;
|
|
53
|
+
/** Context for finalize operations */
|
|
54
|
+
export interface FinalizeContext {
|
|
55
|
+
storage: SqliteStorage | null;
|
|
56
|
+
completedJobs: SetLike<JobId>;
|
|
57
|
+
jobResults: MapLike<JobId, unknown>;
|
|
58
|
+
jobIndex: Map<JobId, JobLocation>;
|
|
59
|
+
customIdMap?: MapLike<string, JobId>;
|
|
60
|
+
totalCompleted: {
|
|
61
|
+
value: bigint;
|
|
62
|
+
};
|
|
63
|
+
broadcast: (event: {
|
|
64
|
+
eventType: EventType;
|
|
65
|
+
queue: string;
|
|
66
|
+
jobId: JobId;
|
|
67
|
+
timestamp: number;
|
|
68
|
+
data?: unknown;
|
|
69
|
+
}) => void;
|
|
70
|
+
onJobCompleted: (jobId: JobId) => void;
|
|
71
|
+
onJobsCompleted?: (jobIds: JobId[]) => void;
|
|
72
|
+
needsBroadcast?: () => boolean;
|
|
73
|
+
hasPendingDeps?: () => boolean;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Finalize batch ack - update indexes, metrics, broadcast, notify
|
|
77
|
+
*/
|
|
78
|
+
export declare function finalizeBatchAck<T>(extractedJobs: Array<ExtractedJob<T>>, ctx: FinalizeContext, includeResults: boolean): void;
|
|
79
|
+
//# sourceMappingURL=ackHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ackHelpers.d.ts","sourceRoot":"","sources":["../../../src/application/operations/ackHelpers.ts"],"names":[],"mappings":"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"}
|