bullmq 5.1.3 → 5.1.4

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 (99) hide show
  1. package/dist/cjs/classes/scripts.js +1 -0
  2. package/dist/cjs/classes/scripts.js.map +1 -1
  3. package/dist/cjs/commands/addStandardJob-7.lua +4 -8
  4. package/dist/cjs/commands/changeDelay-3.lua +1 -0
  5. package/dist/cjs/commands/changePriority-6.lua +0 -1
  6. package/dist/cjs/commands/includes/addBaseMarkerIfNeeded.lua +9 -0
  7. package/dist/cjs/commands/includes/addDelayMarkerIfNeeded.lua +3 -1
  8. package/dist/cjs/commands/includes/addJobInTargetList.lua +11 -0
  9. package/dist/cjs/commands/includes/addJobWithPriority.lua +5 -3
  10. package/dist/cjs/commands/includes/moveParentToWaitIfNeeded.lua +6 -4
  11. package/dist/cjs/commands/includes/promoteDelayedJobs.lua +2 -4
  12. package/dist/cjs/commands/moveJobsToWait-7.lua +2 -3
  13. package/dist/cjs/commands/moveStalledJobsToWait-9.lua +150 -0
  14. package/dist/cjs/commands/moveToFinished-14.lua +1 -0
  15. package/dist/cjs/commands/pause-7.lua +1 -0
  16. package/dist/cjs/commands/promote-8.lua +2 -2
  17. package/dist/cjs/commands/retryJob-10.lua +1 -0
  18. package/dist/cjs/scripts/addDelayedJob-6.js +21 -7
  19. package/dist/cjs/scripts/addDelayedJob-6.js.map +1 -1
  20. package/dist/cjs/scripts/addParentJob-4.js +25 -11
  21. package/dist/cjs/scripts/addParentJob-4.js.map +1 -1
  22. package/dist/cjs/scripts/addPrioritizedJob-7.js +21 -7
  23. package/dist/cjs/scripts/addPrioritizedJob-7.js.map +1 -1
  24. package/dist/cjs/scripts/addStandardJob-7.js +46 -36
  25. package/dist/cjs/scripts/addStandardJob-7.js.map +1 -1
  26. package/dist/cjs/scripts/changeDelay-3.js +1 -0
  27. package/dist/cjs/scripts/changeDelay-3.js.map +1 -1
  28. package/dist/cjs/scripts/changePriority-6.js +10 -14
  29. package/dist/cjs/scripts/changePriority-6.js.map +1 -1
  30. package/dist/cjs/scripts/index.js +1 -1
  31. package/dist/cjs/scripts/moveJobsToWait-7.js +9 -3
  32. package/dist/cjs/scripts/moveJobsToWait-7.js.map +1 -1
  33. package/dist/cjs/scripts/{moveStalledJobsToWait-8.js → moveStalledJobsToWait-9.js} +109 -106
  34. package/dist/cjs/scripts/{moveStalledJobsToWait-8.js.map → moveStalledJobsToWait-9.js.map} +1 -1
  35. package/dist/cjs/scripts/moveToActive-11.js +19 -7
  36. package/dist/cjs/scripts/moveToActive-11.js.map +1 -1
  37. package/dist/cjs/scripts/moveToDelayed-7.js +1 -1
  38. package/dist/cjs/scripts/moveToFinished-14.js +32 -21
  39. package/dist/cjs/scripts/moveToFinished-14.js.map +1 -1
  40. package/dist/cjs/scripts/pause-7.js +2 -1
  41. package/dist/cjs/scripts/pause-7.js.map +1 -1
  42. package/dist/cjs/scripts/promote-8.js +19 -5
  43. package/dist/cjs/scripts/promote-8.js.map +1 -1
  44. package/dist/cjs/scripts/retryJob-10.js +20 -7
  45. package/dist/cjs/scripts/retryJob-10.js.map +1 -1
  46. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  47. package/dist/esm/classes/scripts.js +1 -0
  48. package/dist/esm/classes/scripts.js.map +1 -1
  49. package/dist/esm/commands/addStandardJob-7.lua +4 -8
  50. package/dist/esm/commands/changeDelay-3.lua +1 -0
  51. package/dist/esm/commands/changePriority-6.lua +0 -1
  52. package/dist/esm/commands/includes/addBaseMarkerIfNeeded.lua +9 -0
  53. package/dist/esm/commands/includes/addDelayMarkerIfNeeded.lua +3 -1
  54. package/dist/esm/commands/includes/addJobInTargetList.lua +11 -0
  55. package/dist/esm/commands/includes/addJobWithPriority.lua +5 -3
  56. package/dist/esm/commands/includes/moveParentToWaitIfNeeded.lua +6 -4
  57. package/dist/esm/commands/includes/promoteDelayedJobs.lua +2 -4
  58. package/dist/esm/commands/moveJobsToWait-7.lua +2 -3
  59. package/dist/esm/commands/moveStalledJobsToWait-9.lua +150 -0
  60. package/dist/esm/commands/moveToFinished-14.lua +1 -0
  61. package/dist/esm/commands/pause-7.lua +1 -0
  62. package/dist/esm/commands/promote-8.lua +2 -2
  63. package/dist/esm/commands/retryJob-10.lua +1 -0
  64. package/dist/esm/scripts/addDelayedJob-6.js +21 -7
  65. package/dist/esm/scripts/addDelayedJob-6.js.map +1 -1
  66. package/dist/esm/scripts/addParentJob-4.js +25 -11
  67. package/dist/esm/scripts/addParentJob-4.js.map +1 -1
  68. package/dist/esm/scripts/addPrioritizedJob-7.js +21 -7
  69. package/dist/esm/scripts/addPrioritizedJob-7.js.map +1 -1
  70. package/dist/esm/scripts/addStandardJob-7.js +46 -36
  71. package/dist/esm/scripts/addStandardJob-7.js.map +1 -1
  72. package/dist/esm/scripts/changeDelay-3.js +1 -0
  73. package/dist/esm/scripts/changeDelay-3.js.map +1 -1
  74. package/dist/esm/scripts/changePriority-6.js +10 -14
  75. package/dist/esm/scripts/changePriority-6.js.map +1 -1
  76. package/dist/esm/scripts/index.d.ts +1 -1
  77. package/dist/esm/scripts/index.js +1 -1
  78. package/dist/esm/scripts/moveJobsToWait-7.js +9 -3
  79. package/dist/esm/scripts/moveJobsToWait-7.js.map +1 -1
  80. package/dist/esm/scripts/{moveStalledJobsToWait-8.js → moveStalledJobsToWait-9.js} +109 -106
  81. package/dist/esm/scripts/{moveStalledJobsToWait-8.js.map → moveStalledJobsToWait-9.js.map} +1 -1
  82. package/dist/esm/scripts/moveToActive-11.js +19 -7
  83. package/dist/esm/scripts/moveToActive-11.js.map +1 -1
  84. package/dist/esm/scripts/moveToDelayed-7.js +1 -1
  85. package/dist/esm/scripts/moveToFinished-14.js +32 -21
  86. package/dist/esm/scripts/moveToFinished-14.js.map +1 -1
  87. package/dist/esm/scripts/pause-7.js +2 -1
  88. package/dist/esm/scripts/pause-7.js.map +1 -1
  89. package/dist/esm/scripts/promote-8.js +19 -5
  90. package/dist/esm/scripts/promote-8.js.map +1 -1
  91. package/dist/esm/scripts/retryJob-10.js +20 -7
  92. package/dist/esm/scripts/retryJob-10.js.map +1 -1
  93. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  94. package/package.json +1 -1
  95. package/dist/cjs/commands/includes/checkStalledJobs.lua +0 -139
  96. package/dist/cjs/commands/moveStalledJobsToWait-8.lua +0 -24
  97. package/dist/esm/commands/includes/checkStalledJobs.lua +0 -139
  98. package/dist/esm/commands/moveStalledJobsToWait-8.lua +0 -24
  99. /package/dist/esm/scripts/{moveStalledJobsToWait-8.d.ts → moveStalledJobsToWait-9.d.ts} +0 -0
