bullmq 5.54.3 → 5.56.0

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 (106) hide show
  1. package/dist/cjs/classes/child-processor.js +9 -0
  2. package/dist/cjs/classes/child-processor.js.map +1 -1
  3. package/dist/cjs/classes/errors/index.js +2 -1
  4. package/dist/cjs/classes/errors/index.js.map +1 -1
  5. package/dist/cjs/classes/errors/waiting-error.js +19 -0
  6. package/dist/cjs/classes/errors/waiting-error.js.map +1 -0
  7. package/dist/cjs/classes/job.js.map +1 -1
  8. package/dist/cjs/classes/sandbox.js +4 -1
  9. package/dist/cjs/classes/sandbox.js.map +1 -1
  10. package/dist/cjs/classes/scripts.js +4 -1
  11. package/dist/cjs/classes/scripts.js.map +1 -1
  12. package/dist/cjs/classes/worker.js +2 -0
  13. package/dist/cjs/classes/worker.js.map +1 -1
  14. package/dist/cjs/commands/addDelayedJob-6.lua +2 -2
  15. package/dist/cjs/commands/{addParentJob-4.lua → addParentJob-5.lua} +7 -6
  16. package/dist/cjs/commands/{addPrioritizedJob-8.lua → addPrioritizedJob-9.lua} +11 -10
  17. package/dist/{esm/commands/addStandardJob-8.lua → cjs/commands/addStandardJob-9.lua} +9 -8
  18. package/dist/cjs/commands/includes/collectMetrics.lua +1 -1
  19. package/dist/cjs/commands/includes/deduplicateJob.lua +66 -20
  20. package/dist/cjs/commands/includes/storeJob.lua +1 -1
  21. package/dist/cjs/commands/moveJobFromActiveToWait-9.lua +1 -1
  22. package/dist/cjs/enums/parent-command.js +5 -4
  23. package/dist/cjs/enums/parent-command.js.map +1 -1
  24. package/dist/cjs/interfaces/index.js +0 -1
  25. package/dist/cjs/interfaces/index.js.map +1 -1
  26. package/dist/cjs/scripts/addDelayedJob-6.js +71 -22
  27. package/dist/cjs/scripts/addDelayedJob-6.js.map +1 -1
  28. package/dist/cjs/scripts/{addParentJob-4.js → addParentJob-5.js} +78 -28
  29. package/dist/cjs/scripts/addParentJob-5.js.map +1 -0
  30. package/dist/cjs/scripts/{addPrioritizedJob-8.js → addPrioritizedJob-9.js} +82 -32
  31. package/dist/cjs/scripts/{addPrioritizedJob-8.js.map → addPrioritizedJob-9.js.map} +1 -1
  32. package/dist/cjs/scripts/{addStandardJob-8.js → addStandardJob-9.js} +80 -30
  33. package/dist/cjs/scripts/{addStandardJob-8.js.map → addStandardJob-9.js.map} +1 -1
  34. package/dist/cjs/scripts/index.js +3 -3
  35. package/dist/cjs/scripts/moveJobFromActiveToWait-9.js +1 -1
  36. package/dist/cjs/scripts/moveToFinished-14.js +1 -1
  37. package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
  38. package/dist/cjs/{interfaces/debounce-options.js → types/deduplication-options.js} +1 -1
  39. package/dist/cjs/types/deduplication-options.js.map +1 -0
  40. package/dist/cjs/types/index.js +1 -0
  41. package/dist/cjs/types/index.js.map +1 -1
  42. package/dist/cjs/version.js +1 -1
  43. package/dist/esm/classes/child-processor.js +9 -0
  44. package/dist/esm/classes/child-processor.js.map +1 -1
  45. package/dist/esm/classes/errors/index.d.ts +2 -1
  46. package/dist/esm/classes/errors/index.js +2 -1
  47. package/dist/esm/classes/errors/index.js.map +1 -1
  48. package/dist/esm/classes/errors/waiting-error.d.ts +10 -0
  49. package/dist/esm/classes/errors/waiting-error.js +15 -0
  50. package/dist/esm/classes/errors/waiting-error.js.map +1 -0
  51. package/dist/esm/classes/job.d.ts +1 -1
  52. package/dist/esm/classes/job.js.map +1 -1
  53. package/dist/esm/classes/sandbox.js +4 -1
  54. package/dist/esm/classes/sandbox.js.map +1 -1
  55. package/dist/esm/classes/scripts.d.ts +1 -1
  56. package/dist/esm/classes/scripts.js +4 -1
  57. package/dist/esm/classes/scripts.js.map +1 -1
  58. package/dist/esm/classes/worker.js +3 -1
  59. package/dist/esm/classes/worker.js.map +1 -1
  60. package/dist/esm/commands/addDelayedJob-6.lua +2 -2
  61. package/dist/esm/commands/{addParentJob-4.lua → addParentJob-5.lua} +7 -6
  62. package/dist/esm/commands/{addPrioritizedJob-8.lua → addPrioritizedJob-9.lua} +11 -10
  63. package/dist/{cjs/commands/addStandardJob-8.lua → esm/commands/addStandardJob-9.lua} +9 -8
  64. package/dist/esm/commands/includes/collectMetrics.lua +1 -1
  65. package/dist/esm/commands/includes/deduplicateJob.lua +66 -20
  66. package/dist/esm/commands/includes/storeJob.lua +1 -1
  67. package/dist/esm/commands/moveJobFromActiveToWait-9.lua +1 -1
  68. package/dist/esm/enums/parent-command.d.ts +5 -4
  69. package/dist/esm/enums/parent-command.js +5 -4
  70. package/dist/esm/enums/parent-command.js.map +1 -1
  71. package/dist/esm/interfaces/index.d.ts +0 -1
  72. package/dist/esm/interfaces/index.js +0 -1
  73. package/dist/esm/interfaces/index.js.map +1 -1
  74. package/dist/esm/interfaces/sandboxed-job.d.ts +1 -0
  75. package/dist/esm/scripts/addDelayedJob-6.js +71 -22
  76. package/dist/esm/scripts/addDelayedJob-6.js.map +1 -1
  77. package/dist/esm/scripts/{addParentJob-4.js → addParentJob-5.js} +78 -28
  78. package/dist/esm/scripts/addParentJob-5.js.map +1 -0
  79. package/dist/esm/scripts/{addPrioritizedJob-8.js → addPrioritizedJob-9.js} +82 -32
  80. package/dist/esm/scripts/{addPrioritizedJob-8.js.map → addPrioritizedJob-9.js.map} +1 -1
  81. package/dist/esm/scripts/{addStandardJob-8.js → addStandardJob-9.js} +80 -30
  82. package/dist/esm/scripts/{addStandardJob-8.js.map → addStandardJob-9.js.map} +1 -1
  83. package/dist/esm/scripts/index.d.ts +3 -3
  84. package/dist/esm/scripts/index.js +3 -3
  85. package/dist/esm/scripts/moveJobFromActiveToWait-9.js +1 -1
  86. package/dist/esm/scripts/moveToFinished-14.js +1 -1
  87. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  88. package/dist/esm/types/deduplication-options.d.ts +22 -0
  89. package/dist/esm/types/deduplication-options.js +2 -0
  90. package/dist/esm/types/deduplication-options.js.map +1 -0
  91. package/dist/esm/types/index.d.ts +1 -0
  92. package/dist/esm/types/index.js +1 -0
  93. package/dist/esm/types/index.js.map +1 -1
  94. package/dist/esm/types/job-options.d.ts +6 -6
  95. package/dist/esm/version.d.ts +1 -1
  96. package/dist/esm/version.js +1 -1
  97. package/package.json +1 -1
  98. package/dist/cjs/interfaces/debounce-options.js.map +0 -1
  99. package/dist/cjs/scripts/addParentJob-4.js.map +0 -1
  100. package/dist/esm/interfaces/debounce-options.d.ts +0 -13
  101. package/dist/esm/interfaces/debounce-options.js +0 -2
  102. package/dist/esm/interfaces/debounce-options.js.map +0 -1
  103. package/dist/esm/scripts/addParentJob-4.js.map +0 -1
  104. /package/dist/esm/scripts/{addParentJob-4.d.ts → addParentJob-5.d.ts} +0 -0
  105. /package/dist/esm/scripts/{addPrioritizedJob-8.d.ts → addPrioritizedJob-9.d.ts} +0 -0
  106. /package/dist/esm/scripts/{addStandardJob-8.d.ts → addStandardJob-9.d.ts} +0 -0
