bullmq 5.8.6 → 5.9.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 (188) hide show
  1. package/dist/cjs/classes/queue.js +29 -0
  2. package/dist/cjs/classes/queue.js.map +1 -1
  3. package/dist/cjs/classes/scripts.js +17 -1
  4. package/dist/cjs/classes/scripts.js.map +1 -1
  5. package/dist/cjs/classes/worker.js +1 -1
  6. package/dist/cjs/classes/worker.js.map +1 -1
  7. package/dist/cjs/commands/addDelayedJob-6.lua +2 -6
  8. package/dist/cjs/commands/{addPrioritizedJob-7.lua → addPrioritizedJob-8.lua} +9 -7
  9. package/dist/cjs/commands/{addStandardJob-7.lua → addStandardJob-8.lua} +6 -5
  10. package/dist/cjs/commands/changeDelay-4.lua +1 -5
  11. package/dist/cjs/commands/{changePriority-6.lua → changePriority-7.lua} +12 -10
  12. package/dist/cjs/commands/getCountsPerPriority-4.lua +6 -3
  13. package/dist/cjs/commands/includes/addBaseMarkerIfNeeded.lua +2 -2
  14. package/dist/cjs/commands/includes/addJobInTargetList.lua +2 -2
  15. package/dist/cjs/commands/includes/addJobWithPriority.lua +3 -2
  16. package/dist/cjs/commands/includes/getTargetQueueList.lua +14 -4
  17. package/dist/cjs/commands/includes/isQueueMaxed.lua +15 -0
  18. package/dist/cjs/commands/includes/isQueuePaused.lua +1 -1
  19. package/dist/cjs/commands/includes/isQueuePausedOrMaxed.lua +18 -0
  20. package/dist/cjs/commands/includes/moveParentToWaitIfNeeded.lua +8 -6
  21. package/dist/cjs/commands/includes/removeParentDependencyKey.lua +3 -3
  22. package/dist/cjs/commands/isMaxed-2.lua +17 -0
  23. package/dist/cjs/commands/moveJobFromActiveToWait-10.lua +2 -2
  24. package/dist/{esm/commands/moveJobsToWait-7.lua → cjs/commands/moveJobsToWait-8.lua} +4 -3
  25. package/dist/cjs/commands/moveStalledJobsToWait-9.lua +3 -3
  26. package/dist/cjs/commands/moveToActive-11.lua +4 -4
  27. package/dist/cjs/commands/moveToDelayed-8.lua +2 -6
  28. package/dist/cjs/commands/moveToFinished-14.lua +4 -4
  29. package/dist/cjs/commands/moveToWaitingChildren-5.lua +4 -3
  30. package/dist/{esm/commands/promote-8.lua → cjs/commands/promote-9.lua} +9 -7
  31. package/dist/{esm/commands/removeJob-1.lua → cjs/commands/removeJob-2.lua} +2 -1
  32. package/dist/{esm/commands/reprocessJob-7.lua → cjs/commands/reprocessJob-8.lua} +4 -3
  33. package/dist/cjs/commands/retryJob-11.lua +8 -4
  34. package/dist/cjs/scripts/addDelayedJob-6.js +41 -23
  35. package/dist/cjs/scripts/addDelayedJob-6.js.map +1 -1
  36. package/dist/cjs/scripts/addParentJob-4.js +39 -18
  37. package/dist/cjs/scripts/addParentJob-4.js.map +1 -1
  38. package/dist/cjs/scripts/{addPrioritizedJob-7.js → addPrioritizedJob-8.js} +49 -26
  39. package/dist/cjs/scripts/addPrioritizedJob-8.js.map +1 -0
  40. package/dist/cjs/scripts/{addStandardJob-7.js → addStandardJob-8.js} +47 -25
  41. package/dist/cjs/scripts/addStandardJob-8.js.map +1 -0
  42. package/dist/cjs/scripts/changeDelay-4.js +1 -11
  43. package/dist/cjs/scripts/changeDelay-4.js.map +1 -1
  44. package/dist/cjs/scripts/{changePriority-6.js → changePriority-7.js} +33 -21
  45. package/dist/cjs/scripts/changePriority-7.js.map +1 -0
  46. package/dist/cjs/scripts/cleanJobsInSet-2.js +20 -11
  47. package/dist/cjs/scripts/cleanJobsInSet-2.js.map +1 -1
  48. package/dist/cjs/scripts/drain-4.js +20 -11
  49. package/dist/cjs/scripts/drain-4.js.map +1 -1
  50. package/dist/cjs/scripts/getCountsPerPriority-4.js +7 -8
  51. package/dist/cjs/scripts/getCountsPerPriority-4.js.map +1 -1
  52. package/dist/cjs/scripts/index.js +8 -7
  53. package/dist/cjs/scripts/index.js.map +1 -1
  54. package/dist/cjs/scripts/isMaxed-2.js +34 -0
  55. package/dist/cjs/scripts/isMaxed-2.js.map +1 -0
  56. package/dist/cjs/scripts/moveJobFromActiveToWait-10.js +19 -10
  57. package/dist/cjs/scripts/moveJobFromActiveToWait-10.js.map +1 -1
  58. package/dist/cjs/scripts/{moveJobsToWait-7.js → moveJobsToWait-8.js} +21 -11
  59. package/dist/cjs/scripts/moveJobsToWait-8.js.map +1 -0
  60. package/dist/cjs/scripts/moveStalledJobsToWait-9.js +45 -24
  61. package/dist/cjs/scripts/moveStalledJobsToWait-9.js.map +1 -1
  62. package/dist/cjs/scripts/moveToActive-11.js +24 -14
  63. package/dist/cjs/scripts/moveToActive-11.js.map +1 -1
  64. package/dist/cjs/scripts/moveToDelayed-8.js +2 -12
  65. package/dist/cjs/scripts/moveToDelayed-8.js.map +1 -1
  66. package/dist/cjs/scripts/moveToFinished-14.js +46 -25
  67. package/dist/cjs/scripts/moveToFinished-14.js.map +1 -1
  68. package/dist/cjs/scripts/moveToWaitingChildren-5.js +4 -3
  69. package/dist/cjs/scripts/moveToWaitingChildren-5.js.map +1 -1
  70. package/dist/cjs/scripts/obliterate-2.js +20 -11
  71. package/dist/cjs/scripts/obliterate-2.js.map +1 -1
  72. package/dist/cjs/scripts/{promote-8.js → promote-9.js} +31 -19
  73. package/dist/cjs/scripts/promote-9.js.map +1 -0
  74. package/dist/cjs/scripts/removeChildDependency-1.js +20 -11
  75. package/dist/cjs/scripts/removeChildDependency-1.js.map +1 -1
  76. package/dist/cjs/scripts/{removeJob-1.js → removeJob-2.js} +24 -14
  77. package/dist/cjs/scripts/{removeJob-1.js.map → removeJob-2.js.map} +1 -1
  78. package/dist/cjs/scripts/{reprocessJob-7.js → reprocessJob-8.js} +23 -13
  79. package/dist/cjs/scripts/reprocessJob-8.js.map +1 -0
  80. package/dist/cjs/scripts/retryJob-11.js +42 -14
  81. package/dist/cjs/scripts/retryJob-11.js.map +1 -1
  82. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  83. package/dist/esm/classes/queue.d.ts +17 -0
  84. package/dist/esm/classes/queue.js +29 -0
  85. package/dist/esm/classes/queue.js.map +1 -1
  86. package/dist/esm/classes/scripts.d.ts +2 -0
  87. package/dist/esm/classes/scripts.js +17 -1
  88. package/dist/esm/classes/scripts.js.map +1 -1
  89. package/dist/esm/classes/worker.js +1 -1
  90. package/dist/esm/classes/worker.js.map +1 -1
  91. package/dist/esm/commands/addDelayedJob-6.lua +2 -6
  92. package/dist/esm/commands/{addPrioritizedJob-7.lua → addPrioritizedJob-8.lua} +9 -7
  93. package/dist/esm/commands/{addStandardJob-7.lua → addStandardJob-8.lua} +6 -5
  94. package/dist/esm/commands/changeDelay-4.lua +1 -5
  95. package/dist/esm/commands/{changePriority-6.lua → changePriority-7.lua} +12 -10
  96. package/dist/esm/commands/getCountsPerPriority-4.lua +6 -3
  97. package/dist/esm/commands/includes/addBaseMarkerIfNeeded.lua +2 -2
  98. package/dist/esm/commands/includes/addJobInTargetList.lua +2 -2
  99. package/dist/esm/commands/includes/addJobWithPriority.lua +3 -2
  100. package/dist/esm/commands/includes/getTargetQueueList.lua +14 -4
  101. package/dist/esm/commands/includes/isQueueMaxed.lua +15 -0
  102. package/dist/esm/commands/includes/isQueuePaused.lua +1 -1
  103. package/dist/esm/commands/includes/isQueuePausedOrMaxed.lua +18 -0
  104. package/dist/esm/commands/includes/moveParentToWaitIfNeeded.lua +8 -6
  105. package/dist/esm/commands/includes/removeParentDependencyKey.lua +3 -3
  106. package/dist/esm/commands/isMaxed-2.lua +17 -0
  107. package/dist/esm/commands/moveJobFromActiveToWait-10.lua +2 -2
  108. package/dist/{cjs/commands/moveJobsToWait-7.lua → esm/commands/moveJobsToWait-8.lua} +4 -3
  109. package/dist/esm/commands/moveStalledJobsToWait-9.lua +3 -3
  110. package/dist/esm/commands/moveToActive-11.lua +4 -4
  111. package/dist/esm/commands/moveToDelayed-8.lua +2 -6
  112. package/dist/esm/commands/moveToFinished-14.lua +4 -4
  113. package/dist/esm/commands/moveToWaitingChildren-5.lua +4 -3
  114. package/dist/{cjs/commands/promote-8.lua → esm/commands/promote-9.lua} +9 -7
  115. package/dist/{cjs/commands/removeJob-1.lua → esm/commands/removeJob-2.lua} +2 -1
  116. package/dist/{cjs/commands/reprocessJob-7.lua → esm/commands/reprocessJob-8.lua} +4 -3
  117. package/dist/esm/commands/retryJob-11.lua +8 -4
  118. package/dist/esm/scripts/addDelayedJob-6.js +41 -23
  119. package/dist/esm/scripts/addDelayedJob-6.js.map +1 -1
  120. package/dist/esm/scripts/addParentJob-4.js +39 -18
  121. package/dist/esm/scripts/addParentJob-4.js.map +1 -1
  122. package/dist/esm/scripts/{addPrioritizedJob-7.js → addPrioritizedJob-8.js} +49 -26
  123. package/dist/esm/scripts/addPrioritizedJob-8.js.map +1 -0
  124. package/dist/esm/scripts/{addStandardJob-7.js → addStandardJob-8.js} +47 -25
  125. package/dist/esm/scripts/addStandardJob-8.js.map +1 -0
  126. package/dist/esm/scripts/changeDelay-4.js +1 -11
  127. package/dist/esm/scripts/changeDelay-4.js.map +1 -1
  128. package/dist/esm/scripts/{changePriority-6.js → changePriority-7.js} +33 -21
  129. package/dist/esm/scripts/changePriority-7.js.map +1 -0
  130. package/dist/esm/scripts/cleanJobsInSet-2.js +20 -11
  131. package/dist/esm/scripts/cleanJobsInSet-2.js.map +1 -1
  132. package/dist/esm/scripts/drain-4.js +20 -11
  133. package/dist/esm/scripts/drain-4.js.map +1 -1
  134. package/dist/esm/scripts/getCountsPerPriority-4.js +7 -8
  135. package/dist/esm/scripts/getCountsPerPriority-4.js.map +1 -1
  136. package/dist/esm/scripts/index.d.ts +8 -7
  137. package/dist/esm/scripts/index.js +8 -7
  138. package/dist/esm/scripts/index.js.map +1 -1
  139. package/dist/esm/scripts/isMaxed-2.d.ts +5 -0
  140. package/dist/esm/scripts/isMaxed-2.js +31 -0
  141. package/dist/esm/scripts/isMaxed-2.js.map +1 -0
  142. package/dist/esm/scripts/moveJobFromActiveToWait-10.js +19 -10
  143. package/dist/esm/scripts/moveJobFromActiveToWait-10.js.map +1 -1
  144. package/dist/esm/scripts/{moveJobsToWait-7.js → moveJobsToWait-8.js} +21 -11
  145. package/dist/esm/scripts/moveJobsToWait-8.js.map +1 -0
  146. package/dist/esm/scripts/moveStalledJobsToWait-9.js +45 -24
  147. package/dist/esm/scripts/moveStalledJobsToWait-9.js.map +1 -1
  148. package/dist/esm/scripts/moveToActive-11.js +24 -14
  149. package/dist/esm/scripts/moveToActive-11.js.map +1 -1
  150. package/dist/esm/scripts/moveToDelayed-8.js +2 -12
  151. package/dist/esm/scripts/moveToDelayed-8.js.map +1 -1
  152. package/dist/esm/scripts/moveToFinished-14.js +46 -25
  153. package/dist/esm/scripts/moveToFinished-14.js.map +1 -1
  154. package/dist/esm/scripts/moveToWaitingChildren-5.js +4 -3
  155. package/dist/esm/scripts/moveToWaitingChildren-5.js.map +1 -1
  156. package/dist/esm/scripts/obliterate-2.js +20 -11
  157. package/dist/esm/scripts/obliterate-2.js.map +1 -1
  158. package/dist/esm/scripts/{promote-8.js → promote-9.js} +31 -19
  159. package/dist/esm/scripts/promote-9.js.map +1 -0
  160. package/dist/esm/scripts/removeChildDependency-1.js +20 -11
  161. package/dist/esm/scripts/removeChildDependency-1.js.map +1 -1
  162. package/dist/esm/scripts/{removeJob-1.js → removeJob-2.js} +24 -14
  163. package/dist/esm/scripts/{removeJob-1.js.map → removeJob-2.js.map} +1 -1
  164. package/dist/esm/scripts/{reprocessJob-7.js → reprocessJob-8.js} +23 -13
  165. package/dist/esm/scripts/reprocessJob-8.js.map +1 -0
  166. package/dist/esm/scripts/retryJob-11.js +42 -14
  167. package/dist/esm/scripts/retryJob-11.js.map +1 -1
  168. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  169. package/package.json +2 -1
  170. package/dist/cjs/scripts/addPrioritizedJob-7.js.map +0 -1
  171. package/dist/cjs/scripts/addStandardJob-7.js.map +0 -1
  172. package/dist/cjs/scripts/changePriority-6.js.map +0 -1
  173. package/dist/cjs/scripts/moveJobsToWait-7.js.map +0 -1
  174. package/dist/cjs/scripts/promote-8.js.map +0 -1
  175. package/dist/cjs/scripts/reprocessJob-7.js.map +0 -1
  176. package/dist/esm/scripts/addPrioritizedJob-7.js.map +0 -1
  177. package/dist/esm/scripts/addStandardJob-7.js.map +0 -1
  178. package/dist/esm/scripts/changePriority-6.js.map +0 -1
  179. package/dist/esm/scripts/moveJobsToWait-7.js.map +0 -1
  180. package/dist/esm/scripts/promote-8.js.map +0 -1
  181. package/dist/esm/scripts/reprocessJob-7.js.map +0 -1
  182. /package/dist/esm/scripts/{addPrioritizedJob-7.d.ts → addPrioritizedJob-8.d.ts} +0 -0
  183. /package/dist/esm/scripts/{addStandardJob-7.d.ts → addStandardJob-8.d.ts} +0 -0
  184. /package/dist/esm/scripts/{changePriority-6.d.ts → changePriority-7.d.ts} +0 -0
  185. /package/dist/esm/scripts/{moveJobsToWait-7.d.ts → moveJobsToWait-8.d.ts} +0 -0
  186. /package/dist/esm/scripts/{promote-8.d.ts → promote-9.d.ts} +0 -0
  187. /package/dist/esm/scripts/{removeJob-1.d.ts → removeJob-2.d.ts} +0 -0
  188. /package/dist/esm/scripts/{reprocessJob-7.d.ts → reprocessJob-8.d.ts} +0 -0
