bullmq 5.15.0 → 5.16.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 (99) hide show
  1. package/dist/cjs/classes/job-scheduler.js +140 -0
  2. package/dist/cjs/classes/job-scheduler.js.map +1 -0
  3. package/dist/cjs/classes/job.js +1 -1
  4. package/dist/cjs/classes/job.js.map +1 -1
  5. package/dist/cjs/classes/queue.js +64 -0
  6. package/dist/cjs/classes/queue.js.map +1 -1
  7. package/dist/cjs/classes/repeat.js +9 -10
  8. package/dist/cjs/classes/repeat.js.map +1 -1
  9. package/dist/cjs/classes/scripts.js +45 -39
  10. package/dist/cjs/classes/scripts.js.map +1 -1
  11. package/dist/cjs/classes/worker.js +23 -4
  12. package/dist/cjs/classes/worker.js.map +1 -1
  13. package/dist/cjs/commands/addJobScheduler-2.lua +75 -0
  14. package/dist/cjs/commands/{cleanJobsInSet-2.lua → cleanJobsInSet-3.lua} +6 -5
  15. package/dist/cjs/commands/drain-5.lua +41 -0
  16. package/dist/cjs/commands/includes/cleanSet.lua +50 -29
  17. package/dist/cjs/commands/includes/removeZSetJobs.lua +13 -1
  18. package/dist/cjs/commands/moveStalledJobsToWait-9.lua +2 -4
  19. package/dist/cjs/commands/removeJob-2.lua +17 -9
  20. package/dist/cjs/commands/removeJobScheduler-3.lua +43 -0
  21. package/dist/cjs/enums/error-code.js +1 -0
  22. package/dist/cjs/enums/error-code.js.map +1 -1
  23. package/dist/cjs/scripts/addJobScheduler-2.js +223 -0
  24. package/dist/cjs/scripts/addJobScheduler-2.js.map +1 -0
  25. package/dist/cjs/scripts/{cleanJobsInSet-2.js → cleanJobsInSet-3.js} +57 -35
  26. package/dist/cjs/scripts/{cleanJobsInSet-2.js.map → cleanJobsInSet-3.js.map} +1 -1
  27. package/dist/cjs/scripts/{drain-4.js → drain-5.js} +28 -7
  28. package/dist/cjs/scripts/drain-5.js.map +1 -0
  29. package/dist/cjs/scripts/index.js +4 -2
  30. package/dist/cjs/scripts/index.js.map +1 -1
  31. package/dist/cjs/scripts/moveStalledJobsToWait-9.js +2 -3
  32. package/dist/cjs/scripts/moveStalledJobsToWait-9.js.map +1 -1
  33. package/dist/cjs/scripts/obliterate-2.js +11 -1
  34. package/dist/cjs/scripts/obliterate-2.js.map +1 -1
  35. package/dist/cjs/scripts/removeJob-2.js +16 -9
  36. package/dist/cjs/scripts/removeJob-2.js.map +1 -1
  37. package/dist/cjs/scripts/removeJobScheduler-3.js +49 -0
  38. package/dist/cjs/scripts/removeJobScheduler-3.js.map +1 -0
  39. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  40. package/dist/cjs/utils.js +25 -1
  41. package/dist/cjs/utils.js.map +1 -1
  42. package/dist/esm/classes/job-scheduler.d.ts +30 -0
  43. package/dist/esm/classes/job-scheduler.js +135 -0
  44. package/dist/esm/classes/job-scheduler.js.map +1 -0
  45. package/dist/esm/classes/job.d.ts +1 -1
  46. package/dist/esm/classes/job.js +2 -2
  47. package/dist/esm/classes/job.js.map +1 -1
  48. package/dist/esm/classes/queue.d.ts +47 -0
  49. package/dist/esm/classes/queue.js +64 -0
  50. package/dist/esm/classes/queue.js.map +1 -1
  51. package/dist/esm/classes/repeat.js +9 -10
  52. package/dist/esm/classes/repeat.js.map +1 -1
  53. package/dist/esm/classes/scripts.d.ts +3 -7
  54. package/dist/esm/classes/scripts.js +46 -40
  55. package/dist/esm/classes/scripts.js.map +1 -1
  56. package/dist/esm/classes/worker.d.ts +3 -0
  57. package/dist/esm/classes/worker.js +23 -4
  58. package/dist/esm/classes/worker.js.map +1 -1
  59. package/dist/esm/commands/addJobScheduler-2.lua +75 -0
  60. package/dist/esm/commands/{cleanJobsInSet-2.lua → cleanJobsInSet-3.lua} +6 -5
  61. package/dist/esm/commands/drain-5.lua +41 -0
  62. package/dist/esm/commands/includes/cleanSet.lua +50 -29
  63. package/dist/esm/commands/includes/removeZSetJobs.lua +13 -1
  64. package/dist/esm/commands/moveStalledJobsToWait-9.lua +2 -4
  65. package/dist/esm/commands/removeJob-2.lua +17 -9
  66. package/dist/esm/commands/removeJobScheduler-3.lua +43 -0
  67. package/dist/esm/enums/error-code.d.ts +2 -1
  68. package/dist/esm/enums/error-code.js +1 -0
  69. package/dist/esm/enums/error-code.js.map +1 -1
  70. package/dist/esm/scripts/addJobScheduler-2.d.ts +5 -0
  71. package/dist/esm/scripts/addJobScheduler-2.js +220 -0
  72. package/dist/esm/scripts/addJobScheduler-2.js.map +1 -0
  73. package/dist/esm/scripts/{cleanJobsInSet-2.js → cleanJobsInSet-3.js} +57 -35
  74. package/dist/esm/scripts/{cleanJobsInSet-2.js.map → cleanJobsInSet-3.js.map} +1 -1
  75. package/dist/esm/scripts/{drain-4.js → drain-5.js} +28 -7
  76. package/dist/esm/scripts/drain-5.js.map +1 -0
  77. package/dist/esm/scripts/index.d.ts +4 -2
  78. package/dist/esm/scripts/index.js +4 -2
  79. package/dist/esm/scripts/index.js.map +1 -1
  80. package/dist/esm/scripts/moveStalledJobsToWait-9.js +2 -3
  81. package/dist/esm/scripts/moveStalledJobsToWait-9.js.map +1 -1
  82. package/dist/esm/scripts/obliterate-2.js +11 -1
  83. package/dist/esm/scripts/obliterate-2.js.map +1 -1
  84. package/dist/esm/scripts/removeJob-2.js +16 -9
  85. package/dist/esm/scripts/removeJob-2.js.map +1 -1
  86. package/dist/esm/scripts/removeJobScheduler-3.d.ts +5 -0
  87. package/dist/esm/scripts/removeJobScheduler-3.js +46 -0
  88. package/dist/esm/scripts/removeJobScheduler-3.js.map +1 -0
  89. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  90. package/dist/esm/utils.d.ts +7 -0
  91. package/dist/esm/utils.js +23 -0
  92. package/dist/esm/utils.js.map +1 -1
  93. package/package.json +1 -1
  94. package/dist/cjs/commands/drain-4.lua +0 -26
  95. package/dist/cjs/scripts/drain-4.js.map +0 -1
  96. package/dist/esm/commands/drain-4.lua +0 -26
  97. package/dist/esm/scripts/drain-4.js.map +0 -1
  98. /package/dist/esm/scripts/{cleanJobsInSet-2.d.ts → cleanJobsInSet-3.d.ts} +0 -0
  99. /package/dist/esm/scripts/{drain-4.d.ts → drain-5.d.ts} +0 -0
@@ -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"}