@@ -9,10 +9,11 @@
9
9
  KEYS[2] 'meta'
10
10
  KEYS[3] 'id'
11
11
  KEYS[4] 'prioritized'
12
- KEYS[5] 'completed'
13
- KEYS[6] 'active'
14
- KEYS[7] events stream key
15
- KEYS[8] 'pc' priority counter
12
+ KEYS[5] 'delayed'
13
+ KEYS[6] 'completed'
14
+ KEYS[7] 'active'
15
+ KEYS[8] events stream key
16
+ KEYS[9] 'pc' priority counter
16
17
 
17
18
  ARGV[1] msgpacked arguments array
18
19
  [1] key prefix,
@@ -37,10 +38,10 @@ local metaKey = KEYS[2]
37
38
  local idKey = KEYS[3]
38
39
  local priorityKey = KEYS[4]
39
40
 
40
- local completedKey = KEYS[5]
41
- local activeKey = KEYS[6]
42
- local eventsKey = KEYS[7]
43
- local priorityCounterKey = KEYS[8]
41
+ local completedKey = KEYS[6]
42
+ local activeKey = KEYS[7]
43
+ local eventsKey = KEYS[8]
44
+ local priorityCounterKey = KEYS[9]
44
45
 
45
46
  local jobId
46
47
  local jobIdKey
