bullmq 5.8.7 → 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 (174) 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/{addPrioritizedJob-7.lua → addPrioritizedJob-8.lua} +9 -7
  8. package/dist/cjs/commands/{addStandardJob-7.lua → addStandardJob-8.lua} +6 -5
  9. package/dist/cjs/commands/{changePriority-6.lua → changePriority-7.lua} +12 -10
  10. package/dist/cjs/commands/getCountsPerPriority-4.lua +6 -3
  11. package/dist/cjs/commands/includes/addBaseMarkerIfNeeded.lua +2 -2
  12. package/dist/cjs/commands/includes/addJobInTargetList.lua +2 -2
  13. package/dist/cjs/commands/includes/addJobWithPriority.lua +3 -2
  14. package/dist/cjs/commands/includes/getTargetQueueList.lua +14 -4
  15. package/dist/cjs/commands/includes/isQueueMaxed.lua +15 -0
  16. package/dist/cjs/commands/includes/isQueuePaused.lua +1 -1
  17. package/dist/cjs/commands/includes/isQueuePausedOrMaxed.lua +18 -0
  18. package/dist/cjs/commands/includes/moveParentToWaitIfNeeded.lua +8 -6
  19. package/dist/cjs/commands/includes/removeParentDependencyKey.lua +3 -3
  20. package/dist/cjs/commands/isMaxed-2.lua +17 -0
  21. package/dist/cjs/commands/moveJobFromActiveToWait-10.lua +2 -2
  22. package/dist/{esm/commands/moveJobsToWait-7.lua → cjs/commands/moveJobsToWait-8.lua} +4 -3
  23. package/dist/cjs/commands/moveStalledJobsToWait-9.lua +3 -3
  24. package/dist/cjs/commands/moveToActive-11.lua +4 -4
  25. package/dist/cjs/commands/moveToFinished-14.lua +4 -4
  26. package/dist/cjs/commands/moveToWaitingChildren-5.lua +4 -3
  27. package/dist/{esm/commands/promote-8.lua → cjs/commands/promote-9.lua} +9 -7
  28. package/dist/{esm/commands/removeJob-1.lua → cjs/commands/removeJob-2.lua} +2 -1
  29. package/dist/{esm/commands/reprocessJob-7.lua → cjs/commands/reprocessJob-8.lua} +4 -3
  30. package/dist/cjs/commands/retryJob-11.lua +8 -4
  31. package/dist/cjs/scripts/addDelayedJob-6.js +39 -18
  32. package/dist/cjs/scripts/addDelayedJob-6.js.map +1 -1
  33. package/dist/cjs/scripts/addParentJob-4.js +39 -18
  34. package/dist/cjs/scripts/addParentJob-4.js.map +1 -1
  35. package/dist/cjs/scripts/{addPrioritizedJob-7.js → addPrioritizedJob-8.js} +49 -26
  36. package/dist/cjs/scripts/addPrioritizedJob-8.js.map +1 -0
  37. package/dist/cjs/scripts/{addStandardJob-7.js → addStandardJob-8.js} +47 -25
  38. package/dist/cjs/scripts/addStandardJob-8.js.map +1 -0
  39. package/dist/cjs/scripts/{changePriority-6.js → changePriority-7.js} +33 -21
  40. package/dist/cjs/scripts/changePriority-7.js.map +1 -0
  41. package/dist/cjs/scripts/cleanJobsInSet-2.js +20 -11
  42. package/dist/cjs/scripts/cleanJobsInSet-2.js.map +1 -1
  43. package/dist/cjs/scripts/drain-4.js +20 -11
  44. package/dist/cjs/scripts/drain-4.js.map +1 -1
  45. package/dist/cjs/scripts/getCountsPerPriority-4.js +7 -8
  46. package/dist/cjs/scripts/getCountsPerPriority-4.js.map +1 -1
  47. package/dist/cjs/scripts/index.js +8 -7
  48. package/dist/cjs/scripts/index.js.map +1 -1
  49. package/dist/cjs/scripts/isMaxed-2.js +34 -0
  50. package/dist/cjs/scripts/isMaxed-2.js.map +1 -0
  51. package/dist/cjs/scripts/moveJobFromActiveToWait-10.js +19 -10
  52. package/dist/cjs/scripts/moveJobFromActiveToWait-10.js.map +1 -1
  53. package/dist/cjs/scripts/{moveJobsToWait-7.js → moveJobsToWait-8.js} +21 -11
  54. package/dist/cjs/scripts/moveJobsToWait-8.js.map +1 -0
  55. package/dist/cjs/scripts/moveStalledJobsToWait-9.js +45 -24
  56. package/dist/cjs/scripts/moveStalledJobsToWait-9.js.map +1 -1
  57. package/dist/cjs/scripts/moveToActive-11.js +24 -14
  58. package/dist/cjs/scripts/moveToActive-11.js.map +1 -1
  59. package/dist/cjs/scripts/moveToFinished-14.js +46 -25
  60. package/dist/cjs/scripts/moveToFinished-14.js.map +1 -1
  61. package/dist/cjs/scripts/moveToWaitingChildren-5.js +4 -3
  62. package/dist/cjs/scripts/moveToWaitingChildren-5.js.map +1 -1
  63. package/dist/cjs/scripts/obliterate-2.js +20 -11
  64. package/dist/cjs/scripts/obliterate-2.js.map +1 -1
  65. package/dist/cjs/scripts/{promote-8.js → promote-9.js} +31 -19
  66. package/dist/cjs/scripts/promote-9.js.map +1 -0
  67. package/dist/cjs/scripts/removeChildDependency-1.js +20 -11
  68. package/dist/cjs/scripts/removeChildDependency-1.js.map +1 -1
  69. package/dist/cjs/scripts/{removeJob-1.js → removeJob-2.js} +24 -14
  70. package/dist/cjs/scripts/{removeJob-1.js.map → removeJob-2.js.map} +1 -1
  71. package/dist/cjs/scripts/{reprocessJob-7.js → reprocessJob-8.js} +23 -13
  72. package/dist/cjs/scripts/reprocessJob-8.js.map +1 -0
  73. package/dist/cjs/scripts/retryJob-11.js +42 -14
  74. package/dist/cjs/scripts/retryJob-11.js.map +1 -1
  75. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  76. package/dist/esm/classes/queue.d.ts +17 -0
  77. package/dist/esm/classes/queue.js +29 -0
  78. package/dist/esm/classes/queue.js.map +1 -1
  79. package/dist/esm/classes/scripts.d.ts +2 -0
  80. package/dist/esm/classes/scripts.js +17 -1
  81. package/dist/esm/classes/scripts.js.map +1 -1
  82. package/dist/esm/classes/worker.js +1 -1
  83. package/dist/esm/classes/worker.js.map +1 -1
  84. package/dist/esm/commands/{addPrioritizedJob-7.lua → addPrioritizedJob-8.lua} +9 -7
  85. package/dist/esm/commands/{addStandardJob-7.lua → addStandardJob-8.lua} +6 -5
  86. package/dist/esm/commands/{changePriority-6.lua → changePriority-7.lua} +12 -10
  87. package/dist/esm/commands/getCountsPerPriority-4.lua +6 -3
  88. package/dist/esm/commands/includes/addBaseMarkerIfNeeded.lua +2 -2
  89. package/dist/esm/commands/includes/addJobInTargetList.lua +2 -2
  90. package/dist/esm/commands/includes/addJobWithPriority.lua +3 -2
  91. package/dist/esm/commands/includes/getTargetQueueList.lua +14 -4
  92. package/dist/esm/commands/includes/isQueueMaxed.lua +15 -0
  93. package/dist/esm/commands/includes/isQueuePaused.lua +1 -1
  94. package/dist/esm/commands/includes/isQueuePausedOrMaxed.lua +18 -0
  95. package/dist/esm/commands/includes/moveParentToWaitIfNeeded.lua +8 -6
  96. package/dist/esm/commands/includes/removeParentDependencyKey.lua +3 -3
  97. package/dist/esm/commands/isMaxed-2.lua +17 -0
  98. package/dist/esm/commands/moveJobFromActiveToWait-10.lua +2 -2
  99. package/dist/{cjs/commands/moveJobsToWait-7.lua → esm/commands/moveJobsToWait-8.lua} +4 -3
  100. package/dist/esm/commands/moveStalledJobsToWait-9.lua +3 -3
  101. package/dist/esm/commands/moveToActive-11.lua +4 -4
  102. package/dist/esm/commands/moveToFinished-14.lua +4 -4
  103. package/dist/esm/commands/moveToWaitingChildren-5.lua +4 -3
  104. package/dist/{cjs/commands/promote-8.lua → esm/commands/promote-9.lua} +9 -7
  105. package/dist/{cjs/commands/removeJob-1.lua → esm/commands/removeJob-2.lua} +2 -1
  106. package/dist/{cjs/commands/reprocessJob-7.lua → esm/commands/reprocessJob-8.lua} +4 -3
  107. package/dist/esm/commands/retryJob-11.lua +8 -4
  108. package/dist/esm/scripts/addDelayedJob-6.js +39 -18
  109. package/dist/esm/scripts/addDelayedJob-6.js.map +1 -1
  110. package/dist/esm/scripts/addParentJob-4.js +39 -18
  111. package/dist/esm/scripts/addParentJob-4.js.map +1 -1
  112. package/dist/esm/scripts/{addPrioritizedJob-7.js → addPrioritizedJob-8.js} +49 -26
  113. package/dist/esm/scripts/addPrioritizedJob-8.js.map +1 -0
  114. package/dist/esm/scripts/{addStandardJob-7.js → addStandardJob-8.js} +47 -25
  115. package/dist/esm/scripts/addStandardJob-8.js.map +1 -0
  116. package/dist/esm/scripts/{changePriority-6.js → changePriority-7.js} +33 -21
  117. package/dist/esm/scripts/changePriority-7.js.map +1 -0
  118. package/dist/esm/scripts/cleanJobsInSet-2.js +20 -11
  119. package/dist/esm/scripts/cleanJobsInSet-2.js.map +1 -1
  120. package/dist/esm/scripts/drain-4.js +20 -11
  121. package/dist/esm/scripts/drain-4.js.map +1 -1
  122. package/dist/esm/scripts/getCountsPerPriority-4.js +7 -8
  123. package/dist/esm/scripts/getCountsPerPriority-4.js.map +1 -1
  124. package/dist/esm/scripts/index.d.ts +8 -7
  125. package/dist/esm/scripts/index.js +8 -7
  126. package/dist/esm/scripts/index.js.map +1 -1
  127. package/dist/esm/scripts/isMaxed-2.d.ts +5 -0
  128. package/dist/esm/scripts/isMaxed-2.js +31 -0
  129. package/dist/esm/scripts/isMaxed-2.js.map +1 -0
  130. package/dist/esm/scripts/moveJobFromActiveToWait-10.js +19 -10
  131. package/dist/esm/scripts/moveJobFromActiveToWait-10.js.map +1 -1
  132. package/dist/esm/scripts/{moveJobsToWait-7.js → moveJobsToWait-8.js} +21 -11
  133. package/dist/esm/scripts/moveJobsToWait-8.js.map +1 -0
  134. package/dist/esm/scripts/moveStalledJobsToWait-9.js +45 -24
  135. package/dist/esm/scripts/moveStalledJobsToWait-9.js.map +1 -1
  136. package/dist/esm/scripts/moveToActive-11.js +24 -14
  137. package/dist/esm/scripts/moveToActive-11.js.map +1 -1
  138. package/dist/esm/scripts/moveToFinished-14.js +46 -25
  139. package/dist/esm/scripts/moveToFinished-14.js.map +1 -1
  140. package/dist/esm/scripts/moveToWaitingChildren-5.js +4 -3
  141. package/dist/esm/scripts/moveToWaitingChildren-5.js.map +1 -1
  142. package/dist/esm/scripts/obliterate-2.js +20 -11
  143. package/dist/esm/scripts/obliterate-2.js.map +1 -1
  144. package/dist/esm/scripts/{promote-8.js → promote-9.js} +31 -19
  145. package/dist/esm/scripts/promote-9.js.map +1 -0
  146. package/dist/esm/scripts/removeChildDependency-1.js +20 -11
  147. package/dist/esm/scripts/removeChildDependency-1.js.map +1 -1
  148. package/dist/esm/scripts/{removeJob-1.js → removeJob-2.js} +24 -14
  149. package/dist/esm/scripts/{removeJob-1.js.map → removeJob-2.js.map} +1 -1
  150. package/dist/esm/scripts/{reprocessJob-7.js → reprocessJob-8.js} +23 -13
  151. package/dist/esm/scripts/reprocessJob-8.js.map +1 -0
  152. package/dist/esm/scripts/retryJob-11.js +42 -14
  153. package/dist/esm/scripts/retryJob-11.js.map +1 -1
  154. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  155. package/package.json +2 -1
  156. package/dist/cjs/scripts/addPrioritizedJob-7.js.map +0 -1
  157. package/dist/cjs/scripts/addStandardJob-7.js.map +0 -1
  158. package/dist/cjs/scripts/changePriority-6.js.map +0 -1
  159. package/dist/cjs/scripts/moveJobsToWait-7.js.map +0 -1
  160. package/dist/cjs/scripts/promote-8.js.map +0 -1
  161. package/dist/cjs/scripts/reprocessJob-7.js.map +0 -1
  162. package/dist/esm/scripts/addPrioritizedJob-7.js.map +0 -1
  163. package/dist/esm/scripts/addStandardJob-7.js.map +0 -1
  164. package/dist/esm/scripts/changePriority-6.js.map +0 -1
  165. package/dist/esm/scripts/moveJobsToWait-7.js.map +0 -1
  166. package/dist/esm/scripts/promote-8.js.map +0 -1
  167. package/dist/esm/scripts/reprocessJob-7.js.map +0 -1
  168. /package/dist/esm/scripts/{addPrioritizedJob-7.d.ts → addPrioritizedJob-8.d.ts} +0 -0
  169. /package/dist/esm/scripts/{addStandardJob-7.d.ts → addStandardJob-8.d.ts} +0 -0
  170. /package/dist/esm/scripts/{changePriority-6.d.ts → changePriority-7.d.ts} +0 -0
  171. /package/dist/esm/scripts/{moveJobsToWait-7.d.ts → moveJobsToWait-8.d.ts} +0 -0
  172. /package/dist/esm/scripts/{promote-8.d.ts → promote-9.d.ts} +0 -0
  173. /package/dist/esm/scripts/{removeJob-1.d.ts → removeJob-2.d.ts} +0 -0
  174. /package/dist/esm/scripts/{reprocessJob-7.d.ts → reprocessJob-8.d.ts} +0 -0
