bullmq 5.41.5 → 5.41.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/cjs/classes/job-scheduler.js +40 -15
  2. package/dist/cjs/classes/job-scheduler.js.map +1 -1
  3. package/dist/cjs/classes/job.js +9 -12
  4. package/dist/cjs/classes/job.js.map +1 -1
  5. package/dist/cjs/classes/scripts.js +11 -1
  6. package/dist/cjs/classes/scripts.js.map +1 -1
  7. package/dist/cjs/commands/addDelayedJob-6.lua +5 -2
  8. package/dist/cjs/commands/addJobScheduler-10.lua +130 -0
  9. package/dist/cjs/commands/cleanJobsInSet-3.lua +7 -5
  10. package/dist/cjs/commands/includes/addDelayedJob.lua +2 -7
  11. package/dist/cjs/commands/includes/cleanSet.lua +1 -1
  12. package/dist/cjs/commands/includes/getOrSetMaxEvents.lua +6 -6
  13. package/dist/cjs/commands/includes/moveParentFromWaitingChildrenToFailed.lua +47 -2
  14. package/dist/cjs/commands/moveStalledJobsToWait-9.lua +1 -1
  15. package/dist/cjs/commands/moveToFinished-14.lua +1 -1
  16. package/dist/cjs/scripts/addDelayedJob-6.js +41 -43
  17. package/dist/cjs/scripts/addDelayedJob-6.js.map +1 -1
  18. package/dist/cjs/scripts/{addJobScheduler-6.js → addJobScheduler-10.js} +208 -42
  19. package/dist/cjs/scripts/addJobScheduler-10.js.map +1 -0
  20. package/dist/cjs/scripts/addParentJob-4.js +6 -6
  21. package/dist/cjs/scripts/addPrioritizedJob-8.js +6 -6
  22. package/dist/cjs/scripts/addStandardJob-8.js +6 -6
  23. package/dist/cjs/scripts/changeDelay-4.js +6 -6
  24. package/dist/cjs/scripts/cleanJobsInSet-3.js +8 -6
  25. package/dist/cjs/scripts/cleanJobsInSet-3.js.map +1 -1
  26. package/dist/cjs/scripts/index.js +1 -1
  27. package/dist/cjs/scripts/index.js.map +1 -1
  28. package/dist/cjs/scripts/moveJobFromActiveToWait-9.js +6 -6
  29. package/dist/cjs/scripts/moveJobsToWait-8.js +6 -6
  30. package/dist/cjs/scripts/moveStalledJobsToWait-9.js +49 -9
  31. package/dist/cjs/scripts/moveStalledJobsToWait-9.js.map +1 -1
  32. package/dist/cjs/scripts/moveToDelayed-8.js +6 -6
  33. package/dist/cjs/scripts/moveToFinished-14.js +49 -9
  34. package/dist/cjs/scripts/moveToFinished-14.js.map +1 -1
  35. package/dist/cjs/scripts/removeJob-3.js +6 -6
  36. package/dist/cjs/scripts/reprocessJob-8.js +6 -6
  37. package/dist/cjs/scripts/retryJob-11.js +6 -6
  38. package/dist/cjs/scripts/updateJobScheduler-7.js +8 -41
  39. package/dist/cjs/scripts/updateJobScheduler-7.js.map +1 -1
  40. package/dist/cjs/scripts/updateProgress-3.js +6 -6
  41. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  42. package/dist/cjs/version.js +1 -1
  43. package/dist/esm/classes/job-scheduler.d.ts +1 -0
  44. package/dist/esm/classes/job-scheduler.js +40 -15
  45. package/dist/esm/classes/job-scheduler.js.map +1 -1
  46. package/dist/esm/classes/job.js +9 -12
  47. package/dist/esm/classes/job.js.map +1 -1
  48. package/dist/esm/classes/scripts.d.ts +2 -2
  49. package/dist/esm/classes/scripts.js +11 -1
  50. package/dist/esm/classes/scripts.js.map +1 -1
  51. package/dist/esm/commands/addDelayedJob-6.lua +5 -2
  52. package/dist/esm/commands/addJobScheduler-10.lua +130 -0
  53. package/dist/esm/commands/cleanJobsInSet-3.lua +7 -5
  54. package/dist/esm/commands/includes/addDelayedJob.lua +2 -7
  55. package/dist/esm/commands/includes/cleanSet.lua +1 -1
  56. package/dist/esm/commands/includes/getOrSetMaxEvents.lua +6 -6
  57. package/dist/esm/commands/includes/moveParentFromWaitingChildrenToFailed.lua +47 -2
  58. package/dist/esm/commands/moveStalledJobsToWait-9.lua +1 -1
  59. package/dist/esm/commands/moveToFinished-14.lua +1 -1
  60. package/dist/esm/scripts/addDelayedJob-6.js +41 -43
  61. package/dist/esm/scripts/addDelayedJob-6.js.map +1 -1
  62. package/dist/esm/scripts/{addJobScheduler-6.js → addJobScheduler-10.js} +208 -42
  63. package/dist/esm/scripts/addJobScheduler-10.js.map +1 -0
  64. package/dist/esm/scripts/addParentJob-4.js +6 -6
  65. package/dist/esm/scripts/addPrioritizedJob-8.js +6 -6
  66. package/dist/esm/scripts/addStandardJob-8.js +6 -6
  67. package/dist/esm/scripts/changeDelay-4.js +6 -6
  68. package/dist/esm/scripts/cleanJobsInSet-3.js +8 -6
  69. package/dist/esm/scripts/cleanJobsInSet-3.js.map +1 -1
  70. package/dist/esm/scripts/index.d.ts +1 -1
  71. package/dist/esm/scripts/index.js +1 -1
  72. package/dist/esm/scripts/index.js.map +1 -1
  73. package/dist/esm/scripts/moveJobFromActiveToWait-9.js +6 -6
  74. package/dist/esm/scripts/moveJobsToWait-8.js +6 -6
  75. package/dist/esm/scripts/moveStalledJobsToWait-9.js +49 -9
  76. package/dist/esm/scripts/moveStalledJobsToWait-9.js.map +1 -1
  77. package/dist/esm/scripts/moveToDelayed-8.js +6 -6
  78. package/dist/esm/scripts/moveToFinished-14.js +49 -9
  79. package/dist/esm/scripts/moveToFinished-14.js.map +1 -1
  80. package/dist/esm/scripts/removeJob-3.js +6 -6
  81. package/dist/esm/scripts/reprocessJob-8.js +6 -6
  82. package/dist/esm/scripts/retryJob-11.js +6 -6
  83. package/dist/esm/scripts/updateJobScheduler-7.js +8 -41
  84. package/dist/esm/scripts/updateJobScheduler-7.js.map +1 -1
  85. package/dist/esm/scripts/updateProgress-3.js +6 -6
  86. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  87. package/dist/esm/version.d.ts +1 -1
  88. package/dist/esm/version.js +1 -1
  89. package/package.json +1 -1
  90. package/dist/cjs/commands/addJobScheduler-6.lua +0 -72
  91. package/dist/cjs/scripts/addJobScheduler-6.js.map +0 -1
  92. package/dist/esm/commands/addJobScheduler-6.lua +0 -72
  93. package/dist/esm/scripts/addJobScheduler-6.js.map +0 -1
  94. /package/dist/esm/scripts/{addJobScheduler-6.d.ts → addJobScheduler-10.d.ts} +0 -0
