Review funkt
This commit is contained in:
77
node_modules/bullmq/dist/esm/commands/removeOrphanedJobs-1.lua
generated
vendored
Normal file
77
node_modules/bullmq/dist/esm/commands/removeOrphanedJobs-1.lua
generated
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
--[[
|
||||
Removes orphaned job keys that exist in Redis but are not referenced
|
||||
in any queue state set. Checks each candidate atomically.
|
||||
|
||||
Input:
|
||||
KEYS[1] base prefix key including trailing colon (e.g. bull:queueName:)
|
||||
|
||||
ARGV[1] number of state key suffixes
|
||||
ARGV[2 .. 1+N] state key suffixes (e.g. active, wait, completed, ...)
|
||||
ARGV[2+N] number of job sub-key suffixes
|
||||
ARGV[3+N .. 2+N+M] job sub-key suffixes (e.g. logs, dependencies, ...)
|
||||
ARGV[3+N+M .. end] candidate job IDs to check
|
||||
|
||||
Output:
|
||||
number of removed jobs
|
||||
]]
|
||||
local rcall = redis.call
|
||||
local basePrefix = KEYS[1]
|
||||
|
||||
-- Parse state key suffixes and cache their full key names + types.
|
||||
local stateKeyCount = tonumber(ARGV[1])
|
||||
local stateKeys = {}
|
||||
local stateKeyTypes = {}
|
||||
for i = 1, stateKeyCount do
|
||||
local fullKey = basePrefix .. ARGV[1 + i]
|
||||
stateKeys[i] = fullKey
|
||||
stateKeyTypes[i] = rcall('TYPE', fullKey)['ok']
|
||||
end
|
||||
|
||||
-- Parse job sub-key suffixes.
|
||||
local subKeyCountIdx = 2 + stateKeyCount
|
||||
local subKeyCount = tonumber(ARGV[subKeyCountIdx])
|
||||
local subKeySuffixes = {}
|
||||
for i = 1, subKeyCount do
|
||||
subKeySuffixes[i] = ARGV[subKeyCountIdx + i]
|
||||
end
|
||||
|
||||
-- Process candidate job IDs.
|
||||
local candidateStart = subKeyCountIdx + subKeyCount + 1
|
||||
local removedCount = 0
|
||||
|
||||
for c = candidateStart, #ARGV do
|
||||
local jobId = ARGV[c]
|
||||
local found = false
|
||||
|
||||
for i = 1, stateKeyCount do
|
||||
local kt = stateKeyTypes[i]
|
||||
if kt == 'list' then
|
||||
if rcall('LPOS', stateKeys[i], jobId) then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
elseif kt == 'zset' then
|
||||
if rcall('ZSCORE', stateKeys[i], jobId) then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
elseif kt == 'set' then
|
||||
if rcall('SISMEMBER', stateKeys[i], jobId) == 1 then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not found then
|
||||
local jobKey = basePrefix .. jobId
|
||||
local keysToDelete = { jobKey }
|
||||
for _, suffix in ipairs(subKeySuffixes) do
|
||||
keysToDelete[#keysToDelete + 1] = jobKey .. ':' .. suffix
|
||||
end
|
||||
rcall('DEL', unpack(keysToDelete))
|
||||
removedCount = removedCount + 1
|
||||
end
|
||||
end
|
||||
|
||||
return removedCount
|
||||
Reference in New Issue
Block a user