@@ -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"}
@@ -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';
@@ -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';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const isMaxed: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };
@@ -0,0 +1,31 @@
1
+ const content = `--[[
2
+ Checks if queue is maxed.
3
+ Input:
4
+ KEYS[1] meta key
5
+ KEYS[2] active key
6
+ Output:
7
+ 1 if element found in the list.
8
+ ]]
9
+ local rcall = redis.call
10
+ -- Includes
11
+ --[[
12
+ Function to check if queue is maxed or not.
13
+ ]]
14
+ local function isQueueMaxed(queueMetaKey, activeKey)
15
+ local maxConcurrency = rcall("HGET", queueMetaKey, "concurrency")
16
+ if maxConcurrency then
17
+ local activeCount = rcall("LLEN", activeKey)
18
+ if activeCount >= tonumber(maxConcurrency) then
19
+ return true
20
+ end
21
+ end
22
+ return false
23
+ end
24
+ return isQueueMaxed(KEYS[1], KEYS[2])
25
+ `;
26
+ export const isMaxed = {
27
+ name: 'isMaxed',
28
+ content,
29
+ keys: 2,
30
+ };
31
+ //# sourceMappingURL=isMaxed-2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isMaxed-2.js","sourceRoot":"","sources":["../../../src/scripts/isMaxed-2.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBf,CAAC;AACF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,SAAS;IACf,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -24,14 +24,14 @@ local rcall = redis.call
24
24
  --[[
25
25
  Add marker if needed when a job is available.
26
26
  ]]
