bullmq 5.15.0 → 5.17.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/child-pool.js +2 -2
- package/dist/cjs/classes/child-pool.js.map +1 -1
- package/dist/cjs/classes/job-scheduler.js +140 -0
- package/dist/cjs/classes/job-scheduler.js.map +1 -0
- package/dist/cjs/classes/job.js +6 -2
- package/dist/cjs/classes/job.js.map +1 -1
- package/dist/cjs/classes/queue-events.js.map +1 -1
- package/dist/cjs/classes/queue-getters.js +10 -0
- package/dist/cjs/classes/queue-getters.js.map +1 -1
- package/dist/cjs/classes/queue-keys.js +1 -1
- package/dist/cjs/classes/queue-keys.js.map +1 -1
- package/dist/cjs/classes/queue.js +74 -0
- package/dist/cjs/classes/queue.js.map +1 -1
- package/dist/cjs/classes/repeat.js +9 -10
- package/dist/cjs/classes/repeat.js.map +1 -1
- package/dist/cjs/classes/sandbox.js +57 -47
- package/dist/cjs/classes/sandbox.js.map +1 -1
- package/dist/cjs/classes/scripts.js +46 -40
- package/dist/cjs/classes/scripts.js.map +1 -1
- package/dist/cjs/classes/worker.js +23 -4
- package/dist/cjs/classes/worker.js.map +1 -1
- package/dist/cjs/commands/addDelayedJob-6.lua +7 -7
- package/dist/cjs/commands/addJobScheduler-2.lua +75 -0
- package/dist/cjs/commands/addParentJob-4.lua +7 -7
- package/dist/cjs/commands/addPrioritizedJob-8.lua +7 -7
- package/dist/cjs/commands/addStandardJob-8.lua +7 -7
- package/dist/cjs/commands/{cleanJobsInSet-2.lua → cleanJobsInSet-3.lua} +6 -5
- package/dist/cjs/commands/drain-5.lua +41 -0
- package/dist/cjs/commands/includes/cleanSet.lua +50 -29
- package/dist/cjs/commands/includes/deduplicateJob.lua +25 -0
- package/dist/cjs/commands/includes/removeZSetJobs.lua +13 -1
- package/dist/cjs/commands/moveStalledJobsToWait-9.lua +2 -4
- package/dist/cjs/commands/removeJob-2.lua +17 -9
- package/dist/cjs/commands/removeJobScheduler-3.lua +43 -0
- package/dist/cjs/enums/error-code.js +1 -0
- package/dist/cjs/enums/error-code.js.map +1 -1
- package/dist/cjs/scripts/addDelayedJob-6.js +18 -16
- package/dist/cjs/scripts/addDelayedJob-6.js.map +1 -1
- package/dist/cjs/scripts/addJobScheduler-2.js +223 -0
- package/dist/cjs/scripts/addJobScheduler-2.js.map +1 -0
- package/dist/cjs/scripts/addParentJob-4.js +18 -16
- package/dist/cjs/scripts/addParentJob-4.js.map +1 -1
- package/dist/cjs/scripts/addPrioritizedJob-8.js +18 -16
- package/dist/cjs/scripts/addPrioritizedJob-8.js.map +1 -1
- package/dist/cjs/scripts/addStandardJob-8.js +18 -16
- package/dist/cjs/scripts/addStandardJob-8.js.map +1 -1
- package/dist/cjs/scripts/{cleanJobsInSet-2.js → cleanJobsInSet-3.js} +57 -35
- package/dist/cjs/scripts/{cleanJobsInSet-2.js.map → cleanJobsInSet-3.js.map} +1 -1
- package/dist/cjs/scripts/{drain-4.js → drain-5.js} +28 -7
- package/dist/cjs/scripts/drain-5.js.map +1 -0
- package/dist/cjs/scripts/index.js +4 -2
- package/dist/cjs/scripts/index.js.map +1 -1
- package/dist/cjs/scripts/moveStalledJobsToWait-9.js +2 -3
- package/dist/cjs/scripts/moveStalledJobsToWait-9.js.map +1 -1
- package/dist/cjs/scripts/obliterate-2.js +11 -1
- package/dist/cjs/scripts/obliterate-2.js.map +1 -1
- package/dist/cjs/scripts/removeJob-2.js +16 -9
- package/dist/cjs/scripts/removeJob-2.js.map +1 -1
- package/dist/cjs/scripts/removeJobScheduler-3.js +49 -0
- package/dist/cjs/scripts/removeJobScheduler-3.js.map +1 -0
- package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/cjs/utils.js +25 -1
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/classes/child-pool.d.ts +1 -1
- package/dist/esm/classes/child-pool.js +2 -2
- package/dist/esm/classes/child-pool.js.map +1 -1
- package/dist/esm/classes/job-scheduler.d.ts +30 -0
- package/dist/esm/classes/job-scheduler.js +135 -0
- package/dist/esm/classes/job-scheduler.js.map +1 -0
- package/dist/esm/classes/job.d.ts +6 -1
- package/dist/esm/classes/job.js +7 -3
- package/dist/esm/classes/job.js.map +1 -1
- package/dist/esm/classes/queue-events.d.ts +10 -0
- package/dist/esm/classes/queue-events.js.map +1 -1
- package/dist/esm/classes/queue-getters.d.ts +7 -0
- package/dist/esm/classes/queue-getters.js +10 -0
- package/dist/esm/classes/queue-getters.js.map +1 -1
- package/dist/esm/classes/queue-keys.js +1 -1
- package/dist/esm/classes/queue-keys.js.map +1 -1
- package/dist/esm/classes/queue.d.ts +54 -0
- package/dist/esm/classes/queue.js +74 -0
- package/dist/esm/classes/queue.js.map +1 -1
- package/dist/esm/classes/repeat.js +9 -10
- package/dist/esm/classes/repeat.js.map +1 -1
- package/dist/esm/classes/sandbox.js +57 -47
- package/dist/esm/classes/sandbox.js.map +1 -1
- package/dist/esm/classes/scripts.d.ts +3 -7
- package/dist/esm/classes/scripts.js +47 -41
- package/dist/esm/classes/scripts.js.map +1 -1
- package/dist/esm/classes/worker.d.ts +3 -0
- package/dist/esm/classes/worker.js +23 -4
- package/dist/esm/classes/worker.js.map +1 -1
- package/dist/esm/commands/addDelayedJob-6.lua +7 -7
- package/dist/esm/commands/addJobScheduler-2.lua +75 -0
- package/dist/esm/commands/addParentJob-4.lua +7 -7
- package/dist/esm/commands/addPrioritizedJob-8.lua +7 -7
- package/dist/esm/commands/addStandardJob-8.lua +7 -7
- package/dist/esm/commands/{cleanJobsInSet-2.lua → cleanJobsInSet-3.lua} +6 -5
- package/dist/esm/commands/drain-5.lua +41 -0
- package/dist/esm/commands/includes/cleanSet.lua +50 -29
- package/dist/esm/commands/includes/deduplicateJob.lua +25 -0
- package/dist/esm/commands/includes/removeZSetJobs.lua +13 -1
- package/dist/esm/commands/moveStalledJobsToWait-9.lua +2 -4
- package/dist/esm/commands/removeJob-2.lua +17 -9
- package/dist/esm/commands/removeJobScheduler-3.lua +43 -0
- package/dist/esm/enums/error-code.d.ts +2 -1
- package/dist/esm/enums/error-code.js +1 -0
- package/dist/esm/enums/error-code.js.map +1 -1
- package/dist/esm/interfaces/job-json.d.ts +1 -0
- package/dist/esm/scripts/addDelayedJob-6.js +18 -16
- package/dist/esm/scripts/addDelayedJob-6.js.map +1 -1
- package/dist/esm/scripts/addJobScheduler-2.d.ts +5 -0
- package/dist/esm/scripts/addJobScheduler-2.js +220 -0
- package/dist/esm/scripts/addJobScheduler-2.js.map +1 -0
- package/dist/esm/scripts/addParentJob-4.js +18 -16
- package/dist/esm/scripts/addParentJob-4.js.map +1 -1
- package/dist/esm/scripts/addPrioritizedJob-8.js +18 -16
- package/dist/esm/scripts/addPrioritizedJob-8.js.map +1 -1
- package/dist/esm/scripts/addStandardJob-8.js +18 -16
- package/dist/esm/scripts/addStandardJob-8.js.map +1 -1
- package/dist/esm/scripts/{cleanJobsInSet-2.js → cleanJobsInSet-3.js} +57 -35
- package/dist/esm/scripts/{cleanJobsInSet-2.js.map → cleanJobsInSet-3.js.map} +1 -1
- package/dist/esm/scripts/{drain-4.js → drain-5.js} +28 -7
- package/dist/esm/scripts/drain-5.js.map +1 -0
- package/dist/esm/scripts/index.d.ts +4 -2
- package/dist/esm/scripts/index.js +4 -2
- package/dist/esm/scripts/index.js.map +1 -1
- package/dist/esm/scripts/moveStalledJobsToWait-9.js +2 -3
- package/dist/esm/scripts/moveStalledJobsToWait-9.js.map +1 -1
- package/dist/esm/scripts/obliterate-2.js +11 -1
- package/dist/esm/scripts/obliterate-2.js.map +1 -1
- package/dist/esm/scripts/removeJob-2.js +16 -9
- package/dist/esm/scripts/removeJob-2.js.map +1 -1
- package/dist/esm/scripts/removeJobScheduler-3.d.ts +5 -0
- package/dist/esm/scripts/removeJobScheduler-3.js +46 -0
- package/dist/esm/scripts/removeJobScheduler-3.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/types/job-options.d.ts +5 -0
- package/dist/esm/utils.d.ts +7 -0
- package/dist/esm/utils.js +23 -0
- package/dist/esm/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/commands/drain-4.lua +0 -26
- package/dist/cjs/commands/includes/debounceJob.lua +0 -23
- package/dist/cjs/scripts/drain-4.js.map +0 -1
- package/dist/esm/commands/drain-4.lua +0 -26
- package/dist/esm/commands/includes/debounceJob.lua +0 -23
- package/dist/esm/scripts/drain-4.js.map +0 -1
- /package/dist/esm/scripts/{cleanJobsInSet-2.d.ts → cleanJobsInSet-3.d.ts} +0 -0
- /package/dist/esm/scripts/{drain-4.d.ts → drain-5.d.ts} +0 -0
@@ -6,6 +6,7 @@ const content = `--[[
|
|
6
6
|
Input:
|
7
7
|
KEYS[1] set key,
|
8
8
|
KEYS[2] events stream key
|
9
|
+
KEYS[3] job schedulers key
|
9
10
|
ARGV[1] jobKey prefix
|
10
11
|
ARGV[2] timestamp
|
11
12
|
ARGV[3] limit the number of jobs to be removed. 0 is unlimited
|
@@ -237,7 +238,7 @@ end
|
|
237
238
|
--[[
|
238
239
|
Function to clean job set.
|
239
240
|
Returns jobIds and deleted count number.
|
240
|
-
]]
|
241
|
+
]]
|
241
242
|
-- Includes
|
242
243
|
--[[
|
243
244
|
Function to loop in batches.
|
@@ -268,54 +269,75 @@ local function getJobsInZset(zsetKey, rangeEnd, limit)
|
|
268
269
|
return rcall("ZRANGEBYSCORE", zsetKey, 0, rangeEnd)
|
269
270
|
end
|
270
271
|
end
|
271
|
-
local function
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
if limit > 0 and deletedCount >= limit then
|
278
|
-
break
|
272
|
+
local function isJobSchedulerJob(jobId, jobSchedulersKey)
|
273
|
+
if jobSchedulersKey then
|
274
|
+
local jobSchedulerId = jobId:match("repeat:(.*):%d+")
|
275
|
+
if jobSchedulerId then
|
276
|
+
return rcall("ZSCORE", jobSchedulersKey, jobSchedulerId)
|
277
|
+
end
|
279
278
|
end
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
279
|
+
return false
|
280
|
+
end
|
281
|
+
local function cleanSet(
|
282
|
+
setKey,
|
283
|
+
jobKeyPrefix,
|
284
|
+
rangeEnd,
|
285
|
+
timestamp,
|
286
|
+
limit,
|
287
|
+
attributes,
|
288
|
+
isFinished,
|
289
|
+
jobSchedulersKey)
|
290
|
+
local jobs = getJobsInZset(setKey, rangeEnd, limit)
|
291
|
+
local deleted = {}
|
292
|
+
local deletedCount = 0
|
293
|
+
local jobTS
|
294
|
+
for i, job in ipairs(jobs) do
|
295
|
+
if limit > 0 and deletedCount >= limit then
|
296
|
+
break
|
297
|
+
end
|
298
|
+
-- Extract a Job Scheduler Id from jobId ("repeat:job-scheduler-id:millis")
|
299
|
+
-- and check if it is in the scheduled jobs
|
300
|
+
if not isJobSchedulerJob(job, jobSchedulersKey) then
|
301
|
+
local jobKey = jobKeyPrefix .. job
|
302
|
+
if isFinished then
|
303
|
+
removeJob(job, true, jobKeyPrefix, true --[[remove debounce key]] )
|
304
|
+
deletedCount = deletedCount + 1
|
305
|
+
table.insert(deleted, job)
|
306
|
+
else
|
307
|
+
-- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
|
308
|
+
jobTS = getTimestamp(jobKey, attributes)
|
309
|
+
if (not jobTS or jobTS <= timestamp) then
|
310
|
+
removeJob(job, true, jobKeyPrefix, true --[[remove debounce key]] )
|
311
|
+
deletedCount = deletedCount + 1
|
312
|
+
table.insert(deleted, job)
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
293
316
|
end
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
317
|
+
if (#deleted > 0) then
|
318
|
+
for from, to in batches(#deleted, 7000) do
|
319
|
+
rcall("ZREM", setKey, unpack(deleted, from, to))
|
320
|
+
end
|
298
321
|
end
|
299
|
-
|
300
|
-
return {deleted, deletedCount}
|
322
|
+
return {deleted, deletedCount}
|
301
323
|
end
|
302
324
|
local result
|
303
325
|
if ARGV[4] == "active" then
|
304
|
-
result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false)
|
326
|
+
result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false --[[ hasFinished ]])
|
305
327
|
elseif ARGV[4] == "delayed" then
|
306
328
|
rangeEnd = "+inf"
|
307
329
|
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
308
|
-
{"processedOn", "timestamp"}, false)
|
330
|
+
{"processedOn", "timestamp"}, false --[[ hasFinished ]], KEYS[3])
|
309
331
|
elseif ARGV[4] == "prioritized" then
|
310
332
|
rangeEnd = "+inf"
|
311
333
|
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
312
|
-
{"timestamp"}, false)
|
334
|
+
{"timestamp"}, false --[[ hasFinished ]])
|
313
335
|
elseif ARGV[4] == "wait" or ARGV[4] == "paused" then
|
314
|
-
result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true)
|
336
|
+
result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true --[[ hasFinished ]])
|
315
337
|
else
|
316
338
|
rangeEnd = ARGV[2]
|
317
339
|
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
318
|
-
{"finishedOn"}, true)
|
340
|
+
{"finishedOn"}, true --[[ hasFinished ]])
|
319
341
|
end
|
320
342
|
rcall("XADD", KEYS[2], "*", "event", "cleaned", "count", result[2])
|
321
343
|
return result[1]
|
@@ -323,6 +345,6 @@ return result[1]
|
|
323
345
|
exports.cleanJobsInSet = {
|
324
346
|
name: 'cleanJobsInSet',
|
325
347
|
content,
|
326
|
-
keys:
|
348
|
+
keys: 3,
|
327
349
|
};
|
328
|
-
//# sourceMappingURL=cleanJobsInSet-
|
350
|
+
//# sourceMappingURL=cleanJobsInSet-3.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cleanJobsInSet-
|
1
|
+
{"version":3,"file":"cleanJobsInSet-3.js","sourceRoot":"","sources":["../../../src/scripts/cleanJobsInSet-3.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoVf,CAAC;AACW,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -9,6 +9,7 @@ const content = `--[[
|
|
9
9
|
KEYS[2] 'paused'
|
10
10
|
KEYS[3] 'delayed'
|
11
11
|
KEYS[4] 'prioritized'
|
12
|
+
KEYS[5] 'jobschedulers' (repeat)
|
12
13
|
ARGV[1] queue key prefix
|
13
14
|
]]
|
14
15
|
local rcall = redis.call
|
@@ -212,8 +213,18 @@ end
|
|
212
213
|
local function getZSetItems(keyName, max)
|
213
214
|
return rcall('ZRANGE', keyName, 0, max - 1)
|
214
215
|
end
|
215
|
-
local function removeZSetJobs(keyName, hard, baseKey, max)
|
216
|
+
local function removeZSetJobs(keyName, hard, baseKey, max, jobsToIgnore)
|
216
217
|
local jobs = getZSetItems(keyName, max)
|
218
|
+
-- filter out jobs to ignore
|
219
|
+
if jobsToIgnore then
|
220
|
+
local filteredJobs = {}
|
221
|
+
for i = 1, #jobs do
|
222
|
+
if not jobsToIgnore[jobs[i]] then
|
223
|
+
table.insert(filteredJobs, jobs[i])
|
224
|
+
end
|
225
|
+
end
|
226
|
+
jobs = filteredJobs
|
227
|
+
end
|
217
228
|
local count = removeJobs(jobs, hard, baseKey, max)
|
218
229
|
if(#jobs > 0) then
|
219
230
|
for from, to in batches(#jobs, 7000) do
|
@@ -222,16 +233,26 @@ local function removeZSetJobs(keyName, hard, baseKey, max)
|
|
222
233
|
end
|
223
234
|
return count
|
224
235
|
end
|
225
|
-
removeListJobs(KEYS[1], true, queueBaseKey, 0) --wait
|
226
|
-
removeListJobs(KEYS[2], true, queueBaseKey, 0) --paused
|
236
|
+
removeListJobs(KEYS[1], true, queueBaseKey, 0) -- wait
|
237
|
+
removeListJobs(KEYS[2], true, queueBaseKey, 0) -- paused
|
227
238
|
if KEYS[3] ~= "" then
|
228
|
-
|
239
|
+
-- We must not remove delayed jobs if they are associated to a job scheduler.
|
240
|
+
local scheduledJobs = {}
|
241
|
+
local jobSchedulers = rcall("ZRANGE", KEYS[5], 0, -1, "WITHSCORES")
|
242
|
+
-- For every job scheduler, get the current delayed job id.
|
243
|
+
for i = 1, #jobSchedulers, 2 do
|
244
|
+
local jobSchedulerId = jobSchedulers[i]
|
245
|
+
local jobSchedulerMillis = jobSchedulers[i + 1]
|
246
|
+
local delayedJobId = "repeat:" .. jobSchedulerId .. ":" .. jobSchedulerMillis
|
247
|
+
scheduledJobs[delayedJobId] = true
|
248
|
+
end
|
249
|
+
removeZSetJobs(KEYS[3], true, queueBaseKey, 0, scheduledJobs) -- delayed
|
229
250
|
end
|
230
|
-
removeZSetJobs(KEYS[4], true, queueBaseKey, 0) --prioritized
|
251
|
+
removeZSetJobs(KEYS[4], true, queueBaseKey, 0) -- prioritized
|
231
252
|
`;
|
232
253
|
exports.drain = {
|
233
254
|
name: 'drain',
|
234
255
|
content,
|
235
|
-
keys:
|
256
|
+
keys: 5,
|
236
257
|
};
|
237
|
-
//# sourceMappingURL=drain-
|
258
|
+
//# sourceMappingURL=drain-5.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"drain-5.js","sourceRoot":"","sources":["../../../src/scripts/drain-5.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwPf,CAAC;AACW,QAAA,KAAK,GAAG;IACnB,IAAI,EAAE,OAAO;IACb,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -2,6 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
const tslib_1 = require("tslib");
|
4
4
|
tslib_1.__exportStar(require("./addDelayedJob-6"), exports);
|
5
|
+
tslib_1.__exportStar(require("./addJobScheduler-2"), exports);
|
5
6
|
tslib_1.__exportStar(require("./addLog-2"), exports);
|
6
7
|
tslib_1.__exportStar(require("./addParentJob-4"), exports);
|
7
8
|
tslib_1.__exportStar(require("./addPrioritizedJob-8"), exports);
|
@@ -9,8 +10,8 @@ tslib_1.__exportStar(require("./addRepeatableJob-2"), exports);
|
|
9
10
|
tslib_1.__exportStar(require("./addStandardJob-8"), exports);
|
10
11
|
tslib_1.__exportStar(require("./changeDelay-4"), exports);
|
11
12
|
tslib_1.__exportStar(require("./changePriority-7"), exports);
|
12
|
-
tslib_1.__exportStar(require("./cleanJobsInSet-
|
13
|
-
tslib_1.__exportStar(require("./drain-
|
13
|
+
tslib_1.__exportStar(require("./cleanJobsInSet-3"), exports);
|
14
|
+
tslib_1.__exportStar(require("./drain-5"), exports);
|
14
15
|
tslib_1.__exportStar(require("./extendLock-2"), exports);
|
15
16
|
tslib_1.__exportStar(require("./getCounts-1"), exports);
|
16
17
|
tslib_1.__exportStar(require("./getCountsPerPriority-4"), exports);
|
@@ -35,6 +36,7 @@ tslib_1.__exportStar(require("./promote-9"), exports);
|
|
35
36
|
tslib_1.__exportStar(require("./releaseLock-1"), exports);
|
36
37
|
tslib_1.__exportStar(require("./removeChildDependency-1"), exports);
|
37
38
|
tslib_1.__exportStar(require("./removeJob-2"), exports);
|
39
|
+
tslib_1.__exportStar(require("./removeJobScheduler-3"), exports);
|
38
40
|
tslib_1.__exportStar(require("./removeRepeatable-3"), exports);
|
39
41
|
tslib_1.__exportStar(require("./reprocessJob-8"), exports);
|
40
42
|
tslib_1.__exportStar(require("./retryJob-11"), exports);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scripts/index.ts"],"names":[],"mappings":";;;AAAA,4DAAkC;AAClC,qDAA2B;AAC3B,2DAAiC;AACjC,gEAAsC;AACtC,+DAAqC;AACrC,6DAAmC;AACnC,0DAAgC;AAChC,6DAAmC;AACnC,6DAAmC;AACnC,oDAA0B;AAC1B,yDAA+B;AAC/B,wDAA8B;AAC9B,mEAAyC;AACzC,wDAA8B;AAC9B,8DAAoC;AACpC,uDAA6B;AAC7B,yDAA+B;AAC/B,yDAA+B;AAC/B,0DAAgC;AAChC,sDAA4B;AAC5B,uEAA6C;AAC7C,6DAAmC;AACnC,oEAA0C;AAC1C,4DAAkC;AAClC,4DAAkC;AAClC,8DAAoC;AACpC,oEAA0C;AAC1C,yDAA+B;AAC/B,uDAA6B;AAC7B,oDAA0B;AAC1B,sDAA4B;AAC5B,0DAAgC;AAChC,oEAA0C;AAC1C,wDAA8B;AAC9B,+DAAqC;AACrC,2DAAiC;AACjC,wDAA8B;AAC9B,6DAAmC;AACnC,yDAA+B;AAC/B,6DAAmC;AACnC,wEAA8C"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scripts/index.ts"],"names":[],"mappings":";;;AAAA,4DAAkC;AAClC,8DAAoC;AACpC,qDAA2B;AAC3B,2DAAiC;AACjC,gEAAsC;AACtC,+DAAqC;AACrC,6DAAmC;AACnC,0DAAgC;AAChC,6DAAmC;AACnC,6DAAmC;AACnC,oDAA0B;AAC1B,yDAA+B;AAC/B,wDAA8B;AAC9B,mEAAyC;AACzC,wDAA8B;AAC9B,8DAAoC;AACpC,uDAA6B;AAC7B,yDAA+B;AAC/B,yDAA+B;AAC/B,0DAAgC;AAChC,sDAA4B;AAC5B,uEAA6C;AAC7C,6DAAmC;AACnC,oEAA0C;AAC1C,4DAAkC;AAClC,4DAAkC;AAClC,8DAAoC;AACpC,oEAA0C;AAC1C,yDAA+B;AAC/B,uDAA6B;AAC7B,oDAA0B;AAC1B,sDAA4B;AAC5B,0DAAgC;AAChC,oEAA0C;AAC1C,wDAA8B;AAC9B,iEAAuC;AACvC,+DAAqC;AACrC,2DAAiC;AACjC,wDAA8B;AAC9B,6DAAmC;AACnC,yDAA+B;AAC/B,6DAAmC;AACnC,wEAA8C"}
|
@@ -393,7 +393,7 @@ local metaKey = KEYS[6]
|
|
393
393
|
local pausedKey = KEYS[7]
|
394
394
|
local markerKey = KEYS[8]
|
395
395
|
local eventStreamKey = KEYS[9]
|
396
|
-
local maxStalledJobCount = ARGV[1]
|
396
|
+
local maxStalledJobCount = tonumber(ARGV[1])
|
397
397
|
local queueKeyPrefix = ARGV[2]
|
398
398
|
local timestamp = ARGV[3]
|
399
399
|
local maxCheckTime = ARGV[4]
|
@@ -407,7 +407,6 @@ local stalled = {}
|
|
407
407
|
local failed = {}
|
408
408
|
if (#stalling > 0) then
|
409
409
|
rcall('DEL', stalledKey)
|
410
|
-
local MAX_STALLED_JOB_COUNT = tonumber(maxStalledJobCount)
|
411
410
|
-- Remove from active list
|
412
411
|
for i, jobId in ipairs(stalling) do
|
413
412
|
-- Markers in waitlist DEPRECATED in v5: Remove in v6.
|
@@ -424,7 +423,7 @@ if (#stalling > 0) then
|
|
424
423
|
-- If this job has been stalled too many times, such as if it crashes the worker, then fail it.
|
425
424
|
local stalledCount =
|
426
425
|
rcall("HINCRBY", jobKey, "stalledCounter", 1)
|
427
|
-
if (stalledCount >
|
426
|
+
if (stalledCount > maxStalledJobCount) then
|
428
427
|
local jobAttributes = rcall("HMGET", jobKey, "opts", "parent", "deid")
|
429
428
|
local rawOpts = jobAttributes[1]
|
430
429
|
local rawParentData = jobAttributes[2]
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"moveStalledJobsToWait-9.js","sourceRoot":"","sources":["../../../src/scripts/moveStalledJobsToWait-9.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"moveStalledJobsToWait-9.js","sourceRoot":"","sources":["../../../src/scripts/moveStalledJobsToWait-9.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA2fS,CAAC;AACb,QAAA,qBAAqB,GAAG;IACnC,IAAI,EAAE,uBAAuB;IAC7B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -218,8 +218,18 @@ end
|
|
218
218
|
local function getZSetItems(keyName, max)
|
219
219
|
return rcall('ZRANGE', keyName, 0, max - 1)
|
220
220
|
end
|
221
|
-
local function removeZSetJobs(keyName, hard, baseKey, max)
|
221
|
+
local function removeZSetJobs(keyName, hard, baseKey, max, jobsToIgnore)
|
222
222
|
local jobs = getZSetItems(keyName, max)
|
223
|
+
-- filter out jobs to ignore
|
224
|
+
if jobsToIgnore then
|
225
|
+
local filteredJobs = {}
|
226
|
+
for i = 1, #jobs do
|
227
|
+
if not jobsToIgnore[jobs[i]] then
|
228
|
+
table.insert(filteredJobs, jobs[i])
|
229
|
+
end
|
230
|
+
end
|
231
|
+
jobs = filteredJobs
|
232
|
+
end
|
223
233
|
local count = removeJobs(jobs, hard, baseKey, max)
|
224
234
|
if(#jobs > 0) then
|
225
235
|
for from, to in batches(#jobs, 7000) do
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"obliterate-2.js","sourceRoot":"","sources":["../../../src/scripts/obliterate-2.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"obliterate-2.js","sourceRoot":"","sources":["../../../src/scripts/obliterate-2.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Tf,CAAC;AACW,QAAA,UAAU,GAAG;IACxB,IAAI,EAAE,YAAY;IAClB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -228,20 +228,20 @@ local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debou
|
|
228
228
|
end
|
229
229
|
return false
|
230
230
|
end
|
231
|
-
local function removeJob(
|
231
|
+
local function removeJob(prefix, jobId, parentKey, removeChildren)
|
232
232
|
local jobKey = prefix .. jobId;
|
233
233
|
removeParentDependencyKey(jobKey, false, parentKey, nil)
|
234
234
|
if removeChildren == "1" then
|
235
235
|
-- Check if this job has children
|
236
236
|
-- If so, we are going to try to remove the children recursively in deep first way because
|
237
237
|
-- if some job is locked we must exit with and error.
|
238
|
-
--local countProcessed = rcall("HLEN", jobKey .. ":processed")
|
238
|
+
-- local countProcessed = rcall("HLEN", jobKey .. ":processed")
|
239
239
|
local processed = rcall("HGETALL", jobKey .. ":processed")
|
240
240
|
if (#processed > 0) then
|
241
241
|
for i = 1, #processed, 2 do
|
242
242
|
local childJobId = getJobIdFromKey(processed[i])
|
243
243
|
local childJobPrefix = getJobKeyPrefix(processed[i], childJobId)
|
244
|
-
removeJob(
|
244
|
+
removeJob(childJobPrefix, childJobId, jobKey, removeChildren)
|
245
245
|
end
|
246
246
|
end
|
247
247
|
local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies")
|
@@ -250,7 +250,7 @@ local function removeJob( prefix, jobId, parentKey, removeChildren)
|
|
250
250
|
-- We need to get the jobId for this job.
|
251
251
|
local childJobId = getJobIdFromKey(childJobKey)
|
252
252
|
local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId)
|
253
|
-
removeJob(
|
253
|
+
removeJob(childJobPrefix, childJobId, jobKey, removeChildren)
|
254
254
|
end
|
255
255
|
end
|
256
256
|
local failed = rcall("HGETALL", jobKey .. ":failed")
|
@@ -258,7 +258,7 @@ local function removeJob( prefix, jobId, parentKey, removeChildren)
|
|
258
258
|
for i = 1, #failed, 2 do
|
259
259
|
local childJobId = getJobIdFromKey(failed[i])
|
260
260
|
local childJobPrefix = getJobKeyPrefix(failed[i], childJobId)
|
261
|
-
removeJob(
|
261
|
+
removeJob(childJobPrefix, childJobId, jobKey, removeChildren)
|
262
262
|
end
|
263
263
|
end
|
264
264
|
end
|
@@ -266,13 +266,20 @@ local function removeJob( prefix, jobId, parentKey, removeChildren)
|
|
266
266
|
removeDebounceKey(prefix, jobKey)
|
267
267
|
if removeJobKeys(jobKey) > 0 then
|
268
268
|
local maxEvents = getOrSetMaxEvents(KEYS[2])
|
269
|
-
rcall("XADD", prefix .. "events", "MAXLEN", "~", maxEvents, "*", "event", "removed",
|
270
|
-
|
269
|
+
rcall("XADD", prefix .. "events", "MAXLEN", "~", maxEvents, "*", "event", "removed", "jobId", jobId, "prev",
|
270
|
+
prev)
|
271
271
|
end
|
272
272
|
end
|
273
273
|
local prefix = KEYS[1]
|
274
|
-
|
275
|
-
|
274
|
+
local jobId = ARGV[1]
|
275
|
+
local shouldRemoveChildren = ARGV[2]
|
276
|
+
local jobKey = prefix .. jobId
|
277
|
+
-- Check if the job belongs to a job scheduler and it is in delayed state.
|
278
|
+
if rcall("ZSCORE", prefix .. "delayed", jobId) and rcall("HGET", jobKey, "rjk") then
|
279
|
+
return -8 -- Return error code as the job is part of a job scheduler and is in delayed state.
|
280
|
+
end
|
281
|
+
if not isLocked(prefix, jobId, shouldRemoveChildren) then
|
282
|
+
removeJob(prefix, jobId, nil, shouldRemoveChildren)
|
276
283
|
return 1
|
277
284
|
end
|
278
285
|
return 0
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"removeJob-2.js","sourceRoot":"","sources":["../../../src/scripts/removeJob-2.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"removeJob-2.js","sourceRoot":"","sources":["../../../src/scripts/removeJob-2.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Rf,CAAC;AACW,QAAA,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW;IACjB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.removeJobScheduler = void 0;
|
4
|
+
const content = `--[[
|
5
|
+
Removes a repeatable job
|
6
|
+
Input:
|
7
|
+
KEYS[1] job schedulers key
|
8
|
+
KEYS[2] delayed jobs key
|
9
|
+
KEYS[3] events key
|
10
|
+
ARGV[1] job scheduler id
|
11
|
+
ARGV[2] prefix key
|
12
|
+
Output:
|
13
|
+
0 - OK
|
14
|
+
1 - Missing repeat job
|
15
|
+
Events:
|
16
|
+
'removed'
|
17
|
+
]]
|
18
|
+
local rcall = redis.call
|
19
|
+
-- Includes
|
20
|
+
--[[
|
21
|
+
Function to remove job keys.
|
22
|
+
]]
|
23
|
+
local function removeJobKeys(jobKey)
|
24
|
+
return rcall("DEL", jobKey, jobKey .. ':logs',
|
25
|
+
jobKey .. ':dependencies', jobKey .. ':processed', jobKey .. ':failed')
|
26
|
+
end
|
27
|
+
local jobSchedulerId = ARGV[1]
|
28
|
+
local prefix = ARGV[2]
|
29
|
+
local millis = rcall("ZSCORE", KEYS[1], jobSchedulerId)
|
30
|
+
if millis then
|
31
|
+
-- Delete next programmed job.
|
32
|
+
local delayedJobId = "repeat:" .. jobSchedulerId .. ":" .. millis
|
33
|
+
if(rcall("ZREM", KEYS[2], delayedJobId) == 1) then
|
34
|
+
removeJobKeys(prefix .. delayedJobId)
|
35
|
+
rcall("XADD", KEYS[3], "*", "event", "removed", "jobId", delayedJobId, "prev", "delayed")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
if(rcall("ZREM", KEYS[1], jobSchedulerId) == 1) then
|
39
|
+
rcall("DEL", KEYS[1] .. ":" .. jobSchedulerId)
|
40
|
+
return 0
|
41
|
+
end
|
42
|
+
return 1
|
43
|
+
`;
|
44
|
+
exports.removeJobScheduler = {
|
45
|
+
name: 'removeJobScheduler',
|
46
|
+
content,
|
47
|
+
keys: 3,
|
48
|
+
};
|
49
|
+
//# sourceMappingURL=removeJobScheduler-3.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"removeJobScheduler-3.js","sourceRoot":"","sources":["../../../src/scripts/removeJobScheduler-3.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCf,CAAC;AACW,QAAA,kBAAkB,GAAG;IAChC,IAAI,EAAE,oBAAoB;IAC1B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|