bullmq 5.44.1 → 5.52.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 (204) hide show
  1. package/dist/cjs/classes/async-fifo-queue.js.map +1 -1
  2. package/dist/cjs/classes/child-processor.js.map +1 -1
  3. package/dist/cjs/classes/child.js.map +1 -1
  4. package/dist/cjs/classes/flow-producer.js +15 -4
  5. package/dist/cjs/classes/flow-producer.js.map +1 -1
  6. package/dist/cjs/classes/job-scheduler.js +1 -1
  7. package/dist/cjs/classes/job-scheduler.js.map +1 -1
  8. package/dist/cjs/classes/job.js +137 -54
  9. package/dist/cjs/classes/job.js.map +1 -1
  10. package/dist/cjs/classes/queue-base.js +1 -4
  11. package/dist/cjs/classes/queue-base.js.map +1 -1
  12. package/dist/cjs/classes/queue-events-producer.js.map +1 -1
  13. package/dist/cjs/classes/queue-events.js.map +1 -1
  14. package/dist/cjs/classes/queue-getters.js +12 -15
  15. package/dist/cjs/classes/queue-getters.js.map +1 -1
  16. package/dist/cjs/classes/queue-keys.js.map +1 -1
  17. package/dist/cjs/classes/queue.js +12 -13
  18. package/dist/cjs/classes/queue.js.map +1 -1
  19. package/dist/cjs/classes/redis-connection.js +1 -1
  20. package/dist/cjs/classes/redis-connection.js.map +1 -1
  21. package/dist/cjs/classes/repeat.js +1 -1
  22. package/dist/cjs/classes/repeat.js.map +1 -1
  23. package/dist/cjs/classes/scripts.js +18 -7
  24. package/dist/cjs/classes/scripts.js.map +1 -1
  25. package/dist/cjs/classes/worker.js +4 -0
  26. package/dist/cjs/classes/worker.js.map +1 -1
  27. package/dist/cjs/commands/addJobScheduler-11.lua +52 -33
  28. package/dist/cjs/commands/includes/deduplicateJob.lua +16 -17
  29. package/dist/cjs/commands/includes/isLocked.lua +1 -0
  30. package/dist/cjs/commands/includes/moveChildFromDependenciesIfNeeded.lua +79 -0
  31. package/dist/cjs/commands/includes/moveParentToWait.lua +48 -0
  32. package/dist/cjs/commands/includes/moveParentToWaitIfNeeded.lua +9 -50
  33. package/dist/cjs/commands/includes/moveParentToWaitIfNoPendingDependencies.lua +13 -0
  34. package/dist/cjs/commands/includes/removeDeduplicationKeyIfNeededOnFinalization.lua +23 -0
  35. package/dist/cjs/commands/includes/removeDeduplicationKeyIfNeededOnRemoval.lua +16 -0
  36. package/dist/cjs/commands/includes/removeJob.lua +2 -2
  37. package/dist/cjs/commands/includes/removeJobWithChildren.lua +94 -0
  38. package/dist/cjs/commands/includes/removeParentDependencyKey.lua +5 -5
  39. package/dist/cjs/commands/includes/storeJob.lua +1 -1
  40. package/dist/cjs/commands/includes/updateParentDepsIfNeeded.lua +2 -2
  41. package/dist/cjs/commands/moveStalledJobsToWait-9.lua +18 -53
  42. package/dist/cjs/commands/moveToFinished-14.lua +43 -51
  43. package/dist/cjs/commands/moveToWaitingChildren-8.lua +5 -32
  44. package/dist/cjs/commands/removeJob-3.lua +14 -72
  45. package/dist/cjs/commands/removeUnprocessedChildren-2.lua +31 -0
  46. package/dist/cjs/commands/updateJobScheduler-12.lua +29 -23
  47. package/dist/cjs/scripts/addDelayedJob-6.js +73 -55
  48. package/dist/cjs/scripts/addDelayedJob-6.js.map +1 -1
  49. package/dist/cjs/scripts/addJobScheduler-11.js +59 -40
  50. package/dist/cjs/scripts/addJobScheduler-11.js.map +1 -1
  51. package/dist/cjs/scripts/addParentJob-4.js +73 -55
  52. package/dist/cjs/scripts/addParentJob-4.js.map +1 -1
  53. package/dist/cjs/scripts/addPrioritizedJob-8.js +73 -55
  54. package/dist/cjs/scripts/addPrioritizedJob-8.js.map +1 -1
  55. package/dist/cjs/scripts/addRepeatableJob-2.js +14 -9
  56. package/dist/cjs/scripts/addRepeatableJob-2.js.map +1 -1
  57. package/dist/cjs/scripts/addStandardJob-8.js +73 -55
  58. package/dist/cjs/scripts/addStandardJob-8.js.map +1 -1
  59. package/dist/cjs/scripts/cleanJobsInSet-3.js +14 -9
  60. package/dist/cjs/scripts/cleanJobsInSet-3.js.map +1 -1
  61. package/dist/cjs/scripts/drain-5.js +14 -9
  62. package/dist/cjs/scripts/drain-5.js.map +1 -1
  63. package/dist/cjs/scripts/index.js +1 -0
  64. package/dist/cjs/scripts/index.js.map +1 -1
  65. package/dist/cjs/scripts/moveStalledJobsToWait-9.js +157 -155
  66. package/dist/cjs/scripts/moveStalledJobsToWait-9.js.map +1 -1
  67. package/dist/cjs/scripts/moveToFinished-14.js +183 -157
  68. package/dist/cjs/scripts/moveToFinished-14.js.map +1 -1
  69. package/dist/cjs/scripts/moveToWaitingChildren-8.js +145 -137
  70. package/dist/cjs/scripts/moveToWaitingChildren-8.js.map +1 -1
  71. package/dist/cjs/scripts/obliterate-2.js +14 -9
  72. package/dist/cjs/scripts/obliterate-2.js.map +1 -1
  73. package/dist/cjs/scripts/removeChildDependency-1.js +5 -5
  74. package/dist/cjs/scripts/removeJob-3.js +97 -63
  75. package/dist/cjs/scripts/removeJob-3.js.map +1 -1
  76. package/dist/cjs/scripts/removeUnprocessedChildren-2.js +338 -0
  77. package/dist/cjs/scripts/removeUnprocessedChildren-2.js.map +1 -0
  78. package/dist/cjs/scripts/updateJobScheduler-12.js +27 -21
  79. package/dist/cjs/scripts/updateJobScheduler-12.js.map +1 -1
  80. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  81. package/dist/cjs/types/index.js +1 -0
  82. package/dist/cjs/types/index.js.map +1 -1
  83. package/dist/cjs/types/job-progress.js +3 -0
  84. package/dist/cjs/types/job-progress.js.map +1 -0
  85. package/dist/cjs/utils.js +12 -1
  86. package/dist/cjs/utils.js.map +1 -1
  87. package/dist/cjs/version.js +1 -1
  88. package/dist/esm/classes/async-fifo-queue.js.map +1 -1
  89. package/dist/esm/classes/child-processor.js.map +1 -1
  90. package/dist/esm/classes/child.js.map +1 -1
  91. package/dist/esm/classes/flow-producer.js +15 -4
  92. package/dist/esm/classes/flow-producer.js.map +1 -1
  93. package/dist/esm/classes/job-scheduler.js +1 -1
  94. package/dist/esm/classes/job-scheduler.js.map +1 -1
  95. package/dist/esm/classes/job.d.ts +49 -14
  96. package/dist/esm/classes/job.js +138 -55
  97. package/dist/esm/classes/job.js.map +1 -1
  98. package/dist/esm/classes/queue-base.d.ts +1 -4
  99. package/dist/esm/classes/queue-base.js +1 -4
  100. package/dist/esm/classes/queue-base.js.map +1 -1
  101. package/dist/esm/classes/queue-events-producer.d.ts +2 -2
  102. package/dist/esm/classes/queue-events-producer.js.map +1 -1
  103. package/dist/esm/classes/queue-events.d.ts +118 -29
  104. package/dist/esm/classes/queue-events.js.map +1 -1
  105. package/dist/esm/classes/queue-getters.d.ts +11 -14
  106. package/dist/esm/classes/queue-getters.js +12 -15
  107. package/dist/esm/classes/queue-getters.js.map +1 -1
  108. package/dist/esm/classes/queue-keys.js.map +1 -1
  109. package/dist/esm/classes/queue.d.ts +14 -15
  110. package/dist/esm/classes/queue.js +12 -13
  111. package/dist/esm/classes/queue.js.map +1 -1
  112. package/dist/esm/classes/redis-connection.js +1 -1
  113. package/dist/esm/classes/redis-connection.js.map +1 -1
  114. package/dist/esm/classes/repeat.js +1 -1
  115. package/dist/esm/classes/repeat.js.map +1 -1
  116. package/dist/esm/classes/scripts.d.ts +4 -3
  117. package/dist/esm/classes/scripts.js +18 -7
  118. package/dist/esm/classes/scripts.js.map +1 -1
  119. package/dist/esm/classes/worker.d.ts +2 -1
  120. package/dist/esm/classes/worker.js +5 -1
  121. package/dist/esm/classes/worker.js.map +1 -1
  122. package/dist/esm/commands/addJobScheduler-11.lua +52 -33
  123. package/dist/esm/commands/includes/deduplicateJob.lua +16 -17
  124. package/dist/esm/commands/includes/isLocked.lua +1 -0
  125. package/dist/esm/commands/includes/moveChildFromDependenciesIfNeeded.lua +79 -0
  126. package/dist/esm/commands/includes/moveParentToWait.lua +48 -0
  127. package/dist/esm/commands/includes/moveParentToWaitIfNeeded.lua +9 -50
  128. package/dist/esm/commands/includes/moveParentToWaitIfNoPendingDependencies.lua +13 -0
  129. package/dist/esm/commands/includes/removeDeduplicationKeyIfNeededOnFinalization.lua +23 -0
  130. package/dist/esm/commands/includes/removeDeduplicationKeyIfNeededOnRemoval.lua +16 -0
  131. package/dist/esm/commands/includes/removeJob.lua +2 -2
  132. package/dist/esm/commands/includes/removeJobWithChildren.lua +94 -0
  133. package/dist/esm/commands/includes/removeParentDependencyKey.lua +5 -5
  134. package/dist/esm/commands/includes/storeJob.lua +1 -1
  135. package/dist/esm/commands/includes/updateParentDepsIfNeeded.lua +2 -2
  136. package/dist/esm/commands/moveStalledJobsToWait-9.lua +18 -53
  137. package/dist/esm/commands/moveToFinished-14.lua +43 -51
  138. package/dist/esm/commands/moveToWaitingChildren-8.lua +5 -32
  139. package/dist/esm/commands/removeJob-3.lua +14 -72
  140. package/dist/esm/commands/removeUnprocessedChildren-2.lua +31 -0
  141. package/dist/esm/commands/updateJobScheduler-12.lua +29 -23
  142. package/dist/esm/interfaces/job-json.d.ts +5 -2
  143. package/dist/esm/interfaces/minimal-job.d.ts +29 -11
  144. package/dist/esm/interfaces/queue-options.d.ts +6 -2
  145. package/dist/esm/interfaces/repeat-options.d.ts +1 -1
  146. package/dist/esm/interfaces/sandboxed-job.d.ts +2 -2
  147. package/dist/esm/interfaces/sandboxed-options.d.ts +1 -1
  148. package/dist/esm/interfaces/telemetry.d.ts +18 -15
  149. package/dist/esm/interfaces/worker-options.d.ts +10 -10
  150. package/dist/esm/scripts/addDelayedJob-6.js +73 -55
  151. package/dist/esm/scripts/addDelayedJob-6.js.map +1 -1
  152. package/dist/esm/scripts/addJobScheduler-11.js +59 -40
  153. package/dist/esm/scripts/addJobScheduler-11.js.map +1 -1
  154. package/dist/esm/scripts/addParentJob-4.js +73 -55
  155. package/dist/esm/scripts/addParentJob-4.js.map +1 -1
  156. package/dist/esm/scripts/addPrioritizedJob-8.js +73 -55
  157. package/dist/esm/scripts/addPrioritizedJob-8.js.map +1 -1
  158. package/dist/esm/scripts/addRepeatableJob-2.js +14 -9
  159. package/dist/esm/scripts/addRepeatableJob-2.js.map +1 -1
  160. package/dist/esm/scripts/addStandardJob-8.js +73 -55
  161. package/dist/esm/scripts/addStandardJob-8.js.map +1 -1
  162. package/dist/esm/scripts/cleanJobsInSet-3.js +14 -9
  163. package/dist/esm/scripts/cleanJobsInSet-3.js.map +1 -1
  164. package/dist/esm/scripts/drain-5.js +14 -9
  165. package/dist/esm/scripts/drain-5.js.map +1 -1
  166. package/dist/esm/scripts/index.d.ts +1 -0
  167. package/dist/esm/scripts/index.js +1 -0
  168. package/dist/esm/scripts/index.js.map +1 -1
  169. package/dist/esm/scripts/moveStalledJobsToWait-9.js +157 -155
  170. package/dist/esm/scripts/moveStalledJobsToWait-9.js.map +1 -1
  171. package/dist/esm/scripts/moveToFinished-14.js +183 -157
  172. package/dist/esm/scripts/moveToFinished-14.js.map +1 -1
  173. package/dist/esm/scripts/moveToWaitingChildren-8.js +145 -137
  174. package/dist/esm/scripts/moveToWaitingChildren-8.js.map +1 -1
  175. package/dist/esm/scripts/obliterate-2.js +14 -9
  176. package/dist/esm/scripts/obliterate-2.js.map +1 -1
  177. package/dist/esm/scripts/removeChildDependency-1.js +5 -5
  178. package/dist/esm/scripts/removeJob-3.js +97 -63
  179. package/dist/esm/scripts/removeJob-3.js.map +1 -1
  180. package/dist/esm/scripts/removeUnprocessedChildren-2.d.ts +5 -0
  181. package/dist/esm/scripts/removeUnprocessedChildren-2.js +335 -0
  182. package/dist/esm/scripts/removeUnprocessedChildren-2.js.map +1 -0
  183. package/dist/esm/scripts/updateJobScheduler-12.js +27 -21
  184. package/dist/esm/scripts/updateJobScheduler-12.js.map +1 -1
  185. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  186. package/dist/esm/types/index.d.ts +1 -0
  187. package/dist/esm/types/index.js +1 -0
  188. package/dist/esm/types/index.js.map +1 -1
  189. package/dist/esm/types/job-options.d.ts +13 -2
  190. package/dist/esm/types/job-progress.d.ts +1 -0
  191. package/dist/esm/types/job-progress.js +2 -0
  192. package/dist/esm/types/job-progress.js.map +1 -0
  193. package/dist/esm/utils.d.ts +17 -0
  194. package/dist/esm/utils.js +11 -0
  195. package/dist/esm/utils.js.map +1 -1
  196. package/dist/esm/version.d.ts +1 -1
  197. package/dist/esm/version.js +1 -1
  198. package/package.json +26 -21
  199. package/dist/cjs/commands/includes/moveParentFromWaitingChildrenToFailed.lua +0 -80
  200. package/dist/cjs/commands/includes/removeDeduplicationKey.lua +0 -11
  201. package/dist/cjs/commands/includes/removeDeduplicationKeyIfNeeded.lua +0 -14
  202. package/dist/esm/commands/includes/moveParentFromWaitingChildrenToFailed.lua +0 -80
  203. package/dist/esm/commands/includes/removeDeduplicationKey.lua +0 -11
  204. package/dist/esm/commands/includes/removeDeduplicationKeyIfNeeded.lua +0 -14