27
- local function addBaseMarkerIfNeeded(markerKey, isPaused)
28
- if not isPaused then
27
+ local function addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
28
+ if not isPausedOrMaxed then
29
29
  rcall("ZADD", markerKey, 0, "0")
30
30
  end
31
31
  end
32
- local function addJobInTargetList(targetKey, markerKey, pushCmd, isPaused, jobId)
32
+ local function addJobInTargetList(targetKey, markerKey, pushCmd, isPausedOrMaxed, jobId)
33
33
  rcall(pushCmd, targetKey, jobId)
34
- addBaseMarkerIfNeeded(markerKey, isPaused)
34
+ addBaseMarkerIfNeeded(markerKey, isPausedOrMaxed)
35
35
  end
36
36
  --[[
37
37
  Function to push back job considering priority in front of same prioritized jobs.
@@ -57,12 +57,21 @@ end
57
57
  Function to check for the meta.paused key to decide if we are paused or not
58
58
  (since an empty list and !EXISTS are not really the same).
59
59
  ]]
60
- local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
61
- if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
62
- return waitKey, false
63
- else
60
+ local function getTargetQueueList(queueMetaKey, activeKey, waitKey, pausedKey)
61
+ local queueAttributes = rcall("HMGET", queueMetaKey, "paused", "concurrency")
62
+ if queueAttributes[1] then
64
63
  return pausedKey, true
