bullmq 3.15.7 → 3.16.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.
- package/dist/cjs/classes/queue.js +19 -2
- package/dist/cjs/classes/queue.js.map +1 -1
- package/dist/cjs/commands/includes/moveJobFromWaitToActive.lua +22 -10
- package/dist/cjs/commands/includes/pushBackJobWithPriority.lua +17 -0
- package/dist/cjs/commands/moveJobFromActiveToWait-9.lua +2 -2
- package/dist/cjs/scripts/moveJobFromActiveToWait-9.js +6 -5
- package/dist/cjs/scripts/moveJobFromActiveToWait-9.js.map +1 -1
- package/dist/cjs/scripts/moveToActive-9.js +30 -9
- package/dist/cjs/scripts/moveToActive-9.js.map +1 -1
- package/dist/cjs/scripts/moveToFinished-12.js +30 -9
- package/dist/cjs/scripts/moveToFinished-12.js.map +1 -1
- package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/cjs/utils.js +23 -1
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/classes/queue.d.ts +8 -0
- package/dist/esm/classes/queue.js +20 -3
- package/dist/esm/classes/queue.js.map +1 -1
- package/dist/esm/commands/includes/moveJobFromWaitToActive.lua +22 -10
- package/dist/esm/commands/includes/pushBackJobWithPriority.lua +17 -0
- package/dist/esm/commands/moveJobFromActiveToWait-9.lua +2 -2
- package/dist/esm/interfaces/queue-options.d.ts +9 -0
- package/dist/esm/scripts/moveJobFromActiveToWait-9.js +6 -5
- package/dist/esm/scripts/moveJobFromActiveToWait-9.js.map +1 -1
- package/dist/esm/scripts/moveToActive-9.js +30 -9
- package/dist/esm/scripts/moveToActive-9.js.map +1 -1
- package/dist/esm/scripts/moveToFinished-12.js +30 -9
- package/dist/esm/scripts/moveToFinished-12.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/utils.d.ts +4 -0
- package/dist/esm/utils.js +21 -0
- package/dist/esm/utils.js.map +1 -1
- package/package.json +16 -1
package/dist/cjs/utils.js
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.QUEUE_EVENT_SUFFIX = exports.WORKER_SUFFIX = exports.errorToJSON = exports.parseObjectValues = exports.isRedisVersionLowerThan = exports.childSend = exports.asyncSend = exports.isNotConnectionError = exports.DELAY_TIME_1 = exports.DELAY_TIME_5 = exports.clientCommandMessageReg = exports.getParentKey = exports.removeAllQueueData = exports.isRedisCluster = exports.isRedisInstance = exports.delay = exports.array2obj = exports.isEmpty = exports.lengthInUtf8Bytes = exports.tryCatch = exports.errorObject = void 0;
|
3
|
+
exports.readPackageJson = exports.QUEUE_EVENT_SUFFIX = exports.WORKER_SUFFIX = exports.errorToJSON = exports.parseObjectValues = exports.isRedisVersionLowerThan = exports.childSend = exports.asyncSend = exports.isNotConnectionError = exports.DELAY_TIME_1 = exports.DELAY_TIME_5 = exports.clientCommandMessageReg = exports.getParentKey = exports.removeAllQueueData = exports.isRedisCluster = exports.isRedisInstance = exports.delay = exports.array2obj = exports.isEmpty = exports.lengthInUtf8Bytes = exports.tryCatch = exports.errorObject = void 0;
|
4
4
|
const ioredis_1 = require("ioredis");
|
5
5
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
6
6
|
// @ts-ignore
|
7
7
|
const utils_1 = require("ioredis/built/utils");
|
8
8
|
const semver = require("semver");
|
9
|
+
const path_1 = require("path");
|
10
|
+
const fs_1 = require("fs");
|
9
11
|
exports.errorObject = { value: null };
|
10
12
|
function tryCatch(fn, ctx, args) {
|
11
13
|
try {
|
@@ -149,4 +151,24 @@ const errorToJSON = (value) => {
|
|
149
151
|
exports.errorToJSON = errorToJSON;
|
150
152
|
exports.WORKER_SUFFIX = '';
|
151
153
|
exports.QUEUE_EVENT_SUFFIX = ':qe';
|
154
|
+
const readPackageJson = () => {
|
155
|
+
const packageJsonPossiblePaths = [
|
156
|
+
(0, path_1.join)(__dirname, '../package.json'),
|
157
|
+
(0, path_1.join)(__dirname, '../../package.json'),
|
158
|
+
(0, path_1.join)(__dirname, '../../../package.json'),
|
159
|
+
];
|
160
|
+
for (const path of packageJsonPossiblePaths) {
|
161
|
+
try {
|
162
|
+
return JSON.parse((0, fs_1.readFileSync)(path, 'utf-8'));
|
163
|
+
}
|
164
|
+
catch (err) {
|
165
|
+
if (err.code === 'ENOENT') {
|
166
|
+
continue;
|
167
|
+
}
|
168
|
+
console.log(err);
|
169
|
+
}
|
170
|
+
}
|
171
|
+
return { name: 'bullmq', version: '0.0.0' };
|
172
|
+
};
|
173
|
+
exports.readPackageJson = readPackageJson;
|
152
174
|
//# sourceMappingURL=utils.js.map
|
package/dist/cjs/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AACzC,6DAA6D;AAC7D,aAAa;AACb,+CAAkE;AAClE,iCAAiC;
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
@@ -70,6 +70,7 @@ export interface QueueListener<DataType, ResultType, NameType extends string> ex
|
|
70
70
|
export declare class Queue<DataType = any, ResultType = any, NameType extends string = string> extends QueueGetters<DataType, ResultType, NameType> {
|
71
71
|
token: string;
|
72
72
|
jobsOpts: BaseJobOptions;
|
73
|
+
opts: QueueOptions;
|
73
74
|
private _repeat?;
|
74
75
|
constructor(name: string, opts?: QueueOptions, Connection?: typeof RedisConnection);
|
75
76
|
emit<U extends keyof QueueListener<DataType, ResultType, NameType>>(event: U, ...args: Parameters<QueueListener<DataType, ResultType, NameType>[U]>): boolean;
|
@@ -80,6 +81,13 @@ export declare class Queue<DataType = any, ResultType = any, NameType extends st
|
|
80
81
|
* Returns this instance current default job options.
|
81
82
|
*/
|
82
83
|
get defaultJobOptions(): JobsOptions;
|
84
|
+
get metaValues(): Record<string, string | number>;
|
85
|
+
/**
|
86
|
+
* Get library version.
|
87
|
+
*
|
88
|
+
* @returns the content of the meta.library field.
|
89
|
+
*/
|
90
|
+
getVersion(): Promise<string>;
|
83
91
|
get repeat(): Promise<Repeat>;
|
84
92
|
/**
|
85
93
|
* Adds a new job to the queue.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { get } from 'lodash';
|
2
2
|
import { v4 } from 'uuid';
|
3
|
-
import { isRedisInstance } from '../utils';
|
3
|
+
import { isRedisInstance, readPackageJson } from '../utils';
|
4
4
|
import { QueueGetters } from './queue-getters';
|
5
5
|
import { Repeat } from './repeat';
|
6
6
|
/**
|
@@ -18,8 +18,8 @@ export class Queue extends QueueGetters {
|
|
18
18
|
this.jobsOpts = (_a = get(opts, 'defaultJobOptions')) !== null && _a !== void 0 ? _a : {};
|
19
19
|
this.waitUntilReady()
|
20
20
|
.then(client => {
|
21
|
-
if (!this.closing) {
|
22
|
-
client.
|
21
|
+
if (!this.closing && !(opts === null || opts === void 0 ? void 0 : opts.skipMetasUpdate)) {
|
22
|
+
return client.hmset(this.keys.meta, this.metaValues);
|
23
23
|
}
|
24
24
|
})
|
25
25
|
.catch(err => {
|
@@ -48,6 +48,23 @@ export class Queue extends QueueGetters {
|
|
48
48
|
get defaultJobOptions() {
|
49
49
|
return Object.assign({}, this.jobsOpts);
|
50
50
|
}
|
51
|
+
get metaValues() {
|
52
|
+
var _a, _b, _c, _d;
|
53
|
+
const { name, version } = readPackageJson();
|
54
|
+
return {
|
55
|
+
'opts.maxLenEvents': (_d = (_c = (_b = (_a = this.opts) === null || _a === void 0 ? void 0 : _a.streams) === null || _b === void 0 ? void 0 : _b.events) === null || _c === void 0 ? void 0 : _c.maxLen) !== null && _d !== void 0 ? _d : 10000,
|
56
|
+
version: `${name}:${version}`,
|
57
|
+
};
|
58
|
+
}
|
59
|
+
/**
|
60
|
+
* Get library version.
|
61
|
+
*
|
62
|
+
* @returns the content of the meta.library field.
|
63
|
+
*/
|
64
|
+
async getVersion() {
|
65
|
+
const client = await this.client;
|
66
|
+
return await client.hget(this.keys.meta, 'version');
|
67
|
+
}
|
51
68
|
get repeat() {
|
52
69
|
return new Promise(async (resolve) => {
|
53
70
|
if (!this._repeat) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/classes/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAS1B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/classes/queue.ts"],"names":[],"mappings":"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"}
|
@@ -17,31 +17,44 @@
|
|
17
17
|
opts - limiter
|
18
18
|
]]
|
19
19
|
|
20
|
+
-- Includes
|
21
|
+
--- @include "pushBackJobWithPriority"
|
22
|
+
|
20
23
|
local function moveJobFromWaitToActive(keys, keyPrefix, targetKey, jobId, processedOn,
|
21
24
|
maxJobs, expireTime, opts)
|
25
|
+
rcall("ZREM", keys[3], jobId) -- remove from priority
|
26
|
+
local jobKey = keyPrefix .. jobId
|
27
|
+
|
22
28
|
-- Check if we need to perform rate limiting.
|
23
29
|
if maxJobs then
|
24
30
|
local rateLimiterKey = keys[6];
|
25
|
-
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
26
|
-
|
27
|
-
if jobCounter == 1 then
|
28
|
-
local limiterDuration = opts['limiter'] and opts['limiter']['duration']
|
29
|
-
local integerDuration = math.floor(math.abs(limiterDuration))
|
30
|
-
rcall("PEXPIRE", rateLimiterKey, integerDuration)
|
31
|
-
end
|
32
31
|
|
33
32
|
-- check if we passed rate limit, we need to remove the job and return expireTime
|
34
33
|
if expireTime > 0 then
|
35
34
|
-- remove from active queue and add back to the wait list
|
36
35
|
rcall("LREM", keys[2], 1, jobId)
|
37
|
-
|
36
|
+
|
37
|
+
local priority = tonumber(rcall("HGET", jobKey, "priority")) or 0
|
38
|
+
|
39
|
+
if priority > 0 then
|
40
|
+
pushBackJobWithPriority(keys[3], priority, targetKey, jobId)
|
41
|
+
else
|
42
|
+
rcall("RPUSH", targetKey, jobId)
|
43
|
+
end
|
38
44
|
|
39
45
|
-- Return when we can process more jobs
|
40
46
|
return {0, 0, expireTime, 0}
|
41
47
|
end
|
48
|
+
|
49
|
+
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
50
|
+
|
51
|
+
if jobCounter == 1 then
|
52
|
+
local limiterDuration = opts['limiter'] and opts['limiter']['duration']
|
53
|
+
local integerDuration = math.floor(math.abs(limiterDuration))
|
54
|
+
rcall("PEXPIRE", rateLimiterKey, integerDuration)
|
55
|
+
end
|
42
56
|
end
|
43
57
|
|
44
|
-
local jobKey = keyPrefix .. jobId
|
45
58
|
local lockKey = jobKey .. ':lock'
|
46
59
|
|
47
60
|
-- get a lock
|
@@ -49,7 +62,6 @@ local function moveJobFromWaitToActive(keys, keyPrefix, targetKey, jobId, proces
|
|
49
62
|
rcall("SET", lockKey, opts['token'], "PX", opts['lockDuration'])
|
50
63
|
end
|
51
64
|
|
52
|
-
rcall("ZREM", keys[3], jobId) -- remove from priority
|
53
65
|
rcall("XADD", keys[4], "*", "event", "active", "jobId", jobId, "prev", "waiting")
|
54
66
|
rcall("HSET", jobKey, "processedOn", processedOn)
|
55
67
|
rcall("HINCRBY", jobKey, "attemptsMade", 1)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
--[[
|
2
|
+
Function to add push back job considering priority in front of same prioritized jobs.
|
3
|
+
]]
|
4
|
+
local function pushBackJobWithPriority(priorityKey, priority, targetKey, jobId)
|
5
|
+
rcall("ZADD", priorityKey, priority, jobId)
|
6
|
+
local count = rcall("ZCOUNT", priorityKey, 0, priority-1)
|
7
|
+
|
8
|
+
local len = rcall("LLEN", targetKey)
|
9
|
+
local id = rcall("LINDEX", targetKey, len - count)
|
10
|
+
rcall("ZADD", priorityKey, priority, jobId)
|
11
|
+
|
12
|
+
if id then
|
13
|
+
rcall("LINSERT", targetKey, "BEFORE", id, jobId)
|
14
|
+
else
|
15
|
+
rcall("RPUSH", targetKey, jobId)
|
16
|
+
end
|
17
|
+
end
|
@@ -19,7 +19,7 @@
|
|
19
19
|
local rcall = redis.call
|
20
20
|
|
21
21
|
-- Includes
|
22
|
-
--- @include "includes/
|
22
|
+
--- @include "includes/pushBackJobWithPriority"
|
23
23
|
--- @include "includes/getTargetQueueList"
|
24
24
|
|
25
25
|
local jobId = ARGV[1]
|
@@ -38,7 +38,7 @@ if lockToken == token and pttl > 0 then
|
|
38
38
|
local priority = tonumber(rcall("HGET", ARGV[3], "priority")) or 0
|
39
39
|
|
40
40
|
if priority > 0 then
|
41
|
-
|
41
|
+
pushBackJobWithPriority(KEYS[8], priority, target, jobId)
|
42
42
|
else
|
43
43
|
rcall("RPUSH", target, jobId)
|
44
44
|
end
|
@@ -45,6 +45,15 @@ export interface QueueOptions extends QueueBaseOptions {
|
|
45
45
|
maxLen: number;
|
46
46
|
};
|
47
47
|
};
|
48
|
+
/**
|
49
|
+
* Skip Meta update.
|
50
|
+
*
|
51
|
+
* If true, the queue will not update the metadata of the queue.
|
52
|
+
* Useful for read-only systems that do should not update the metadata.
|
53
|
+
*
|
54
|
+
* @defaultValue false
|
55
|
+
*/
|
56
|
+
skipMetasUpdate?: boolean;
|
48
57
|
settings?: AdvancedRepeatOptions;
|
49
58
|
}
|
50
59
|
/**
|
@@ -17,13 +17,14 @@ const content = `--[[
|
|
17
17
|
local rcall = redis.call
|
18
18
|
-- Includes
|
19
19
|
--[[
|
20
|
-
Function to add job considering priority.
|
20
|
+
Function to add push back job considering priority in front of same prioritized jobs.
|
21
21
|
]]
|
22
|
-
local function
|
22
|
+
local function pushBackJobWithPriority(priorityKey, priority, targetKey, jobId)
|
23
23
|
rcall("ZADD", priorityKey, priority, jobId)
|
24
|
-
local count = rcall("ZCOUNT", priorityKey, 0, priority)
|
24
|
+
local count = rcall("ZCOUNT", priorityKey, 0, priority-1)
|
25
25
|
local len = rcall("LLEN", targetKey)
|
26
|
-
local id = rcall("LINDEX", targetKey, len -
|
26
|
+
local id = rcall("LINDEX", targetKey, len - count)
|
27
|
+
rcall("ZADD", priorityKey, priority, jobId)
|
27
28
|
if id then
|
28
29
|
rcall("LINSERT", targetKey, "BEFORE", id, jobId)
|
29
30
|
else
|
@@ -53,7 +54,7 @@ if lockToken == token and pttl > 0 then
|
|
53
54
|
rcall("SREM", KEYS[3], jobId)
|
54
55
|
local priority = tonumber(rcall("HGET", ARGV[3], "priority")) or 0
|
55
56
|
if priority > 0 then
|
56
|
-
|
57
|
+
pushBackJobWithPriority(KEYS[8], priority, target, jobId)
|
57
58
|
else
|
58
59
|
rcall("RPUSH", target, jobId)
|
59
60
|
end
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"moveJobFromActiveToWait-9.js","sourceRoot":"","sources":["../../../src/scripts/moveJobFromActiveToWait-9.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"moveJobFromActiveToWait-9.js","sourceRoot":"","sources":["../../../src/scripts/moveJobFromActiveToWait-9.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEf,CAAC;AACF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,yBAAyB;IAC/B,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -43,33 +43,54 @@ local rcall = redis.call
|
|
43
43
|
opts - lockDuration
|
44
44
|
opts - limiter
|
45
45
|
]]
|
46
|
+
-- Includes
|
47
|
+
--[[
|
48
|
+
Function to add push back job considering priority in front of same prioritized jobs.
|
49
|
+
]]
|
50
|
+
local function pushBackJobWithPriority(priorityKey, priority, targetKey, jobId)
|
51
|
+
rcall("ZADD", priorityKey, priority, jobId)
|
52
|
+
local count = rcall("ZCOUNT", priorityKey, 0, priority-1)
|
53
|
+
local len = rcall("LLEN", targetKey)
|
54
|
+
local id = rcall("LINDEX", targetKey, len - count)
|
55
|
+
rcall("ZADD", priorityKey, priority, jobId)
|
56
|
+
if id then
|
57
|
+
rcall("LINSERT", targetKey, "BEFORE", id, jobId)
|
58
|
+
else
|
59
|
+
rcall("RPUSH", targetKey, jobId)
|
60
|
+
end
|
61
|
+
end
|
46
62
|
local function moveJobFromWaitToActive(keys, keyPrefix, targetKey, jobId, processedOn,
|
47
63
|
maxJobs, expireTime, opts)
|
64
|
+
rcall("ZREM", keys[3], jobId) -- remove from priority
|
65
|
+
local jobKey = keyPrefix .. jobId
|
48
66
|
-- Check if we need to perform rate limiting.
|
49
67
|
if maxJobs then
|
50
68
|
local rateLimiterKey = keys[6];
|
51
|
-
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
52
|
-
if jobCounter == 1 then
|
53
|
-
local limiterDuration = opts['limiter'] and opts['limiter']['duration']
|
54
|
-
local integerDuration = math.floor(math.abs(limiterDuration))
|
55
|
-
rcall("PEXPIRE", rateLimiterKey, integerDuration)
|
56
|
-
end
|
57
69
|
-- check if we passed rate limit, we need to remove the job and return expireTime
|
58
70
|
if expireTime > 0 then
|
59
71
|
-- remove from active queue and add back to the wait list
|
60
72
|
rcall("LREM", keys[2], 1, jobId)
|
61
|
-
rcall("
|
73
|
+
local priority = tonumber(rcall("HGET", jobKey, "priority")) or 0
|
74
|
+
if priority > 0 then
|
75
|
+
pushBackJobWithPriority(keys[3], priority, targetKey, jobId)
|
76
|
+
else
|
77
|
+
rcall("RPUSH", targetKey, jobId)
|
78
|
+
end
|
62
79
|
-- Return when we can process more jobs
|
63
80
|
return {0, 0, expireTime, 0}
|
64
81
|
end
|
82
|
+
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
83
|
+
if jobCounter == 1 then
|
84
|
+
local limiterDuration = opts['limiter'] and opts['limiter']['duration']
|
85
|
+
local integerDuration = math.floor(math.abs(limiterDuration))
|
86
|
+
rcall("PEXPIRE", rateLimiterKey, integerDuration)
|
87
|
+
end
|
65
88
|
end
|
66
|
-
local jobKey = keyPrefix .. jobId
|
67
89
|
local lockKey = jobKey .. ':lock'
|
68
90
|
-- get a lock
|
69
91
|
if opts['token'] ~= "0" then
|
70
92
|
rcall("SET", lockKey, opts['token'], "PX", opts['lockDuration'])
|
71
93
|
end
|
72
|
-
rcall("ZREM", keys[3], jobId) -- remove from priority
|
73
94
|
rcall("XADD", keys[4], "*", "event", "active", "jobId", jobId, "prev", "waiting")
|
74
95
|
rcall("HSET", jobKey, "processedOn", processedOn)
|
75
96
|
rcall("HINCRBY", jobKey, "attemptsMade", 1)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"moveToActive-9.js","sourceRoot":"","sources":["../../../src/scripts/moveToActive-9.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"moveToActive-9.js","sourceRoot":"","sources":["../../../src/scripts/moveToActive-9.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiOf,CAAC;AACF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,cAAc;IACpB,OAAO;IACP,IAAI,EAAE,CAAC;CACR,CAAC"}
|
@@ -127,33 +127,54 @@ end
|
|
127
127
|
opts - lockDuration
|
128
128
|
opts - limiter
|
129
129
|
]]
|
130
|
+
-- Includes
|
131
|
+
--[[
|
132
|
+
Function to add push back job considering priority in front of same prioritized jobs.
|
133
|
+
]]
|
134
|
+
local function pushBackJobWithPriority(priorityKey, priority, targetKey, jobId)
|
135
|
+
rcall("ZADD", priorityKey, priority, jobId)
|
136
|
+
local count = rcall("ZCOUNT", priorityKey, 0, priority-1)
|
137
|
+
local len = rcall("LLEN", targetKey)
|
138
|
+
local id = rcall("LINDEX", targetKey, len - count)
|
139
|
+
rcall("ZADD", priorityKey, priority, jobId)
|
140
|
+
if id then
|
141
|
+
rcall("LINSERT", targetKey, "BEFORE", id, jobId)
|
142
|
+
else
|
143
|
+
rcall("RPUSH", targetKey, jobId)
|
144
|
+
end
|
145
|
+
end
|
130
146
|
local function moveJobFromWaitToActive(keys, keyPrefix, targetKey, jobId, processedOn,
|
131
147
|
maxJobs, expireTime, opts)
|
148
|
+
rcall("ZREM", keys[3], jobId) -- remove from priority
|
149
|
+
local jobKey = keyPrefix .. jobId
|
132
150
|
-- Check if we need to perform rate limiting.
|
133
151
|
if maxJobs then
|
134
152
|
local rateLimiterKey = keys[6];
|
135
|
-
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
136
|
-
if jobCounter == 1 then
|
137
|
-
local limiterDuration = opts['limiter'] and opts['limiter']['duration']
|
138
|
-
local integerDuration = math.floor(math.abs(limiterDuration))
|
139
|
-
rcall("PEXPIRE", rateLimiterKey, integerDuration)
|
140
|
-
end
|
141
153
|
-- check if we passed rate limit, we need to remove the job and return expireTime
|
142
154
|
if expireTime > 0 then
|
143
155
|
-- remove from active queue and add back to the wait list
|
144
156
|
rcall("LREM", keys[2], 1, jobId)
|
145
|
-
rcall("
|
157
|
+
local priority = tonumber(rcall("HGET", jobKey, "priority")) or 0
|
158
|
+
if priority > 0 then
|
159
|
+
pushBackJobWithPriority(keys[3], priority, targetKey, jobId)
|
160
|
+
else
|
161
|
+
rcall("RPUSH", targetKey, jobId)
|
162
|
+
end
|
146
163
|
-- Return when we can process more jobs
|
147
164
|
return {0, 0, expireTime, 0}
|
148
165
|
end
|
166
|
+
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
167
|
+
if jobCounter == 1 then
|
168
|
+
local limiterDuration = opts['limiter'] and opts['limiter']['duration']
|
169
|
+
local integerDuration = math.floor(math.abs(limiterDuration))
|
170
|
+
rcall("PEXPIRE", rateLimiterKey, integerDuration)
|
171
|
+
end
|
149
172
|
end
|
150
|
-
local jobKey = keyPrefix .. jobId
|
151
173
|
local lockKey = jobKey .. ':lock'
|
152
174
|
-- get a lock
|
153
175
|
if opts['token'] ~= "0" then
|
154
176
|
rcall("SET", lockKey, opts['token'], "PX", opts['lockDuration'])
|
155
177
|
end
|
156
|
-
rcall("ZREM", keys[3], jobId) -- remove from priority
|
157
178
|
rcall("XADD", keys[4], "*", "event", "active", "jobId", jobId, "prev", "waiting")
|
158
179
|
rcall("HSET", jobKey, "processedOn", processedOn)
|
159
180
|
rcall("HINCRBY", jobKey, "attemptsMade", 1)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"moveToFinished-12.js","sourceRoot":"","sources":["../../../src/scripts/moveToFinished-12.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG
|
1
|
+
{"version":3,"file":"moveToFinished-12.js","sourceRoot":"","sources":["../../../src/scripts/moveToFinished-12.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAokBf,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,OAAO;IACP,IAAI,EAAE,EAAE;CACT,CAAC"}
|