Files
simple-mail-cleaner/backend/node_modules/bullmq/dist/esm/commands/reprocessJob-8.lua
2026-01-22 15:49:12 +01:00

78 lines
2.1 KiB
Lua

--[[
Attempts to reprocess a job
Input:
KEYS[1] job key
KEYS[2] events stream
KEYS[3] job state
KEYS[4] wait key
KEYS[5] meta
KEYS[6] paused key
KEYS[7] active key
KEYS[8] marker key
ARGV[1] job.id
ARGV[2] (job.opts.lifo ? 'R' : 'L') + 'PUSH'
ARGV[3] propVal - failedReason/returnvalue
ARGV[4] prev state - failed/completed
ARGV[5] reset attemptsMade - "1" or "0"
ARGV[6] reset attemptsStarted - "1" or "0"
Output:
1 means the operation was a success
-1 means the job does not exist
-3 means the job was not found in the expected set.
]]
local rcall = redis.call;
-- Includes
--- @include "includes/addJobInTargetList"
--- @include "includes/getOrSetMaxEvents"
--- @include "includes/getTargetQueueList"
local jobKey = KEYS[1]
if rcall("EXISTS", jobKey) == 1 then
local jobId = ARGV[1]
if (rcall("ZREM", KEYS[3], jobId) == 1) then
local attributesToRemove = {}
if ARGV[5] == "1" then
table.insert(attributesToRemove, "atm")
end
if ARGV[6] == "1" then
table.insert(attributesToRemove, "ats")
end
rcall("HDEL", jobKey, "finishedOn", "processedOn", ARGV[3], unpack(attributesToRemove))
local target, isPausedOrMaxed = getTargetQueueList(KEYS[5], KEYS[7], KEYS[4], KEYS[6])
addJobInTargetList(target, KEYS[8], ARGV[2], isPausedOrMaxed, jobId)
local parentKey = rcall("HGET", jobKey, "parentKey")
if parentKey and rcall("EXISTS", parentKey) == 1 then
if ARGV[4] == "failed" then
if rcall("ZREM", parentKey .. ":unsuccessful", jobKey) == 1 or
rcall("ZREM", parentKey .. ":failed", jobKey) == 1 then
rcall("SADD", parentKey .. ":dependencies", jobKey)
end
else
if rcall("HDEL", parentKey .. ":processed", jobKey) == 1 then
rcall("SADD", parentKey .. ":dependencies", jobKey)
end
end
end
local maxEvents = getOrSetMaxEvents(KEYS[5])
-- Emit waiting event
rcall("XADD", KEYS[2], "MAXLEN", "~", maxEvents, "*", "event", "waiting",
"jobId", jobId, "prev", ARGV[4]);
return 1
else
return -3
end
else
return -1
end