const content = `--[[ 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 `; export const removeOrphanedJobs = { name: 'removeOrphanedJobs', content, keys: 1, }; //# sourceMappingURL=removeOrphanedJobs-1.js.map