68 lines
1.5 KiB
Lua
68 lines
1.5 KiB
Lua
--[[
|
|
Function to move job from active state to wait.
|
|
Input:
|
|
KEYS[1] active key
|
|
KEYS[2] wait key
|
|
|
|
KEYS[3] stalled key
|
|
KEYS[4] paused key
|
|
KEYS[5] meta key
|
|
KEYS[6] limiter key
|
|
KEYS[7] prioritized key
|
|
KEYS[8] marker key
|
|
KEYS[9] event key
|
|
|
|
ARGV[1] job id
|
|
ARGV[2] lock token
|
|
ARGV[3] job id key
|
|
]]
|
|
local rcall = redis.call
|
|
|
|
-- Includes
|
|
--- @include "includes/addJobInTargetList"
|
|
--- @include "includes/pushBackJobWithPriority"
|
|
--- @include "includes/getOrSetMaxEvents"
|
|
--- @include "includes/getTargetQueueList"
|
|
--- @include "includes/removeLock"
|
|
|
|
local jobId = ARGV[1]
|
|
local token = ARGV[2]
|
|
local jobKey = ARGV[3]
|
|
|
|
if rcall("EXISTS", jobKey) == 0 then
|
|
return -1
|
|
end
|
|
|
|
local errorCode = removeLock(jobKey, KEYS[3], token, jobId)
|
|
if errorCode < 0 then
|
|
return errorCode
|
|
end
|
|
|
|
local metaKey = KEYS[5]
|
|
local removed = rcall("LREM", KEYS[1], 1, jobId)
|
|
if removed > 0 then
|
|
local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[1], KEYS[2], KEYS[4])
|
|
|
|
local priority = tonumber(rcall("HGET", ARGV[3], "priority")) or 0
|
|
|
|
if priority > 0 then
|
|
pushBackJobWithPriority(KEYS[7], priority, jobId)
|
|
else
|
|
addJobInTargetList(target, KEYS[8], "RPUSH", isPausedOrMaxed, jobId)
|
|
end
|
|
|
|
local maxEvents = getOrSetMaxEvents(metaKey)
|
|
|
|
-- Emit waiting event
|
|
rcall("XADD", KEYS[9], "MAXLEN", "~", maxEvents, "*", "event", "waiting",
|
|
"jobId", jobId, "prev", "active")
|
|
end
|
|
|
|
local pttl = rcall("PTTL", KEYS[6])
|
|
|
|
if pttl > 0 then
|
|
return pttl
|
|
else
|
|
return 0
|
|
end
|