@@ -46,25 +46,25 @@ local parentData
46
46
  -- Includes
47
47
  --[[
48
48
  Function to debounce a job.
49
- ]]
49
+ ]]
50
50
  local function deduplicateJob(deduplicationOpts, jobId, deduplicationKey, eventsKey, maxEvents)
51
51
  local deduplicationId = deduplicationOpts and deduplicationOpts['id']
52
52
  if deduplicationId then
53
- local ttl = deduplicationOpts['ttl']
54
- local deduplicationKeyExists
55
- if ttl then
56
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
57
- else
58
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
59
- end
60
- if deduplicationKeyExists then
61
- local currentDebounceJobId = rcall('GET', deduplicationKey)
62
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
63
- "debounced", "jobId", currentDebounceJobId, "debounceId", deduplicationId)
64
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
65
- "deduplicated", "jobId", currentDebounceJobId, "deduplicationId", deduplicationId)
66
- return currentDebounceJobId
67
- end
53
+ local ttl = deduplicationOpts['ttl']
54
+ local deduplicationKeyExists
55
+ if ttl then
56
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
57
+ else
58
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
59
+ end
60
+ if deduplicationKeyExists then
61
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
62
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId", currentDebounceJobId,
63
+ "debounceId", deduplicationId)
64
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
65
+ currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
66
+ return currentDebounceJobId
67
+ end
68
68
  end