@@ -1,139 +0,0 @@
1
- --[[
2
- Move stalled jobs to wait.
3
-
4
- Input:
5
- stalledKey 'stalled' (SET)
6
- waitKey 'wait', (LIST)
7
- activeKey 'active', (LIST)
8
- failedKey 'failed', (ZSET)
9
- stalledCheckKey 'stalled-check', (KEY)
10
- metaKey 'meta', (KEY)
11
- pausedKey 'paused', (LIST)
12
- eventStreamKey 'event stream' (STREAM)
13
-
14
- maxStalledJobCount Max stalled job count
15
- queueKeyPrefix queue.toKey('')
16
- timestamp timestamp
17
- maxCheckTime max check time
18
-
19
- Events:
20
- 'stalled' with stalled job id.
21
- ]]
22
- local rcall = redis.call
23
-
24
- -- Includes
25
- --- @include "batches"
26
- --- @include "getTargetQueueList"
27
- --- @include "removeJob"
28
- --- @include "removeJobsByMaxAge"
29
- --- @include "removeJobsByMaxCount"
30
- --- @include "trimEvents"
31
-
32
- -- Check if we need to check for stalled jobs now.
33
-
34
- local function checkStalledJobs(stalledKey, waitKey, activeKey, failedKey,
35
- stalledCheckKey, metaKey, pausedKey,
36
- eventStreamKey, maxStalledJobCount,
37
- queueKeyPrefix, timestamp, maxCheckTime)
38
- if rcall("EXISTS", stalledCheckKey) == 1 then return {{}, {}} end
39
-
40
- rcall("SET", stalledCheckKey, timestamp, "PX", maxCheckTime)
41
-
42
- -- Trim events before emiting them to avoid trimming events emitted in this script
43
- trimEvents(metaKey, eventStreamKey)
44
-
45
- -- Move all stalled jobs to wait
46
- local stalling = rcall('SMEMBERS', stalledKey)
47
- local stalled = {}
48
- local failed = {}
49
- if (#stalling > 0) then
50
- rcall('DEL', stalledKey)
51
-
52
- local MAX_STALLED_JOB_COUNT = tonumber(maxStalledJobCount)
53
-
54
- -- Remove from active list
55
- for i, jobId in ipairs(stalling) do
56
- -- Markers in waitlist DEPRECATED in v5: Remove in v6.
57
- if string.sub(jobId, 1, 2) == "0:" then
58
- -- If the jobId is a delay marker ID we just remove it.
59
- rcall("LREM", activeKey, 1, jobId)
60
- else
61
- local jobKey = queueKeyPrefix .. jobId
62
-
63
- -- Check that the lock is also missing, then we can handle this job as really stalled.
64
- if (rcall("EXISTS", jobKey .. ":lock") == 0) then
65
- -- Remove from the active queue.
66
- local removed = rcall("LREM", activeKey, 1, jobId)
67
-
68
- if (removed > 0) then
69
- -- If this job has been stalled too many times, such as if it crashes the worker, then fail it.
70
- local stalledCount =
71
- rcall("HINCRBY", jobKey, "stalledCounter", 1)
72
- if (stalledCount > MAX_STALLED_JOB_COUNT) then
73
- local rawOpts = rcall("HGET", jobKey, "opts")
74
- local opts = cjson.decode(rawOpts)
75
- local removeOnFailType = type(opts["removeOnFail"])
76
- rcall("ZADD", failedKey, timestamp, jobId)
77
- local failedReason =
78
- "job stalled more than allowable limit"
79
- rcall("HMSET", jobKey, "failedReason", failedReason,
80
- "finishedOn", timestamp)
81
- rcall("XADD", eventStreamKey, "*", "event",
82
- "failed", "jobId", jobId, 'prev', 'active',
83
- 'failedReason', failedReason)
84
-
85
- if removeOnFailType == "number" then
86
- removeJobsByMaxCount(opts["removeOnFail"],
87
- failedKey, queueKeyPrefix)
88
- elseif removeOnFailType == "boolean" then
89
- if opts["removeOnFail"] then
90
- removeJob(jobId, false, queueKeyPrefix)
91
- rcall("ZREM", failedKey, jobId)
92
- end
93
- elseif removeOnFailType ~= "nil" then
94
- local maxAge = opts["removeOnFail"]["age"]
95
- local maxCount = opts["removeOnFail"]["count"]
96
-
97
- if maxAge ~= nil then
98
- removeJobsByMaxAge(timestamp, maxAge,
99
- failedKey, queueKeyPrefix)
100
- end
101
-
102
- if maxCount ~= nil and maxCount > 0 then
103
- removeJobsByMaxCount(maxCount, failedKey,
104
- queueKeyPrefix)
105
- end
106
- end
107
-
108
- table.insert(failed, jobId)
109
- else
110
- local target =
111
- getTargetQueueList(metaKey, waitKey, pausedKey)
112
-
113
- -- Move the job back to the wait queue, to immediately be picked up by a waiting worker.
114
- rcall("RPUSH", target, jobId)
115
- rcall("XADD", eventStreamKey, "*", "event",
116
- "waiting", "jobId", jobId, 'prev', 'active')
117
-
118
- -- Emit the stalled event
119
- rcall("XADD", eventStreamKey, "*", "event",
120
- "stalled", "jobId", jobId)
121
- table.insert(stalled, jobId)
122
- end
123
- end
124
- end
125
- end
126
- end
127
- end
128
-
129
- -- Mark potentially stalled jobs
130
- local active = rcall('LRANGE', activeKey, 0, -1)
131
-
132
- if (#active > 0) then
133
- for from, to in batches(#active, 7000) do
134
- rcall('SADD', stalledKey, unpack(active, from, to))
135
- end
136
- end
137
-
138
- return {failed, stalled}
139
- end
@@ -1,24 +0,0 @@
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
- KEYS[6] 'meta', (KEY)
11
- KEYS[7] 'paused', (LIST)
12
- KEYS[8] 'event stream' (STREAM)
13
-
14
- ARGV[1] Max stalled job count
15
- ARGV[2] queue.toKey('')
16
- ARGV[3] timestamp
17
- ARGV[4] max check time
18
-
19
- Events:
20
- 'stalled' with stalled job id.
21
- ]] -- Includes
22
- --- @include "includes/checkStalledJobs"
23
- return checkStalledJobs(KEYS[1], KEYS[2], KEYS[3], KEYS[4], KEYS[5], KEYS[6],
24
- KEYS[7], KEYS[8], ARGV[1], ARGV[2], ARGV[3], ARGV[4])
@@ -1,139 +0,0 @@
1
- --[[
2
- Move stalled jobs to wait.
3
-
4
- Input:
5
- stalledKey 'stalled' (SET)
6
- waitKey 'wait', (LIST)
7
- activeKey 'active', (LIST)
8
- failedKey 'failed', (ZSET)
9
- stalledCheckKey 'stalled-check', (KEY)
10
- metaKey 'meta', (KEY)
11
- pausedKey 'paused', (LIST)
12
- eventStreamKey 'event stream' (STREAM)
13
-
14
- maxStalledJobCount Max stalled job count
15
- queueKeyPrefix queue.toKey('')
16
- timestamp timestamp
17
- maxCheckTime max check time
18
-
19
- Events:
20
- 'stalled' with stalled job id.
21
- ]]
22
- local rcall = redis.call
23
-
24
- -- Includes
25
- --- @include "batches"
26
- --- @include "getTargetQueueList"
27
- --- @include "removeJob"
28
- --- @include "removeJobsByMaxAge"
29
- --- @include "removeJobsByMaxCount"
30
- --- @include "trimEvents"
31
-
32
- -- Check if we need to check for stalled jobs now.
33
-
34
- local function checkStalledJobs(stalledKey, waitKey, activeKey, failedKey,
35
- stalledCheckKey, metaKey, pausedKey,
36
- eventStreamKey, maxStalledJobCount,
37
- queueKeyPrefix, timestamp, maxCheckTime)
38
- if rcall("EXISTS", stalledCheckKey) == 1 then return {{}, {}} end
39
-
40
- rcall("SET", stalledCheckKey, timestamp, "PX", maxCheckTime)
41
-
42
- -- Trim events before emiting them to avoid trimming events emitted in this script
43
- trimEvents(metaKey, eventStreamKey)
44
-
45
- -- Move all stalled jobs to wait
46
- local stalling = rcall('SMEMBERS', stalledKey)
47
- local stalled = {}
48
- local failed = {}
49
- if (#stalling > 0) then
50
- rcall('DEL', stalledKey)
51
-
52
- local MAX_STALLED_JOB_COUNT = tonumber(maxStalledJobCount)
53
-
54
- -- Remove from active list
55
- for i, jobId in ipairs(stalling) do
56
- -- Markers in waitlist DEPRECATED in v5: Remove in v6.
57
- if string.sub(jobId, 1, 2) == "0:" then
58
- -- If the jobId is a delay marker ID we just remove it.
59
- rcall("LREM", activeKey, 1, jobId)
60
- else
61
- local jobKey = queueKeyPrefix .. jobId
62
-
63
- -- Check that the lock is also missing, then we can handle this job as really stalled.
64
- if (rcall("EXISTS", jobKey .. ":lock") == 0) then
65
- -- Remove from the active queue.
66
- local removed = rcall("LREM", activeKey, 1, jobId)
67
-
68
- if (removed > 0) then
69
- -- If this job has been stalled too many times, such as if it crashes the worker, then fail it.
70
- local stalledCount =
71
- rcall("HINCRBY", jobKey, "stalledCounter", 1)
72
- if (stalledCount > MAX_STALLED_JOB_COUNT) then
73
- local rawOpts = rcall("HGET", jobKey, "opts")
74
- local opts = cjson.decode(rawOpts)
75
- local removeOnFailType = type(opts["removeOnFail"])
76
- rcall("ZADD", failedKey, timestamp, jobId)
77
- local failedReason =
78
- "job stalled more than allowable limit"
79
- rcall("HMSET", jobKey, "failedReason", failedReason,
80
- "finishedOn", timestamp)
81
- rcall("XADD", eventStreamKey, "*", "event",
82
- "failed", "jobId", jobId, 'prev', 'active',
83
- 'failedReason', failedReason)
84
-
85
- if removeOnFailType == "number" then
86
- removeJobsByMaxCount(opts["removeOnFail"],
87
- failedKey, queueKeyPrefix)
88
- elseif removeOnFailType == "boolean" then
89
- if opts["removeOnFail"] then
90
- removeJob(jobId, false, queueKeyPrefix)
91
- rcall("ZREM", failedKey, jobId)
92
- end
93
- elseif removeOnFailType ~= "nil" then
94
- local maxAge = opts["removeOnFail"]["age"]
95
- local maxCount = opts["removeOnFail"]["count"]
96
-
97
- if maxAge ~= nil then
98
- removeJobsByMaxAge(timestamp, maxAge,
99
- failedKey, queueKeyPrefix)
100
- end
101
-
102
- if maxCount ~= nil and maxCount > 0 then
103
- removeJobsByMaxCount(maxCount, failedKey,
104
- queueKeyPrefix)
105
- end
106
- end
107
-
108
- table.insert(failed, jobId)
109
- else
110
- local target =
111
- getTargetQueueList(metaKey, waitKey, pausedKey)
112
-
113
- -- Move the job back to the wait queue, to immediately be picked up by a waiting worker.
114
- rcall("RPUSH", target, jobId)
115
- rcall("XADD", eventStreamKey, "*", "event",
116
- "waiting", "jobId", jobId, 'prev', 'active')
117
-
118
- -- Emit the stalled event
119
- rcall("XADD", eventStreamKey, "*", "event",
120
- "stalled", "jobId", jobId)
121
- table.insert(stalled, jobId)
122
- end
123
- end
124
- end
125
- end
126
- end
127
- end
128
-
129
- -- Mark potentially stalled jobs
130
- local active = rcall('LRANGE', activeKey, 0, -1)
131
-
132
- if (#active > 0) then
133
- for from, to in batches(#active, 7000) do
134
- rcall('SADD', stalledKey, unpack(active, from, to))
135
- end
136
- end
137
-
138
- return {failed, stalled}
139
- end
@@ -1,24 +0,0 @@
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
- KEYS[6] 'meta', (KEY)
11
- KEYS[7] 'paused', (LIST)
12
- KEYS[8] 'event stream' (STREAM)
13
-
14
- ARGV[1] Max stalled job count
15
- ARGV[2] queue.toKey('')
16
- ARGV[3] timestamp
17
- ARGV[4] max check time
18
-
19
- Events:
20
- 'stalled' with stalled job id.
21
- ]] -- Includes
22
- --- @include "includes/checkStalledJobs"
23
- return checkStalledJobs(KEYS[1], KEYS[2], KEYS[3], KEYS[4], KEYS[5], KEYS[6],
24
- KEYS[7], KEYS[8], ARGV[1], ARGV[2], ARGV[3], ARGV[4])