bullmq 1.85.3 → 1.85.4

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.
@@ -99,7 +99,7 @@ exports.ChildProcessor = ChildProcessor;
99
99
  // https://stackoverflow.com/questions/18391212/is-it-not-possible-to-stringify-an-error-using-json-stringify
100
100
  if (!('toJSON' in Error.prototype)) {
101
101
  Object.defineProperty(Error.prototype, 'toJSON', {
102
- value: function () {
102
+ value: function toJSONByBull() {
103
103
  const alt = {};
104
104
  const _this = this;
105
105
  Object.getOwnPropertyNames(_this).forEach(function (key) {
@@ -1 +1 @@
1
- {"version":3,"file":"child-processor.js","sourceRoot":"","sources":["../../../src/classes/child-processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"child-processor.js","sourceRoot":"","sources":["../../../src/classes/child-processor.ts"],"names":[],"mappings":"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"}
@@ -27,89 +27,8 @@ if limit > 0 then
27
27
  end
28
28
 
29
29
  -- Includes
30
- --- @include "includes/batches"
31
- --- @include "includes/removeJob"
32
-
33
- local function getTimestamp(jobKey, attributes)
34
- if #attributes == 1 then
35
- return rcall("HGET", jobKey, attributes[1])
36
- end
37
-
38
- local jobTs
39
- for _, ts in ipairs(rcall("HMGET", jobKey, unpack(attributes))) do
40
- if (ts) then
41
- jobTs = ts
42
- break
43
- end
44
- end
45
-
46
- return jobTs
47
- end
48
-
49
- local function cleanList(listKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, skipCheckLock)
50
- local jobs = rcall("LRANGE", listKey, rangeStart, rangeEnd)
51
- local deleted = {}
52
- local deletedCount = 0
53
- local jobTS
54
- local deletionMarker = ''
55
- local jobIdsLen = #jobs
56
- for i, job in ipairs(jobs) do
57
- if limit > 0 and deletedCount >= limit then
58
- break
59
- end
60
-
61
- local jobKey = jobKeyPrefix .. job
62
- if (skipCheckLock or rcall("EXISTS", jobKey .. ":lock") == 0) then
63
- -- Find the right timestamp of the job to compare to maxTimestamp:
64
- -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
65
- -- * processedOn represents when the job was last attempted, but it doesn't get populated until the job is first tried
66
- -- * timestamp is the original job submission time
67
- -- Fetch all three of these (in that order) and use the first one that is set so that we'll leave jobs that have been active within the grace period:
68
- jobTS = getTimestamp(jobKey, {"finishedOn", "processedOn", "timestamp"})
69
- if (not jobTS or jobTS < timestamp) then
70
- -- replace the entry with a deletion marker; the actual deletion will
71
- -- occur at the end of the script
72
- rcall("LSET", listKey, rangeEnd - jobIdsLen + i, deletionMarker)
73
- removeJob(job, true, jobKeyPrefix)
74
- deletedCount = deletedCount + 1
75
- table.insert(deleted, job)
76
- end
77
- end
78
- end
79
-
80
- rcall("LREM", listKey, 0, deletionMarker)
81
-
82
- return {deleted, deletedCount}
83
- end
84
-
85
- local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, attributes)
86
- local jobs = rcall("ZRANGE", setKey, rangeStart, rangeEnd)
87
- local deleted = {}
88
- local deletedCount = 0
89
- local jobTS
90
- for i, job in ipairs(jobs) do
91
- if limit > 0 and deletedCount >= limit then
92
- break
93
- end
94
-
95
- local jobKey = jobKeyPrefix .. job
96
- -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
97
- jobTS = getTimestamp(jobKey, attributes)
98
- if (not jobTS or jobTS < timestamp) then
99
- removeJob(job, true, jobKeyPrefix)
100
- deletedCount = deletedCount + 1
101
- table.insert(deleted, job)
102
- end
103
- end
104
-
105
- if(#deleted > 0) then
106
- for from, to in batches(#deleted, 7000) do
107
- rcall("ZREM", setKey, unpack(deleted, from, to))
108
- end
109
- end
110
-
111
- return {deleted, deletedCount}
112
- end
30
+ --- @include "includes/cleanList"
31
+ --- @include "includes/cleanSet"
113
32
 
114
33
  local result
115
34
  if ARGV[4] == "active" then
@@ -0,0 +1,44 @@
1
+ --[[
2
+ Function to clean job list.
3
+ Returns jobIds and deleted count number.
4
+ ]]
5
+
6
+ -- Includes
7
+ --- @include "getTimestamp"
8
+ --- @include "removeJob"
9
+
10
+ local function cleanList(listKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, skipCheckLock)
11
+ local jobs = rcall("LRANGE", listKey, rangeStart, rangeEnd)
12
+ local deleted = {}
13
+ local deletedCount = 0
14
+ local jobTS
15
+ local deletionMarker = ''
16
+ local jobIdsLen = #jobs
17
+ for i, job in ipairs(jobs) do
18
+ if limit > 0 and deletedCount >= limit then
19
+ break
20
+ end
21
+
22
+ local jobKey = jobKeyPrefix .. job
23
+ if (skipCheckLock or rcall("EXISTS", jobKey .. ":lock") == 0) then
24
+ -- Find the right timestamp of the job to compare to maxTimestamp:
25
+ -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
26
+ -- * processedOn represents when the job was last attempted, but it doesn't get populated until the job is first tried
27
+ -- * timestamp is the original job submission time
28
+ -- Fetch all three of these (in that order) and use the first one that is set so that we'll leave jobs that have been active within the grace period:
29
+ jobTS = getTimestamp(jobKey, {"finishedOn", "processedOn", "timestamp"})
30
+ if (not jobTS or jobTS < timestamp) then
31
+ -- replace the entry with a deletion marker; the actual deletion will
32
+ -- occur at the end of the script
33
+ rcall("LSET", listKey, rangeEnd - jobIdsLen + i, deletionMarker)
34
+ removeJob(job, true, jobKeyPrefix)
35
+ deletedCount = deletedCount + 1
36
+ table.insert(deleted, job)
37
+ end
38
+ end
39
+ end
40
+
41
+ rcall("LREM", listKey, 0, deletionMarker)
42
+
43
+ return {deleted, deletedCount}
44
+ end
@@ -0,0 +1,38 @@
1
+ --[[
2
+ Function to clean job set.
3
+ Returns jobIds and deleted count number.
4
+ ]]
5
+
6
+ -- Includes
7
+ --- @include "batches"
8
+ --- @include "getTimestamp"
9
+ --- @include "removeJob"
10
+
11
+ local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, attributes)
12
+ local jobs = rcall("ZRANGE", setKey, rangeStart, rangeEnd)
13
+ local deleted = {}
14
+ local deletedCount = 0
15
+ local jobTS
16
+ for i, job in ipairs(jobs) do
17
+ if limit > 0 and deletedCount >= limit then
18
+ break
19
+ end
20
+
21
+ local jobKey = jobKeyPrefix .. job
22
+ -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
23
+ jobTS = getTimestamp(jobKey, attributes)
24
+ if (not jobTS or jobTS < timestamp) then
25
+ removeJob(job, true, jobKeyPrefix)
26
+ deletedCount = deletedCount + 1
27
+ table.insert(deleted, job)
28
+ end
29
+ end
30
+
31
+ if(#deleted > 0) then
32
+ for from, to in batches(#deleted, 7000) do
33
+ rcall("ZREM", setKey, unpack(deleted, from, to))
34
+ end
35
+ end
36
+
37
+ return {deleted, deletedCount}
38
+ end
@@ -0,0 +1,19 @@
1
+ --[[
2
+ Function to get the latest saved timestamp.
3
+ ]]
4
+
5
+ local function getTimestamp(jobKey, attributes)
6
+ if #attributes == 1 then
7
+ return rcall("HGET", jobKey, attributes[1])
8
+ end
9
+
10
+ local jobTs
11
+ for _, ts in ipairs(rcall("HMGET", jobKey, unpack(attributes))) do
12
+ if (ts) then
13
+ jobTs = ts
14
+ break
15
+ end
16
+ end
17
+
18
+ return jobTs
19
+ end
@@ -1,4 +1,3 @@
1
-
2
1
  --[[
3
2
  Function to get ZSet items.
4
3
  ]]
@@ -95,7 +95,7 @@ export class ChildProcessor {
95
95
  // https://stackoverflow.com/questions/18391212/is-it-not-possible-to-stringify-an-error-using-json-stringify
96
96
  if (!('toJSON' in Error.prototype)) {
97
97
  Object.defineProperty(Error.prototype, 'toJSON', {
98
- value: function () {
98
+ value: function toJSONByBull() {
99
99
  const alt = {};
100
100
  const _this = this;
101
101
  Object.getOwnPropertyNames(_this).forEach(function (key) {
@@ -1 +1 @@
1
- {"version":3,"file":"child-processor.js","sourceRoot":"","sources":["../../../src/classes/child-processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"child-processor.js","sourceRoot":"","sources":["../../../src/classes/child-processor.ts"],"names":[],"mappings":"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"}
@@ -27,89 +27,8 @@ if limit > 0 then
27
27
  end
28
28
 
29
29
  -- Includes
30
- --- @include "includes/batches"
31
- --- @include "includes/removeJob"
32
-
33
- local function getTimestamp(jobKey, attributes)
34
- if #attributes == 1 then
35
- return rcall("HGET", jobKey, attributes[1])
36
- end
37
-
38
- local jobTs
39
- for _, ts in ipairs(rcall("HMGET", jobKey, unpack(attributes))) do
40
- if (ts) then
41
- jobTs = ts
42
- break
43
- end
44
- end
45
-
46
- return jobTs
47
- end
48
-
49
- local function cleanList(listKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, skipCheckLock)
50
- local jobs = rcall("LRANGE", listKey, rangeStart, rangeEnd)
51
- local deleted = {}
52
- local deletedCount = 0
53
- local jobTS
54
- local deletionMarker = ''
55
- local jobIdsLen = #jobs
56
- for i, job in ipairs(jobs) do
57
- if limit > 0 and deletedCount >= limit then
58
- break
59
- end
60
-
61
- local jobKey = jobKeyPrefix .. job
62
- if (skipCheckLock or rcall("EXISTS", jobKey .. ":lock") == 0) then
63
- -- Find the right timestamp of the job to compare to maxTimestamp:
64
- -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
65
- -- * processedOn represents when the job was last attempted, but it doesn't get populated until the job is first tried
66
- -- * timestamp is the original job submission time
67
- -- Fetch all three of these (in that order) and use the first one that is set so that we'll leave jobs that have been active within the grace period:
68
- jobTS = getTimestamp(jobKey, {"finishedOn", "processedOn", "timestamp"})
69
- if (not jobTS or jobTS < timestamp) then
70
- -- replace the entry with a deletion marker; the actual deletion will
71
- -- occur at the end of the script
72
- rcall("LSET", listKey, rangeEnd - jobIdsLen + i, deletionMarker)
73
- removeJob(job, true, jobKeyPrefix)
74
- deletedCount = deletedCount + 1
75
- table.insert(deleted, job)
76
- end
77
- end
78
- end
79
-
80
- rcall("LREM", listKey, 0, deletionMarker)
81
-
82
- return {deleted, deletedCount}
83
- end
84
-
85
- local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, attributes)
86
- local jobs = rcall("ZRANGE", setKey, rangeStart, rangeEnd)
87
- local deleted = {}
88
- local deletedCount = 0
89
- local jobTS
90
- for i, job in ipairs(jobs) do
91
- if limit > 0 and deletedCount >= limit then
92
- break
93
- end
94
-
95
- local jobKey = jobKeyPrefix .. job
96
- -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
97
- jobTS = getTimestamp(jobKey, attributes)
98
- if (not jobTS or jobTS < timestamp) then
99
- removeJob(job, true, jobKeyPrefix)
100
- deletedCount = deletedCount + 1
101
- table.insert(deleted, job)
102
- end
103
- end
104
-
105
- if(#deleted > 0) then
106
- for from, to in batches(#deleted, 7000) do
107
- rcall("ZREM", setKey, unpack(deleted, from, to))
108
- end
109
- end
110
-
111
- return {deleted, deletedCount}
112
- end
30
+ --- @include "includes/cleanList"
31
+ --- @include "includes/cleanSet"
113
32
 
114
33
  local result
115
34
  if ARGV[4] == "active" then
@@ -0,0 +1,44 @@
1
+ --[[
2
+ Function to clean job list.
3
+ Returns jobIds and deleted count number.
4
+ ]]
5
+
6
+ -- Includes
7
+ --- @include "getTimestamp"
8
+ --- @include "removeJob"
9
+
10
+ local function cleanList(listKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, skipCheckLock)
11
+ local jobs = rcall("LRANGE", listKey, rangeStart, rangeEnd)
12
+ local deleted = {}
13
+ local deletedCount = 0
14
+ local jobTS
15
+ local deletionMarker = ''
16
+ local jobIdsLen = #jobs
17
+ for i, job in ipairs(jobs) do
18
+ if limit > 0 and deletedCount >= limit then
19
+ break
20
+ end
21
+
22
+ local jobKey = jobKeyPrefix .. job
23
+ if (skipCheckLock or rcall("EXISTS", jobKey .. ":lock") == 0) then
24
+ -- Find the right timestamp of the job to compare to maxTimestamp:
25
+ -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
26
+ -- * processedOn represents when the job was last attempted, but it doesn't get populated until the job is first tried
27
+ -- * timestamp is the original job submission time
28
+ -- Fetch all three of these (in that order) and use the first one that is set so that we'll leave jobs that have been active within the grace period:
29
+ jobTS = getTimestamp(jobKey, {"finishedOn", "processedOn", "timestamp"})
30
+ if (not jobTS or jobTS < timestamp) then
31
+ -- replace the entry with a deletion marker; the actual deletion will
32
+ -- occur at the end of the script
33
+ rcall("LSET", listKey, rangeEnd - jobIdsLen + i, deletionMarker)
34
+ removeJob(job, true, jobKeyPrefix)
35
+ deletedCount = deletedCount + 1
36
+ table.insert(deleted, job)
37
+ end
38
+ end
39
+ end
40
+
41
+ rcall("LREM", listKey, 0, deletionMarker)
42
+
43
+ return {deleted, deletedCount}
44
+ end
@@ -0,0 +1,38 @@
1
+ --[[
2
+ Function to clean job set.
3
+ Returns jobIds and deleted count number.
4
+ ]]
5
+
6
+ -- Includes
7
+ --- @include "batches"
8
+ --- @include "getTimestamp"
9
+ --- @include "removeJob"
10
+
11
+ local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, attributes)
12
+ local jobs = rcall("ZRANGE", setKey, rangeStart, rangeEnd)
13
+ local deleted = {}
14
+ local deletedCount = 0
15
+ local jobTS
16
+ for i, job in ipairs(jobs) do
17
+ if limit > 0 and deletedCount >= limit then
18
+ break
19
+ end
20
+
21
+ local jobKey = jobKeyPrefix .. job
22
+ -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed
23
+ jobTS = getTimestamp(jobKey, attributes)
24
+ if (not jobTS or jobTS < timestamp) then
25
+ removeJob(job, true, jobKeyPrefix)
26
+ deletedCount = deletedCount + 1
27
+ table.insert(deleted, job)
28
+ end
29
+ end
30
+
31
+ if(#deleted > 0) then
32
+ for from, to in batches(#deleted, 7000) do
33
+ rcall("ZREM", setKey, unpack(deleted, from, to))
34
+ end
35
+ end
36
+
37
+ return {deleted, deletedCount}
38
+ end
@@ -0,0 +1,19 @@
1
+ --[[
2
+ Function to get the latest saved timestamp.
3
+ ]]
4
+
5
+ local function getTimestamp(jobKey, attributes)
6
+ if #attributes == 1 then
7
+ return rcall("HGET", jobKey, attributes[1])
8
+ end
9
+
10
+ local jobTs
11
+ for _, ts in ipairs(rcall("HMGET", jobKey, unpack(attributes))) do
12
+ if (ts) then
13
+ jobTs = ts
14
+ break
15
+ end
16
+ end
17
+
18
+ return jobTs
19
+ end
@@ -1,4 +1,3 @@
1
-
2
1
  --[[
3
2
  Function to get ZSet items.
4
3
  ]]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bullmq",
3
- "version": "1.85.3",
3
+ "version": "1.85.4",
4
4
  "description": "Queue for messages and jobs based on Redis",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",