Review funkt
This commit is contained in:
114
node_modules/bullmq/dist/esm/commands/updateJobScheduler-12.lua
generated
vendored
Normal file
114
node_modules/bullmq/dist/esm/commands/updateJobScheduler-12.lua
generated
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
--[[
|
||||
Updates a job scheduler and adds next delayed job
|
||||
|
||||
Input:
|
||||
KEYS[1] 'repeat' key
|
||||
KEYS[2] 'delayed'
|
||||
KEYS[3] 'wait' key
|
||||
KEYS[4] 'paused' key
|
||||
KEYS[5] 'meta'
|
||||
KEYS[6] 'prioritized' key
|
||||
KEYS[7] 'marker',
|
||||
KEYS[8] 'id'
|
||||
KEYS[9] events stream key
|
||||
KEYS[10] 'pc' priority counter
|
||||
KEYS[11] producer key
|
||||
KEYS[12] 'active' key
|
||||
|
||||
ARGV[1] next milliseconds
|
||||
ARGV[2] jobs scheduler id
|
||||
ARGV[3] Json stringified delayed data
|
||||
ARGV[4] msgpacked delayed opts
|
||||
ARGV[5] timestamp
|
||||
ARGV[6] prefix key
|
||||
ARGV[7] producer id
|
||||
|
||||
Output:
|
||||
next delayed job id - OK
|
||||
]] local rcall = redis.call
|
||||
local repeatKey = KEYS[1]
|
||||
local delayedKey = KEYS[2]
|
||||
local waitKey = KEYS[3]
|
||||
local pausedKey = KEYS[4]
|
||||
local metaKey = KEYS[5]
|
||||
local prioritizedKey = KEYS[6]
|
||||
local nextMillis = tonumber(ARGV[1])
|
||||
local jobSchedulerId = ARGV[2]
|
||||
local timestamp = tonumber(ARGV[5])
|
||||
local prefixKey = ARGV[6]
|
||||
local producerId = ARGV[7]
|
||||
local jobOpts = cmsgpack.unpack(ARGV[4])
|
||||
|
||||
-- Includes
|
||||
--- @include "includes/addJobFromScheduler"
|
||||
--- @include "includes/getOrSetMaxEvents"
|
||||
--- @include "includes/getJobSchedulerEveryNextMillis"
|
||||
|
||||
local prevMillis = rcall("ZSCORE", repeatKey, jobSchedulerId)
|
||||
|
||||
-- Validate that scheduler exists.
|
||||
-- If it does not exist we should not iterate anymore.
|
||||
if prevMillis then
|
||||
prevMillis = tonumber(prevMillis)
|
||||
|
||||
local schedulerKey = repeatKey .. ":" .. jobSchedulerId
|
||||
local schedulerAttributes = rcall("HMGET", schedulerKey, "name", "data", "every", "startDate", "offset")
|
||||
|
||||
local every = tonumber(schedulerAttributes[3])
|
||||
local now = tonumber(timestamp)
|
||||
|
||||
-- If every is not found in scheduler attributes, try to get it from job options
|
||||
if not every and jobOpts['repeat'] and jobOpts['repeat']['every'] then
|
||||
every = tonumber(jobOpts['repeat']['every'])
|
||||
end
|
||||
|
||||
if every then
|
||||
local startDate = schedulerAttributes[4]
|
||||
local jobOptsOffset = jobOpts['repeat'] and jobOpts['repeat']['offset'] or 0
|
||||
local offset = schedulerAttributes[5] or jobOptsOffset or 0
|
||||
local newOffset
|
||||
|
||||
nextMillis, newOffset = getJobSchedulerEveryNextMillis(prevMillis, every, now, offset, startDate)
|
||||
|
||||
if not offset then
|
||||
rcall("HSET", schedulerKey, "offset", newOffset)
|
||||
jobOpts['repeat']['offset'] = newOffset
|
||||
end
|
||||
end
|
||||
|
||||
local nextDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. nextMillis
|
||||
local nextDelayedJobKey = schedulerKey .. ":" .. nextMillis
|
||||
|
||||
local currentDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. prevMillis
|
||||
|
||||
if producerId == currentDelayedJobId then
|
||||
local eventsKey = KEYS[9]
|
||||
local maxEvents = getOrSetMaxEvents(metaKey)
|
||||
|
||||
if rcall("EXISTS", nextDelayedJobKey) ~= 1 then
|
||||
|
||||
rcall("ZADD", repeatKey, nextMillis, jobSchedulerId)
|
||||
rcall("HINCRBY", schedulerKey, "ic", 1)
|
||||
|
||||
rcall("INCR", KEYS[8])
|
||||
|
||||
local templateData = schedulerAttributes[2]
|
||||
local delay = nextMillis - now
|
||||
|
||||
-- Fast Clamp delay to minimum of 0
|
||||
if delay < 0 then
|
||||
delay = 0
|
||||
end
|
||||
|
||||
jobOpts["delay"] = delay
|
||||
|
||||
addJobFromScheduler(nextDelayedJobKey, nextDelayedJobId, jobOpts, waitKey, pausedKey, KEYS[12], metaKey,
|
||||
prioritizedKey, KEYS[10], delayedKey, KEYS[7], eventsKey, schedulerAttributes[1], maxEvents, ARGV[5],
|
||||
templateData or '{}', jobSchedulerId, delay)
|
||||
|
||||
return nextDelayedJobId .. "" -- convert to string
|
||||
else
|
||||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "duplicated", "jobId", nextDelayedJobId)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user