bullmq 1.59.4 → 1.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bullmq.d.ts +18 -5
- package/dist/cjs/classes/queue-scheduler.d.ts +18 -5
- package/dist/cjs/classes/queue-scheduler.js +15 -0
- package/dist/cjs/classes/queue-scheduler.js.map +1 -1
- package/dist/cjs/commands/getState-7.lua +5 -11
- package/dist/cjs/commands/includes/checkItemInList.lua +12 -0
- package/dist/cjs/commands/includes/updateParentDepsIfNeeded.lua +2 -1
- package/dist/cjs/commands/isJobInList-1.lua +11 -15
- package/dist/cjs/commands/moveToFinished-8.lua +2 -1
- package/dist/cjs/commands/obliterate-2.lua +1 -1
- package/dist/cjs/commands/releaseLock-1.lua +7 -7
- package/dist/cjs/commands/removeJob-1.lua +2 -2
- package/dist/cjs/commands/updateDelaySet-7.lua +1 -1
- package/dist/esm/classes/queue-scheduler.d.ts +18 -5
- package/dist/esm/classes/queue-scheduler.js +15 -0
- package/dist/esm/classes/queue-scheduler.js.map +1 -1
- package/dist/esm/commands/getState-7.lua +5 -11
- package/dist/esm/commands/includes/checkItemInList.lua +12 -0
- package/dist/esm/commands/includes/updateParentDepsIfNeeded.lua +2 -1
- package/dist/esm/commands/isJobInList-1.lua +11 -15
- package/dist/esm/commands/moveToFinished-8.lua +2 -1
- package/dist/esm/commands/obliterate-2.lua +1 -1
- package/dist/esm/commands/releaseLock-1.lua +7 -7
- package/dist/esm/commands/removeJob-1.lua +2 -2
- package/dist/esm/commands/updateDelaySet-7.lua +1 -1
- package/package.json +1 -1
package/dist/bullmq.d.ts
CHANGED
@@ -1245,11 +1245,15 @@ export declare interface QueueOptions extends QueueBaseOptions {
|
|
1245
1245
|
* jobs, etc, will not work correctly or at all.
|
1246
1246
|
*
|
1247
1247
|
*/
|
1248
|
-
export declare class QueueScheduler extends QueueBase
|
1248
|
+
export declare class QueueScheduler extends QueueBase {
|
1249
1249
|
private nextTimestamp;
|
1250
1250
|
private isBlocked;
|
1251
1251
|
private running;
|
1252
1252
|
constructor(name: string, { connection, autorun, ...opts }?: QueueSchedulerOptions);
|
1253
|
+
emit<U extends keyof QueueSchedulerListener>(event: U, ...args: Parameters<QueueSchedulerListener[U]>): boolean;
|
1254
|
+
off<U extends keyof QueueSchedulerListener>(eventName: U, listener: QueueSchedulerListener[U]): this;
|
1255
|
+
on<U extends keyof QueueSchedulerListener>(event: U, listener: QueueSchedulerListener[U]): this;
|
1256
|
+
once<U extends keyof QueueSchedulerListener>(event: U, listener: QueueSchedulerListener[U]): this;
|
1253
1257
|
run(): Promise<void>;
|
1254
1258
|
isRunning(): boolean;
|
1255
1259
|
private readDelayedData;
|
@@ -1258,10 +1262,19 @@ export declare class QueueScheduler extends QueueBase implements QueueSchedulerD
|
|
1258
1262
|
close(): Promise<void>;
|
1259
1263
|
}
|
1260
1264
|
|
1261
|
-
export declare interface
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
+
export declare interface QueueSchedulerListener {
|
1266
|
+
/**
|
1267
|
+
* Listen to 'stalled' event.
|
1268
|
+
*
|
1269
|
+
* This event is triggered when a job gets stalled.
|
1270
|
+
*/
|
1271
|
+
stalled: (jobId: string, prev: string) => void;
|
1272
|
+
/**
|
1273
|
+
* Listen to 'failed' event.
|
1274
|
+
*
|
1275
|
+
* This event is triggered when a job has thrown an exception.
|
1276
|
+
*/
|
1277
|
+
failed: (jobId: string, failedReason: Error, prev: string) => void;
|
1265
1278
|
}
|
1266
1279
|
|
1267
1280
|
/**
|
@@ -1,9 +1,18 @@
|
|
1
1
|
import { QueueSchedulerOptions } from '../interfaces';
|
2
2
|
import { QueueBase } from './queue-base';
|
3
|
-
export interface
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
export interface QueueSchedulerListener {
|
4
|
+
/**
|
5
|
+
* Listen to 'stalled' event.
|
6
|
+
*
|
7
|
+
* This event is triggered when a job gets stalled.
|
8
|
+
*/
|
9
|
+
stalled: (jobId: string, prev: string) => void;
|
10
|
+
/**
|
11
|
+
* Listen to 'failed' event.
|
12
|
+
*
|
13
|
+
* This event is triggered when a job has thrown an exception.
|
14
|
+
*/
|
15
|
+
failed: (jobId: string, failedReason: Error, prev: string) => void;
|
7
16
|
}
|
8
17
|
/**
|
9
18
|
* This class is just used for some automatic bookkeeping of the queue,
|
@@ -21,11 +30,15 @@ export interface QueueSchedulerDeclaration {
|
|
21
30
|
* jobs, etc, will not work correctly or at all.
|
22
31
|
*
|
23
32
|
*/
|
24
|
-
export declare class QueueScheduler extends QueueBase
|
33
|
+
export declare class QueueScheduler extends QueueBase {
|
25
34
|
private nextTimestamp;
|
26
35
|
private isBlocked;
|
27
36
|
private running;
|
28
37
|
constructor(name: string, { connection, autorun, ...opts }?: QueueSchedulerOptions);
|
38
|
+
emit<U extends keyof QueueSchedulerListener>(event: U, ...args: Parameters<QueueSchedulerListener[U]>): boolean;
|
39
|
+
off<U extends keyof QueueSchedulerListener>(eventName: U, listener: QueueSchedulerListener[U]): this;
|
40
|
+
on<U extends keyof QueueSchedulerListener>(event: U, listener: QueueSchedulerListener[U]): this;
|
41
|
+
once<U extends keyof QueueSchedulerListener>(event: U, listener: QueueSchedulerListener[U]): this;
|
29
42
|
run(): Promise<void>;
|
30
43
|
isRunning(): boolean;
|
31
44
|
private readDelayedData;
|
@@ -39,6 +39,21 @@ class QueueScheduler extends queue_base_1.QueueBase {
|
|
39
39
|
});
|
40
40
|
}
|
41
41
|
}
|
42
|
+
emit(event, ...args) {
|
43
|
+
return super.emit(event, ...args);
|
44
|
+
}
|
45
|
+
off(eventName, listener) {
|
46
|
+
super.off(eventName, listener);
|
47
|
+
return this;
|
48
|
+
}
|
49
|
+
on(event, listener) {
|
50
|
+
super.on(event, listener);
|
51
|
+
return this;
|
52
|
+
}
|
53
|
+
once(event, listener) {
|
54
|
+
super.once(event, listener);
|
55
|
+
return this;
|
56
|
+
}
|
42
57
|
async run() {
|
43
58
|
if (!this.running) {
|
44
59
|
try {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"queue-scheduler.js","sourceRoot":"","sources":["../../../src/classes/queue-scheduler.ts"],"names":[],"mappings":";;;;AAKA,oCAAsD;AACtD,6CAAyC;AACzC,uCAAoC;
|
1
|
+
{"version":3,"file":"queue-scheduler.js","sourceRoot":"","sources":["../../../src/classes/queue-scheduler.ts"],"names":[],"mappings":"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"}
|
@@ -32,27 +32,21 @@ if redis.call("ZSCORE", KEYS[3], ARGV[1]) ~= false then
|
|
32
32
|
return "delayed"
|
33
33
|
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
if v == item then
|
38
|
-
return 1
|
39
|
-
end
|
40
|
-
end
|
41
|
-
return nil
|
42
|
-
end
|
35
|
+
-- Includes
|
36
|
+
--- @include "includes/checkItemInList"
|
43
37
|
|
44
38
|
local active_items = redis.call("LRANGE", KEYS[4] , 0, -1)
|
45
|
-
if
|
39
|
+
if checkItemInList(active_items, ARGV[1]) ~= nil then
|
46
40
|
return "active"
|
47
41
|
end
|
48
42
|
|
49
43
|
local wait_items = redis.call("LRANGE", KEYS[5] , 0, -1)
|
50
|
-
if
|
44
|
+
if checkItemInList(wait_items, ARGV[1]) ~= nil then
|
51
45
|
return "waiting"
|
52
46
|
end
|
53
47
|
|
54
48
|
local paused_items = redis.call("LRANGE", KEYS[6] , 0, -1)
|
55
|
-
if
|
49
|
+
if checkItemInList(paused_items, ARGV[1]) ~= nil then
|
56
50
|
return "waiting"
|
57
51
|
end
|
58
52
|
|
@@ -2,7 +2,8 @@
|
|
2
2
|
Validate and move or add dependencies to parent.
|
3
3
|
]]
|
4
4
|
|
5
|
-
local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
|
5
|
+
local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
|
6
|
+
parentId, jobIdKey, returnvalue )
|
6
7
|
local processedSet = parentKey .. ":processed"
|
7
8
|
rcall("HSET", processedSet, jobIdKey, returnvalue)
|
8
9
|
local activeParent = rcall("ZSCORE", parentQueueKey .. ":waiting-children", parentId)
|
@@ -1,20 +1,16 @@
|
|
1
1
|
--[[
|
2
|
-
|
2
|
+
Checks if job is in a given list.
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
Input:
|
5
|
+
KEYS[1]
|
6
|
+
ARGV[1]
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
Output:
|
9
|
+
1 if element found in the list.
|
10
10
|
]]
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
return nil
|
18
|
-
end
|
11
|
+
|
12
|
+
-- Includes
|
13
|
+
--- @include "includes/checkItemInList"
|
14
|
+
|
19
15
|
local items = redis.call("LRANGE", KEYS[1] , 0, -1)
|
20
|
-
return
|
16
|
+
return checkItemInList(items, ARGV[1])
|
@@ -105,7 +105,8 @@ if rcall("EXISTS",jobIdKey) == 1 then -- // Make sure job exists
|
|
105
105
|
if removeJobs ~= 1 then
|
106
106
|
-- Add to complete/failed set
|
107
107
|
rcall("ZADD", KEYS[2], ARGV[2], jobId)
|
108
|
-
rcall("HMSET", jobIdKey, ARGV[3], ARGV[4], "finishedOn",
|
108
|
+
rcall("HMSET", jobIdKey, ARGV[3], ARGV[4], "finishedOn",
|
109
|
+
ARGV[2]) -- "returnvalue" / "failedReason" and "finishedOn"
|
109
110
|
|
110
111
|
-- Remove old jobs?
|
111
112
|
if removeJobs and removeJobs > 1 then
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
-- The queue needs to be "paused" or it will return an error
|
17
17
|
-- If the queue has currently active jobs then the script by default will return error,
|
18
|
-
-- however this behaviour can be overrided using the
|
18
|
+
-- however this behaviour can be overrided using the 'force' option.
|
19
19
|
local maxCount = tonumber(ARGV[1])
|
20
20
|
local baseKey = KEYS[2]
|
21
21
|
|
@@ -1,14 +1,14 @@
|
|
1
1
|
--[[
|
2
2
|
Release lock
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
Input:
|
5
|
+
KEYS[1] 'lock',
|
6
|
+
|
7
|
+
ARGV[1] token
|
8
|
+
ARGV[2] lock duration in milliseconds
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
Output:
|
11
|
-
"OK" if lock extented succesfully.
|
10
|
+
Output:
|
11
|
+
"OK" if lock extented succesfully.
|
12
12
|
]]
|
13
13
|
local rcall = redis.call
|
14
14
|
|
@@ -1,9 +1,18 @@
|
|
1
1
|
import { QueueSchedulerOptions } from '../interfaces';
|
2
2
|
import { QueueBase } from './queue-base';
|
3
|
-
export interface
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
export interface QueueSchedulerListener {
|
4
|
+
/**
|
5
|
+
* Listen to 'stalled' event.
|
6
|
+
*
|
7
|
+
* This event is triggered when a job gets stalled.
|
8
|
+
*/
|
9
|
+
stalled: (jobId: string, prev: string) => void;
|
10
|
+
/**
|
11
|
+
* Listen to 'failed' event.
|
12
|
+
*
|
13
|
+
* This event is triggered when a job has thrown an exception.
|
14
|
+
*/
|
15
|
+
failed: (jobId: string, failedReason: Error, prev: string) => void;
|
7
16
|
}
|
8
17
|
/**
|
9
18
|
* This class is just used for some automatic bookkeeping of the queue,
|
@@ -21,11 +30,15 @@ export interface QueueSchedulerDeclaration {
|
|
21
30
|
* jobs, etc, will not work correctly or at all.
|
22
31
|
*
|
23
32
|
*/
|
24
|
-
export declare class QueueScheduler extends QueueBase
|
33
|
+
export declare class QueueScheduler extends QueueBase {
|
25
34
|
private nextTimestamp;
|
26
35
|
private isBlocked;
|
27
36
|
private running;
|
28
37
|
constructor(name: string, { connection, autorun, ...opts }?: QueueSchedulerOptions);
|
38
|
+
emit<U extends keyof QueueSchedulerListener>(event: U, ...args: Parameters<QueueSchedulerListener[U]>): boolean;
|
39
|
+
off<U extends keyof QueueSchedulerListener>(eventName: U, listener: QueueSchedulerListener[U]): this;
|
40
|
+
on<U extends keyof QueueSchedulerListener>(event: U, listener: QueueSchedulerListener[U]): this;
|
41
|
+
once<U extends keyof QueueSchedulerListener>(event: U, listener: QueueSchedulerListener[U]): this;
|
29
42
|
run(): Promise<void>;
|
30
43
|
isRunning(): boolean;
|
31
44
|
private readDelayedData;
|
@@ -36,6 +36,21 @@ export class QueueScheduler extends QueueBase {
|
|
36
36
|
});
|
37
37
|
}
|
38
38
|
}
|
39
|
+
emit(event, ...args) {
|
40
|
+
return super.emit(event, ...args);
|
41
|
+
}
|
42
|
+
off(eventName, listener) {
|
43
|
+
super.off(eventName, listener);
|
44
|
+
return this;
|
45
|
+
}
|
46
|
+
on(event, listener) {
|
47
|
+
super.on(event, listener);
|
48
|
+
return this;
|
49
|
+
}
|
50
|
+
once(event, listener) {
|
51
|
+
super.once(event, listener);
|
52
|
+
return this;
|
53
|
+
}
|
39
54
|
async run() {
|
40
55
|
if (!this.running) {
|
41
56
|
try {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"queue-scheduler.js","sourceRoot":"","sources":["../../../src/classes/queue-scheduler.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
1
|
+
{"version":3,"file":"queue-scheduler.js","sourceRoot":"","sources":["../../../src/classes/queue-scheduler.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,cAAe,SAAQ,SAAS;IAK3C,YACE,IAAY,EACZ,KAAiE,EAAE;YAAnE,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI,OAAuC,EAAlC,IAAI,cAArC,yBAAuC,CAAF;QAErC,KAAK,CAAC,IAAI,gCACR,eAAe,EAAE,CAAC,EAClB,eAAe,EAAE,KAAK,IACnB,IAAI,KACP,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC;gBACrC,CAAC,CAAe,UAAW,CAAC,SAAS,EAAE;gBACvC,CAAC,CAAC,UAAU,EACd,gBAAgB,EAAE,KAAK,IACvB,CAAC;QAhBG,kBAAa,GAAG,MAAM,CAAC,SAAS,CAAC;QACjC,cAAS,GAAG,KAAK,CAAC;QAClB,YAAO,GAAG,KAAK,CAAC;QAgBtB,IAAI,CAAE,IAAI,CAAC,IAA8B,CAAC,eAAe,EAAE;YACzD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;SACjE;QAED,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,IAAI,CACF,KAAQ,EACR,GAAG,IAA2C;QAE9C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CACD,SAAY,EACZ,QAAmC;QAEnC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CACA,KAAQ,EACR,QAAmC;QAEnC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CACF,KAAQ,EACR,QAAmC;QAEnC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI;gBACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAA6B,CAAC;gBAEhD,MAAM,CAAC,aAAa,EAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CACjE,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;gBACF,IAAI,YAAY,GAAG,QAAQ,CAAC;gBAE5B,IAAI,aAAa,EAAE;oBACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;iBACpC;gBAED,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;oBACpB,2DAA2D;oBAC3D,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAEnC,iEAAiE;oBACjE,2CAA2C;oBAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAElD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CACvD,CAAC;oBAEF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CACrC,MAAM,EACN,GAAG,EACH,YAAY,EACZ,SAAS,CACV,CAAC;oBAEF,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;wBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACvB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACtC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACrC,MAAM,aAAa,GAAW,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;4BAE3D,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;gCACtC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;6BACpC;yBACF;wBAED,EAAE;wBACF,gEAAgE;wBAChE,6BAA6B;wBAC7B,EAAE;wBACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;4BACjB,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;yBAC7C;qBACF;oBAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;oBAEvC,IAAI,KAAK,IAAI,CAAC,EAAE;wBACd,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC3D,IAAI,aAAa,EAAE;4BACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;4BACnC,YAAY,GAAG,EAAE,CAAC;yBACnB;6BAAM;4BACL,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC;yBACvC;qBACF;iBACF;gBACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,MAAM,KAAK,CAAC;aACb;SACF;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,MAAmB,EACnB,GAAW,EACX,YAAoB,EACpB,SAAiB;QAEjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,IAAI,CAAC;YACT,IAAI,SAAS,EAAE;gBACb,IAAI;oBACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CACvB,OAAO,EACP,SAAS,EACT,SAAS,EACT,GAAG,EACH,YAAY,CACb,CAAC;iBACH;gBAAC,OAAO,GAAG,EAAE;oBACZ,yCAAyC;oBACzC,IAAY,GAAI,CAAC,OAAO,KAAK,uBAAuB,EAAE;wBACpD,MAAM,GAAG,CAAC;qBACX;iBACF;wBAAS;oBACR,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;iBACxB;aACF;iBAAM;gBACL,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;aACzD;YAED,mGAAmG;YACnG,OAAO,IAAW,CAAC;SACpB;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,SAAiB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SAChD;QACD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAEpE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE,CAC/B,IAAI,CAAC,IAAI,CACP,QAAQ,EACR,KAAK,EACL,IAAI,KAAK,CAAC,uCAAuC,CAAC,EAClD,QAAQ,CACT,CACF,CAAC;YACF,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;SAC3E;IACH,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO,IAAI,CAAC,OAAO,CAAC;SACrB;QACD,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;SAClC;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;SAC9B;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
@@ -32,27 +32,21 @@ if redis.call("ZSCORE", KEYS[3], ARGV[1]) ~= false then
|
|
32
32
|
return "delayed"
|
33
33
|
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
if v == item then
|
38
|
-
return 1
|
39
|
-
end
|
40
|
-
end
|
41
|
-
return nil
|
42
|
-
end
|
35
|
+
-- Includes
|
36
|
+
--- @include "includes/checkItemInList"
|
43
37
|
|
44
38
|
local active_items = redis.call("LRANGE", KEYS[4] , 0, -1)
|
45
|
-
if
|
39
|
+
if checkItemInList(active_items, ARGV[1]) ~= nil then
|
46
40
|
return "active"
|
47
41
|
end
|
48
42
|
|
49
43
|
local wait_items = redis.call("LRANGE", KEYS[5] , 0, -1)
|
50
|
-
if
|
44
|
+
if checkItemInList(wait_items, ARGV[1]) ~= nil then
|
51
45
|
return "waiting"
|
52
46
|
end
|
53
47
|
|
54
48
|
local paused_items = redis.call("LRANGE", KEYS[6] , 0, -1)
|
55
|
-
if
|
49
|
+
if checkItemInList(paused_items, ARGV[1]) ~= nil then
|
56
50
|
return "waiting"
|
57
51
|
end
|
58
52
|
|
@@ -2,7 +2,8 @@
|
|
2
2
|
Validate and move or add dependencies to parent.
|
3
3
|
]]
|
4
4
|
|
5
|
-
local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
|
5
|
+
local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
|
6
|
+
parentId, jobIdKey, returnvalue )
|
6
7
|
local processedSet = parentKey .. ":processed"
|
7
8
|
rcall("HSET", processedSet, jobIdKey, returnvalue)
|
8
9
|
local activeParent = rcall("ZSCORE", parentQueueKey .. ":waiting-children", parentId)
|
@@ -1,20 +1,16 @@
|
|
1
1
|
--[[
|
2
|
-
|
2
|
+
Checks if job is in a given list.
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
Input:
|
5
|
+
KEYS[1]
|
6
|
+
ARGV[1]
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
Output:
|
9
|
+
1 if element found in the list.
|
10
10
|
]]
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
return nil
|
18
|
-
end
|
11
|
+
|
12
|
+
-- Includes
|
13
|
+
--- @include "includes/checkItemInList"
|
14
|
+
|
19
15
|
local items = redis.call("LRANGE", KEYS[1] , 0, -1)
|
20
|
-
return
|
16
|
+
return checkItemInList(items, ARGV[1])
|
@@ -105,7 +105,8 @@ if rcall("EXISTS",jobIdKey) == 1 then -- // Make sure job exists
|
|
105
105
|
if removeJobs ~= 1 then
|
106
106
|
-- Add to complete/failed set
|
107
107
|
rcall("ZADD", KEYS[2], ARGV[2], jobId)
|
108
|
-
rcall("HMSET", jobIdKey, ARGV[3], ARGV[4], "finishedOn",
|
108
|
+
rcall("HMSET", jobIdKey, ARGV[3], ARGV[4], "finishedOn",
|
109
|
+
ARGV[2]) -- "returnvalue" / "failedReason" and "finishedOn"
|
109
110
|
|
110
111
|
-- Remove old jobs?
|
111
112
|
if removeJobs and removeJobs > 1 then
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
-- The queue needs to be "paused" or it will return an error
|
17
17
|
-- If the queue has currently active jobs then the script by default will return error,
|
18
|
-
-- however this behaviour can be overrided using the
|
18
|
+
-- however this behaviour can be overrided using the 'force' option.
|
19
19
|
local maxCount = tonumber(ARGV[1])
|
20
20
|
local baseKey = KEYS[2]
|
21
21
|
|
@@ -1,14 +1,14 @@
|
|
1
1
|
--[[
|
2
2
|
Release lock
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
Input:
|
5
|
+
KEYS[1] 'lock',
|
6
|
+
|
7
|
+
ARGV[1] token
|
8
|
+
ARGV[2] lock duration in milliseconds
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
Output:
|
11
|
-
"OK" if lock extented succesfully.
|
10
|
+
Output:
|
11
|
+
"OK" if lock extented succesfully.
|
12
12
|
]]
|
13
13
|
local rcall = redis.call
|
14
14
|
|