69
69
  end
70
70
  --[[
@@ -94,7 +94,16 @@ end
94
94
  ]]
95
95
  -- Includes
96
96
  --[[
97
- Validate and move parent to active if needed.
97
+ Validate and move parent to a wait status (waiting, delayed or prioritized)
98
+ if no pending dependencies.
99
+ ]]
100
+ -- Includes
101
+ --[[
102
+ Validate and move parent to a wait status (waiting, delayed or prioritized) if needed.
103
+ ]]
104
+ -- Includes
105
+ --[[
106
+ Move parent to a wait status (wait, prioritized or delayed)
98
107
  ]]
99
108
  -- Includes
100
109
  --[[
@@ -190,51 +199,60 @@ local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
190
199
  end
191
200
  return waitKey, false
192
201
  end
193
- local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
194
- parentKey, parentId, timestamp)
195
- local isParentActive = rcall("ZSCORE",
196
- parentQueueKey .. ":waiting-children", parentId)
197
- if rcall("SCARD", parentDependenciesKey) == 0 and isParentActive then
198
- rcall("ZREM", parentQueueKey .. ":waiting-children", parentId)
199
- local parentWaitKey = parentQueueKey .. ":wait"
200
- local parentPausedKey = parentQueueKey .. ":paused"
201
- local parentActiveKey = parentQueueKey .. ":active"
202
- local parentMetaKey = parentQueueKey .. ":meta"
203
- local parentMarkerKey = parentQueueKey .. ":marker"
204
- local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
205
- local priority = tonumber(jobAttributes[1]) or 0
206
- local delay = tonumber(jobAttributes[2]) or 0
207
- if delay > 0 then
208
- local delayedTimestamp = tonumber(timestamp) + delay
209
- local score = delayedTimestamp * 0x1000
210
- local parentDelayedKey = parentQueueKey .. ":delayed"
211
- rcall("ZADD", parentDelayedKey, score, parentId)
212
- rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed",
213
- "jobId", parentId, "delay", delayedTimestamp)
214
- addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
202
+ local function moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
203
+ local parentWaitKey = parentQueueKey .. ":wait"
204
+ local parentPausedKey = parentQueueKey .. ":paused"
205
+ local parentActiveKey = parentQueueKey .. ":active"
206
+ local parentMetaKey = parentQueueKey .. ":meta"
207
+ local parentMarkerKey = parentQueueKey .. ":marker"
208
+ local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
209
+ local priority = tonumber(jobAttributes[1]) or 0
210
+ local delay = tonumber(jobAttributes[2]) or 0
211
+ -- ignore dependencies if any left
212
+ rcall("HSET", parentKey, "igdp", 1)
213
+ if delay > 0 then
214
+ local delayedTimestamp = tonumber(timestamp) + delay
215
+ local score = delayedTimestamp * 0x1000
216
+ local parentDelayedKey = parentQueueKey .. ":delayed"
217
+ rcall("ZADD", parentDelayedKey, score, parentId)
218
+ rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, "delay",
219
+ delayedTimestamp)
220
+ addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
221
+ else
222
+ if priority == 0 then
223
+ local parentTarget, isParentPausedOrMaxed = getTargetQueueList(parentMetaKey, parentActiveKey,
224
+ parentWaitKey, parentPausedKey)
225
+ addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed, parentId)
215
226
  else