@@ -9,8 +9,9 @@ const content = `--[[
9
9
  KEYS[3] 'id'
10
10
  KEYS[4] 'prioritized'
11
11
  KEYS[5] 'completed'
12
- KEYS[6] events stream key
13
- KEYS[7] 'pc' priority counter
12
+ KEYS[6] 'active'
13
+ KEYS[7] events stream key
14
+ KEYS[8] 'pc' priority counter
14
15
  ARGV[1] msgpacked arguments array
15
16
  [1] key prefix,
16
17
  [2] custom id (will not generate one automatically)
@@ -31,8 +32,9 @@ local metaKey = KEYS[2]
31
32
  local idKey = KEYS[3]
32
33
  local priorityKey = KEYS[4]
33
34
  local completedKey = KEYS[5]
34
- local eventsKey = KEYS[6]
35
- local priorityCounterKey = KEYS[7]
35
+ local activeKey = KEYS[6]
36
+ local eventsKey = KEYS[7]
37
+ local priorityCounterKey = KEYS[8]
36
38
  local jobId
37
39
  local jobIdKey
38
40
  local rcall = redis.call
@@ -51,16 +53,17 @@ local parentData
51
53
  --[[
52
54
  Add marker if needed when a job is available.
53
55
  ]]
54
- local function addBaseMarkerIfNeeded(markerKey, isPaused)
55
- if not isPaused then
56
+ local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
57
+ if not isPausedOrMaxed then
56
58
  rcall("ZADD", markerKey, 0, "0")
57
59
  end
58
60
  end
59
- local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey, isPaused)
61
+ local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
62
+ isPausedOrMaxed)
60
63
  local prioCounter = rcall("INCR", priorityCounterKey)
61
64
  local score = priority * 0x100000000 + prioCounter % 0x100000000
62
65
  rcall("ZADD", prioritizedKey, score, jobId)
63
- addBaseMarkerIfNeeded(markerKey, isPaused)
66
+ addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
64
67
  end
65
68
  --[[
66
69
  Function to store a job
@@ -145,27 +148,45 @@ end
145
148
  Function to add job in target list and add marker if needed.
146
149
  ]]
147
150
  -- Includes
148
- local function addJobInTargetList(targetKey, markerKey, pushCmd, isPaused, jobId)
151
+ local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
149
152
  rcall(pushCmd, targetKey, jobId)
150
- addBaseMarkerIfNeeded(markerKey, isPaused)
153
+ addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
151
154
  end
152
155
  --[[
153
- Function to check for the meta.paused key to decide if we are paused or not
156
+ Function to check if queue is paused or maxed
154
157
  (since an empty list and !EXISTS are not really the same).
155
158
  ]]
156
- local function isQueuePaused(queueMetaKey)
157
- return rcall("HEXISTS", queueMetaKey, "paused") == 1
159
+ local function isQueuePausedOrMaxed(queueMetaKey, activeKey)
160
+ local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
161
+ if queueAttributes[1] then
162
+ return true
163
+ else
164
+ if queueAttributes[2] then
165
+ local activeCount = rcall("LLEN", activeKey)
166
+ return activeCount >= tonumber(queueAttributes[2])
167
+ end
168
+ end
169
+ return false
158
170
  end
159
171
  --[[
160
172
  Function to check for the meta.paused key to decide if we are paused or not
161
173
  (since an empty list and !EXISTS are not really the same).
162
174
  ]]
163
- local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
164
- if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
165
- return waitKey, false
166
- else
175
+ local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
176
+ local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
177
+ if queueAttributes[1] then
167
178
  return pausedKey, true
179
+ else
180
+ if queueAttributes[2] then
181
+ local activeCount = rcall("LLEN", activeKey)
182
+ if activeCount >= tonumber(queueAttributes[2]) then
183
+ return waitKey, true
184
+ else
185
+ return waitKey, false
186
+ end
187
+ end
168
188
  end
189
+ return waitKey, false
169
190
  end
170
191
  local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
171
192
  parentKey, parentId, timestamp)
@@ -175,6 +196,7 @@ local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
175
196
  rcall("ZREM", parentQueueKey .. ":waiting-children", parentId)
176
197
  local parentWaitKey = parentQueueKey .. ":wait"
177
198
  local parentPausedKey = parentQueueKey .. ":paused"
199
+ local parentActiveKey = parentQueueKey .. ":active"
178
200
  local parentMetaKey = parentQueueKey .. ":meta"
179
201
  local parentMarkerKey = parentQueueKey .. ":marker"
180
202
  local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
@@ -190,15 +212,16 @@ local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
190
212
  addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
191
213
  else
192
214
  if priority == 0 then
193
- local parentTarget, isParentPaused =
194
- getTargetQueueList(parentMetaKey, parentWaitKey,
215
+ local parentTarget, isParentPausedOrMaxed =
216
+ getTargetQueueList(parentMetaKey, parentActiveKey, parentWaitKey,
195
217
  parentPausedKey)
196
- addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPaused, parentId)
218
+ addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed,
219
+ parentId)
197
220
  else
198
- local isPaused = isQueuePaused(parentMetaKey)
221
+ local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
199
222
  addJobWithPriority(parentMarkerKey,
200
223
  parentQueueKey .. ":prioritized", priority,
201
- parentId, parentQueueKey .. ":pc", isPaused)
224
+ parentId, parentQueueKey .. ":pc", isPausedOrMaxed)
202
225
  end
203
226
  rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting",
204
227
  "jobId", parentId, "prev", "waiting-children")
@@ -270,8 +293,8 @@ local delay, priority = storeJob(eventsKey, jobIdKey, jobId, args[3], ARGV[2],
270
293
  opts, timestamp, parentKey, parentData,
271
294
  repeatJobKey)
272
295
  -- Add the job to the prioritized set
273
- local isPause = isQueuePaused(metaKey)
274
- addJobWithPriority( KEYS[1], priorityKey, priority, jobId, priorityCounterKey, isPause)
296
+ local isPausedOrMaxed = isQueuePausedOrMaxed(metaKey, activeKey)
297
+ addJobWithPriority( KEYS[1], priorityKey, priority, jobId, priorityCounterKey, isPausedOrMaxed)
275
298
  -- Emit waiting event
276
299
  rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "waiting",
277
300
  "jobId", jobId)
@@ -284,6 +307,6 @@ return jobId .. "" -- convert to string
284
307
  export const addPrioritizedJob = {
285
308
  name: 'addPrioritizedJob',
286
309
  content,
287
- keys: 7,
310
+ keys: 8,
288
311
  };
289
- //# sourceMappingURL=addPrioritizedJob-7.js.map
312
+ //# sourceMappingURL=addPrioritizedJob-8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addPrioritizedJob-8.js","sourceRoot":"","sources":["../../../src/scripts/addPrioritizedJob-8.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiTf,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,mBAAmB;IACzB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -18,8 +18,9 @@ const content = `--[[
18
18
  KEYS[3] 'meta'
19
19
  KEYS[4] 'id'
20
20
  KEYS[5] 'completed'
21
- KEYS[6] events stream key
22
- KEYS[7] marker key
21
+ KEYS[6] 'active'
22
+ KEYS[7] events stream key
23
+ KEYS[8] marker key
23
24
  ARGV[1] msgpacked arguments array
24
25
  [1] key prefix,
25
26
  [2] custom id (will not generate one automatically)
@@ -36,7 +37,7 @@ const content = `--[[
36
37
  jobId - OK
37
38
  -5 - Missing parent key
38
39
  ]]
39
- local eventsKey = KEYS[6]
40
+ local eventsKey = KEYS[7]
40
41
  local jobId
41
42
  local jobIdKey
42
43
  local rcall = redis.call
@@ -55,14 +56,14 @@ local parentData
55
56
  --[[
56
57
  Add marker if needed when a job is available.
57
58
  ]]
58
- local function addBaseMarkerIfNeeded(markerKey, isPaused)
59
- if not isPaused then
59
+ local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
60
+ if not isPausedOrMaxed then
60
61
  rcall("ZADD", markerKey, 0, "0")
61
62
  end
62
63
  end
63
- local function addJobInTargetList(targetKey, markerKey, pushCmd, isPaused, jobId)
64
+ local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
64
65
  rcall(pushCmd, targetKey, jobId)
65
- addBaseMarkerIfNeeded(markerKey, isPaused)
66
+ addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
66
67
  end
67
68
  --[[
68
69
  Function to get max events value or set by default 10000.
@@ -79,12 +80,21 @@ end
79
80
  Function to check for the meta.paused key to decide if we are paused or not
80
81
  (since an empty list and !EXISTS are not really the same).
81
82
  ]]
82
- local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
83
- if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
84
- return waitKey, false
85
- else
83
+ local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
84
+ local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
85
+ if queueAttributes[1] then
86
86
  return pausedKey, true
87
+ else
88
+ if queueAttributes[2] then
89
+ local activeCount = rcall("LLEN", activeKey)
90
+ if activeCount >= tonumber(queueAttributes[2]) then
91
+ return waitKey, true
92
+ else
93
+ return waitKey, false
94
+ end
95
+ end
87
96
  end
97
+ return waitKey, false
88
98
  end
89
99
  --[[
90
100
  Function to handle the case when job is duplicated.
@@ -133,18 +143,28 @@ end
133
143
  Function to add job considering priority.
134
144
  ]]
135
145
  -- Includes
136
- local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey, isPaused)
146
+ local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
147
+ isPausedOrMaxed)
137
148
  local prioCounter = rcall("INCR", priorityCounterKey)
138
149
  local score = priority * 0x100000000 + prioCounter % 0x100000000
139
150
  rcall("ZADD", prioritizedKey, score, jobId)
140
- addBaseMarkerIfNeeded(markerKey, isPaused)
151
+ addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
141
152
  end
142
153
  --[[
143
- Function to check for the meta.paused key to decide if we are paused or not
154
+ Function to check if queue is paused or maxed
144
155
  (since an empty list and !EXISTS are not really the same).
145
156
  ]]
146
- local function isQueuePaused(queueMetaKey)
147
- return rcall("HEXISTS", queueMetaKey, "paused") == 1
157
+ local function isQueuePausedOrMaxed(queueMetaKey, activeKey)
158
+ local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
159
+ if queueAttributes[1] then
160
+ return true
161
+ else
162
+ if queueAttributes[2] then
163
+ local activeCount = rcall("LLEN", activeKey)
164
+ return activeCount >= tonumber(queueAttributes[2])
165
+ end
166
+ end
167
+ return false
148
168
  end
149
169
  local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
150
170
  parentKey, parentId, timestamp)
@@ -154,6 +174,7 @@ local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
154
174
  rcall("ZREM", parentQueueKey .. ":waiting-children", parentId)
155
175
  local parentWaitKey = parentQueueKey .. ":wait"
156
176
  local parentPausedKey = parentQueueKey .. ":paused"
177
+ local parentActiveKey = parentQueueKey .. ":active"
157
178
  local parentMetaKey = parentQueueKey .. ":meta"
158
179
  local parentMarkerKey = parentQueueKey .. ":marker"
159
180
  local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
@@ -169,15 +190,16 @@ local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
169
190
  addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
170
191
  else
171
192
  if priority == 0 then
172
- local parentTarget, isParentPaused =
173
- getTargetQueueList(parentMetaKey, parentWaitKey,
193
+ local parentTarget, isParentPausedOrMaxed =
194
+ getTargetQueueList(parentMetaKey, parentActiveKey, parentWaitKey,
174
195
  parentPausedKey)
175
- addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPaused, parentId)
196
+ addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed,
197
+ parentId)
176
198
  else
177
- local isPaused = isQueuePaused(parentMetaKey)
199
+ local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
178
200
  addJobWithPriority(parentMarkerKey,
179
201
  parentQueueKey .. ":prioritized", priority,
180
- parentId, parentQueueKey .. ":pc", isPaused)
202
+ parentId, parentQueueKey .. ":pc", isPausedOrMaxed)
181
203
  end
182
204
  rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting",
183
205
  "jobId", parentId, "prev", "waiting-children")
@@ -273,10 +295,10 @@ end
273
295
  -- Store the job.
274
296
  storeJob(eventsKey, jobIdKey, jobId, args[3], ARGV[2], opts, timestamp,
275
297
  parentKey, parentData, repeatJobKey)
276
- local target, paused = getTargetQueueList(metaKey, KEYS[1], KEYS[2])
298
+ local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[6], KEYS[1], KEYS[2])
277
299
  -- LIFO or FIFO
278
300
  local pushCmd = opts['lifo'] and 'RPUSH' or 'LPUSH'
279
- addJobInTargetList(target, KEYS[7], pushCmd, paused, jobId)
301
+ addJobInTargetList(target, KEYS[8], pushCmd, isPausedOrMaxed, jobId)
280
302
  -- Emit waiting event
281
303
  rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "waiting",
282
304
  "jobId", jobId)
@@ -289,6 +311,6 @@ return jobId .. "" -- convert to string
289
311
  export const addStandardJob = {
290
312
  name: 'addStandardJob',
291
313
  content,
292
- keys: 7,
314
+ keys: 8,
293
315
  };
294
- //# sourceMappingURL=addStandardJob-7.js.map
316
+ //# sourceMappingURL=addStandardJob-8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addStandardJob-8.js","sourceRoot":"","sources":["../../../src/scripts/addStandardJob-8.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqTf,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -77,13 +77,6 @@ local function getOrSetMaxEvents(metaKey)
77
77
  end
78
78
  return maxEvents
79
79
  end
80
- --[[
81
- Function to check for the meta.paused key to decide if we are paused or not
82
- (since an empty list and !EXISTS are not really the same).
83
- ]]
84
- local function isQueuePaused(queueMetaKey)
85
- return rcall("HEXISTS", queueMetaKey, "paused") == 1
86
- end
87
80
  if rcall("EXISTS", ARGV[4]) == 1 then
88
81
  local jobId = ARGV[3]
89
82
  local delay = tonumber(ARGV[1])
@@ -98,10 +91,7 @@ if rcall("EXISTS", ARGV[4]) == 1 then
98
91
  rcall("XADD", KEYS[4], "MAXLEN", "~", maxEvents, "*", "event", "delayed",
99
92
  "jobId", jobId, "delay", delayedTimestamp)
100
93
  -- mark that a delayed job is available
101
- local isPaused = isQueuePaused(KEYS[2])
102
- if not isPaused then
103
- addDelayMarkerIfNeeded(KEYS[3], KEYS[1])
104
- end
94
+ addDelayMarkerIfNeeded(KEYS[3], KEYS[1])
105
95
  return 0
106
96
  else
107
97
  return -1
@@ -1 +1 @@
1
- {"version":3,"file":"changeDelay-4.js","sourceRoot":"","sources":["../../../src/scripts/changeDelay-4.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2GZ,CAAC;AACL,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,aAAa;IACnB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"changeDelay-4.js","sourceRoot":"","sources":["../../../src/scripts/changeDelay-4.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiGZ,CAAC;AACL,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,aAAa;IACnB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -5,8 +5,9 @@ const content = `--[[
5
5
  KEYS[2] 'paused'
6
6
  KEYS[3] 'meta'
7
7
  KEYS[4] 'prioritized'
8
- KEYS[5] 'pc' priority counter
9
- KEYS[6] 'marker'
8
+ KEYS[5] 'active'
9
+ KEYS[6] 'pc' priority counter
10
+ KEYS[7] 'marker'
10
11
  ARGV[1] priority value
11
12
  ARGV[2] job key
12
13
  ARGV[3] job id
@@ -27,35 +28,45 @@ local rcall = redis.call
27
28
  --[[
28
29
  Add marker if needed when a job is available.
29
30
  ]]
30
- local function addBaseMarkerIfNeeded(markerKey, isPaused)
31
- if not isPaused then
31
+ local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
32
+ if not isPausedOrMaxed then
32
33
  rcall("ZADD", markerKey, 0, "0")
33
34
  end
34
35
  end
35
- local function addJobInTargetList(targetKey, markerKey, pushCmd, isPaused, jobId)
36
+ local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
36
37
  rcall(pushCmd, targetKey, jobId)
37
- addBaseMarkerIfNeeded(markerKey, isPaused)
38
+ addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
38
39
  end
39
40
  --[[
40
41
  Function to add job considering priority.
41
42
  ]]
42
43
  -- Includes
43
- local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey, isPaused)
44
+ local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, priorityCounterKey,
45
+ isPausedOrMaxed)
44
46
  local prioCounter = rcall("INCR", priorityCounterKey)
45
47
  local score = priority * 0x100000000 + prioCounter % 0x100000000
46
48
  rcall("ZADD", prioritizedKey, score, jobId)
47
- addBaseMarkerIfNeeded(markerKey, isPaused)
49
+ addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
48
50
  end
49
51
  --[[
50
52
  Function to check for the meta.paused key to decide if we are paused or not
51
53
  (since an empty list and !EXISTS are not really the same).
52
54
  ]]
53
- local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
54
- if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
55
- return waitKey, false
56
- else
55
+ local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
56
+ local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
57
+ if queueAttributes[1] then
57
58
  return pausedKey, true
59
+ else
60
+ if queueAttributes[2] then
61
+ local activeCount = rcall("LLEN", activeKey)
62
+ if activeCount >= tonumber(queueAttributes[2]) then
63
+ return waitKey, true
64
+ else
65
+ return waitKey, false
66
+ end
67
+ end
58
68
  end
69
+ return waitKey, false
59
70
  end
60
71
  --[[
61
72
  Function to push back job considering priority in front of same prioritized jobs.
@@ -67,31 +78,32 @@ local function pushBackJobWithPriority(prioritizedKey, priority, jobId)
67
78
  rcall("ZADD", prioritizedKey, score, jobId)
68
79
  end
69
80
  local function reAddJobWithNewPriority( prioritizedKey, markerKey, targetKey,
70
- priorityCounter, lifo, priority, jobId, paused)
81
+ priorityCounter, lifo, priority, jobId, isPausedOrMaxed)
71
82
  if priority == 0 then
72
83
  local pushCmd = lifo and 'RPUSH' or 'LPUSH'
73
- addJobInTargetList(targetKey, markerKey, pushCmd, paused, jobId)
84
+ addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
74
85
  else
75
86
  if lifo then
76
87
  pushBackJobWithPriority(prioritizedKey, priority, jobId)
77
88
  else
78
89
  addJobWithPriority(markerKey, prioritizedKey, priority, jobId,
79
- priorityCounter, paused)
90
+ priorityCounter, isPausedOrMaxed)
80
91
  end
81
92
  end
82
93
  end
83
94
  if rcall("EXISTS", jobKey) == 1 then
84
95
  local metaKey = KEYS[3]
85
- local target, isPaused = getTargetQueueList(metaKey, KEYS[1], KEYS[2])
86
- local markerKey = KEYS[6]
96
+ local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[5], KEYS[1], KEYS[2])
87
97
  local prioritizedKey = KEYS[4]
98
+ local priorityCounterKey = KEYS[6]
99
+ local markerKey = KEYS[7]
88
100
  -- Re-add with the new priority
89
101
  if rcall("ZREM", KEYS[4], jobId) > 0 then
90
102
  reAddJobWithNewPriority( prioritizedKey, markerKey, target,
91
- KEYS[5], ARGV[4] == '1', priority, jobId, isPaused)
103
+ priorityCounterKey, ARGV[4] == '1', priority, jobId, isPausedOrMaxed)
92
104
  elseif rcall("LREM", target, -1, jobId) > 0 then
