bunqueue 1.9.6 → 1.9.8
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 +29 -0
- package/dist/application/backgroundTasks.d.ts.map +1 -0
- package/dist/application/backgroundTasks.js +155 -0
- package/dist/application/backgroundTasks.js.map +1 -0
- package/dist/application/cleanupTasks.d.ts +11 -0
- package/dist/application/cleanupTasks.d.ts.map +1 -0
- package/dist/application/cleanupTasks.js +216 -0
- package/dist/application/cleanupTasks.js.map +1 -0
- package/dist/application/clientTracking.d.ts +22 -0
- package/dist/application/clientTracking.d.ts.map +1 -0
- package/dist/application/clientTracking.js +122 -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 +169 -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 +15 -0
- package/dist/application/lockManager.d.ts.map +1 -0
- package/dist/application/lockManager.js +118 -0
- package/dist/application/lockManager.js.map +1 -0
- 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 +0 -5
- package/dist/application/operations/ack.d.ts.map +1 -1
- package/dist/application/operations/ack.js +30 -258
- package/dist/application/operations/ack.js.map +1 -1
- package/dist/application/operations/ackHelpers.d.ts +78 -0
- package/dist/application/operations/ackHelpers.d.ts.map +1 -0
- package/dist/application/operations/ackHelpers.js +162 -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 +8 -2
- 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 +13 -183
- package/dist/application/queueManager.d.ts.map +1 -1
- package/dist/application/queueManager.js +134 -1110
- 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/statsManager.d.ts +56 -0
- package/dist/application/statsManager.d.ts.map +1 -0
- package/dist/application/statsManager.js +111 -0
- package/dist/application/statsManager.js.map +1 -0
- package/dist/application/types.d.ts +123 -0
- package/dist/application/types.d.ts.map +1 -0
- package/dist/application/types.js +16 -0
- package/dist/application/types.js.map +1 -0
- 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 +59 -0
- package/dist/domain/queue/dlqShard.d.ts.map +1 -0
- package/dist/domain/queue/dlqShard.js +165 -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 +29 -122
- package/dist/domain/queue/shard.d.ts.map +1 -1
- package/dist/domain/queue/shard.js +152 -426
- package/dist/domain/queue/shard.js.map +1 -1
- package/dist/domain/queue/temporalManager.d.ts +81 -0
- package/dist/domain/queue/temporalManager.d.ts.map +1 -0
- package/dist/domain/queue/temporalManager.js +149 -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/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 +4 -13
- package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
- package/dist/infrastructure/persistence/sqlite.js +23 -178
- 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/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/http.d.ts +4 -25
- package/dist/infrastructure/server/http.d.ts.map +1 -1
- package/dist/infrastructure/server/http.js +43 -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/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.map +1 -1
- package/dist/infrastructure/server/tcp.js +14 -8
- 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/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/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
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lock Operations - Job lock creation, verification, renewal
|
|
3
|
+
*/
|
|
4
|
+
import type { JobId, JobLock, LockToken } from '../domain/types/job';
|
|
5
|
+
import type { LockContext } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Create a lock for a job when it's pulled for processing.
|
|
8
|
+
* @returns The lock token, or null if job not in processing
|
|
9
|
+
*/
|
|
10
|
+
export declare function createLock(jobId: JobId, owner: string, ctx: LockContext, ttl?: number): LockToken | null;
|
|
11
|
+
/**
|
|
12
|
+
* Verify that a token is valid for a job.
|
|
13
|
+
* @returns true if token matches the active lock
|
|
14
|
+
*/
|
|
15
|
+
export declare function verifyLock(jobId: JobId, token: string, ctx: LockContext): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Renew a lock with the given token.
|
|
18
|
+
* @returns true if renewal succeeded, false if token invalid or lock expired
|
|
19
|
+
*/
|
|
20
|
+
export declare function renewJobLock(jobId: JobId, token: string, ctx: LockContext, newTtl?: number): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Renew locks for multiple jobs (batch operation).
|
|
23
|
+
* @returns Array of jobIds that were successfully renewed
|
|
24
|
+
*/
|
|
25
|
+
export declare function renewJobLockBatch(items: Array<{
|
|
26
|
+
id: JobId;
|
|
27
|
+
token: string;
|
|
28
|
+
ttl?: number;
|
|
29
|
+
}>, ctx: LockContext): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Release a lock when job is completed or failed.
|
|
32
|
+
* Should be called by ACK/FAIL operations.
|
|
33
|
+
*/
|
|
34
|
+
export declare function releaseLock(jobId: JobId, ctx: LockContext, token?: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Get lock info for a job (for debugging/monitoring).
|
|
37
|
+
*/
|
|
38
|
+
export declare function getLockInfo(jobId: JobId, ctx: LockContext): JobLock | null;
|
|
39
|
+
//# sourceMappingURL=lockOperations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockOperations.d.ts","sourceRoot":"","sources":["../../src/application/lockOperations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,EAChB,GAAG,GAAE,MAAyB,GAC7B,SAAS,GAAG,IAAI,CAalB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAMjF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAoBT;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACxD,GAAG,EAAE,WAAW,GACf,MAAM,EAAE,CAQV;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAgBnF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI,CAE1E"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lock Operations - Job lock creation, verification, renewal
|
|
3
|
+
*/
|
|
4
|
+
import { createJobLock, isLockExpired, renewLock, DEFAULT_LOCK_TTL } from '../domain/types/job';
|
|
5
|
+
import { queueLog } from '../shared/logger';
|
|
6
|
+
/**
|
|
7
|
+
* Create a lock for a job when it's pulled for processing.
|
|
8
|
+
* @returns The lock token, or null if job not in processing
|
|
9
|
+
*/
|
|
10
|
+
export function createLock(jobId, owner, ctx, ttl = DEFAULT_LOCK_TTL) {
|
|
11
|
+
const loc = ctx.jobIndex.get(jobId);
|
|
12
|
+
if (loc?.type !== 'processing')
|
|
13
|
+
return null;
|
|
14
|
+
// Check if lock already exists (shouldn't happen, but defensive)
|
|
15
|
+
if (ctx.jobLocks.has(jobId)) {
|
|
16
|
+
queueLog.warn('Lock already exists for job', { jobId: String(jobId), owner });
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const lock = createJobLock(jobId, owner, ttl);
|
|
20
|
+
ctx.jobLocks.set(jobId, lock);
|
|
21
|
+
return lock.token;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Verify that a token is valid for a job.
|
|
25
|
+
* @returns true if token matches the active lock
|
|
26
|
+
*/
|
|
27
|
+
export function verifyLock(jobId, token, ctx) {
|
|
28
|
+
const lock = ctx.jobLocks.get(jobId);
|
|
29
|
+
if (!lock)
|
|
30
|
+
return false;
|
|
31
|
+
if (lock.token !== token)
|
|
32
|
+
return false;
|
|
33
|
+
if (isLockExpired(lock))
|
|
34
|
+
return false;
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Renew a lock with the given token.
|
|
39
|
+
* @returns true if renewal succeeded, false if token invalid or lock expired
|
|
40
|
+
*/
|
|
41
|
+
export function renewJobLock(jobId, token, ctx, newTtl) {
|
|
42
|
+
const lock = ctx.jobLocks.get(jobId);
|
|
43
|
+
if (!lock)
|
|
44
|
+
return false;
|
|
45
|
+
if (lock.token !== token)
|
|
46
|
+
return false;
|
|
47
|
+
if (isLockExpired(lock)) {
|
|
48
|
+
// Lock already expired, remove it
|
|
49
|
+
ctx.jobLocks.delete(jobId);
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
renewLock(lock, newTtl);
|
|
53
|
+
// Also update lastHeartbeat on the job (for legacy stall detection compatibility)
|
|
54
|
+
const loc = ctx.jobIndex.get(jobId);
|
|
55
|
+
if (loc?.type === 'processing') {
|
|
56
|
+
const job = ctx.processingShards[loc.shardIdx].get(jobId);
|
|
57
|
+
if (job)
|
|
58
|
+
job.lastHeartbeat = Date.now();
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Renew locks for multiple jobs (batch operation).
|
|
64
|
+
* @returns Array of jobIds that were successfully renewed
|
|
65
|
+
*/
|
|
66
|
+
export function renewJobLockBatch(items, ctx) {
|
|
67
|
+
const renewed = [];
|
|
68
|
+
for (const item of items) {
|
|
69
|
+
if (renewJobLock(item.id, item.token, ctx, item.ttl)) {
|
|
70
|
+
renewed.push(String(item.id));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return renewed;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Release a lock when job is completed or failed.
|
|
77
|
+
* Should be called by ACK/FAIL operations.
|
|
78
|
+
*/
|
|
79
|
+
export function releaseLock(jobId, ctx, token) {
|
|
80
|
+
const lock = ctx.jobLocks.get(jobId);
|
|
81
|
+
if (!lock)
|
|
82
|
+
return true; // No lock to release
|
|
83
|
+
// If token provided, verify it matches
|
|
84
|
+
if (token && lock.token !== token) {
|
|
85
|
+
queueLog.warn('Token mismatch on lock release', {
|
|
86
|
+
jobId: String(jobId),
|
|
87
|
+
expected: lock.token.substring(0, 8),
|
|
88
|
+
got: token.substring(0, 8),
|
|
89
|
+
});
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
ctx.jobLocks.delete(jobId);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get lock info for a job (for debugging/monitoring).
|
|
97
|
+
*/
|
|
98
|
+
export function getLockInfo(jobId, ctx) {
|
|
99
|
+
return ctx.jobLocks.get(jobId) ?? null;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=lockOperations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockOperations.js","sourceRoot":"","sources":["../../src/application/lockOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,13 +33,9 @@ export interface AckContext {
|
|
|
33
33
|
error?: string;
|
|
34
34
|
}) => void;
|
|
35
35
|
onJobCompleted: (jobId: JobId) => void;
|
|
36
|
-
/** Batch notify completions - more efficient than per-job calls */
|
|
37
36
|
onJobsCompleted?: (jobIds: JobId[]) => void;
|
|
38
|
-
/** Fast check if broadcast is needed - avoids function call overhead */
|
|
39
37
|
needsBroadcast?: () => boolean;
|
|
40
|
-
/** Check if any jobs are waiting for dependencies */
|
|
41
38
|
hasPendingDeps?: () => boolean;
|
|
42
|
-
/** Callback to re-queue repeatable jobs */
|
|
43
39
|
onRepeat?: (job: Job) => void;
|
|
44
40
|
}
|
|
45
41
|
/**
|
|
@@ -57,7 +53,6 @@ export declare function failJob(jobId: JobId, error: string | undefined, ctx: Ac
|
|
|
57
53
|
export declare function ackJobBatch(jobIds: JobId[], ctx: AckContext): Promise<void>;
|
|
58
54
|
/**
|
|
59
55
|
* Acknowledge multiple jobs with individual results - optimized batch processing
|
|
60
|
-
* Same as ackJobBatch but supports passing result data for each job
|
|
61
56
|
*/
|
|
62
57
|
export declare function ackJobBatchWithResults(items: Array<{
|
|
63
58
|
id: JobId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ack.d.ts","sourceRoot":"","sources":["../../../src/application/operations/ack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAA8B,MAAM,wBAAwB,CAAC;AAC1F,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;
|
|
1
|
+
{"version":3,"file":"ack.d.ts","sourceRoot":"","sources":["../../../src/application/operations/ack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAA8B,MAAM,wBAAwB,CAAC;AAC1F,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;AAWzD,4BAA4B;AAC5B,MAAM,WAAW,UAAU;IACzB,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,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClC,cAAc,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,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;QAClB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,KAAK,IAAI,CAAC;IACX,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD1F;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BjF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,EAC5C,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
|
@@ -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,10 @@ 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
|
-
// Store result and mark completed
|
|
30
28
|
if (!job.removeOnComplete) {
|
|
31
29
|
ctx.completedJobs.add(jobId);
|
|
32
30
|
if (result !== undefined) {
|
|
@@ -40,7 +38,6 @@ export async function ackJob(jobId, result, ctx) {
|
|
|
40
38
|
ctx.jobIndex.delete(jobId);
|
|
41
39
|
ctx.storage?.deleteJob(jobId);
|
|
42
40
|
}
|
|
43
|
-
// Update metrics
|
|
44
41
|
ctx.totalCompleted.value++;
|
|
45
42
|
ctx.broadcast({
|
|
46
43
|
eventType: 'completed',
|
|
@@ -49,9 +46,7 @@ export async function ackJob(jobId, result, ctx) {
|
|
|
49
46
|
timestamp: Date.now(),
|
|
50
47
|
data: result,
|
|
51
48
|
});
|
|
52
|
-
// Notify completion (for dependencies and parent jobs)
|
|
53
49
|
ctx.onJobCompleted(jobId);
|
|
54
|
-
// Handle repeatable jobs
|
|
55
50
|
if (job.repeat && ctx.onRepeat) {
|
|
56
51
|
const shouldRepeat = job.repeat.limit === undefined || job.repeat.count < job.repeat.limit;
|
|
57
52
|
if (shouldRepeat) {
|
|
@@ -64,7 +59,6 @@ export async function ackJob(jobId, result, ctx) {
|
|
|
64
59
|
*/
|
|
65
60
|
export async function failJob(jobId, error, ctx) {
|
|
66
61
|
const procIdx = processingShardIndex(jobId);
|
|
67
|
-
// Remove from processing
|
|
68
62
|
const job = await withWriteLock(ctx.processingLocks[procIdx], () => {
|
|
69
63
|
const job = ctx.processingShards[procIdx].get(jobId);
|
|
70
64
|
if (job) {
|
|
@@ -75,37 +69,31 @@ export async function failJob(jobId, error, ctx) {
|
|
|
75
69
|
if (!job) {
|
|
76
70
|
throw new Error(`Job not found or not in processing state: ${jobId}`);
|
|
77
71
|
}
|
|
78
|
-
// Increment attempts
|
|
79
72
|
job.attempts++;
|
|
80
73
|
const idx = shardIndex(job.queue);
|
|
81
74
|
await withWriteLock(ctx.shardLocks[idx], () => {
|
|
82
75
|
const shard = ctx.shards[idx];
|
|
83
76
|
shard.releaseJobResources(job.queue, job.uniqueKey, job.groupId);
|
|
84
77
|
if (canRetry(job)) {
|
|
85
|
-
// Retry with exponential backoff
|
|
86
78
|
const now = Date.now();
|
|
87
79
|
job.runAt = now + calculateBackoff(job);
|
|
88
80
|
shard.getQueue(job.queue).push(job);
|
|
89
|
-
// Update running counters for O(1) stats (retry jobs are always delayed)
|
|
90
81
|
shard.incrementQueued(jobId, true, job.createdAt, job.queue, job.runAt);
|
|
91
82
|
ctx.jobIndex.set(jobId, { type: 'queue', shardIdx: idx, queueName: job.queue });
|
|
92
83
|
ctx.storage?.updateForRetry(job);
|
|
93
84
|
}
|
|
94
85
|
else if (job.removeOnFail) {
|
|
95
|
-
// Remove completely - don't add to DLQ
|
|
96
86
|
ctx.jobIndex.delete(jobId);
|
|
97
87
|
ctx.storage?.deleteJob(jobId);
|
|
98
88
|
ctx.totalFailed.value++;
|
|
99
89
|
}
|
|
100
90
|
else {
|
|
101
|
-
// Move to DLQ (addToDlq already updates dlq counter)
|
|
102
91
|
const entry = shard.addToDlq(job);
|
|
103
92
|
ctx.jobIndex.set(jobId, { type: 'dlq', queueName: job.queue });
|
|
104
93
|
ctx.storage?.saveDlqEntry(entry);
|
|
105
94
|
ctx.totalFailed.value++;
|
|
106
95
|
}
|
|
107
96
|
});
|
|
108
|
-
// Broadcast event
|
|
109
97
|
ctx.broadcast({
|
|
110
98
|
eventType: 'failed',
|
|
111
99
|
queue: job.queue,
|
|
@@ -114,151 +102,36 @@ export async function failJob(jobId, error, ctx) {
|
|
|
114
102
|
error,
|
|
115
103
|
});
|
|
116
104
|
}
|
|
117
|
-
/** Debug flag for ackBatch timing */
|
|
118
|
-
const DEBUG_ACK_BATCH = process.env.DEBUG_ACK_BATCH === '1';
|
|
119
105
|
/**
|
|
120
106
|
* Acknowledge multiple jobs - optimized batch processing
|
|
121
107
|
* Groups jobs by shard to minimize lock acquisitions: O(shards) instead of O(n)
|
|
122
108
|
*/
|
|
123
|
-
// eslint-disable-next-line complexity
|
|
124
109
|
export async function ackJobBatch(jobIds, ctx) {
|
|
125
110
|
if (jobIds.length === 0)
|
|
126
111
|
return;
|
|
127
|
-
// Small batches - use parallel individual acks
|
|
112
|
+
// Small batches - use parallel individual acks
|
|
128
113
|
if (jobIds.length <= 4) {
|
|
129
114
|
await Promise.all(jobIds.map((id) => ackJob(id, undefined, ctx)));
|
|
130
115
|
return;
|
|
131
116
|
}
|
|
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
|
-
}
|
|
117
|
+
const batchCtx = {
|
|
118
|
+
processingShards: ctx.processingShards,
|
|
119
|
+
processingLocks: ctx.processingLocks,
|
|
120
|
+
shards: ctx.shards,
|
|
121
|
+
shardLocks: ctx.shardLocks,
|
|
122
|
+
};
|
|
123
|
+
// Step 1-2: Group and extract
|
|
124
|
+
const byProcShard = groupByProcShard(jobIds);
|
|
125
|
+
const extractedJobs = await extractJobs(byProcShard, batchCtx);
|
|
126
|
+
// Step 3-4: Group by queue shard and release
|
|
127
|
+
const byQueueShard = groupByQueueShard(extractedJobs);
|
|
128
|
+
await releaseResources(byQueueShard, batchCtx);
|
|
129
|
+
// Step 5: Finalize
|
|
130
|
+
finalizeBatchAck(extractedJobs, ctx, false);
|
|
256
131
|
}
|
|
257
132
|
/**
|
|
258
133
|
* Acknowledge multiple jobs with individual results - optimized batch processing
|
|
259
|
-
* Same as ackJobBatch but supports passing result data for each job
|
|
260
134
|
*/
|
|
261
|
-
// eslint-disable-next-line complexity
|
|
262
135
|
export async function ackJobBatchWithResults(items, ctx) {
|
|
263
136
|
if (items.length === 0)
|
|
264
137
|
return;
|
|
@@ -267,120 +140,19 @@ export async function ackJobBatchWithResults(items, ctx) {
|
|
|
267
140
|
await Promise.all(items.map((item) => ackJob(item.id, item.result, ctx)));
|
|
268
141
|
return;
|
|
269
142
|
}
|
|
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
|
-
}
|
|
143
|
+
const batchCtx = {
|
|
144
|
+
processingShards: ctx.processingShards,
|
|
145
|
+
processingLocks: ctx.processingLocks,
|
|
146
|
+
shards: ctx.shards,
|
|
147
|
+
shardLocks: ctx.shardLocks,
|
|
148
|
+
};
|
|
149
|
+
// Step 1-2: Group and extract with results
|
|
150
|
+
const byProcShard = groupItemsByProcShard(items);
|
|
151
|
+
const extractedJobs = await extractJobsWithResults(byProcShard, batchCtx);
|
|
152
|
+
// Step 3-4: Group by queue shard and release
|
|
153
|
+
const byQueueShard = groupByQueueShard(extractedJobs);
|
|
154
|
+
await releaseResources(byQueueShard, batchCtx);
|
|
155
|
+
// Step 5: Finalize with results
|
|
156
|
+
finalizeBatchAck(extractedJobs, ctx, true);
|
|
385
157
|
}
|
|
386
158
|
//# 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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"}
|