216
- if priority == 0 then
217
- local parentTarget, isParentPausedOrMaxed =
218
- getTargetQueueList(parentMetaKey, parentActiveKey, parentWaitKey,
219
- parentPausedKey)
220
- addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed,
221
- parentId)
222
- else
223
- local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
224
- addJobWithPriority(parentMarkerKey,
225
- parentQueueKey .. ":prioritized", priority,
226
- parentId, parentQueueKey .. ":pc", isPausedOrMaxed)
227
- end
228
- rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting",
229
- "jobId", parentId, "prev", "waiting-children")
227
+ local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
228
+ addJobWithPriority(parentMarkerKey, parentQueueKey .. ":prioritized", priority, parentId,
229
+ parentQueueKey .. ":pc", isPausedOrMaxed)
230
230
  end
231
+ rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev",
232
+ "waiting-children")
231
233
  end
232
234
  end
235
+ local function moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
236
+ if rcall("EXISTS", parentKey) == 1 then
237
+ local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
238
+ if rcall("ZSCORE", parentWaitingChildrenKey, parentId) then
239
+ rcall("ZREM", parentWaitingChildrenKey, parentId)
240
+ moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
241
+ end
242
+ end
243
+ end
244
+ local function moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey,
245
+ parentId, timestamp)
246
+ local doNotHavePendingDependencies = rcall("SCARD", parentDependenciesKey) == 0
247
+ if doNotHavePendingDependencies then
248
+ moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
249
+ end
250
+ end
233
251
  local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
