| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- --[[
- Function to deduplicate a job.
- ]]
- --- @include "setDeduplicationKey"
- --- @include "storeDeduplicatedNextJob"
- local function deduplicateJobWithoutReplace(deduplicationId, deduplicationOpts, jobId, deduplicationKey,
- eventsKey, maxEvents, prefix, jobName, jobData, fullOpts,
- parentKey, parentData, parentDependenciesKey, repeatJobKey)
- local ttl = deduplicationOpts['ttl']
- local deduplicationKeyExists
- if ttl and ttl > 0 then
- if deduplicationOpts['extend'] then
- local currentDebounceJobId = rcall('GET', deduplicationKey)
- if currentDebounceJobId then
- if storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
- deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
- parentKey, parentData, parentDependenciesKey, repeatJobKey) then
- return currentDebounceJobId
- end
- if deduplicationOpts['keepLastIfActive'] then
- rcall('SET', deduplicationKey, currentDebounceJobId)
- else
- setDeduplicationKey(deduplicationKey, currentDebounceJobId, deduplicationOpts)
- end
- 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
- if deduplicationOpts['keepLastIfActive'] then
- rcall('SET', deduplicationKey, jobId)
- else
- setDeduplicationKey(deduplicationKey, jobId, deduplicationOpts)
- end
- return
- end
- else
- if deduplicationOpts['keepLastIfActive'] then
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
- else
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
- end
- end
- else
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
- end
- if deduplicationKeyExists then
- local currentDebounceJobId = rcall('GET', deduplicationKey)
- if storeDeduplicatedNextJob(deduplicationOpts, currentDebounceJobId, prefix,
- deduplicationId, jobName, jobData, fullOpts, eventsKey, maxEvents, jobId,
- parentKey, parentData, parentDependenciesKey, repeatJobKey) then
- return currentDebounceJobId
- end
- -- 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
|