bullmq 1.58.0 → 1.59.3

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 (383) hide show
  1. package/dist/bullmq.d.ts +1839 -0
  2. package/dist/{classes → cjs/classes}/backoffs.d.ts +0 -0
  3. package/dist/{classes → cjs/classes}/backoffs.js +0 -0
  4. package/dist/cjs/classes/backoffs.js.map +1 -0
  5. package/dist/{classes → cjs/classes}/child-pool.d.ts +0 -0
  6. package/dist/{classes → cjs/classes}/child-pool.js +1 -1
  7. package/dist/cjs/classes/child-pool.js.map +1 -0
  8. package/dist/{classes → cjs/classes}/child-processor.d.ts +0 -0
  9. package/dist/{classes → cjs/classes}/child-processor.js +0 -0
  10. package/dist/cjs/classes/child-processor.js.map +1 -0
  11. package/dist/{classes → cjs/classes}/compat.d.ts +0 -0
  12. package/dist/{classes → cjs/classes}/compat.js +0 -0
  13. package/dist/cjs/classes/compat.js.map +1 -0
  14. package/dist/{classes → cjs/classes}/flow-producer.d.ts +0 -0
  15. package/dist/{classes → cjs/classes}/flow-producer.js +0 -0
  16. package/dist/cjs/classes/flow-producer.js.map +1 -0
  17. package/dist/{classes → cjs/classes}/index.d.ts +0 -0
  18. package/dist/{classes → cjs/classes}/index.js +0 -0
  19. package/dist/cjs/classes/index.js.map +1 -0
  20. package/dist/{classes → cjs/classes}/job.d.ts +0 -0
  21. package/dist/{classes → cjs/classes}/job.js +0 -0
  22. package/dist/cjs/classes/job.js.map +1 -0
  23. package/dist/{classes → cjs/classes}/master.d.ts +0 -0
  24. package/dist/{classes → cjs/classes}/master.js +0 -0
  25. package/dist/cjs/classes/master.js.map +1 -0
  26. package/dist/{classes → cjs/classes}/process-utils.d.ts +0 -0
  27. package/dist/{classes → cjs/classes}/process-utils.js +0 -0
  28. package/dist/cjs/classes/process-utils.js.map +1 -0
  29. package/dist/{classes → cjs/classes}/queue-base.d.ts +0 -0
  30. package/dist/{classes → cjs/classes}/queue-base.js +0 -0
  31. package/dist/cjs/classes/queue-base.js.map +1 -0
  32. package/dist/{classes → cjs/classes}/queue-events.d.ts +0 -0
  33. package/dist/{classes → cjs/classes}/queue-events.js +0 -0
  34. package/dist/cjs/classes/queue-events.js.map +1 -0
  35. package/dist/{classes → cjs/classes}/queue-getters.d.ts +0 -0
  36. package/dist/{classes → cjs/classes}/queue-getters.js +0 -0
  37. package/dist/cjs/classes/queue-getters.js.map +1 -0
  38. package/dist/{classes → cjs/classes}/queue-keys.d.ts +0 -0
  39. package/dist/{classes → cjs/classes}/queue-keys.js +0 -0
  40. package/dist/cjs/classes/queue-keys.js.map +1 -0
  41. package/dist/{classes → cjs/classes}/queue-scheduler.d.ts +0 -0
  42. package/dist/{classes → cjs/classes}/queue-scheduler.js +0 -0
  43. package/dist/cjs/classes/queue-scheduler.js.map +1 -0
  44. package/dist/{classes → cjs/classes}/queue.d.ts +0 -0
  45. package/dist/{classes → cjs/classes}/queue.js +0 -0
  46. package/dist/cjs/classes/queue.js.map +1 -0
  47. package/dist/{classes → cjs/classes}/redis-connection.d.ts +0 -0
  48. package/dist/{classes → cjs/classes}/redis-connection.js +3 -3
  49. package/dist/cjs/classes/redis-connection.js.map +1 -0
  50. package/dist/{classes → cjs/classes}/repeat.d.ts +0 -0
  51. package/dist/{classes → cjs/classes}/repeat.js +0 -0
  52. package/dist/cjs/classes/repeat.js.map +1 -0
  53. package/dist/{classes → cjs/classes}/sandbox.d.ts +0 -0
  54. package/dist/{classes → cjs/classes}/sandbox.js +0 -0
  55. package/dist/cjs/classes/sandbox.js.map +1 -0
  56. package/dist/{classes → cjs/classes}/scripts.d.ts +0 -0
  57. package/dist/{classes → cjs/classes}/scripts.js +0 -0
  58. package/dist/cjs/classes/scripts.js.map +1 -0
  59. package/dist/{classes → cjs/classes}/timer-manager.d.ts +0 -0
  60. package/dist/{classes → cjs/classes}/timer-manager.js +0 -0
  61. package/dist/cjs/classes/timer-manager.js.map +1 -0
  62. package/dist/{classes → cjs/classes}/worker.d.ts +0 -0
  63. package/dist/{classes → cjs/classes}/worker.js +4 -10
  64. package/dist/cjs/classes/worker.js.map +1 -0
  65. package/dist/{commands → cjs/commands}/addJob-9.lua +0 -0
  66. package/dist/{commands → cjs/commands}/changeDelay-4.lua +0 -0
  67. package/dist/{commands → cjs/commands}/cleanJobsInSet-2.lua +0 -0
  68. package/dist/{commands → cjs/commands}/drain-4.lua +0 -0
  69. package/dist/{commands → cjs/commands}/extendLock-2.lua +0 -0
  70. package/dist/{commands → cjs/commands}/getState-7.lua +0 -0
  71. package/dist/{commands → cjs/commands}/getStateV2-7.lua +0 -0
  72. package/dist/{commands → cjs/commands}/includes/destructureJobKey.lua +0 -0
  73. package/dist/{commands → cjs/commands}/includes/updateParentDepsIfNeeded.lua +0 -0
  74. package/dist/{commands → cjs/commands}/index.d.ts +0 -0
  75. package/dist/{commands → cjs/commands}/index.js +0 -0
  76. package/dist/cjs/commands/index.js.map +1 -0
  77. package/dist/{commands → cjs/commands}/isFinished-3.lua +0 -0
  78. package/dist/{commands → cjs/commands}/isJobInList-1.lua +0 -0
  79. package/dist/{commands → cjs/commands}/moveStalledJobsToWait-8.lua +0 -0
  80. package/dist/{commands → cjs/commands}/moveToActive-8.lua +0 -0
  81. package/dist/{commands → cjs/commands}/moveToDelayed-5.lua +0 -0
  82. package/dist/{commands → cjs/commands}/moveToFinished-8.lua +0 -0
  83. package/dist/{commands → cjs/commands}/moveToWaitingChildren-4.lua +0 -0
  84. package/dist/{commands → cjs/commands}/obliterate-2.lua +0 -0
  85. package/dist/{commands → cjs/commands}/pause-4.lua +0 -0
  86. package/dist/{commands → cjs/commands}/promote-5.lua +0 -0
  87. package/dist/{commands → cjs/commands}/releaseLock-1.lua +0 -0
  88. package/dist/{commands → cjs/commands}/removeJob-1.lua +0 -0
  89. package/dist/{commands → cjs/commands}/removeRepeatable-2.lua +0 -0
  90. package/dist/{commands → cjs/commands}/reprocessJob-4.lua +0 -0
  91. package/dist/{commands → cjs/commands}/retryJob-4.lua +0 -0
  92. package/dist/{commands → cjs/commands}/script-loader.d.ts +0 -0
  93. package/dist/{commands → cjs/commands}/script-loader.js +0 -0
  94. package/dist/cjs/commands/script-loader.js.map +1 -0
  95. package/dist/{commands → cjs/commands}/takeLock-1.lua +0 -0
  96. package/dist/{commands → cjs/commands}/updateDelaySet-7.lua +0 -0
  97. package/dist/{commands → cjs/commands}/updateProgress-2.lua +0 -0
  98. package/dist/{enums → cjs/enums}/error-codes.enum.d.ts +0 -0
  99. package/dist/{enums → cjs/enums}/error-codes.enum.js +0 -0
  100. package/dist/cjs/enums/error-codes.enum.js.map +1 -0
  101. package/dist/{enums → cjs/enums}/index.d.ts +0 -0
  102. package/dist/{enums → cjs/enums}/index.js +0 -0
  103. package/dist/{enums → cjs/enums}/index.js.map +1 -1
  104. package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  105. package/dist/{index.js → cjs/index.js} +0 -0
  106. package/dist/cjs/index.js.map +1 -0
  107. package/dist/{interfaces → cjs/interfaces}/advanced-options.d.ts +0 -0
  108. package/dist/{interfaces → cjs/interfaces}/advanced-options.js +0 -0
  109. package/dist/cjs/interfaces/advanced-options.js.map +1 -0
  110. package/dist/{interfaces → cjs/interfaces}/backoff-options.d.ts +0 -0
  111. package/dist/{interfaces → cjs/interfaces}/backoff-options.js +0 -0
  112. package/dist/cjs/interfaces/backoff-options.js.map +1 -0
  113. package/dist/{interfaces → cjs/interfaces}/child-command.d.ts +0 -0
  114. package/dist/{interfaces → cjs/interfaces}/child-command.js +0 -0
  115. package/dist/cjs/interfaces/child-command.js.map +1 -0
  116. package/dist/{interfaces → cjs/interfaces}/child-message.d.ts +0 -0
  117. package/dist/{interfaces → cjs/interfaces}/child-message.js +0 -0
  118. package/dist/cjs/interfaces/child-message.js.map +1 -0
  119. package/dist/{interfaces → cjs/interfaces}/connection.d.ts +0 -0
  120. package/dist/{interfaces → cjs/interfaces}/connection.js +0 -0
  121. package/dist/cjs/interfaces/connection.js.map +1 -0
  122. package/dist/{interfaces → cjs/interfaces}/flow-job.d.ts +0 -0
  123. package/dist/{interfaces → cjs/interfaces}/flow-job.js +0 -0
  124. package/dist/{interfaces → cjs/interfaces}/flow-job.js.map +1 -1
  125. package/dist/{interfaces → cjs/interfaces}/index.d.ts +0 -0
  126. package/dist/{interfaces → cjs/interfaces}/index.js +0 -0
  127. package/dist/cjs/interfaces/index.js.map +1 -0
  128. package/dist/{interfaces → cjs/interfaces}/jobs-options.d.ts +0 -0
  129. package/dist/{interfaces → cjs/interfaces}/jobs-options.js +0 -0
  130. package/dist/cjs/interfaces/jobs-options.js.map +1 -0
  131. package/dist/{interfaces → cjs/interfaces}/parent-command.d.ts +0 -0
  132. package/dist/{interfaces → cjs/interfaces}/parent-command.js +0 -0
  133. package/dist/cjs/interfaces/parent-command.js.map +1 -0
  134. package/dist/{interfaces → cjs/interfaces}/parent-message.d.ts +0 -0
  135. package/dist/{interfaces → cjs/interfaces}/parent-message.js +0 -0
  136. package/dist/cjs/interfaces/parent-message.js.map +1 -0
  137. package/dist/{interfaces → cjs/interfaces}/parent.d.ts +0 -0
  138. package/dist/{interfaces → cjs/interfaces}/parent.js +0 -0
  139. package/dist/{interfaces → cjs/interfaces}/parent.js.map +1 -1
  140. package/dist/{interfaces → cjs/interfaces}/queue-options.d.ts +0 -0
  141. package/dist/{interfaces → cjs/interfaces}/queue-options.js +0 -0
  142. package/dist/cjs/interfaces/queue-options.js.map +1 -0
  143. package/dist/{interfaces → cjs/interfaces}/queue-scheduler-options.d.ts +0 -0
  144. package/dist/{interfaces → cjs/interfaces}/queue-scheduler-options.js +0 -0
  145. package/dist/cjs/interfaces/queue-scheduler-options.js.map +1 -0
  146. package/dist/{interfaces → cjs/interfaces}/rate-limiter-options.d.ts +0 -0
  147. package/dist/{interfaces → cjs/interfaces}/rate-limiter-options.js +0 -0
  148. package/dist/cjs/interfaces/rate-limiter-options.js.map +1 -0
  149. package/dist/{interfaces → cjs/interfaces}/redis-options.d.ts +0 -0
  150. package/dist/{interfaces → cjs/interfaces}/redis-options.js +0 -0
  151. package/dist/cjs/interfaces/redis-options.js.map +1 -0
  152. package/dist/{interfaces → cjs/interfaces}/redis-streams.d.ts +0 -0
  153. package/dist/{interfaces → cjs/interfaces}/redis-streams.js +0 -0
  154. package/dist/cjs/interfaces/redis-streams.js.map +1 -0
  155. package/dist/{interfaces → cjs/interfaces}/repeat-options.d.ts +0 -0
  156. package/dist/{interfaces → cjs/interfaces}/repeat-options.js +0 -0
  157. package/dist/cjs/interfaces/repeat-options.js.map +1 -0
  158. package/dist/{interfaces → cjs/interfaces}/sandboxed-job-processor.d.ts +0 -0
  159. package/dist/{interfaces → cjs/interfaces}/sandboxed-job-processor.js +0 -0
  160. package/dist/cjs/interfaces/sandboxed-job-processor.js.map +1 -0
  161. package/dist/{interfaces → cjs/interfaces}/sandboxed-job.d.ts +0 -0
  162. package/dist/{interfaces → cjs/interfaces}/sandboxed-job.js +0 -0
  163. package/dist/cjs/interfaces/sandboxed-job.js.map +1 -0
  164. package/dist/{interfaces → cjs/interfaces}/worker-options.d.ts +0 -0
  165. package/dist/{interfaces → cjs/interfaces}/worker-options.js +0 -0
  166. package/dist/cjs/interfaces/worker-options.js.map +1 -0
  167. package/dist/{utils.d.ts → cjs/utils.d.ts} +0 -0
  168. package/dist/{utils.js → cjs/utils.js} +0 -0
  169. package/dist/cjs/utils.js.map +1 -0
  170. package/dist/esm/classes/backoffs.d.ts +15 -0
  171. package/dist/esm/classes/backoffs.js +44 -0
  172. package/dist/esm/classes/backoffs.js.map +1 -0
  173. package/dist/esm/classes/child-pool.d.ts +22 -0
  174. package/dist/esm/classes/child-pool.js +125 -0
  175. package/dist/esm/classes/child-pool.js.map +1 -0
  176. package/dist/esm/classes/child-processor.d.ts +24 -0
  177. package/dist/esm/classes/child-processor.js +165 -0
  178. package/dist/esm/classes/child-processor.js.map +1 -0
  179. package/dist/esm/classes/compat.d.ts +316 -0
  180. package/dist/esm/classes/compat.js +674 -0
  181. package/dist/esm/classes/compat.js.map +1 -0
  182. package/dist/esm/classes/flow-producer.d.ts +148 -0
  183. package/dist/esm/classes/flow-producer.js +228 -0
  184. package/dist/esm/classes/flow-producer.js.map +1 -0
  185. package/dist/esm/classes/index.d.ts +14 -0
  186. package/dist/esm/classes/index.js +15 -0
  187. package/dist/esm/classes/index.js.map +1 -0
  188. package/dist/esm/classes/job.d.ts +338 -0
  189. package/dist/esm/classes/job.js +623 -0
  190. package/dist/esm/classes/job.js.map +1 -0
  191. package/dist/esm/classes/master.d.ts +1 -0
  192. package/dist/esm/classes/master.js +35 -0
  193. package/dist/esm/classes/master.js.map +1 -0
  194. package/dist/esm/classes/process-utils.d.ts +7 -0
  195. package/dist/esm/classes/process-utils.js +31 -0
  196. package/dist/esm/classes/process-utils.js.map +1 -0
  197. package/dist/esm/classes/queue-base.d.ts +22 -0
  198. package/dist/esm/classes/queue-base.js +62 -0
  199. package/dist/esm/classes/queue-base.js.map +1 -0
  200. package/dist/esm/classes/queue-events.d.ts +153 -0
  201. package/dist/esm/classes/queue-events.js +108 -0
  202. package/dist/esm/classes/queue-events.js.map +1 -0
  203. package/dist/esm/classes/queue-getters.d.ts +54 -0
  204. package/dist/esm/classes/queue-getters.js +207 -0
  205. package/dist/esm/classes/queue-getters.js.map +1 -0
  206. package/dist/esm/classes/queue-keys.d.ts +10 -0
  207. package/dist/esm/classes/queue-keys.js +40 -0
  208. package/dist/esm/classes/queue-keys.js.map +1 -0
  209. package/dist/esm/classes/queue-scheduler.d.ts +35 -0
  210. package/dist/esm/classes/queue-scheduler.js +156 -0
  211. package/dist/esm/classes/queue-scheduler.js.map +1 -0
  212. package/dist/esm/classes/queue.d.ts +143 -0
  213. package/dist/esm/classes/queue.js +195 -0
  214. package/dist/esm/classes/queue.js.map +1 -0
  215. package/dist/esm/classes/redis-connection.d.ts +28 -0
  216. package/dist/esm/classes/redis-connection.js +164 -0
  217. package/dist/esm/classes/redis-connection.js.map +1 -0
  218. package/dist/esm/classes/repeat.d.ts +20 -0
  219. package/dist/esm/classes/repeat.js +140 -0
  220. package/dist/esm/classes/repeat.js.map +1 -0
  221. package/dist/esm/classes/sandbox.d.ts +4 -0
  222. package/dist/esm/classes/sandbox.js +56 -0
  223. package/dist/esm/classes/sandbox.js.map +1 -0
  224. package/dist/esm/classes/scripts.d.ts +82 -0
  225. package/dist/esm/classes/scripts.js +510 -0
  226. package/dist/esm/classes/scripts.js.map +1 -0
  227. package/dist/esm/classes/timer-manager.d.ts +17 -0
  228. package/dist/esm/classes/timer-manager.js +47 -0
  229. package/dist/esm/classes/timer-manager.js.map +1 -0
  230. package/dist/esm/classes/worker.d.ts +168 -0
  231. package/dist/esm/classes/worker.js +463 -0
  232. package/dist/esm/classes/worker.js.map +1 -0
  233. package/dist/esm/commands/addJob-9.lua +179 -0
  234. package/dist/esm/commands/changeDelay-4.lua +41 -0
  235. package/dist/esm/commands/cleanJobsInSet-2.lua +65 -0
  236. package/dist/esm/commands/drain-4.lua +36 -0
  237. package/dist/esm/commands/extendLock-2.lua +23 -0
  238. package/dist/esm/commands/getState-7.lua +63 -0
  239. package/dist/esm/commands/getStateV2-7.lua +51 -0
  240. package/dist/esm/commands/includes/destructureJobKey.lua +12 -0
  241. package/dist/esm/commands/includes/updateParentDepsIfNeeded.lua +19 -0
  242. package/dist/esm/commands/index.d.ts +4 -0
  243. package/dist/esm/commands/index.js +5 -0
  244. package/dist/esm/commands/index.js.map +1 -0
  245. package/dist/esm/commands/isFinished-3.lua +48 -0
  246. package/dist/esm/commands/isJobInList-1.lua +20 -0
  247. package/dist/esm/commands/moveStalledJobsToWait-8.lua +112 -0
  248. package/dist/esm/commands/moveToActive-8.lua +100 -0
  249. package/dist/esm/commands/moveToDelayed-5.lua +45 -0
  250. package/dist/esm/commands/moveToFinished-8.lua +159 -0
  251. package/dist/esm/commands/moveToWaitingChildren-4.lua +60 -0
  252. package/dist/esm/commands/obliterate-2.lua +129 -0
  253. package/dist/esm/commands/pause-4.lua +27 -0
  254. package/dist/esm/commands/promote-5.lua +54 -0
  255. package/dist/esm/commands/releaseLock-1.lua +19 -0
  256. package/dist/esm/commands/removeJob-1.lua +115 -0
  257. package/dist/esm/commands/removeRepeatable-2.lua +23 -0
  258. package/dist/esm/commands/reprocessJob-4.lua +32 -0
  259. package/dist/esm/commands/retryJob-4.lua +34 -0
  260. package/dist/esm/commands/script-loader.d.ts +120 -0
  261. package/dist/esm/commands/script-loader.js +395 -0
  262. package/dist/esm/commands/script-loader.js.map +1 -0
  263. package/dist/esm/commands/takeLock-1.lua +17 -0
  264. package/dist/esm/commands/updateDelaySet-7.lua +73 -0
  265. package/dist/esm/commands/updateProgress-2.lua +15 -0
  266. package/dist/esm/enums/error-codes.enum.d.ts +7 -0
  267. package/dist/esm/enums/error-codes.enum.js +9 -0
  268. package/dist/esm/enums/error-codes.enum.js.map +1 -0
  269. package/dist/esm/enums/index.d.ts +1 -0
  270. package/dist/esm/enums/index.js +2 -0
  271. package/dist/esm/enums/index.js.map +1 -0
  272. package/dist/esm/index.d.ts +5 -0
  273. package/dist/esm/index.js +6 -0
  274. package/dist/esm/index.js.map +1 -0
  275. package/dist/esm/interfaces/advanced-options.d.ts +6 -0
  276. package/dist/esm/interfaces/advanced-options.js +2 -0
  277. package/dist/esm/interfaces/advanced-options.js.map +1 -0
  278. package/dist/esm/interfaces/backoff-options.d.ts +15 -0
  279. package/dist/esm/interfaces/backoff-options.js +2 -0
  280. package/dist/esm/interfaces/backoff-options.js.map +1 -0
  281. package/dist/esm/interfaces/child-command.d.ts +5 -0
  282. package/dist/esm/interfaces/child-command.js +7 -0
  283. package/dist/esm/interfaces/child-command.js.map +1 -0
  284. package/dist/esm/interfaces/child-message.d.ts +6 -0
  285. package/dist/esm/interfaces/child-message.js +2 -0
  286. package/dist/esm/interfaces/child-message.js.map +1 -0
  287. package/dist/esm/interfaces/connection.d.ts +8 -0
  288. package/dist/esm/interfaces/connection.js +2 -0
  289. package/dist/esm/interfaces/connection.js.map +1 -0
  290. package/dist/esm/interfaces/flow-job.d.ts +14 -0
  291. package/dist/esm/interfaces/flow-job.js +2 -0
  292. package/dist/esm/interfaces/flow-job.js.map +1 -0
  293. package/dist/esm/interfaces/index.d.ts +19 -0
  294. package/dist/esm/interfaces/index.js +20 -0
  295. package/dist/esm/interfaces/index.js.map +1 -0
  296. package/dist/esm/interfaces/jobs-options.d.ts +91 -0
  297. package/dist/esm/interfaces/jobs-options.js +2 -0
  298. package/dist/esm/interfaces/jobs-options.js.map +1 -0
  299. package/dist/esm/interfaces/parent-command.d.ts +9 -0
  300. package/dist/esm/interfaces/parent-command.js +11 -0
  301. package/dist/esm/interfaces/parent-command.js.map +1 -0
  302. package/dist/esm/interfaces/parent-message.d.ts +8 -0
  303. package/dist/esm/interfaces/parent-message.js +2 -0
  304. package/dist/esm/interfaces/parent-message.js.map +1 -0
  305. package/dist/esm/interfaces/parent.d.ts +11 -0
  306. package/dist/esm/interfaces/parent.js +2 -0
  307. package/dist/esm/interfaces/parent.js.map +1 -0
  308. package/dist/esm/interfaces/queue-options.d.ts +72 -0
  309. package/dist/esm/interfaces/queue-options.js +6 -0
  310. package/dist/esm/interfaces/queue-options.js.map +1 -0
  311. package/dist/esm/interfaces/queue-scheduler-options.d.ts +23 -0
  312. package/dist/esm/interfaces/queue-scheduler-options.js +2 -0
  313. package/dist/esm/interfaces/queue-scheduler-options.js.map +1 -0
  314. package/dist/esm/interfaces/rate-limiter-options.d.ts +30 -0
  315. package/dist/esm/interfaces/rate-limiter-options.js +2 -0
  316. package/dist/esm/interfaces/rate-limiter-options.js.map +1 -0
  317. package/dist/esm/interfaces/redis-options.d.ts +5 -0
  318. package/dist/esm/interfaces/redis-options.js +2 -0
  319. package/dist/esm/interfaces/redis-options.js.map +1 -0
  320. package/dist/esm/interfaces/redis-streams.d.ts +4 -0
  321. package/dist/esm/interfaces/redis-streams.js +2 -0
  322. package/dist/esm/interfaces/redis-streams.js.map +1 -0
  323. package/dist/esm/interfaces/repeat-options.d.ts +44 -0
  324. package/dist/esm/interfaces/repeat-options.js +2 -0
  325. package/dist/esm/interfaces/repeat-options.js.map +1 -0
  326. package/dist/esm/interfaces/sandboxed-job-processor.d.ts +5 -0
  327. package/dist/esm/interfaces/sandboxed-job-processor.js +2 -0
  328. package/dist/esm/interfaces/sandboxed-job-processor.js.map +1 -0
  329. package/dist/esm/interfaces/sandboxed-job.d.ts +13 -0
  330. package/dist/esm/interfaces/sandboxed-job.js +2 -0
  331. package/dist/esm/interfaces/sandboxed-job.js.map +1 -0
  332. package/dist/esm/interfaces/worker-options.d.ts +32 -0
  333. package/dist/esm/interfaces/worker-options.js +2 -0
  334. package/dist/esm/interfaces/worker-options.js.map +1 -0
  335. package/dist/esm/tsdoc-metadata.json +11 -0
  336. package/dist/esm/utils.d.ts +29 -0
  337. package/dist/esm/utils.js +124 -0
  338. package/dist/esm/utils.js.map +1 -0
  339. package/package.json +13 -10
  340. package/dist/classes/backoffs.js.map +0 -1
  341. package/dist/classes/child-pool.js.map +0 -1
  342. package/dist/classes/child-processor.js.map +0 -1
  343. package/dist/classes/compat.js.map +0 -1
  344. package/dist/classes/flow-producer.js.map +0 -1
  345. package/dist/classes/index.js.map +0 -1
  346. package/dist/classes/job.js.map +0 -1
  347. package/dist/classes/master.js.map +0 -1
  348. package/dist/classes/process-utils.js.map +0 -1
  349. package/dist/classes/queue-base.js.map +0 -1
  350. package/dist/classes/queue-events.js.map +0 -1
  351. package/dist/classes/queue-getters.js.map +0 -1
  352. package/dist/classes/queue-keys.js.map +0 -1
  353. package/dist/classes/queue-scheduler.js.map +0 -1
  354. package/dist/classes/queue.js.map +0 -1
  355. package/dist/classes/redis-connection.js.map +0 -1
  356. package/dist/classes/repeat.js.map +0 -1
  357. package/dist/classes/sandbox.js.map +0 -1
  358. package/dist/classes/scripts.js.map +0 -1
  359. package/dist/classes/timer-manager.js.map +0 -1
  360. package/dist/classes/worker.js.map +0 -1
  361. package/dist/commands/index.js.map +0 -1
  362. package/dist/commands/script-loader.js.map +0 -1
  363. package/dist/enums/error-codes.enum.js.map +0 -1
  364. package/dist/index.js.map +0 -1
  365. package/dist/interfaces/advanced-options.js.map +0 -1
  366. package/dist/interfaces/backoff-options.js.map +0 -1
  367. package/dist/interfaces/child-command.js.map +0 -1
  368. package/dist/interfaces/child-message.js.map +0 -1
  369. package/dist/interfaces/connection.js.map +0 -1
  370. package/dist/interfaces/index.js.map +0 -1
  371. package/dist/interfaces/jobs-options.js.map +0 -1
  372. package/dist/interfaces/parent-command.js.map +0 -1
  373. package/dist/interfaces/parent-message.js.map +0 -1
  374. package/dist/interfaces/queue-options.js.map +0 -1
  375. package/dist/interfaces/queue-scheduler-options.js.map +0 -1
  376. package/dist/interfaces/rate-limiter-options.js.map +0 -1
  377. package/dist/interfaces/redis-options.js.map +0 -1
  378. package/dist/interfaces/redis-streams.js.map +0 -1
  379. package/dist/interfaces/repeat-options.js.map +0 -1
  380. package/dist/interfaces/sandboxed-job-processor.js.map +0 -1
  381. package/dist/interfaces/sandboxed-job.js.map +0 -1
  382. package/dist/interfaces/worker-options.js.map +0 -1
  383. package/dist/utils.js.map +0 -1