@@ -90,8 +91,8 @@ else
90
91
  end
91
92
  end
92
93
 
93
- local deduplicationJobId = deduplicateJob(opts['de'], jobId,
94
- deduplicationKey, eventsKey, maxEvents)
94
+ local deduplicationJobId = deduplicateJob(opts['de'], jobId, KEYS[5],
95
+ deduplicationKey, eventsKey, maxEvents, args[1])
95
96
  if deduplicationJobId then
96
97
  return deduplicationJobId
97
98
  end
@@ -20,9 +20,10 @@
20
20
  KEYS[3] 'meta'
21
21
  KEYS[4] 'id'
22
22
  KEYS[5] 'completed'
23
- KEYS[6] 'active'
24
- KEYS[7] events stream key
25
- KEYS[8] marker key
23
+ KEYS[6] 'delayed'
24
+ KEYS[7] 'active'
25
+ KEYS[8] events stream key
26
+ KEYS[9] marker key
26
27
 
27
28
  ARGV[1] msgpacked arguments array
28
29
  [1] key prefix,
@@ -43,7 +44,7 @@
43
44
  jobId - OK
44
45
  -5 - Missing parent key
45
46
  ]]
46
- local eventsKey = KEYS[7]
47
+ local eventsKey = KEYS[8]
47
48
 
48
49
  local jobId
49
50
  local jobIdKey
@@ -94,8 +95,8 @@ else
94
95
  end
95
96
  end
96
97
 
97
- local deduplicationJobId = deduplicateJob(opts['de'], jobId,
98
- deduplicationKey, eventsKey, maxEvents)
98
+ local deduplicationJobId = deduplicateJob(opts['de'], jobId, KEYS[6],
99
+ deduplicationKey, eventsKey, maxEvents, args[1])
99
100
  if deduplicationJobId then
100
101
  return deduplicationJobId
101
102
  end
@@ -104,11 +105,11 @@ end
104
105
  storeJob(eventsKey, jobIdKey, jobId, args[3], ARGV[2], opts, timestamp,
105
106
  parentKey, parentData, repeatJobKey)
106
107
 