@@ -0,0 +1,130 @@
1
+ --[[
2
+ Adds a job scheduler, i.e. a job factory that creates jobs based on a given schedule (repeat options).
3
+
4
+ Input:
5
+ KEYS[1] 'repeat' key
6
+ KEYS[2] 'delayed' key
7
+ KEYS[3] 'wait' key
8
+ KEYS[4] 'paused' key
9
+ KEYS[5] 'meta' key
10
+ KEYS[6] 'prioritized' key
11
+ KEYS[7] 'marker' key
12
+ KEYS[8] 'id' key
13
+ KEYS[9] 'events' key
14
+ KEYS[10] 'pc' priority counter
15
+
16
+ ARGV[1] next milliseconds
17
+ ARGV[2] msgpacked options
18
+ [1] name
19
+ [2] tz?
20
+ [3] patten?
21
+ [4] endDate?
22
+ [5] every?
23
+ ARGV[3] jobs scheduler id
24
+ ARGV[4] Json stringified template data
25
+ ARGV[5] mspacked template opts
26
+ ARGV[6] msgpacked delayed opts
27
+ ARGV[7] timestamp
28
+ ARGV[8] prefix key
29
+ ARGV[9] producer key
30
+
31
+ Output:
32
+ repeatableKey - OK
33
+ ]]
34
+ local rcall = redis.call
35
+ local repeatKey = KEYS[1]
36
+ local delayedKey = KEYS[2]
37
+ local prioritizedKey = KEYS[6]
38
+
39
+ local nextMillis = ARGV[1]
40
+ local jobSchedulerId = ARGV[3]
41
+ local templateOpts = cmsgpack.unpack(ARGV[5])
42
+ local prefixKey = ARGV[8]
43
+
44
+ -- Includes
45
+ --- @include "includes/addDelayedJob"
46
+ --- @include "includes/addJobWithPriority"
47
+ --- @include "includes/getOrSetMaxEvents"
48
+ --- @include "includes/getTargetQueueList"
49
+ --- @include "includes/isQueuePaused"
50
+ --- @include "includes/removeJob"
51
+ --- @include "includes/storeJob"
52
+ --- @include "includes/storeJobScheduler"
53
+
54
+ -- If we are overriding a repeatable job we must delete the delayed job for
55
+ -- the next iteration.
56
+ local schedulerKey = repeatKey .. ":" .. jobSchedulerId
57
+ local nextDelayedJobKey = schedulerKey .. ":" .. nextMillis
58
+ local nextDelayedJobId = "repeat:" .. jobSchedulerId .. ":" .. nextMillis
59
+ local prevMillis = rcall("ZSCORE", repeatKey, jobSchedulerId)
60
+
61
+ if prevMillis ~= false then
62
+ local currentJobId = "repeat:" .. jobSchedulerId .. ":" .. prevMillis
63
+
64
+ if rcall("EXISTS", nextDelayedJobKey) ~= 1 or currentJobId == nextDelayedJobId then
65
+ if rcall("ZSCORE", delayedKey, currentJobId) ~= false then
66
+ removeJob(currentJobId, true, prefixKey, true --[[remove debounce key]] )
67
+ rcall("ZREM", delayedKey, currentJobId)
68
+ elseif rcall("ZSCORE", prioritizedKey, currentJobId) ~= false then
69
+ removeJob(currentJobId, true, prefixKey, true --[[remove debounce key]] )
70
+ rcall("ZREM", prioritizedKey, currentJobId)
71
+ else
72
+ if isQueuePaused(KEYS[5]) then
73
+ if rcall("LREM", KEYS[4], 1, currentJobId) > 0 then
74
+ removeJob(currentJobId, true, prefixKey, true --[[remove debounce key]] )
75
+ end
76
+ else
77
+ if rcall("LREM", KEYS[3], 1, currentJobId) > 0 then
78
+ removeJob(currentJobId, true, prefixKey, true --[[remove debounce key]] )
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ local schedulerOpts = cmsgpack.unpack(ARGV[2])
86
+ storeJobScheduler(jobSchedulerId, schedulerKey, repeatKey, nextMillis, schedulerOpts, ARGV[4], templateOpts)
87
+
88
+ if rcall("EXISTS", nextDelayedJobKey) ~= 1 then
89
+ local eventsKey = KEYS[9]
90
+ local metaKey = KEYS[5]
91
+ local maxEvents = getOrSetMaxEvents(metaKey)
92
+
93
+ rcall("INCR", KEYS[8])
94
+
95
+ local delayedOpts = cmsgpack.unpack(ARGV[6])
96
+
97
+ local delay, priority = storeJob(eventsKey, nextDelayedJobKey, nextDelayedJobId, schedulerOpts['name'], ARGV[4],
98
+ delayedOpts, ARGV[7], nil, nil, jobSchedulerId)
99
+
100
+ if delay ~= 0 then
101
+ addDelayedJob(nextDelayedJobId, delayedKey, eventsKey,
102
+ ARGV[7], maxEvents, KEYS[7], delay)
103
+ else
104
+ local isPaused = isQueuePaused(KEYS[5])
105
+
106
+ -- Standard or priority add
107
+ if priority == 0 then
108
+ if isPaused then
109
+ -- LIFO or FIFO
110
+ local pushCmd = delayedOpts['lifo'] and 'RPUSH' or 'LPUSH'
111
+ rcall(pushCmd, KEYS[4], nextDelayedJobId)
112
+ else
113
+ -- LIFO or FIFO
114
+ local pushCmd = delayedOpts['lifo'] and 'RPUSH' or 'LPUSH'
115
+ rcall(pushCmd, KEYS[3], nextDelayedJobId)
116
+ end
117
+ else
118
+ -- Priority add
119
+ addJobWithPriority(KEYS[7], KEYS[6], priority, nextDelayedJobId, KEYS[10], isPaused)
120
+ end
121
+ -- Emit waiting event
122
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "waiting", "jobId", nextDelayedJobId)
123
+ end
124
+
125
+ if ARGV[9] ~= "" then
126
+ rcall("HSET", ARGV[9], "nrjid", nextDelayedJobId)
127
+ end
128
+
129
+ return nextDelayedJobId .. "" -- convert to string
130
+ end
@@ -4,7 +4,7 @@
4
4
  Input:
