bullmq 5.41.8 → 5.42.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 (98) hide show
  1. package/dist/cjs/classes/job-scheduler.js +14 -18
  2. package/dist/cjs/classes/job-scheduler.js.map +1 -1
  3. package/dist/cjs/classes/job.js +20 -13
  4. package/dist/cjs/classes/job.js.map +1 -1
  5. package/dist/cjs/classes/scripts.js +33 -3
  6. package/dist/cjs/classes/scripts.js.map +1 -1
  7. package/dist/cjs/classes/worker.js +4 -8
  8. package/dist/cjs/classes/worker.js.map +1 -1
  9. package/dist/cjs/commands/addJobScheduler-10.lua +9 -36
  10. package/dist/cjs/commands/includes/addJobFromScheduler.lua +41 -0
  11. package/dist/cjs/commands/includes/moveParentFromWaitingChildrenToFailed.lua +11 -1
  12. package/dist/cjs/commands/includes/removeJobKeys.lua +2 -2
  13. package/dist/cjs/commands/includes/storeJobScheduler.lua +1 -1
  14. package/dist/cjs/commands/moveStalledJobsToWait-9.lua +5 -0
  15. package/dist/cjs/commands/moveToFinished-14.lua +2 -0
  16. package/dist/cjs/commands/moveToWaitingChildren-8.lua +133 -0
  17. package/dist/cjs/commands/removeJob-3.lua +10 -0
  18. package/dist/{esm/commands/updateJobScheduler-7.lua → cjs/commands/updateJobScheduler-11.lua} +28 -21
  19. package/dist/cjs/scripts/addJobScheduler-10.js +80 -70
  20. package/dist/cjs/scripts/addJobScheduler-10.js.map +1 -1
  21. package/dist/cjs/scripts/addRepeatableJob-2.js +2 -2
  22. package/dist/cjs/scripts/cleanJobsInSet-3.js +2 -2
  23. package/dist/cjs/scripts/drain-5.js +2 -2
  24. package/dist/cjs/scripts/index.js +2 -2
  25. package/dist/cjs/scripts/index.js.map +1 -1
  26. package/dist/cjs/scripts/moveStalledJobsToWait-9.js +17 -3
  27. package/dist/cjs/scripts/moveStalledJobsToWait-9.js.map +1 -1
  28. package/dist/cjs/scripts/moveToFinished-14.js +14 -3
  29. package/dist/cjs/scripts/moveToFinished-14.js.map +1 -1
  30. package/dist/cjs/scripts/moveToWaitingChildren-8.js +549 -0
  31. package/dist/cjs/scripts/moveToWaitingChildren-8.js.map +1 -0
  32. package/dist/cjs/scripts/obliterate-2.js +2 -2
  33. package/dist/cjs/scripts/removeChildDependency-1.js +2 -2
  34. package/dist/cjs/scripts/removeJob-3.js +10 -2
  35. package/dist/cjs/scripts/removeJob-3.js.map +1 -1
  36. package/dist/cjs/scripts/removeJobScheduler-3.js +2 -2
  37. package/dist/cjs/scripts/removeRepeatable-3.js +2 -2
  38. package/dist/cjs/scripts/updateJobScheduler-11.js +246 -0
  39. package/dist/cjs/scripts/updateJobScheduler-11.js.map +1 -0
  40. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  41. package/dist/cjs/version.js +1 -1
  42. package/dist/esm/classes/job-scheduler.js +14 -18
  43. package/dist/esm/classes/job-scheduler.js.map +1 -1
  44. package/dist/esm/classes/job.js +20 -13
  45. package/dist/esm/classes/job.js.map +1 -1
  46. package/dist/esm/classes/scripts.d.ts +1 -1
  47. package/dist/esm/classes/scripts.js +33 -3
  48. package/dist/esm/classes/scripts.js.map +1 -1
  49. package/dist/esm/classes/worker.js +4 -8
  50. package/dist/esm/classes/worker.js.map +1 -1
  51. package/dist/esm/commands/addJobScheduler-10.lua +9 -36
  52. package/dist/esm/commands/includes/addJobFromScheduler.lua +41 -0
  53. package/dist/esm/commands/includes/moveParentFromWaitingChildrenToFailed.lua +11 -1
  54. package/dist/esm/commands/includes/removeJobKeys.lua +2 -2
  55. package/dist/esm/commands/includes/storeJobScheduler.lua +1 -1
  56. package/dist/esm/commands/moveStalledJobsToWait-9.lua +5 -0
  57. package/dist/esm/commands/moveToFinished-14.lua +2 -0
  58. package/dist/esm/commands/moveToWaitingChildren-8.lua +133 -0
  59. package/dist/esm/commands/removeJob-3.lua +10 -0
  60. package/dist/{cjs/commands/updateJobScheduler-7.lua → esm/commands/updateJobScheduler-11.lua} +28 -21
  61. package/dist/esm/scripts/addJobScheduler-10.js +80 -70
  62. package/dist/esm/scripts/addJobScheduler-10.js.map +1 -1
  63. package/dist/esm/scripts/addRepeatableJob-2.js +2 -2
  64. package/dist/esm/scripts/cleanJobsInSet-3.js +2 -2
  65. package/dist/esm/scripts/drain-5.js +2 -2
  66. package/dist/esm/scripts/index.d.ts +2 -2
  67. package/dist/esm/scripts/index.js +2 -2
  68. package/dist/esm/scripts/index.js.map +1 -1
  69. package/dist/esm/scripts/moveStalledJobsToWait-9.js +17 -3
  70. package/dist/esm/scripts/moveStalledJobsToWait-9.js.map +1 -1
  71. package/dist/esm/scripts/moveToFinished-14.js +14 -3
  72. package/dist/esm/scripts/moveToFinished-14.js.map +1 -1
  73. package/dist/esm/scripts/moveToWaitingChildren-8.js +546 -0
  74. package/dist/esm/scripts/moveToWaitingChildren-8.js.map +1 -0
  75. package/dist/esm/scripts/obliterate-2.js +2 -2
  76. package/dist/esm/scripts/removeChildDependency-1.js +2 -2
  77. package/dist/esm/scripts/removeJob-3.js +10 -2
  78. package/dist/esm/scripts/removeJob-3.js.map +1 -1
  79. package/dist/esm/scripts/removeJobScheduler-3.js +2 -2
  80. package/dist/esm/scripts/removeRepeatable-3.js +2 -2
  81. package/dist/esm/scripts/updateJobScheduler-11.js +243 -0
  82. package/dist/esm/scripts/updateJobScheduler-11.js.map +1 -0
  83. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  84. package/dist/esm/version.d.ts +1 -1
  85. package/dist/esm/version.js +1 -1
  86. package/package.json +1 -1
  87. package/dist/cjs/commands/moveToWaitingChildren-5.lua +0 -68
  88. package/dist/cjs/scripts/moveToWaitingChildren-5.js +0 -83
  89. package/dist/cjs/scripts/moveToWaitingChildren-5.js.map +0 -1
  90. package/dist/cjs/scripts/updateJobScheduler-7.js +0 -144
  91. package/dist/cjs/scripts/updateJobScheduler-7.js.map +0 -1
  92. package/dist/esm/commands/moveToWaitingChildren-5.lua +0 -68
  93. package/dist/esm/scripts/moveToWaitingChildren-5.js +0 -80
  94. package/dist/esm/scripts/moveToWaitingChildren-5.js.map +0 -1
  95. package/dist/esm/scripts/updateJobScheduler-7.js +0 -141
  96. package/dist/esm/scripts/updateJobScheduler-7.js.map +0 -1
  97. /package/dist/esm/scripts/{moveToWaitingChildren-5.d.ts → moveToWaitingChildren-8.d.ts} +0 -0
  98. /package/dist/esm/scripts/{updateJobScheduler-7.d.ts → updateJobScheduler-11.d.ts} +0 -0