107
- local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[6], KEYS[1], KEYS[2])
108
+ local target, isPausedOrMaxed = getTargetQueueList(metaKey, KEYS[7], KEYS[1], KEYS[2])
108
109
 
109
110
  -- LIFO or FIFO
110
111
  local pushCmd = opts['lifo'] and 'RPUSH' or 'LPUSH'
111
- addJobInTargetList(target, KEYS[8], pushCmd, isPausedOrMaxed, jobId)
112
+ addJobInTargetList(target, KEYS[9], pushCmd, isPausedOrMaxed, jobId)
112
113
 
113
114
  -- Emit waiting event
114
115
  rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "waiting",
@@ -1,7 +1,7 @@
1
1
  --[[
2
2
  Functions to collect metrics based on a current and previous count of jobs.
3
3
  Granualarity is fixed at 1 minute.
4
- ]]
4
+ ]]
5
5
  --- @include "batches"
6
6
  local function collectMetrics(metaKey, dataPointsList, maxDataPoints,
7
7
  timestamp)
@@ -1,23 +1,69 @@
1
1
  --[[
2
2
  Function to debounce a job.
3
- ]]
4
- local function deduplicateJob(deduplicationOpts, jobId, deduplicationKey, eventsKey, maxEvents)
5
- local deduplicationId = deduplicationOpts and deduplicationOpts['id']
6
- if deduplicationId then
7
- local ttl = deduplicationOpts['ttl']
8
- local deduplicationKeyExists
9
- if ttl then
10
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
11
- else
12
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
13
- end
14
- if deduplicationKeyExists then
15
- local currentDebounceJobId = rcall('GET', deduplicationKey)
16
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId", currentDebounceJobId,
17
- "debounceId", deduplicationId)
18
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
19
- currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
20
- return currentDebounceJobId
21
- end
22
- end
3
+ ]]
4
+ -- Includes
5
+ --- @include "removeJobKeys"
6
+ local function deduplicateJob(deduplicationOpts, jobId, delayedKey, deduplicationKey, eventsKey, maxEvents,
7
+ prefix)
8
+ local deduplicationId = deduplicationOpts and deduplicationOpts['id']
9
+ if deduplicationId then
10
+ local ttl = deduplicationOpts['ttl']
11
+ if deduplicationOpts['replace'] and ttl and ttl > 0 then
12
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
13
+ if currentDebounceJobId then
14
+ if rcall("ZREM", delayedKey, currentDebounceJobId) > 0 then
15
+ removeJobKeys(prefix .. currentDebounceJobId)
16
+ rcall("XADD", eventsKey, "*", "event", "removed", "jobId", currentDebounceJobId,
17
+ "prev", "delayed")
18
+
19
+ if deduplicationOpts['extend'] then
20
+ rcall('SET', deduplicationKey, jobId, 'PX', ttl)
21
+ else
22
+ rcall('SET', deduplicationKey, jobId, 'KEEPTTL')
23
+ end
24
+
25
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
26
+ jobId, "deduplicationId", deduplicationId, "deduplicatedJobId", currentDebounceJobId)
27
+ return
28
+ else
29
+ return currentDebounceJobId
30
+ end
31
+ else
32
+ rcall('SET', deduplicationKey, jobId, 'PX', ttl)
33
+ return
34
+ end
35
+ else
36
+ local ttl = deduplicationOpts['ttl']
37
+ local deduplicationKeyExists
38
+ if ttl then
39
+ if deduplicationOpts['extend'] then
40
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
41
+ if currentDebounceJobId then
42
+ rcall('SET', deduplicationKey, currentDebounceJobId, 'PX', ttl)
43
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced",
44
+ "jobId", currentDebounceJobId, "debounceId", deduplicationId)
45
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
46
+ currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
47
+ return currentDebounceJobId
48
+ else
49
+ rcall('SET', deduplicationKey, jobId, 'PX', ttl)
50
+ return
51
+ end
52
+ else
53
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
54
+ end
55
+ else
56
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
57
+ end
58
+
59
+ if deduplicationKeyExists then
60
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
61
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
62
+ currentDebounceJobId, "debounceId", deduplicationId)
63
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
64
+ currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
65
+ return currentDebounceJobId
66
+ end
67
+ end
68
+ end
23
69
  end