5
5
  KEYS[1] set key,
6
6
  KEYS[2] events stream key
7
- KEYS[3] job schedulers key
7
+ KEYS[3] repeat key
8
8
 
9
9
  ARGV[1] jobKey prefix
10
10
  ARGV[2] timestamp
@@ -12,6 +12,7 @@
12
12
  ARGV[4] set name, can be any of 'wait', 'active', 'paused', 'delayed', 'completed', or 'failed'
13
13
  ]]
14
14
  local rcall = redis.call
15
+ local repeatKey = KEYS[3]
15
16
  local rangeStart = 0
16
17
  local rangeEnd = -1
17
18
 
@@ -34,20 +35,21 @@ end
34
35
  local result
35
36
  if ARGV[4] == "active" then
36
37
  result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false --[[ hasFinished ]],
37
- KEYS[3])
38
+ repeatKey)
38
39
  elseif ARGV[4] == "delayed" then
39
40
  rangeEnd = "+inf"
40
41
  result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
41
- {"processedOn", "timestamp"}, false --[[ hasFinished ]], KEYS[3])
42
+ {"processedOn", "timestamp"}, false --[[ hasFinished ]], repeatKey)
42
43
  elseif ARGV[4] == "prioritized" then
43
44
  rangeEnd = "+inf"