93
105
  reAddJobWithNewPriority( prioritizedKey, markerKey, target,
94
- KEYS[5], ARGV[4] == '1', priority, jobId, isPaused)
106
+ priorityCounterKey, ARGV[4] == '1', priority, jobId, isPausedOrMaxed)
95
107
  end
96
108
  rcall("HSET", jobKey, "priority", priority)
97
109
  return 0
@@ -102,6 +114,6 @@ end
102
114
  export const changePriority = {
103
115
  name: 'changePriority',
104
116
  content,
105
- keys: 6,
117
+ keys: 7,
106
118
  };
107
- //# sourceMappingURL=changePriority-6.js.map
119
+ //# sourceMappingURL=changePriority-7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changePriority-7.js","sourceRoot":"","sources":["../../../src/scripts/changePriority-7.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgHf,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -67,14 +67,14 @@ end
67
67
  --[[
68
68
  Add marker if needed when a job is available.
69
69
  ]]
70
- local function addBaseMarkerIfNeeded(markerKey, isPaused)
71
- if not isPaused then
70
+ local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
71
+ if not isPausedOrMaxed then
72
72
  rcall("ZADD", markerKey, 0, "0")
73
73
  end
74
74
  end
75
- local function addJobInTargetList(targetKey, markerKey, pushCmd, isPaused, jobId)
75
+ local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
76
76
  rcall(pushCmd, targetKey, jobId)