@@ -7,7 +7,7 @@ local function storeJob(eventsKey, jobIdKey, jobId, name, data, opts, timestamp,
7
7
  local delay = opts['delay'] or 0
8
8
  local priority = opts['priority'] or 0
9
9
  local debounceId = opts['de'] and opts['de']['id']
10
-
10
+
11
11
  local optionalValues = {}
12
12
  if parentKey ~= nil then
13
13
  table.insert(optionalValues, "parentKey")
@@ -51,7 +51,7 @@ if removed > 0 then
51
51
 
52
52
  -- Emit waiting event
53
53
  rcall("XADD", KEYS[9], "MAXLEN", "~", maxEvents, "*", "event", "waiting",
54
- "jobId", jobId)
54
+ "jobId", jobId, "prev", "active")
55
55
  end
56
56
 
57
57
  local pttl = rcall("PTTL", KEYS[6])
@@ -6,8 +6,9 @@ export declare enum ParentCommand {
6
6
  InitCompleted = 4,
7
7
  Log = 5,
8
8
  MoveToDelayed = 6,
9
- Progress = 7,
10
- Update = 8,
11
- GetChildrenValues = 9,
12
- GetIgnoredChildrenFailures = 10
9
+ MoveToWait = 7,
10
+ Progress = 8,
11
+ Update = 9,
12
+ GetChildrenValues = 10,
13
+ GetIgnoredChildrenFailures = 11
13
14
  }
@@ -7,9 +7,10 @@ export var ParentCommand;
7
7
  ParentCommand[ParentCommand["InitCompleted"] = 4] = "InitCompleted";
8
8
  ParentCommand[ParentCommand["Log"] = 5] = "Log";
9
9
  ParentCommand[ParentCommand["MoveToDelayed"] = 6] = "MoveToDelayed";
10
- ParentCommand[ParentCommand["Progress"] = 7] = "Progress";
11
- ParentCommand[ParentCommand["Update"] = 8] = "Update";
12
- ParentCommand[ParentCommand["GetChildrenValues"] = 9] = "GetChildrenValues";
13
- ParentCommand[ParentCommand["GetIgnoredChildrenFailures"] = 10] = "GetIgnoredChildrenFailures";
10
+ ParentCommand[ParentCommand["MoveToWait"] = 7] = "MoveToWait";
11
+ ParentCommand[ParentCommand["Progress"] = 8] = "Progress";
12
+ ParentCommand[ParentCommand["Update"] = 9] = "Update";
13
+ ParentCommand[ParentCommand["GetChildrenValues"] = 10] = "GetChildrenValues";
14
+ ParentCommand[ParentCommand["GetIgnoredChildrenFailures"] = 11] = "GetIgnoredChildrenFailures";
14
15
  })(ParentCommand || (ParentCommand = {}));
15
16
  //# sourceMappingURL=parent-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parent-command.js","sourceRoot":"","sources":["../../../src/enums/parent-command.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAYX;AAZD,WAAY,aAAa;IACvB,2DAAS,CAAA;IACT,mDAAK,CAAA;IACL,qDAAM,CAAA;IACN,6DAAU,CAAA;IACV,mEAAa,CAAA;IACb,+CAAG,CAAA;IACH,mEAAa,CAAA;IACb,yDAAQ,CAAA;IACR,qDAAM,CAAA;IACN,2EAAiB,CAAA;IACjB,8FAA0B,CAAA;AAC5B,CAAC,EAZW,aAAa,KAAb,aAAa,QAYxB"}