44
45
  result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
45
- {"timestamp"}, false --[[ hasFinished ]])
46
+ {"timestamp"}, false --[[ hasFinished ]], repeatKey)
46
47
  elseif ARGV[4] == "wait" or ARGV[4] == "paused" then
47
48
  result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true --[[ hasFinished ]],
48
- KEYS[3])
49
+ repeatKey)
49
50
  else
50
51
  rangeEnd = ARGV[2]
52
+ -- No need to pass repeat key as in that moment job won't be related to a job scheduler
51
53
  result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
52
54
  {"finishedOn"}, true --[[ hasFinished ]])
53
55
  end
@@ -8,13 +8,9 @@
8
8
  -- Includes
9
9
  --- @include "addDelayMarkerIfNeeded"
10
10
  --- @include "getDelayedScore"
11
- --- @include "storeJob"
12
11
 
13
- local function addDelayedJob(jobIdKey, jobId, delayedKey, eventsKey, name, data, opts, timestamp, repeatJobKey,
14
- maxEvents, markerKey, parentKey, parentData)
15
- -- Store the job.
16
- local delay, priority = storeJob(eventsKey, jobIdKey, jobId, name, data,
17
- opts, timestamp, parentKey, parentData, repeatJobKey)
12
+ local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
13
+ maxEvents, markerKey, delay)
18
14
 