77
- addBaseMarkerIfNeeded(markerKey, isPaused)
77
+ addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
78
78
  end
79
79
  --[[
80
80
  Functions to destructure job key.
@@ -90,17 +90,26 @@ end
90
90
  Function to check for the meta.paused key to decide if we are paused or not
91
91
  (since an empty list and !EXISTS are not really the same).
92
92
  ]]
93
- local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
94
- if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
95
- return waitKey, false
96
- else
93
+ local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
94
+ local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
95
+ if queueAttributes[1] then
97
96
  return pausedKey, true
97
+ else
98
+ if queueAttributes[2] then
99
+ local activeCount = rcall("LLEN", activeKey)
100
+ if activeCount >= tonumber(queueAttributes[2]) then
101
+ return waitKey, true
102
+ else
103
+ return waitKey, false
104
+ end
105
+ end
98
106
  end
107
+ return waitKey, false
99
108
  end
100
109
  local function moveParentToWait(parentPrefix, parentId, emitEvent)
101
- local parentTarget, isPaused = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "wait",
102
- parentPrefix .. "paused")
103
- addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPaused, parentId)
110
+ local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
111
+ parentPrefix .. "wait", parentPrefix .. "paused")
112
+ addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
104
113
  if emitEvent then
105
114
  local parentEventStream = parentPrefix .. "events"
