Projektstart
This commit is contained in:
102
backend/node_modules/bullmq/dist/cjs/commands/includes/deduplicateJob.lua
generated
vendored
Normal file
102
backend/node_modules/bullmq/dist/cjs/commands/includes/deduplicateJob.lua
generated
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
--[[
|
||||
Function to debounce a job.
|
||||
]]
|
||||
-- Includes
|
||||
--- @include "removeJobKeys"
|
||||
|
||||
local function removeDelayedJob(delayedKey, deduplicationKey, eventsKey, maxEvents, currentDeduplicatedJobId,
|
||||
jobId, deduplicationId, prefix)
|
||||
if rcall("ZREM", delayedKey, currentDeduplicatedJobId) > 0 then
|
||||
removeJobKeys(prefix .. currentDeduplicatedJobId)
|
||||
rcall("XADD", eventsKey, "*", "event", "removed", "jobId", currentDeduplicatedJobId,
|
||||
"prev", "delayed")
|
||||
|
||||
-- TODO remove debounced event in next breaking change
|
||||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||||
jobId, "debounceId", deduplicationId)
|
||||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||||
jobId, "deduplicationId", deduplicationId, "deduplicatedJobId", currentDeduplicatedJobId)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
local function deduplicateJob(deduplicationOpts, jobId, delayedKey, deduplicationKey, eventsKey, maxEvents,
|
||||
prefix)
|
||||
local deduplicationId = deduplicationOpts and deduplicationOpts['id']
|
||||
if deduplicationId then
|
||||
local ttl = deduplicationOpts['ttl']
|
||||
if deduplicationOpts['replace'] then
|
||||
if ttl and ttl > 0 then
|
||||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||||
if currentDebounceJobId then
|
||||
local isRemoved = removeDelayedJob(delayedKey, deduplicationKey, eventsKey, maxEvents,
|
||||
currentDebounceJobId, jobId, deduplicationId, prefix)
|
||||
if isRemoved then
|
||||
if deduplicationOpts['extend'] then
|
||||
rcall('SET', deduplicationKey, jobId, 'PX', ttl)
|
||||
else
|
||||
rcall('SET', deduplicationKey, jobId, 'KEEPTTL')
|
||||
end
|
||||
return
|
||||
else
|
||||
return currentDebounceJobId
|
||||
end
|
||||
else
|
||||
rcall('SET', deduplicationKey, jobId, 'PX', ttl)
|
||||
return
|
||||
end
|
||||
else
|
||||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||||
if currentDebounceJobId then
|
||||
local isRemoved = removeDelayedJob(delayedKey, deduplicationKey, eventsKey, maxEvents,
|
||||
currentDebounceJobId, jobId, deduplicationId, prefix)
|
||||
|
||||
if isRemoved then
|
||||
rcall('SET', deduplicationKey, jobId)
|
||||
return
|
||||
else
|
||||
return currentDebounceJobId
|
||||
end
|
||||
else
|
||||
rcall('SET', deduplicationKey, jobId)
|
||||
return
|
||||
end
|
||||
end
|
||||
else
|
||||
local deduplicationKeyExists
|
||||
if ttl and ttl > 0 then
|
||||
if deduplicationOpts['extend'] then
|
||||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||||
if currentDebounceJobId then
|
||||
rcall('SET', deduplicationKey, currentDebounceJobId, 'PX', ttl)
|
||||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced",
|
||||
"jobId", currentDebounceJobId, "debounceId", deduplicationId)
|
||||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||||
return currentDebounceJobId
|
||||
else
|
||||
rcall('SET', deduplicationKey, jobId, 'PX', ttl)
|
||||
return
|
||||
end
|
||||
else
|
||||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
|
||||
end
|
||||
else
|
||||
deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
|
||||
end
|
||||
|
||||
if deduplicationKeyExists then
|
||||
local currentDebounceJobId = rcall('GET', deduplicationKey)
|
||||
-- TODO remove debounced event in next breaking change
|
||||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
|
||||
currentDebounceJobId, "debounceId", deduplicationId)
|
||||
rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
|
||||
currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
|
||||
return currentDebounceJobId
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user