19
15
  local score, delayedTimestamp = getDelayedScore(delayedKey, timestamp, tonumber(delay))
20
16
 
@@ -25,4 +21,3 @@ local function addDelayedJob(jobIdKey, jobId, delayedKey, eventsKey, name, data,
25
21
  -- mark that a delayed job is available
26
22
  addDelayMarkerIfNeeded(markerKey, delayedKey)
27
23
  end
28
-
@@ -31,7 +31,7 @@ local function cleanSet(
31
31
  local jobKey = jobKeyPrefix .. job
32
32
  -- Extract a Job Scheduler Id from jobId ("repeat:job-scheduler-id:millis")
33
33
  -- and check if it is in the scheduled jobs
34
- if not isJobSchedulerJob(job, jobKey, jobSchedulersKey) then
34
+ if not (jobSchedulersKey and isJobSchedulerJob(job, jobKey, jobSchedulersKey)) then
35
35
  if isFinished then
36
36
  removeJob(job, true, jobKeyPrefix, true --[[remove debounce key]] )
37
37
  deletedCount = deletedCount + 1
@@ -2,10 +2,10 @@
2
2
  Function to get max events value or set by default 10000.
3
3
  ]]
4
4
  local function getOrSetMaxEvents(metaKey)
5
- local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
6
- if not maxEvents then
7
- maxEvents = 10000
8
- rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
9
- end
10
- return maxEvents
5
+ local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
6
+ if not maxEvents then
7
+ maxEvents = 10000
8
+ rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
9
+ end
10
+ return maxEvents
11
11
  end
@@ -7,8 +7,11 @@
7
7
  --- @include "removeDeduplicationKeyIfNeeded"
8
8
  --- @include "removeJobsOnFail"
9
9
 
10
- local function moveParentFromWaitingChildrenToFailed( parentQueueKey, parentKey, parentId, jobIdKey, timestamp)
11
- if rcall("ZREM", parentQueueKey .. ":waiting-children", parentId) == 1 then
10
+ local function moveParentFromWaitingChildrenToFailed(parentQueueKey, parentKey, parentId, jobIdKey, timestamp)
11
+ local parentWaitingChildrenKey = parentQueueKey .. ":waiting-children"
12
+ local parentDelayedKey = parentQueueKey .. ":delayed"
13
+ if rcall("ZSCORE", parentWaitingChildrenKey, parentId) ~= false then
14
+ rcall("ZREM", parentWaitingChildrenKey, parentId)
12
15
  local parentQueuePrefix = parentQueueKey .. ":"
13
16
  local parentFailedKey = parentQueueKey .. ":failed"
14
17
  rcall("ZADD", parentFailedKey, timestamp, parentId)
