lib/sidekiq_unique_jobs/lua/shared/_find_digest_in_queues.lua
local function find_digest_in_queues(digest)
local cursor = "0"
local count = 50
local result = nil
local found = false
repeat
log_debug("searching all queues for a matching digest:", digest)
local pagination = redis.call("SCAN", cursor, "MATCH", "queue:*", "COUNT", count)
local next_cursor = pagination[1]
local queues = pagination[2]
for _, queue in ipairs(queues) do
local per = 50
local total = redis.call("LLEN", queue)
local index = 0
log_debug("searching in:", queue,
"for digest:", digest,
"from:", index,
"to:", total,
"(per: " .. per .. ")",
"cursor:", cursor)
while (index < total) do
local items = redis.call("LRANGE", queue, index, index + per -1)
for _, item in pairs(items) do
if string.find(item, digest) then
log_debug("Found digest:", digest, "in queue:", queue)
result = cjson.decode(item).queue
found = true
break
end
end
index = index + per
end
end
cursor = next_cursor
until found == true or cursor == "0"
return result
end