bullmq 4.17.0 → 5.1.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 (200) hide show
  1. package/dist/cjs/classes/flow-producer.js +3 -10
  2. package/dist/cjs/classes/flow-producer.js.map +1 -1
  3. package/dist/cjs/classes/job.js +21 -11
  4. package/dist/cjs/classes/job.js.map +1 -1
  5. package/dist/cjs/classes/queue-base.js +2 -9
  6. package/dist/cjs/classes/queue-base.js.map +1 -1
  7. package/dist/cjs/classes/queue-events.js +3 -1
  8. package/dist/cjs/classes/queue-events.js.map +1 -1
  9. package/dist/cjs/classes/queue-keys.js +1 -0
  10. package/dist/cjs/classes/queue-keys.js.map +1 -1
  11. package/dist/cjs/classes/queue.js +1 -1
  12. package/dist/cjs/classes/redis-connection.js +9 -7
  13. package/dist/cjs/classes/redis-connection.js.map +1 -1
  14. package/dist/cjs/classes/repeat.js +22 -5
  15. package/dist/cjs/classes/repeat.js.map +1 -1
  16. package/dist/cjs/classes/scripts.js +34 -34
  17. package/dist/cjs/classes/scripts.js.map +1 -1
  18. package/dist/cjs/classes/worker.js +27 -32
  19. package/dist/cjs/classes/worker.js.map +1 -1
  20. package/dist/cjs/commands/{addDelayedJob-7.lua → addDelayedJob-6.lua} +18 -22
  21. package/dist/cjs/commands/addParentJob-4.lua +0 -2
  22. package/dist/{esm/commands/addPrioritizedJob-8.lua → cjs/commands/addPrioritizedJob-7.lua} +18 -24
  23. package/dist/cjs/commands/{addStandardJob-6.lua → addStandardJob-7.lua} +6 -2
  24. package/dist/cjs/commands/changePriority-6.lua +57 -0
  25. package/dist/cjs/commands/getCounts-1.lua +1 -0
  26. package/dist/cjs/commands/getRanges-1.lua +1 -0
  27. package/dist/cjs/commands/includes/addDelayMarkerIfNeeded.lua +5 -19
  28. package/dist/cjs/commands/includes/addJobWithPriority.lua +3 -7
  29. package/dist/cjs/commands/includes/checkStalledJobs.lua +1 -1
  30. package/dist/cjs/commands/includes/isQueuePaused.lua +7 -0
  31. package/dist/cjs/commands/includes/moveParentToWaitIfNeeded.lua +39 -30
  32. package/dist/cjs/commands/includes/prepareJobForProcessing.lua +1 -1
  33. package/dist/cjs/commands/includes/promoteDelayedJobs.lua +7 -4
  34. package/dist/{esm/commands/moveToActive-10.lua → cjs/commands/moveToActive-11.lua} +18 -29
  35. package/dist/cjs/commands/moveToDelayed-7.lua +77 -0
  36. package/dist/cjs/commands/{moveToFinished-13.lua → moveToFinished-14.lua} +29 -22
  37. package/dist/cjs/commands/moveToWaitingChildren-4.lua +7 -4
  38. package/dist/cjs/commands/pause-7.lua +41 -0
  39. package/dist/cjs/commands/promote-8.lua +60 -0
  40. package/dist/cjs/commands/{retryJob-9.lua → retryJob-10.lua} +16 -11
  41. package/dist/cjs/scripts/{addDelayedJob-7.js → addDelayedJob-6.js} +77 -88
  42. package/dist/cjs/scripts/{moveToActive-10.js.map → addDelayedJob-6.js.map} +1 -1
  43. package/dist/cjs/scripts/addParentJob-4.js +51 -61
  44. package/dist/cjs/scripts/addParentJob-4.js.map +1 -1
  45. package/dist/cjs/scripts/{addPrioritizedJob-8.js → addPrioritizedJob-7.js} +80 -93
  46. package/dist/cjs/scripts/addPrioritizedJob-7.js.map +1 -0
  47. package/dist/cjs/scripts/{addStandardJob-6.js → addStandardJob-7.js} +58 -63
  48. package/dist/cjs/scripts/addStandardJob-7.js.map +1 -0
  49. package/dist/cjs/scripts/changePriority-6.js +85 -0
  50. package/dist/cjs/scripts/changePriority-6.js.map +1 -0
  51. package/dist/cjs/scripts/getCounts-1.js +1 -0
  52. package/dist/cjs/scripts/getCounts-1.js.map +1 -1
  53. package/dist/cjs/scripts/getRanges-1.js +1 -0
  54. package/dist/cjs/scripts/getRanges-1.js.map +1 -1
  55. package/dist/cjs/scripts/index.js +10 -10
  56. package/dist/cjs/scripts/index.js.map +1 -1
  57. package/dist/cjs/scripts/moveStalledJobsToWait-8.js +1 -0
  58. package/dist/cjs/scripts/moveStalledJobsToWait-8.js.map +1 -1
  59. package/dist/cjs/scripts/{moveToActive-10.js → moveToActive-11.js} +30 -48
  60. package/dist/cjs/scripts/moveToActive-11.js.map +1 -0
  61. package/dist/cjs/scripts/moveToDelayed-7.js +103 -0
  62. package/dist/cjs/scripts/moveToDelayed-7.js.map +1 -0
  63. package/dist/cjs/scripts/{moveToFinished-13.js → moveToFinished-14.js} +89 -88
  64. package/dist/cjs/scripts/{moveToFinished-13.js.map → moveToFinished-14.js.map} +1 -1
  65. package/dist/cjs/scripts/moveToWaitingChildren-4.js +6 -3
  66. package/dist/cjs/scripts/moveToWaitingChildren-4.js.map +1 -1
  67. package/dist/cjs/scripts/pause-7.js +67 -0
  68. package/dist/cjs/scripts/pause-7.js.map +1 -0
  69. package/dist/cjs/scripts/promote-8.js +79 -0
  70. package/dist/cjs/scripts/promote-8.js.map +1 -0
  71. package/dist/cjs/scripts/{retryJob-9.js → retryJob-10.js} +26 -32
  72. package/dist/cjs/scripts/retryJob-10.js.map +1 -0
  73. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  74. package/dist/esm/classes/flow-producer.js +3 -10
  75. package/dist/esm/classes/flow-producer.js.map +1 -1
  76. package/dist/esm/classes/job.d.ts +5 -0
  77. package/dist/esm/classes/job.js +21 -11
  78. package/dist/esm/classes/job.js.map +1 -1
  79. package/dist/esm/classes/queue-base.js +2 -9
  80. package/dist/esm/classes/queue-base.js.map +1 -1
  81. package/dist/esm/classes/queue-events.js +3 -1
  82. package/dist/esm/classes/queue-events.js.map +1 -1
  83. package/dist/esm/classes/queue-keys.js +1 -0
  84. package/dist/esm/classes/queue-keys.js.map +1 -1
  85. package/dist/esm/classes/queue.d.ts +1 -1
  86. package/dist/esm/classes/queue.js +1 -1
  87. package/dist/esm/classes/redis-connection.js +9 -7
  88. package/dist/esm/classes/redis-connection.js.map +1 -1
  89. package/dist/esm/classes/repeat.js +22 -5
  90. package/dist/esm/classes/repeat.js.map +1 -1
  91. package/dist/esm/classes/scripts.d.ts +4 -4
  92. package/dist/esm/classes/scripts.js +34 -34
  93. package/dist/esm/classes/scripts.js.map +1 -1
  94. package/dist/esm/classes/worker.d.ts +1 -1
  95. package/dist/esm/classes/worker.js +27 -32
  96. package/dist/esm/classes/worker.js.map +1 -1
  97. package/dist/esm/commands/{addDelayedJob-7.lua → addDelayedJob-6.lua} +18 -22
  98. package/dist/esm/commands/addParentJob-4.lua +0 -2
  99. package/dist/{cjs/commands/addPrioritizedJob-8.lua → esm/commands/addPrioritizedJob-7.lua} +18 -24
  100. package/dist/esm/commands/{addStandardJob-6.lua → addStandardJob-7.lua} +6 -2
  101. package/dist/esm/commands/changePriority-6.lua +57 -0
  102. package/dist/esm/commands/getCounts-1.lua +1 -0
  103. package/dist/esm/commands/getRanges-1.lua +1 -0
  104. package/dist/esm/commands/includes/addDelayMarkerIfNeeded.lua +5 -19
  105. package/dist/esm/commands/includes/addJobWithPriority.lua +3 -7
  106. package/dist/esm/commands/includes/checkStalledJobs.lua +1 -1
  107. package/dist/esm/commands/includes/isQueuePaused.lua +7 -0
  108. package/dist/esm/commands/includes/moveParentToWaitIfNeeded.lua +39 -30
  109. package/dist/esm/commands/includes/prepareJobForProcessing.lua +1 -1
  110. package/dist/esm/commands/includes/promoteDelayedJobs.lua +7 -4
  111. package/dist/{cjs/commands/moveToActive-10.lua → esm/commands/moveToActive-11.lua} +18 -29
  112. package/dist/esm/commands/moveToDelayed-7.lua +77 -0
  113. package/dist/esm/commands/{moveToFinished-13.lua → moveToFinished-14.lua} +29 -22
  114. package/dist/esm/commands/moveToWaitingChildren-4.lua +7 -4
  115. package/dist/esm/commands/pause-7.lua +41 -0
  116. package/dist/esm/commands/promote-8.lua +60 -0
  117. package/dist/esm/commands/{retryJob-9.lua → retryJob-10.lua} +16 -11
  118. package/dist/esm/interfaces/job-json.d.ts +4 -1
  119. package/dist/esm/interfaces/minimal-job.d.ts +3 -0
  120. package/dist/esm/interfaces/queue-options.d.ts +1 -1
  121. package/dist/esm/interfaces/repeat-options.d.ts +7 -0
  122. package/dist/esm/scripts/{addDelayedJob-7.js → addDelayedJob-6.js} +77 -88
  123. package/dist/esm/scripts/{moveToActive-10.js.map → addDelayedJob-6.js.map} +1 -1
  124. package/dist/esm/scripts/addParentJob-4.js +51 -61
  125. package/dist/esm/scripts/addParentJob-4.js.map +1 -1
  126. package/dist/esm/scripts/{addPrioritizedJob-8.js → addPrioritizedJob-7.js} +80 -93
  127. package/dist/esm/scripts/addPrioritizedJob-7.js.map +1 -0
  128. package/dist/esm/scripts/{addStandardJob-6.js → addStandardJob-7.js} +58 -63
  129. package/dist/esm/scripts/addStandardJob-7.js.map +1 -0
  130. package/dist/esm/scripts/changePriority-6.js +82 -0
  131. package/dist/esm/scripts/changePriority-6.js.map +1 -0
  132. package/dist/esm/scripts/getCounts-1.js +1 -0
  133. package/dist/esm/scripts/getCounts-1.js.map +1 -1
  134. package/dist/esm/scripts/getRanges-1.js +1 -0
  135. package/dist/esm/scripts/getRanges-1.js.map +1 -1
  136. package/dist/esm/scripts/index.d.ts +10 -10
  137. package/dist/esm/scripts/index.js +10 -10
  138. package/dist/esm/scripts/index.js.map +1 -1
  139. package/dist/esm/scripts/moveStalledJobsToWait-8.js +1 -0
  140. package/dist/esm/scripts/moveStalledJobsToWait-8.js.map +1 -1
  141. package/dist/esm/scripts/{moveToActive-10.js → moveToActive-11.js} +30 -48
  142. package/dist/esm/scripts/moveToActive-11.js.map +1 -0
  143. package/dist/esm/scripts/moveToDelayed-7.js +100 -0
  144. package/dist/esm/scripts/moveToDelayed-7.js.map +1 -0
  145. package/dist/esm/scripts/{moveToFinished-13.js → moveToFinished-14.js} +89 -88
  146. package/dist/esm/scripts/{moveToFinished-13.js.map → moveToFinished-14.js.map} +1 -1
  147. package/dist/esm/scripts/moveToWaitingChildren-4.js +6 -3
  148. package/dist/esm/scripts/moveToWaitingChildren-4.js.map +1 -1
  149. package/dist/esm/scripts/pause-7.js +64 -0
  150. package/dist/esm/scripts/pause-7.js.map +1 -0
  151. package/dist/esm/scripts/promote-8.js +76 -0
  152. package/dist/esm/scripts/promote-8.js.map +1 -0
  153. package/dist/esm/scripts/{retryJob-9.js → retryJob-10.js} +26 -32
  154. package/dist/esm/scripts/retryJob-10.js.map +1 -0
  155. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  156. package/package.json +2 -1
  157. package/dist/cjs/commands/changePriority-5.lua +0 -52
  158. package/dist/cjs/commands/includes/addPriorityMarkerIfNeeded.lua +0 -12
  159. package/dist/cjs/commands/moveToDelayed-8.lua +0 -72
  160. package/dist/cjs/commands/pause-5.lua +0 -36
  161. package/dist/cjs/commands/promote-7.lua +0 -57
  162. package/dist/cjs/scripts/addDelayedJob-7.js.map +0 -1
  163. package/dist/cjs/scripts/addPrioritizedJob-8.js.map +0 -1
  164. package/dist/cjs/scripts/addStandardJob-6.js.map +0 -1
  165. package/dist/cjs/scripts/changePriority-5.js +0 -87
  166. package/dist/cjs/scripts/changePriority-5.js.map +0 -1
  167. package/dist/cjs/scripts/moveToDelayed-8.js +0 -168
  168. package/dist/cjs/scripts/moveToDelayed-8.js.map +0 -1
  169. package/dist/cjs/scripts/pause-5.js +0 -48
  170. package/dist/cjs/scripts/pause-5.js.map +0 -1
  171. package/dist/cjs/scripts/promote-7.js +0 -87
  172. package/dist/cjs/scripts/promote-7.js.map +0 -1
  173. package/dist/cjs/scripts/retryJob-9.js.map +0 -1
  174. package/dist/esm/commands/changePriority-5.lua +0 -52
  175. package/dist/esm/commands/includes/addPriorityMarkerIfNeeded.lua +0 -12
  176. package/dist/esm/commands/moveToDelayed-8.lua +0 -72
  177. package/dist/esm/commands/pause-5.lua +0 -36
  178. package/dist/esm/commands/promote-7.lua +0 -57
  179. package/dist/esm/scripts/addDelayedJob-7.js.map +0 -1
  180. package/dist/esm/scripts/addPrioritizedJob-8.js.map +0 -1
  181. package/dist/esm/scripts/addStandardJob-6.js.map +0 -1
  182. package/dist/esm/scripts/changePriority-5.js +0 -84
  183. package/dist/esm/scripts/changePriority-5.js.map +0 -1
  184. package/dist/esm/scripts/moveToDelayed-8.js +0 -165
  185. package/dist/esm/scripts/moveToDelayed-8.js.map +0 -1
  186. package/dist/esm/scripts/pause-5.js +0 -45
  187. package/dist/esm/scripts/pause-5.js.map +0 -1
  188. package/dist/esm/scripts/promote-7.js +0 -84
  189. package/dist/esm/scripts/promote-7.js.map +0 -1
  190. package/dist/esm/scripts/retryJob-9.js.map +0 -1
  191. /package/dist/esm/scripts/{addDelayedJob-7.d.ts → addDelayedJob-6.d.ts} +0 -0
  192. /package/dist/esm/scripts/{addPrioritizedJob-8.d.ts → addPrioritizedJob-7.d.ts} +0 -0
  193. /package/dist/esm/scripts/{addStandardJob-6.d.ts → addStandardJob-7.d.ts} +0 -0
  194. /package/dist/esm/scripts/{changePriority-5.d.ts → changePriority-6.d.ts} +0 -0
  195. /package/dist/esm/scripts/{moveToActive-10.d.ts → moveToActive-11.d.ts} +0 -0
  196. /package/dist/esm/scripts/{moveToDelayed-8.d.ts → moveToDelayed-7.d.ts} +0 -0
  197. /package/dist/esm/scripts/{moveToFinished-13.d.ts → moveToFinished-14.d.ts} +0 -0
  198. /package/dist/esm/scripts/{pause-5.d.ts → pause-7.d.ts} +0 -0
  199. /package/dist/esm/scripts/{promote-7.d.ts → promote-8.d.ts} +0 -0
  200. /package/dist/esm/scripts/{retryJob-9.d.ts → retryJob-10.d.ts} +0 -0
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.changePriority = void 0;
4
+ const content = `--[[
5
+ Change job priority
6
+ Input:
7
+ KEYS[1] 'wait',
8
+ KEYS[2] 'paused'
9
+ KEYS[3] 'meta'
10
+ KEYS[4] 'prioritized'
11
+ KEYS[5] 'pc' priority counter
12
+ KEYS[6] 'marker'
13
+ ARGV[1] priority value
14
+ ARGV[2] job key
15
+ ARGV[3] job id
16
+ ARGV[4] lifo
17
+ Output:
18
+ 0 - OK
19
+ -1 - Missing job
20
+ ]]
21
+ local jobKey = ARGV[2]
22
+ local jobId = ARGV[3]
23
+ local priority = tonumber(ARGV[1])
24
+ local rcall = redis.call
25
+ -- Includes
26
+ --[[
27
+ Function to check for the meta.paused key to decide if we are paused or not
28
+ (since an empty list and !EXISTS are not really the same).
29
+ ]]
30
+ local function isQueuePaused(queueMetaKey)
31
+ return rcall("HEXISTS", queueMetaKey, "paused") == 1
32
+ end
33
+ --[[
34
+ Function to add job considering priority.
35
+ ]]
36
+ local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey, isPaused)
37
+ local prioCounter = rcall("INCR", priorityCounterKey)
38
+ local score = priority * 0x100000000 + bit.band(prioCounter, 0xffffffffffff)
39
+ rcall("ZADD", prioritizedKey, score, jobId)
40
+ if not isPaused then
41
+ rcall("ZADD", markerKey, 0, "0")
42
+ end
43
+ end
44
+ --[[
45
+ Function to check for the meta.paused key to decide if we are paused or not
46
+ (since an empty list and !EXISTS are not really the same).
47
+ ]]
48
+ local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
49
+ if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
50
+ return waitKey, false
51
+ else
52
+ return pausedKey, true
53
+ end
54
+ end
55
+ if rcall("EXISTS", jobKey) == 1 then
56
+ local metaKey = KEYS[3]
57
+ local isPaused = isQueuePaused(metaKey)
58
+ local markerKey = KEYS[6]
59
+ local prioritizedKey = KEYS[4]
60
+ -- Re-add with the new priority
61
+ if rcall("ZREM", KEYS[4], jobId) > 0 then
62
+ addJobWithPriority(markerKey, prioritizedKey, priority, jobId, KEYS[5],
63
+ isPaused)
64
+ -- If the new priority is 0, then just leave the job where it is in the wait list.
65
+ elseif priority > 0 then
66
+ -- Job is already in the wait list, we need to re-add it with the new priority.
67
+ local target = isPaused and KEYS[2] or KEYS[1]
68
+ local numRemovedElements = rcall("LREM", target, -1, jobId)
69
+ if numRemovedElements > 0 then
70
+ addJobWithPriority(markerKey, prioritizedKey, priority, jobId,
71
+ KEYS[5], isPaused)
72
+ end
73
+ end
74
+ rcall("HSET", jobKey, "priority", priority)
75
+ return 0
76
+ else
77
+ return -1
78
+ end
79
+ `;
80
+ exports.changePriority = {
81
+ name: 'changePriority',
82
+ content,
83
+ keys: 6,
84
+ };
85
+ //# sourceMappingURL=changePriority-6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changePriority-6.js","sourceRoot":"","sources":["../../../src/scripts/changePriority-6.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Ef,CAAC;AACW,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -13,6 +13,7 @@ local results = {}
13
13
  for i = 1, #ARGV do