234
252
  parentId, jobIdKey, returnvalue, timestamp )
235
253
  local processedSet = parentKey .. ":processed"
236
254
  rcall("HSET", processedSet, jobIdKey, returnvalue)
237
- moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
255
+ moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
238
256
  end
239
257
  local function updateExistingJobsParent(parentKey, parent, parentData,
240
258
  parentDependenciesKey, completedKey,
@@ -286,7 +304,7 @@ local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
286
304
  table.insert(optionalValues, "parent")
287
305
  table.insert(optionalValues, parentData)
288
306
  end
289
- if repeatJobKey ~= nil then
307
+ if repeatJobKey then
290
308
  table.insert(optionalValues, "rjk")
291
309
  table.insert(optionalValues, repeatJobKey)
292
310
  end
@@ -1 +1 @@
1
- {"version":3,"file":"addParentJob-4.js","sourceRoot":"","sources":["../../../src/scripts/addParentJob-4.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgVf,CAAC;AACW,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,cAAc;IACpB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"addParentJob-4.js","sourceRoot":"","sources":["../../../src/scripts/addParentJob-4.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkWf,CAAC;AACW,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,cAAc;IACpB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -78,25 +78,25 @@ local function addJobWithPriority(markerKey, prioritizedKey, priority, jobId, pr
78
78
  end
79
79
  --[[
80
80
  Function to debounce a job.
81
- ]]
81
+ ]]
82
82
  local function deduplicateJob(deduplicationOpts, jobId, deduplicationKey, eventsKey, maxEvents)
83
83
  local deduplicationId = deduplicationOpts and deduplicationOpts['id']
84
84
  if deduplicationId then
85
- local ttl = deduplicationOpts['ttl']
86
- local deduplicationKeyExists
87
- if ttl then
88
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
89
- else
90
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
91
- end
92
- if deduplicationKeyExists then
93
- local currentDebounceJobId = rcall('GET', deduplicationKey)
94
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
95
- "debounced", "jobId", currentDebounceJobId, "debounceId", deduplicationId)
96
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
97
- "deduplicated", "jobId", currentDebounceJobId, "deduplicationId", deduplicationId)
98
- return currentDebounceJobId
99
- end
85
+ local ttl = deduplicationOpts['ttl']
86
+ local deduplicationKeyExists
87
+ if ttl then
88
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
89
+ else
90
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
91
+ end
92
+ if deduplicationKeyExists then
93
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
94
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId", currentDebounceJobId,
95
+ "debounceId", deduplicationId)
96
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
97
+ currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
98
+ return currentDebounceJobId
99
+ end
100
100
  end
101
101
  end
102
102
  --[[
@@ -115,7 +115,7 @@ local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
115
115
  table.insert(optionalValues, "parent")
116
116
  table.insert(optionalValues, parentData)
117
117
  end
118
- if repeatJobKey ~= nil then
118
+ if repeatJobKey then
119
119
  table.insert(optionalValues, "rjk")
120
120
  table.insert(optionalValues, repeatJobKey)
121
121
  end
@@ -156,7 +156,16 @@ end
156
156
  ]]
157
157
  -- Includes
158
158
  --[[
159
- Validate and move parent to active if needed.
159
+ Validate and move parent to a wait status (waiting, delayed or prioritized)
160
+ if no pending dependencies.
161
+ ]]
162
+ -- Includes
163
+ --[[
164
+ Validate and move parent to a wait status (waiting, delayed or prioritized) if needed.
165
+ ]]
166
+ -- Includes
167
+ --[[
168
+ Move parent to a wait status (wait, prioritized or delayed)
160
169
  ]]
161
170
  -- Includes
