bullmq 5.58.7 → 5.58.9
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/job-scheduler.js +22 -24
- package/dist/cjs/classes/job-scheduler.js.map +1 -1
- package/dist/cjs/classes/job.js +6 -2
- package/dist/cjs/classes/job.js.map +1 -1
- package/dist/cjs/classes/queue-getters.js +6 -19
- package/dist/cjs/classes/queue-getters.js.map +1 -1
- package/dist/cjs/classes/queue.js +1 -1
- package/dist/cjs/classes/queue.js.map +1 -1
- package/dist/cjs/classes/scripts.js +47 -11
- package/dist/cjs/classes/scripts.js.map +1 -1
- package/dist/cjs/classes/worker.js +53 -18
- package/dist/cjs/classes/worker.js.map +1 -1
- package/dist/cjs/commands/addJobScheduler-11.lua +81 -25
- package/dist/cjs/commands/addRepeatableJob-2.lua +1 -1
- package/dist/cjs/commands/getMetrics-2.lua +19 -0
- package/dist/cjs/commands/includes/addJobFromScheduler.lua +5 -3
- package/dist/cjs/commands/includes/getJobSchedulerEveryNextMillis.lua +28 -0
- package/dist/cjs/commands/includes/storeJobScheduler.lua +15 -1
- package/dist/cjs/commands/moveStalledJobsToWait-8.lua +14 -1
- package/dist/cjs/commands/updateJobScheduler-12.lua +50 -14
- package/dist/cjs/enums/error-code.js +2 -0
- package/dist/cjs/enums/error-code.js.map +1 -1
- package/dist/cjs/scripts/addJobScheduler-11.js +108 -25
- package/dist/cjs/scripts/addJobScheduler-11.js.map +1 -1
- package/dist/cjs/scripts/addRepeatableJob-2.js +1 -1
- package/dist/cjs/scripts/getMetrics-2.js +25 -0
- package/dist/cjs/scripts/getMetrics-2.js.map +1 -0
- package/dist/cjs/scripts/index.js +1 -0
- package/dist/cjs/scripts/index.js.map +1 -1
- package/dist/cjs/scripts/moveStalledJobsToWait-8.js +11 -1
- package/dist/cjs/scripts/moveStalledJobsToWait-8.js.map +1 -1
- package/dist/cjs/scripts/updateJobScheduler-12.js +66 -17
- package/dist/cjs/scripts/updateJobScheduler-12.js.map +1 -1
- package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/classes/job-scheduler.js +22 -24
- package/dist/esm/classes/job-scheduler.js.map +1 -1
- package/dist/esm/classes/job.js +6 -2
- package/dist/esm/classes/job.js.map +1 -1
- package/dist/esm/classes/queue-getters.js +6 -19
- package/dist/esm/classes/queue-getters.js.map +1 -1
- package/dist/esm/classes/queue.d.ts +1 -1
- package/dist/esm/classes/queue.js +1 -1
- package/dist/esm/classes/queue.js.map +1 -1
- package/dist/esm/classes/scripts.d.ts +2 -1
- package/dist/esm/classes/scripts.js +47 -11
- package/dist/esm/classes/scripts.js.map +1 -1
- package/dist/esm/classes/worker.js +53 -18
- package/dist/esm/classes/worker.js.map +1 -1
- package/dist/esm/commands/addJobScheduler-11.lua +81 -25
- package/dist/esm/commands/addRepeatableJob-2.lua +1 -1
- package/dist/esm/commands/getMetrics-2.lua +19 -0
- package/dist/esm/commands/includes/addJobFromScheduler.lua +5 -3
- package/dist/esm/commands/includes/getJobSchedulerEveryNextMillis.lua +28 -0
- package/dist/esm/commands/includes/storeJobScheduler.lua +15 -1
- package/dist/esm/commands/moveStalledJobsToWait-8.lua +14 -1
- package/dist/esm/commands/updateJobScheduler-12.lua +50 -14
- package/dist/esm/enums/error-code.d.ts +3 -1
- package/dist/esm/enums/error-code.js +2 -0
- package/dist/esm/enums/error-code.js.map +1 -1
- package/dist/esm/interfaces/job-scheduler-json.d.ts +1 -0
- package/dist/esm/interfaces/repeatable-options.d.ts +1 -0
- package/dist/esm/scripts/addJobScheduler-11.js +108 -25
- package/dist/esm/scripts/addJobScheduler-11.js.map +1 -1
- package/dist/esm/scripts/addRepeatableJob-2.js +1 -1
- package/dist/esm/scripts/getMetrics-2.d.ts +5 -0
- package/dist/esm/scripts/getMetrics-2.js +22 -0
- package/dist/esm/scripts/getMetrics-2.js.map +1 -0
- package/dist/esm/scripts/index.d.ts +1 -0
- package/dist/esm/scripts/index.js +1 -0
- package/dist/esm/scripts/index.js.map +1 -1
- package/dist/esm/scripts/moveStalledJobsToWait-8.js +11 -1
- package/dist/esm/scripts/moveStalledJobsToWait-8.js.map +1 -1
- package/dist/esm/scripts/updateJobScheduler-12.js +66 -17
- package/dist/esm/scripts/updateJobScheduler-12.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +5 -5
|
@@ -22,19 +22,19 @@ const content = `--[[
|
|
|
22
22
|
ARGV[7] producer id
|
|
23
23
|
Output:
|
|
24
24
|
next delayed job id - OK
|
|
25
|
-
]]
|
|
26
|
-
local rcall = redis.call
|
|
25
|
+
]] local rcall = redis.call
|
|
27
26
|
local repeatKey = KEYS[1]
|
|
28
27
|
local delayedKey = KEYS[2]
|
|
29
28
|
local waitKey = KEYS[3]
|
|
30
29
|
local pausedKey = KEYS[4]
|
|
31
30
|
local metaKey = KEYS[5]
|
|
32
31
|
local prioritizedKey = KEYS[6]
|
|
33
|
-
local nextMillis = ARGV[1]
|
|
32
|
+
local nextMillis = tonumber(ARGV[1])
|
|
34
33
|
local jobSchedulerId = ARGV[2]
|
|
35
|
-
local timestamp = ARGV[5]
|
|
34
|
+
local timestamp = tonumber(ARGV[5])
|
|
36
35
|
local prefixKey = ARGV[6]
|
|
37
36
|
local producerId = ARGV[7]
|
|
37
|
+
local jobOpts = cmsgpack.unpack(ARGV[4])
|
|
38
38
|
-- Includes
|
|
39
39
|
--[[
|
|
40
40
|
Add delay marker if needed.
|
|
@@ -194,10 +194,11 @@ local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed
|
|
|
194
194
|
rcall(pushCmd, targetKey, jobId)
|
|
195
195
|
addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
|
|
196
196
|
end
|
|
197
|
-
local function addJobFromScheduler(jobKey, jobId,
|
|
197
|
+
local function addJobFromScheduler(jobKey, jobId, opts, waitKey, pausedKey, activeKey, metaKey,
|
|
198
198
|
prioritizedKey, priorityCounter, delayedKey, markerKey, eventsKey, name, maxEvents, timestamp,
|
|
199
|
-
data, jobSchedulerId)
|
|
200
|
-
|
|
199
|
+
data, jobSchedulerId, repeatDelay)
|
|
200
|
+
opts['delay'] = repeatDelay
|
|
201
|
+
opts['jobId'] = jobId
|
|
201
202
|
local delay, priority = storeJob(eventsKey, jobKey, jobId, name, data,
|
|
202
203
|
opts, timestamp, nil, nil, jobSchedulerId)
|
|
203
204
|
if delay ~= 0 then
|
|
@@ -227,18 +228,61 @@ local function getOrSetMaxEvents(metaKey)
|
|
|
227
228
|
end
|
|
228
229
|
return maxEvents
|
|
229
230
|
end
|
|
230
|
-
local
|
|
231
|
-
local
|
|
232
|
-
|
|
233
|
-
|
|
231
|
+
local function getJobSchedulerEveryNextMillis(prevMillis, every, now, offset, startDate)
|
|
232
|
+
local nextMillis
|
|
233
|
+
if not prevMillis then
|
|
234
|
+
if startDate then
|
|
235
|
+
-- Assuming startDate is passed as milliseconds from JavaScript
|
|
236
|
+
nextMillis = tonumber(startDate)
|
|
237
|
+
nextMillis = nextMillis > now and nextMillis or now
|
|
238
|
+
else
|
|
239
|
+
nextMillis = now
|
|
240
|
+
end
|
|
241
|
+
else
|
|
242
|
+
nextMillis = prevMillis + every
|
|
243
|
+
-- check if we may have missed some iterations
|
|
244
|
+
if nextMillis < now then
|
|
245
|
+
nextMillis = math.floor(now / every) * every + every + (offset or 0)
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
if not offset or offset == 0 then
|
|
249
|
+
local timeSlot = math.floor(nextMillis / every) * every;
|
|
250
|
+
offset = nextMillis - timeSlot;
|
|
251
|
+
end
|
|
252
|
+
-- Return a tuple nextMillis, offset
|
|
253
|
+
return math.floor(nextMillis), math.floor(offset)
|
|
254
|
+
end
|
|
234
255
|
local prevMillis = rcall("ZSCORE", repeatKey, jobSchedulerId)
|
|
256
|
+
-- Validate that scheduler exists.
|
|
257
|
+
-- If it does not exist we should not iterate anymore.
|
|
235
258
|
if prevMillis then
|
|
259
|
+
prevMillis = tonumber(prevMillis)
|
|
260
|
+
local schedulerKey = repeatKey .. ":" .. jobSchedulerId
|
|
261
|
+
local schedulerAttributes = rcall("HMGET", schedulerKey, "name", "data", "every", "startDate", "offset")
|
|
262
|
+
local every = tonumber(schedulerAttributes[3])
|
|
263
|
+
local now = tonumber(timestamp)
|
|
264
|
+
-- If every is not found in scheduler attributes, try to get it from job options
|
|
265
|
+
if not every and jobOpts['repeat'] and jobOpts['repeat']['every'] then
|
|
266
|
+
every = tonumber(jobOpts['repeat']['every'])
|
|
267
|
+
end
|
|
268
|
+
if every then
|
|
269
|
+
local startDate = schedulerAttributes[4]
|
|
270
|
+
local jobOptsOffset = jobOpts['repeat'] and jobOpts['repeat']['offset'] or 0
|
|
271
|
+
local offset = schedulerAttributes[5] or jobOptsOffset or 0
|
|
272
|
+
local newOffset
|
|
273
|
+
nextMillis, newOffset = getJobSchedulerEveryNextMillis(prevMillis, every, now, offset, startDate)
|
|
274
|
+
if not offset then
|
|
275
|
+
rcall("HSET", schedulerKey, "offset", newOffset)
|
|
276
|
+
jobOpts['repeat']['offset'] = newOffset
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
local nextDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. nextMillis
|
|
280
|
+
local nextDelayedJobKey = schedulerKey .. ":" .. nextMillis
|
|
236
281
|
local currentDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. prevMillis
|
|
237
282
|
if producerId == currentDelayedJobId then
|
|
238
283
|
local eventsKey = KEYS[9]
|
|
239
284
|
local maxEvents = getOrSetMaxEvents(metaKey)
|
|
240
285
|
if rcall("EXISTS", nextDelayedJobKey) ~= 1 then
|
|
241
|
-
local schedulerAttributes = rcall("HMGET", schedulerKey, "name", "data")
|
|
242
286
|
rcall("ZADD", repeatKey, nextMillis, jobSchedulerId)
|
|
243
287
|
rcall("HINCRBY", schedulerKey, "ic", 1)
|
|
244
288
|
rcall("INCR", KEYS[8])
|
|
@@ -248,17 +292,22 @@ if prevMillis then
|
|
|
248
292
|
if templateData and templateData ~= '{}' then
|
|
249
293
|
rcall("HSET", schedulerKey, "data", templateData)
|
|
250
294
|
end
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
295
|
+
local delay = nextMillis - now
|
|
296
|
+
-- Fast Clamp delay to minimum of 0
|
|
297
|
+
if delay < 0 then
|
|
298
|
+
delay = 0
|
|
299
|
+
end
|
|
300
|
+
jobOpts["delay"] = delay
|
|
301
|
+
addJobFromScheduler(nextDelayedJobKey, nextDelayedJobId, jobOpts, waitKey, pausedKey, KEYS[12], metaKey,
|
|
302
|
+
prioritizedKey, KEYS[10], delayedKey, KEYS[7], eventsKey, schedulerAttributes[1], maxEvents, ARGV[5],
|
|
303
|
+
templateData or '{}', jobSchedulerId, delay)
|
|
254
304
|
-- TODO: remove this workaround in next breaking change
|
|
255
305
|
if KEYS[11] ~= "" then
|
|
256
306
|
rcall("HSET", KEYS[11], "nrjid", nextDelayedJobId)
|
|
257
307
|
end
|
|
258
308
|
return nextDelayedJobId .. "" -- convert to string
|
|
259
309
|
else
|
|
260
|
-
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
|
|
261
|
-
"duplicated", "jobId", nextDelayedJobId)
|
|
310
|
+
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "duplicated", "jobId", nextDelayedJobId)
|
|
262
311
|
end
|
|
263
312
|
end
|
|
264
313
|
end
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateJobScheduler-12.js","sourceRoot":"","sources":["../../../src/scripts/updateJobScheduler-12.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG
|
|
1
|
+
{"version":3,"file":"updateJobScheduler-12.js","sourceRoot":"","sources":["../../../src/scripts/updateJobScheduler-12.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyTf,CAAC;AACF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,oBAAoB;IAC1B,OAAO;IACP,IAAI,EAAE,EAAE;CACT,CAAC"}
|