64
+ else
65
+ if queueAttributes[2] then
66
+ local activeCount = rcall("LLEN", activeKey)
67
+ if activeCount >= tonumber(queueAttributes[2]) then
68
+ return waitKey, true
69
+ else
70
+ return waitKey, false
71
+ end
72
+ end
65
73
  end
74
+ return waitKey, false
66
75
  end
67
76
  local jobId = ARGV[1]
68
77
  local token = ARGV[2]
@@ -73,13 +82,13 @@ if lockToken == token then
73
82
  local metaKey = KEYS[6]
74
83
  local removed = rcall("LREM", KEYS[1], 1, jobId)
75
84
  if removed > 0 then
76
- local target, isPaused = getTargetQueueList(metaKey, KEYS[2], KEYS[5])
85
+ local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[1], KEYS[2], KEYS[5])
77
86
  rcall("SREM", KEYS[3], jobId)
78
87
  local priority = tonumber(rcall("HGET", ARGV[3], "priority")) or 0
79
88
  if priority > 0 then
80
89
  pushBackJobWithPriority(KEYS[8], priority, jobId)
81
90
  else
82
- addJobInTargetList(target, KEYS[9], "RPUSH", isPaused, jobId)
91
+ addJobInTargetList(target, KEYS[9], "RPUSH", isPausedOrMaxed, jobId)
83
92
  end
84
93
  rcall("DEL", lockKey)
85
94
  local maxEvents = getOrSetMaxEvents(metaKey)
@@ -1 +1 @@
1
- {"version":3,"file":"moveJobFromActiveToWait-10.js","sourceRoot":"","sources":["../../../src/scripts/moveJobFromActiveToWait-10.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Ff,CAAC;AACF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,yBAAyB;IAC/B,OAAO;IACP,IAAI,EAAE,EAAE;CACT,CAAC"}
1
+ {"version":3,"file":"moveJobFromActiveToWait-10.js","sourceRoot":"","sources":["../../../src/scripts/moveJobFromActiveToWait-10.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGf,CAAC;AACF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,yBAAyB;IAC/B,OAAO;IACP,IAAI,EAAE,EAAE;CACT,CAAC"}