162
171
  --[[
@@ -227,51 +236,60 @@ local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
227
236
  end
228
237
  return waitKey, false
229
238
  end
230
- local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
231
- parentKey, parentId, timestamp)
232
- local isParentActive = rcall("ZSCORE",
233
- parentQueueKey .. ":waiting-children", parentId)
234
- if rcall("SCARD", parentDependenciesKey) == 0 and isParentActive then
235
- rcall("ZREM", parentQueueKey .. ":waiting-children", parentId)
236
- local parentWaitKey = parentQueueKey .. ":wait"
237
- local parentPausedKey = parentQueueKey .. ":paused"
238
- local parentActiveKey = parentQueueKey .. ":active"
239
- local parentMetaKey = parentQueueKey .. ":meta"
240
- local parentMarkerKey = parentQueueKey .. ":marker"
241
- local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
242
- local priority = tonumber(jobAttributes[1]) or 0
243
- local delay = tonumber(jobAttributes[2]) or 0
244
- if delay > 0 then
245
- local delayedTimestamp = tonumber(timestamp) + delay
246
- local score = delayedTimestamp * 0x1000
247
- local parentDelayedKey = parentQueueKey .. ":delayed"
248
- rcall("ZADD", parentDelayedKey, score, parentId)
249
- rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed",
250
- "jobId", parentId, "delay", delayedTimestamp)
251
- addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
239
+ local function moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
240
+ local parentWaitKey = parentQueueKey .. ":wait"
241
+ local parentPausedKey = parentQueueKey .. ":paused"
242
+ local parentActiveKey = parentQueueKey .. ":active"
243
+ local parentMetaKey = parentQueueKey .. ":meta"
244
+ local parentMarkerKey = parentQueueKey .. ":marker"
245
+ local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
246
+ local priority = tonumber(jobAttributes[1]) or 0
247
+ local delay = tonumber(jobAttributes[2]) or 0
248
+ -- ignore dependencies if any left
249
+ rcall("HSET", parentKey, "igdp", 1)
250
+ if delay > 0 then
251
+ local delayedTimestamp = tonumber(timestamp) + delay
252
+ local score = delayedTimestamp * 0x1000
253
+ local parentDelayedKey = parentQueueKey .. ":delayed"
254
+ rcall("ZADD", parentDelayedKey, score, parentId)
255
+ rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, "delay",
256
+ delayedTimestamp)
257
+ addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
258
+ else
259
+ if priority == 0 then
260
+ local parentTarget, isParentPausedOrMaxed = getTargetQueueList(parentMetaKey, parentActiveKey,
261
+ parentWaitKey, parentPausedKey)
262
+ addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed, parentId)
252
263
  else
253
- if priority == 0 then
254
- local parentTarget, isParentPausedOrMaxed =
255
- getTargetQueueList(parentMetaKey, parentActiveKey, parentWaitKey,
256
- parentPausedKey)
257
- addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed,
258
- parentId)
259
- else
260
- local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
261
- addJobWithPriority(parentMarkerKey,
262
- parentQueueKey .. ":prioritized", priority,
263
- parentId, parentQueueKey .. ":pc", isPausedOrMaxed)
264
- end
265
- rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting",
266
- "jobId", parentId, "prev", "waiting-children")
264
+ local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
265
+ addJobWithPriority(parentMarkerKey, parentQueueKey .. ":prioritized", priority, parentId,
266
+ parentQueueKey .. ":pc", isPausedOrMaxed)
267
267
  end
268
+ rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev",
269
+ "waiting-children")
268
270
  end
269
271
  end
272
+ local function moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
273
+ if rcall("EXISTS", parentKey) == 1 then
274
+ local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
275
+ if rcall("ZSCORE", parentWaitingChildrenKey, parentId) then
276
+ rcall("ZREM", parentWaitingChildrenKey, parentId)
277
+ moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
278
+ end
279
+ end
280
+ end
281
+ local function moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey,
282
+ parentId, timestamp)
283
+ local doNotHavePendingDependencies = rcall("SCARD", parentDependenciesKey) == 0
284
+ if doNotHavePendingDependencies then
285
+ moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
286
+ end
287
+ end
270
288
  local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
271
289
  parentId, jobIdKey, returnvalue, timestamp )
272
290
  local processedSet = parentKey .. ":processed"
273
291
  rcall("HSET", processedSet, jobIdKey, returnvalue)
274
- moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
292
+ moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
275
293
  end
