| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- --[[
- Remove jobs from the specific set.
- Input:
- KEYS[1] set key,
- KEYS[2] events stream key
- KEYS[3] repeat key
- ARGV[1] jobKey prefix
- ARGV[2] timestamp
- ARGV[3] limit the number of jobs to be removed. 0 is unlimited
- ARGV[4] set name, can be any of 'wait', 'active', 'paused', 'delayed', 'completed', or 'failed'
- ]]
- local rcall = redis.call
- local repeatKey = KEYS[3]
- local rangeStart = 0
- local rangeEnd = -1
- local limit = tonumber(ARGV[3])
- -- If we're only deleting _n_ items, avoid retrieving all items
- -- for faster performance
- --
- -- Start from the tail of the list, since that's where oldest elements
- -- are generally added for FIFO lists
- if limit > 0 then
- rangeStart = -1 - limit + 1
- rangeEnd = -1
- end
- -- Includes
- --- @include "includes/cleanList"
- --- @include "includes/cleanSet"
- local result
- if ARGV[4] == "active" then
- result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false --[[ hasFinished ]],
- repeatKey)
- elseif ARGV[4] == "delayed" then
- rangeEnd = "+inf"
- result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
- {"processedOn", "timestamp"}, false --[[ hasFinished ]], repeatKey)
- elseif ARGV[4] == "prioritized" then
- rangeEnd = "+inf"
- result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
- {"timestamp"}, false --[[ hasFinished ]], repeatKey)
- elseif ARGV[4] == "wait" or ARGV[4] == "paused" then
- result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true --[[ hasFinished ]],
- repeatKey)
- else
- rangeEnd = ARGV[2]
- -- No need to pass repeat key as in that moment job won't be related to a job scheduler
- result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
- {"finishedOn"}, true --[[ hasFinished ]])
- end
- rcall("XADD", KEYS[2], "*", "event", "cleaned", "count", result[2])
- return result[1]
|