bullmq 5.41.8 → 5.41.9
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.
- package/dist/cjs/classes/job-scheduler.js +11 -18
- package/dist/cjs/classes/job-scheduler.js.map +1 -1
- package/dist/cjs/classes/scripts.js +28 -2
- package/dist/cjs/classes/scripts.js.map +1 -1
- package/dist/cjs/commands/addJobScheduler-10.lua +9 -36
- package/dist/cjs/commands/includes/addJobFromScheduler.lua +41 -0
- package/dist/cjs/commands/{updateJobScheduler-7.lua → updateJobScheduler-11.lua} +28 -21
- package/dist/cjs/scripts/addJobScheduler-10.js +77 -67
- package/dist/cjs/scripts/addJobScheduler-10.js.map +1 -1
- package/dist/cjs/scripts/index.js +1 -1
- package/dist/cjs/scripts/index.js.map +1 -1
- package/dist/cjs/scripts/updateJobScheduler-11.js +246 -0
- package/dist/cjs/scripts/updateJobScheduler-11.js.map +1 -0
- package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/classes/job-scheduler.js +11 -18
- package/dist/esm/classes/job-scheduler.js.map +1 -1
- package/dist/esm/classes/scripts.d.ts +1 -1
- package/dist/esm/classes/scripts.js +28 -2
- package/dist/esm/classes/scripts.js.map +1 -1
- package/dist/esm/commands/addJobScheduler-10.lua +9 -36
- package/dist/esm/commands/includes/addJobFromScheduler.lua +41 -0
- package/dist/esm/commands/{updateJobScheduler-7.lua → updateJobScheduler-11.lua} +28 -21
- package/dist/esm/scripts/addJobScheduler-10.js +77 -67
- package/dist/esm/scripts/addJobScheduler-10.js.map +1 -1
- package/dist/esm/scripts/index.d.ts +1 -1
- package/dist/esm/scripts/index.js +1 -1
- package/dist/esm/scripts/index.js.map +1 -1
- package/dist/esm/scripts/updateJobScheduler-11.js +243 -0
- package/dist/esm/scripts/updateJobScheduler-11.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +1 -1
- package/dist/cjs/scripts/updateJobScheduler-7.js +0 -144
- package/dist/cjs/scripts/updateJobScheduler-7.js.map +0 -1
- package/dist/esm/scripts/updateJobScheduler-7.js +0 -141
- package/dist/esm/scripts/updateJobScheduler-7.js.map +0 -1
- /package/dist/esm/scripts/{updateJobScheduler-7.d.ts → updateJobScheduler-11.d.ts} +0 -0
@@ -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,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"}
|
File without changes
|