276
294
  local function updateExistingJobsParent(parentKey, parent, parentData,
277
295
  parentDependenciesKey, completedKey,
@@ -1 +1 @@
1
- {"version":3,"file":"addPrioritizedJob-8.js","sourceRoot":"","sources":["../../../src/scripts/addPrioritizedJob-8.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Vf,CAAC;AACW,QAAA,iBAAiB,GAAG;IAC/B,IAAI,EAAE,mBAAmB;IACzB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"addPrioritizedJob-8.js","sourceRoot":"","sources":["../../../src/scripts/addPrioritizedJob-8.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Wf,CAAC;AACW,QAAA,iBAAiB,GAAG;IAC/B,IAAI,EAAE,mBAAmB;IACzB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -32,13 +32,18 @@ local prefixKey = ARGV[5]
32
32
  ]]
33
33
  -- Includes
34
34
  --[[
35
- Function to remove deduplication key.
35
+ Function to remove deduplication key if needed
36
+ when a job is being removed.
36
37
  ]]
37
- local function removeDeduplicationKey(prefixKey, jobKey)
38
+ local function removeDeduplicationKeyIfNeededOnRemoval(prefixKey,
39
+ jobKey, jobId)
38
40
  local deduplicationId = rcall("HGET", jobKey, "deid")
39
41
  if deduplicationId then
40
42
  local deduplicationKey = prefixKey .. "de:" .. deduplicationId
41
- rcall("DEL", deduplicationKey)
43
+ local currentJobId = rcall('GET', deduplicationKey)
44
+ if currentJobId and currentJobId == jobId then
45
+ return rcall("DEL", deduplicationKey)
46
+ end
42
47
  end
43
48
  end
44
49
  --[[
@@ -100,7 +105,7 @@ local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
100
105
  end
101
106
  return waitKey, false
102
107
  end
103
- local function moveParentToWait(parentPrefix, parentId, emitEvent)
108
+ local function _moveParentToWait(parentPrefix, parentId, emitEvent)
104
109
  local parentTarget, isPausedOrMaxed = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "active",
105
110
  parentPrefix .. "wait", parentPrefix .. "paused")
106
111
  addJobInTargetList(parentTarget, parentPrefix .. "marker", "RPUSH", isPausedOrMaxed, parentId)
@@ -128,10 +133,10 @@ local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debou
128
133
  rcall("DEL", parentPrefix .. "de:" .. debounceId)
129
134
  end
130
135
  else
131
- moveParentToWait(parentPrefix, parentId)
136
+ _moveParentToWait(parentPrefix, parentId)
132
137
  end
133
138
  else
134
- moveParentToWait(parentPrefix, parentId, true)
139
+ _moveParentToWait(parentPrefix, parentId, true)
135
140
  end
136
141
  end
137
142
  end
@@ -159,10 +164,10 @@ local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey, debou
159
164
  rcall("DEL", parentPrefix .. "de:" .. parentAttributes[2])
160
165
  end
161
166
  else
162
- moveParentToWait(parentPrefix, parentId)
167
+ _moveParentToWait(parentPrefix, parentId)
163
168
  end
164
169
  else
165
- moveParentToWait(parentPrefix, parentId, true)
170
+ _moveParentToWait(parentPrefix, parentId, true)
166
171
  end
167
172
  end
168
173
  end
@@ -176,7 +181,7 @@ local function removeJob(jobId, hard, baseKey, shouldRemoveDeduplicationKey)
176
181
  local jobKey = baseKey .. jobId
177
182
  removeParentDependencyKey(jobKey, hard, nil, baseKey)
178
183
  if shouldRemoveDeduplicationKey then
179
- removeDeduplicationKey(baseKey, jobKey)
184
+ removeDeduplicationKeyIfNeededOnRemoval(baseKey, jobKey, jobId)
180
185
  end
181
186
  removeJobKeys(jobKey)
182
187
  end
@@ -1 +1 @@
1
- {"version":3,"file":"addRepeatableJob-2.js","sourceRoot":"","sources":["../../../src/scripts/addRepeatableJob-2.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Nf,CAAC;AACW,QAAA,gBAAgB,GAAG;IAC9B,IAAI,EAAE,kBAAkB;IACxB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"addRepeatableJob-2.js","sourceRoot":"","sources":["../../../src/scripts/addRepeatableJob-2.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiOf,CAAC;AACW,QAAA,gBAAgB,GAAG;IAC9B,IAAI,EAAE,kBAAkB;IACxB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -72,25 +72,25 @@ local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed
72
72
  end
73
73
  --[[
74
74
  Function to debounce a job.
75
- ]]
75
+ ]]
76
76
  local function deduplicateJob(deduplicationOpts, jobId, deduplicationKey, eventsKey, maxEvents)
77
77
  local deduplicationId = deduplicationOpts and deduplicationOpts['id']
78
78
  if deduplicationId then
79
- local ttl = deduplicationOpts['ttl']
80
- local deduplicationKeyExists
81
- if ttl then
82
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
83
- else
84
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
85
- end
86
- if deduplicationKeyExists then
87
- local currentDebounceJobId = rcall('GET', deduplicationKey)
88
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
89
- "debounced", "jobId", currentDebounceJobId, "debounceId", deduplicationId)
90
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event",
91
- "deduplicated", "jobId", currentDebounceJobId, "deduplicationId", deduplicationId)
92
- return currentDebounceJobId
93
- end
79
+ local ttl = deduplicationOpts['ttl']
80
+ local deduplicationKeyExists
81
+ if ttl then
82
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
83
+ else
84
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
85
+ end
86
+ if deduplicationKeyExists then
87
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
88
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId", currentDebounceJobId,
89
+ "debounceId", deduplicationId)
90
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
91
+ currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
92
+ return currentDebounceJobId
93
+ end
94
94
  end
95
95
  end
96
96
  --[[
@@ -140,7 +140,16 @@ end
140
140
  ]]
141
141
  -- Includes
142
142
  --[[
143
- Validate and move parent to active if needed.
143
+ Validate and move parent to a wait status (waiting, delayed or prioritized)
144
+ if no pending dependencies.
145
+ ]]
146
+ -- Includes
147
+ --[[
148
+ Validate and move parent to a wait status (waiting, delayed or prioritized) if needed.
149
+ ]]
150
+ -- Includes
151
+ --[[
152
+ Move parent to a wait status (wait, prioritized or delayed)
144
153
  ]]
145
154
  -- Includes
