bullmq 2.2.0 → 2.3.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 (234) hide show
  1. package/dist/cjs/classes/job.d.ts +1 -1
  2. package/dist/cjs/classes/redis-connection.d.ts +6 -2
  3. package/dist/cjs/classes/redis-connection.js +12 -5
  4. package/dist/cjs/classes/redis-connection.js.map +1 -1
  5. package/dist/cjs/scripts/addJob-8.d.ts +5 -0
  6. package/dist/{esm/commands/addJob-8.lua → cjs/scripts/addJob-8.js} +83 -31
  7. package/dist/cjs/scripts/addJob-8.js.map +1 -0
  8. package/dist/cjs/scripts/changeDelay-4.d.ts +5 -0
  9. package/dist/cjs/{commands/changeDelay-4.lua → scripts/changeDelay-4.js} +11 -11
  10. package/dist/cjs/scripts/changeDelay-4.js.map +1 -0
  11. package/dist/cjs/scripts/cleanJobsInSet-2.d.ts +5 -0
  12. package/dist/cjs/scripts/cleanJobsInSet-2.js +264 -0
  13. package/dist/cjs/scripts/cleanJobsInSet-2.js.map +1 -0
  14. package/dist/cjs/scripts/drain-4.d.ts +5 -0
  15. package/dist/cjs/{commands/includes/removeParentDependencyKey.lua → scripts/drain-4.js} +110 -10
  16. package/dist/cjs/scripts/drain-4.js.map +1 -0
  17. package/dist/cjs/scripts/extendLock-2.d.ts +5 -0
  18. package/dist/{esm/commands/extendLock-2.lua → cjs/scripts/extendLock-2.js} +11 -4
  19. package/dist/cjs/scripts/extendLock-2.js.map +1 -0
  20. package/dist/cjs/scripts/getState-7.d.ts +5 -0
  21. package/dist/{esm/commands/getState-7.lua → cjs/scripts/getState-7.js} +22 -12
  22. package/dist/cjs/scripts/getState-7.js.map +1 -0
  23. package/dist/cjs/scripts/getStateV2-7.d.ts +5 -0
  24. package/dist/cjs/{commands/getStateV2-7.lua → scripts/getStateV2-7.js} +11 -10
  25. package/dist/cjs/scripts/getStateV2-7.js.map +1 -0
  26. package/dist/cjs/scripts/index.d.ts +26 -0
  27. package/dist/cjs/scripts/index.js +30 -0
  28. package/dist/cjs/scripts/index.js.map +1 -0
  29. package/dist/cjs/scripts/isFinished-3.d.ts +5 -0
  30. package/dist/cjs/{commands/isFinished-3.lua → scripts/isFinished-3.js} +11 -10
  31. package/dist/cjs/scripts/isFinished-3.js.map +1 -0
  32. package/dist/cjs/scripts/isJobInList-1.d.ts +5 -0
  33. package/dist/cjs/scripts/isJobInList-1.js +32 -0
  34. package/dist/cjs/scripts/isJobInList-1.js.map +1 -0
  35. package/dist/cjs/scripts/moveStalledJobsToWait-8.d.ts +5 -0
  36. package/dist/cjs/scripts/moveStalledJobsToWait-8.js +291 -0
  37. package/dist/cjs/scripts/moveStalledJobsToWait-8.js.map +1 -0
  38. package/dist/cjs/scripts/moveToActive-9.d.ts +5 -0
  39. package/dist/cjs/scripts/moveToActive-9.js +207 -0
  40. package/dist/cjs/scripts/moveToActive-9.js.map +1 -0
  41. package/dist/cjs/scripts/moveToDelayed-5.d.ts +5 -0
  42. package/dist/cjs/{commands/moveToDelayed-5.lua → scripts/moveToDelayed-5.js} +11 -13
  43. package/dist/cjs/scripts/moveToDelayed-5.js.map +1 -0
  44. package/dist/cjs/scripts/moveToFinished-12.d.ts +5 -0
  45. package/dist/cjs/scripts/moveToFinished-12.js +538 -0
  46. package/dist/cjs/scripts/moveToFinished-12.js.map +1 -0
  47. package/dist/cjs/scripts/moveToWaitingChildren-4.d.ts +5 -0
  48. package/dist/cjs/{commands/moveToWaitingChildren-4.lua → scripts/moveToWaitingChildren-4.js} +11 -14
  49. package/dist/cjs/scripts/moveToWaitingChildren-4.js.map +1 -0
  50. package/dist/cjs/scripts/obliterate-2.d.ts +5 -0
  51. package/dist/cjs/scripts/obliterate-2.js +241 -0
  52. package/dist/cjs/scripts/obliterate-2.js.map +1 -0
  53. package/dist/cjs/scripts/pause-4.d.ts +5 -0
  54. package/dist/{esm/commands/pause-4.lua → cjs/scripts/pause-4.js} +11 -7
  55. package/dist/cjs/scripts/pause-4.js.map +1 -0
  56. package/dist/cjs/scripts/promote-6.d.ts +5 -0
  57. package/dist/cjs/{commands/promote-6.lua → scripts/promote-6.js} +22 -14
  58. package/dist/cjs/scripts/promote-6.js.map +1 -0
  59. package/dist/cjs/scripts/releaseLock-1.d.ts +5 -0
  60. package/dist/{esm/commands/releaseLock-1.lua → cjs/scripts/releaseLock-1.js} +11 -5
  61. package/dist/cjs/scripts/releaseLock-1.js.map +1 -0
  62. package/dist/cjs/scripts/removeJob-1.d.ts +5 -0
  63. package/dist/cjs/scripts/removeJob-1.js +206 -0
  64. package/dist/cjs/scripts/removeJob-1.js.map +1 -0
  65. package/dist/cjs/scripts/removeRepeatable-2.d.ts +5 -0
  66. package/dist/cjs/{commands/removeRepeatable-2.lua → scripts/removeRepeatable-2.js} +11 -7
  67. package/dist/cjs/scripts/removeRepeatable-2.js.map +1 -0
  68. package/dist/cjs/scripts/reprocessJob-4.d.ts +5 -0
  69. package/dist/{esm/commands/reprocessJob-4.lua → cjs/scripts/reprocessJob-4.js} +11 -5
  70. package/dist/cjs/scripts/reprocessJob-4.js.map +1 -0
  71. package/dist/cjs/scripts/retryJob-6.d.ts +5 -0
  72. package/dist/{esm/commands/retryJob-6.lua → cjs/scripts/retryJob-6.js} +22 -13
  73. package/dist/cjs/scripts/retryJob-6.js.map +1 -0
  74. package/dist/cjs/scripts/retryJobs-6.d.ts +5 -0
  75. package/dist/cjs/{commands/retryJobs-6.lua → scripts/retryJobs-6.js} +38 -15
  76. package/dist/cjs/scripts/retryJobs-6.js.map +1 -0
  77. package/dist/cjs/scripts/takeLock-1.d.ts +5 -0
  78. package/dist/cjs/{commands/takeLock-1.lua → scripts/takeLock-1.js} +11 -4
  79. package/dist/cjs/scripts/takeLock-1.js.map +1 -0
  80. package/dist/cjs/scripts/updateData-1.d.ts +5 -0
  81. package/dist/cjs/scripts/updateData-1.js +23 -0
  82. package/dist/cjs/scripts/updateData-1.js.map +1 -0
  83. package/dist/cjs/scripts/updateProgress-2.d.ts +5 -0
  84. package/dist/{esm/commands/updateProgress-2.lua → cjs/scripts/updateProgress-2.js} +11 -5
  85. package/dist/cjs/scripts/updateProgress-2.js.map +1 -0
  86. package/dist/esm/classes/job.d.ts +1 -1
  87. package/dist/esm/classes/redis-connection.d.ts +6 -2
  88. package/dist/esm/classes/redis-connection.js +12 -5
  89. package/dist/esm/classes/redis-connection.js.map +1 -1
  90. package/dist/esm/scripts/addJob-8.d.ts +5 -0
  91. package/dist/{cjs/commands/addJob-8.lua → esm/scripts/addJob-8.js} +80 -31
  92. package/dist/esm/scripts/addJob-8.js.map +1 -0
  93. package/dist/esm/scripts/changeDelay-4.d.ts +5 -0
  94. package/dist/esm/{commands/changeDelay-4.lua → scripts/changeDelay-4.js} +8 -11
  95. package/dist/esm/scripts/changeDelay-4.js.map +1 -0
  96. package/dist/esm/scripts/cleanJobsInSet-2.d.ts +5 -0
  97. package/dist/esm/scripts/cleanJobsInSet-2.js +261 -0
  98. package/dist/esm/scripts/cleanJobsInSet-2.js.map +1 -0
  99. package/dist/esm/scripts/drain-4.d.ts +5 -0
  100. package/dist/esm/{commands/includes/removeParentDependencyKey.lua → scripts/drain-4.js} +107 -10
  101. package/dist/esm/scripts/drain-4.js.map +1 -0
  102. package/dist/esm/scripts/extendLock-2.d.ts +5 -0
  103. package/dist/{cjs/commands/extendLock-2.lua → esm/scripts/extendLock-2.js} +8 -4
  104. package/dist/esm/scripts/extendLock-2.js.map +1 -0
  105. package/dist/esm/scripts/getState-7.d.ts +5 -0
  106. package/dist/{cjs/commands/getState-7.lua → esm/scripts/getState-7.js} +19 -12
  107. package/dist/esm/scripts/getState-7.js.map +1 -0
  108. package/dist/esm/scripts/getStateV2-7.d.ts +5 -0
  109. package/dist/esm/{commands/getStateV2-7.lua → scripts/getStateV2-7.js} +8 -10
  110. package/dist/esm/scripts/getStateV2-7.js.map +1 -0
  111. package/dist/esm/scripts/index.d.ts +26 -0
  112. package/dist/esm/scripts/index.js +27 -0
  113. package/dist/esm/scripts/index.js.map +1 -0
  114. package/dist/esm/scripts/isFinished-3.d.ts +5 -0
  115. package/dist/esm/{commands/isFinished-3.lua → scripts/isFinished-3.js} +8 -10
  116. package/dist/esm/scripts/isFinished-3.js.map +1 -0
  117. package/dist/esm/scripts/isJobInList-1.d.ts +5 -0
  118. package/dist/esm/scripts/isJobInList-1.js +29 -0
  119. package/dist/esm/scripts/isJobInList-1.js.map +1 -0
  120. package/dist/esm/scripts/moveStalledJobsToWait-8.d.ts +5 -0
  121. package/dist/esm/scripts/moveStalledJobsToWait-8.js +288 -0
  122. package/dist/esm/scripts/moveStalledJobsToWait-8.js.map +1 -0
  123. package/dist/esm/scripts/moveToActive-9.d.ts +5 -0
  124. package/dist/esm/scripts/moveToActive-9.js +204 -0
  125. package/dist/esm/scripts/moveToActive-9.js.map +1 -0
  126. package/dist/esm/scripts/moveToDelayed-5.d.ts +5 -0
  127. package/dist/esm/{commands/moveToDelayed-5.lua → scripts/moveToDelayed-5.js} +8 -13
  128. package/dist/esm/scripts/moveToDelayed-5.js.map +1 -0
  129. package/dist/esm/scripts/moveToFinished-12.d.ts +5 -0
  130. package/dist/esm/scripts/moveToFinished-12.js +535 -0
  131. package/dist/esm/scripts/moveToFinished-12.js.map +1 -0
  132. package/dist/esm/scripts/moveToWaitingChildren-4.d.ts +5 -0
  133. package/dist/esm/{commands/moveToWaitingChildren-4.lua → scripts/moveToWaitingChildren-4.js} +8 -14
  134. package/dist/esm/scripts/moveToWaitingChildren-4.js.map +1 -0
  135. package/dist/esm/scripts/obliterate-2.d.ts +5 -0
  136. package/dist/esm/scripts/obliterate-2.js +238 -0
  137. package/dist/esm/scripts/obliterate-2.js.map +1 -0
  138. package/dist/esm/scripts/pause-4.d.ts +5 -0
  139. package/dist/{cjs/commands/pause-4.lua → esm/scripts/pause-4.js} +8 -7
  140. package/dist/esm/scripts/pause-4.js.map +1 -0
  141. package/dist/esm/scripts/promote-6.d.ts +5 -0
  142. package/dist/esm/{commands/promote-6.lua → scripts/promote-6.js} +19 -14
  143. package/dist/esm/scripts/promote-6.js.map +1 -0
  144. package/dist/esm/scripts/releaseLock-1.d.ts +5 -0
  145. package/dist/{cjs/commands/releaseLock-1.lua → esm/scripts/releaseLock-1.js} +8 -5
  146. package/dist/esm/scripts/releaseLock-1.js.map +1 -0
  147. package/dist/esm/scripts/removeJob-1.d.ts +5 -0
  148. package/dist/esm/scripts/removeJob-1.js +203 -0
  149. package/dist/esm/scripts/removeJob-1.js.map +1 -0
  150. package/dist/esm/scripts/removeRepeatable-2.d.ts +5 -0
  151. package/dist/esm/{commands/removeRepeatable-2.lua → scripts/removeRepeatable-2.js} +8 -7
  152. package/dist/esm/scripts/removeRepeatable-2.js.map +1 -0
  153. package/dist/esm/scripts/reprocessJob-4.d.ts +5 -0
  154. package/dist/{cjs/commands/reprocessJob-4.lua → esm/scripts/reprocessJob-4.js} +8 -5
  155. package/dist/esm/scripts/reprocessJob-4.js.map +1 -0
  156. package/dist/esm/scripts/retryJob-6.d.ts +5 -0
  157. package/dist/{cjs/commands/retryJob-6.lua → esm/scripts/retryJob-6.js} +19 -13
  158. package/dist/esm/scripts/retryJob-6.js.map +1 -0
  159. package/dist/esm/scripts/retryJobs-6.d.ts +5 -0
  160. package/dist/esm/{commands/retryJobs-6.lua → scripts/retryJobs-6.js} +35 -15
  161. package/dist/esm/scripts/retryJobs-6.js.map +1 -0
  162. package/dist/esm/scripts/takeLock-1.d.ts +5 -0
  163. package/dist/esm/{commands/takeLock-1.lua → scripts/takeLock-1.js} +8 -4
  164. package/dist/esm/scripts/takeLock-1.js.map +1 -0
  165. package/dist/esm/scripts/updateData-1.d.ts +5 -0
  166. package/dist/esm/{commands/updateData-1.lua → scripts/updateData-1.js} +8 -4
  167. package/dist/esm/scripts/updateData-1.js.map +1 -0
  168. package/dist/esm/scripts/updateProgress-2.d.ts +5 -0
  169. package/dist/{cjs/commands/updateProgress-2.lua → esm/scripts/updateProgress-2.js} +8 -5
  170. package/dist/esm/scripts/updateProgress-2.js.map +1 -0
  171. package/package.json +4 -2
  172. package/dist/cjs/commands/cleanJobsInSet-2.lua +0 -46
  173. package/dist/cjs/commands/drain-4.lua +0 -25
  174. package/dist/cjs/commands/includes/addJobWithPriority.lua +0 -16
  175. package/dist/cjs/commands/includes/batches.lua +0 -18
  176. package/dist/cjs/commands/includes/checkItemInList.lua +0 -12
  177. package/dist/cjs/commands/includes/checkStalledJobs.lua +0 -137
  178. package/dist/cjs/commands/includes/cleanList.lua +0 -50
  179. package/dist/cjs/commands/includes/cleanSet.lua +0 -50
  180. package/dist/cjs/commands/includes/collectMetrics.lua +0 -46
  181. package/dist/cjs/commands/includes/destructureJobKey.lua +0 -12
  182. package/dist/cjs/commands/includes/getNextDelayedTimestamp.lua +0 -13
  183. package/dist/cjs/commands/includes/getTargetQueueList.lua +0 -12
  184. package/dist/cjs/commands/includes/getTimestamp.lua +0 -19
  185. package/dist/cjs/commands/includes/getZSetItems.lua +0 -7
  186. package/dist/cjs/commands/includes/isLocked.lua +0 -31
  187. package/dist/cjs/commands/includes/moveJobFromWaitToActive.lua +0 -84
  188. package/dist/cjs/commands/includes/moveParentFromWaitingChildrenToFailed.lua +0 -25
  189. package/dist/cjs/commands/includes/promoteDelayedJobs.lua +0 -49
  190. package/dist/cjs/commands/includes/removeJob.lua +0 -13
  191. package/dist/cjs/commands/includes/removeJobFromAnyState.lua +0 -26
  192. package/dist/cjs/commands/includes/removeJobs.lua +0 -38
  193. package/dist/cjs/commands/includes/removeJobsByMaxAge.lua +0 -15
  194. package/dist/cjs/commands/includes/removeJobsByMaxCount.lua +0 -15
  195. package/dist/cjs/commands/includes/trimEvents.lua +0 -12
  196. package/dist/cjs/commands/includes/updateParentDepsIfNeeded.lua +0 -28
  197. package/dist/cjs/commands/isJobInList-1.lua +0 -16
  198. package/dist/cjs/commands/moveStalledJobsToWait-8.lua +0 -24
  199. package/dist/cjs/commands/moveToActive-9.lua +0 -67
  200. package/dist/cjs/commands/moveToFinished-12.lua +0 -201
  201. package/dist/cjs/commands/obliterate-2.lua +0 -94
  202. package/dist/cjs/commands/removeJob-1.lua +0 -72
  203. package/dist/cjs/commands/updateData-1.lua +0 -16
  204. package/dist/esm/commands/cleanJobsInSet-2.lua +0 -46
  205. package/dist/esm/commands/drain-4.lua +0 -25
  206. package/dist/esm/commands/includes/addJobWithPriority.lua +0 -16
  207. package/dist/esm/commands/includes/batches.lua +0 -18
  208. package/dist/esm/commands/includes/checkItemInList.lua +0 -12
  209. package/dist/esm/commands/includes/checkStalledJobs.lua +0 -137
  210. package/dist/esm/commands/includes/cleanList.lua +0 -50
  211. package/dist/esm/commands/includes/cleanSet.lua +0 -50
  212. package/dist/esm/commands/includes/collectMetrics.lua +0 -46
  213. package/dist/esm/commands/includes/destructureJobKey.lua +0 -12
  214. package/dist/esm/commands/includes/getNextDelayedTimestamp.lua +0 -13
  215. package/dist/esm/commands/includes/getTargetQueueList.lua +0 -12
  216. package/dist/esm/commands/includes/getTimestamp.lua +0 -19
  217. package/dist/esm/commands/includes/getZSetItems.lua +0 -7
  218. package/dist/esm/commands/includes/isLocked.lua +0 -31
  219. package/dist/esm/commands/includes/moveJobFromWaitToActive.lua +0 -84
  220. package/dist/esm/commands/includes/moveParentFromWaitingChildrenToFailed.lua +0 -25
  221. package/dist/esm/commands/includes/promoteDelayedJobs.lua +0 -49
  222. package/dist/esm/commands/includes/removeJob.lua +0 -13
  223. package/dist/esm/commands/includes/removeJobFromAnyState.lua +0 -26
  224. package/dist/esm/commands/includes/removeJobs.lua +0 -38
  225. package/dist/esm/commands/includes/removeJobsByMaxAge.lua +0 -15
  226. package/dist/esm/commands/includes/removeJobsByMaxCount.lua +0 -15
  227. package/dist/esm/commands/includes/trimEvents.lua +0 -12
  228. package/dist/esm/commands/includes/updateParentDepsIfNeeded.lua +0 -28
  229. package/dist/esm/commands/isJobInList-1.lua +0 -16
  230. package/dist/esm/commands/moveStalledJobsToWait-8.lua +0 -24
  231. package/dist/esm/commands/moveToActive-9.lua +0 -67
  232. package/dist/esm/commands/moveToFinished-12.lua +0 -201
  233. package/dist/esm/commands/obliterate-2.lua +0 -94
  234. package/dist/esm/commands/removeJob-1.lua +0 -72
