const content = `--[[ Moves job from active to waiting children set. Input: KEYS[1] active key KEYS[2] wait-children key KEYS[3] job key KEYS[4] job dependencies key KEYS[5] job unsuccessful key KEYS[6] stalled key KEYS[7] events key ARGV[1] token ARGV[2] child key ARGV[3] timestamp ARGV[4] jobId ARGV[5] prefix Output: 0 - OK 1 - There are not pending dependencies. -1 - Missing job. -2 - Missing lock -3 - Job not in active set -9 - Job has failed children ]] local rcall = redis.call local activeKey = KEYS[1] local waitingChildrenKey = KEYS[2] local jobKey = KEYS[3] local jobDependenciesKey = KEYS[4] local jobUnsuccessfulKey = KEYS[5] local stalledKey = KEYS[6] local eventStreamKey = KEYS[7] local token = ARGV[1] local timestamp = ARGV[3] local jobId = ARGV[4] --- Includes local function removeLock(jobKey, stalledKey, token, jobId) if token ~= "0" then local lockKey = jobKey .. ':lock' local lockToken = rcall("GET", lockKey) if lockToken == token then rcall("DEL", lockKey) rcall("SREM", stalledKey, jobId) else if lockToken then -- Lock exists but token does not match return -6 else -- Lock is missing completely return -2 end end end return 0 end local function removeJobFromActive(activeKey, stalledKey, jobKey, jobId, token) local errorCode = removeLock(jobKey, stalledKey, token, jobId) if errorCode < 0 then return errorCode end local numRemovedElements = rcall("LREM", activeKey, -1, jobId) if numRemovedElements < 1 then return -3 end return 0 end local function moveToWaitingChildren(activeKey, waitingChildrenKey, stalledKey, eventStreamKey, jobKey, jobId, timestamp, token) local errorCode = removeJobFromActive(activeKey, stalledKey, jobKey, jobId, token) if errorCode < 0 then return errorCode end local score = tonumber(timestamp) rcall("ZADD", waitingChildrenKey, score, jobId) rcall("XADD", eventStreamKey, "*", "event", "waiting-children", "jobId", jobId, 'prev', 'active') return 0 end if rcall("EXISTS", jobKey) == 1 then if rcall("ZCARD", jobUnsuccessfulKey) ~= 0 then return -9 else if ARGV[2] ~= "" then if rcall("SISMEMBER", jobDependenciesKey, ARGV[2]) ~= 0 then return moveToWaitingChildren(activeKey, waitingChildrenKey, stalledKey, eventStreamKey, jobKey, jobId, timestamp, token) end return 1 else if rcall("SCARD", jobDependenciesKey) ~= 0 then return moveToWaitingChildren(activeKey, waitingChildrenKey, stalledKey, eventStreamKey, jobKey, jobId, timestamp, token) end return 1 end end end return -1 `; export const moveToWaitingChildren = { name: 'moveToWaitingChildren', content, keys: 7, }; //# sourceMappingURL=moveToWaitingChildren-7.js.map