bullmq 5.41.4 → 5.41.6
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 +40 -15
- package/dist/cjs/classes/job-scheduler.js.map +1 -1
- package/dist/cjs/classes/job.js +9 -12
- package/dist/cjs/classes/job.js.map +1 -1
- package/dist/cjs/classes/scripts.js +15 -1
- package/dist/cjs/classes/scripts.js.map +1 -1
- package/dist/cjs/commands/addDelayedJob-6.lua +5 -2
- package/dist/cjs/commands/addJobScheduler-10.lua +130 -0
- package/dist/cjs/commands/includes/addDelayedJob.lua +2 -7
- package/dist/cjs/commands/includes/getOrSetMaxEvents.lua +6 -6
- package/dist/cjs/commands/includes/moveParentFromWaitingChildrenToFailed.lua +47 -2
- package/dist/cjs/commands/moveStalledJobsToWait-9.lua +1 -1
- package/dist/cjs/commands/moveToFinished-14.lua +1 -1
- package/dist/cjs/scripts/addDelayedJob-6.js +41 -43
- package/dist/cjs/scripts/addDelayedJob-6.js.map +1 -1
- package/dist/cjs/scripts/{addJobScheduler-2.js → addJobScheduler-10.js} +234 -42
- package/dist/cjs/scripts/addJobScheduler-10.js.map +1 -0
- package/dist/cjs/scripts/addParentJob-4.js +6 -6
- package/dist/cjs/scripts/addPrioritizedJob-8.js +6 -6
- package/dist/cjs/scripts/addStandardJob-8.js +6 -6
- package/dist/cjs/scripts/changeDelay-4.js +6 -6
- package/dist/cjs/scripts/index.js +1 -1
- package/dist/cjs/scripts/index.js.map +1 -1
- package/dist/cjs/scripts/moveJobFromActiveToWait-9.js +6 -6
- package/dist/cjs/scripts/moveJobsToWait-8.js +6 -6
- package/dist/cjs/scripts/moveStalledJobsToWait-9.js +49 -9
- package/dist/cjs/scripts/moveStalledJobsToWait-9.js.map +1 -1
- package/dist/cjs/scripts/moveToDelayed-8.js +6 -6
- package/dist/cjs/scripts/moveToFinished-14.js +49 -9
- package/dist/cjs/scripts/moveToFinished-14.js.map +1 -1
- package/dist/cjs/scripts/removeJob-3.js +6 -6
- package/dist/cjs/scripts/reprocessJob-8.js +6 -6
- package/dist/cjs/scripts/retryJob-11.js +6 -6
- package/dist/cjs/scripts/updateJobScheduler-7.js +8 -41
- package/dist/cjs/scripts/updateJobScheduler-7.js.map +1 -1
- package/dist/cjs/scripts/updateProgress-3.js +6 -6
- package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/classes/job-scheduler.d.ts +1 -0
- package/dist/esm/classes/job-scheduler.js +40 -15
- package/dist/esm/classes/job-scheduler.js.map +1 -1
- package/dist/esm/classes/job.js +9 -12
- package/dist/esm/classes/job.js.map +1 -1
- package/dist/esm/classes/scripts.d.ts +2 -2
- package/dist/esm/classes/scripts.js +15 -1
- package/dist/esm/classes/scripts.js.map +1 -1
- package/dist/esm/commands/addDelayedJob-6.lua +5 -2
- package/dist/esm/commands/addJobScheduler-10.lua +130 -0
- package/dist/esm/commands/includes/addDelayedJob.lua +2 -7
- package/dist/esm/commands/includes/getOrSetMaxEvents.lua +6 -6
- package/dist/esm/commands/includes/moveParentFromWaitingChildrenToFailed.lua +47 -2
- package/dist/esm/commands/moveStalledJobsToWait-9.lua +1 -1
- package/dist/esm/commands/moveToFinished-14.lua +1 -1
- package/dist/esm/scripts/addDelayedJob-6.js +41 -43
- package/dist/esm/scripts/addDelayedJob-6.js.map +1 -1
- package/dist/esm/scripts/{addJobScheduler-2.js → addJobScheduler-10.js} +234 -42
- package/dist/esm/scripts/addJobScheduler-10.js.map +1 -0
- package/dist/esm/scripts/addParentJob-4.js +6 -6
- package/dist/esm/scripts/addPrioritizedJob-8.js +6 -6
- package/dist/esm/scripts/addStandardJob-8.js +6 -6
- package/dist/esm/scripts/changeDelay-4.js +6 -6
- 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/moveJobFromActiveToWait-9.js +6 -6
- package/dist/esm/scripts/moveJobsToWait-8.js +6 -6
- package/dist/esm/scripts/moveStalledJobsToWait-9.js +49 -9
- package/dist/esm/scripts/moveStalledJobsToWait-9.js.map +1 -1
- package/dist/esm/scripts/moveToDelayed-8.js +6 -6
- package/dist/esm/scripts/moveToFinished-14.js +49 -9
- package/dist/esm/scripts/moveToFinished-14.js.map +1 -1
- package/dist/esm/scripts/removeJob-3.js +6 -6
- package/dist/esm/scripts/reprocessJob-8.js +6 -6
- package/dist/esm/scripts/retryJob-11.js +6 -6
- package/dist/esm/scripts/updateJobScheduler-7.js +8 -41
- package/dist/esm/scripts/updateJobScheduler-7.js.map +1 -1
- package/dist/esm/scripts/updateProgress-3.js +6 -6
- 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/commands/addJobScheduler-2.lua +0 -52
- package/dist/cjs/scripts/addJobScheduler-2.js.map +0 -1
- package/dist/esm/commands/addJobScheduler-2.lua +0 -52
- package/dist/esm/scripts/addJobScheduler-2.js.map +0 -1
- /package/dist/esm/scripts/{addJobScheduler-2.d.ts → addJobScheduler-10.d.ts} +0 -0
@@ -0,0 +1,130 @@
|
|
1
|
+
--[[
|
2
|
+
Adds a job scheduler, i.e. a job factory that creates jobs based on a given schedule (repeat options).
|
3
|
+
|
4
|
+
Input:
|
5
|
+
KEYS[1] 'repeat' key
|
6
|
+
KEYS[2] 'delayed' key
|
7
|
+
KEYS[3] 'wait' key
|
8
|
+
KEYS[4] 'paused' key
|
9
|
+
KEYS[5] 'meta' key
|
10
|
+
KEYS[6] 'prioritized' key
|
11
|
+
KEYS[7] 'marker' key
|
12
|
+
KEYS[8] 'id' key
|
13
|
+
KEYS[9] 'events' key
|
14
|
+
KEYS[10] 'pc' priority counter
|
15
|
+
|
16
|
+
ARGV[1] next milliseconds
|
17
|
+
ARGV[2] msgpacked options
|
18
|
+
[1] name
|
19
|
+
[2] tz?
|
20
|
+
[3] patten?
|
21
|
+
[4] endDate?
|
22
|
+
[5] every?
|
23
|
+
ARGV[3] jobs scheduler id
|
24
|
+
ARGV[4] Json stringified template data
|
25
|
+
ARGV[5] mspacked template opts
|
26
|
+
ARGV[6] msgpacked delayed opts
|
27
|
+
ARGV[7] timestamp
|
28
|
+
ARGV[8] prefix key
|
29
|
+
ARGV[9] producer key
|
30
|
+
|
31
|
+
Output:
|
32
|
+
repeatableKey - OK
|
33
|
+
]]
|
34
|
+
local rcall = redis.call
|
35
|
+
local repeatKey = KEYS[1]
|
36
|
+
local delayedKey = KEYS[2]
|
37
|
+
local prioritizedKey = KEYS[6]
|
38
|
+
|
39
|
+
local nextMillis = ARGV[1]
|
40
|
+
local jobSchedulerId = ARGV[3]
|
41
|
+
local templateOpts = cmsgpack.unpack(ARGV[5])
|
42
|
+
local prefixKey = ARGV[8]
|
43
|
+
|
44
|
+
-- Includes
|
45
|
+
--- @include "includes/addDelayedJob"
|
46
|
+
--- @include "includes/addJobWithPriority"
|
47
|
+
--- @include "includes/getOrSetMaxEvents"
|
48
|
+
--- @include "includes/getTargetQueueList"
|
49
|
+
--- @include "includes/isQueuePaused"
|
50
|
+
--- @include "includes/removeJob"
|
51
|
+
--- @include "includes/storeJob"
|
52
|
+
--- @include "includes/storeJobScheduler"
|
53
|
+
|
54
|
+
-- If we are overriding a repeatable job we must delete the delayed job for
|
55
|
+
-- the next iteration.
|
56
|
+
local schedulerKey = repeatKey .. ":" .. jobSchedulerId
|
57
|
+
local nextDelayedJobKey = schedulerKey .. ":" .. nextMillis
|
58
|
+
local nextDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. nextMillis
|
59
|
+
local prevMillis = rcall("ZSCORE", repeatKey, jobSchedulerId)
|
60
|
+
|
61
|
+
if prevMillis ~= false then
|
62
|
+
local currentJobId = "repeat:" .. jobSchedulerId .. ":" .. prevMillis
|
63
|
+
|
64
|
+
if rcall("EXISTS", nextDelayedJobKey) ~= 1 or currentJobId == nextDelayedJobId then
|
65
|
+
if rcall("ZSCORE", delayedKey, currentJobId) ~= false then
|
66
|
+
removeJob(currentJobId, true, prefixKey, true --[[remove debounce key]] )
|
67
|
+
rcall("ZREM", delayedKey, currentJobId)
|
68
|
+
elseif rcall("ZSCORE", prioritizedKey, currentJobId) ~= false then
|
69
|
+
removeJob(currentJobId, true, prefixKey, true --[[remove debounce key]] )
|
70
|
+
rcall("ZREM", prioritizedKey, currentJobId)
|
71
|
+
else
|
72
|
+
if isQueuePaused(KEYS[5]) then
|
73
|
+
if rcall("LREM", KEYS[4], 1, currentJobId) > 0 then
|
74
|
+
removeJob(currentJobId, true, prefixKey, true --[[remove debounce key]] )
|
75
|
+
end
|
76
|
+
else
|
77
|
+
if rcall("LREM", KEYS[3], 1, currentJobId) > 0 then
|
78
|
+
removeJob(currentJobId, true, prefixKey, true --[[remove debounce key]] )
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
local schedulerOpts = cmsgpack.unpack(ARGV[2])
|
86
|
+
storeJobScheduler(jobSchedulerId, schedulerKey, repeatKey, nextMillis, schedulerOpts, ARGV[4], templateOpts)
|
87
|
+
|
88
|
+
if rcall("EXISTS", nextDelayedJobKey) ~= 1 then
|
89
|
+
local eventsKey = KEYS[9]
|
90
|
+
local metaKey = KEYS[5]
|
91
|
+
local maxEvents = getOrSetMaxEvents(metaKey)
|
92
|
+
|
93
|
+
rcall("INCR", KEYS[8])
|
94
|
+
|
95
|
+
local delayedOpts = cmsgpack.unpack(ARGV[6])
|
96
|
+
|
97
|
+
local delay, priority = storeJob(eventsKey, nextDelayedJobKey, nextDelayedJobId, schedulerOpts['name'], ARGV[4],
|
98
|
+
delayedOpts, ARGV[7], nil, nil, jobSchedulerId)
|
99
|
+
|
100
|
+
if delay ~= 0 then
|
101
|
+
addDelayedJob(nextDelayedJobId, delayedKey, eventsKey,
|
102
|
+
ARGV[7], maxEvents, KEYS[7], delay)
|
103
|
+
else
|
104
|
+
local isPaused = isQueuePaused(KEYS[5])
|
105
|
+
|
106
|
+
-- Standard or priority add
|
107
|
+
if priority == 0 then
|
108
|
+
if isPaused then
|
109
|
+
-- LIFO or FIFO
|
110
|
+
local pushCmd = delayedOpts['lifo'] and 'RPUSH' or 'LPUSH'
|
111
|
+
rcall(pushCmd, KEYS[4], nextDelayedJobId)
|
112
|
+
else
|
113
|
+
-- LIFO or FIFO
|
114
|
+
local pushCmd = delayedOpts['lifo'] and 'RPUSH' or 'LPUSH'
|
115
|
+
rcall(pushCmd, KEYS[3], nextDelayedJobId)
|
116
|
+
end
|
117
|
+
else
|
118
|
+
-- Priority add
|
119
|
+
addJobWithPriority(KEYS[7], KEYS[6], priority, nextDelayedJobId, KEYS[10], isPaused)
|
120
|
+
end
|
121
|
+
-- Emit waiting event
|
122
|
+
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "waiting", "jobId", nextDelayedJobId)
|
123
|
+
end
|
124
|
+
|
125
|
+
if ARGV[9] ~= "" then
|
126
|
+
rcall("HSET", ARGV[9], "nrjid", nextDelayedJobId)
|
127
|
+
end
|
128
|
+
|
129
|
+
return nextDelayedJobId .. "" -- convert to string
|
130
|
+
end
|
@@ -8,13 +8,9 @@
|
|
8
8
|
-- Includes
|
9
9
|
--- @include "addDelayMarkerIfNeeded"
|
10
10
|
--- @include "getDelayedScore"
|
11
|
-
--- @include "storeJob"
|
12
11
|
|
13
|
-
local function addDelayedJob(
|
14
|
-
maxEvents, markerKey,
|
15
|
-
-- Store the job.
|
16
|
-
local delay, priority = storeJob(eventsKey, jobIdKey, jobId, name, data,
|
17
|
-
opts, timestamp, parentKey, parentData, repeatJobKey)
|
12
|
+
local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
|
13
|
+
maxEvents, markerKey, delay)
|
18
14
|
|
19
15
|
local score, delayedTimestamp = getDelayedScore(delayedKey, timestamp, tonumber(delay))
|
20
16
|
|
@@ -25,4 +21,3 @@ local function addDelayedJob(jobIdKey, jobId, delayedKey, eventsKey, name, data,
|
|
25
21
|
-- mark that a delayed job is available
|
26
22
|
addDelayMarkerIfNeeded(markerKey, delayedKey)
|
27
23
|
end
|
28
|
-
|
@@ -2,10 +2,10 @@
|
|
2
2
|
Function to get max events value or set by default 10000.
|
3
3
|
]]
|
4
4
|
local function getOrSetMaxEvents(metaKey)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
6
|
+
if not maxEvents then
|
7
|
+
maxEvents = 10000
|
8
|
+
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
9
|
+
end
|
10
|
+
return maxEvents
|
11
11
|
end
|
@@ -7,8 +7,11 @@
|
|
7
7
|
--- @include "removeDeduplicationKeyIfNeeded"
|
8
8
|
--- @include "removeJobsOnFail"
|
9
9
|
|
10
|
-
local function moveParentFromWaitingChildrenToFailed(
|
11
|
-
|
10
|
+
local function moveParentFromWaitingChildrenToFailed(parentQueueKey, parentKey, parentId, jobIdKey, timestamp)
|
11
|
+
local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
|
12
|
+
local parentDelayedKey = parentQueueKey .. ":delayed"
|
13
|
+
if rcall("ZSCORE", parentWaitingChildrenKey, parentId) ~= false then
|
14
|
+
rcall("ZREM", parentWaitingChildrenKey, parentId)
|
12
15
|
local parentQueuePrefix = parentQueueKey .. ":"
|
13
16
|
local parentFailedKey = parentQueueKey .. ":failed"
|
14
17
|
rcall("ZADD", parentFailedKey, timestamp, parentId)
|
@@ -48,6 +51,48 @@ local function moveParentFromWaitingChildrenToFailed( parentQueueKey, parentKey,
|
|
48
51
|
local parentRawOpts = jobAttributes[3]
|
49
52
|
local parentOpts = cjson.decode(parentRawOpts)
|
50
53
|
|
54
|
+
removeJobsOnFail(parentQueuePrefix, parentFailedKey, parentId, parentOpts, timestamp)
|
55
|
+
elseif rcall("ZSCORE", parentDelayedKey, parentId) ~= false then
|
56
|
+
rcall("ZREM", parentDelayedKey, parentId)
|
57
|
+
local parentQueuePrefix = parentQueueKey .. ":"
|
58
|
+
local parentFailedKey = parentQueueKey .. ":failed"
|
59
|
+
rcall("ZADD", parentFailedKey, timestamp, parentId)
|
60
|
+
local failedReason = "child " .. jobIdKey .. " failed"
|
61
|
+
rcall("HMSET", parentKey, "failedReason", failedReason, "finishedOn", timestamp)
|
62
|
+
rcall("XADD", parentQueueKey .. ":events", "*", "event", "failed", "jobId", parentId, "failedReason",
|
63
|
+
failedReason, "prev", "delayed")
|
64
|
+
|
65
|
+
local jobAttributes = rcall("HMGET", parentKey, "parent", "deid", "opts")
|
66
|
+
|
67
|
+
removeDeduplicationKeyIfNeeded(parentQueueKey .. ":", jobAttributes[2])
|
68
|
+
|
69
|
+
if jobAttributes[1] then
|
70
|
+
local parentData = cjson.decode(jobAttributes[1])
|
71
|
+
if parentData['fpof'] then
|
72
|
+
moveParentFromWaitingChildrenToFailed(
|
73
|
+
parentData['queueKey'],
|
74
|
+
parentData['queueKey'] .. ':' .. parentData['id'],
|
75
|
+
parentData['id'],
|
76
|
+
parentKey,
|
77
|
+
timestamp
|
78
|
+
)
|
79
|
+
elseif parentData['idof'] or parentData['rdof'] then
|
80
|
+
local grandParentKey = parentData['queueKey'] .. ':' .. parentData['id']
|
81
|
+
local grandParentDependenciesSet = grandParentKey .. ":dependencies"
|
82
|
+
if rcall("SREM", grandParentDependenciesSet, parentKey) == 1 then
|
83
|
+
moveParentToWaitIfNeeded(parentData['queueKey'], grandParentDependenciesSet,
|
84
|
+
grandParentKey, parentData['id'], timestamp)
|
85
|
+
if parentData['idof'] then
|
86
|
+
local grandParentFailedSet = grandParentKey .. ":failed"
|
87
|
+
rcall("HSET", grandParentFailedSet, parentKey, failedReason)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
local parentRawOpts = jobAttributes[3]
|
94
|
+
local parentOpts = cjson.decode(parentRawOpts)
|
95
|
+
|
51
96
|
removeJobsOnFail(parentQueuePrefix, parentFailedKey, parentId, parentOpts, timestamp)
|
52
97
|
end
|
53
98
|
end
|
@@ -95,7 +95,7 @@ if (#stalling > 0) then
|
|
95
95
|
"failed", "jobId", jobId, 'prev', 'active',
|
96
96
|
'failedReason', failedReason)
|
97
97
|
|
98
|
-
if rawParentData
|
98
|
+
if rawParentData then
|
99
99
|
if opts['fpof'] then
|
100
100
|
local parentData = cjson.decode(rawParentData)
|
101
101
|
moveParentFromWaitingChildrenToFailed(
|
@@ -103,7 +103,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
|
|
103
103
|
local parentKey = jobAttributes[1] or ""
|
104
104
|
local parentId = ""
|
105
105
|
local parentQueueKey = ""
|
106
|
-
if jobAttributes[2]
|
106
|
+
if jobAttributes[2] then
|
107
107
|
local jsonDecodedParent = cjson.decode(jobAttributes[2])
|
108
108
|
parentId = jsonDecodedParent['id']
|
109
109
|
parentQueueKey = jsonDecodedParent['queueKey']
|
@@ -100,41 +100,8 @@ local function getDelayedScore(delayedKey, timestamp, delay)
|
|
100
100
|
end
|
101
101
|
return minScore, delayedTimestamp
|
102
102
|
end
|
103
|
-
|
104
|
-
|
105
|
-
]]
|
106
|
-
local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
|
107
|
-
parentKey, parentData, repeatJobKey)
|
108
|
-
local jsonOpts = cjson.encode(opts)
|
109
|
-
local delay = opts['delay'] or 0
|
110
|
-
local priority = opts['priority'] or 0
|
111
|
-
local debounceId = opts['de'] and opts['de']['id']
|
112
|
-
local optionalValues = {}
|
113
|
-
if parentKey ~= nil then
|
114
|
-
table.insert(optionalValues, "parentKey")
|
115
|
-
table.insert(optionalValues, parentKey)
|
116
|
-
table.insert(optionalValues, "parent")
|
117
|
-
table.insert(optionalValues, parentData)
|
118
|
-
end
|
119
|
-
if repeatJobKey ~= nil then
|
120
|
-
table.insert(optionalValues, "rjk")
|
121
|
-
table.insert(optionalValues, repeatJobKey)
|
122
|
-
end
|
123
|
-
if debounceId then
|
124
|
-
table.insert(optionalValues, "deid")
|
125
|
-
table.insert(optionalValues, debounceId)
|
126
|
-
end
|
127
|
-
rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
|
128
|
-
"timestamp", timestamp, "delay", delay, "priority", priority,
|
129
|
-
unpack(optionalValues))
|
130
|
-
rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
|
131
|
-
return delay, priority
|
132
|
-
end
|
133
|
-
local function addDelayedJob(jobIdKey, jobId, delayedKey, eventsKey, name, data, opts, timestamp, repeatJobKey,
|
134
|
-
maxEvents, markerKey, parentKey, parentData)
|
135
|
-
-- Store the job.
|
136
|
-
local delay, priority = storeJob(eventsKey, jobIdKey, jobId, name, data,
|
137
|
-
opts, timestamp, parentKey, parentData, repeatJobKey)
|
103
|
+
local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
|
104
|
+
maxEvents, markerKey, delay)
|
138
105
|
local score, delayedTimestamp = getDelayedScore(delayedKey, timestamp, tonumber(delay))
|
139
106
|
rcall("ZADD", delayedKey, score, jobId)
|
140
107
|
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "delayed",
|
@@ -169,12 +136,12 @@ end
|
|
169
136
|
Function to get max events value or set by default 10000.
|
170
137
|
]]
|
171
138
|
local function getOrSetMaxEvents(metaKey)
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
139
|
+
local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
|
140
|
+
if not maxEvents then
|
141
|
+
maxEvents = 10000
|
142
|
+
rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
|
143
|
+
end
|
144
|
+
return maxEvents
|
178
145
|
end
|
179
146
|
--[[
|
180
147
|
Function to handle the case when job is duplicated.
|
@@ -344,6 +311,36 @@ local function handleDuplicatedJob(jobKey, jobId, currentParentKey, currentParen
|
|
344
311
|
"duplicated", "jobId", jobId)
|
345
312
|
return jobId .. "" -- convert to string
|
346
313
|
end
|
314
|
+
--[[
|
315
|
+
Function to store a job
|
316
|
+
]]
|
317
|
+
local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
|
318
|
+
parentKey, parentData, repeatJobKey)
|
319
|
+
local jsonOpts = cjson.encode(opts)
|
320
|
+
local delay = opts['delay'] or 0
|
321
|
+
local priority = opts['priority'] or 0
|
322
|
+
local debounceId = opts['de'] and opts['de']['id']
|
323
|
+
local optionalValues = {}
|
324
|
+
if parentKey ~= nil then
|
325
|
+
table.insert(optionalValues, "parentKey")
|
326
|
+
table.insert(optionalValues, parentKey)
|
327
|
+
table.insert(optionalValues, "parent")
|
328
|
+
table.insert(optionalValues, parentData)
|
329
|
+
end
|
330
|
+
if repeatJobKey ~= nil then
|
331
|
+
table.insert(optionalValues, "rjk")
|
332
|
+
table.insert(optionalValues, repeatJobKey)
|
333
|
+
end
|
334
|
+
if debounceId then
|
335
|
+
table.insert(optionalValues, "deid")
|
336
|
+
table.insert(optionalValues, debounceId)
|
337
|
+
end
|
338
|
+
rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
|
339
|
+
"timestamp", timestamp, "delay", delay, "priority", priority,
|
340
|
+
unpack(optionalValues))
|
341
|
+
rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
|
342
|
+
return delay, priority
|
343
|
+
end
|
347
344
|
if parentKey ~= nil then
|
348
345
|
if rcall("EXISTS", parentKey) ~= 1 then return -5 end
|
349
346
|
parentData = cjson.encode(parent)
|
@@ -370,8 +367,9 @@ local deduplicationJobId = deduplicateJob(opts['de'], jobId, deduplicationKey,
|
|
370
367
|
if deduplicationJobId then
|
371
368
|
return deduplicationJobId
|
372
369
|
end
|
373
|
-
|
374
|
-
|
370
|
+
local delay, priority = storeJob(eventsKey, jobIdKey, jobId, args[3], ARGV[2],
|
371
|
+
opts, timestamp, parentKey, parentData, repeatJobKey)
|
372
|
+
addDelayedJob(jobId, delayedKey, eventsKey, timestamp, maxEvents, KEYS[1], delay)
|
375
373
|
-- Check if this job is a child of another job, if so add it to the parents dependencies
|
376
374
|
if parentDependenciesKey ~= nil then
|
377
375
|
rcall("SADD", parentDependenciesKey, jobIdKey)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"addDelayedJob-6.js","sourceRoot":"","sources":["../../../src/scripts/addDelayedJob-6.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"addDelayedJob-6.js","sourceRoot":"","sources":["../../../src/scripts/addDelayedJob-6.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyXf,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,eAAe;IACrB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|