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.
Files changed (150) hide show
  1. package/dist/cjs/classes/child-pool.js +2 -2
  2. package/dist/cjs/classes/child-pool.js.map +1 -1
  3. package/dist/cjs/classes/job-scheduler.js +140 -0
  4. package/dist/cjs/classes/job-scheduler.js.map +1 -0
  5. package/dist/cjs/classes/job.js +6 -2
  6. package/dist/cjs/classes/job.js.map +1 -1
  7. package/dist/cjs/classes/queue-events.js.map +1 -1
  8. package/dist/cjs/classes/queue-getters.js +10 -0
  9. package/dist/cjs/classes/queue-getters.js.map +1 -1
  10. package/dist/cjs/classes/queue-keys.js +1 -1
  11. package/dist/cjs/classes/queue-keys.js.map +1 -1
  12. package/dist/cjs/classes/queue.js +74 -0
  13. package/dist/cjs/classes/queue.js.map +1 -1
  14. package/dist/cjs/classes/repeat.js +9 -10
  15. package/dist/cjs/classes/repeat.js.map +1 -1
  16. package/dist/cjs/classes/sandbox.js +57 -47
  17. package/dist/cjs/classes/sandbox.js.map +1 -1
  18. package/dist/cjs/classes/scripts.js +46 -40
  19. package/dist/cjs/classes/scripts.js.map +1 -1
  20. package/dist/cjs/classes/worker.js +23 -4
  21. package/dist/cjs/classes/worker.js.map +1 -1
  22. package/dist/cjs/commands/addDelayedJob-6.lua +7 -7
  23. package/dist/cjs/commands/addJobScheduler-2.lua +75 -0
  24. package/dist/cjs/commands/addParentJob-4.lua +7 -7
  25. package/dist/cjs/commands/addPrioritizedJob-8.lua +7 -7
  26. package/dist/cjs/commands/addStandardJob-8.lua +7 -7
  27. package/dist/cjs/commands/{cleanJobsInSet-2.lua → cleanJobsInSet-3.lua} +6 -5
  28. package/dist/cjs/commands/drain-5.lua +41 -0
  29. package/dist/cjs/commands/includes/cleanSet.lua +50 -29
  30. package/dist/cjs/commands/includes/deduplicateJob.lua +25 -0
  31. package/dist/cjs/commands/includes/removeZSetJobs.lua +13 -1
  32. package/dist/cjs/commands/moveStalledJobsToWait-9.lua +2 -4
  33. package/dist/cjs/commands/removeJob-2.lua +17 -9
  34. package/dist/cjs/commands/removeJobScheduler-3.lua +43 -0
  35. package/dist/cjs/enums/error-code.js +1 -0
  36. package/dist/cjs/enums/error-code.js.map +1 -1
  37. package/dist/cjs/scripts/addDelayedJob-6.js +18 -16
  38. package/dist/cjs/scripts/addDelayedJob-6.js.map +1 -1
  39. package/dist/cjs/scripts/addJobScheduler-2.js +223 -0
  40. package/dist/cjs/scripts/addJobScheduler-2.js.map +1 -0
  41. package/dist/cjs/scripts/addParentJob-4.js +18 -16
  42. package/dist/cjs/scripts/addParentJob-4.js.map +1 -1
  43. package/dist/cjs/scripts/addPrioritizedJob-8.js +18 -16
  44. package/dist/cjs/scripts/addPrioritizedJob-8.js.map +1 -1
  45. package/dist/cjs/scripts/addStandardJob-8.js +18 -16
  46. package/dist/cjs/scripts/addStandardJob-8.js.map +1 -1
  47. package/dist/cjs/scripts/{cleanJobsInSet-2.js → cleanJobsInSet-3.js} +57 -35
  48. package/dist/cjs/scripts/{cleanJobsInSet-2.js.map → cleanJobsInSet-3.js.map} +1 -1
  49. package/dist/cjs/scripts/{drain-4.js → drain-5.js} +28 -7
  50. package/dist/cjs/scripts/drain-5.js.map +1 -0
  51. package/dist/cjs/scripts/index.js +4 -2
  52. package/dist/cjs/scripts/index.js.map +1 -1
  53. package/dist/cjs/scripts/moveStalledJobsToWait-9.js +2 -3
  54. package/dist/cjs/scripts/moveStalledJobsToWait-9.js.map +1 -1
  55. package/dist/cjs/scripts/obliterate-2.js +11 -1
  56. package/dist/cjs/scripts/obliterate-2.js.map +1 -1
  57. package/dist/cjs/scripts/removeJob-2.js +16 -9
  58. package/dist/cjs/scripts/removeJob-2.js.map +1 -1
  59. package/dist/cjs/scripts/removeJobScheduler-3.js +49 -0
  60. package/dist/cjs/scripts/removeJobScheduler-3.js.map +1 -0
  61. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  62. package/dist/cjs/utils.js +25 -1
  63. package/dist/cjs/utils.js.map +1 -1
  64. package/dist/esm/classes/child-pool.d.ts +1 -1
  65. package/dist/esm/classes/child-pool.js +2 -2
  66. package/dist/esm/classes/child-pool.js.map +1 -1
  67. package/dist/esm/classes/job-scheduler.d.ts +30 -0
  68. package/dist/esm/classes/job-scheduler.js +135 -0
  69. package/dist/esm/classes/job-scheduler.js.map +1 -0
  70. package/dist/esm/classes/job.d.ts +6 -1
  71. package/dist/esm/classes/job.js +7 -3
  72. package/dist/esm/classes/job.js.map +1 -1
  73. package/dist/esm/classes/queue-events.d.ts +10 -0
  74. package/dist/esm/classes/queue-events.js.map +1 -1
  75. package/dist/esm/classes/queue-getters.d.ts +7 -0
  76. package/dist/esm/classes/queue-getters.js +10 -0
  77. package/dist/esm/classes/queue-getters.js.map +1 -1
  78. package/dist/esm/classes/queue-keys.js +1 -1
  79. package/dist/esm/classes/queue-keys.js.map +1 -1
  80. package/dist/esm/classes/queue.d.ts +54 -0
  81. package/dist/esm/classes/queue.js +74 -0
  82. package/dist/esm/classes/queue.js.map +1 -1
  83. package/dist/esm/classes/repeat.js +9 -10
  84. package/dist/esm/classes/repeat.js.map +1 -1
  85. package/dist/esm/classes/sandbox.js +57 -47
  86. package/dist/esm/classes/sandbox.js.map +1 -1
  87. package/dist/esm/classes/scripts.d.ts +3 -7
  88. package/dist/esm/classes/scripts.js +47 -41
  89. package/dist/esm/classes/scripts.js.map +1 -1
  90. package/dist/esm/classes/worker.d.ts +3 -0
  91. package/dist/esm/classes/worker.js +23 -4
  92. package/dist/esm/classes/worker.js.map +1 -1
  93. package/dist/esm/commands/addDelayedJob-6.lua +7 -7
  94. package/dist/esm/commands/addJobScheduler-2.lua +75 -0
  95. package/dist/esm/commands/addParentJob-4.lua +7 -7
  96. package/dist/esm/commands/addPrioritizedJob-8.lua +7 -7
  97. package/dist/esm/commands/addStandardJob-8.lua +7 -7
  98. package/dist/esm/commands/{cleanJobsInSet-2.lua → cleanJobsInSet-3.lua} +6 -5
  99. package/dist/esm/commands/drain-5.lua +41 -0
  100. package/dist/esm/commands/includes/cleanSet.lua +50 -29
  101. package/dist/esm/commands/includes/deduplicateJob.lua +25 -0
  102. package/dist/esm/commands/includes/removeZSetJobs.lua +13 -1
  103. package/dist/esm/commands/moveStalledJobsToWait-9.lua +2 -4
  104. package/dist/esm/commands/removeJob-2.lua +17 -9
  105. package/dist/esm/commands/removeJobScheduler-3.lua +43 -0
  106. package/dist/esm/enums/error-code.d.ts +2 -1
  107. package/dist/esm/enums/error-code.js +1 -0
  108. package/dist/esm/enums/error-code.js.map +1 -1
  109. package/dist/esm/interfaces/job-json.d.ts +1 -0
  110. package/dist/esm/scripts/addDelayedJob-6.js +18 -16
  111. package/dist/esm/scripts/addDelayedJob-6.js.map +1 -1
  112. package/dist/esm/scripts/addJobScheduler-2.d.ts +5 -0
  113. package/dist/esm/scripts/addJobScheduler-2.js +220 -0
  114. package/dist/esm/scripts/addJobScheduler-2.js.map +1 -0
  115. package/dist/esm/scripts/addParentJob-4.js +18 -16
  116. package/dist/esm/scripts/addParentJob-4.js.map +1 -1
  117. package/dist/esm/scripts/addPrioritizedJob-8.js +18 -16
  118. package/dist/esm/scripts/addPrioritizedJob-8.js.map +1 -1
  119. package/dist/esm/scripts/addStandardJob-8.js +18 -16
  120. package/dist/esm/scripts/addStandardJob-8.js.map +1 -1
  121. package/dist/esm/scripts/{cleanJobsInSet-2.js → cleanJobsInSet-3.js} +57 -35
  122. package/dist/esm/scripts/{cleanJobsInSet-2.js.map → cleanJobsInSet-3.js.map} +1 -1
  123. package/dist/esm/scripts/{drain-4.js → drain-5.js} +28 -7
  124. package/dist/esm/scripts/drain-5.js.map +1 -0
  125. package/dist/esm/scripts/index.d.ts +4 -2
  126. package/dist/esm/scripts/index.js +4 -2
  127. package/dist/esm/scripts/index.js.map +1 -1
  128. package/dist/esm/scripts/moveStalledJobsToWait-9.js +2 -3
  129. package/dist/esm/scripts/moveStalledJobsToWait-9.js.map +1 -1
  130. package/dist/esm/scripts/obliterate-2.js +11 -1
  131. package/dist/esm/scripts/obliterate-2.js.map +1 -1
  132. package/dist/esm/scripts/removeJob-2.js +16 -9
  133. package/dist/esm/scripts/removeJob-2.js.map +1 -1
  134. package/dist/esm/scripts/removeJobScheduler-3.d.ts +5 -0
  135. package/dist/esm/scripts/removeJobScheduler-3.js +46 -0
  136. package/dist/esm/scripts/removeJobScheduler-3.js.map +1 -0
  137. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  138. package/dist/esm/types/job-options.d.ts +5 -0
  139. package/dist/esm/utils.d.ts +7 -0
  140. package/dist/esm/utils.js +23 -0
  141. package/dist/esm/utils.js.map +1 -1
  142. package/package.json +1 -1
  143. package/dist/cjs/commands/drain-4.lua +0 -26
  144. package/dist/cjs/commands/includes/debounceJob.lua +0 -23
  145. package/dist/cjs/scripts/drain-4.js.map +0 -1
  146. package/dist/esm/commands/drain-4.lua +0 -26
  147. package/dist/esm/commands/includes/debounceJob.lua +0 -23
  148. package/dist/esm/scripts/drain-4.js.map +0 -1
  149. /package/dist/esm/scripts/{cleanJobsInSet-2.d.ts → cleanJobsInSet-3.d.ts} +0 -0
  150. /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 cleanSet(setKey, jobKeyPrefix, rangeEnd, timestamp, limit, attributes, isFinished)