@@ -0,0 +1,112 @@
1
+ --[[
2
+ Move stalled jobs to wait.
3
+
4
+ Input:
5
+ KEYS[1] 'stalled' (SET)
6
+ KEYS[2] 'wait', (LIST)
7
+ KEYS[3] 'active', (LIST)
8
+ KEYS[4] 'failed', (ZSET)
9
+ KEYS[5] 'stalled-check', (KEY)
10
+
11
+ KEYS[6] 'meta', (KEY)
12
+ KEYS[7] 'paused', (LIST)
13
+
14
+ KEYS[8] 'event stream' (STREAM)
15
+
16
+ ARGV[1] Max stalled job count
17
+ ARGV[2] queue.toKey('')
18
+ ARGV[3] timestamp
19
+ ARGV[4] max check time
20
+
21
+ Events:
22
+ 'stalled' with stalled job id.
23
+ ]]
24
+ local rcall = redis.call
25
+
26
+ local function batches(n, batchSize)
27
+ local i = 0
28
+
29
+ return function()
30
+ local from = i * batchSize + 1
31
+ i = i + 1
32
+ if (from <= n) then
33
+ local to = math.min(from + batchSize - 1, n)
34
+ return from, to
35
+ end
36
+ end
37
+ end
38
+
39
+ -- Check if we need to check for stalled jobs now.
40
+ if rcall("EXISTS", KEYS[5]) == 1 then return {{}, {}} end
41
+
42
+ rcall("SET", KEYS[5], ARGV[3], "PX", ARGV[4])
43
+
44
+ -- Move all stalled jobs to wait
45
+ local stalling = rcall('SMEMBERS', KEYS[1])
46
+ local stalled = {}
47
+ local failed = {}
48
+ if (#stalling > 0) then
49
+
50
+ local dst
51
+ -- wait or paused destination
52
+ if rcall("HEXISTS", KEYS[6], "paused") ~= 1 then
53
+ dst = KEYS[2]
54
+ else
55
+ dst = KEYS[7]
56
+ end
57
+
58
+ rcall('DEL', KEYS[1])
59
+
60
+ local MAX_STALLED_JOB_COUNT = tonumber(ARGV[1])
61
+
62
+ -- Remove from active list
63
+ for i, jobId in ipairs(stalling) do
64
+ local jobKey = ARGV[2] .. jobId
65
+
66
+ -- Check that the lock is also missing, then we can handle this job as really stalled.
67
+ if (rcall("EXISTS", jobKey .. ":lock") == 0) then
68
+ -- Remove from the active queue.
69
+ local removed = rcall("LREM", KEYS[3], 1, jobId)
70
+
71
+ if (removed > 0) then
72
+ -- If this job has been stalled too many times, such as if it crashes the worker, then fail it.
73
+ local stalledCount = rcall("HINCRBY", jobKey, "stalledCounter",
74
+ 1)
75
+ if (stalledCount > MAX_STALLED_JOB_COUNT) then
76
+ local failedReason = "job stalled more than allowable limit"
77
+ rcall("ZADD", KEYS[4], ARGV[3], jobId)
78
+ rcall("HMSET", jobKey, "failedReason",
79
+ failedReason, "finishedOn", ARGV[3])
80
+ rcall("XADD", KEYS[8], "*", "event", "failed", "jobId",
81
+ jobId, 'prev', 'active', 'failedReason',
82
+ failedReason)
83
+ table.insert(failed, jobId)
84
+ else
85
+ -- Move the job back to the wait queue, to immediately be picked up by a waiting worker.
86
+ rcall("RPUSH", dst, jobId)
87
+ rcall("XADD", KEYS[8], "*", "event", "waiting", "jobId",
88
+ jobId, 'prev', 'active')
89
+
90
+ -- Emit the stalled event
91
+ rcall("XADD", KEYS[8], "*", "event", "stalled", "jobId",
92
+ jobId)
93
+ table.insert(stalled, jobId)
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ -- Mark potentially stalled jobs
101
+ local active = rcall('LRANGE', KEYS[3], 0, -1)
102
+
103
+ if (#active > 0) then
104
+ for from, to in batches(#active, 7000) do
105
+ rcall('SADD', KEYS[1], unpack(active, from, to))
106
+ end
107
+ end
108
+
109
+ local maxEvents = rcall("HGET", KEYS[6], "opts.maxLenEvents")
110
+ if maxEvents then rcall("XTRIM", KEYS[8], "MAXLEN", "~", maxEvents) end
111
+
112
+ return {failed, stalled}
@@ -0,0 +1,100 @@
1
+ --[[
2
+ Move next job to be processed to active, lock it and fetch its data. The job
3
+ may be delayed, in that case we need to move it to the delayed set instead.
4
+
5
+ This operation guarantees that the worker owns the job during the lock
6
+ expiration time. The worker is responsible of keeping the lock fresh
7
+ so that no other worker picks this job again.
8
+
9
+ Input:
10
+ KEYS[1] wait key
11
+ KEYS[2] active key
12
+ KEYS[3] priority key
13
+ KEYS[4] stream events key
14
+ KEYS[5] stalled key
15
+
16
+ -- Rate limiting
17
+ KEYS[6] rate limiter key
18
+ KEYS[7] delayed key
19
+
20
+ -- Delay events
21
+ KEYS[8] delay stream key
22
+
23
+ -- Arguments
24
+ ARGV[1] key prefix
25
+ ARGV[2] lock token
26
+ ARGV[3] lock duration in milliseconds
27
+ ARGV[4] timestamp
28
+ ARGV[5] optional job ID
29
+
30
+ ARGV[6] optional jobs per time unit (rate limiter)
31
+ ARGV[7] optional time unit (rate limiter)
32
+ ARGV[8] optional rate limit by key
33
+ ]]
34
+
35
+ local jobId
36
+ local rcall = redis.call
37
+
38
+ if(ARGV[5] ~= "") then
39
+ jobId = ARGV[5]
40
+
41
+ -- clean stalled key
42
+ rcall("SREM", KEYS[5], jobId)
43
+ else
44
+ -- no job ID, try non-blocking move from wait to active
45
+ jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2])
46
+ end
47
+
48
+ if jobId then
49
+ -- Check if we need to perform rate limiting.
50
+ local maxJobs = tonumber(ARGV[6])
51
+
52
+ if(maxJobs) then
53
+ local rateLimiterKey = KEYS[6];
54
+
55
+ if(ARGV[8]) then
56
+ local groupKey = string.match(jobId, "[^:]+$")
57
+ if groupKey ~= nil then
58
+ rateLimiterKey = rateLimiterKey .. ":" .. groupKey
59
+ end
60
+ end
61
+
62
+ local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
63
+ -- check if rate limit hit
64
+ if jobCounter > maxJobs then
65
+ local exceedingJobs = jobCounter - maxJobs
66
+ local expireTime = tonumber(rcall("PTTL", rateLimiterKey))
67
+ local delay = expireTime + ((exceedingJobs - 1) * ARGV[7]) / maxJobs;
68
+ local timestamp = delay + tonumber(ARGV[4])
69
+
70
+ -- put job into delayed queue
71
+ rcall("ZADD", KEYS[7], timestamp * 0x1000 + bit.band(jobCounter, 0xfff), jobId);
72
+ rcall("XADD", KEYS[4], "*", "event", "delayed", "jobId", jobId, "delay", timestamp);
73
+ rcall("XADD", KEYS[8], "*", "nextTimestamp", timestamp);
74
+ -- remove from active queue
75
+ rcall("LREM", KEYS[2], 1, jobId)
76
+
77
+ -- Return when we can process more jobs
78
+ return expireTime
79
+ else
80
+ if jobCounter == 1 then
81
+ rcall("PEXPIRE", rateLimiterKey, ARGV[7])
82
+ end
83
+ end
84
+ end
85
+
86
+ local jobKey = ARGV[1] .. jobId
87
+ local lockKey = jobKey .. ':lock'
88
+
89
+ -- get a lock
90
+ rcall("SET", lockKey, ARGV[2], "PX", ARGV[3])
91
+ rcall("ZREM", KEYS[3], jobId) -- remove from priority
92
+
93
+ rcall("XADD", KEYS[4], "*", "event", "active", "jobId", jobId, "prev", "waiting")
94
+
95
+ rcall("HSET", jobKey, "processedOn", ARGV[4])
96
+
97
+ return {rcall("HGETALL", jobKey), jobId} -- get job data
98
+ else
99
+ rcall("XADD", KEYS[4], "*", "event", "drained");
100
+ end
@@ -0,0 +1,45 @@
1
+ --[[
2
+ Moves job from active to delayed set.
3
+
4
+ Input:
5
+ KEYS[1] active key
6
+ KEYS[2] delayed key
7
+ KEYS[3] job key
8
+ KEYS[4] events stream
9
+ KEYS[5] delayed stream
10
+
11
+ ARGV[1] delayedTimestamp
12
+ ARGV[2] the id of the job
13
+ ARGV[3] queue token
14
+
15
+ Output:
16
+ 0 - OK
17
+ -1 - Missing job.
18
+ -3 - Job not in active set.
19
+
20
+ Events:
21
+ - delayed key.
22
+ ]]
23
+ local rcall = redis.call
24
+
25
+ if rcall("EXISTS", KEYS[3]) == 1 then
26
+
27
+ local jobId = ARGV[2]
28
+ local score = tonumber(ARGV[1])
29
+ local delayedTimestamp = (score / 0x1000)
30
+
31
+ local numRemovedElements = rcall("LREM", KEYS[1], -1, jobId)
32
+
33
+ if(numRemovedElements < 1) then
34
+ return -3
35
+ end
36
+
37
+ rcall("ZADD", KEYS[2], score, jobId)
38
+
39
+ rcall("XADD", KEYS[4], "*", "event", "delayed", "jobId", jobId, "delay", delayedTimestamp);
40
+ rcall("XADD", KEYS[5], "*", "nextTimestamp", delayedTimestamp);
41
+
42
+ return 0
43
+ else
44
+ return -1
45
+ end
@@ -0,0 +1,159 @@
1
+ --[[
2
+ Move job from active to a finished status (completed o failed)
3
+ A job can only be moved to completed if it was active.
4
+ The job must be locked before it can be moved to a finished status,
5
+ and the lock must be released in this script.
6
+
7
+ Input:
8
+ KEYS[1] active key
9
+ KEYS[2] completed/failed key
10
+ KEYS[3] jobId key
11
+ KEYS[4] wait key
12
+ KEYS[5] priority key
13
+ KEYS[6] event stream key
14
+ KEYS[7] meta key
15
+ KEYS[8] stalled key
16
+
17
+ ARGV[1] jobId
18
+ ARGV[2] timestamp
19
+ ARGV[3] msg property
20
+ ARGV[4] return value / failed reason
21
+ ARGV[5] target (completed/failed)
22
+ ARGV[6] shouldRemove
23
+ ARGV[7] event data (? maybe just send jobid).
24
+ ARGV[8] fetch next?
25
+ ARGV[9] keys prefix
26
+ ARGV[10] lock token
27
+ ARGV[11] lock duration in milliseconds
28
+ ARGV[12] parentId
29
+ ARGV[13] parentQueue
30
+ ARGV[14] parentKey
31
+
32
+ Output:
33
+ 0 OK
34
+ -1 Missing key.
35
+ -2 Missing lock.
36
+ -3 Job not in active set
37
+ -4 Job has pending dependencies
38
+
39
+ Events:
40
+ 'completed/failed'
41
+ ]]
42
+ local rcall = redis.call
43
+
44
+ -- Includes
45
+ --- @include "includes/updateParentDepsIfNeeded"
46
+ --- @include "includes/destructureJobKey"
47
+
48
+ local jobIdKey = KEYS[3]
49
+ if rcall("EXISTS",jobIdKey) == 1 then -- // Make sure job exists
50
+
51
+ if rcall("SCARD", jobIdKey .. ":dependencies") ~= 0 then -- // Make sure it does not have pending dependencies
52
+ return -4
53
+ end
54
+
55
+ if ARGV[10] ~= "0" then
56
+ local lockKey = jobIdKey .. ':lock'
57
+ if rcall("GET", lockKey) == ARGV[10] then
58
+ rcall("DEL", lockKey)
59
+ rcall("SREM", KEYS[8], ARGV[1])
60
+ else
61
+ return -2
62
+ end
63
+ end
64
+
65
+ local jobId = ARGV[1]
66
+
67
+ -- Remove from active list (if not active we shall return error)
68
+ local numRemovedElements = rcall("LREM", KEYS[1], -1, jobId)
69
+
70
+ if(numRemovedElements < 1) then
71
+ return -3
72
+ end
73
+
74
+
75
+ -- Trim events before emiting them to avoid trimming events emitted in this script
76
+ local maxEvents = rcall("HGET", KEYS[7], "opts.maxLenEvents")
77
+ if (maxEvents == false) then
78
+ maxEvents = 10000
79
+ end
80
+ rcall("XTRIM", KEYS[6], "MAXLEN", "~", maxEvents)
81
+
82
+ -- If job has a parent we need to
83
+ -- 1) remove this job id from parents dependencies
84
+ -- 2) move the job Id to parent "processed" set
85
+ -- 3) push the results into parent "results" list
86
+ -- 4) if parent's dependencies is empty, then move parent to "wait/paused". Note it may be a different queue!.
87
+ -- NOTE: Priorities not supported yet for parent jobs.
88
+ local parentId = ARGV[12]
89
+ local parentQueueKey = ARGV[13]
90
+ if parentId == "" and ARGV[14] ~= "" then
91
+ parentId = getJobIdFromKey(ARGV[14])
92
+ parentQueueKey = getJobKeyPrefix(ARGV[14], ":" .. parentId)
93
+ end
94
+ if parentId ~= "" and ARGV[5] == "completed" then
95
+ local parentKey = parentQueueKey .. ":" .. parentId
96
+ local dependenciesSet = parentKey .. ":dependencies"
97
+ local result = rcall("SREM", dependenciesSet, jobIdKey)
98
+ if result == 1 then
99
+ updateParentDepsIfNeeded(parentKey, parentQueueKey, dependenciesSet, parentId, jobIdKey, ARGV[4])
100
+ end
101
+ end
102
+
103
+ -- Remove job?
104
+ local removeJobs = tonumber(ARGV[6])
105
+ if removeJobs ~= 1 then
106
+ -- Add to complete/failed set
107
+ rcall("ZADD", KEYS[2], ARGV[2], jobId)
108
+ rcall("HMSET", jobIdKey, ARGV[3], ARGV[4], "finishedOn", ARGV[2]) -- "returnvalue" / "failedReason" and "finishedOn"
109
+
110
+ -- Remove old jobs?
111
+ if removeJobs and removeJobs > 1 then
112
+ local start = removeJobs - 1
113
+ local jobIds = rcall("ZREVRANGE", KEYS[2], start, -1)
114
+ for i, jobId in ipairs(jobIds) do
115
+ local jobKey = ARGV[9] .. jobId
116
+ local jobLogKey = jobKey .. ':logs'
117
+ local jobProcessedKey = jobKey .. ':processed'
118
+ rcall("DEL", jobKey, jobLogKey, jobProcessedKey)
119
+ end
120
+ rcall("ZREMRANGEBYRANK", KEYS[2], 0, -removeJobs)
121
+ end
122
+ else
123
+ local jobLogKey = jobIdKey .. ':logs'
124
+ local jobProcessedKey = jobIdKey .. ':processed'
125
+ rcall("DEL", jobIdKey, jobLogKey, jobProcessedKey)
126
+ end
127
+
128
+ rcall("XADD", KEYS[6], "*", "event", ARGV[5], "jobId", jobId, ARGV[3],
129
+ ARGV[4])
130
+
131
+ -- Try to get next job to avoid an extra roundtrip if the queue is not closing,
132
+ -- and not rate limited.
133
+ if (ARGV[8] == "1") then
134
+ -- move from wait to active
135
+ local jobId = rcall("RPOPLPUSH", KEYS[4], KEYS[1])
136
+ if jobId then
137
+ local jobKey = ARGV[9] .. jobId
138
+ local lockKey = jobKey .. ':lock'
139
+
140
+ -- get a lock
141
+ if ARGV[10] ~= "0" then
142
+ rcall("SET", lockKey, ARGV[10], "PX", ARGV[11])
143
+ end
144
+
145
+ rcall("ZREM", KEYS[5], jobId) -- remove from priority
146
+ rcall("XADD", KEYS[6], "*", "event", "active", "jobId", jobId,
147
+ "prev", "waiting")
148
+ rcall("HSET", jobKey, "processedOn", ARGV[2])
149
+
150
+ return {rcall("HGETALL", jobKey), jobId} -- get job data
151
+ else
152
+ rcall("XADD", KEYS[6], "*", "event", "drained");
153
+ end
154
+ end
155
+
156
+ return 0
157
+ else
158
+ return -1
159
+ end
@@ -0,0 +1,60 @@
1
+ --[[
2
+ Moves job from active to waiting children set.
3
+
4
+ Input:
5
+ KEYS[1] lock key
6
+ KEYS[2] active key
7
+ KEYS[3] waitChildrenKey key
8
+ KEYS[4] job key
9
+
10
+ ARGV[1] token
11
+ ARGV[2] child key
12
+ ARGV[3] timestamp
13
+ ARGV[4] the id of the job
14
+
15
+ Output:
16
+ 0 - OK
17
+ 1 - There are not pending dependencies.
18
+ -1 - Missing job.
19
+ -2 - Missing lock
20
+ -3 - Job not in active set
21
+ ]]
22
+ local rcall = redis.call
23
+
24
+ local function move_to_waiting_children (activeKey, waitingChildrenKey, jobId, timestamp)
25
+ local score = tonumber(timestamp)
26
+
27
+ local numRemovedElements = rcall("LREM", activeKey, -1, jobId)
28
+
29
+ if(numRemovedElements < 1) then
30
+ return -3
31
+ end
32
+
33
+ rcall("ZADD", waitingChildrenKey, score, jobId)
34
+
35
+ return 0
36
+ end
37
+
38
+ if ARGV[1] ~= "0" then
39
+ if rcall("GET", KEYS[1]) ~= ARGV[1] then
40
+ return -2
41
+ end
42
+ end
43
+
44
+ if rcall("EXISTS", KEYS[4]) == 1 then
45
+ if ARGV[2] ~= "" then
46
+ if rcall("SISMEMBER", KEYS[4] .. ":dependencies", ARGV[2]) ~= 0 then
47
+ return move_to_waiting_children(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
48
+ end
49
+
50
+ return 1
51
+ else
52
+ if rcall("SCARD", KEYS[4] .. ":dependencies") ~= 0 then
53
+ return move_to_waiting_children(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
54
+ end
55
+
56
+ return 1
57
+ end
58
+ end
59
+
60
+ return -1
@@ -0,0 +1,129 @@
1
+ --[[
2
+ Completely obliterates a queue and all of its contents
3
+ Input:
4
+
5
+ KEYS[1] meta
6
+ KEYS[2] base
7
+
8
+ ARGV[1] count
9
+ ARGV[2] force
10
+ ]]
11
+
12
+ -- This command completely destroys a queue including all of its jobs, current or past
13
+ -- leaving no trace of its existence. Since this script needs to iterate to find all the job
14
+ -- keys, consider that this call may be slow for very large queues.
15
+
16
+ -- The queue needs to be "paused" or it will return an error
17
+ -- If the queue has currently active jobs then the script by default will return error,
18
+ -- however this behaviour can be overrided using the `force` option.
19
+ local maxCount = tonumber(ARGV[1])
20
+ local baseKey = KEYS[2]
21
+
22
+ local rcall = redis.call
23
+ local function getListItems(keyName, max)
24
+ return rcall('LRANGE', keyName, 0, max - 1)
25
+ end
26
+
27
+ local function getZSetItems(keyName, max)
28
+ return rcall('ZRANGE', keyName, 0, max - 1)
29
+ end
30
+
31
+ local function getSetItems(keyName, max)
32
+ return rcall('SMEMBERS', keyName, 0, max)
33
+ end
34
+
35
+ local function removeJobs(keys)
36
+ for i, key in ipairs(keys) do
37
+ local jobKey = baseKey .. key
38
+ rcall("DEL", jobKey)
39
+ rcall("DEL", jobKey .. ':logs')
40
+ rcall("DEL", jobKey .. ':dependencies')
41
+ rcall("DEL", jobKey .. ':processed')
42
+ end
43
+ maxCount = maxCount - #keys
44
+ end
45
+
46
+ local function removeListJobs(keyName, max)
47
+ local jobs = getListItems(keyName, max)
48
+ removeJobs(jobs)
49
+ rcall("LTRIM", keyName, #jobs, -1)
50
+ end
51
+
52
+ local function removeZSetJobs(keyName, max)
53
+ local jobs = getZSetItems(keyName, max)
54
+ removeJobs(jobs)
55
+ if(#jobs > 0) then
56
+ rcall("ZREM", keyName, unpack(jobs))
57
+ end
58
+ end
59
+
60
+ local function removeLockKeys(keys)
61
+ for i, key in ipairs(keys) do
62
+ rcall("DEL", baseKey .. key .. ':lock')
63
+ end
64
+ end
65
+
66
+ -- 1) Check if paused, if not return with error.
67
+ if rcall("HEXISTS", KEYS[1], "paused") ~= 1 then
68
+ return -1 -- Error, NotPaused
69
+ end
70
+
71
+ -- 2) Check if there are active jobs, if there are and not "force" return error.
72
+ local activeKey = baseKey .. 'active'
73
+ local activeJobs = getListItems(activeKey, maxCount)
74
+ if (#activeJobs > 0) then
75
+ if(ARGV[2] == "") then
76
+ return -2 -- Error, ExistActiveJobs
77
+ end
78
+ end
79
+
80
+ removeLockKeys(activeJobs)
81
+ removeJobs(activeJobs)
82
+ rcall("LTRIM", activeKey, #activeJobs, -1)
83
+ if(maxCount <= 0) then
84
+ return 1
85
+ end
86
+
87
+ local waitKey = baseKey .. 'paused'
88
+ removeListJobs(waitKey, maxCount)
89
+ if(maxCount <= 0) then
90
+ return 1
91
+ end
92
+
93
+ local delayedKey = baseKey .. 'delayed'
94
+ removeZSetJobs(delayedKey, maxCount)
95
+ if(maxCount <= 0) then
96
+ return 1
97
+ end
98
+
99
+ local completedKey = baseKey .. 'completed'
100
+ removeZSetJobs(completedKey, maxCount)
101
+ if(maxCount <= 0) then
102
+ return 1
103
+ end
104
+
105
+ local failedKey = baseKey .. 'failed'
106
+ removeZSetJobs(failedKey, maxCount)
107
+ if(maxCount <= 0) then
108
+ return 1
109
+ end
110
+
111
+ local waitingChildrenKey = baseKey .. 'waiting-children'
112
+ removeZSetJobs(waitingChildrenKey, maxCount)
113
+ if(maxCount <= 0) then
114
+ return 1
115
+ end
116
+
117
+ if(maxCount > 0) then
118
+ rcall("DEL", baseKey .. 'priority')
119
+ rcall("DEL", baseKey .. 'events')
120
+ rcall("DEL", baseKey .. 'delay')
121
+ rcall("DEL", baseKey .. 'stalled-check')
122
+ rcall("DEL", baseKey .. 'stalled')
123
+ rcall("DEL", baseKey .. 'id')
124
+ rcall("DEL", baseKey .. 'meta')
125
+ rcall("DEL", baseKey .. 'repeat')
126
+ return 0
127
+ else
128
+ return 1
129
+ end
@@ -0,0 +1,27 @@
1
+ --[[
2
+ Pauses or resumes a queue globably.
3
+
4
+ Input:
5
+ KEYS[1] 'wait' or 'paused''
6
+ KEYS[2] 'paused' or 'wait'
7
+ KEYS[3] 'meta'
8
+ KEYS[4] events stream key
9
+
10
+ ARGV[1] 'paused' or 'resumed'
11
+
12
+ Event:
13
+ publish paused or resumed event.
14
+ ]]
15
+ local rcall = redis.call
16
+
17
+ if rcall("EXISTS", KEYS[1]) == 1 then
18
+ rcall("RENAME", KEYS[1], KEYS[2])
19
+ end
20
+
21
+ if ARGV[1] == "paused" then
22
+ rcall("HSET", KEYS[3], "paused", 1)
23
+ else
24
+ rcall("HDEL", KEYS[3], "paused")
25
+ end
26
+
27
+ rcall("XADD", KEYS[4], "*", "event", ARGV[1]);
@@ -0,0 +1,54 @@
1
+ --[[
2
+ Promotes a job that is currently "delayed" to the "waiting" state
3
+
4
+ Input:
5
+ KEYS[1] 'delayed'
6
+ KEYS[2] 'wait'
7
+ KEYS[3] 'paused'
8
+ KEYS[4] 'priority'
9
+ KEYS[5] 'event stream'
10
+
11
+ ARGV[1] queue.toKey('')
12
+ ARGV[2] jobId
13
+
14
+ Events:
15
+ 'waiting'
16
+ ]]
17
+ local rcall = redis.call;
18
+ local jobId = ARGV[2]
19
+
20
+ if redis.call("ZREM", KEYS[1], jobId) == 1 then
21
+ local priority = tonumber(rcall("HGET", ARGV[1] .. jobId, "priority")) or 0
22
+
23
+ local target = KEYS[2];
24
+
25
+ if rcall("EXISTS", KEYS[3]) == 1 then
26
+ target = KEYS[3]
27
+ end
28
+
29
+ if priority == 0 then
30
+ -- LIFO or FIFO
31
+ rcall("LPUSH", target, jobId)
32
+ else
33
+ -- Priority add
34
+ rcall("ZADD", KEYS[4], priority, jobId)
35
+ local count = rcall("ZCOUNT", KEYS[4], 0, priority)
36
+
37
+ local len = rcall("LLEN", target)
38
+ local id = rcall("LINDEX", target, len - (count - 1))
39
+ if id then
40
+ rcall("LINSERT", target, "BEFORE", id, jobId)
41
+ else
42
+ rcall("RPUSH", target, jobId)
43
+ end
44
+ end
45
+
46
+ -- Emit waiting event (wait..ing@token)
47
+ rcall("XADD", KEYS[5], "*", "event", "waiting", "jobId", jobId, "prev", "delayed");
48
+
49
+ rcall("HSET", ARGV[1] .. jobId, "delay", 0)
50
+
51
+ return 0
52
+ else
53
+ return -3
54
+ end