| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- --[[
- Drains the queue, removes all jobs that are waiting
- or delayed, but not active, completed or failed
- Input:
- KEYS[1] 'wait',
- KEYS[2] 'paused'
- KEYS[3] 'delayed'
- KEYS[4] 'prioritized'
- KEYS[5] 'jobschedulers' (repeat)
- ARGV[1] queue key prefix
- ARGV[2] should clean delayed jobs
- ]]
- local rcall = redis.call
- local queueBaseKey = ARGV[1]
- --- @include "includes/removeListJobs"
- --- @include "includes/removeZSetJobs"
- -- We must not remove delayed jobs if they are associated to a job scheduler.
- local scheduledJobs = {}
- local jobSchedulers = rcall("ZRANGE", KEYS[5], 0, -1, "WITHSCORES")
- -- For every job scheduler, get the current delayed job id.
- for i = 1, #jobSchedulers, 2 do
- local jobSchedulerId = jobSchedulers[i]
- local jobSchedulerMillis = jobSchedulers[i + 1]
- local delayedJobId = "repeat:" .. jobSchedulerId .. ":" .. jobSchedulerMillis
- scheduledJobs[delayedJobId] = true
- end
- removeListJobs(KEYS[1], true, queueBaseKey, 0, scheduledJobs) -- wait
- removeListJobs(KEYS[2], true, queueBaseKey, 0, scheduledJobs) -- paused
- if ARGV[2] == "1" then
- removeZSetJobs(KEYS[3], true, queueBaseKey, 0, scheduledJobs) -- delayed
- end
- removeZSetJobs(KEYS[4], true, queueBaseKey, 0, scheduledJobs) -- prioritized
|