1
+ {"version":3,"file":"parent-command.js","sourceRoot":"","sources":["../../../src/enums/parent-command.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAaX;AAbD,WAAY,aAAa;IACvB,2DAAS,CAAA;IACT,mDAAK,CAAA;IACL,qDAAM,CAAA;IACN,6DAAU,CAAA;IACV,mEAAa,CAAA;IACb,+CAAG,CAAA;IACH,mEAAa,CAAA;IACb,6DAAU,CAAA;IACV,yDAAQ,CAAA;IACR,qDAAM,CAAA;IACN,4EAAiB,CAAA;IACjB,8FAA0B,CAAA;AAC5B,CAAC,EAbW,aAAa,KAAb,aAAa,QAaxB"}
@@ -3,7 +3,6 @@ export * from './backoff-options';
3
3
  export * from './base-job-options';
4
4
  export * from './child-message';
5
5
  export * from './connection';
6
- export * from './debounce-options';
7
6
  export * from './flow-job';
8
7
  export * from './ioredis-events';
9
8
  export * from './job-json';
@@ -3,7 +3,6 @@ export * from './backoff-options';
3
3
  export * from './base-job-options';
4
4
  export * from './child-message';
5
5
  export * from './connection';
6
- export * from './debounce-options';
7
6
  export * from './flow-job';
8
7
  export * from './ioredis-events';
9
8
  export * from './job-json';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -6,6 +6,7 @@ export interface SandboxedJob<T = any, R = any> extends Omit<JobJsonSandbox, 'da
6
6
  data: T;
7
7
  opts: JobsOptions;
8
8
  moveToDelayed: (timestamp: number, token?: string) => Promise<void>;
9
+ moveToWait: (token?: string) => Promise<void>;
9
10
  log: (row: any) => void;
10
11
  updateData: (data: any) => Promise<void>;
11
12
  updateProgress: (value: JobProgress) => Promise<void>;
@@ -111,26 +111,75 @@ local function addDelayedJob(jobId, delayedKey, eventsKey, timestamp,
111
111
  end
112
112
  --[[
113
113
  Function to debounce a job.
114
- ]]
115
- local function deduplicateJob(deduplicationOpts, jobId, deduplicationKey, eventsKey, maxEvents)
116
- local deduplicationId = deduplicationOpts and deduplicationOpts['id']
117
- if deduplicationId then
118
- local ttl = deduplicationOpts['ttl']
119
- local deduplicationKeyExists
120
- if ttl then
121
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
122
- else
123
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
124
- end
125
- if deduplicationKeyExists then
126
- local currentDebounceJobId = rcall('GET', deduplicationKey)
127
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId", currentDebounceJobId,
128
- "debounceId", deduplicationId)
129
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
130
- currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
131
- return currentDebounceJobId
132
- end
133
- end
114
+ ]]
115
+ -- Includes
116
+ --[[
117
+ Function to remove job keys.
118
+ ]]
119
+ local function removeJobKeys(jobKey)
120
+ return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
121
+ jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
122
+ end
123
+ local function deduplicateJob(deduplicationOpts, jobId, delayedKey, deduplicationKey, eventsKey, maxEvents,
124
+ prefix)
125
+ local deduplicationId = deduplicationOpts and deduplicationOpts['id']
126
+ if deduplicationId then
127
+ local ttl = deduplicationOpts['ttl']
128
+ if deduplicationOpts['replace'] and ttl and ttl > 0 then
129
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
130
+ if currentDebounceJobId then
131
+ if rcall("ZREM", delayedKey, currentDebounceJobId) > 0 then
132
+ removeJobKeys(prefix .. currentDebounceJobId)
133
+ rcall("XADD", eventsKey, "*", "event", "removed", "jobId", currentDebounceJobId,
134
+ "prev", "delayed")
135
+ if deduplicationOpts['extend'] then
136
+ rcall('SET', deduplicationKey, jobId, 'PX', ttl)
137
+ else
138
+ rcall('SET', deduplicationKey, jobId, 'KEEPTTL')
139
+ end
140
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
141
+ jobId, "deduplicationId", deduplicationId, "deduplicatedJobId", currentDebounceJobId)
142
+ return
143
+ else
144
+ return currentDebounceJobId
145
+ end
146
+ else
147
+ rcall('SET', deduplicationKey, jobId, 'PX', ttl)
148
+ return
149
+ end
150
+ else
151
+ local ttl = deduplicationOpts['ttl']
152
+ local deduplicationKeyExists
153
+ if ttl then
154
+ if deduplicationOpts['extend'] then
155
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
156
+ if currentDebounceJobId then
157
+ rcall('SET', deduplicationKey, currentDebounceJobId, 'PX', ttl)
158
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced",
159
+ "jobId", currentDebounceJobId, "debounceId", deduplicationId)
160
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
161
+ currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
162
+ return currentDebounceJobId
163
+ else
164
+ rcall('SET', deduplicationKey, jobId, 'PX', ttl)
165
+ return
166
+ end
167
+ else
168
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
169
+ end
170
+ else
171
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
172
+ end
173
+ if deduplicationKeyExists then
174
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
175
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
176
+ currentDebounceJobId, "debounceId", deduplicationId)
177
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
178
+ currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
179
+ return currentDebounceJobId
180
+ end
181
+ end
182
+ end
134
183
  end