272
- local jobs = getJobsInZset(setKey, rangeEnd, limit)
273
- local deleted = {}
274
- local deletedCount = 0
275
- local jobTS
276
- for i, job in ipairs(jobs) do
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
- local jobKey = jobKeyPrefix .. job
281
- if isFinished then
282
- removeJob(job, true, jobKeyPrefix, true --[[remove debounce key]])
283
- deletedCount = deletedCount + 1
284
- table.insert(deleted, job)
285
- else
286
- -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
287
- jobTS = getTimestamp(jobKey, attributes)
288
- if (not jobTS or jobTS <= timestamp) then
289
- removeJob(job, true, jobKeyPrefix, true --[[remove debounce key]])
290
- deletedCount = deletedCount + 1
291
- table.insert(deleted, job)
292
- end
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
- end
295
- if(#deleted > 0) then
296
- for from, to in batches(#deleted, 7000) do
297
- rcall("ZREM", setKey, unpack(deleted, from, to))
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
- end
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: 2,
348
+ keys: 3,
327
349
  };
328
- //# sourceMappingURL=cleanJobsInSet-2.js.map
350
+ //# sourceMappingURL=cleanJobsInSet-3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cleanJobsInSet-2.js","sourceRoot":"","sources":["../../../src/scripts/cleanJobsInSet-2.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Tf,CAAC;AACW,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
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
- removeZSetJobs(KEYS[3], true, queueBaseKey, 0) --delayed
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: 4,
256
+ keys: 5,
236
257
  };
237
- //# sourceMappingURL=drain-4.js.map
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-2"), exports);
13
- tslib_1.__exportStar(require("./drain-4"), exports);
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 > MAX_STALLED_JOB_COUNT) then
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA4fS,CAAC;AACb,QAAA,qBAAqB,GAAG;IACnC,IAAI,EAAE,uBAAuB;IAC7B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmTf,CAAC;AACW,QAAA,UAAU,GAAG;IACxB,IAAI,EAAE,YAAY;IAClB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
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( prefix, jobId, parentKey, removeChildren)
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( childJobPrefix, childJobId, jobKey, removeChildren )
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( childJobPrefix, childJobId, jobKey, removeChildren )
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( childJobPrefix, childJobId, jobKey, removeChildren )
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
- "jobId", jobId, "prev", prev)
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
- if not isLocked(prefix, ARGV[1], ARGV[2]) then
275
- removeJob(prefix, ARGV[1], nil, ARGV[2])
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmRf,CAAC;AACW,QAAA,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW;IACjB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
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"}