bullmq 2.4.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/classes/backoffs.d.ts +3 -6
- package/dist/cjs/classes/backoffs.js +8 -8
- package/dist/cjs/classes/backoffs.js.map +1 -1
- package/dist/cjs/classes/flow-producer.js +2 -1
- package/dist/cjs/classes/flow-producer.js.map +1 -1
- package/dist/cjs/classes/job.d.ts +3 -3
- package/dist/cjs/classes/job.js +1 -1
- package/dist/cjs/classes/job.js.map +1 -1
- package/dist/cjs/classes/queue-base.js +1 -1
- package/dist/cjs/classes/queue-base.js.map +1 -1
- package/dist/cjs/classes/queue.d.ts +8 -6
- package/dist/cjs/classes/queue.js +10 -9
- package/dist/cjs/classes/queue.js.map +1 -1
- package/dist/cjs/classes/repeat.d.ts +0 -1
- package/dist/cjs/classes/repeat.js +4 -5
- package/dist/cjs/classes/repeat.js.map +1 -1
- package/dist/cjs/classes/scripts.d.ts +6 -6
- package/dist/cjs/classes/scripts.js +43 -22
- package/dist/cjs/classes/scripts.js.map +1 -1
- package/dist/cjs/classes/worker.d.ts +12 -3
- package/dist/cjs/classes/worker.js +50 -34
- package/dist/cjs/classes/worker.js.map +1 -1
- package/dist/cjs/commands/includes/getRateLimitTTL.lua +13 -0
- package/dist/cjs/commands/includes/moveJobFromWaitToActive.lua +15 -34
- package/dist/cjs/commands/includes/promoteDelayedJobs.lua +0 -6
- package/dist/cjs/commands/moveToActive-9.lua +11 -2
- package/dist/cjs/commands/moveToDelayed-8.lua +63 -0
- package/dist/cjs/commands/moveToFinished-12.lua +8 -1
- package/dist/{esm/commands/retryJob-6.lua → cjs/commands/retryJob-8.lua} +15 -8
- package/dist/cjs/interfaces/advanced-options.d.ts +4 -4
- package/dist/cjs/interfaces/base-job-options.d.ts +0 -6
- package/dist/cjs/interfaces/queue-options.d.ts +0 -10
- package/dist/cjs/interfaces/rate-limiter-options.d.ts +0 -18
- package/dist/cjs/interfaces/repeat-options.d.ts +1 -6
- package/dist/cjs/scripts/index.d.ts +2 -2
- package/dist/cjs/scripts/index.js +2 -2
- package/dist/cjs/scripts/moveToActive-9.js +35 -36
- package/dist/cjs/scripts/moveToActive-9.js.map +1 -1
- package/dist/cjs/scripts/{moveToDelayed-5.d.ts → moveToDelayed-8.d.ts} +0 -0
- package/dist/cjs/scripts/moveToDelayed-8.js +116 -0
- package/dist/cjs/scripts/moveToDelayed-8.js.map +1 -0
- package/dist/cjs/scripts/moveToFinished-12.js +33 -36
- package/dist/cjs/scripts/moveToFinished-12.js.map +1 -1
- package/dist/cjs/scripts/{retryJob-6.d.ts → retryJob-8.d.ts} +0 -0
- package/dist/cjs/scripts/retryJob-8.js +112 -0
- package/dist/cjs/scripts/retryJob-8.js.map +1 -0
- package/dist/cjs/types/backoff-strategy.d.ts +2 -0
- package/dist/cjs/types/backoff-strategy.js +3 -0
- package/dist/cjs/types/backoff-strategy.js.map +1 -0
- package/dist/cjs/types/index.d.ts +2 -1
- package/dist/cjs/types/index.js +2 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/utils.d.ts +1 -3
- package/dist/cjs/utils.js +1 -13
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/classes/backoffs.d.ts +3 -6
- package/dist/esm/classes/backoffs.js +8 -8
- package/dist/esm/classes/backoffs.js.map +1 -1
- package/dist/esm/classes/flow-producer.js +3 -2
- package/dist/esm/classes/flow-producer.js.map +1 -1
- package/dist/esm/classes/job.d.ts +3 -3
- package/dist/esm/classes/job.js +1 -1
- package/dist/esm/classes/job.js.map +1 -1
- package/dist/esm/classes/queue-base.js +1 -1
- package/dist/esm/classes/queue-base.js.map +1 -1
- package/dist/esm/classes/queue.d.ts +8 -6
- package/dist/esm/classes/queue.js +11 -10
- package/dist/esm/classes/queue.js.map +1 -1
- package/dist/esm/classes/repeat.d.ts +0 -1
- package/dist/esm/classes/repeat.js +4 -5
- package/dist/esm/classes/repeat.js.map +1 -1
- package/dist/esm/classes/scripts.d.ts +6 -6
- package/dist/esm/classes/scripts.js +41 -20
- package/dist/esm/classes/scripts.js.map +1 -1
- package/dist/esm/classes/worker.d.ts +12 -3
- package/dist/esm/classes/worker.js +50 -34
- package/dist/esm/classes/worker.js.map +1 -1
- package/dist/esm/commands/includes/getRateLimitTTL.lua +13 -0
- package/dist/esm/commands/includes/moveJobFromWaitToActive.lua +15 -34
- package/dist/esm/commands/includes/promoteDelayedJobs.lua +0 -6
- package/dist/esm/commands/moveToActive-9.lua +11 -2
- package/dist/esm/commands/moveToDelayed-8.lua +63 -0
- package/dist/esm/commands/moveToFinished-12.lua +8 -1
- package/dist/{cjs/commands/retryJob-6.lua → esm/commands/retryJob-8.lua} +15 -8
- package/dist/esm/interfaces/advanced-options.d.ts +4 -4
- package/dist/esm/interfaces/base-job-options.d.ts +0 -6
- package/dist/esm/interfaces/queue-options.d.ts +0 -10
- package/dist/esm/interfaces/rate-limiter-options.d.ts +0 -18
- package/dist/esm/interfaces/repeat-options.d.ts +1 -6
- package/dist/esm/scripts/index.d.ts +2 -2
- package/dist/esm/scripts/index.js +2 -2
- package/dist/esm/scripts/moveToActive-9.js +35 -36
- package/dist/esm/scripts/moveToActive-9.js.map +1 -1
- package/dist/esm/scripts/{moveToDelayed-5.d.ts → moveToDelayed-8.d.ts} +0 -0
- package/dist/esm/scripts/moveToDelayed-8.js +113 -0
- package/dist/esm/scripts/moveToDelayed-8.js.map +1 -0
- package/dist/esm/scripts/moveToFinished-12.js +33 -36
- package/dist/esm/scripts/moveToFinished-12.js.map +1 -1
- package/dist/esm/scripts/{retryJob-6.d.ts → retryJob-8.d.ts} +0 -0
- package/dist/esm/scripts/retryJob-8.js +109 -0
- package/dist/esm/scripts/retryJob-8.js.map +1 -0
- package/dist/esm/types/backoff-strategy.d.ts +2 -0
- package/dist/esm/types/backoff-strategy.js +2 -0
- package/dist/esm/types/backoff-strategy.js.map +1 -0
- package/dist/esm/types/index.d.ts +2 -1
- package/dist/esm/types/index.js +2 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils.d.ts +1 -3
- package/dist/esm/utils.js +0 -11
- package/dist/esm/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/commands/moveToDelayed-5.lua +0 -54
- package/dist/cjs/scripts/moveToDelayed-5.js +0 -52
- package/dist/cjs/scripts/moveToDelayed-5.js.map +0 -1
- package/dist/cjs/scripts/retryJob-6.js +0 -60
- package/dist/cjs/scripts/retryJob-6.js.map +0 -1
- package/dist/esm/commands/moveToDelayed-5.lua +0 -54
- package/dist/esm/scripts/moveToDelayed-5.js +0 -49
- package/dist/esm/scripts/moveToDelayed-5.js.map +0 -1
- package/dist/esm/scripts/retryJob-6.js +0 -57
- package/dist/esm/scripts/retryJob-6.js.map +0 -1
@@ -0,0 +1,113 @@
|
|
1
|
+
const content = `--[[
|
2
|
+
Moves job from active to delayed set.
|
3
|
+
Input:
|
4
|
+
KEYS[1] wait key
|
5
|
+
KEYS[2] active key
|
6
|
+
KEYS[3] priority key
|
7
|
+
KEYS[4] delayed key
|
8
|
+
KEYS[5] job key
|
9
|
+
KEYS[6] events stream
|
10
|
+
KEYS[7] paused key
|
11
|
+
KEYS[8] meta key
|
12
|
+
ARGV[1] key prefix
|
13
|
+
ARGV[2] timestamp
|
14
|
+
ARGV[3] delayedTimestamp
|
15
|
+
ARGV[4] the id of the job
|
16
|
+
ARGV[5] queue token
|
17
|
+
Output:
|
18
|
+
0 - OK
|
19
|
+
-1 - Missing job.
|
20
|
+
-3 - Job not in active set.
|
21
|
+
Events:
|
22
|
+
- delayed key.
|
23
|
+
]]
|
24
|
+
local rcall = redis.call
|
25
|
+
-- Includes
|
26
|
+
--[[
|
27
|
+
Updates the delay set, by moving delayed jobs that should
|
28
|
+
be processed now to "wait".
|
29
|
+
Events:
|
30
|
+
'waiting'
|
31
|
+
]]
|
32
|
+
local rcall = redis.call
|
33
|
+
-- Includes
|
34
|
+
--[[
|
35
|
+
Function to add job considering priority.
|
36
|
+
]]
|
37
|
+
local function addJobWithPriority(priorityKey, priority, targetKey, jobId)
|
38
|
+
rcall("ZADD", priorityKey, priority, jobId)
|
39
|
+
local count = rcall("ZCOUNT", priorityKey, 0, priority)
|
40
|
+
local len = rcall("LLEN", targetKey)
|
41
|
+
local id = rcall("LINDEX", targetKey, len - (count - 1))
|
42
|
+
if id then
|
43
|
+
rcall("LINSERT", targetKey, "BEFORE", id, jobId)
|
44
|
+
else
|
45
|
+
rcall("RPUSH", targetKey, jobId)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
--[[
|
49
|
+
Function to check for the meta.paused key to decide if we are paused or not
|
50
|
+
(since an empty list and !EXISTS are not really the same).
|
51
|
+
]]
|
52
|
+
local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
|
53
|
+
if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
|
54
|
+
return waitKey
|
55
|
+
else
|
56
|
+
return pausedKey
|
57
|
+
end
|
58
|
+
end
|
59
|
+
-- Try to get as much as 1000 jobs at once, and returns the nextTimestamp if
|
60
|
+
-- there are more delayed jobs to process.
|
61
|
+
local function promoteDelayedJobs(delayedKey, waitKey, priorityKey, pausedKey,
|
62
|
+
metaKey, eventStreamKey, prefix, timestamp)
|
63
|
+
local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000, "LIMIT", 0, 1000)
|
64
|
+
if (#jobs > 0) then
|
65
|
+
rcall("ZREM", delayedKey, unpack(jobs))
|
66
|
+
-- check if we need to use push in paused instead of waiting
|
67
|
+
local target = getTargetQueueList(metaKey, waitKey, pausedKey)
|
68
|
+
for _, jobId in ipairs(jobs) do
|
69
|
+
local priority =
|
70
|
+
tonumber(rcall("HGET", prefix .. jobId, "priority")) or 0
|
71
|
+
if priority == 0 then
|
72
|
+
-- LIFO or FIFO
|
73
|
+
rcall("LPUSH", target, jobId)
|
74
|
+
else
|
75
|
+
addJobWithPriority(priorityKey, priority, target, jobId)
|
76
|
+
end
|
77
|
+
-- Emit waiting event
|
78
|
+
rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId",
|
79
|
+
jobId, "prev", "delayed")
|
80
|
+
rcall("HSET", prefix .. jobId, "delay", 0)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
promoteDelayedJobs(KEYS[4], KEYS[1], KEYS[3], KEYS[7], KEYS[8], KEYS[6], ARGV[1], ARGV[2])
|
85
|
+
if rcall("EXISTS", KEYS[5]) == 1 then
|
86
|
+
if ARGV[5] ~= "0" then
|
87
|
+
local lockKey = KEYS[5] .. ':lock'
|
88
|
+
if rcall("GET", lockKey) == ARGV[5] then
|
89
|
+
rcall("DEL", lockKey)
|
90
|
+
else
|
91
|
+
return -2
|
92
|
+
end
|
93
|
+
end
|
94
|
+
local jobId = ARGV[4]
|
95
|
+
local score = tonumber(ARGV[3])
|
96
|
+
local delayedTimestamp = (score / 0x1000)
|
97
|
+
local numRemovedElements = rcall("LREM", KEYS[2], -1, jobId)
|
98
|
+
if(numRemovedElements < 1) then
|
99
|
+
return -3
|
100
|
+
end
|
101
|
+
rcall("ZADD", KEYS[4], score, jobId)
|
102
|
+
rcall("XADD", KEYS[6], "*", "event", "delayed", "jobId", jobId, "delay", delayedTimestamp);
|
103
|
+
return 0
|
104
|
+
else
|
105
|
+
return -1
|
106
|
+
end
|
107
|
+
`;
|
108
|
+
export const moveToDelayed = {
|
109
|
+
name: 'moveToDelayed',
|
110
|
+
content,
|
111
|
+
keys: 8,
|
112
|
+
};
|
113
|
+
//# sourceMappingURL=moveToDelayed-8.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"moveToDelayed-8.js","sourceRoot":"","sources":["../../../src/scripts/moveToDelayed-8.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Gf,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,eAAe;IACrB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -131,41 +131,25 @@ end
|
|
131
131
|
local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts)
|
132
132
|
-- Check if we need to perform rate limiting.
|
133
133
|
local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max'])
|
134
|
+
local expireTime
|
134
135
|
if(maxJobs) then
|
135
136
|
local rateLimiterKey = keys[6];
|
136
|
-
local
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
if groupKey ~= jobId then
|
141
|
-
rateLimiterKey = rateLimiterKey .. ":" .. groupKey
|
142
|
-
end
|
143
|
-
end
|
144
|
-
local jobCounter
|
145
|
-
if groupKey ~= nil then
|
146
|
-
if rateLimiterKey ~= keys[6] then
|
147
|
-
jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
148
|
-
end
|
149
|
-
else
|
150
|
-
jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
137
|
+
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
138
|
+
if jobCounter == 1 then
|
139
|
+
local limiterDuration = opts['limiter'] and opts['limiter']['duration']
|
140
|
+
rcall("PEXPIRE", rateLimiterKey, limiterDuration)
|
151
141
|
end
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
local expireTime = tonumber(rcall("PTTL", rateLimiterKey))
|
157
|
-
local delay = expireTime + ((exceedingJobs - 1) * limiterDuration) / maxJobs;
|
158
|
-
local timestamp = delay + tonumber(processedOn)
|
159
|
-
-- put job into delayed queue
|
160
|
-
rcall("ZADD", keys[7], timestamp * 0x1000 + bit.band(jobCounter, 0xfff), jobId);
|
161
|
-
rcall("XADD", keys[4], "*", "event", "delayed", "jobId", jobId, "delay", timestamp);
|
162
|
-
-- remove from active queue
|
142
|
+
-- check if we passed rate limit, we need to remove the job and return expireTime
|
143
|
+
if jobCounter > maxJobs then
|
144
|
+
expireTime = rcall("PTTL", rateLimiterKey)
|
145
|
+
-- remove from active queue and add back to the wait list
|
163
146
|
rcall("LREM", keys[2], 1, jobId)
|
147
|
+
rcall("RPUSH", keys[1], jobId)
|
164
148
|
-- Return when we can process more jobs
|
165
|
-
return expireTime
|
149
|
+
return {0, 0, expireTime}
|
166
150
|
else
|
167
|
-
if jobCounter ==
|
168
|
-
rcall("
|
151
|
+
if jobCounter == maxJobs then
|
152
|
+
expireTime = rcall("PTTL", rateLimiterKey)
|
169
153
|
end
|
170
154
|
end
|
171
155
|
end
|
@@ -179,7 +163,7 @@ local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts
|
|
179
163
|
rcall("XADD", keys[4], "*", "event", "active", "jobId", jobId, "prev", "waiting")
|
180
164
|
rcall("HSET", jobKey, "processedOn", processedOn)
|
181
165
|
rcall("HINCRBY", jobKey, "attemptsMade", 1)
|
182
|
-
return {rcall("HGETALL", jobKey), jobId} -- get job data
|
166
|
+
return {rcall("HGETALL", jobKey), jobId, expireTime} -- get job data
|
183
167
|
end
|
184
168
|
--[[
|
185
169
|
Function to recursively move from waitingChildren to failed.
|
@@ -263,11 +247,6 @@ local function promoteDelayedJobs(delayedKey, waitKey, priorityKey, pausedKey,
|
|
263
247
|
rcall("HSET", prefix .. jobId, "delay", 0)
|
264
248
|
end
|
265
249
|
end
|
266
|
-
local nextTimestamp = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")[2]
|
267
|
-
if (nextTimestamp ~= nil) then
|
268
|
-
nextTimestamp = nextTimestamp / 0x1000
|
269
|
-
end
|
270
|
-
return nextTimestamp
|
271
250
|
end
|
272
251
|
--[[
|
273
252
|
Functions to remove jobs by max age.
|
@@ -418,6 +397,19 @@ local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDepende
|
|
418
397
|
rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
|
419
398
|
end
|
420
399
|
end
|
400
|
+
local function getRateLimitTTL(opts, limiterKey)
|
401
|
+
local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max'])
|
402
|
+
if maxJobs then
|
403
|
+
local jobCounter = tonumber(rcall("GET", limiterKey))
|
404
|
+
if jobCounter ~= nil and jobCounter >= maxJobs then
|
405
|
+
local pttl = rcall("PTTL", KEYS[6])
|
406
|
+
if pttl > 0 then
|
407
|
+
return pttl
|
408
|
+
end
|
409
|
+
end
|
410
|
+
end
|
411
|
+
return 0
|
412
|
+
end
|
421
413
|
local jobIdKey = KEYS[10]
|
422
414
|
if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
|
423
415
|
local opts = cmsgpack.unpack(ARGV[9])
|
@@ -504,6 +496,11 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
|
|
504
496
|
if (ARGV[7] == "1") then
|
505
497
|
-- Check if there are delayed jobs that can be promoted
|
506
498
|
promoteDelayedJobs(KEYS[7], KEYS[1], KEYS[3], KEYS[8], KEYS[11], KEYS[4], ARGV[8], timestamp)
|
499
|
+
-- Check if we are rate limited first.
|
500
|
+
local pttl = getRateLimitTTL(opts, KEYS[6])
|
501
|
+
if pttl > 0 then
|
502
|
+
return { 0, 0, pttl }
|
503
|
+
end
|
507
504
|
jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2])
|
508
505
|
if jobId == "0" then
|
509
506
|
rcall("LREM", KEYS[2], 1, 0)
|
@@ -515,7 +512,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
|
|
515
512
|
if (nextTimestamp ~= nil) then
|
516
513
|
-- The result is guaranteed to be positive, since the
|
517
514
|
-- ZRANGEBYSCORE command would have return a job otherwise.
|
518
|
-
return nextTimestamp - timestamp
|
515
|
+
return {0, 0, 0, nextTimestamp - timestamp}
|
519
516
|
end
|
520
517
|
end
|
521
518
|
local waitLen = rcall("LLEN", KEYS[1])
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"moveToFinished-12.js","sourceRoot":"","sources":["../../../src/scripts/moveToFinished-12.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"moveToFinished-12.js","sourceRoot":"","sources":["../../../src/scripts/moveToFinished-12.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAghBf,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,EAAE;CACT,CAAC"}
|
File without changes
|
@@ -0,0 +1,109 @@
|
|
1
|
+
const content = `--[[
|
2
|
+
Retries a failed job by moving it back to the wait queue.
|
3
|
+
Input:
|
4
|
+
KEYS[1] 'active',
|
5
|
+
KEYS[2] 'wait'
|
6
|
+
KEYS[3] 'paused'
|
7
|
+
KEYS[4] job key
|
8
|
+
KEYS[5] 'meta'
|
9
|
+
KEYS[6] events stream
|
10
|
+
KEYS[7] delayed key
|
11
|
+
KEYS[8] priority key
|
12
|
+
ARGV[1] key prefix
|
13
|
+
ARGV[2] timestamp
|
14
|
+
ARGV[3] pushCmd
|
15
|
+
ARGV[4] jobId
|
16
|
+
ARGV[5] token
|
17
|
+
Events:
|
18
|
+
'waiting'
|
19
|
+
Output:
|
20
|
+
0 - OK
|
21
|
+
-1 - Missing key
|
22
|
+
-2 - Missing lock
|
23
|
+
]]
|
24
|
+
local rcall = redis.call
|
25
|
+
-- Includes
|
26
|
+
--[[
|
27
|
+
Function to check for the meta.paused key to decide if we are paused or not
|
28
|
+
(since an empty list and !EXISTS are not really the same).
|
29
|
+
]]
|
30
|
+
local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
|
31
|
+
if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
|
32
|
+
return waitKey
|
33
|
+
else
|
34
|
+
return pausedKey
|
35
|
+
end
|
36
|
+
end
|
37
|
+
--[[
|
38
|
+
Updates the delay set, by moving delayed jobs that should
|
39
|
+
be processed now to "wait".
|
40
|
+
Events:
|
41
|
+
'waiting'
|
42
|
+
]]
|
43
|
+
local rcall = redis.call
|
44
|
+
-- Includes
|
45
|
+
--[[
|
46
|
+
Function to add job considering priority.
|
47
|
+
]]
|
48
|
+
local function addJobWithPriority(priorityKey, priority, targetKey, jobId)
|
49
|
+
rcall("ZADD", priorityKey, priority, jobId)
|
50
|
+
local count = rcall("ZCOUNT", priorityKey, 0, priority)
|
51
|
+
local len = rcall("LLEN", targetKey)
|
52
|
+
local id = rcall("LINDEX", targetKey, len - (count - 1))
|
53
|
+
if id then
|
54
|
+
rcall("LINSERT", targetKey, "BEFORE", id, jobId)
|
55
|
+
else
|
56
|
+
rcall("RPUSH", targetKey, jobId)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
-- Try to get as much as 1000 jobs at once, and returns the nextTimestamp if
|
60
|
+
-- there are more delayed jobs to process.
|
61
|
+
local function promoteDelayedJobs(delayedKey, waitKey, priorityKey, pausedKey,
|
62
|
+
metaKey, eventStreamKey, prefix, timestamp)
|
63
|
+
local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000, "LIMIT", 0, 1000)
|
64
|
+
if (#jobs > 0) then
|
65
|
+
rcall("ZREM", delayedKey, unpack(jobs))
|
66
|
+
-- check if we need to use push in paused instead of waiting
|
67
|
+
local target = getTargetQueueList(metaKey, waitKey, pausedKey)
|
68
|
+
for _, jobId in ipairs(jobs) do
|
69
|
+
local priority =
|
70
|
+
tonumber(rcall("HGET", prefix .. jobId, "priority")) or 0
|
71
|
+
if priority == 0 then
|
72
|
+
-- LIFO or FIFO
|
73
|
+
rcall("LPUSH", target, jobId)
|
74
|
+
else
|
75
|
+
addJobWithPriority(priorityKey, priority, target, jobId)
|
76
|
+
end
|
77
|
+
-- Emit waiting event
|
78
|
+
rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId",
|
79
|
+
jobId, "prev", "delayed")
|
80
|
+
rcall("HSET", prefix .. jobId, "delay", 0)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
promoteDelayedJobs(KEYS[7], KEYS[2], KEYS[8], KEYS[3], KEYS[5], KEYS[6], ARGV[1], ARGV[2])
|
85
|
+
if rcall("EXISTS", KEYS[4]) == 1 then
|
86
|
+
if ARGV[5] ~= "0" then
|
87
|
+
local lockKey = KEYS[4] .. ':lock'
|
88
|
+
if rcall("GET", lockKey) == ARGV[5] then
|
89
|
+
rcall("DEL", lockKey)
|
90
|
+
else
|
91
|
+
return -2
|
92
|
+
end
|
93
|
+
end
|
94
|
+
local target = getTargetQueueList(KEYS[5], KEYS[2], KEYS[3])
|
95
|
+
rcall("LREM", KEYS[1], 0, ARGV[4])
|
96
|
+
rcall(ARGV[3], target, ARGV[4])
|
97
|
+
-- Emit waiting event
|
98
|
+
rcall("XADD", KEYS[6], "*", "event", "waiting", "jobId", ARGV[4], "prev", "failed");
|
99
|
+
return 0
|
100
|
+
else
|
101
|
+
return -1
|
102
|
+
end
|
103
|
+
`;
|
104
|
+
export const retryJob = {
|
105
|
+
name: 'retryJob',
|
106
|
+
content,
|
107
|
+
keys: 8,
|
108
|
+
};
|
109
|
+
//# sourceMappingURL=retryJob-8.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"retryJob-8.js","sourceRoot":"","sources":["../../../src/scripts/retryJob-8.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsGf,CAAC;AACF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,UAAU;IAChB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"backoff-strategy.js","sourceRoot":"","sources":["../../../src/types/backoff-strategy.ts"],"names":[],"mappings":""}
|
package/dist/esm/types/index.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
export * from './
|
1
|
+
export * from './backoff-strategy';
|
2
2
|
export * from './finished-status';
|
3
3
|
export * from './job-json-sandbox';
|
4
4
|
export * from './job-options';
|
5
5
|
export * from './job-type';
|
6
|
+
export * from './repeat-strategy';
|
6
7
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
|
package/dist/esm/utils.d.ts
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
/// <reference types="node" />
|
2
2
|
/// <reference types="node" />
|
3
3
|
import { Cluster, Redis } from 'ioredis';
|
4
|
-
import { ChildMessage, ParentMessage,
|
5
|
-
import { JobsOptions } from './types';
|
4
|
+
import { ChildMessage, ParentMessage, RedisClient } from './interfaces';
|
6
5
|
import { ChildProcess } from 'child_process';
|
7
6
|
export declare const errorObject: {
|
8
7
|
[index: string]: any;
|
@@ -24,7 +23,6 @@ export declare function getParentKey(opts: {
|
|
24
23
|
id: string;
|
25
24
|
queue: string;
|
26
25
|
}): string;
|
27
|
-
export declare function jobIdForGroup(jobOpts: JobsOptions, data: any, queueOpts: QueueOptions): string;
|
28
26
|
export declare const clientCommandMessageReg: RegExp;
|
29
27
|
export declare const DELAY_TIME_5 = 5000;
|
30
28
|
export declare const DELAY_TIME_1 = 100;
|
package/dist/esm/utils.js
CHANGED
@@ -2,8 +2,6 @@ import { Cluster } from 'ioredis';
|
|
2
2
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
3
3
|
// @ts-ignore
|
4
4
|
import { CONNECTION_CLOSED_ERROR_MSG } from 'ioredis/built/utils';
|
5
|
-
import { v4 } from 'uuid';
|
6
|
-
import { get } from 'lodash';
|
7
5
|
import * as semver from 'semver';
|
8
6
|
export const errorObject = { value: null };
|
9
7
|
export function tryCatch(fn, ctx, args) {
|
@@ -84,15 +82,6 @@ export function getParentKey(opts) {
|
|
84
82
|
return `${opts.queue}:${opts.id}`;
|
85
83
|
}
|
86
84
|
}
|
87
|
-
export function jobIdForGroup(jobOpts, data, queueOpts) {
|
88
|
-
const jobId = jobOpts === null || jobOpts === void 0 ? void 0 : jobOpts.jobId;
|
89
|
-
const groupKeyPath = get(queueOpts, 'limiter.groupKey');
|
90
|
-
const groupKey = get(data, groupKeyPath);
|
91
|
-
if (groupKeyPath && !(typeof groupKey === 'undefined')) {
|
92
|
-
return `${jobId || v4()}:${groupKey}`;
|
93
|
-
}
|
94
|
-
return jobId;
|
95
|
-
}
|
96
85
|
export const clientCommandMessageReg = /ERR unknown command ['`]\s*client\s*['`]/;
|
97
86
|
export const DELAY_TIME_5 = 5000;
|
98
87
|
export const DELAY_TIME_1 = 100;
|
package/dist/esm/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,SAAS,CAAC;AACzC,6DAA6D;AAC7D,aAAa;AACb,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,54 +0,0 @@
|
|
1
|
-
--[[
|
2
|
-
Moves job from active to delayed set.
|
3
|
-
|
4
|
-
Input:
|
5
|
-
KEYS[1] active key
|
6
|
-
KEYS[2] delayed key
|
7
|
-
KEYS[3] job key
|
8
|
-
KEYS[4] events stream
|
9
|
-
KEYS[5] delayed stream
|
10
|
-
|
11
|
-
ARGV[1] delayedTimestamp
|
12
|
-
ARGV[2] the id of the job
|
13
|
-
ARGV[3] queue token
|
14
|
-
|
15
|
-
Output:
|
16
|
-
0 - OK
|
17
|
-
-1 - Missing job.
|
18
|
-
-3 - Job not in active set.
|
19
|
-
|
20
|
-
Events:
|
21
|
-
- delayed key.
|
22
|
-
]]
|
23
|
-
local rcall = redis.call
|
24
|
-
|
25
|
-
if rcall("EXISTS", KEYS[3]) == 1 then
|
26
|
-
|
27
|
-
if ARGV[3] ~= "0" then
|
28
|
-
local lockKey = KEYS[3] .. ':lock'
|
29
|
-
if rcall("GET", lockKey) == ARGV[3] then
|
30
|
-
rcall("DEL", lockKey)
|
31
|
-
else
|
32
|
-
return -2
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
local jobId = ARGV[2]
|
37
|
-
local score = tonumber(ARGV[1])
|
38
|
-
local delayedTimestamp = (score / 0x1000)
|
39
|
-
|
40
|
-
local numRemovedElements = rcall("LREM", KEYS[1], -1, jobId)
|
41
|
-
|
42
|
-
if(numRemovedElements < 1) then
|
43
|
-
return -3
|
44
|
-
end
|
45
|
-
|
46
|
-
rcall("ZADD", KEYS[2], score, jobId)
|
47
|
-
|
48
|
-
rcall("XADD", KEYS[4], "*", "event", "delayed", "jobId", jobId, "delay", delayedTimestamp);
|
49
|
-
rcall("XADD", KEYS[5], "*", "nextTimestamp", delayedTimestamp);
|
50
|
-
|
51
|
-
return 0
|
52
|
-
else
|
53
|
-
return -1
|
54
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.moveToDelayed = void 0;
|
4
|
-
const content = `--[[
|
5
|
-
Moves job from active to delayed set.
|
6
|
-
Input:
|
7
|
-
KEYS[1] active key
|
8
|
-
KEYS[2] delayed key
|
9
|
-
KEYS[3] job key
|
10
|
-
KEYS[4] events stream
|
11
|
-
KEYS[5] delayed stream
|
12
|
-
ARGV[1] delayedTimestamp
|
13
|
-
ARGV[2] the id of the job
|
14
|
-
ARGV[3] queue token
|
15
|
-
Output:
|
16
|
-
0 - OK
|
17
|
-
-1 - Missing job.
|
18
|
-
-3 - Job not in active set.
|
19
|
-
Events:
|
20
|
-
- delayed key.
|
21
|
-
]]
|
22
|
-
local rcall = redis.call
|
23
|
-
if rcall("EXISTS", KEYS[3]) == 1 then
|
24
|
-
if ARGV[3] ~= "0" then
|
25
|
-
local lockKey = KEYS[3] .. ':lock'
|
26
|
-
if rcall("GET", lockKey) == ARGV[3] then
|
27
|
-
rcall("DEL", lockKey)
|
28
|
-
else
|
29
|
-
return -2
|
30
|
-
end
|
31
|
-
end
|
32
|
-
local jobId = ARGV[2]
|
33
|
-
local score = tonumber(ARGV[1])
|
34
|
-
local delayedTimestamp = (score / 0x1000)
|
35
|
-
local numRemovedElements = rcall("LREM", KEYS[1], -1, jobId)
|
36
|
-
if(numRemovedElements < 1) then
|
37
|
-
return -3
|
38
|
-
end
|
39
|
-
rcall("ZADD", KEYS[2], score, jobId)
|
40
|
-
rcall("XADD", KEYS[4], "*", "event", "delayed", "jobId", jobId, "delay", delayedTimestamp);
|
41
|
-
rcall("XADD", KEYS[5], "*", "nextTimestamp", delayedTimestamp);
|
42
|
-
return 0
|
43
|
-
else
|
44
|
-
return -1
|
45
|
-
end
|
46
|
-
`;
|
47
|
-
exports.moveToDelayed = {
|
48
|
-
name: 'moveToDelayed',
|
49
|
-
content,
|
50
|
-
keys: 5,
|
51
|
-
};
|
52
|
-
//# sourceMappingURL=moveToDelayed-5.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"moveToDelayed-5.js","sourceRoot":"","sources":["../../../src/scripts/moveToDelayed-5.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Cf,CAAC;AACW,QAAA,aAAa,GAAG;IAC3B,IAAI,EAAE,eAAe;IACrB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -1,60 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.retryJob = void 0;
|
4
|
-
const content = `--[[
|
5
|
-
Retries a failed job by moving it back to the wait queue.
|
6
|
-
Input:
|
7
|
-
KEYS[1] 'active',
|
8
|
-
KEYS[2] 'wait'
|
9
|
-
KEYS[3] 'paused'
|
10
|
-
KEYS[4] job key
|
11
|
-
KEYS[5] 'meta'
|
12
|
-
KEYS[6] events stream
|
13
|
-
ARGV[1] pushCmd
|
14
|
-
ARGV[2] jobId
|
15
|
-
ARGV[3] token
|
16
|
-
Events:
|
17
|
-
'waiting'
|
18
|
-
Output:
|
19
|
-
0 - OK
|
20
|
-
-1 - Missing key
|
21
|
-
-2 - Missing lock
|
22
|
-
]]
|
23
|
-
local rcall = redis.call
|
24
|
-
-- Includes
|
25
|
-
--[[
|
26
|
-
Function to check for the meta.paused key to decide if we are paused or not
|
27
|
-
(since an empty list and !EXISTS are not really the same).
|
28
|
-
]]
|
29
|
-
local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
|
30
|
-
if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
|
31
|
-
return waitKey
|
32
|
-
else
|
33
|
-
return pausedKey
|
34
|
-
end
|
35
|
-
end
|
36
|
-
if rcall("EXISTS", KEYS[4]) == 1 then
|
37
|
-
if ARGV[3] ~= "0" then
|
38
|
-
local lockKey = KEYS[4] .. ':lock'
|
39
|
-
if rcall("GET", lockKey) == ARGV[3] then
|
40
|
-
rcall("DEL", lockKey)
|
41
|
-
else
|
42
|
-
return -2
|
43
|
-
end
|
44
|
-
end
|
45
|
-
local target = getTargetQueueList(KEYS[5], KEYS[2], KEYS[3])
|
46
|
-
rcall("LREM", KEYS[1], 0, ARGV[2])
|
47
|
-
rcall(ARGV[1], target, ARGV[2])
|
48
|
-
-- Emit waiting event
|
49
|
-
rcall("XADD", KEYS[6], "*", "event", "waiting", "jobId", ARGV[2], "prev", "failed");
|
50
|
-
return 0
|
51
|
-
else
|
52
|
-
return -1
|
53
|
-
end
|
54
|
-
`;
|
55
|
-
exports.retryJob = {
|
56
|
-
name: 'retryJob',
|
57
|
-
content,
|
58
|
-
keys: 6,
|
59
|
-
};
|
60
|
-
//# sourceMappingURL=retryJob-6.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"retryJob-6.js","sourceRoot":"","sources":["../../../src/scripts/retryJob-6.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDf,CAAC;AACW,QAAA,QAAQ,GAAG;IACtB,IAAI,EAAE,UAAU;IAChB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|