135
184
  --[[
136
185
  Function to get max events value or set by default 10000.
@@ -378,8 +427,8 @@ else
378
427
  maxEvents, timestamp)
379
428
  end
380
429
  end
381
- local deduplicationJobId = deduplicateJob(opts['de'], jobId, deduplicationKey,
382
- eventsKey, maxEvents)
430
+ local deduplicationJobId = deduplicateJob(opts['de'], jobId, delayedKey, deduplicationKey,
431
+ eventsKey, maxEvents, args[1])
383
432
  if deduplicationJobId then
384
433
  return deduplicationJobId
385
434
  end
@@ -1 +1 @@
1
- {"version":3,"file":"addDelayedJob-6.js","sourceRoot":"","sources":["../../../src/scripts/addDelayedJob-6.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyYf,CAAC;AACF,MAAM,CAAC,MAAM,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0bf,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,eAAe;IACrB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
@@ -6,8 +6,9 @@ const content = `--[[
6
6
  Input:
7
7
  KEYS[1] 'meta'
8
8
  KEYS[2] 'id'
9
- KEYS[3] 'completed'
10
- KEYS[4] events stream key
9
+ KEYS[3] 'delayed'
10
+ KEYS[4] 'completed'
11
+ KEYS[5] events stream key
11
12
  ARGV[1] msgpacked arguments array
12
13
  [1] key prefix,
13
14
  [2] custom id (will not generate one automatically)
@@ -27,8 +28,8 @@ const content = `--[[
27
28
  ]]
28
29
  local metaKey = KEYS[1]
29
30
  local idKey = KEYS[2]
30
- local completedKey = KEYS[3]
31
- local eventsKey = KEYS[4]
31
+ local completedKey = KEYS[4]
32
+ local eventsKey = KEYS[5]
32
33
  local jobId
33
34
  local jobIdKey
34
35
  local rcall = redis.call
@@ -43,26 +44,75 @@ local parentData
43
44
  -- Includes
44
45
  --[[
45
46
  Function to debounce a job.
46
- ]]
47
- local function deduplicateJob(deduplicationOpts, jobId, deduplicationKey, eventsKey, maxEvents)
48
- local deduplicationId = deduplicationOpts and deduplicationOpts['id']
49
- if deduplicationId then
50
- local ttl = deduplicationOpts['ttl']
51
- local deduplicationKeyExists
52
- if ttl then
53
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
54
- else
55
- deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
56
- end
57
- if deduplicationKeyExists then
58
- local currentDebounceJobId = rcall('GET', deduplicationKey)
59
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId", currentDebounceJobId,
60
- "debounceId", deduplicationId)
61
- rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
62
- currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
63
- return currentDebounceJobId
64
- end
65
- end
47
+ ]]
48
+ -- Includes
49
+ --[[
50
+ Function to remove job keys.
51
+ ]]
52
+ local function removeJobKeys(jobKey)
53
+ return rcall("DEL", jobKey, jobKey .. ':logs', jobKey .. ':dependencies',
54
+ jobKey .. ':processed', jobKey .. ':failed', jobKey .. ':unsuccessful')
55
+ end
56
+ local function deduplicateJob(deduplicationOpts, jobId, delayedKey, deduplicationKey, eventsKey, maxEvents,
57
+ prefix)
58
+ local deduplicationId = deduplicationOpts and deduplicationOpts['id']
59
+ if deduplicationId then
60
+ local ttl = deduplicationOpts['ttl']
61
+ if deduplicationOpts['replace'] and ttl and ttl > 0 then
62
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
63
+ if currentDebounceJobId then
64
+ if rcall("ZREM", delayedKey, currentDebounceJobId) > 0 then
65
+ removeJobKeys(prefix .. currentDebounceJobId)
66
+ rcall("XADD", eventsKey, "*", "event", "removed", "jobId", currentDebounceJobId,
67
+ "prev", "delayed")
68
+ if deduplicationOpts['extend'] then
69
+ rcall('SET', deduplicationKey, jobId, 'PX', ttl)
70
+ else
71
+ rcall('SET', deduplicationKey, jobId, 'KEEPTTL')
72
+ end
73
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
74
+ jobId, "deduplicationId", deduplicationId, "deduplicatedJobId", currentDebounceJobId)
75
+ return
76
+ else
77
+ return currentDebounceJobId
78
+ end
79
+ else
80
+ rcall('SET', deduplicationKey, jobId, 'PX', ttl)
81
+ return
82
+ end
83
+ else
84
+ local ttl = deduplicationOpts['ttl']
85
+ local deduplicationKeyExists
86
+ if ttl then
87
+ if deduplicationOpts['extend'] then
88
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
89
+ if currentDebounceJobId then
90
+ rcall('SET', deduplicationKey, currentDebounceJobId, 'PX', ttl)
91
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced",
92
+ "jobId", currentDebounceJobId, "debounceId", deduplicationId)
93
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
94
+ currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
95
+ return currentDebounceJobId
96
+ else
97
+ rcall('SET', deduplicationKey, jobId, 'PX', ttl)
98
+ return
99
+ end
100
+ else
101
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'PX', ttl, 'NX')
102
+ end
103
+ else
104
+ deduplicationKeyExists = not rcall('SET', deduplicationKey, jobId, 'NX')
105
+ end
106
+ if deduplicationKeyExists then
107
+ local currentDebounceJobId = rcall('GET', deduplicationKey)
108
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "debounced", "jobId",
109
+ currentDebounceJobId, "debounceId", deduplicationId)
110
+ rcall("XADD", eventsKey, "MAXLEN", "~", maxEvents, "*", "event", "deduplicated", "jobId",
111
+ currentDebounceJobId, "deduplicationId", deduplicationId, "deduplicatedJobId", jobId)
112
+ return currentDebounceJobId
113
+ end
114
+ end
115
+ end
66
116
  end
67
117
  --[[
68
118
  Function to get max events value or set by default 10000.
@@ -333,8 +383,8 @@ else
333
383
  maxEvents, timestamp)
334
384
  end
335
385
  end
336
- local deduplicationJobId = deduplicateJob(opts['de'], jobId,
337
- deduplicationKey, eventsKey, maxEvents)
386
+ local deduplicationJobId = deduplicateJob(opts['de'], jobId, KEYS[3],
387
+ deduplicationKey, eventsKey, maxEvents, args[1])
338
388
  if deduplicationJobId then
339
389
  return deduplicationJobId
340
390
  end
@@ -354,6 +404,6 @@ return jobId .. "" -- convert to string
354
404
  export const addParentJob = {
355
405
  name: 'addParentJob',
356
406
  content,
357
- keys: 4,
407
+ keys: 5,
358
408
  };
359
- //# sourceMappingURL=addParentJob-4.js.map
409
+ //# sourceMappingURL=addParentJob-5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addParentJob-5.js","sourceRoot":"","sources":["../../../src/scripts/addParentJob-5.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkZf,CAAC;AACF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,cAAc;IACpB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}