bullmq 2.3.2 → 3.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/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 +18 -2
- 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 +4 -4
- package/dist/cjs/classes/scripts.js +9 -16
- 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/moveToFinished-12.lua +8 -1
- package/dist/cjs/commands/promote-6.lua +2 -10
- 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/moveToActive-9.js +35 -36
- package/dist/cjs/scripts/moveToActive-9.js.map +1 -1
- package/dist/cjs/scripts/moveToFinished-12.js +33 -36
- package/dist/cjs/scripts/moveToFinished-12.js.map +1 -1
- package/dist/cjs/scripts/promote-6.js +15 -9
- package/dist/cjs/scripts/promote-6.js.map +1 -1
- 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 +19 -3
- 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 +4 -4
- package/dist/esm/classes/scripts.js +7 -14
- 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/moveToFinished-12.lua +8 -1
- package/dist/esm/commands/promote-6.lua +2 -10
- 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/moveToActive-9.js +35 -36
- package/dist/esm/scripts/moveToActive-9.js.map +1 -1
- package/dist/esm/scripts/moveToFinished-12.js +33 -36
- package/dist/esm/scripts/moveToFinished-12.js.map +1 -1
- package/dist/esm/scripts/promote-6.js +15 -9
- package/dist/esm/scripts/promote-6.js.map +1 -1
- 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
@@ -46,41 +46,25 @@ local rcall = redis.call
|
|
46
46
|
local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts)
|
47
47
|
-- Check if we need to perform rate limiting.
|
48
48
|
local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max'])
|
49
|
+
local expireTime
|
49
50
|
if(maxJobs) then
|
50
51
|
local rateLimiterKey = keys[6];
|
51
|
-
local
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
if groupKey ~= jobId then
|
56
|
-
rateLimiterKey = rateLimiterKey .. ":" .. groupKey
|
57
|
-
end
|
52
|
+
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
53
|
+
if jobCounter == 1 then
|
54
|
+
local limiterDuration = opts['limiter'] and opts['limiter']['duration']
|
55
|
+
rcall("PEXPIRE", rateLimiterKey, limiterDuration)
|
58
56
|
end
|
59
|
-
|
60
|
-
if
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
else
|
65
|
-
jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
66
|
-
end
|
67
|
-
local limiterDuration = opts['limiter'] and opts['limiter']['duration']
|
68
|
-
-- check if rate limit hit
|
69
|
-
if jobCounter ~= nil and jobCounter > maxJobs then
|
70
|
-
local exceedingJobs = jobCounter - maxJobs
|
71
|
-
local expireTime = tonumber(rcall("PTTL", rateLimiterKey))
|
72
|
-
local delay = expireTime + ((exceedingJobs - 1) * limiterDuration) / maxJobs;
|
73
|
-
local timestamp = delay + tonumber(processedOn)
|
74
|
-
-- put job into delayed queue
|
75
|
-
rcall("ZADD", keys[7], timestamp * 0x1000 + bit.band(jobCounter, 0xfff), jobId);
|
76
|
-
rcall("XADD", keys[4], "*", "event", "delayed", "jobId", jobId, "delay", timestamp);
|
77
|
-
-- remove from active queue
|
57
|
+
-- check if we passed rate limit, we need to remove the job and return expireTime
|
58
|
+
if jobCounter > maxJobs then
|
59
|
+
expireTime = rcall("PTTL", rateLimiterKey)
|
60
|
+
-- remove from active queue and add back to the wait list
|
78
61
|
rcall("LREM", keys[2], 1, jobId)
|
62
|
+
rcall("RPUSH", keys[1], jobId)
|
79
63
|
-- Return when we can process more jobs
|
80
|
-
return expireTime
|
64
|
+
return {0, 0, expireTime}
|
81
65
|
else
|
82
|
-
if jobCounter ==
|
83
|
-
rcall("
|
66
|
+
if jobCounter == maxJobs then
|
67
|
+
expireTime = rcall("PTTL", rateLimiterKey)
|
84
68
|
end
|
85
69
|
end
|
86
70
|
end
|
@@ -94,7 +78,7 @@ local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts
|
|
94
78
|
rcall("XADD", keys[4], "*", "event", "active", "jobId", jobId, "prev", "waiting")
|
95
79
|
rcall("HSET", jobKey, "processedOn", processedOn)
|
96
80
|
rcall("HINCRBY", jobKey, "attemptsMade", 1)
|
97
|
-
return {rcall("HGETALL", jobKey), jobId} -- get job data
|
81
|
+
return {rcall("HGETALL", jobKey), jobId, expireTime} -- get job data
|
98
82
|
end
|
99
83
|
--[[
|
100
84
|
Function to return the next delayed job timestamp.
|
@@ -166,19 +150,34 @@ local function promoteDelayedJobs(delayedKey, waitKey, priorityKey, pausedKey,
|
|
166
150
|
rcall("HSET", prefix .. jobId, "delay", 0)
|
167
151
|
end
|
168
152
|
end
|
169
|
-
|
170
|
-
|
171
|
-
|
153
|
+
end
|
154
|
+
local function getRateLimitTTL(opts, limiterKey)
|
155
|
+
local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max'])
|
156
|
+
if maxJobs then
|
157
|
+
local jobCounter = tonumber(rcall("GET", limiterKey))
|
158
|
+
if jobCounter ~= nil and jobCounter >= maxJobs then
|
159
|
+
local pttl = rcall("PTTL", KEYS[6])
|
160
|
+
if pttl > 0 then
|
161
|
+
return pttl
|
162
|
+
end
|
163
|
+
end
|
172
164
|
end
|
173
|
-
return
|
165
|
+
return 0
|
174
166
|
end
|
175
167
|
-- Check if there are delayed jobs that we can move to wait.
|
176
168
|
promoteDelayedJobs(KEYS[7], KEYS[1], KEYS[3], KEYS[8], KEYS[9], KEYS[4], ARGV[1], ARGV[2])
|
169
|
+
local opts
|
177
170
|
if (ARGV[3] ~= "") then
|
178
171
|
jobId = ARGV[3]
|
179
172
|
-- clean stalled key
|
180
173
|
rcall("SREM", KEYS[5], jobId)
|
181
174
|
else
|
175
|
+
-- Check if we are rate limited first.
|
176
|
+
opts = cmsgpack.unpack(ARGV[4])
|
177
|
+
local pttl = getRateLimitTTL(opts, KEYS[6])
|
178
|
+
if pttl > 0 then
|
179
|
+
return { 0, 0, pttl }
|
180
|
+
end
|
182
181
|
-- no job ID, try non-blocking move from wait to active
|
183
182
|
jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2])
|
184
183
|
end
|
@@ -186,14 +185,14 @@ end
|
|
186
185
|
if jobId == "0" then
|
187
186
|
rcall("LREM", KEYS[2], 1, 0)
|
188
187
|
elseif jobId then
|
189
|
-
|
188
|
+
opts = opts or cmsgpack.unpack(ARGV[4])
|
190
189
|
-- this script is not really moving, it is preparing the job for processing
|
191
190
|
return moveJobFromWaitToActive(KEYS, ARGV[1], jobId, ARGV[2], opts)
|
192
191
|
end
|
193
192
|
-- Return the timestamp for the next delayed job if any.
|
194
193
|
local nextTimestamp = getNextDelayedTimestamp(KEYS[7])
|
195
194
|
if (nextTimestamp ~= nil) then
|
196
|
-
return nextTimestamp - tonumber(ARGV[2])
|
195
|
+
return { 0, 0, 0, nextTimestamp - tonumber(ARGV[2])}
|
197
196
|
end
|
198
197
|
`;
|
199
198
|
export const moveToActive = {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"moveToActive-9.js","sourceRoot":"","sources":["../../../src/scripts/moveToActive-9.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"moveToActive-9.js","sourceRoot":"","sources":["../../../src/scripts/moveToActive-9.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoMf,CAAC;AACF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,cAAc;IACpB,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"}
|
@@ -15,6 +15,20 @@ const content = `--[[
|
|
15
15
|
local rcall = redis.call;
|
16
16
|
local jobId = ARGV[2]
|
17
17
|
-- Includes
|
18
|
+
--[[
|
19
|
+
Function to add job considering priority.
|
20
|
+
]]
|
21
|
+
local function addJobWithPriority(priorityKey, priority, targetKey, jobId)
|
22
|
+
rcall("ZADD", priorityKey, priority, jobId)
|
23
|
+
local count = rcall("ZCOUNT", priorityKey, 0, priority)
|
24
|
+
local len = rcall("LLEN", targetKey)
|
25
|
+
local id = rcall("LINDEX", targetKey, len - (count - 1))
|
26
|
+
if id then
|
27
|
+
rcall("LINSERT", targetKey, "BEFORE", id, jobId)
|
28
|
+
else
|
29
|
+
rcall("RPUSH", targetKey, jobId)
|
30
|
+
end
|
31
|
+
end
|
18
32
|
--[[
|
19
33
|
Function to check for the meta.paused key to decide if we are paused or not
|
20
34
|
(since an empty list and !EXISTS are not really the same).
|
@@ -39,15 +53,7 @@ if rcall("ZREM", KEYS[1], jobId) == 1 then
|
|
39
53
|
rcall("LPUSH", target, jobId)
|
40
54
|
else
|
41
55
|
-- Priority add
|
42
|
-
|
43
|
-
local count = rcall("ZCOUNT", KEYS[5], 0, priority)
|
44
|
-
local len = rcall("LLEN", target)
|
45
|
-
local id = rcall("LINDEX", target, len - (count - 1))
|
46
|
-
if id then
|
47
|
-
rcall("LINSERT", target, "BEFORE", id, jobId)
|
48
|
-
else
|
49
|
-
rcall("RPUSH", target, jobId)
|
50
|
-
end
|
56
|
+
addJobWithPriority(KEYS[5], priority, target, jobId)
|
51
57
|
end
|
52
58
|
-- Emit waiting event (wait..ing@token)
|
53
59
|
rcall("XADD", KEYS[6], "*", "event", "waiting", "jobId", jobId, "prev", "delayed");
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"promote-6.js","sourceRoot":"","sources":["../../../src/scripts/promote-6.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"promote-6.js","sourceRoot":"","sources":["../../../src/scripts/promote-6.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+DZ,CAAC;AACL,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,SAAS;IACf,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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"}
|