bullmq 4.17.0 → 5.0.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/cjs/classes/flow-producer.js +3 -10
- package/dist/cjs/classes/flow-producer.js.map +1 -1
- package/dist/cjs/classes/job.js +21 -11
- package/dist/cjs/classes/job.js.map +1 -1
- package/dist/cjs/classes/queue-base.js +2 -9
- package/dist/cjs/classes/queue-base.js.map +1 -1
- package/dist/cjs/classes/queue-events.js +3 -1
- package/dist/cjs/classes/queue-events.js.map +1 -1
- package/dist/cjs/classes/queue-keys.js +1 -0
- package/dist/cjs/classes/queue-keys.js.map +1 -1
- package/dist/cjs/classes/redis-connection.js +9 -7
- package/dist/cjs/classes/redis-connection.js.map +1 -1
- package/dist/cjs/classes/scripts.js +34 -34
- package/dist/cjs/classes/scripts.js.map +1 -1
- package/dist/cjs/classes/worker.js +27 -32
- package/dist/cjs/classes/worker.js.map +1 -1
- package/dist/cjs/commands/{addDelayedJob-7.lua → addDelayedJob-6.lua} +18 -22
- package/dist/cjs/commands/addParentJob-4.lua +0 -2
- package/dist/{esm/commands/addPrioritizedJob-8.lua → cjs/commands/addPrioritizedJob-7.lua} +18 -24
- package/dist/cjs/commands/{addStandardJob-6.lua → addStandardJob-7.lua} +6 -2
- package/dist/cjs/commands/changePriority-6.lua +57 -0
- package/dist/cjs/commands/getCounts-1.lua +1 -0
- package/dist/cjs/commands/getRanges-1.lua +1 -0
- package/dist/cjs/commands/includes/addDelayMarkerIfNeeded.lua +5 -19
- package/dist/cjs/commands/includes/addJobWithPriority.lua +3 -7
- package/dist/cjs/commands/includes/checkStalledJobs.lua +1 -1
- package/dist/cjs/commands/includes/isQueuePaused.lua +7 -0
- package/dist/cjs/commands/includes/moveParentToWaitIfNeeded.lua +39 -30
- package/dist/cjs/commands/includes/prepareJobForProcessing.lua +1 -1
- package/dist/cjs/commands/includes/promoteDelayedJobs.lua +7 -4
- package/dist/{esm/commands/moveToActive-10.lua → cjs/commands/moveToActive-11.lua} +18 -29
- package/dist/cjs/commands/moveToDelayed-7.lua +77 -0
- package/dist/cjs/commands/{moveToFinished-13.lua → moveToFinished-14.lua} +29 -22
- package/dist/cjs/commands/moveToWaitingChildren-4.lua +7 -4
- package/dist/cjs/commands/pause-7.lua +41 -0
- package/dist/cjs/commands/promote-8.lua +60 -0
- package/dist/cjs/commands/{retryJob-9.lua → retryJob-10.lua} +16 -11
- package/dist/cjs/scripts/{addDelayedJob-7.js → addDelayedJob-6.js} +77 -88
- package/dist/cjs/scripts/{moveToActive-10.js.map → addDelayedJob-6.js.map} +1 -1
- package/dist/cjs/scripts/addParentJob-4.js +51 -61
- package/dist/cjs/scripts/addParentJob-4.js.map +1 -1
- package/dist/cjs/scripts/{addPrioritizedJob-8.js → addPrioritizedJob-7.js} +80 -93
- package/dist/cjs/scripts/addPrioritizedJob-7.js.map +1 -0
- package/dist/cjs/scripts/{addStandardJob-6.js → addStandardJob-7.js} +58 -63
- package/dist/cjs/scripts/addStandardJob-7.js.map +1 -0
- package/dist/cjs/scripts/changePriority-6.js +85 -0
- package/dist/cjs/scripts/changePriority-6.js.map +1 -0
- package/dist/cjs/scripts/getCounts-1.js +1 -0
- package/dist/cjs/scripts/getCounts-1.js.map +1 -1
- package/dist/cjs/scripts/getRanges-1.js +1 -0
- package/dist/cjs/scripts/getRanges-1.js.map +1 -1
- package/dist/cjs/scripts/index.js +10 -10
- package/dist/cjs/scripts/index.js.map +1 -1
- package/dist/cjs/scripts/moveStalledJobsToWait-8.js +1 -0
- package/dist/cjs/scripts/moveStalledJobsToWait-8.js.map +1 -1
- package/dist/cjs/scripts/{moveToActive-10.js → moveToActive-11.js} +30 -48
- package/dist/cjs/scripts/moveToActive-11.js.map +1 -0
- package/dist/cjs/scripts/moveToDelayed-7.js +103 -0
- package/dist/cjs/scripts/moveToDelayed-7.js.map +1 -0
- package/dist/cjs/scripts/{moveToFinished-13.js → moveToFinished-14.js} +89 -88
- package/dist/cjs/scripts/{moveToFinished-13.js.map → moveToFinished-14.js.map} +1 -1
- package/dist/cjs/scripts/moveToWaitingChildren-4.js +6 -3
- package/dist/cjs/scripts/moveToWaitingChildren-4.js.map +1 -1
- package/dist/cjs/scripts/pause-7.js +67 -0
- package/dist/cjs/scripts/pause-7.js.map +1 -0
- package/dist/cjs/scripts/promote-8.js +79 -0
- package/dist/cjs/scripts/promote-8.js.map +1 -0
- package/dist/cjs/scripts/{retryJob-9.js → retryJob-10.js} +26 -32
- package/dist/cjs/scripts/retryJob-10.js.map +1 -0
- package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/esm/classes/flow-producer.js +3 -10
- package/dist/esm/classes/flow-producer.js.map +1 -1
- package/dist/esm/classes/job.d.ts +5 -0
- package/dist/esm/classes/job.js +21 -11
- package/dist/esm/classes/job.js.map +1 -1
- package/dist/esm/classes/queue-base.js +2 -9
- package/dist/esm/classes/queue-base.js.map +1 -1
- package/dist/esm/classes/queue-events.js +3 -1
- package/dist/esm/classes/queue-events.js.map +1 -1
- package/dist/esm/classes/queue-keys.js +1 -0
- package/dist/esm/classes/queue-keys.js.map +1 -1
- package/dist/esm/classes/redis-connection.js +9 -7
- package/dist/esm/classes/redis-connection.js.map +1 -1
- package/dist/esm/classes/scripts.d.ts +4 -4
- package/dist/esm/classes/scripts.js +34 -34
- package/dist/esm/classes/scripts.js.map +1 -1
- package/dist/esm/classes/worker.d.ts +1 -1
- package/dist/esm/classes/worker.js +27 -32
- package/dist/esm/classes/worker.js.map +1 -1
- package/dist/esm/commands/{addDelayedJob-7.lua → addDelayedJob-6.lua} +18 -22
- package/dist/esm/commands/addParentJob-4.lua +0 -2
- package/dist/{cjs/commands/addPrioritizedJob-8.lua → esm/commands/addPrioritizedJob-7.lua} +18 -24
- package/dist/esm/commands/{addStandardJob-6.lua → addStandardJob-7.lua} +6 -2
- package/dist/esm/commands/changePriority-6.lua +57 -0
- package/dist/esm/commands/getCounts-1.lua +1 -0
- package/dist/esm/commands/getRanges-1.lua +1 -0
- package/dist/esm/commands/includes/addDelayMarkerIfNeeded.lua +5 -19
- package/dist/esm/commands/includes/addJobWithPriority.lua +3 -7
- package/dist/esm/commands/includes/checkStalledJobs.lua +1 -1
- package/dist/esm/commands/includes/isQueuePaused.lua +7 -0
- package/dist/esm/commands/includes/moveParentToWaitIfNeeded.lua +39 -30
- package/dist/esm/commands/includes/prepareJobForProcessing.lua +1 -1
- package/dist/esm/commands/includes/promoteDelayedJobs.lua +7 -4
- package/dist/{cjs/commands/moveToActive-10.lua → esm/commands/moveToActive-11.lua} +18 -29
- package/dist/esm/commands/moveToDelayed-7.lua +77 -0
- package/dist/esm/commands/{moveToFinished-13.lua → moveToFinished-14.lua} +29 -22
- package/dist/esm/commands/moveToWaitingChildren-4.lua +7 -4
- package/dist/esm/commands/pause-7.lua +41 -0
- package/dist/esm/commands/promote-8.lua +60 -0
- package/dist/esm/commands/{retryJob-9.lua → retryJob-10.lua} +16 -11
- package/dist/esm/interfaces/job-json.d.ts +4 -1
- package/dist/esm/interfaces/minimal-job.d.ts +3 -0
- package/dist/esm/interfaces/queue-options.d.ts +1 -1
- package/dist/esm/scripts/{addDelayedJob-7.js → addDelayedJob-6.js} +77 -88
- package/dist/esm/scripts/{moveToActive-10.js.map → addDelayedJob-6.js.map} +1 -1
- package/dist/esm/scripts/addParentJob-4.js +51 -61
- package/dist/esm/scripts/addParentJob-4.js.map +1 -1
- package/dist/esm/scripts/{addPrioritizedJob-8.js → addPrioritizedJob-7.js} +80 -93
- package/dist/esm/scripts/addPrioritizedJob-7.js.map +1 -0
- package/dist/esm/scripts/{addStandardJob-6.js → addStandardJob-7.js} +58 -63
- package/dist/esm/scripts/addStandardJob-7.js.map +1 -0
- package/dist/esm/scripts/changePriority-6.js +82 -0
- package/dist/esm/scripts/changePriority-6.js.map +1 -0
- package/dist/esm/scripts/getCounts-1.js +1 -0
- package/dist/esm/scripts/getCounts-1.js.map +1 -1
- package/dist/esm/scripts/getRanges-1.js +1 -0
- package/dist/esm/scripts/getRanges-1.js.map +1 -1
- package/dist/esm/scripts/index.d.ts +10 -10
- package/dist/esm/scripts/index.js +10 -10
- package/dist/esm/scripts/index.js.map +1 -1
- package/dist/esm/scripts/moveStalledJobsToWait-8.js +1 -0
- package/dist/esm/scripts/moveStalledJobsToWait-8.js.map +1 -1
- package/dist/esm/scripts/{moveToActive-10.js → moveToActive-11.js} +30 -48
- package/dist/esm/scripts/moveToActive-11.js.map +1 -0
- package/dist/esm/scripts/moveToDelayed-7.js +100 -0
- package/dist/esm/scripts/moveToDelayed-7.js.map +1 -0
- package/dist/esm/scripts/{moveToFinished-13.js → moveToFinished-14.js} +89 -88
- package/dist/esm/scripts/{moveToFinished-13.js.map → moveToFinished-14.js.map} +1 -1
- package/dist/esm/scripts/moveToWaitingChildren-4.js +6 -3
- package/dist/esm/scripts/moveToWaitingChildren-4.js.map +1 -1
- package/dist/esm/scripts/pause-7.js +64 -0
- package/dist/esm/scripts/pause-7.js.map +1 -0
- package/dist/esm/scripts/promote-8.js +76 -0
- package/dist/esm/scripts/promote-8.js.map +1 -0
- package/dist/esm/scripts/{retryJob-9.js → retryJob-10.js} +26 -32
- package/dist/esm/scripts/retryJob-10.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/cjs/commands/changePriority-5.lua +0 -52
- package/dist/cjs/commands/includes/addPriorityMarkerIfNeeded.lua +0 -12
- package/dist/cjs/commands/moveToDelayed-8.lua +0 -72
- package/dist/cjs/commands/pause-5.lua +0 -36
- package/dist/cjs/commands/promote-7.lua +0 -57
- package/dist/cjs/scripts/addDelayedJob-7.js.map +0 -1
- package/dist/cjs/scripts/addPrioritizedJob-8.js.map +0 -1
- package/dist/cjs/scripts/addStandardJob-6.js.map +0 -1
- package/dist/cjs/scripts/changePriority-5.js +0 -87
- package/dist/cjs/scripts/changePriority-5.js.map +0 -1
- package/dist/cjs/scripts/moveToDelayed-8.js +0 -168
- package/dist/cjs/scripts/moveToDelayed-8.js.map +0 -1
- package/dist/cjs/scripts/pause-5.js +0 -48
- package/dist/cjs/scripts/pause-5.js.map +0 -1
- package/dist/cjs/scripts/promote-7.js +0 -87
- package/dist/cjs/scripts/promote-7.js.map +0 -1
- package/dist/cjs/scripts/retryJob-9.js.map +0 -1
- package/dist/esm/commands/changePriority-5.lua +0 -52
- package/dist/esm/commands/includes/addPriorityMarkerIfNeeded.lua +0 -12
- package/dist/esm/commands/moveToDelayed-8.lua +0 -72
- package/dist/esm/commands/pause-5.lua +0 -36
- package/dist/esm/commands/promote-7.lua +0 -57
- package/dist/esm/scripts/addDelayedJob-7.js.map +0 -1
- package/dist/esm/scripts/addPrioritizedJob-8.js.map +0 -1
- package/dist/esm/scripts/addStandardJob-6.js.map +0 -1
- package/dist/esm/scripts/changePriority-5.js +0 -84
- package/dist/esm/scripts/changePriority-5.js.map +0 -1
- package/dist/esm/scripts/moveToDelayed-8.js +0 -165
- package/dist/esm/scripts/moveToDelayed-8.js.map +0 -1
- package/dist/esm/scripts/pause-5.js +0 -45
- package/dist/esm/scripts/pause-5.js.map +0 -1
- package/dist/esm/scripts/promote-7.js +0 -84
- package/dist/esm/scripts/promote-7.js.map +0 -1
- package/dist/esm/scripts/retryJob-9.js.map +0 -1
- /package/dist/esm/scripts/{addDelayedJob-7.d.ts → addDelayedJob-6.d.ts} +0 -0
- /package/dist/esm/scripts/{addPrioritizedJob-8.d.ts → addPrioritizedJob-7.d.ts} +0 -0
- /package/dist/esm/scripts/{addStandardJob-6.d.ts → addStandardJob-7.d.ts} +0 -0
- /package/dist/esm/scripts/{changePriority-5.d.ts → changePriority-6.d.ts} +0 -0
- /package/dist/esm/scripts/{moveToActive-10.d.ts → moveToActive-11.d.ts} +0 -0
- /package/dist/esm/scripts/{moveToDelayed-8.d.ts → moveToDelayed-7.d.ts} +0 -0
- /package/dist/esm/scripts/{moveToFinished-13.d.ts → moveToFinished-14.d.ts} +0 -0
- /package/dist/esm/scripts/{pause-5.d.ts → pause-7.d.ts} +0 -0
- /package/dist/esm/scripts/{promote-7.d.ts → promote-8.d.ts} +0 -0
- /package/dist/esm/scripts/{retryJob-9.d.ts → retryJob-10.d.ts} +0 -0
@@ -21,20 +21,19 @@ const content = `--[[
|
|
21
21
|
KEYS[11] completed/failed key
|
22
22
|
KEYS[12] jobId key
|
23
23
|
KEYS[13] metrics key
|
24
|
+
KEYS[14] marker key
|
24
25
|
ARGV[1] jobId
|
25
26
|
ARGV[2] timestamp
|
26
27
|
ARGV[3] msg property returnvalue / failedReason
|
27
28
|
ARGV[4] return value / failed reason
|
28
29
|
ARGV[5] target (completed/failed)
|
29
|
-
ARGV[6]
|
30
|
-
ARGV[7]
|
31
|
-
ARGV[8]
|
32
|
-
ARGV[9] opts
|
30
|
+
ARGV[6] fetch next?
|
31
|
+
ARGV[7] keys prefix
|
32
|
+
ARGV[8] opts
|
33
33
|
opts - token - lock token
|
34
34
|
opts - keepJobs
|
35
35
|
opts - lockDuration - lock duration in milliseconds
|
36
36
|
opts - attempts max attempts
|
37
|
-
opts - attemptsMade
|
38
37
|
opts - maxMetricsSize
|
39
38
|
opts - fpof - fail parent on fail
|
40
39
|
opts - rdof - remove dependency on fail
|
@@ -190,7 +189,7 @@ local function prepareJobForProcessing(keys, keyPrefix, targetKey, jobId, proces
|
|
190
189
|
end
|
191
190
|
rcall("XADD", keys[4], "*", "event", "active", "jobId", jobId, "prev", "waiting")
|
192
191
|
rcall("HSET", jobKey, "processedOn", processedOn)
|
193
|
-
rcall("HINCRBY", jobKey, "
|
192
|
+
rcall("HINCRBY", jobKey, "ats", 1)
|
194
193
|
return {rcall("HGETALL", jobKey), jobId, 0, 0} -- get job data
|
195
194
|
end
|
196
195
|
--[[
|
@@ -203,49 +202,32 @@ end
|
|
203
202
|
-- Includes
|
204
203
|
--[[
|
205
204
|
Add delay marker if needed.
|
206
|
-
]]
|
205
|
+
]]
|
207
206
|
-- Includes
|
208
|
-
local function addDelayMarkerIfNeeded(
|
209
|
-
local waitLen = rcall("LLEN", targetKey)
|
210
|
-
if waitLen <= 1 then
|
207
|
+
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
211
208
|
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
212
209
|
if nextTimestamp ~= nil then
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
local marker = rcall("LINDEX", targetKey, 0)
|
217
|
-
local oldTimestamp = tonumber(marker:sub(3))
|
218
|
-
if oldTimestamp and oldTimestamp > nextTimestamp then
|
219
|
-
rcall("LSET", targetKey, 0, "0:" .. nextTimestamp)
|
220
|
-
end
|
221
|
-
else
|
222
|
-
-- if there is no marker, then we need to add one
|
223
|
-
rcall("LPUSH", targetKey, "0:" .. nextTimestamp)
|
224
|
-
end
|
210
|
+
-- Replace the score of the marker with the newest known
|
211
|
+
-- next timestamp.
|
212
|
+
rcall("ZADD", markerKey, nextTimestamp, "0")
|
225
213
|
end
|
226
|
-
end
|
227
214
|
end
|
228
215
|
--[[
|
229
|
-
Function to
|
216
|
+
Function to check for the meta.paused key to decide if we are paused or not
|
217
|
+
(since an empty list and !EXISTS are not really the same).
|
230
218
|
]]
|
231
|
-
|
219
|
+
local function isQueuePaused(queueMetaKey)
|
220
|
+
return rcall("HEXISTS", queueMetaKey, "paused") == 1
|
221
|
+
end
|
232
222
|
--[[
|
233
|
-
Function
|
234
|
-
in order to wake up our workers and to respect priority
|
235
|
-
order as much as possible
|
223
|
+
Function to add job considering priority.
|
236
224
|
]]
|
237
|
-
local function
|
238
|
-
local waitLen = rcall("LLEN", waitKey)
|
239
|
-
if waitLen == 0 then
|
240
|
-
rcall("LPUSH", waitKey, "0:0")
|
241
|
-
end
|
242
|
-
end
|
243
|
-
local function addJobWithPriority(waitKey, prioritizedKey, priority, paused, jobId, priorityCounterKey)
|
225
|
+
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey, isPaused)
|
244
226
|
local prioCounter = rcall("INCR", priorityCounterKey)
|
245
227
|
local score = priority * 0x100000000 + bit.band(prioCounter, 0xffffffffffff)
|
246
228
|
rcall("ZADD", prioritizedKey, score, jobId)
|
247
|
-
if not
|
248
|
-
|
229
|
+
if not isPaused then
|
230
|
+
rcall("ZADD", markerKey, 0, "0")
|
249
231
|
end
|
250
232
|
end
|
251
233
|
--[[
|
@@ -259,35 +241,44 @@ local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
|
|
259
241
|
return pausedKey, true
|
260
242
|
end
|
261
243
|
end
|
262
|
-
local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
244
|
+
local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
|
245
|
+
parentKey, parentId, timestamp)
|
246
|
+
local isParentActive = rcall("ZSCORE",
|
247
|
+
parentQueueKey .. ":waiting-children", parentId)
|
248
|
+
if rcall("SCARD", parentDependenciesKey) == 0 and isParentActive then
|
249
|
+
rcall("ZREM", parentQueueKey .. ":waiting-children", parentId)
|
250
|
+
local parentWaitKey = parentQueueKey .. ":wait"
|
251
|
+
local parentPausedKey = parentQueueKey .. ":paused"
|
252
|
+
local parentMetaKey = parentQueueKey .. ":meta"
|
253
|
+
local parentMarkerKey = parentQueueKey .. ":marker"
|
254
|
+
local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
|
255
|
+
local priority = tonumber(jobAttributes[1]) or 0
|
256
|
+
local delay = tonumber(jobAttributes[2]) or 0
|
257
|
+
if delay > 0 then
|
258
|
+
local delayedTimestamp = tonumber(timestamp) + delay
|
259
|
+
local score = delayedTimestamp * 0x1000
|
260
|
+
local parentDelayedKey = parentQueueKey .. ":delayed"
|
261
|
+
rcall("ZADD", parentDelayedKey, score, parentId)
|
262
|
+
rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed",
|
263
|
+
"jobId", parentId, "delay", delayedTimestamp)
|
264
|
+
addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
|
265
|
+
else
|
266
|
+
if priority == 0 then
|
267
|
+
local parentTarget, _paused =
|
268
|
+
getTargetQueueList(parentMetaKey, parentWaitKey,
|
269
|
+
parentPausedKey)
|
270
|
+
rcall("RPUSH", parentTarget, parentId)
|
271
|
+
rcall("ZADD", parentMarkerKey, 0, "0")
|
272
|
+
else
|
273
|
+
local isPaused = isQueuePaused(parentMetaKey)
|
274
|
+
addJobWithPriority(parentMarkerKey,
|
275
|
+
parentQueueKey .. ":prioritized", priority,
|
276
|
+
parentId, parentQueueKey .. ":pc", isPaused)
|
277
|
+
end
|
278
|
+
rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting",
|
279
|
+
"jobId", parentId, "prev", "waiting-children")
|
280
|
+
end
|
289
281
|
end
|
290
|
-
end
|
291
282
|
end
|
292
283
|
local function moveParentFromWaitingChildrenToFailed( parentQueueKey, parentKey, parentId, jobIdKey, timestamp)
|
293
284
|
if rcall("ZREM", parentQueueKey .. ":waiting-children", parentId) == 1 then
|
@@ -326,8 +317,8 @@ end
|
|
326
317
|
]]
|
327
318
|
-- Includes
|
328
319
|
-- Try to get as much as 1000 jobs at once
|
329
|
-
local function promoteDelayedJobs(delayedKey,
|
330
|
-
eventStreamKey, prefix, timestamp,
|
320
|
+
local function promoteDelayedJobs(delayedKey, markerKey, targetKey, prioritizedKey,
|
321
|
+
eventStreamKey, prefix, timestamp, priorityCounterKey, isPaused)
|
331
322
|
local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000, "LIMIT", 0, 1000)
|
332
323
|
if (#jobs > 0) then
|
333
324
|
rcall("ZREM", delayedKey, unpack(jobs))
|
@@ -338,9 +329,12 @@ local function promoteDelayedJobs(delayedKey, waitKey, targetKey, prioritizedKey
|
|
338
329
|
if priority == 0 then
|
339
330
|
-- LIFO or FIFO
|
340
331
|
rcall("LPUSH", targetKey, jobId)
|
332
|
+
if not isPaused then
|
333
|
+
rcall("ZADD", markerKey, 0, "0")
|
334
|
+
end
|
341
335
|
else
|
342
|
-
addJobWithPriority(
|
343
|
-
jobId, priorityCounterKey)
|
336
|
+
addJobWithPriority(markerKey, prioritizedKey, priority,
|
337
|
+
jobId, priorityCounterKey, isPaused)
|
344
338
|
end
|
345
339
|
-- Emit waiting event
|
346
340
|
rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId",
|
@@ -495,10 +489,9 @@ local function getRateLimitTTL(maxJobs, rateLimiterKey)
|
|
495
489
|
end
|
496
490
|
local jobIdKey = KEYS[12]
|
497
491
|
if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
|
498
|
-
local opts = cmsgpack.unpack(ARGV[
|
492
|
+
local opts = cmsgpack.unpack(ARGV[8])
|
499
493
|
local token = opts['token']
|
500
494
|
local attempts = opts['attempts']
|
501
|
-
local attemptsMade = opts['attemptsMade']
|
502
495
|
local maxMetricsSize = opts['maxMetricsSize']
|
503
496
|
local maxCount = opts['keepJobs']['count']
|
504
497
|
local maxAge = opts['keepJobs']['age']
|
@@ -535,8 +528,9 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
|
|
535
528
|
-- Remove from active list (if not active we shall return error)
|
536
529
|
local numRemovedElements = rcall("LREM", KEYS[2], -1, jobId)
|
537
530
|
if (numRemovedElements < 1) then return -3 end
|
531
|
+
local metaKey = KEYS[9]
|
538
532
|
-- Trim events before emiting them to avoid trimming events emitted in this script
|
539
|
-
trimEvents(
|
533
|
+
trimEvents(metaKey, KEYS[4])
|
540
534
|
-- If job has a parent we need to
|
541
535
|
-- 1) remove this job id from parents dependencies
|
542
536
|
-- 2) move the job Id to parent "processed" set
|
@@ -557,16 +551,18 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
|
|
557
551
|
else
|
558
552
|
if opts['fpof'] then
|
559
553
|
moveParentFromWaitingChildrenToFailed(parentQueueKey, parentKey,
|
560
|
-
|
554
|
+
parentId, jobIdKey,
|
555
|
+
timestamp)
|
561
556
|
elseif opts['rdof'] then
|
562
557
|
local dependenciesSet = parentKey .. ":dependencies"
|
563
558
|
if rcall("SREM", dependenciesSet, jobIdKey) == 1 then
|
564
559
|
moveParentToWaitIfNeeded(parentQueueKey, dependenciesSet,
|
565
|
-
|
560
|
+
parentKey, parentId, timestamp)
|
566
561
|
end
|
567
562
|
end
|
568
563
|
end
|
569
564
|
end
|
565
|
+
local attemptsMade = rcall("HINCRBY", jobIdKey, "atm", 1)
|
570
566
|
-- Remove job?
|
571
567
|
if maxCount ~= 0 then
|
572
568
|
local targetSet = KEYS[11]
|
@@ -575,7 +571,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
|
|
575
571
|
rcall("HMSET", jobIdKey, ARGV[3], ARGV[4], "finishedOn", timestamp)
|
576
572
|
-- "returnvalue" / "failedReason" and "finishedOn"
|
577
573
|
-- Remove old jobs?
|
578
|
-
local prefix = ARGV[
|
574
|
+
local prefix = ARGV[7]
|
579
575
|
if maxAge ~= nil then
|
580
576
|
removeJobsByMaxAge(timestamp, maxAge, targetSet, prefix)
|
581
577
|
end
|
@@ -602,11 +598,11 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
|
|
602
598
|
end
|
603
599
|
-- Try to get next job to avoid an extra roundtrip if the queue is not closing,
|
604
600
|
-- and not rate limited.
|
605
|
-
if (ARGV[
|
606
|
-
local target, paused = getTargetQueueList(
|
601
|
+
if (ARGV[6] == "1") then
|
602
|
+
local target, paused = getTargetQueueList(metaKey, KEYS[1], KEYS[8])
|
607
603
|
-- Check if there are delayed jobs that can be promoted
|
608
|
-
promoteDelayedJobs(KEYS[7], KEYS[
|
609
|
-
|
604
|
+
promoteDelayedJobs(KEYS[7], KEYS[14], target, KEYS[3], KEYS[4], ARGV[7],
|
605
|
+
timestamp, KEYS[10], paused)
|
610
606
|
local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max'])
|
611
607
|
-- Check if we are rate limited first.
|
612
608
|
local expireTime = getRateLimitTTL(maxJobs, KEYS[6])
|
@@ -615,24 +611,29 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
|
|
615
611
|
if paused then return {0, 0, 0, 0} end
|
616
612
|
jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2])
|
617
613
|
if jobId then
|
614
|
+
-- Markers in waitlist DEPRECATED in v5: Remove in v6.
|
618
615
|
if string.sub(jobId, 1, 2) == "0:" then
|
619
616
|
rcall("LREM", KEYS[2], 1, jobId)
|
620
617
|
-- If jobId is special ID 0:delay (delay greater than 0), then there is no job to process
|
621
618
|
-- but if ID is 0:0, then there is at least 1 prioritized job to process
|
622
619
|
if jobId == "0:0" then
|
623
|
-
jobId = moveJobFromPriorityToActive(KEYS[3], KEYS[2],
|
624
|
-
|
625
|
-
|
620
|
+
jobId = moveJobFromPriorityToActive(KEYS[3], KEYS[2],
|
621
|
+
KEYS[10])
|
622
|
+
return prepareJobForProcessing(KEYS, ARGV[7], target, jobId,
|
623
|
+
timestamp, maxJobs,
|
624
|
+
expireTime, opts)
|
626
625
|
end
|
627
626
|
else
|
628
|
-
return prepareJobForProcessing(KEYS, ARGV[
|
629
|
-
|
627
|
+
return prepareJobForProcessing(KEYS, ARGV[7], target, jobId,
|
628
|
+
timestamp, maxJobs, expireTime,
|
629
|
+
opts)
|
630
630
|
end
|
631
631
|
else
|
632
632
|
jobId = moveJobFromPriorityToActive(KEYS[3], KEYS[2], KEYS[10])
|
633
633
|
if jobId then
|
634
|
-
return prepareJobForProcessing(KEYS, ARGV[
|
635
|
-
|
634
|
+
return prepareJobForProcessing(KEYS, ARGV[7], target, jobId,
|
635
|
+
timestamp, maxJobs, expireTime,
|
636
|
+
opts)
|
636
637
|
end
|
637
638
|
end
|
638
639
|
-- Return the timestamp for the next delayed job if any.
|
@@ -661,6 +662,6 @@ end
|
|
661
662
|
exports.moveToFinished = {
|
662
663
|
name: 'moveToFinished',
|
663
664
|
content,
|
664
|
-
keys:
|
665
|
+
keys: 14,
|
665
666
|
};
|
666
|
-
//# sourceMappingURL=moveToFinished-
|
667
|
+
//# sourceMappingURL=moveToFinished-14.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"moveToFinished-
|
1
|
+
{"version":3,"file":"moveToFinished-14.js","sourceRoot":"","sources":["../../../src/scripts/moveToFinished-14.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAipBf,CAAC;AACW,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,EAAE;CACT,CAAC"}
|
@@ -20,7 +20,8 @@ const content = `--[[
|
|
20
20
|
-3 - Job not in active set
|
21
21
|
]]
|
22
22
|
local rcall = redis.call
|
23
|
-
local function moveToWaitingChildren (activeKey, waitingChildrenKey, jobId, timestamp,
|
23
|
+
local function moveToWaitingChildren (activeKey, waitingChildrenKey, jobId, timestamp,
|
24
|
+
lockKey, jobKey, token)
|
24
25
|
if token ~= "0" then
|
25
26
|
if rcall("GET", lockKey) == token then
|
26
27
|
rcall("DEL", lockKey)
|
@@ -39,12 +40,14 @@ end
|
|
39
40
|
if rcall("EXISTS", KEYS[4]) == 1 then
|
40
41
|
if ARGV[2] ~= "" then
|
41
42
|
if rcall("SISMEMBER", KEYS[4] .. ":dependencies", ARGV[2]) ~= 0 then
|
42
|
-
return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3], KEYS[1],
|
43
|
+
return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3], KEYS[1], KEYS[4],
|
44
|
+
ARGV[1])
|
43
45
|
end
|
44
46
|
return 1
|
45
47
|
else
|
46
48
|
if rcall("SCARD", KEYS[4] .. ":dependencies") ~= 0 then
|
47
|
-
return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3], KEYS[1],
|
49
|
+
return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3], KEYS[1], KEYS[4],
|
50
|
+
ARGV[1])
|
48
51
|
end
|
49
52
|
return 1
|
50
53
|
end
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"moveToWaitingChildren-4.js","sourceRoot":"","sources":["../../../src/scripts/moveToWaitingChildren-4.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"moveToWaitingChildren-4.js","sourceRoot":"","sources":["../../../src/scripts/moveToWaitingChildren-4.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDf,CAAC;AACW,QAAA,qBAAqB,GAAG;IACnC,IAAI,EAAE,uBAAuB;IAC7B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -0,0 +1,67 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.pause = void 0;
|
4
|
+
const content = `--[[
|
5
|
+
Pauses or resumes a queue globably.
|
6
|
+
Input:
|
7
|
+
KEYS[1] 'wait' or 'paused''
|
8
|
+
KEYS[2] 'paused' or 'wait'
|
9
|
+
KEYS[3] 'meta'
|
10
|
+
KEYS[4] 'prioritized'
|
11
|
+
KEYS[5] events stream key
|
12
|
+
KEYS[6] 'delayed'
|
13
|
+
KEYS|7] 'marker'
|
14
|
+
ARGV[1] 'paused' or 'resumed'
|
15
|
+
Event:
|
16
|
+
publish paused or resumed event.
|
17
|
+
]]
|
18
|
+
local rcall = redis.call
|
19
|
+
-- Includes
|
20
|
+
--[[
|
21
|
+
Add delay marker if needed.
|
22
|
+
]]
|
23
|
+
-- Includes
|
24
|
+
--[[
|
25
|
+
Function to return the next delayed job timestamp.
|
26
|
+
]]
|
27
|
+
local function getNextDelayedTimestamp(delayedKey)
|
28
|
+
local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
|
29
|
+
if #result then
|
30
|
+
local nextTimestamp = tonumber(result[2])
|
31
|
+
if (nextTimestamp ~= nil) then
|
32
|
+
nextTimestamp = nextTimestamp / 0x1000
|
33
|
+
end
|
34
|
+
return nextTimestamp
|
35
|
+
end
|
36
|
+
end
|
37
|
+
local function addDelayMarkerIfNeeded(markerKey, delayedKey)
|
38
|
+
local nextTimestamp = getNextDelayedTimestamp(delayedKey)
|
39
|
+
if nextTimestamp ~= nil then
|
40
|
+
-- Replace the score of the marker with the newest known
|
41
|
+
-- next timestamp.
|
42
|
+
rcall("ZADD", markerKey, nextTimestamp, "0")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
local markerKey = KEYS[7]
|
46
|
+
local hasJobs = rcall("EXISTS", KEYS[1]) == 1
|
47
|
+
if hasJobs then rcall("RENAME", KEYS[1], KEYS[2]) end
|
48
|
+
if ARGV[1] == "paused" then
|
49
|
+
rcall("HSET", KEYS[3], "paused", 1)
|
50
|
+
rcall("DEL", markerKey)
|
51
|
+
else
|
52
|
+
rcall("HDEL", KEYS[3], "paused")
|
53
|
+
if hasJobs or rcall("ZCARD", KEYS[4]) > 0 then
|
54
|
+
-- Add marker if there are waiting or priority jobs
|
55
|
+
rcall("ZADD", markerKey, 0, "0")
|
56
|
+
else
|
57
|
+
addDelayMarkerIfNeeded(markerKey, KEYS[6])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
rcall("XADD", KEYS[5], "*", "event", ARGV[1]);
|
61
|
+
`;
|
62
|
+
exports.pause = {
|
63
|
+
name: 'pause',
|
64
|
+
content,
|
65
|
+
keys: 7,
|
66
|
+
};
|
67
|
+
//# sourceMappingURL=pause-7.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"pause-7.js","sourceRoot":"","sources":["../../../src/scripts/pause-7.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDf,CAAC;AACW,QAAA,KAAK,GAAG;IACnB,IAAI,EAAE,OAAO;IACb,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -0,0 +1,79 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.promote = void 0;
|
4
|
+
const content = `--[[
|
5
|
+
Promotes a job that is currently "delayed" to the "waiting" state
|
6
|
+
Input:
|
7
|
+
KEYS[1] 'delayed'
|
8
|
+
KEYS[2] 'wait'
|
9
|
+
KEYS[3] 'paused'
|
10
|
+
KEYS[4] 'meta'
|
11
|
+
KEYS[5] 'prioritized'
|
12
|
+
KEYS[6] 'pc' priority counter
|
13
|
+
KEYS[7] 'event stream'
|
14
|
+
KEYS[8] 'marker'
|
15
|
+
ARGV[1] queue.toKey('')
|
16
|
+
ARGV[2] jobId
|
17
|
+
Output:
|
18
|
+
0 - OK
|
19
|
+
-3 - Job not in delayed zset.
|
20
|
+
Events:
|
21
|
+
'waiting'
|
22
|
+
]]
|
23
|
+
local rcall = redis.call
|
24
|
+
local jobId = ARGV[2]
|
25
|
+
-- Includes
|
26
|
+
--[[
|
27
|
+
Function to add job considering priority.
|
28
|
+
]]
|
29
|
+
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey, isPaused)
|
30
|
+
local prioCounter = rcall("INCR", priorityCounterKey)
|
31
|
+
local score = priority * 0x100000000 + bit.band(prioCounter, 0xffffffffffff)
|
32
|
+
rcall("ZADD", prioritizedKey, score, jobId)
|
33
|
+
if not isPaused then
|
34
|
+
rcall("ZADD", markerKey, 0, "0")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
--[[
|
38
|
+
Function to check for the meta.paused key to decide if we are paused or not
|
39
|
+
(since an empty list and !EXISTS are not really the same).
|
40
|
+
]]
|
41
|
+
local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
|
42
|
+
if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
|
43
|
+
return waitKey, false
|
44
|
+
else
|
45
|
+
return pausedKey, true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
if rcall("ZREM", KEYS[1], jobId) == 1 then
|
49
|
+
local jobKey = ARGV[1] .. jobId
|
50
|
+
local priority = tonumber(rcall("HGET", jobKey, "priority")) or 0
|
51
|
+
local metaKey = KEYS[4]
|
52
|
+
-- Remove delayed "marker" from the wait list if there is any.
|
53
|
+
-- Since we are adding a job we do not need the marker anymore.
|
54
|
+
-- Markers in waitlist DEPRECATED in v5: Remove in v6.
|
55
|
+
local target, paused = getTargetQueueList(metaKey, KEYS[2], KEYS[3])
|
56
|
+
local marker = rcall("LINDEX", target, 0)
|
57
|
+
if marker and string.sub(marker, 1, 2) == "0:" then rcall("LPOP", target) end
|
58
|
+
if priority == 0 then
|
59
|
+
-- LIFO or FIFO
|
60
|
+
rcall("LPUSH", target, jobId)
|
61
|
+
if not paused then rcall("ZADD", KEYS[8], 0, "0") end
|
62
|
+
else
|
63
|
+
addJobWithPriority(KEYS[8], KEYS[5], priority, jobId, KEYS[6], paused)
|
64
|
+
end
|
65
|
+
-- Emit waiting event (wait..ing@token)
|
66
|
+
rcall("XADD", KEYS[7], "*", "event", "waiting", "jobId", jobId, "prev",
|
67
|
+
"delayed");
|
68
|
+
rcall("HSET", jobKey, "delay", 0)
|
69
|
+
return 0
|
70
|
+
else
|
71
|
+
return -3
|
72
|
+
end
|
73
|
+
`;
|
74
|
+
exports.promote = {
|
75
|
+
name: 'promote',
|
76
|
+
content,
|
77
|
+
keys: 8,
|
78
|
+
};
|
79
|
+
//# sourceMappingURL=promote-8.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"promote-8.js","sourceRoot":"","sources":["../../../src/scripts/promote-8.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEf,CAAC;AACW,QAAA,OAAO,GAAG;IACrB,IAAI,EAAE,SAAS;IACf,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -4,15 +4,16 @@ exports.retryJob = void 0;
|
|
4
4
|
const content = `--[[
|
5
5
|
Retries a failed job by moving it back to the wait queue.
|
6
6
|
Input:
|
7
|
-
KEYS[1]
|
8
|
-
KEYS[2]
|
9
|
-
KEYS[3]
|
10
|
-
KEYS[4]
|
11
|
-
KEYS[5]
|
12
|
-
KEYS[6]
|
13
|
-
KEYS[7]
|
14
|
-
KEYS[8]
|
15
|
-
KEYS[9]
|
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
|
+
KEYS[7] delayed key
|
14
|
+
KEYS[8] prioritized key
|
15
|
+
KEYS[9] 'pc' priority counter
|
16
|
+
KEYS[10] 'marker'
|
16
17
|
ARGV[1] key prefix
|
17
18
|
ARGV[2] timestamp
|
18
19
|
ARGV[3] pushCmd
|
@@ -30,24 +31,12 @@ local rcall = redis.call
|
|
30
31
|
--[[
|
31
32
|
Function to add job considering priority.
|
32
33
|
]]
|
33
|
-
|
34
|
-
--[[
|
35
|
-
Function priority marker to wait if needed
|
36
|
-
in order to wake up our workers and to respect priority
|
37
|
-
order as much as possible
|
38
|
-
]]
|
39
|
-
local function addPriorityMarkerIfNeeded(waitKey)
|
40
|
-
local waitLen = rcall("LLEN", waitKey)
|
41
|
-
if waitLen == 0 then
|
42
|
-
rcall("LPUSH", waitKey, "0:0")
|
43
|
-
end
|
44
|
-
end
|
45
|
-
local function addJobWithPriority(waitKey, prioritizedKey, priority, paused, jobId, priorityCounterKey)
|
34
|
+
local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey, isPaused)
|
46
35
|
local prioCounter = rcall("INCR", priorityCounterKey)
|
47
36
|
local score = priority * 0x100000000 + bit.band(prioCounter, 0xffffffffffff)
|
48
37
|
rcall("ZADD", prioritizedKey, score, jobId)
|
49
|
-
if not
|
50
|
-
|
38
|
+
if not isPaused then
|
39
|
+
rcall("ZADD", markerKey, 0, "0")
|
51
40
|
end
|
52
41
|
end
|
53
42
|
--[[
|
@@ -69,8 +58,8 @@ end
|
|
69
58
|
]]
|
70
59
|
-- Includes
|
71
60
|
-- Try to get as much as 1000 jobs at once
|
72
|
-
local function promoteDelayedJobs(delayedKey,
|
73
|
-
eventStreamKey, prefix, timestamp,
|
61
|
+
local function promoteDelayedJobs(delayedKey, markerKey, targetKey, prioritizedKey,
|
62
|
+
eventStreamKey, prefix, timestamp, priorityCounterKey, isPaused)
|
74
63
|
local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000, "LIMIT", 0, 1000)
|
75
64
|
if (#jobs > 0) then
|
76
65
|
rcall("ZREM", delayedKey, unpack(jobs))
|
@@ -81,9 +70,12 @@ local function promoteDelayedJobs(delayedKey, waitKey, targetKey, prioritizedKey
|
|
81
70
|
if priority == 0 then
|
82
71
|
-- LIFO or FIFO
|
83
72
|
rcall("LPUSH", targetKey, jobId)
|
73
|
+
if not isPaused then
|
74
|
+
rcall("ZADD", markerKey, 0, "0")
|
75
|
+
end
|
84
76
|
else
|
85
|
-
addJobWithPriority(
|
86
|
-
jobId, priorityCounterKey)
|
77
|
+
addJobWithPriority(markerKey, prioritizedKey, priority,
|
78
|
+
jobId, priorityCounterKey, isPaused)
|
87
79
|
end
|
88
80
|
-- Emit waiting event
|
89
81
|
rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId",
|
@@ -93,9 +85,10 @@ local function promoteDelayedJobs(delayedKey, waitKey, targetKey, prioritizedKey
|
|
93
85
|
end
|
94
86
|
end
|
95
87
|
local target, paused = getTargetQueueList(KEYS[5], KEYS[2], KEYS[3])
|
88
|
+
local markerKey = KEYS[10]
|
96
89
|
-- Check if there are delayed jobs that we can move to wait.
|
97
90
|
-- test example: when there are delayed jobs between retries
|
98
|
-
promoteDelayedJobs(KEYS[7],
|
91
|
+
promoteDelayedJobs(KEYS[7], markerKey, target, KEYS[8], KEYS[6], ARGV[1], ARGV[2], KEYS[9], paused)
|
99
92
|
if rcall("EXISTS", KEYS[4]) == 1 then
|
100
93
|
if ARGV[5] ~= "0" then
|
101
94
|
local lockKey = KEYS[4] .. ':lock'
|
@@ -111,8 +104,9 @@ if rcall("EXISTS", KEYS[4]) == 1 then
|
|
111
104
|
if priority == 0 then
|
112
105
|
rcall(ARGV[3], target, ARGV[4])
|
113
106
|
else
|
114
|
-
addJobWithPriority(
|
107
|
+
addJobWithPriority(markerKey, KEYS[8], priority, ARGV[4], KEYS[9], paused)
|
115
108
|
end
|
109
|
+
rcall("HINCRBY", KEYS[4], "atm", 1)
|
116
110
|
local maxEvents = rcall("HGET", KEYS[5], "opts.maxLenEvents") or 10000
|
117
111
|
-- Emit waiting event
|
118
112
|
rcall("XADD", KEYS[6], "MAXLEN", "~", maxEvents, "*", "event", "waiting",
|
@@ -125,6 +119,6 @@ end
|
|
125
119
|
exports.retryJob = {
|
126
120
|
name: 'retryJob',
|
127
121
|
content,
|
128
|
-
keys:
|
122
|
+
keys: 10,
|
129
123
|
};
|
130
|
-
//# sourceMappingURL=retryJob-
|
124
|
+
//# sourceMappingURL=retryJob-10.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"retryJob-10.js","sourceRoot":"","sources":["../../../src/scripts/retryJob-10.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkHf,CAAC;AACW,QAAA,QAAQ,GAAG;IACtB,IAAI,EAAE,UAAU;IAChB,OAAO;IACP,IAAI,EAAE,EAAE;CACT,CAAC"}
|