@@ -48,6 +51,48 @@ local function moveParentFromWaitingChildrenToFailed( parentQueueKey, parentKey,
48
51
  local parentRawOpts = jobAttributes[3]
49
52
  local parentOpts = cjson.decode(parentRawOpts)
50
53
 
54
+ removeJobsOnFail(parentQueuePrefix, parentFailedKey, parentId, parentOpts, timestamp)
55
+ elseif rcall("ZSCORE", parentDelayedKey, parentId) ~= false then
56
+ rcall("ZREM", parentDelayedKey, parentId)
57
+ local parentQueuePrefix = parentQueueKey .. ":"
58
+ local parentFailedKey = parentQueueKey .. ":failed"
59
+ rcall("ZADD", parentFailedKey, timestamp, parentId)
60
+ local failedReason = "child " .. jobIdKey .. " failed"
61
+ rcall("HMSET", parentKey, "failedReason", failedReason, "finishedOn", timestamp)
62
+ rcall("XADD", parentQueueKey .. ":events", "*", "event", "failed", "jobId", parentId, "failedReason",
63
+ failedReason, "prev", "delayed")
64
+
65
+ local jobAttributes = rcall("HMGET", parentKey, "parent", "deid", "opts")
66
+
67
+ removeDeduplicationKeyIfNeeded(parentQueueKey .. ":", jobAttributes[2])
68
+
69
+ if jobAttributes[1] then
70
+ local parentData = cjson.decode(jobAttributes[1])
71
+ if parentData['fpof'] then
72
+ moveParentFromWaitingChildrenToFailed(
73
+ parentData['queueKey'],
74
+ parentData['queueKey'] .. ':' .. parentData['id'],
75
+ parentData['id'],
76
+ parentKey,
77
+ timestamp
78
+ )
79
+ elseif parentData['idof'] or parentData['rdof'] then
80
+ local grandParentKey = parentData['queueKey'] .. ':' .. parentData['id']
81
+ local grandParentDependenciesSet = grandParentKey .. ":dependencies"
82
+ if rcall("SREM", grandParentDependenciesSet, parentKey) == 1 then
83
+ moveParentToWaitIfNeeded(parentData['queueKey'], grandParentDependenciesSet,
84
+ grandParentKey, parentData['id'], timestamp)
85
+ if parentData['idof'] then
86
+ local grandParentFailedSet = grandParentKey .. ":failed"
87
+ rcall("HSET", grandParentFailedSet, parentKey, failedReason)
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ local parentRawOpts = jobAttributes[3]
94
+ local parentOpts = cjson.decode(parentRawOpts)
95
+
51
96
  removeJobsOnFail(parentQueuePrefix, parentFailedKey, parentId, parentOpts, timestamp)
52
97
  end
53
98
  end
@@ -95,7 +95,7 @@ if (#stalling > 0) then
95
95
  "failed", "jobId", jobId, 'prev', 'active',
96
96
  'failedReason', failedReason)
97
97
 
98
- if rawParentData ~= false then
98
+ if rawParentData then
99
99
  if opts['fpof'] then
100
100
  local parentData = cjson.decode(rawParentData)
101
101
  moveParentFromWaitingChildrenToFailed(
@@ -103,7 +103,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
103
103
  local parentKey = jobAttributes[1] or ""
104
104
  local parentId = ""
105
105
  local parentQueueKey = ""
106
- if jobAttributes[2] ~= false then
106
+ if jobAttributes[2] then
107
107
  local jsonDecodedParent = cjson.decode(jobAttributes[2])
108
108
  parentId = jsonDecodedParent['id']
109
109
  parentQueueKey = jsonDecodedParent['queueKey']
@@ -103,41 +103,8 @@ local function getDelayedScore(delayedKey, timestamp, delay)
103
103
  end
104
104
  return minScore, delayedTimestamp
105
105
  end
106
- --[[
107
- Function to store a job
108
- ]]
109
- local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
110
- parentKey, parentData, repeatJobKey)
111
- local jsonOpts = cjson.encode(opts)
112
- local delay = opts['delay'] or 0
113
- local priority = opts['priority'] or 0
114
- local debounceId = opts['de'] and opts['de']['id']
115
- local optionalValues = {}
116
- if parentKey ~= nil then
117
- table.insert(optionalValues, "parentKey")
118
- table.insert(optionalValues, parentKey)
119
- table.insert(optionalValues, "parent")
120
- table.insert(optionalValues, parentData)
121
- end
122
- if repeatJobKey ~= nil then
123
- table.insert(optionalValues, "rjk")
124
- table.insert(optionalValues, repeatJobKey)
125
- end
126
- if debounceId then
127
- table.insert(optionalValues, "deid")
128
- table.insert(optionalValues, debounceId)
129
- end
130
- rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
131
- "timestamp", timestamp, "delay", delay, "priority", priority,
132
- unpack(optionalValues))
133
- rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
134
- return delay, priority
135
- end
136
- local function addDelayedJob(jobIdKey, jobId, delayedKey, eventsKey, name, data, opts, timestamp, repeatJobKey,
137
- maxEvents, markerKey, parentKey, parentData)
138
- -- Store the job.
139
- local delay, priority = storeJob(eventsKey, jobIdKey, jobId, name, data,
140
- opts, timestamp, parentKey, parentData, repeatJobKey)
106
+ local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
107
+ maxEvents, markerKey, delay)
141
108
  local score, delayedTimestamp = getDelayedScore(delayedKey, timestamp, tonumber(delay))
