59 lines
1.8 KiB
Lua
59 lines
1.8 KiB
Lua
--[[
|
|
Function to clean job set.
|
|
Returns jobIds and deleted count number.
|
|
]]
|
|
|
|
-- Includes
|
|
--- @include "batches"
|
|
--- @include "getJobsInZset"
|
|
--- @include "getTimestamp"
|
|
--- @include "isJobSchedulerJob"
|
|
--- @include "removeJob"
|
|
|
|
local function cleanSet(
|
|
setKey,
|
|
jobKeyPrefix,
|
|
rangeEnd,
|
|
timestamp,
|
|
limit,
|
|
attributes,
|
|
isFinished,
|
|
jobSchedulersKey)
|
|
local jobs = getJobsInZset(setKey, rangeEnd, limit)
|
|
local deleted = {}
|
|
local deletedCount = 0
|
|
local jobTS
|
|
for i, job in ipairs(jobs) do
|
|
if limit > 0 and deletedCount >= limit then
|
|
break
|
|
end
|
|
|
|
local jobKey = jobKeyPrefix .. job
|
|
-- Extract a Job Scheduler Id from jobId ("repeat:job-scheduler-id:millis")
|
|
-- and check if it is in the scheduled jobs
|
|
if not (jobSchedulersKey and isJobSchedulerJob(job, jobKey, jobSchedulersKey)) then
|
|
if isFinished then
|
|
removeJob(job, true, jobKeyPrefix, true --[[remove debounce key]] )
|
|
deletedCount = deletedCount + 1
|
|
table.insert(deleted, job)
|
|
else
|
|
-- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
|
|
jobTS = getTimestamp(jobKey, attributes)
|
|
if (not jobTS or jobTS <= timestamp) then
|
|
removeJob(job, true, jobKeyPrefix, true --[[remove debounce key]] )
|
|
deletedCount = deletedCount + 1
|
|
table.insert(deleted, job)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if (#deleted > 0) then
|
|
for from, to in batches(#deleted, 7000) do
|
|
rcall("ZREM", setKey, unpack(deleted, from, to))
|
|
end
|
|
end
|
|
|
|
return {deleted, deletedCount}
|
|
end
|