@@ -1,68 +0,0 @@
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
- KEYS[5] stalled key
10
-
11
- ARGV[1] token
12
- ARGV[2] child key
13
- ARGV[3] timestamp
14
- ARGV[4] the id of the job
15
-
16
- Output:
17
- 0 - OK
18
- 1 - There are not pending dependencies.
19
- -1 - Missing job.
20
- -2 - Missing lock
21
- -3 - Job not in active set
22
- ]]
23
- local rcall = redis.call
24
- local stalledKey = KEYS[5]
25
-
26
- --- Includes
27
- --- @include "includes/removeLock"
28
-
29
- local function moveToWaitingChildren (activeKey, waitingChildrenKey, jobId,
30
- timestamp)
31
- local score = tonumber(timestamp)
32
-
33
- local numRemovedElements = rcall("LREM", activeKey, -1, jobId)
34
-
35
- if(numRemovedElements < 1) then
36
- return -3
37
- end
38
-
39
- rcall("ZADD", waitingChildrenKey, score, jobId)
40
-
41
- return 0
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
- local errorCode = removeLock(KEYS[4], stalledKey, ARGV[1], ARGV[4])
48
- if errorCode < 0 then
49
- return errorCode
50
- end
51
- return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
52
- end
53
-
54
- return 1
55
- else
56
- if rcall("SCARD", KEYS[4] .. ":dependencies") ~= 0 then
57
- local errorCode = removeLock(KEYS[4], stalledKey, ARGV[1], ARGV[4])
58
- if errorCode < 0 then
59
- return errorCode
60
- end
61
- return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
62
- end
63
-
64
- return 1
65
- end
66
- end
67
-
68
- return -1
@@ -1,83 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.moveToWaitingChildren = void 0;
4
- const content = `--[[
5
- Moves job from active to waiting children set.
6
- Input:
7
- KEYS[1] lock key
8
- KEYS[2] active key
9
- KEYS[3] waitChildrenKey key
10
- KEYS[4] job key
11
- KEYS[5] stalled key
12
- ARGV[1] token
13
- ARGV[2] child key
14
- ARGV[3] timestamp
15
- ARGV[4] the id of the job
16
- Output:
17
- 0 - OK
18
- 1 - There are not pending dependencies.
19
- -1 - Missing job.
20
- -2 - Missing lock
21
- -3 - Job not in active set
22
- ]]
23
- local rcall = redis.call
24
- local stalledKey = KEYS[5]
25
- --- Includes
26
- local function removeLock(jobKey, stalledKey, token, jobId)
27
- if token ~= "0" then
28
- local lockKey = jobKey .. ':lock'
29
- local lockToken = rcall("GET", lockKey)
30
- if lockToken == token then
31
- rcall("DEL", lockKey)
32
- rcall("SREM", stalledKey, jobId)
33
- else
34
- if lockToken then
35
- -- Lock exists but token does not match
36
- return -6
37
- else
38
- -- Lock is missing completely
39
- return -2
40
- end
41
- end
42
- end
43
- return 0
44
- end
45
- local function moveToWaitingChildren (activeKey, waitingChildrenKey, jobId,
46
- timestamp)
47
- local score = tonumber(timestamp)
48
- local numRemovedElements = rcall("LREM", activeKey, -1, jobId)
49
- if(numRemovedElements < 1) then
50
- return -3
51
- end
52
- rcall("ZADD", waitingChildrenKey, score, jobId)
53
- return 0
54
- end
55
- if rcall("EXISTS", KEYS[4]) == 1 then
56
- if ARGV[2] ~= "" then
57
- if rcall("SISMEMBER", KEYS[4] .. ":dependencies", ARGV[2]) ~= 0 then
58
- local errorCode = removeLock(KEYS[4], stalledKey, ARGV[1], ARGV[4])
59
- if errorCode < 0 then
60
- return errorCode
61
- end
62
- return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
63
- end
64
- return 1
65
- else
66
- if rcall("SCARD", KEYS[4] .. ":dependencies") ~= 0 then
67
- local errorCode = removeLock(KEYS[4], stalledKey, ARGV[1], ARGV[4])
68
- if errorCode < 0 then
69
- return errorCode
70
- end
71
- return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
72
- end
73
- return 1
74
- end
75
- end
76
- return -1
77
- `;
78
- exports.moveToWaitingChildren = {
79
- name: 'moveToWaitingChildren',
80
- content,
81
- keys: 5,
82
- };
83
- //# sourceMappingURL=moveToWaitingChildren-5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"moveToWaitingChildren-5.js","sourceRoot":"","sources":["../../../src/scripts/moveToWaitingChildren-5.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyEf,CAAC;AACW,QAAA,qBAAqB,GAAG;IACnC,IAAI,EAAE,uBAAuB;IAC7B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -1,144 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateJobScheduler = void 0;
4
- const content = `--[[
5
- Updates a job scheduler and adds next delayed job
6
- Input:
7
- KEYS[1] 'marker',
8
- KEYS[2] 'meta'
9
- KEYS[3] 'id'
10
- KEYS[4] 'delayed'
11
- KEYS[5] events stream key
12
- KEYS[6] 'repeat' key
13
- KEYS[7] producer key
14
- ARGV[1] next milliseconds
15
- ARGV[2] jobs scheduler id
16
- ARGV[3] Json stringified delayed data
17
- ARGV[4] msgpacked delayed opts
18
- ARGV[5] timestamp
19
- ARGV[6] prefix key
20
- ARGV[7] producer id
21
- Output:
22
- next delayed job id - OK
23
- ]]
24
- local rcall = redis.call
25
- local repeatKey = KEYS[6]
26
- local delayedKey = KEYS[4]
27
- local nextMillis = ARGV[1]
28
- local jobSchedulerId = ARGV[2]
29
- local timestamp = ARGV[5]
30
- local prefixKey = ARGV[6]
31
- local producerId = ARGV[7]
32
- -- Includes
33
- --[[
34
- Adds a delayed job to the queue by doing the following:
35
- - Creates a new job key with the job data.
36
- - adds to delayed zset.
37
- - Emits a global event 'delayed' if the job is delayed.
38
- ]]
39
- -- Includes
40
- --[[
41
- Add delay marker if needed.
42
- ]]
43
- -- Includes
44
- --[[
45
- Function to return the next delayed job timestamp.
46
- ]]
47
- local function getNextDelayedTimestamp(delayedKey)
48
- local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
49
- if #result then
50
- local nextTimestamp = tonumber(result[2])
51
- if nextTimestamp ~= nil then
52
- return nextTimestamp / 0x1000
53
- end
54
- end
55
- end
56
- local function addDelayMarkerIfNeeded(markerKey, delayedKey)
57
- local nextTimestamp = getNextDelayedTimestamp(delayedKey)
58
- if nextTimestamp ~= nil then
59
- -- Replace the score of the marker with the newest known
60
- -- next timestamp.
61
- rcall("ZADD", markerKey, nextTimestamp, "1")
62
- end
63
- end
64
- --[[
65
- Bake in the job id first 12 bits into the timestamp
66
- to guarantee correct execution order of delayed jobs
67
- (up to 4096 jobs per given timestamp or 4096 jobs apart per timestamp)
68
- WARNING: Jobs that are so far apart that they wrap around will cause FIFO to fail
69
- ]]
70
- local function getDelayedScore(delayedKey, timestamp, delay)
71
- local delayedTimestamp = (delay > 0 and (tonumber(timestamp) + delay)) or tonumber(timestamp)
72
- local minScore = delayedTimestamp * 0x1000
73
- local maxScore = (delayedTimestamp + 1 ) * 0x1000 - 1
74
- local result = rcall("ZREVRANGEBYSCORE", delayedKey, maxScore,
75
- minScore, "WITHSCORES","LIMIT", 0, 1)
76
- if #result then
77
- local currentMaxScore = tonumber(result[2])
78
- if currentMaxScore ~= nil then
79
- if currentMaxScore >= maxScore then
80
- return maxScore, delayedTimestamp
81
- else
82
- return currentMaxScore + 1, delayedTimestamp
83
- end
84
- end
85
- end
86
- return minScore, delayedTimestamp
87
- end
88
- local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
89
- maxEvents, markerKey, delay)
90
- local score, delayedTimestamp = getDelayedScore(delayedKey, timestamp, tonumber(delay))
91
- rcall("ZADD", delayedKey, score, jobId)
92
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "delayed",
93
- "jobId", jobId, "delay", delayedTimestamp)
94
- -- mark that a delayed job is available
95
- addDelayMarkerIfNeeded(markerKey, delayedKey)
96
- end
97
- --[[
98
- Function to get max events value or set by default 10000.
99
- ]]
100
- local function getOrSetMaxEvents(metaKey)
101
- local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
102
- if not maxEvents then
103
- maxEvents = 10000
104
- rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
105
- end
106
- return maxEvents
107
- end
108
- local schedulerKey = repeatKey .. ":" .. jobSchedulerId
109
- local nextDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. nextMillis
110
- local nextDelayedJobKey = schedulerKey .. ":" .. nextMillis
111
- -- Validate that scheduler exists.
112
- local prevMillis = rcall("ZSCORE", repeatKey, jobSchedulerId)
113
- if prevMillis ~= false then
114
- local currentDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. prevMillis
115
- if producerId == currentDelayedJobId then
116
- local schedulerAttributes = rcall("HMGET", schedulerKey, "name", "data")
117
- rcall("ZADD", repeatKey, nextMillis, jobSchedulerId)
118
- rcall("HINCRBY", schedulerKey, "ic", 1)
119
- local eventsKey = KEYS[5]
120
- local metaKey = KEYS[2]
121
- local maxEvents = getOrSetMaxEvents(metaKey)
122
- rcall("INCR", KEYS[3])
123
- local delayedOpts = cmsgpack.unpack(ARGV[4])
124
- -- TODO: remove this workaround in next breaking change,
125
- -- all job-schedulers must save job data
126
- local templateData = schedulerAttributes[2] or ARGV[3]
127
- if templateData and templateData ~= '{}' then
128
- rcall("HSET", schedulerKey, "data", templateData)
129
- end
130
- addDelayedJob(nextDelayedJobKey, nextDelayedJobId, delayedKey, eventsKey, schedulerAttributes[1],
131
- templateData or '{}', delayedOpts, timestamp, jobSchedulerId, maxEvents, KEYS[1], nil, nil)
132
- if KEYS[7] ~= "" then
133
- rcall("HSET", KEYS[7], "nrjid", nextDelayedJobId)
134
- end
135
- return nextDelayedJobId .. "" -- convert to string
136
- end
137
- end
138
- `;
139
- exports.updateJobScheduler = {
140
- name: 'updateJobScheduler',
141
- content,
142
- keys: 7,
143
- };
144
- //# sourceMappingURL=updateJobScheduler-7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updateJobScheduler-7.js","sourceRoot":"","sources":["../../../src/scripts/updateJobScheduler-7.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsIf,CAAC;AACW,QAAA,kBAAkB,GAAG;IAChC,IAAI,EAAE,oBAAoB;IAC1B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -1,68 +0,0 @@
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
- KEYS[5] stalled key
10
-
11
- ARGV[1] token
12
- ARGV[2] child key
13
- ARGV[3] timestamp
14
- ARGV[4] the id of the job
15
-
16
- Output:
17
- 0 - OK
18
- 1 - There are not pending dependencies.
19
- -1 - Missing job.
20
- -2 - Missing lock
21
- -3 - Job not in active set
22
- ]]
23
- local rcall = redis.call
24
- local stalledKey = KEYS[5]
25
-
26
- --- Includes
27
- --- @include "includes/removeLock"
28
-
29
- local function moveToWaitingChildren (activeKey, waitingChildrenKey, jobId,
30
- timestamp)
31
- local score = tonumber(timestamp)
32
-
33
- local numRemovedElements = rcall("LREM", activeKey, -1, jobId)
34
-
35
- if(numRemovedElements < 1) then
36
- return -3
37
- end
38
-
39
- rcall("ZADD", waitingChildrenKey, score, jobId)
40
-
41
- return 0
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
- local errorCode = removeLock(KEYS[4], stalledKey, ARGV[1], ARGV[4])
48
- if errorCode < 0 then
49
- return errorCode
50
- end
51
- return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
52
- end
53
-
54
- return 1
55
- else
56
- if rcall("SCARD", KEYS[4] .. ":dependencies") ~= 0 then
57
- local errorCode = removeLock(KEYS[4], stalledKey, ARGV[1], ARGV[4])
58
- if errorCode < 0 then
59
- return errorCode
60
- end
61
- return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
62
- end
63
-
64
- return 1
65
- end
66
- end
67
-
68
- return -1
@@ -1,80 +0,0 @@
1
- const content = `--[[
2
- Moves job from active to waiting children set.
3
- Input:
4
- KEYS[1] lock key
5
- KEYS[2] active key
6
- KEYS[3] waitChildrenKey key
7
- KEYS[4] job key
8
- KEYS[5] stalled key
9
- ARGV[1] token
10
- ARGV[2] child key
11
- ARGV[3] timestamp
12
- ARGV[4] the id of the job
13
- Output:
14
- 0 - OK
15
- 1 - There are not pending dependencies.
16
- -1 - Missing job.
17
- -2 - Missing lock
18
- -3 - Job not in active set
19
- ]]
20
- local rcall = redis.call
21
- local stalledKey = KEYS[5]
22
- --- Includes
23
- local function removeLock(jobKey, stalledKey, token, jobId)
24
- if token ~= "0" then
25
- local lockKey = jobKey .. ':lock'
26
- local lockToken = rcall("GET", lockKey)
27
- if lockToken == token then
28
- rcall("DEL", lockKey)
29
- rcall("SREM", stalledKey, jobId)
30
- else
31
- if lockToken then
32
- -- Lock exists but token does not match
33
- return -6
34
- else
35
- -- Lock is missing completely
36
- return -2
37
- end
38
- end
39
- end
40
- return 0
41
- end
42
- local function moveToWaitingChildren (activeKey, waitingChildrenKey, jobId,
43
- timestamp)
44
- local score = tonumber(timestamp)
45
- local numRemovedElements = rcall("LREM", activeKey, -1, jobId)
46
- if(numRemovedElements < 1) then
47
- return -3
48
- end
49
- rcall("ZADD", waitingChildrenKey, score, jobId)
50
- return 0
51
- end
52
- if rcall("EXISTS", KEYS[4]) == 1 then
53
- if ARGV[2] ~= "" then
54
- if rcall("SISMEMBER", KEYS[4] .. ":dependencies", ARGV[2]) ~= 0 then
55
- local errorCode = removeLock(KEYS[4], stalledKey, ARGV[1], ARGV[4])
56
- if errorCode < 0 then
57
- return errorCode
58
- end
59
- return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
60
- end
61
- return 1
62
- else
63
- if rcall("SCARD", KEYS[4] .. ":dependencies") ~= 0 then
64
- local errorCode = removeLock(KEYS[4], stalledKey, ARGV[1], ARGV[4])
65
- if errorCode < 0 then
66
- return errorCode
67
- end
68
- return moveToWaitingChildren(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
69
- end
70
- return 1
71
- end
72
- end
73
- return -1
74
- `;
75
- export const moveToWaitingChildren = {
76
- name: 'moveToWaitingChildren',
77
- content,
78
- keys: 5,
79
- };
80
- //# sourceMappingURL=moveToWaitingChildren-5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"moveToWaitingChildren-5.js","sourceRoot":"","sources":["../../../src/scripts/moveToWaitingChildren-5.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyEf,CAAC;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,uBAAuB;IAC7B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -1,141 +0,0 @@
1
- const content = `--[[
2
- Updates a job scheduler and adds next delayed job
3
- Input:
4
- KEYS[1] 'marker',
5
- KEYS[2] 'meta'
6
- KEYS[3] 'id'
7
- KEYS[4] 'delayed'
8
- KEYS[5] events stream key
9
- KEYS[6] 'repeat' key
10
- KEYS[7] producer key
11
- ARGV[1] next milliseconds
12
- ARGV[2] jobs scheduler id
13
- ARGV[3] Json stringified delayed data
14
- ARGV[4] msgpacked delayed opts
15
- ARGV[5] timestamp
16
- ARGV[6] prefix key
17
- ARGV[7] producer id
18
- Output:
19
- next delayed job id - OK
20
- ]]
21
- local rcall = redis.call
22
- local repeatKey = KEYS[6]
23
- local delayedKey = KEYS[4]
24
- local nextMillis = ARGV[1]
25
- local jobSchedulerId = ARGV[2]
26
- local timestamp = ARGV[5]
27
- local prefixKey = ARGV[6]
28
- local producerId = ARGV[7]
29
- -- Includes
30
- --[[
31
- Adds a delayed job to the queue by doing the following:
32
- - Creates a new job key with the job data.
33
- - adds to delayed zset.
34
- - Emits a global event 'delayed' if the job is delayed.
35
- ]]
36
- -- Includes
37
- --[[
38
- Add delay marker if needed.
39
- ]]
40
- -- Includes
41
- --[[
42
- Function to return the next delayed job timestamp.
43
- ]]
44
- local function getNextDelayedTimestamp(delayedKey)
45
- local result = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")
46
- if #result then
47
- local nextTimestamp = tonumber(result[2])
48
- if nextTimestamp ~= nil then
49
- return nextTimestamp / 0x1000
50
- end
51
- end
52
- end
53
- local function addDelayMarkerIfNeeded(markerKey, delayedKey)
54
- local nextTimestamp = getNextDelayedTimestamp(delayedKey)
55
- if nextTimestamp ~= nil then
56
- -- Replace the score of the marker with the newest known
57
- -- next timestamp.
58
- rcall("ZADD", markerKey, nextTimestamp, "1")
59
- end
60
- end
61
- --[[
62
- Bake in the job id first 12 bits into the timestamp
63
- to guarantee correct execution order of delayed jobs
64
- (up to 4096 jobs per given timestamp or 4096 jobs apart per timestamp)
65
- WARNING: Jobs that are so far apart that they wrap around will cause FIFO to fail
66
- ]]
67
- local function getDelayedScore(delayedKey, timestamp, delay)
68
- local delayedTimestamp = (delay > 0 and (tonumber(timestamp) + delay)) or tonumber(timestamp)
69
- local minScore = delayedTimestamp * 0x1000
70
- local maxScore = (delayedTimestamp + 1 ) * 0x1000 - 1
71
- local result = rcall("ZREVRANGEBYSCORE", delayedKey, maxScore,
72
- minScore, "WITHSCORES","LIMIT", 0, 1)
73
- if #result then
74
- local currentMaxScore = tonumber(result[2])
75
- if currentMaxScore ~= nil then
76
- if currentMaxScore >= maxScore then
77
- return maxScore, delayedTimestamp
78
- else
79
- return currentMaxScore + 1, delayedTimestamp
80
- end
81
- end
82
- end
83
- return minScore, delayedTimestamp
84
- end
85
- local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
86
- maxEvents, markerKey, delay)
87
- local score, delayedTimestamp = getDelayedScore(delayedKey, timestamp, tonumber(delay))
88
- rcall("ZADD", delayedKey, score, jobId)
89
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "delayed",
90
- "jobId", jobId, "delay", delayedTimestamp)
91
- -- mark that a delayed job is available
92
- addDelayMarkerIfNeeded(markerKey, delayedKey)
93
- end
94
- --[[
95
- Function to get max events value or set by default 10000.
96
- ]]
97
- local function getOrSetMaxEvents(metaKey)
98
- local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
99
- if not maxEvents then
100
- maxEvents = 10000
101
- rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
102
- end
103
- return maxEvents
104
- end
105
- local schedulerKey = repeatKey .. ":" .. jobSchedulerId
106
- local nextDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. nextMillis
107
- local nextDelayedJobKey = schedulerKey .. ":" .. nextMillis
108
- -- Validate that scheduler exists.
109
- local prevMillis = rcall("ZSCORE", repeatKey, jobSchedulerId)
110
- if prevMillis ~= false then
111
- local currentDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. prevMillis
112
- if producerId == currentDelayedJobId then
113
- local schedulerAttributes = rcall("HMGET", schedulerKey, "name", "data")
114
- rcall("ZADD", repeatKey, nextMillis, jobSchedulerId)
115
- rcall("HINCRBY", schedulerKey, "ic", 1)
116
- local eventsKey = KEYS[5]
117
- local metaKey = KEYS[2]
118
- local maxEvents = getOrSetMaxEvents(metaKey)
119
- rcall("INCR", KEYS[3])
120
- local delayedOpts = cmsgpack.unpack(ARGV[4])
121
- -- TODO: remove this workaround in next breaking change,
122
- -- all job-schedulers must save job data
123
- local templateData = schedulerAttributes[2] or ARGV[3]
124
- if templateData and templateData ~= '{}' then
125
- rcall("HSET", schedulerKey, "data", templateData)
126
- end
127
- addDelayedJob(nextDelayedJobKey, nextDelayedJobId, delayedKey, eventsKey, schedulerAttributes[1],
128
- templateData or '{}', delayedOpts, timestamp, jobSchedulerId, maxEvents, KEYS[1], nil, nil)
129
- if KEYS[7] ~= "" then
130
- rcall("HSET", KEYS[7], "nrjid", nextDelayedJobId)
131
- end
132
- return nextDelayedJobId .. "" -- convert to string
133
- end
134
- end
135
- `;
136
- export const updateJobScheduler = {
137
- name: 'updateJobScheduler',
138
- content,
139
- keys: 7,
140
- };
141
- //# sourceMappingURL=updateJobScheduler-7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updateJobScheduler-7.js","sourceRoot":"","sources":["../../../src/scripts/updateJobScheduler-7.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsIf,CAAC;AACF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,oBAAoB;IAC1B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}