106
115
  rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
@@ -1 +1 @@
1
- {"version":3,"file":"cleanJobsInSet-2.js","sourceRoot":"","sources":["../../../src/scripts/cleanJobsInSet-2.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiSf,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"cleanJobsInSet-2.js","sourceRoot":"","sources":["../../../src/scripts/cleanJobsInSet-2.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Sf,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -42,14 +42,14 @@ end
42
42
  --[[
43
43
  Add marker if needed when a job is available.
44
44
  ]]
45
- local function addBaseMarkerIfNeeded(markerKey, isPaused)
46
- if not isPaused then
45
+ local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
46
+ if not isPausedOrMaxed then
47
47
  rcall("ZADD", markerKey, 0, "0")
48
48
  end
49
49
  end
50
- local function addJobInTargetList(targetKey, markerKey, pushCmd, isPaused, jobId)
50
+ local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
51
51
  rcall(pushCmd, targetKey, jobId)
52
- addBaseMarkerIfNeeded(markerKey, isPaused)
52
+ addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
53
53
  end
54
54
  --[[
55
55
  Functions to destructure job key.
@@ -65,17 +65,26 @@ end
65
65
  Function to check for the meta.paused key to decide if we are paused or not
66
66
  (since an empty list and !EXISTS are not really the same).
67
67
  ]]
68
- local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
69
- if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
70
- return waitKey, false
71
- else
68
+ local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
69
+ local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
70
+ if queueAttributes[1] then
72
71
  return pausedKey, true
72
+ else
73
+ if queueAttributes[2] then
74
+ local activeCount = rcall("LLEN", activeKey)
75
+ if activeCount >= tonumber(queueAttributes[2]) then
76
+ return waitKey, true
77
+ else
78
+ return waitKey, false
79
+ end
80
+ end
73
81
  end
82
+ return waitKey, false
74
83
  end
75
84
  local function moveParentToWait(parentPrefix, parentId, emitEvent)
76
- local parentTarget, isPaused = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "wait",
77
- parentPrefix .. "paused")
78
- addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPaused, parentId)
85
+ local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
86
+ parentPrefix .. "wait", parentPrefix .. "paused")
87
+ addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
79
88
  if emitEvent then