146
155
  --[[
@@ -200,51 +209,60 @@ local function isQueuePausedOrMaxed(queueMetaKey, activeKey)
200
209
  end
201
210
  return false
202
211
  end
203
- local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey,
204
- parentKey, parentId, timestamp)
205
- local isParentActive = rcall("ZSCORE",
206
- parentQueueKey .. ":waiting-children", parentId)
207
- if rcall("SCARD", parentDependenciesKey) == 0 and isParentActive then
208
- rcall("ZREM", parentQueueKey .. ":waiting-children", parentId)
209
- local parentWaitKey = parentQueueKey .. ":wait"
210
- local parentPausedKey = parentQueueKey .. ":paused"
211
- local parentActiveKey = parentQueueKey .. ":active"
212
- local parentMetaKey = parentQueueKey .. ":meta"
213
- local parentMarkerKey = parentQueueKey .. ":marker"
214
- local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
215
- local priority = tonumber(jobAttributes[1]) or 0
216
- local delay = tonumber(jobAttributes[2]) or 0
217
- if delay > 0 then
218
- local delayedTimestamp = tonumber(timestamp) + delay
219
- local score = delayedTimestamp * 0x1000
220
- local parentDelayedKey = parentQueueKey .. ":delayed"
221
- rcall("ZADD", parentDelayedKey, score, parentId)
222
- rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed",
223
- "jobId", parentId, "delay", delayedTimestamp)
224
- addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
212
+ local function moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
213
+ local parentWaitKey = parentQueueKey .. ":wait"
214
+ local parentPausedKey = parentQueueKey .. ":paused"
215
+ local parentActiveKey = parentQueueKey .. ":active"
216
+ local parentMetaKey = parentQueueKey .. ":meta"
217
+ local parentMarkerKey = parentQueueKey .. ":marker"
218
+ local jobAttributes = rcall("HMGET", parentKey, "priority", "delay")
219
+ local priority = tonumber(jobAttributes[1]) or 0
220
+ local delay = tonumber(jobAttributes[2]) or 0
221
+ -- ignore dependencies if any left
222
+ rcall("HSET", parentKey, "igdp", 1)
223
+ if delay > 0 then
224
+ local delayedTimestamp = tonumber(timestamp) + delay
225
+ local score = delayedTimestamp * 0x1000
226
+ local parentDelayedKey = parentQueueKey .. ":delayed"
227
+ rcall("ZADD", parentDelayedKey, score, parentId)
228
+ rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, "delay",
229
+ delayedTimestamp)
230
+ addDelayMarkerIfNeeded(parentMarkerKey, parentDelayedKey)
231
+ else
232
+ if priority == 0 then
233
+ local parentTarget, isParentPausedOrMaxed = getTargetQueueList(parentMetaKey, parentActiveKey,
234
+ parentWaitKey, parentPausedKey)
235
+ addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed, parentId)
225
236
  else
226
- if priority == 0 then
227
- local parentTarget, isParentPausedOrMaxed =
228
- getTargetQueueList(parentMetaKey, parentActiveKey, parentWaitKey,
229
- parentPausedKey)
230
- addJobInTargetList(parentTarget, parentMarkerKey, "RPUSH", isParentPausedOrMaxed,
231
- parentId)
232
- else
233
- local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
234
- addJobWithPriority(parentMarkerKey,
235
- parentQueueKey .. ":prioritized", priority,
236
- parentId, parentQueueKey .. ":pc", isPausedOrMaxed)
237
- end
238
- rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting",
239
- "jobId", parentId, "prev", "waiting-children")
237
+ local isPausedOrMaxed = isQueuePausedOrMaxed(parentMetaKey, parentActiveKey)
238
+ addJobWithPriority(parentMarkerKey, parentQueueKey .. ":prioritized", priority, parentId,
239
+ parentQueueKey .. ":pc", isPausedOrMaxed)
240
240
  end
241
+ rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev",
242
+ "waiting-children")
241
243
  end
242
244
  end
245
+ local function moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
246
+ if rcall("EXISTS", parentKey) == 1 then
247
+ local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
248
+ if rcall("ZSCORE", parentWaitingChildrenKey, parentId) then
249
+ rcall("ZREM", parentWaitingChildrenKey, parentId)
250
+ moveParentToWait(parentQueueKey, parentKey, parentId, timestamp)
251
+ end
252
+ end
253
+ end
254
+ local function moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey,
255
+ parentId, timestamp)
256
+ local doNotHavePendingDependencies = rcall("SCARD", parentDependenciesKey) == 0
257
+ if doNotHavePendingDependencies then
258
+ moveParentToWaitIfNeeded(parentQueueKey, parentKey, parentId, timestamp)
259
+ end
260
+ end
243
261
  local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
244
262
  parentId, jobIdKey, returnvalue, timestamp )
245
263
  local processedSet = parentKey .. ":processed"
246
264
  rcall("HSET", processedSet, jobIdKey, returnvalue)
247
- moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
265
+ moveParentToWaitIfNoPendingDependencies(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp)
248
266
  end
249
267
  local function updateExistingJobsParent(parentKey, parent, parentData,
250
268
  parentDependenciesKey, completedKey,
@@ -296,7 +314,7 @@ local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
296
314
  table.insert(optionalValues, "parent")
297
315
  table.insert(optionalValues, parentData)
298
316
  end
299
- if repeatJobKey ~= nil then
317
+ if repeatJobKey then
300
318
  table.insert(optionalValues, "rjk")
301
319
  table.insert(optionalValues, repeatJobKey)
302
320
  end
@@ -1 +1 @@
1
- {"version":3,"file":"addStandardJob-8.js","sourceRoot":"","sources":["../../../src/scripts/addStandardJob-8.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Vf,CAAC;AACW,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"addStandardJob-8.js","sourceRoot":"","sources":["../../../src/scripts/addStandardJob-8.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgXf,CAAC;AACW,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}