14
14
  local stateKey = prefix .. ARGV[i]
15
15
  if ARGV[i] == "wait" or ARGV[i] == "paused" then
16
+ -- Markers in waitlist DEPRECATED in v5: Remove in v6.
16
17
  local marker = rcall("LINDEX", stateKey, -1)
17
18
  if marker and string.sub(marker, 1, 2) == "0:" then
18
19
  local count = rcall("LLEN", stateKey)
@@ -1 +1 @@
1
- {"version":3,"file":"getCounts-1.js","sourceRoot":"","sources":["../../../src/scripts/getCounts-1.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bf,CAAC;AACW,QAAA,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW;IACjB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"getCounts-1.js","sourceRoot":"","sources":["../../../src/scripts/getCounts-1.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCf,CAAC;AACW,QAAA,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW;IACjB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -40,6 +40,7 @@ end
40
40
  for i = 4, #ARGV do
41
41
  local stateKey = prefix .. ARGV[i]
42
42
  if ARGV[i] == "wait" or ARGV[i] == "paused" then
43
+ -- Markers in waitlist DEPRECATED in v5: Remove in v6.
43
44
  local marker = rcall("LINDEX", stateKey, -1)
44
45
  if marker and string.sub(marker, 1, 2) == "0:" then
45
46
  local count = rcall("LLEN", stateKey)
@@ -1 +1 @@
1
- {"version":3,"file":"getRanges-1.js","sourceRoot":"","sources":["../../../src/scripts/getRanges-1.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Df,CAAC;AACW,QAAA,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW;IACjB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"getRanges-1.js","sourceRoot":"","sources":["../../../src/scripts/getRanges-1.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Df,CAAC;AACW,QAAA,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW;IACjB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./addDelayedJob-7"), exports);
4
+ tslib_1.__exportStar(require("./addDelayedJob-6"), exports);
5
5
  tslib_1.__exportStar(require("./addParentJob-4"), exports);
6
- tslib_1.__exportStar(require("./addPrioritizedJob-8"), exports);
7
- tslib_1.__exportStar(require("./addStandardJob-6"), exports);
6
+ tslib_1.__exportStar(require("./addPrioritizedJob-7"), exports);
7
+ tslib_1.__exportStar(require("./addStandardJob-7"), exports);
8
8
  tslib_1.__exportStar(require("./changeDelay-3"), exports);
9
- tslib_1.__exportStar(require("./changePriority-5"), exports);
9
+ tslib_1.__exportStar(require("./changePriority-6"), exports);
10
10
  tslib_1.__exportStar(require("./cleanJobsInSet-2"), exports);
11
11
  tslib_1.__exportStar(require("./drain-4"), exports);
12
12
  tslib_1.__exportStar(require("./extendLock-2"), exports);
@@ -19,19 +19,19 @@ tslib_1.__exportStar(require("./isJobInList-1"), exports);
19
19
  tslib_1.__exportStar(require("./moveJobFromActiveToWait-9"), exports);
20
20
  tslib_1.__exportStar(require("./moveJobsToWait-6"), exports);
21
21
  tslib_1.__exportStar(require("./moveStalledJobsToWait-8"), exports);
22
- tslib_1.__exportStar(require("./moveToActive-10"), exports);
23
- tslib_1.__exportStar(require("./moveToDelayed-8"), exports);
24
- tslib_1.__exportStar(require("./moveToFinished-13"), exports);
22
+ tslib_1.__exportStar(require("./moveToActive-11"), exports);
23
+ tslib_1.__exportStar(require("./moveToDelayed-7"), exports);
24
+ tslib_1.__exportStar(require("./moveToFinished-14"), exports);
25
25
  tslib_1.__exportStar(require("./moveToWaitingChildren-4"), exports);
26
26
  tslib_1.__exportStar(require("./obliterate-2"), exports);
27
27
  tslib_1.__exportStar(require("./paginate-1"), exports);
28
- tslib_1.__exportStar(require("./pause-5"), exports);
29
- tslib_1.__exportStar(require("./promote-7"), exports);
28
+ tslib_1.__exportStar(require("./pause-7"), exports);
29
+ tslib_1.__exportStar(require("./promote-8"), exports);
30
30
  tslib_1.__exportStar(require("./releaseLock-1"), exports);
31
31
  tslib_1.__exportStar(require("./removeJob-1"), exports);
32
32
  tslib_1.__exportStar(require("./removeRepeatable-2"), exports);
33
33
  tslib_1.__exportStar(require("./reprocessJob-6"), exports);
34
- tslib_1.__exportStar(require("./retryJob-9"), exports);
34
+ tslib_1.__exportStar(require("./retryJob-10"), exports);
35
35
  tslib_1.__exportStar(require("./saveStacktrace-1"), exports);
36
36
  tslib_1.__exportStar(require("./updateData-1"), exports);
37
37
  tslib_1.__exportStar(require("./updateProgress-3"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scripts/index.ts"],"names":[],"mappings":";;;AAAA,4DAAkC;AAClC,2DAAiC;AACjC,gEAAsC;AACtC,6DAAmC;AACnC,0DAAgC;AAChC,6DAAmC;AACnC,6DAAmC;AACnC,oDAA0B;AAC1B,yDAA+B;AAC/B,wDAA8B;AAC9B,wDAA8B;AAC9B,uDAA6B;AAC7B,yDAA+B;AAC/B,yDAA+B;AAC/B,0DAAgC;AAChC,sEAA4C;AAC5C,6DAAmC;AACnC,oEAA0C;AAC1C,4DAAkC;AAClC,4DAAkC;AAClC,8DAAoC;AACpC,oEAA0C;AAC1C,yDAA+B;AAC/B,uDAA6B;AAC7B,oDAA0B;AAC1B,sDAA4B;AAC5B,0DAAgC;AAChC,wDAA8B;AAC9B,+DAAqC;AACrC,2DAAiC;AACjC,uDAA6B;AAC7B,6DAAmC;AACnC,yDAA+B;AAC/B,6DAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scripts/index.ts"],"names":[],"mappings":";;;AAAA,4DAAkC;AAClC,2DAAiC;AACjC,gEAAsC;AACtC,6DAAmC;AACnC,0DAAgC;AAChC,6DAAmC;AACnC,6DAAmC;AACnC,oDAA0B;AAC1B,yDAA+B;AAC/B,wDAA8B;AAC9B,wDAA8B;AAC9B,uDAA6B;AAC7B,yDAA+B;AAC/B,yDAA+B;AAC/B,0DAAgC;AAChC,sEAA4C;AAC5C,6DAAmC;AACnC,oEAA0C;AAC1C,4DAAkC;AAClC,4DAAkC;AAClC,8DAAoC;AACpC,oEAA0C;AAC1C,yDAA+B;AAC/B,uDAA6B;AAC7B,oDAA0B;AAC1B,sDAA4B;AAC5B,0DAAgC;AAChC,wDAA8B;AAC9B,+DAAqC;AACrC,2DAAiC;AACjC,wDAA8B;AAC9B,6DAAmC;AACnC,yDAA+B;AAC/B,6DAAmC"}
@@ -206,6 +206,7 @@ local function checkStalledJobs(stalledKey, waitKey, activeKey, failedKey,
206
206
  local MAX_STALLED_JOB_COUNT = tonumber(maxStalledJobCount)
207
207
  -- Remove from active list
208
208
  for i, jobId in ipairs(stalling) do
209
+ -- Markers in waitlist DEPRECATED in v5: Remove in v6.
209
210
  if string.sub(jobId, 1, 2) == "0:" then
210
211
  -- If the jobId is a delay marker ID we just remove it.
211
212
  rcall("LREM", activeKey, 1, jobId)
@@ -1 +1 @@
1
- {"version":3,"file":"moveStalledJobsToWait-8.js","sourceRoot":"","sources":["../../../src/scripts/moveStalledJobsToWait-8.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuRf,CAAC;AACW,QAAA,qBAAqB,GAAG;IACnC,IAAI,EAAE,uBAAuB;IAC7B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"moveStalledJobsToWait-8.js","sourceRoot":"","sources":["../../../src/scripts/moveStalledJobsToWait-8.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwRf,CAAC;AACW,QAAA,qBAAqB,GAAG;IACnC,IAAI,EAAE,uBAAuB;IAC7B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -16,15 +16,16 @@ const content = `--[[
16
16
  -- Rate limiting
17
17
  KEYS[6] rate limiter key
18
18
  KEYS[7] delayed key
19
- -- Promote delayed jobs
19
+ -- Delayed jobs
20
20
  KEYS[8] paused key
21
21
  KEYS[9] meta key
22
22
  KEYS[10] pc priority counter
23
+ -- Marker
24
+ KEYS[11] marker key
23
25
  -- Arguments
24
26
  ARGV[1] key prefix
25
27
  ARGV[2] timestamp
26
- ARGV[3] optional job ID
27
- ARGV[4] opts
28
+ ARGV[3] opts
28
29
  opts - token - lock token
29
30
  opts - lockDuration
30
31
  opts - limiter
@@ -34,7 +35,7 @@ local waitKey = KEYS[1]
34
35
  local activeKey = KEYS[2]
35
36
  local rateLimiterKey = KEYS[6]
36
37
  local delayedKey = KEYS[7]
37
- local opts = cmsgpack.unpack(ARGV[4])
38
+ local opts = cmsgpack.unpack(ARGV[3])
38
39
  -- Includes
39
40
  --[[
40
41
  Function to return the next delayed job timestamp.
@@ -145,7 +146,7 @@ local function prepareJobForProcessing(keys, keyPrefix, targetKey, jobId, proces
145
146
  end
146
147
  rcall("XADD", keys[4], "*", "event", "active", "jobId", jobId, "prev", "waiting")
147
148
  rcall("HSET", jobKey, "processedOn", processedOn)
148
- rcall("HINCRBY", jobKey, "attemptsMade", 1)
149
+ rcall("HINCRBY", jobKey, "ats", 1)
149
150
  return {rcall("HGETALL", jobKey), jobId, 0, 0} -- get job data
150
151
  end
151
152
  --[[
@@ -158,29 +159,17 @@ end
158
159
  --[[
159
160
  Function to add job considering priority.
160
161
  ]]
161
- -- Includes
162
- --[[
163
- Function priority marker to wait if needed
164
- in order to wake up our workers and to respect priority
165
- order as much as possible
166
- ]]
167
- local function addPriorityMarkerIfNeeded(waitKey)
168
- local waitLen = rcall("LLEN", waitKey)
169
- if waitLen == 0 then
170
- rcall("LPUSH", waitKey, "0:0")
171
- end
172
- end
173
- local function addJobWithPriority(waitKey, prioritizedKey, priority, paused, jobId, priorityCounterKey)
162
+ local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey, isPaused)
174
163
  local prioCounter = rcall("INCR", priorityCounterKey)
175
164
  local score = priority * 0x100000000 + bit.band(prioCounter, 0xffffffffffff)
176
165
  rcall("ZADD", prioritizedKey, score, jobId)
177
- if not paused then
178
- addPriorityMarkerIfNeeded(waitKey)
166
+ if not isPaused then
167
+ rcall("ZADD", markerKey, 0, "0")
179
168
  end
180
169
  end
181
170
  -- Try to get as much as 1000 jobs at once
182
- local function promoteDelayedJobs(delayedKey, waitKey, targetKey, prioritizedKey,
183
- eventStreamKey, prefix, timestamp, paused, priorityCounterKey)
171
+ local function promoteDelayedJobs(delayedKey, markerKey, targetKey, prioritizedKey,
172
+ eventStreamKey, prefix, timestamp, priorityCounterKey, isPaused)
184
173
  local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000, "LIMIT", 0, 1000)
185
174
  if (#jobs > 0) then
186
175
  rcall("ZREM", delayedKey, unpack(jobs))
@@ -191,9 +180,12 @@ local function promoteDelayedJobs(delayedKey, waitKey, targetKey, prioritizedKey
191
180
  if priority == 0 then
192
181
  -- LIFO or FIFO
193
182
  rcall("LPUSH", targetKey, jobId)
183
+ if not isPaused then
184
+ rcall("ZADD", markerKey, 0, "0")
185
+ end
194
186
  else
195
- addJobWithPriority(waitKey, prioritizedKey, priority, paused,
196
- jobId, priorityCounterKey)
187
+ addJobWithPriority(markerKey, prioritizedKey, priority,
188
+ jobId, priorityCounterKey, isPaused)
197
189
  end
198
190
  -- Emit waiting event
199
191
  rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId",
@@ -204,31 +196,21 @@ local function promoteDelayedJobs(delayedKey, waitKey, targetKey, prioritizedKey
204
196
  end
205
197
  local target, paused = getTargetQueueList(KEYS[9], waitKey, KEYS[8])
206
198
  -- Check if there are delayed jobs that we can move to wait.
207
- promoteDelayedJobs(delayedKey, waitKey, target, KEYS[3], KEYS[4], ARGV[1],
208
- ARGV[2], paused, KEYS[10])
199
+ local markerKey = KEYS[11]
200
+ promoteDelayedJobs(delayedKey, markerKey, target, KEYS[3], KEYS[4], ARGV[1],
201
+ ARGV[2], KEYS[10], paused)
209
202
  local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max'])
210
203
  local expireTime = getRateLimitTTL(maxJobs, rateLimiterKey)
211
- local jobId = nil
212
- if ARGV[3] ~= "" then
213
- jobId = ARGV[3]
214
- -- clean stalled key
215
- rcall("SREM", KEYS[5], jobId)
216
- end
217
- if not jobId or (jobId and string.sub(jobId, 1, 2) == "0:") then
218
- -- If jobId is special ID 0:delay, then there is no job to process
219
- if jobId then rcall("LREM", activeKey, 1, jobId) end
220
- -- Check if we are rate limited first.
221
- if expireTime > 0 then return {0, 0, expireTime, 0} end
222
- -- paused queue
223
- if paused then return {0, 0, 0, 0} end
224
- -- no job ID, try non-blocking move from wait to active
204
+ -- Check if we are rate limited first.
205
+ if expireTime > 0 then return {0, 0, expireTime, 0} end
206
+ -- paused queue
207
+ if paused then return {0, 0, 0, 0} end
208
+ -- no job ID, try non-blocking move from wait to active
209
+ local jobId = rcall("RPOPLPUSH", waitKey, activeKey)
210
+ -- Markers in waitlist DEPRECATED in v5: Will be completely removed in v6.
211
+ if jobId and string.sub(jobId, 1, 2) == "0:" then
212
+ rcall("LREM", activeKey, 1, jobId)
225
213
  jobId = rcall("RPOPLPUSH", waitKey, activeKey)
226
- -- Since it is possible that between a call to BRPOPLPUSH and moveToActive
227
- -- another script puts a new maker in wait, we need to check again.
228
- if jobId and string.sub(jobId, 1, 2) == "0:" then
229
- rcall("LREM", activeKey, 1, jobId)
230
- jobId = rcall("RPOPLPUSH", waitKey, activeKey)
231
- end
232
214
  end
233
215
  if jobId then
234
216
  return prepareJobForProcessing(KEYS, ARGV[1], target, jobId, ARGV[2],
@@ -248,6 +230,6 @@ return {0, 0, 0, 0}
248
230
  exports.moveToActive = {
249
231
  name: 'moveToActive',
250
232
  content,
251
- keys: 10,
233
+ keys: 11,
252
234
  };
253
- //# sourceMappingURL=moveToActive-10.js.map
235
+ //# sourceMappingURL=moveToActive-11.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moveToActive-11.js","sourceRoot":"","sources":["../../../src/scripts/moveToActive-11.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiOf,CAAC;AACW,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,cAAc;IACpB,OAAO;IACP,IAAI,EAAE,EAAE;CACT,CAAC"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.moveToDelayed = void 0;
4
+ const content = `--[[
5
+ Moves job from active to delayed set.
6
+ Input:
7
+ KEYS[1] marker key
8
+ KEYS[2] active key
9
+ KEYS[3] prioritized key
10
+ KEYS[4] delayed key
11
+ KEYS[5] job key
12
+ KEYS[6] events stream
13
+ KEYS[7] meta key
14
+ ARGV[1] key prefix
15
+ ARGV[2] timestamp
16
+ ARGV[3] delayedTimestamp
17
+ ARGV[4] the id of the job
18
+ ARGV[5] queue token
19
+ ARGV[6] delay value
20
+ ARGV[7] skip attempt
21
+ Output:
22
+ 0 - OK
23
+ -1 - Missing job.
24
+ -3 - Job not in active set.
25
+ Events:
26
+ - delayed key.
27
+ ]]
28
+ local rcall = redis.call
29
+ -- Includes
30
+ --[[
31
+ Add delay marker if needed.
32
+ ]]
33
+ -- Includes
34
+ --[[
35
+ Function to return the next delayed job timestamp.
36
+ ]]
37
+ local function getNextDelayedTimestamp(delayedKey)
38
+ local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
39
+ if #result then
40
+ local nextTimestamp = tonumber(result[2])
41
+ if (nextTimestamp ~= nil) then
42
+ nextTimestamp = nextTimestamp / 0x1000
43
+ end
44
+ return nextTimestamp
45
+ end
46
+ end
47
+ local function addDelayMarkerIfNeeded(markerKey, delayedKey)
48
+ local nextTimestamp = getNextDelayedTimestamp(delayedKey)
49
+ if nextTimestamp ~= nil then
50
+ -- Replace the score of the marker with the newest known
51
+ -- next timestamp.
52
+ rcall("ZADD", markerKey, nextTimestamp, "0")
53
+ end
54
+ end
55
+ --[[
56
+ Function to check for the meta.paused key to decide if we are paused or not
57
+ (since an empty list and !EXISTS are not really the same).
58
+ ]]
59
+ local function isQueuePaused(queueMetaKey)
60
+ return rcall("HEXISTS", queueMetaKey, "paused") == 1
61
+ end
62
+ local jobKey = KEYS[5]
63
+ local metaKey = KEYS[7]
64
+ if rcall("EXISTS", jobKey) == 1 then
65
+ local delayedKey = KEYS[4]
66
+ if ARGV[5] ~= "0" then
67
+ local lockKey = jobKey .. ':lock'
68
+ if rcall("GET", lockKey) == ARGV[5] then
69
+ rcall("DEL", lockKey)
70
+ else
71
+ return -2
72
+ end
73
+ end
74
+ local jobId = ARGV[4]
75
+ local score = tonumber(ARGV[3])
76
+ local delayedTimestamp = (score / 0x1000)
77
+ local numRemovedElements = rcall("LREM", KEYS[2], -1, jobId)
78
+ if numRemovedElements < 1 then return -3 end
79
+ if ARGV[7] == "0" then
80
+ rcall("HINCRBY", jobKey, "atm", 1)
81
+ end
82
+ rcall("HSET", jobKey, "delay", ARGV[6])
83
+ local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents") or 10000
84
+ rcall("ZADD", delayedKey, score, jobId)
85
+ rcall("XADD", KEYS[6], "MAXLEN", "~", maxEvents, "*", "event", "delayed",
86
+ "jobId", jobId, "delay", delayedTimestamp)
87
+ -- Check if we need to push a marker job to wake up sleeping workers.
88
+ local isPaused = isQueuePaused(metaKey)
89
+ if not isPaused then
90
+ local markerKey = KEYS[1]
91
+ addDelayMarkerIfNeeded(markerKey, delayedKey)
92
+ end
93
+ return 0
94
+ else
95
+ return -1
96
+ end
97
+ `;
98
+ exports.moveToDelayed = {
99
+ name: 'moveToDelayed',
100
+ content,
101
+ keys: 7,
102
+ };
103
+ //# sourceMappingURL=moveToDelayed-7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moveToDelayed-7.js","sourceRoot":"","sources":["../../../src/scripts/moveToDelayed-7.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Ff,CAAC;AACW,QAAA,aAAa,GAAG;IAC3B,IAAI,EAAE,eAAe;IACrB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}