80
89
  local parentEventStream = parentPrefix .. "events"
81
90
  rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
@@ -1 +1 @@
1
- {"version":3,"file":"drain-4.js","sourceRoot":"","sources":["../../../src/scripts/drain-4.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsMf,CAAC;AACF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,OAAO;IACb,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"drain-4.js","sourceRoot":"","sources":["../../../src/scripts/drain-4.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Mf,CAAC;AACF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,OAAO;IACb,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -17,18 +17,17 @@ local prioritizedKey = KEYS[4]
17
17
  Function to check for the meta.paused key to decide if we are paused or not
18
18
  (since an empty list and !EXISTS are not really the same).
19
19
  ]]
20
- local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
21
- if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
22
- return waitKey, false
23
- else
24
- return pausedKey, true
25
- end
20
+ local function isQueuePaused(queueMetaKey)
21
+ return rcall("HEXISTS", queueMetaKey, "paused") == 1
26
22
  end
27
23
  for i = 1, #ARGV do
28
24
  local priority = tonumber(ARGV[i])
29
25
  if priority == 0 then
30
- local target = getTargetQueueList(KEYS[3], waitKey, pausedKey)
31
- results[#results+1] = rcall("LLEN", target)
26
+ if isQueuePaused(KEYS[3]) then
27
+ results[#results+1] = rcall("LLEN", pausedKey)
28
+ else
29
+ results[#results+1] = rcall("LLEN", waitKey)
30
+ end
32
31
  else
33
32
  results[#results+1] = rcall("ZCOUNT", prioritizedKey,
34
33
  priority * 0x100000000, (priority + 1) * 0x100000000 - 1)
@@ -1 +1 @@
1
- {"version":3,"file":"getCountsPerPriority-4.js","sourceRoot":"","sources":["../../../src/scripts/getCountsPerPriority-4.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCf,CAAC;AACF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,sBAAsB;IAC5B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"getCountsPerPriority-4.js","sourceRoot":"","sources":["../../../src/scripts/getCountsPerPriority-4.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCf,CAAC;AACF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,sBAAsB;IAC5B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -1,10 +1,10 @@
1
1
  export * from './addDelayedJob-6';
2
2
  export * from './addLog-2';
3
3
  export * from './addParentJob-4';
4
- export * from './addPrioritizedJob-7';
5
- export * from './addStandardJob-7';
4
+ export * from './addPrioritizedJob-8';
5
+ export * from './addStandardJob-8';
6
6
  export * from './changeDelay-4';
7
- export * from './changePriority-6';
7
+ export * from './changePriority-7';
8
8
  export * from './cleanJobsInSet-2';
9
9
  export * from './drain-4';
10
10
  export * from './extendLock-2';
@@ -16,8 +16,9 @@ export * from './getState-8';
16
16
  export * from './getStateV2-8';
17
17
  export * from './isFinished-3';
18
18
  export * from './isJobInList-1';
19
+ export * from './isMaxed-2';
19
20
  export * from './moveJobFromActiveToWait-10';
20
- export * from './moveJobsToWait-7';
21
+ export * from './moveJobsToWait-8';
21
22
  export * from './moveStalledJobsToWait-9';
22
23
  export * from './moveToActive-11';
23
24
  export * from './moveToDelayed-8';
@@ -26,12 +27,12 @@ export * from './moveToWaitingChildren-5';
26
27
  export * from './obliterate-2';
27
28
  export * from './paginate-1';
28
29
  export * from './pause-7';
29
- export * from './promote-8';
30
+ export * from './promote-9';
30
31
  export * from './releaseLock-1';
31
32
  export * from './removeChildDependency-1';
32
- export * from './removeJob-1';
33
+ export * from './removeJob-2';
33
34
  export * from './removeRepeatable-2';
34
- export * from './reprocessJob-7';
35
+ export * from './reprocessJob-8';
35
36
  export * from './retryJob-11';
36
37
  export * from './saveStacktrace-1';
37
38
  export * from './updateData-1';