bullmq 4.10.0 → 4.11.1
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.
- package/dist/cjs/classes/child-processor.js +55 -56
- package/dist/cjs/classes/child-processor.js.map +1 -1
- package/dist/cjs/commands/cleanJobsInSet-2.lua +9 -3
- package/dist/cjs/commands/includes/cleanList.lua +1 -1
- package/dist/cjs/commands/includes/cleanSet.lua +11 -5
- package/dist/cjs/commands/includes/getJobsInZset.lua +3 -4
- package/dist/cjs/scripts/cleanJobsInSet-2.js +24 -12
- package/dist/cjs/scripts/cleanJobsInSet-2.js.map +1 -1
- package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/esm/classes/child-processor.d.ts +11 -1
- package/dist/esm/classes/child-processor.js +54 -55
- package/dist/esm/classes/child-processor.js.map +1 -1
- package/dist/esm/commands/cleanJobsInSet-2.lua +9 -3
- package/dist/esm/commands/includes/cleanList.lua +1 -1
- package/dist/esm/commands/includes/cleanSet.lua +11 -5
- package/dist/esm/commands/includes/getJobsInZset.lua +3 -4
- package/dist/esm/scripts/cleanJobsInSet-2.js +24 -12
- package/dist/esm/scripts/cleanJobsInSet-2.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
@@ -62,8 +62,7 @@ export class ChildProcessor {
|
|
62
62
|
this.status = ChildStatus.Started;
|
63
63
|
this.currentJobPromise = (async () => {
|
64
64
|
try {
|
65
|
-
const job = wrapJob(jobJson, this.send);
|
66
|
-
//console.log('el token', token, job.id)
|
65
|
+
const job = this.wrapJob(jobJson, this.send);
|
67
66
|
const result = (await this.processor(job, token)) || {};
|
68
67
|
await this.send({
|
69
68
|
cmd: ParentCommand.Completed,
|
@@ -92,59 +91,59 @@ export class ChildProcessor {
|
|
92
91
|
process.exit(process.exitCode || 0);
|
93
92
|
}
|
94
93
|
}
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
value: progress,
|
115
|
-
});
|
116
|
-
};
|
117
|
-
return Object.assign(Object.assign({}, job), { data: JSON.parse(job.data || '{}'), opts: job.opts, returnValue: JSON.parse(job.returnvalue || '{}'),
|
118
|
-
/*
|
119
|
-
* Emulate the real job `updateProgress` function, should works as `progress` function.
|
120
|
-
*/
|
121
|
-
updateProgress,
|
122
|
-
/*
|
123
|
-
* Emulate the real job `log` function.
|
124
|
-
*/
|
125
|
-
log: async (row) => {
|
126
|
-
send({
|
127
|
-
cmd: ParentCommand.Log,
|
128
|
-
value: row,
|
129
|
-
});
|
130
|
-
},
|
131
|
-
/*
|
132
|
-
* Emulate the real job `moveToDelayed` function.
|
133
|
-
*/
|
134
|
-
moveToDelayed: async (timestamp, token) => {
|
135
|
-
send({
|
136
|
-
cmd: ParentCommand.MoveToDelayed,
|
137
|
-
value: { timestamp, token },
|
94
|
+
/**
|
95
|
+
* Enhance the given job argument with some functions
|
96
|
+
* that can be called from the sandboxed job processor.
|
97
|
+
*
|
98
|
+
* Note, the `job` argument is a JSON deserialized message
|
99
|
+
* from the main node process to this forked child process,
|
100
|
+
* the functions on the original job object are not in tact.
|
101
|
+
* The wrapped job adds back some of those original functions.
|
102
|
+
*/
|
103
|
+
wrapJob(job, send) {
|
104
|
+
let progressValue = job.progress;
|
105
|
+
const updateProgress = async (progress) => {
|
106
|
+
// Locally store reference to new progress value
|
107
|
+
// so that we can return it from this process synchronously.
|
108
|
+
progressValue = progress;
|
109
|
+
// Send message to update job progress.
|
110
|
+
await send({
|
111
|
+
cmd: ParentCommand.Progress,
|
112
|
+
value: progress,
|
138
113
|
});
|
139
|
-
}
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
114
|
+
};
|
115
|
+
return Object.assign(Object.assign({}, job), { data: JSON.parse(job.data || '{}'), opts: job.opts, returnValue: JSON.parse(job.returnvalue || '{}'),
|
116
|
+
/*
|
117
|
+
* Emulate the real job `updateProgress` function, should works as `progress` function.
|
118
|
+
*/
|
119
|
+
updateProgress,
|
120
|
+
/*
|
121
|
+
* Emulate the real job `log` function.
|
122
|
+
*/
|
123
|
+
log: async (row) => {
|
124
|
+
send({
|
125
|
+
cmd: ParentCommand.Log,
|
126
|
+
value: row,
|
127
|
+
});
|
128
|
+
},
|
129
|
+
/*
|
130
|
+
* Emulate the real job `moveToDelayed` function.
|
131
|
+
*/
|
132
|
+
moveToDelayed: async (timestamp, token) => {
|
133
|
+
send({
|
134
|
+
cmd: ParentCommand.MoveToDelayed,
|
135
|
+
value: { timestamp, token },
|
136
|
+
});
|
137
|
+
},
|
138
|
+
/*
|
139
|
+
* Emulate the real job `updateData` function.
|
140
|
+
*/
|
141
|
+
updateData: async (data) => {
|
142
|
+
send({
|
143
|
+
cmd: ParentCommand.Update,
|
144
|
+
value: data,
|
145
|
+
});
|
146
|
+
} });
|
147
|
+
}
|
149
148
|
}
|
150
149
|
//# sourceMappingURL=child-processor.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"child-processor.js","sourceRoot":"","sources":["../../../src/classes/child-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,aAAa,EAAgB,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,IAAK,WAKJ;AALD,WAAK,WAAW;IACd,6CAAI,CAAA;IACJ,mDAAO,CAAA;IACP,2DAAW,CAAA;IACX,mDAAO,CAAA;AACT,CAAC,EALI,WAAW,KAAX,WAAW,QAKf;AAED;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IAKzB,YAAoB,IAAiC;QAAjC,SAAI,GAAJ,IAAI,CAA6B;IAAG,CAAC;IAElD,KAAK,CAAC,IAAI,CAAC,aAAqB;QACrC,IAAI,SAAS,CAAC;QACd,IAAI;YACF,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;YAEnC,IAAI,SAAS,CAAC,OAAO,EAAE;gBACrB,yBAAyB;gBACzB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC;aAC/B;YAED,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;gBACnC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;aAC9D;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC;YAClC,OAAO,IAAI,CAAC,IAAI,CAAC;gBACf,GAAG,EAAE,aAAa,CAAC,UAAU;gBAC7B,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC;aACtB,CAAC,CAAC;SACJ;QAED,MAAM,aAAa,GAAG,SAAS,CAAC;QAChC,SAAS,GAAG,UAAU,GAAiB,EAAE,KAAc;YACrD,IAAI;gBACF,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;aACnD;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC5B;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;QAC/B,MAAM,IAAI,CAAC,IAAI,CAAC;YACd,GAAG,EAAE,aAAa,CAAC,aAAa;SACjC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAAgB,EAAE,KAAc;QACjD,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,IAAI,EAAE;YACpC,OAAO,IAAI,CAAC,IAAI,CAAC;gBACf,GAAG,EAAE,aAAa,CAAC,KAAK;gBACxB,GAAG,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;aACvE,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,IAAI,EAAE;YACnC,IAAI;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"child-processor.js","sourceRoot":"","sources":["../../../src/classes/child-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,aAAa,EAAgB,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,IAAK,WAKJ;AALD,WAAK,WAAW;IACd,6CAAI,CAAA;IACJ,mDAAO,CAAA;IACP,2DAAW,CAAA;IACX,mDAAO,CAAA;AACT,CAAC,EALI,WAAW,KAAX,WAAW,QAKf;AAED;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IAKzB,YAAoB,IAAiC;QAAjC,SAAI,GAAJ,IAAI,CAA6B;IAAG,CAAC;IAElD,KAAK,CAAC,IAAI,CAAC,aAAqB;QACrC,IAAI,SAAS,CAAC;QACd,IAAI;YACF,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;YAEnC,IAAI,SAAS,CAAC,OAAO,EAAE;gBACrB,yBAAyB;gBACzB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC;aAC/B;YAED,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;gBACnC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;aAC9D;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC;YAClC,OAAO,IAAI,CAAC,IAAI,CAAC;gBACf,GAAG,EAAE,aAAa,CAAC,UAAU;gBAC7B,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC;aACtB,CAAC,CAAC;SACJ;QAED,MAAM,aAAa,GAAG,SAAS,CAAC;QAChC,SAAS,GAAG,UAAU,GAAiB,EAAE,KAAc;YACrD,IAAI;gBACF,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;aACnD;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC5B;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;QAC/B,MAAM,IAAI,CAAC,IAAI,CAAC;YACd,GAAG,EAAE,aAAa,CAAC,aAAa;SACjC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAAgB,EAAE,KAAc;QACjD,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,IAAI,EAAE;YACpC,OAAO,IAAI,CAAC,IAAI,CAAC;gBACf,GAAG,EAAE,aAAa,CAAC,KAAK;gBACxB,GAAG,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;aACvE,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,IAAI,EAAE;YACnC,IAAI;gBACF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7C,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxD,MAAM,IAAI,CAAC,IAAI,CAAC;oBACd,GAAG,EAAE,aAAa,CAAC,SAAS;oBAC5B,KAAK,EAAE,MAAM;iBACd,CAAC,CAAC;aACJ;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,CAAC,IAAI,CAAC;oBACd,GAAG,EAAE,aAAa,CAAC,MAAM;oBACzB,KAAK,EAAE,WAAW,CAAC,CAAS,GAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;iBACtE,CAAC,CAAC;aACJ;oBAAS;gBACR,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;gBAC/B,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;aACpC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,IAAI,KAAmB,CAAC;IAErC,KAAK,CAAC,wBAAwB;QAC5B,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC;QACtC,IAAI;YACF,MAAM,IAAI,CAAC,iBAAiB,CAAC;SAC9B;gBAAS;YACR,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;SACrC;IACH,CAAC;IAED;;;;;;;;OAQG;IACO,OAAO,CACf,GAAY,EACZ,IAAiC;QAEjC,IAAI,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC;QAEjC,MAAM,cAAc,GAAG,KAAK,EAAE,QAAyB,EAAE,EAAE;YACzD,gDAAgD;YAChD,4DAA4D;YAC5D,aAAa,GAAG,QAAQ,CAAC;YACzB,uCAAuC;YACvC,MAAM,IAAI,CAAC;gBACT,GAAG,EAAE,aAAa,CAAC,QAAQ;gBAC3B,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,uCACK,GAAG,KACN,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,EAClC,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC;YAChD;;eAEG;YACH,cAAc;YACd;;eAEG;YACH,GAAG,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;gBACtB,IAAI,CAAC;oBACH,GAAG,EAAE,aAAa,CAAC,GAAG;oBACtB,KAAK,EAAE,GAAG;iBACX,CAAC,CAAC;YACL,CAAC;YACD;;eAEG;YACH,aAAa,EAAE,KAAK,EAAE,SAAiB,EAAE,KAAc,EAAE,EAAE;gBACzD,IAAI,CAAC;oBACH,GAAG,EAAE,aAAa,CAAC,aAAa;oBAChC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD;;eAEG;YACH,UAAU,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;gBAC9B,IAAI,CAAC;oBACH,GAAG,EAAE,aAAa,CAAC,MAAM;oBACzB,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;YACL,CAAC,IACD;IACJ,CAAC;CACF"}
|
@@ -34,13 +34,19 @@ local result
|
|
34
34
|
if ARGV[4] == "active" then
|
35
35
|
result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false)
|
36
36
|
elseif ARGV[4] == "delayed" then
|
37
|
-
|
37
|
+
rangeEnd = "+inf"
|
38
|
+
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
39
|
+
{"processedOn", "timestamp"}, false)
|
38
40
|
elseif ARGV[4] == "prioritized" then
|
39
|
-
|
41
|
+
rangeEnd = "+inf"
|
42
|
+
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
43
|
+
{"timestamp"}, false)
|
40
44
|
elseif ARGV[4] == "wait" or ARGV[4] == "paused" then
|
41
45
|
result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true)
|
42
46
|
else
|
43
|
-
|
47
|
+
rangeEnd = ARGV[2]
|
48
|
+
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
49
|
+
{"finishedOn"}, true)
|
44
50
|
end
|
45
51
|
|
46
52
|
rcall("XADD", KEYS[2], "*", "event", "cleaned", "count", result[2])
|
@@ -30,7 +30,7 @@ local function cleanList(listKey, jobKeyPrefix, rangeStart, rangeEnd,
|
|
30
30
|
-- Fetch all three of these (in that order) and use the first one that is set so that we'll leave jobs
|
31
31
|
-- that have been active within the grace period:
|
32
32
|
jobTS = getTimestamp(jobKey, {"finishedOn", "processedOn", "timestamp"})
|
33
|
-
if (not jobTS or jobTS
|
33
|
+
if (not jobTS or jobTS <= timestamp) then
|
34
34
|
-- replace the entry with a deletion marker; the actual deletion will
|
35
35
|
-- occur at the end of the script
|
36
36
|
rcall("LSET", listKey, rangeEnd - jobIdsLen + i, deletionMarker)
|
@@ -9,8 +9,8 @@
|
|
9
9
|
--- @include "getTimestamp"
|
10
10
|
--- @include "removeJob"
|
11
11
|
|
12
|
-
local function cleanSet(setKey, jobKeyPrefix,
|
13
|
-
local jobs = getJobsInZset(setKey,
|
12
|
+
local function cleanSet(setKey, jobKeyPrefix, rangeEnd, timestamp, limit, attributes, isFinished)
|
13
|
+
local jobs = getJobsInZset(setKey, rangeEnd, limit)
|
14
14
|
local deleted = {}
|
15
15
|
local deletedCount = 0
|
16
16
|
local jobTS
|
@@ -20,12 +20,18 @@ local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, l
|
|
20
20
|
end
|
21
21
|
|
22
22
|
local jobKey = jobKeyPrefix .. job
|
23
|
-
|
24
|
-
jobTS = getTimestamp(jobKey, attributes)
|
25
|
-
if (not jobTS or jobTS < timestamp) then
|
23
|
+
if isFinished then
|
26
24
|
removeJob(job, true, jobKeyPrefix)
|
27
25
|
deletedCount = deletedCount + 1
|
28
26
|
table.insert(deleted, job)
|
27
|
+
else
|
28
|
+
-- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
|
29
|
+
jobTS = getTimestamp(jobKey, attributes)
|
30
|
+
if (not jobTS or jobTS <= timestamp) then
|
31
|
+
removeJob(job, true, jobKeyPrefix)
|
32
|
+
deletedCount = deletedCount + 1
|
33
|
+
table.insert(deleted, job)
|
34
|
+
end
|
29
35
|
end
|
30
36
|
end
|
31
37
|
|
@@ -2,11 +2,10 @@
|
|
2
2
|
-- of items in a sorted set only run a single iteration. If we simply used
|
3
3
|
-- ZRANGE, we may take a long time traversing through jobs that are within the
|
4
4
|
-- grace period.
|
5
|
-
local function getJobsInZset(zsetKey,
|
5
|
+
local function getJobsInZset(zsetKey, rangeEnd, limit)
|
6
6
|
if limit > 0 then
|
7
|
-
return rcall("ZRANGEBYSCORE", zsetKey, 0,
|
7
|
+
return rcall("ZRANGEBYSCORE", zsetKey, 0, rangeEnd, "LIMIT", 0, limit)
|
8
8
|
else
|
9
|
-
return rcall("
|
9
|
+
return rcall("ZRANGEBYSCORE", zsetKey, 0, rangeEnd)
|
10
10
|
end
|
11
11
|
end
|
12
|
-
|
@@ -163,7 +163,7 @@ local function cleanList(listKey, jobKeyPrefix, rangeStart, rangeEnd,
|
|
163
163
|
-- Fetch all three of these (in that order) and use the first one that is set so that we'll leave jobs
|
164
164
|
-- that have been active within the grace period:
|
165
165
|
jobTS = getTimestamp(jobKey, {"finishedOn", "processedOn", "timestamp"})
|
166
|
-
if (not jobTS or jobTS
|
166
|
+
if (not jobTS or jobTS <= timestamp) then
|
167
167
|
-- replace the entry with a deletion marker; the actual deletion will
|
168
168
|
-- occur at the end of the script
|
169
169
|
rcall("LSET", listKey, rangeEnd - jobIdsLen + i, deletionMarker)
|
@@ -201,15 +201,15 @@ end
|
|
201
201
|
-- of items in a sorted set only run a single iteration. If we simply used
|
202
202
|
-- ZRANGE, we may take a long time traversing through jobs that are within the
|
203
203
|
-- grace period.
|
204
|
-
local function getJobsInZset(zsetKey,
|
204
|
+
local function getJobsInZset(zsetKey, rangeEnd, limit)
|
205
205
|
if limit > 0 then
|
206
|
-
return rcall("ZRANGEBYSCORE", zsetKey, 0,
|
206
|
+
return rcall("ZRANGEBYSCORE", zsetKey, 0, rangeEnd, "LIMIT", 0, limit)
|
207
207
|
else
|
208
|
-
return rcall("
|
208
|
+
return rcall("ZRANGEBYSCORE", zsetKey, 0, rangeEnd)
|
209
209
|
end
|
210
210
|
end
|
211
|
-
local function cleanSet(setKey, jobKeyPrefix,
|
212
|
-
local jobs = getJobsInZset(setKey,
|
211
|
+
local function cleanSet(setKey, jobKeyPrefix, rangeEnd, timestamp, limit, attributes, isFinished)
|
212
|
+
local jobs = getJobsInZset(setKey, rangeEnd, limit)
|
213
213
|
local deleted = {}
|
214
214
|
local deletedCount = 0
|
215
215
|
local jobTS
|
@@ -218,12 +218,18 @@ local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, l
|
|
218
218
|
break
|
219
219
|
end
|
220
220
|
local jobKey = jobKeyPrefix .. job
|
221
|
-
|
222
|
-
jobTS = getTimestamp(jobKey, attributes)
|
223
|
-
if (not jobTS or jobTS < timestamp) then
|
221
|
+
if isFinished then
|
224
222
|
removeJob(job, true, jobKeyPrefix)
|
225
223
|
deletedCount = deletedCount + 1
|
226
224
|
table.insert(deleted, job)
|
225
|
+
else
|
226
|
+
-- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
|
227
|
+
jobTS = getTimestamp(jobKey, attributes)
|
228
|
+
if (not jobTS or jobTS <= timestamp) then
|
229
|
+
removeJob(job, true, jobKeyPrefix)
|
230
|
+
deletedCount = deletedCount + 1
|
231
|
+
table.insert(deleted, job)
|
232
|
+
end
|
227
233
|
end
|
228
234
|
end
|
229
235
|
if(#deleted > 0) then
|
@@ -237,13 +243,19 @@ local result
|
|
237
243
|
if ARGV[4] == "active" then
|
238
244
|
result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false)
|
239
245
|
elseif ARGV[4] == "delayed" then
|
240
|
-
|
246
|
+
rangeEnd = "+inf"
|
247
|
+
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
248
|
+
{"processedOn", "timestamp"}, false)
|
241
249
|
elseif ARGV[4] == "prioritized" then
|
242
|
-
|
250
|
+
rangeEnd = "+inf"
|
251
|
+
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
252
|
+
{"timestamp"}, false)
|
243
253
|
elseif ARGV[4] == "wait" or ARGV[4] == "paused" then
|
244
254
|
result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true)
|
245
255
|
else
|
246
|
-
|
256
|
+
rangeEnd = ARGV[2]
|
257
|
+
result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
|
258
|
+
{"finishedOn"}, true)
|
247
259
|
end
|
248
260
|
rcall("XADD", KEYS[2], "*", "event", "cleaned", "count", result[2])
|
249
261
|
return result[1]
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cleanJobsInSet-2.js","sourceRoot":"","sources":["../../../src/scripts/cleanJobsInSet-2.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"cleanJobsInSet-2.js","sourceRoot":"","sources":["../../../src/scripts/cleanJobsInSet-2.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqQf,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|