– NOTE: We store the job as the last argument passed to this script because it – is more efficient to pop in Lua than shift local job = table.remove(ARGV) – Remove job from reliability queue redis.call(“LREM”, KEYS, 0, job) redis.call(“ZREM”, KEYS, job)

– Update context hash with buffer if #ARGV > 0 then

redis.call("HMSET", KEYS[5], unpack(ARGV))

end

– Decrement jobs from the sorted set by applying a jobmask redis.call(“ZUNIONSTORE”, KEYS, 2, KEYS, KEYS) redis.call(“DEL”, KEYS)

– Queue jobs that are ready to be processed (their score is 0) and – remove queued jobs from sorted set local work = redis.call(“ZRANGEBYSCORE”, KEYS, 0, 0) if work > 0 then

redis.call("LPUSH", KEYS[2], unpack(work))
redis.call("ZREM", KEYS[1], unpack(work))

end

– Decrement ETA and remove it together with the context and jobmasks if all – tasks have been processed (ETA is 0) or if workflow has been given up (ETA is -1) local remaining = redis.call(“DECR”, KEYS) if remaining <= 0 then

redis.call("DEL", KEYS[5], KEYS[6], KEYS[8])

end