@@ -1,8 +1,7 @@
1
- --[[
1
+ const content = `--[[
2
2
  Adds a job to the queue by doing the following:
3
3
  - Increases the job counter if needed.
4
4
  - Creates a new job key with the job data.
5
-
6
5
  - if delayed:
7
6
  - computes timestamp.
8
7
  - adds to delayed zset.
@@ -13,7 +12,6 @@
13
12
  - FIFO
14
13
  - prioritized.
15
14
  - Adds the job to the "added" list so that workers gets notified.
16
-
17
15
  Input:
18
16
  KEYS[1] 'wait',
19
17
  KEYS[2] 'paused'
@@ -23,7 +21,6 @@
23
21
  KEYS[6] 'priority'
24
22
  KEYS[7] 'completed'
25
23
  KEYS[8] events stream key
26
-
27
24
  ARGV[1] msgpacked arguments array
28
25
  [1] key prefix,
29
26
  [2] custom id (will not generate one automatically)
@@ -34,10 +31,8 @@
34
31
  [7] parent dependencies key.
35
32
  [8] parent? {id, queueKey}
36
33
  [9] repeat job key
37
-
38
34
  ARGV[2] Json stringified job data
39
35
  ARGV[3] msgpacked options
40
-
41
36
  Output:
42
37
  jobId - OK
43
38
  -5 - Missing parent key
@@ -45,39 +40,96 @@
45
40
  local jobId
46
41
  local jobIdKey
47
42
  local rcall = redis.call
48
-
49
43
  local args = cmsgpack.unpack(ARGV[1])
50
-
51
44
  local data = ARGV[2]
52
45
  local opts = cmsgpack.unpack(ARGV[3])
53
-
54
46
  local parentKey = args[5]
55
47
  local repeatJobKey = args[9]
56
48
  local parent = args[8]
57
49
  local parentData
58
-
59
50
  -- Includes
60
- --- @include "includes/addJobWithPriority"
61
- --- @include "includes/getTargetQueueList"
62
- --- @include "includes/trimEvents"
63
- --- @include "includes/getNextDelayedTimestamp"
64
-
51
+ --[[
52
+ Function to add job considering priority.
53
+ ]]
54
+ local function addJobWithPriority(priorityKey, priority, targetKey, jobId)
55
+ rcall("ZADD", priorityKey, priority, jobId)
56
+ local count = rcall("ZCOUNT", priorityKey, 0, priority)
57
+ local len = rcall("LLEN", targetKey)
58
+ local id = rcall("LINDEX", targetKey, len - (count - 1))
59
+ if id then
60
+ rcall("LINSERT", targetKey, "BEFORE", id, jobId)
61
+ else
62
+ rcall("RPUSH", targetKey, jobId)
63
+ end
64
+ end
65
+ --[[
66
+ Function to check for the meta.paused key to decide if we are paused or not
67
+ (since an empty list and !EXISTS are not really the same).
68
+ ]]
69
+ local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
70
+ if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
71
+ return waitKey
72
+ else
73
+ return pausedKey
74
+ end
75
+ end
76
+ --[[
77
+ Function to trim events, default 10000.
78
+ ]]
79
+ local function trimEvents(metaKey, eventStreamKey)
80
+ local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
81
+ if maxEvents ~= false then
82
+ rcall("XTRIM", eventStreamKey, "MAXLEN", "~", maxEvents)
83
+ else
84
+ rcall("XTRIM", eventStreamKey, "MAXLEN", "~", 10000)
85
+ end
86
+ end
87
+ --[[
88
+ Function to return the next delayed job timestamp.
89
+ ]]
90
+ local function getNextDelayedTimestamp(delayedKey)
91
+ local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
92
+ if #result then
93
+ local nextTimestamp = tonumber(result[2])
94
+ if (nextTimestamp ~= nil) then
95
+ nextTimestamp = nextTimestamp / 0x1000
96
+ end
97
+ return nextTimestamp
98
+ end
99
+ end
65
100
  if parentKey ~= nil then
66
101
  if rcall("EXISTS", parentKey) ~= 1 then
67
102
  return -5
68
103
  end
69
-
70
104
  parentData = cjson.encode(parent)
71
105
  end
72
-
73
106
  local jobCounter = rcall("INCR", KEYS[4])
74
-
75
107
  -- Includes
76
- --- @include "includes/updateParentDepsIfNeeded"
77
-
108
+ --[[
109
+ Validate and move or add dependencies to parent.
110
+ ]]
111
+ -- Includes
112
+ local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey,
113
+ parentId, jobIdKey, returnvalue )
114
+ local processedSet = parentKey .. ":processed"
115
+ rcall("HSET", processedSet, jobIdKey, returnvalue)
116
+ local activeParent = rcall("ZSCORE", parentQueueKey .. ":waiting-children", parentId)
117
+ if rcall("SCARD", parentDependenciesKey) == 0 and activeParent then
118
+ rcall("ZREM", parentQueueKey .. ":waiting-children", parentId)
119
+ local parentTarget = getTargetQueueList(parentQueueKey .. ":meta", parentQueueKey .. ":wait",
120
+ parentQueueKey .. ":paused")
121
+ local priority = tonumber(rcall("HGET", parentKey, "priority"))
122
+ -- Standard or priority add
123
+ if priority == 0 then
124
+ rcall("RPUSH", parentTarget, parentId)
125
+ else
126
+ addJobWithPriority(parentQueueKey .. ":priority", priority, parentTarget, parentId)
127
+ end
128
+ rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
129
+ end
130
+ end
78
131
  -- Trim events before emiting them to avoid trimming events emitted in this script
79
132
  trimEvents(KEYS[3], KEYS[8])
80
-
81
133
  local parentDependenciesKey = args[7]
82
134
  if args[2] == "" then
83
135
  jobId = jobCounter
@@ -101,13 +153,11 @@ else
101
153
  return jobId .. "" -- convert to string
102
154
  end
103
155
  end
104
-
105
156
  -- Store the job.
106
157
  local jsonOpts = cjson.encode(opts)
107
158
  local delay = opts['delay'] or 0
108
159
  local priority = opts['priority'] or 0
109
160
  local timestamp = args[4]
110
-
111
161
  local optionalValues = {}
112
162
  if parentKey ~= nil then
113
163
  table.insert(optionalValues, "parentKey")
@@ -115,20 +165,15 @@ if parentKey ~= nil then
115
165
  table.insert(optionalValues, "parent")
116
166
  table.insert(optionalValues, parentData)
117
167
  end
118
-
119
168
  if repeatJobKey ~= nil then
120
169
  table.insert(optionalValues, "rjk")
121
170
  table.insert(optionalValues, repeatJobKey)
122
171
  end
123
-
124
172
  rcall("HMSET", jobIdKey, "name", args[3], "data", ARGV[2], "opts", jsonOpts,
125
173
  "timestamp", timestamp, "delay", delay, "priority", priority, unpack(optionalValues))
126
-
127
174
  rcall("XADD", KEYS[8], "*", "event", "added", "jobId", jobId, "name", args[3])
128
-
129
175
  -- Check if job is delayed
130
176
  local delayedTimestamp = (delay > 0 and (timestamp + delay)) or 0
131
-
132
177
  -- Check if job is a parent, if so add to the parents set
133
178
  local waitChildrenKey = args[6]
134
179
  if waitChildrenKey ~= nil then
@@ -150,7 +195,6 @@ elseif (delayedTimestamp ~= 0) then
150
195
  end
151
196
  else
152
197
  local target = getTargetQueueList(KEYS[3], KEYS[1], KEYS[2])
153
-
154
198
  -- Standard or priority add
155
199
  if priority == 0 then
156
200
  -- LIFO or FIFO
@@ -163,12 +207,17 @@ else
163
207
  -- Emit waiting event
164
208
  rcall("XADD", KEYS[8], "*", "event", "waiting", "jobId", jobId)
165
209
  end
166
-
167
210
  -- Check if this job is a child of another job, if so add it to the parents dependencies
168
211
  -- TODO: Should not be possible to add a child job to a parent that is not in the "waiting-children" status.
169
212
  -- fail in this case.
170
213
  if parentDependenciesKey ~= nil then
171
214
  rcall("SADD", parentDependenciesKey, jobIdKey)
172
215
  end
173
-
174
216
  return jobId .. "" -- convert to string
217
+ `;
218
+ export const addJob = {
219
+ name: 'addJob',
220
+ content,
221
+ keys: 8,
222
+ };
223
+ //# sourceMappingURL=addJob-8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addJob-8.js","sourceRoot":"","sources":["../../../src/scripts/addJob-8.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwNf,CAAC;AACF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,QAAQ;IACd,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const changeDelay: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };
@@ -1,11 +1,10 @@
1
- --[[
1
+ const content = `--[[
2
2
  Change job delay when it is in delayed set.
3
3
  Input:
4
4
  KEYS[1] delayed key
5
5
  KEYS[2] job key
6
6
  KEYS[3] events stream
7
7
  KEYS[4] delayed stream
8
-
9
8
  ARGV[1] delay
10
9
  ARGV[2] delayedTimestamp
11
10
  ARGV[3] the id of the job
@@ -13,31 +12,29 @@
13
12
  0 - OK
14
13
  -1 - Missing job.
15
14
  -3 - Job not in delayed set.
16
-
17
15
  Events:
18
16
  - delayed key.
19
17
  ]]
20
18
  local rcall = redis.call
21
-
22
19
  if rcall("EXISTS", KEYS[2]) == 1 then
23
-
24
20
  local jobId = ARGV[3]
25
21
  local score = tonumber(ARGV[2])
26
22
  local delayedTimestamp = (score / 0x1000)
27
-
28
23
  local numRemovedElements = rcall("ZREM", KEYS[1], jobId)
29
-
30
24
  if (numRemovedElements < 1) then
31
25
  return -3
32
26
  end
33
-
34
27
  rcall("HSET", KEYS[2], "delay", tonumber(ARGV[1]))
35
28
  rcall("ZADD", KEYS[1], score, jobId)
36
-
37
29
  rcall("XADD", KEYS[3], "*", "event", "delayed", "jobId", jobId, "delay", delayedTimestamp);
38
30
  rcall("XADD", KEYS[4], "*", "nextTimestamp", delayedTimestamp);
39
-
40
31
  return 0
41
32
  else
42
33
  return -1
43
- end
34
+ end`;
35
+ export const changeDelay = {
36
+ name: 'changeDelay',
37
+ content,
38
+ keys: 4,
39
+ };
40
+ //# sourceMappingURL=changeDelay-4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeDelay-4.js","sourceRoot":"","sources":["../../../src/scripts/changeDelay-4.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiCZ,CAAC;AACL,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,aAAa;IACnB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const cleanJobsInSet: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };
@@ -0,0 +1,261 @@
1
+ const content = `--[[
2
+ Remove jobs from the specific set.
3
+ Input:
4
+ KEYS[1] set key,
5
+ KEYS[2] events stream key
6
+ ARGV[1] jobKey prefix
7
+ ARGV[2] timestamp
8
+ ARGV[3] limit the number of jobs to be removed. 0 is unlimited
9
+ ARGV[4] set name, can be any of 'wait', 'active', 'paused', 'delayed', 'completed', or 'failed'
10
+ ]]
11
+ local rcall = redis.call
12
+ local rangeStart = 0
13
+ local rangeEnd = -1
14
+ local limit = tonumber(ARGV[3])
15
+ -- If we're only deleting _n_ items, avoid retrieving all items
16
+ -- for faster performance
17
+ --
18
+ -- Start from the tail of the list, since that's where oldest elements
19
+ -- are generally added for FIFO lists
20
+ if limit > 0 then
21
+ rangeStart = -1 - limit + 1
22
+ rangeEnd = -1
23
+ end
24
+ -- Includes
25
+ --[[
26
+ Function to clean job list.
27
+ Returns jobIds and deleted count number.
28
+ ]]
29
+ -- Includes
30
+ --[[
31
+ Function to get the latest saved timestamp.
32
+ ]]
33
+ local function getTimestamp(jobKey, attributes)
34
+ if #attributes == 1 then
35
+ return rcall("HGET", jobKey, attributes[1])
36
+ end
37
+ local jobTs
38
+ for _, ts in ipairs(rcall("HMGET", jobKey, unpack(attributes))) do
39
+ if (ts) then
40
+ jobTs = ts
41
+ break
42
+ end
43
+ end
44
+ return jobTs
45
+ end
46
+ --[[
47
+ Function to remove job.
48
+ ]]
49
+ -- Includes
50
+ --[[
51
+ Check if this job has a parent. If so we will just remove it from
52
+ the parent child list, but if it is the last child we should move the parent to "wait/paused"
53
+ which requires code from "moveToFinished"
54
+ ]]
55
+ --[[
56
+ Functions to destructure job key.
57
+ Just a bit of warning, these functions may be a bit slow and affect performance significantly.
58
+ ]]
59
+ local getJobIdFromKey = function (jobKey)
60
+ return string.match(jobKey, ".*:(.*)")
61
+ end
62
+ local getJobKeyPrefix = function (jobKey, jobId)
63
+ return string.sub(jobKey, 0, #jobKey - #jobId)
64
+ end
65
+ --[[
66
+ Function to check for the meta.paused key to decide if we are paused or not
67
+ (since an empty list and !EXISTS are not really the same).
68
+ ]]
69
+ local function getTargetQueueList(queueMetaKey, waitKey, pausedKey)
70
+ if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then
71
+ return waitKey
72
+ else
73
+ return pausedKey
74
+ end
75
+ end
76
+ local function moveParentToWait(parentPrefix, parentId, emitEvent)
77
+ local parentTarget = getTargetQueueList(parentPrefix .. "meta", parentPrefix .. "wait", parentPrefix .. "paused")
78
+ rcall("RPUSH", parentTarget, parentId)
79
+ if emitEvent then
80
+ local parentEventStream = parentPrefix .. "events"
81
+ rcall("XADD", parentEventStream, "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children")
82
+ end
83
+ end
84
+ local function removeParentDependencyKey(jobKey, hard, parentKey, baseKey)
85
+ if parentKey then
86
+ local parentProcessedKey = parentKey .. ":processed"
87
+ rcall("HDEL", parentProcessedKey, jobKey)
88
+ local parentDependenciesKey = parentKey .. ":dependencies"
89
+ local result = rcall("SREM", parentDependenciesKey, jobKey)
90
+ if result > 0 then
91
+ local pendingDependencies = rcall("SCARD", parentDependenciesKey)
92
+ if pendingDependencies == 0 then
93
+ local parentId = getJobIdFromKey(parentKey)
94
+ local parentPrefix = getJobKeyPrefix(parentKey, parentId)
95
+ local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
96
+ if numRemovedElements == 1 then
97
+ if hard then
98
+ if parentPrefix == baseKey then
99
+ removeParentDependencyKey(parentKey, hard, nil, baseKey)
100
+ rcall("DEL", parentKey, parentKey .. ':logs',
101
+ parentKey .. ':dependencies', parentKey .. ':processed')
102
+ else
103
+ moveParentToWait(parentPrefix, parentId)
104
+ end
105
+ else
106
+ moveParentToWait(parentPrefix, parentId, true)
107
+ end
108
+ end
109
+ end
110
+ end
111
+ else
112
+ local missedParentKey = rcall("HGET", jobKey, "parentKey")
113
+ if( (type(missedParentKey) == "string") and missedParentKey ~= "" and (rcall("EXISTS", missedParentKey) == 1)) then
114
+ local parentProcessedKey = missedParentKey .. ":processed"
115
+ rcall("HDEL", parentProcessedKey, jobKey)
116
+ local parentDependenciesKey = missedParentKey .. ":dependencies"
117
+ local result = rcall("SREM", parentDependenciesKey, jobKey)
118
+ if result > 0 then
119
+ local pendingDependencies = rcall("SCARD", parentDependenciesKey)
120
+ if pendingDependencies == 0 then
121
+ local parentId = getJobIdFromKey(missedParentKey)
122
+ local parentPrefix = getJobKeyPrefix(missedParentKey, parentId)
123
+ local numRemovedElements = rcall("ZREM", parentPrefix .. "waiting-children", parentId)
124
+ if numRemovedElements == 1 then
125
+ if hard then
126
+ if parentPrefix == baseKey then
127
+ removeParentDependencyKey(missedParentKey, hard, nil, baseKey)
128
+ rcall("DEL", missedParentKey, missedParentKey .. ':logs',
129
+ missedParentKey .. ':dependencies', missedParentKey .. ':processed')
130
+ else
131
+ moveParentToWait(parentPrefix, parentId)
132
+ end
133
+ else
134
+ moveParentToWait(parentPrefix, parentId, true)
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
142
+ local function removeJob(jobId, hard, baseKey)
143
+ local jobKey = baseKey .. jobId
144
+ removeParentDependencyKey(jobKey, hard, nil, baseKey)
145
+ rcall("DEL", jobKey, jobKey .. ':logs',
146
+ jobKey .. ':dependencies', jobKey .. ':processed')
147
+ end
148
+ local function cleanList(listKey, jobKeyPrefix, rangeStart, rangeEnd,
149
+ timestamp, isWaiting)
150
+ local jobs = rcall("LRANGE", listKey, rangeStart, rangeEnd)
151
+ local deleted = {}
152
+ local deletedCount = 0
153
+ local jobTS
154
+ local deletionMarker = ''
155
+ local jobIdsLen = #jobs
156
+ for i, job in ipairs(jobs) do
157
+ if limit > 0 and deletedCount >= limit then
158
+ break
159
+ end
160
+ local jobKey = jobKeyPrefix .. job
161
+ if (isWaiting or rcall("EXISTS", jobKey .. ":lock") == 0) then
162
+ -- Find the right timestamp of the job to compare to maxTimestamp:
163
+ -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
164
+ -- * processedOn represents when the job was last attempted, but it doesn't get populated until
165
+ -- the job is first tried
166
+ -- * timestamp is the original job submission time
167
+ -- Fetch all three of these (in that order) and use the first one that is set so that we'll leave jobs
168
+ -- that have been active within the grace period:
169
+ jobTS = getTimestamp(jobKey, {"finishedOn", "processedOn", "timestamp"})
170
+ if (not jobTS or jobTS < timestamp) then
171
+ -- replace the entry with a deletion marker; the actual deletion will
172
+ -- occur at the end of the script
173
+ rcall("LSET", listKey, rangeEnd - jobIdsLen + i, deletionMarker)
174
+ removeJob(job, true, jobKeyPrefix)
175
+ if isWaiting then
176
+ rcall("ZREM", jobKeyPrefix .. "priority", job)
177
+ end
178
+ deletedCount = deletedCount + 1
179
+ table.insert(deleted, job)
180
+ end
181
+ end
182
+ end
183
+ rcall("LREM", listKey, 0, deletionMarker)
184
+ return {deleted, deletedCount}
185
+ end
186
+ --[[
187
+ Function to clean job set.
188
+ Returns jobIds and deleted count number.
189
+ ]]
190
+ -- Includes
191
+ --[[
192
+ Function to loop in batches.
193
+ Just a bit of warning, some commands as ZREM
194
+ could receive a maximum of 7000 parameters per call.
195
+ ]]
196
+ local function batches(n, batchSize)
197
+ local i = 0
198
+ return function()
199
+ local from = i * batchSize + 1
200
+ i = i + 1
201
+ if (from <= n) then
202
+ local to = math.min(from + batchSize - 1, n)
203
+ return from, to
204
+ end
205
+ end
206
+ end
207
+ -- We use ZRANGEBYSCORE to make the case where we're deleting a limited number
208
+ -- of items in a sorted set only run a single iteration. If we simply used
209
+ -- ZRANGE, we may take a long time traversing through jobs that are within the
210
+ -- grace period.
211
+ local function getJobs(setKey, rangeStart, rangeEnd, maxTimestamp, limit)
212
+ if limit > 0 then
213
+ return rcall("ZRANGEBYSCORE", setKey, 0, maxTimestamp, "LIMIT", 0, limit)
214
+ else
215
+ return rcall("ZRANGE", setKey, rangeStart, rangeEnd)
216
+ end
217
+ end
218
+ local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, limit, attributes)
219
+ local jobs = getJobs(setKey, rangeStart, rangeEnd, timestamp, limit)
220
+ local deleted = {}
221
+ local deletedCount = 0
222
+ local jobTS
223
+ for i, job in ipairs(jobs) do
224
+ if limit > 0 and deletedCount >= limit then
225
+ break
226
+ end
227
+ local jobKey = jobKeyPrefix .. job
228
+ -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
229
+ jobTS = getTimestamp(jobKey, attributes)
230
+ if (not jobTS or jobTS < timestamp) then
231
+ removeJob(job, true, jobKeyPrefix)
232
+ deletedCount = deletedCount + 1
233
+ table.insert(deleted, job)
234
+ end
235
+ end
236
+ if(#deleted > 0) then
237
+ for from, to in batches(#deleted, 7000) do
238
+ rcall("ZREM", setKey, unpack(deleted, from, to))
239
+ end
240
+ end
241
+ return {deleted, deletedCount}
242
+ end
243
+ local result
244
+ if ARGV[4] == "active" then
245
+ result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false)
246
+ elseif ARGV[4] == "delayed" then
247
+ result = cleanSet(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], limit, {"processedOn", "timestamp"})
248
+ elseif ARGV[4] == "wait" or ARGV[4] == "paused" then
249
+ result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true)
250
+ else
251
+ result = cleanSet(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], limit, {"finishedOn"} )
252
+ end
253
+ rcall("XADD", KEYS[2], "*", "event", "cleaned", "count", result[2])
254
+ return result[1]
255
+ `;
256
+ export const cleanJobsInSet = {
257
+ name: 'cleanJobsInSet',
258
+ content,
259
+ keys: 2,
260
+ };
261
+ //# sourceMappingURL=cleanJobsInSet-2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanJobsInSet-2.js","sourceRoot":"","sources":["../../../src/scripts/cleanJobsInSet-2.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Pf,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const drain: {
2
+ name: string;
3
+ content: string;
4
+ keys: number;
5
+ };