142
109
  rcall("ZADD", delayedKey, score, jobId)
143
110
  rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "delayed",
@@ -172,12 +139,12 @@ end
172
139
  Function to get max events value or set by default 10000.
173
140
  ]]
174
141
  local function getOrSetMaxEvents(metaKey)
175
- local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
176
- if not maxEvents then
177
- maxEvents = 10000
178
- rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
179
- end
180
- return maxEvents
142
+ local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents")
143
+ if not maxEvents then
144
+ maxEvents = 10000
145
+ rcall("HSET", metaKey, "opts.maxLenEvents", maxEvents)
146
+ end
147
+ return maxEvents
181
148
  end
182
149
  --[[
183
150
  Function to handle the case when job is duplicated.
@@ -347,6 +314,36 @@ local function handleDuplicatedJob(jobKey, jobId, currentParentKey, currentParen
347
314
  "duplicated", "jobId", jobId)
348
315
  return jobId .. "" -- convert to string
349
316
  end
317
+ --[[
318
+ Function to store a job
319
+ ]]
320
+ local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
321
+ parentKey, parentData, repeatJobKey)
322
+ local jsonOpts = cjson.encode(opts)
323
+ local delay = opts['delay'] or 0
324
+ local priority = opts['priority'] or 0
325
+ local debounceId = opts['de'] and opts['de']['id']
326
+ local optionalValues = {}
327
+ if parentKey ~= nil then
328
+ table.insert(optionalValues, "parentKey")
329
+ table.insert(optionalValues, parentKey)
330
+ table.insert(optionalValues, "parent")
331
+ table.insert(optionalValues, parentData)
332
+ end
333
+ if repeatJobKey ~= nil then
334
+ table.insert(optionalValues, "rjk")
335
+ table.insert(optionalValues, repeatJobKey)
336
+ end
337
+ if debounceId then
338
+ table.insert(optionalValues, "deid")
339
+ table.insert(optionalValues, debounceId)
340
+ end
341
+ rcall("HMSET", jobIdKey, "name", name, "data", data, "opts", jsonOpts,
342
+ "timestamp", timestamp, "delay", delay, "priority", priority,
343
+ unpack(optionalValues))
344
+ rcall("XADD", eventsKey, "*", "event", "added", "jobId", jobId, "name", name)
345
+ return delay, priority
346
+ end
350
347
  if parentKey ~= nil then
351
348
  if rcall("EXISTS", parentKey) ~= 1 then return -5 end
352
349
  parentData = cjson.encode(parent)
@@ -373,8 +370,9 @@ local deduplicationJobId = deduplicateJob(opts['de'], jobId, deduplicationKey,
373
370
  if deduplicationJobId then
374
371
  return deduplicationJobId
375
372
  end
376
- addDelayedJob(jobIdKey, jobId, delayedKey, eventsKey, args[3], ARGV[2], opts, timestamp, repeatJobKey,
377
- maxEvents, KEYS[1], parentKey, parentData)
373
+ local delay, priority = storeJob(eventsKey, jobIdKey, jobId, args[3], ARGV[2],
374
+ opts, timestamp, parentKey, parentData, repeatJobKey)
375
+ addDelayedJob(jobId, delayedKey, eventsKey, timestamp, maxEvents, KEYS[1], delay)
378
376
  -- Check if this job is a child of another job, if so add it to the parents dependencies
379
377
  if parentDependenciesKey ~= nil then
380
378
  rcall("SADD", parentDependenciesKey, jobIdKey)
@@ -1 +1 @@
1
- {"version":3,"file":"addDelayedJob-6.js","sourceRoot":"","sources":["../../../src/scripts/addDelayedJob-6.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Xf,CAAC;AACW,QAAA,aAAa,GAAG;IAC3B,IAAI,EAAE,eAAe;IACrB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
1
+ {"version":3,"file":"addDelayedJob-6.js","sourceRoot":"","sources":["../../../src/scripts/addDelayedJob-6.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyXf,CAAC;AACW,QAAA,aAAa,GAAG;IAC3B,IAAI,EAAE,eAAe;IACrB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}