From 38e0708d12e52373b9882707b2676ad7f06070a4 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 29 Mar 2023 10:14:42 +0200 Subject: [PATCH 001/322] chore(asyncfifoqueue): add TODO comment --- src/classes/async-fifo-queue.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/classes/async-fifo-queue.ts b/src/classes/async-fifo-queue.ts index 28c0ee7911..97b1958071 100644 --- a/src/classes/async-fifo-queue.ts +++ b/src/classes/async-fifo-queue.ts @@ -4,6 +4,11 @@ * A minimal FIFO queue for asyncrhonous operations. Allows adding asynchronous operations * and consume them in the order they are resolved. * + * TODO: Optimize using a linked list for the queue instead of an array. + * Current implementation requires memory copies when shifting the queue. + * For a linked linked implementation, we can exploit the fact that the + * maximum number of elements in the list will never exceen the concurrency factor + * of the worker, so the nodes of the list could be pre-allocated. */ export class AsyncFifoQueue { From 4ea9642193e3a9ac9852314a6e3f21558eaa267b Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 29 Mar 2023 10:19:03 +0200 Subject: [PATCH 002/322] chore(python): update README --- python/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/README.md b/python/README.md index 5741870028..068dc7cbd6 100644 --- a/python/README.md +++ b/python/README.md @@ -16,12 +16,12 @@ have been ported so far: - [ ] Job priority. - [ ] Repeatable. -- [ ] Workers +- [x] Workers - [ ] Job events. - [ ] Job progress. - [ ] Job retries. - [ ] Job backoff. -- [ ] Getters. +- [x] Getters. ## Installation From 2e06bca3615aafecd725d093045a510a67053fed Mon Sep 17 00:00:00 2001 From: Andreas Thomas Date: Mon, 27 Mar 2023 13:24:26 +0200 Subject: [PATCH 003/322] feat(upstash): don't throw an error when detecting an upstash host Upstash is currently rolling out redis streams to all regions and will be compatible with bullmq. --- src/classes/redis-connection.ts | 16 ----------- tests/test_connection.ts | 48 --------------------------------- 2 files changed, 64 deletions(-) diff --git a/src/classes/redis-connection.ts b/src/classes/redis-connection.ts index 366e095d1f..1cbecdf391 100644 --- a/src/classes/redis-connection.ts +++ b/src/classes/redis-connection.ts @@ -22,8 +22,6 @@ const deprecationMessage = [ 'On the next versions having this settings will throw an exception', ].join(' '); -const upstashMessage = 'BullMQ: Upstash is not compatible with BullMQ.'; - export interface RawCommand { content: string; name: string; @@ -68,8 +66,6 @@ export class RedisConnection extends EventEmitter { if (this.blocking) { this.opts.maxRetriesPerRequest = null; } - - this.checkUpstashHost(this.opts.host); } else { this._client = opts; @@ -87,11 +83,8 @@ export class RedisConnection extends EventEmitter { (node: { host: string } | string) => typeof node == 'string' ? node : node.host, ); - this.checkUpstashHost(hosts); } else { this.opts = this._client.options; - - this.checkUpstashHost(this.opts.host); } this.checkBlockingOptions(deprecationMessage, this.opts); @@ -119,15 +112,6 @@ export class RedisConnection extends EventEmitter { } } - private checkUpstashHost(host: string[] | string | undefined) { - const includesUpstash = Array.isArray(host) - ? host.some(node => node.includes('upstash.io')) - : host?.includes('upstash.io'); - if (includesUpstash) { - throw new Error(upstashMessage); - } - } - /** * Waits for a redis client to be ready. * @param redis - client diff --git a/tests/test_connection.ts b/tests/test_connection.ts index 2f38b8e7ec..452de8ee20 100644 --- a/tests/test_connection.ts +++ b/tests/test_connection.ts @@ -109,54 +109,6 @@ describe('connection', () => { }); }); - describe('when host belongs to Upstash', async () => { - it('throws an error', async () => { - const opts = { - connection: { - host: 'https://upstash.io', - }, - }; - - expect(() => new QueueBase(queueName, opts)).to.throw( - 'BullMQ: Upstash is not compatible with BullMQ.', - ); - }); - - describe('when using Cluster instance', async () => { - it('throws an error', async () => { - const connection = new IORedis.Cluster( - [ - { - host: 'https://upstash.io', - }, - ], - { natMap: {} }, - ); - - expect(() => new QueueBase(queueName, { connection })).to.throw( - 'BullMQ: Upstash is not compatible with BullMQ.', - ); - await connection.disconnect(); - }); - - describe('when using nodes provides an array of strings as hosts', async () => { - it('throws an error', async () => { - const connection = new IORedis.Cluster( - ['localhost', 'https://upstash.io'], - { - natMap: {}, - }, - ); - - expect(() => new QueueBase(queueName, { connection })).to.throw( - 'BullMQ: Upstash is not compatible with BullMQ.', - ); - await connection.disconnect(); - }); - }); - }); - }); - it('should recover from a connection loss', async () => { let processor; From 1a3113b97106eebd63883dc8865b7c6a3f028765 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 17 Apr 2023 21:21:43 +0000 Subject: [PATCH 004/322] chore(release): 3.11.0 [skip ci] # [3.11.0](https://github.com/taskforcesh/bullmq/compare/v3.10.4...v3.11.0) (2023-04-17) ### Bug Fixes * **python:** correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([ef0c5d6](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) ### Features * **python:** add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([46d6f94](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) * **python:** improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([ec7c49e](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) * **upstash:** don't throw an error when detecting an upstash host ([2e06bca](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) --- docs/gitbook/changelog.md | 14 ++++++++++++++ package.json | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index ac20afc619..a23a022afd 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,17 @@ +# [3.11.0](https://github.com/taskforcesh/bullmq/compare/v3.10.4...v3.11.0) (2023-04-17) + + +### Bug Fixes + +* **python:** correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([ef0c5d6](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) + + +### Features + +* **python:** add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([46d6f94](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) +* **python:** improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([ec7c49e](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) +* **upstash:** don't throw an error when detecting an upstash host ([2e06bca](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) + ## [3.10.4](https://github.com/taskforcesh/bullmq/compare/v3.10.3...v3.10.4) (2023-04-05) diff --git a/package.json b/package.json index 810d755be4..3ceecb1339 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.10.4", + "version": "3.11.0", "description": "Queue for messages and jobs based on Redis", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From 3eff8e66d2582c024e71149c6621671af99e363c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 21:21:16 +0000 Subject: [PATCH 005/322] chore(deps): update dependency ioredis to v5.3.2 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4cfbaaa432..2b73dedc4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3807,9 +3807,9 @@ into-stream@^6.0.0: p-is-promise "^3.0.0" ioredis@^5.3.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.1.tgz#55d394a51258cee3af9e96c21c863b1a97bf951f" - integrity sha512-C+IBcMysM6v52pTLItYMeV4Hz7uriGtoJdz7SSBDX6u+zwSYGirLdQh3L7t/OItWITcw3gTFMjJReYUwS4zihg== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" + integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== dependencies: "@ioredis/commands" "^1.1.1" cluster-key-slot "^1.1.0" From 10135f23fc7a1c38da96715b296a271b0eaffb58 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 21:21:58 +0000 Subject: [PATCH 006/322] chore(deps): lock file maintenance --- yarn.lock | 148 +++++++++++++++++++++++++++--------------------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2b73dedc4a..73381774fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -204,12 +204,12 @@ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@commitlint/cli@^17.0.3": - version "17.5.1" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.5.1.tgz#db176538db7b4140c8856c88a46bd15ec705f881" - integrity sha512-pRRgGSzdHQHehxZbGA3qF6wVPyl+EEQgTe/t321rtMLFbuJ7nRj2waS17s/v5oEbyZtiY5S8PGB6XtEIm0I+Sg== + version "17.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.6.1.tgz#571a1272a656cd316f4b601cbb0fcb2ef50bfc7a" + integrity sha512-kCnDD9LE2ySiTnj/VPaxy4/oRayRcdv4aCuVxtoum8SxIU7OADHc0nJPQfheE8bHcs3zZdWzDMWltRosuT13bg== dependencies: "@commitlint/format" "^17.4.4" - "@commitlint/lint" "^17.4.4" + "@commitlint/lint" "^17.6.1" "@commitlint/load" "^17.5.0" "@commitlint/read" "^17.5.1" "@commitlint/types" "^17.4.4" @@ -220,9 +220,9 @@ yargs "^17.0.0" "@commitlint/config-conventional@^17.0.3": - version "17.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.4.4.tgz#f30b1e5b2e48ce5799a483c200c52f218a98efcc" - integrity sha512-u6ztvxqzi6NuhrcEDR7a+z0yrh11elY66nRrQIpqsqW6sZmpxYkDLtpRH8jRML+mmxYQ8s4qqF06Q/IQx5aJeQ== + version "17.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.6.1.tgz#ab07c82c88f99ffee89ae321f1f49f1798127fbb" + integrity sha512-ng/ybaSLuTCH9F+7uavSOnEQ9EFMl7lHEjfAEgRh1hwmEe8SpLKpQeMo2aT1IWvHaGMuTb+gjfbzoRf2IR23NQ== dependencies: conventional-changelog-conventionalcommits "^5.0.0" @@ -267,14 +267,14 @@ "@commitlint/types" "^17.4.4" semver "7.3.8" -"@commitlint/lint@^17.4.4": - version "17.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.4.4.tgz#0ecd70b44ec5f4823c2e00e0c4b04ebd41d42856" - integrity sha512-qgkCRRFjyhbMDWsti/5jRYVJkgYZj4r+ZmweZObnbYqPUl5UKLWMf9a/ZZisOI4JfiPmRktYRZ2JmqlSvg+ccw== +"@commitlint/lint@^17.6.1": + version "17.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.6.1.tgz#52275acc6b3d92a9ad466535331c5dd8e85b6f42" + integrity sha512-VARJ9kxH64isgwVnC+ABPafCYzqxpsWJIpDaTuI0gh8aX4GQ0i7cn9tvxtFNfJj4ER2BAJeWJ0vURdNYjK2RQQ== dependencies: "@commitlint/is-ignored" "^17.4.4" "@commitlint/parse" "^17.4.4" - "@commitlint/rules" "^17.4.4" + "@commitlint/rules" "^17.6.1" "@commitlint/types" "^17.4.4" "@commitlint/load@>6.1.1", "@commitlint/load@^17.5.0": @@ -334,10 +334,10 @@ resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/rules@^17.4.4": - version "17.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.4.4.tgz#9b33f41e5eb529f916396bac7c62e61f0edd6791" - integrity sha512-0tgvXnHi/mVcyR8Y8mjTFZIa/FEQXA4uEutXS/imH2v1UNkYDSEMsK/68wiXRpfW1euSgEdwRkvE1z23+yhNrQ== +"@commitlint/rules@^17.6.1": + version "17.6.1" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.6.1.tgz#dff529b8d1e0455808fe7e3e1fa70617e4eb2759" + integrity sha512-lUdHw6lYQ1RywExXDdLOKxhpp6857/4c95Dc/1BikrHgdysVUXz26yV0vp1GL7Gv+avx9WqZWTIVB7pNouxlfw== dependencies: "@commitlint/ensure" "^17.4.4" "@commitlint/message" "^17.4.2" @@ -1057,9 +1057,9 @@ "@types/lodash" "*" "@types/lodash@*": - version "4.14.192" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.192.tgz#5790406361a2852d332d41635d927f1600811285" - integrity sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A== + version "4.14.194" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76" + integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g== "@types/minimatch@*": version "5.1.2" @@ -1153,13 +1153,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^5.33.0": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.57.1.tgz#af911234bd4401d09668c5faf708a0570a17a748" - integrity sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA== + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.0.tgz#0ad7cd019346cc5d150363f64869eca10ca9977c" + integrity sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w== dependencies: - "@typescript-eslint/scope-manager" "5.57.1" - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/typescript-estree" "5.57.1" + "@typescript-eslint/scope-manager" "5.59.0" + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/typescript-estree" "5.59.0" debug "^4.3.4" "@typescript-eslint/scope-manager@4.33.0": @@ -1170,23 +1170,23 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/scope-manager@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz#5d28799c0fc8b501a29ba1749d827800ef22d710" - integrity sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw== +"@typescript-eslint/scope-manager@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz#86501d7a17885710b6716a23be2e93fc54a4fe8c" + integrity sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ== dependencies: - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/visitor-keys" "5.57.1" + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/visitor-keys" "5.59.0" "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/types@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.1.tgz#d9989c7a9025897ea6f0550b7036027f69e8a603" - integrity sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA== +"@typescript-eslint/types@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32" + integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== "@typescript-eslint/typescript-estree@4.33.0", "@typescript-eslint/typescript-estree@^4.33.0": version "4.33.0" @@ -1201,13 +1201,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz#10d9643e503afc1ca4f5553d9bbe672ea4050b71" - integrity sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw== +"@typescript-eslint/typescript-estree@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz#8869156ee1dcfc5a95be3ed0e2809969ea28e965" + integrity sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg== dependencies: - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/visitor-keys" "5.57.1" + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/visitor-keys" "5.59.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1222,12 +1222,12 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz#585e5fa42a9bbcd9065f334fd7c8a4ddfa7d905e" - integrity sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA== +"@typescript-eslint/visitor-keys@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz#a59913f2bf0baeb61b5cfcb6135d3926c3854365" + integrity sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA== dependencies: - "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/types" "5.59.0" eslint-visitor-keys "^3.3.0" JSONStream@^1.0.4: @@ -1722,9 +1722,9 @@ camelcase@^6.0.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001449: - version "1.0.30001477" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001477.tgz#a2ffb2276258233034bbb869d4558b02658a511e" - integrity sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ== + version "1.0.30001480" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz#9bbd35ee44c2480a1e3a3b9f4496f5066817164a" + integrity sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ== cardinal@^2.1.1: version "2.1.1" @@ -1955,9 +1955,9 @@ color-support@^1.1.3: integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colorette@^2.0.16, colorette@^2.0.17: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== columnify@^1.6.0: version "1.6.0" @@ -2528,9 +2528,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.4.284: - version "1.4.356" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.356.tgz#b75a8a8c31d571f6024310cc980a08cd6c15a8c5" - integrity sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A== + version "1.4.366" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.366.tgz#48d400f9c4af8e80f7bbad0d18730c165d43155e" + integrity sha512-XjC4pyf1no8kJe24nUfyexpWwiGRbZWXU/KbprSEvXcTXUlr3Zr5vK3lQt2to0ttpMhAc3iENccwPSKbnEW2Fg== emoji-regex@^8.0.0: version "8.0.0" @@ -3880,9 +3880,9 @@ is-cidr@^4.0.2: cidr-regex "^3.1.1" is-core-module@^2.1.0, is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== dependencies: has "^1.0.3" @@ -4984,9 +4984,9 @@ minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: yallist "^4.0.0" minipass@^4.0.0: - version "4.2.7" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.7.tgz#14c6fc0dcab54d9c4dd64b2b7032fef04efec218" - integrity sha512-ScVIgqHcXRMyfflqHmEW0bm8z8rb5McHyOY3ewX9JBgZaR77G7nxq9L/mtV96/QbAAwtbCAHVVLzD1kkyfFQEw== + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" @@ -5135,7 +5135,7 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -nanoid@^3.3.4: +nanoid@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== @@ -5950,11 +5950,11 @@ postcss-values-parser@^5.0.0: quote-unquote "^1.0.0" postcss@^8.1.7, postcss@^8.4.6: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + version "8.4.22" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.22.tgz#c29e6776b60ab3af602d4b513d5bd2ff9aa85dc1" + integrity sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA== dependencies: - nanoid "^3.3.4" + nanoid "^3.3.6" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -6556,7 +6556,7 @@ semver-regex@^3.1.2: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.3.8, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -6568,10 +6568,10 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.7: - version "7.4.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== +semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== dependencies: lru-cache "^6.0.0" @@ -7408,9 +7408,9 @@ untildify@^4.0.0: integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" picocolors "^1.0.0" From 13e838a6cf3ccf2209cffdf09b9e2e53b8121e3e Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 17 Apr 2023 22:46:47 -0500 Subject: [PATCH 007/322] docs(bullmq-pro): update changelog (#1838) --- docs/gitbook/bullmq-pro/changelog.md | 14 ++++++++++++++ src/classes/redis-connection.ts | 4 ---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index 4088b5a2af..4012685003 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,17 @@ +## [5.2.2](https://github.com/taskforcesh/bullmq-pro/compare/v5.2.1...v5.2.2) (2023-04-18) + + +### Bug Fixes + +* **deps:** upgrade bullmq to 3.11.0 ([#143](https://github.com/taskforcesh/bullmq-pro/issues/143)) ([b132957](https://github.com/taskforcesh/bullmq-pro/commit/b132957b43603931c68bfca1a85330905b810faf)) + +## [5.2.1](https://github.com/taskforcesh/bullmq-pro/compare/v5.2.0...v5.2.1) (2023-04-15) + + +### Bug Fixes + +* **flow-producer-pro:** fix opts assignment ([#140](https://github.com/taskforcesh/bullmq-pro/issues/140)) ([9f8896c](https://github.com/taskforcesh/bullmq-pro/commit/9f8896c5f082d807bb6945780b30c2768015b95f)) + # [5.2.0](https://github.com/taskforcesh/bullmq-pro/compare/v5.1.15...v5.2.0) (2023-03-23) diff --git a/src/classes/redis-connection.ts b/src/classes/redis-connection.ts index 1cbecdf391..742ec43ad3 100644 --- a/src/classes/redis-connection.ts +++ b/src/classes/redis-connection.ts @@ -79,10 +79,6 @@ export class RedisConnection extends EventEmitter { if (isRedisCluster(this._client)) { this.opts = this._client.options.redisOptions; - const hosts = (this._client).startupNodes.map( - (node: { host: string } | string) => - typeof node == 'string' ? node : node.host, - ); } else { this.opts = this._client.options; } From c72bc1756faec43b7b67528f0f0bdacef193e005 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Apr 2023 22:15:18 -0500 Subject: [PATCH 008/322] chore(deps): update coverallsapp/github-action digest to d2cf009 (#1842) --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c2907e1e6c..089569f3dd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,7 +43,7 @@ jobs: - run: yarn coverage - name: Upload LCOV to Coveralls if: ${{ ( github.event_name == 'pull_request' && github.event.pull_request.head.fork == false ) || github.event_name == 'push' }} - uses: coverallsapp/github-action@66741573064b23a82206aebd518f4bb11802fa5a # branch=master + uses: coverallsapp/github-action@d2cf0097b9511c3c5f440346ddfe756ce6f19fcf # branch=master with: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Check coverage change not below threshold From 375b1be52035e93c5fef6024e0d06aa723f602a9 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Thu, 20 Apr 2023 08:22:42 +0200 Subject: [PATCH 009/322] feat: upgrade ioredis to 5.3.2 --- package.json | 2 +- python/README.md | 4 ++-- src/classes/async-fifo-queue.ts | 5 +++++ yarn.lock | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 3ceecb1339..72cd1b45f8 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "dependencies": { "cron-parser": "^4.6.0", "glob": "^8.0.3", - "ioredis": "^5.3.0", + "ioredis": "^5.3.2", "lodash": "^4.17.21", "msgpackr": "^1.6.2", "semver": "^7.3.7", diff --git a/python/README.md b/python/README.md index 5741870028..068dc7cbd6 100644 --- a/python/README.md +++ b/python/README.md @@ -16,12 +16,12 @@ have been ported so far: - [ ] Job priority. - [ ] Repeatable. -- [ ] Workers +- [x] Workers - [ ] Job events. - [ ] Job progress. - [ ] Job retries. - [ ] Job backoff. -- [ ] Getters. +- [x] Getters. ## Installation diff --git a/src/classes/async-fifo-queue.ts b/src/classes/async-fifo-queue.ts index b9b11901d5..f6bc93b71c 100644 --- a/src/classes/async-fifo-queue.ts +++ b/src/classes/async-fifo-queue.ts @@ -4,6 +4,11 @@ * A minimal FIFO queue for asynchronous operations. Allows adding asynchronous operations * and consume them in the order they are resolved. * + * TODO: Optimize using a linked list for the queue instead of an array. + * Current implementation requires memory copies when shifting the queue. + * For a linked linked implementation, we can exploit the fact that the + * maximum number of elements in the list will never exceen the concurrency factor + * of the worker, so the nodes of the list could be pre-allocated. */ export class AsyncFifoQueue { private queue: (T | undefined)[] = []; diff --git a/yarn.lock b/yarn.lock index 73381774fd..c96bb6a59a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3806,7 +3806,7 @@ into-stream@^6.0.0: from2 "^2.3.0" p-is-promise "^3.0.0" -ioredis@^5.3.0: +ioredis@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== From fc66096d79734ad543562dfdbd6739c080f7102f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 20 Apr 2023 06:23:48 +0000 Subject: [PATCH 010/322] chore(release): 3.12.0 [skip ci] # [3.12.0](https://github.com/taskforcesh/bullmq/compare/v3.11.0...v3.12.0) (2023-04-20) ### Features * upgrade ioredis to 5.3.2 ([375b1be](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index a23a022afd..d3de1e559b 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +# [3.12.0](https://github.com/taskforcesh/bullmq/compare/v3.11.0...v3.12.0) (2023-04-20) + + +### Features + +* upgrade ioredis to 5.3.2 ([375b1be](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) + # [3.11.0](https://github.com/taskforcesh/bullmq/compare/v3.10.4...v3.11.0) (2023-04-17) diff --git a/package.json b/package.json index 72cd1b45f8..c89235f1f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.11.0", + "version": "3.12.0", "description": "Queue for messages and jobs based on Redis", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From b4234c9ad74af0e671cd3477aba47ffcc5a548c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 06:24:16 +0000 Subject: [PATCH 011/322] chore(deps): update dependency pipenv to v2023.4.20 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index 830c3392c1..116b365fb7 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -3,7 +3,7 @@ certifi==2022.12.7 distlib==0.3.6 filelock==3.11.0 msgpack==1.0.5 -pipenv==2023.3.20 +pipenv==2023.4.20 platformdirs==3.2.0 redis==4.5.4 six==1.16.0 From 9c2c76c41b7ac5a8d77d2ee3e4e905cba9e07e0b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 06:24:20 +0000 Subject: [PATCH 012/322] chore(deps): update dependency virtualenv to v20.22.0 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index 116b365fb7..1c1f53c1f8 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -7,5 +7,5 @@ pipenv==2023.4.20 platformdirs==3.2.0 redis==4.5.4 six==1.16.0 -virtualenv==20.21.0 +virtualenv==20.22.0 virtualenv-clone==0.5.7 From 7919a59c1c6f29de00cbea8cf60105cb9d87ba76 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:20:50 +0000 Subject: [PATCH 013/322] chore(deps): update dependency filelock to v3.12.0 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index 1c1f53c1f8..0ce3dcf43d 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -1,7 +1,7 @@ async-timeout==4.0.2 certifi==2022.12.7 distlib==0.3.6 -filelock==3.11.0 +filelock==3.12.0 msgpack==1.0.5 pipenv==2023.4.20 platformdirs==3.2.0 From 01f549e62a33619a7816758910a2d2b5ac75b589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Louren=C3=A7o?= Date: Wed, 19 Apr 2023 11:34:10 -0300 Subject: [PATCH 014/322] feat(python): accept redis options as string --- python/bullmq/queue.py | 2 +- python/bullmq/redis_connection.py | 17 ++++++++++------- python/bullmq/worker.py | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 98bef8991e..d95346c2a4 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -26,7 +26,7 @@ class Queue: Instantiate a Queue object """ - def __init__(self, name: str, redisOpts: dict = {}, opts: QueueOptions = {}): + def __init__(self, name: str, redisOpts: dict | str = {}, opts: QueueOptions = {}): """ Initialize a connection """ diff --git a/python/bullmq/redis_connection.py b/python/bullmq/redis_connection.py index abd24430dd..9669916ec9 100644 --- a/python/bullmq/redis_connection.py +++ b/python/bullmq/redis_connection.py @@ -6,14 +6,17 @@ class RedisConnection: RedisConnection class """ - def __init__(self, redisOpts: dict = {}): - host = redisOpts.get("host") or "localhost" - port = redisOpts.get("port") or 6379 - db = redisOpts.get("db") or 0 - password = redisOpts.get("password") or None + def __init__(self, redisOpts: dict | str = {}): + if isinstance(redisOpts, dict): + host = redisOpts.get("host") or "localhost" + port = redisOpts.get("port") or 6379 + db = redisOpts.get("db") or 0 + password = redisOpts.get("password") or None - self.conn = redis.Redis( - host=host, port=port, db=db, password=password, decode_responses=True) + self.conn = redis.Redis( + host=host, port=port, db=db, password=password, decode_responses=True) + else: + self.conn = redis.from_url(redisOpts, decode_responses=True) def disconnect(self): """ diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index 926072665b..e5d2429889 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -59,7 +59,7 @@ class WorkerOptions(TypedDict, total=False): Prefix for all queue keys. """ - connection: dict[str, Any] + connection: dict[str, Any] | str """ Options for connecting to a Redis instance. """ From 5428ecb6524ddcf880402108e7daa73ed4c4807a Mon Sep 17 00:00:00 2001 From: Andrea Date: Thu, 20 Apr 2023 21:16:45 +0000 Subject: [PATCH 015/322] chore(python): move types into a subfolder (#1828) --- python/bullmq/job.py | 74 +----------------------- python/bullmq/queue.py | 23 +------- python/bullmq/scripts.py | 6 +- python/bullmq/types/__init__.py | 6 ++ python/bullmq/types/job_options.py | 55 ++++++++++++++++++ python/bullmq/types/keep_jobs.py | 19 ++++++ python/bullmq/types/queue_options.py | 13 +++++ python/bullmq/types/retry_job_options.py | 8 +++ python/bullmq/types/worker_options.py | 56 ++++++++++++++++++ python/bullmq/worker.py | 58 +------------------ 10 files changed, 168 insertions(+), 150 deletions(-) create mode 100644 python/bullmq/types/__init__.py create mode 100644 python/bullmq/types/job_options.py create mode 100644 python/bullmq/types/keep_jobs.py create mode 100644 python/bullmq/types/queue_options.py create mode 100644 python/bullmq/types/retry_job_options.py create mode 100644 python/bullmq/types/worker_options.py diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 7e833fb2fb..7565d8b73a 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -1,5 +1,6 @@ from redis import Redis -from typing import List, Any, TypedDict +from typing import List, Any +from bullmq.types import JobOptions import json import time @@ -13,77 +14,6 @@ optsEncodeMap = {v: k for k, v in optsDecodeMap.items()} -class KeepJobs(TypedDict, total=False): - """ - Specify which jobs to keep after finishing. If both age and count are - specified, then the jobs kept will be the ones that satisfies both - properties. - """ - - age: int - """ - Maximum age in seconds for job to be kept. - """ - - count: int - """ - Maximum count of jobs to be kept. - """ - - -class JobOptions(TypedDict, total=False): - jobId: str - """ - Override the job ID - by default, the job ID is a unique - integer, but you can use this setting to override it. - - If you use this option, it is up to you to ensure the - jobId is unique. If you attempt to add a job with an id that - already exists, it will not be added. - """ - - timestamp: int - """ - Timestamp when the job was created. - - @defaultValue round(time.time() * 1000) - """ - - delay: int - """ - An amount of milliseconds to wait until this job can be processed. - Note that for accurate delays, worker and producers - should have their clocks synchronized. - - @defaultValue 0 - """ - - attempts: int - """ - The total number of attempts to try the job until it completes. - - @defaultValue 0 - """ - - removeOnComplete: bool | int | KeepJobs - """ - If true, removes the job when it successfully completes - When given a number, it specifies the maximum amount of - jobs to keep, or you can provide an object specifying max - age and/or count to keep. It overrides whatever setting is used in the worker. - Default behavior is to keep the job in the completed set. - """ - - removeOnFail: bool | int | KeepJobs - """ - If true, removes the job when it fails after all attempts. - When given a number, it specifies the maximum amount of - jobs to keep, or you can provide an object specifying max - age and/or count to keep. It overrides whatever setting is used in the worker. - Default behavior is to keep the job in the failed set. - """ - - class Job: """ This class represents a Job in the queue. Normally job are implicitly created when diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index d95346c2a4..7219aa5fde 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -1,24 +1,7 @@ from bullmq.scripts import Scripts from bullmq.job import Job, JobOptions from bullmq.redis_connection import RedisConnection -from typing import TypedDict - - -class RetryJobsOpts(TypedDict): - state: str - count: int - timestamp: int - - -class QueueOptions(TypedDict, total=False): - """ - Options for the Queue class. - """ - - prefix: str - """ - Prefix for all queue keys. - """ +from bullmq.types import QueueOptions, RetryJobsOptions class Queue: @@ -98,7 +81,7 @@ async def obliterate(self, force: bool = False): if cursor is None or cursor == 0 or cursor == "0": break - async def retryJobs(self, opts: RetryJobsOpts = {}): + async def retryJobs(self, opts: RetryJobsOptions = {}): """ Retry all the failed jobs. """ @@ -137,7 +120,7 @@ async def getJobCounts(self, *types): def sanitizeJobTypes(self, types): current_types = list(types) - if len(types) > 0 : + if len(types) > 0: sanitized_types = current_types.copy() try: diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 5e2b5fc784..188d6f3744 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -86,7 +86,8 @@ def addJob(self, job: Job): def getCounts(self, types): keys = self.getKeys(['']) - transformed_types = list(map(lambda type: 'wait' if type == 'waiting' else type, types)) + transformed_types = list( + map(lambda type: 'wait' if type == 'waiting' else type, types)) return self.commands["getCounts"](keys=keys, args=transformed_types) @@ -117,7 +118,8 @@ async def retryJobs(self, state: str, count: int, timestamp: int): Remove a queue completely """ current_state = state or 'failed' - keys = self.getKeys(['', 'events', current_state, 'wait', 'paused', 'meta']) + keys = self.getKeys( + ['', 'events', current_state, 'wait', 'paused', 'meta']) result = await self.commands["retryJobs"](keys=keys, args=[count or 1000, timestamp or round(time.time()*1000), current_state]) return result diff --git a/python/bullmq/types/__init__.py b/python/bullmq/types/__init__.py new file mode 100644 index 0000000000..4cfee0b376 --- /dev/null +++ b/python/bullmq/types/__init__.py @@ -0,0 +1,6 @@ + +from bullmq.types.keep_jobs import KeepJobs +from bullmq.types.job_options import JobOptions +from bullmq.types.queue_options import QueueOptions +from bullmq.types.worker_options import WorkerOptions +from bullmq.types.retry_job_options import RetryJobsOptions diff --git a/python/bullmq/types/job_options.py b/python/bullmq/types/job_options.py new file mode 100644 index 0000000000..28ee75db61 --- /dev/null +++ b/python/bullmq/types/job_options.py @@ -0,0 +1,55 @@ +from typing import TypedDict +from bullmq.types import KeepJobs + + +class JobOptions(TypedDict, total=False): + jobId: str + """ + Override the job ID - by default, the job ID is a unique + integer, but you can use this setting to override it. + + If you use this option, it is up to you to ensure the + jobId is unique. If you attempt to add a job with an id that + already exists, it will not be added. + """ + + timestamp: int + """ + Timestamp when the job was created. + + @defaultValue round(time.time() * 1000) + """ + + delay: int + """ + An amount of milliseconds to wait until this job can be processed. + Note that for accurate delays, worker and producers + should have their clocks synchronized. + + @defaultValue 0 + """ + + attempts: int + """ + The total number of attempts to try the job until it completes. + + @defaultValue 0 + """ + + removeOnComplete: bool | int | KeepJobs + """ + If true, removes the job when it successfully completes + When given a number, it specifies the maximum amount of + jobs to keep, or you can provide an object specifying max + age and/or count to keep. It overrides whatever setting is used in the worker. + Default behavior is to keep the job in the completed set. + """ + + removeOnFail: bool | int | KeepJobs + """ + If true, removes the job when it fails after all attempts. + When given a number, it specifies the maximum amount of + jobs to keep, or you can provide an object specifying max + age and/or count to keep. It overrides whatever setting is used in the worker. + Default behavior is to keep the job in the failed set. + """ diff --git a/python/bullmq/types/keep_jobs.py b/python/bullmq/types/keep_jobs.py new file mode 100644 index 0000000000..da80f55aca --- /dev/null +++ b/python/bullmq/types/keep_jobs.py @@ -0,0 +1,19 @@ +from typing import TypedDict + + +class KeepJobs(TypedDict, total=False): + """ + Specify which jobs to keep after finishing. If both age and count are + specified, then the jobs kept will be the ones that satisfies both + properties. + """ + + age: int + """ + Maximum age in seconds for job to be kept. + """ + + count: int + """ + Maximum count of jobs to be kept. + """ diff --git a/python/bullmq/types/queue_options.py b/python/bullmq/types/queue_options.py new file mode 100644 index 0000000000..0b4fada9cb --- /dev/null +++ b/python/bullmq/types/queue_options.py @@ -0,0 +1,13 @@ + +from typing import TypedDict + + +class QueueOptions(TypedDict, total=False): + """ + Options for the Queue class. + """ + + prefix: str + """ + Prefix for all queue keys. + """ diff --git a/python/bullmq/types/retry_job_options.py b/python/bullmq/types/retry_job_options.py new file mode 100644 index 0000000000..40d73da39f --- /dev/null +++ b/python/bullmq/types/retry_job_options.py @@ -0,0 +1,8 @@ + +from typing import TypedDict + + +class RetryJobsOptions(TypedDict, total=False): + state: str + count: int + timestamp: int diff --git a/python/bullmq/types/worker_options.py b/python/bullmq/types/worker_options.py new file mode 100644 index 0000000000..d0d21bb81f --- /dev/null +++ b/python/bullmq/types/worker_options.py @@ -0,0 +1,56 @@ + +from typing import TypedDict, Any + + +class WorkerOptions(TypedDict, total=False): + autorun: bool + """ + Condition to start processor at instance creation + + @default true + """ + + concurrency: int + """ + Amount of jobs that a single worker is allowed to work on + in parallel. + + @default 1 + @see https://docs.bullmq.io/guide/workers/concurrency + """ + + maxStalledCount: int + """ + Amount of times a job can be recovered from a stalled state + to the `wait` state. If this is exceeded, the job is moved + to `failed`. + + @default 1 + """ + + stalledInterval: int + """ + Number of milliseconds between stallness checks. + + @default 30000 + """ + + lockDuration: int + """ + Duration of the lock for the job in milliseconds. The lock represents that + a worker is processing the job. If the lock is lost, the job will be eventually + be picked up by the stalled checker and move back to wait so that another worker + can process it again. + + @default 30000 + """ + + prefix: str + """ + Prefix for all queue keys. + """ + + connection: dict[str, Any] + """ + Options for connecting to a Redis instance. + """ diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index e5d2429889..724f21817a 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -1,70 +1,16 @@ -from typing import Callable, TypedDict, Any, List +from typing import Callable from uuid import uuid4 from bullmq.scripts import Scripts from bullmq.redis_connection import RedisConnection from bullmq.event_emitter import EventEmitter from bullmq.job import Job from bullmq.timer import Timer +from bullmq.types import WorkerOptions import asyncio import traceback import time - -class WorkerOptions(TypedDict, total=False): - autorun: bool - """ - Condition to start processor at instance creation - - @default true - """ - - concurrency: int - """ - Amount of jobs that a single worker is allowed to work on - in parallel. - - @default 1 - @see https://docs.bullmq.io/guide/workers/concurrency - """ - - maxStalledCount: int - """ - Amount of times a job can be recovered from a stalled state - to the `wait` state. If this is exceeded, the job is moved - to `failed`. - - @default 1 - """ - - stalledInterval: int - """ - Number of milliseconds between stallness checks. - - @default 30000 - """ - - lockDuration: int - """ - Duration of the lock for the job in milliseconds. The lock represents that - a worker is processing the job. If the lock is lost, the job will be eventually - be picked up by the stalled checker and move back to wait so that another worker - can process it again. - - @default 30000 - """ - - prefix: str - """ - Prefix for all queue keys. - """ - - connection: dict[str, Any] | str - """ - Options for connecting to a Redis instance. - """ - - class Worker(EventEmitter): def __init__(self, name: str, processor: Callable[[Job, str], asyncio.Future], opts: WorkerOptions = {}): super().__init__() From ef7d3e0b1357ba3c302c22792cc5a58ea7850889 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 21:13:12 +0000 Subject: [PATCH 016/322] chore(deps): update github/codeql-action digest to 7df0ce3 --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 9795194ff1..8a26a1dbe1 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,7 +42,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2 + uses: github/codeql-action/init@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -53,7 +53,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2 + uses: github/codeql-action/autobuild@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -67,4 +67,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2 + uses: github/codeql-action/analyze@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2 From 182b4bb06a398b3a61ea070a7256d68cb77b86e6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 21:41:33 +0000 Subject: [PATCH 017/322] chore(deps): update actions/setup-python digest to 57ded4d --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 089569f3dd..455aa6f76e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -116,7 +116,7 @@ jobs: - run: yarn copy:lua:python - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # v4 + uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # v4 with: python-version: ${{ matrix.python-version }} From e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 20 Apr 2023 19:53:10 -0500 Subject: [PATCH 018/322] feat(python): add updateProgress method in job class(#1830) --- python/README.md | 2 +- python/bullmq/job.py | 18 ++++++++++++----- python/bullmq/queue.py | 4 ++-- python/bullmq/scripts.py | 21 +++++++++++++++++--- python/bullmq/worker.py | 3 ++- python/run_tests.sh | 1 + python/tests/job_tests.py | 42 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 python/tests/job_tests.py diff --git a/python/README.md b/python/README.md index 068dc7cbd6..e6a9ddd66b 100644 --- a/python/README.md +++ b/python/README.md @@ -18,7 +18,7 @@ have been ported so far: - [x] Workers - [ ] Job events. -- [ ] Job progress. +- [x] Job progress. - [ ] Job retries. - [ ] Job backoff. - [x] Getters. diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 7565d8b73a..4108d8e020 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -1,5 +1,8 @@ -from redis import Redis -from typing import List, Any +from __future__ import annotations +from typing import List, Any, TYPE_CHECKING +from bullmq.scripts import Scripts +if TYPE_CHECKING: + from bullmq.queue import Queue from bullmq.types import JobOptions import json @@ -22,7 +25,7 @@ class Job: A Job instance is also passed to the Worker's process function. """ - def __init__(self, client: Redis, name: str, data: Any, opts: JobOptions = {}): + def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): self.name = name self.id = opts.get("jobId", None) self.progress = 0 @@ -40,9 +43,14 @@ def __init__(self, client: Redis, name: str, data: Any, opts: JobOptions = {}): self.failedReason = None self.repeatJobKey = None self.stacktrace: List[str] = [] + self.scripts = Scripts(queue.prefix, queue.name, queue.redisConnection.conn) + + def updateProgress(self, progress): + self.progress = progress + return self.scripts.updateProgress(self.id, progress) -def fromJSON(client: Redis, rawData: dict, jobId: str | None = None): +def fromJSON(queue: Queue, rawData: dict, jobId: str | None = None): """ Instantiates a Job from a JobJsonRaw object (coming from a deserialized JSON object) @@ -53,7 +61,7 @@ def fromJSON(client: Redis, rawData: dict, jobId: str | None = None): data = json.loads(rawData.get("data", '{}')) opts = optsFromJSON(json.loads(rawData.get("opts", '{}'))) - job = Job(client, rawData.get("name"), data, opts) + job = Job(queue, rawData.get("name"), data, opts) job.id = jobId or rawData.get("id", b'').decode("utf-8") job.progress = json.loads(rawData.get("progress", '0')) diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 7219aa5fde..2ad904eb99 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -28,7 +28,7 @@ async def add(self, name: str, data, opts: JobOptions = {}): @param data: Arbitrary data to append to the job. @param opts: Job options that affects how the job is going to be processed. """ - job = Job(self.client, name, data, opts) + job = Job(self, name, data, opts) job_id = await self.scripts.addJob(job) job.id = job_id return job @@ -152,6 +152,6 @@ def close(self): async def fromId(queue: Queue, jobId: str): key = f"{queue.prefix}:{queue.name}:{jobId}" raw_data = await queue.client.hgetall(key) - return Job.fromJSON(queue.client, raw_data, jobId) + return Job.fromJSON(queue, raw_data, jobId) Job.fromId = staticmethod(fromId) diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 188d6f3744..146933956d 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -2,10 +2,13 @@ This class is used to load and execute Lua scripts. It is a wrapper around the Redis client. """ -from typing import Any + +from __future__ import annotations from redis import Redis -from bullmq.job import Job from bullmq.error_code import ErrorCode +from typing import Any, TYPE_CHECKING +if TYPE_CHECKING: + from bullmq.job import Job import time import json @@ -25,14 +28,15 @@ def __init__(self, prefix: str, queueName: str, redisClient: Redis): self.redisClient = redisClient self.commands = { "addJob": redisClient.register_script(self.getScript("addJob-8.lua")), + "extendLock": redisClient.register_script(self.getScript("extendLock-2.lua")), "getCounts": redisClient.register_script(self.getScript("getCounts-1.lua")), "obliterate": redisClient.register_script(self.getScript("obliterate-2.lua")), "pause": redisClient.register_script(self.getScript("pause-4.lua")), "moveToActive": redisClient.register_script(self.getScript("moveToActive-9.lua")), "moveToFinished": redisClient.register_script(self.getScript("moveToFinished-12.lua")), - "extendLock": redisClient.register_script(self.getScript("extendLock-2.lua")), "moveStalledJobsToWait": redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), "retryJobs": redisClient.register_script(self.getScript("retryJobs-6.lua")), + "updateProgress": redisClient.register_script(self.getScript("updateProgress-2.lua")), } # loop all the names and add them to the keys object @@ -148,6 +152,17 @@ def moveToCompleted(self, job: Job, val: Any, removeOnComplete, token: str, opts def moveToFailed(self, job: Job, failedReason: str, removeOnFailed, token: str, opts: dict, fetchNext=True): return self.moveToFinished(job, failedReason, "failedReason", removeOnFailed, "failed", token, opts, fetchNext) + async def updateProgress(self, job_id: str, progress): + keys = [self.toKey(job_id), self.keys['events']] + progress_json = json.dumps(progress, separators=(',', ':')) + args = [job_id, progress_json] + result = await self.commands["updateProgress"](keys=keys, args=args) + + if result is not None: + if result < 0: + raise finishedErrors(result, job_id, 'updateProgress') + return None + async def moveToFinished(self, job: Job, val: Any, propVal: str, shouldRemove, target, token: str, opts: dict, fetchNext=True) -> list[Any] | None: timestamp = round(time.time() * 1000) metricsKey = self.toKey('metrics:' + target) diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index 724f21817a..950c453fd3 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -27,6 +27,7 @@ def __init__(self, name: str, processor: Callable[[Job, str], asyncio.Future], o self.blockingRedisConnection = RedisConnection(redis_opts) self.client = self.redisConnection.conn self.bclient = self.blockingRedisConnection.conn + self.prefix = opts.get("prefix", "bull") self.scripts = Scripts(opts.get("prefix", "bull"), name, self.client) self.closing = False self.forceClosing = False @@ -104,7 +105,7 @@ async def getNextJob(self, token: str): job, job_id = await self.scripts.moveToActive(token, self.opts, job_id) if job and job_id: - return Job.fromJSON(self.client, job, job_id) + return Job.fromJSON(self, job, job_id) async def processJob(self, job: Job, token: str): try: diff --git a/python/run_tests.sh b/python/run_tests.sh index 057ef24345..ea0ca9df4f 100755 --- a/python/run_tests.sh +++ b/python/run_tests.sh @@ -1,4 +1,5 @@ #!/bin/bash redis-cli flushall +python3 -m unittest -v tests.job_tests python3 -m unittest -v tests.queue_tests python3 -m unittest -v tests.worker_tests \ No newline at end of file diff --git a/python/tests/job_tests.py b/python/tests/job_tests.py new file mode 100644 index 0000000000..4c7065ce09 --- /dev/null +++ b/python/tests/job_tests.py @@ -0,0 +1,42 @@ +""" +Tests for job class. + +https://bbc.github.io/cloudfit-public-docs/asyncio/testing.html +""" + +import unittest + +from bullmq import Queue, Job + +queueName = "__bullmq_test_queue__" + +class TestJob(unittest.IsolatedAsyncioTestCase): + + async def asyncSetUp(self): + print("Setting up test queue") + # Delete test queue + queue = Queue(queueName) + await queue.pause() + await queue.obliterate() + await queue.close() + + async def test_set_and_get_progress_as_number(self): + queue = Queue(queueName) + job = await queue.add("test-job", {"foo": "bar"}, {}) + await job.updateProgress(42) + stored_job = await Job.fromId(queue, job.id) + self.assertEqual(stored_job.progress, 42) + + await queue.close() + + async def test_set_and_get_progress_as_object(self): + queue = Queue(queueName) + job = await queue.add("test-job", {"foo": "bar"}, {}) + await job.updateProgress({"total": 120, "completed": 40}) + stored_job = await Job.fromId(queue, job.id) + self.assertEqual(stored_job.progress, {"total": 120, "completed": 40}) + + await queue.close() + +if __name__ == '__main__': + unittest.main() From 59cca889afe2205821201e74616b3c3326cfa0fc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Apr 2023 02:11:34 +0000 Subject: [PATCH 019/322] chore(deps): update actions/checkout digest to 8e5e7e5 --- .github/workflows/api.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 0ceb9b6922..551fe51a8f 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -12,7 +12,7 @@ jobs: node-version: [lts/*] steps: - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 with: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 8a26a1dbe1..839d2ba119 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -38,7 +38,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 663bf18042..9aa0c99d39 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 with: fetch-depth: 0 - name: Setup Node.js diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 455aa6f76e..a6a372f759 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 - name: Use Node.js uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 with: @@ -73,7 +73,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 with: @@ -100,7 +100,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 From 514699cd8be96db2320bf0f85d4b6593809a09f1 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 21 Apr 2023 08:23:09 -0500 Subject: [PATCH 020/322] fix(python): stop processes when force stop (#1837) --- python/bullmq/worker.py | 15 +++++++++++---- python/tests/worker_tests.py | 8 ++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index 950c453fd3..f5a5e313f6 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -167,12 +167,18 @@ async def close(self, force: bool = False): """ if force: self.forceClosing = True + self.cancelProcessing() self.closing = True await self.blockingRedisConnection.close() await self.redisConnection.close() + def cancelProcessing(self): + for job in self.processing: + if not job.done(): + job.cancel() + async def getCompleted(task_set: set) -> tuple[list[Job], list]: job_set, pending = await asyncio.wait(task_set, return_when=asyncio.FIRST_COMPLETED) @@ -188,7 +194,8 @@ def extract_result(job_task): try: return job_task.result() except Exception as e: - # lets use a simple-but-effective error handling: - # print error message and ignore the job - print("ERROR:", e) - traceback.print_exc() + if not str(e).startswith('Connection closed by server'): + # lets use a simple-but-effective error handling: + # print error message and ignore the job + print("ERROR:", e) + traceback.print_exc() diff --git a/python/tests/worker_tests.py b/python/tests/worker_tests.py index a6455b2cf6..75b0e9c1b7 100644 --- a/python/tests/worker_tests.py +++ b/python/tests/worker_tests.py @@ -46,7 +46,7 @@ async def process(job: Job, token: str): self.assertEqual(completedJob.returnvalue, "done") self.assertNotEqual(completedJob.finishedOn, None) - await worker.close() + await worker.close(force=True) await queue.close() @@ -79,7 +79,7 @@ async def process(job: Job, token: str): self.assertEqual(failedJob.returnvalue, None) self.assertNotEqual(failedJob.finishedOn, None) - await worker.close() + await worker.close(force=True) await queue.close() async def test_process_renews_lock(self): @@ -106,7 +106,7 @@ async def process(job: Job, token: str): self.assertEqual(completedJob.returnvalue, "done") self.assertNotEqual(completedJob.finishedOn, None) - await worker.close() + await worker.close(force=True) await queue.close() async def test_process_stalled_jobs(self): @@ -149,7 +149,7 @@ async def process2(job: Job, token: str): self.assertEqual(completedJob.returnvalue, "done2") self.assertNotEqual(completedJob.finishedOn, None) - await worker2.close() + await worker2.close(force=True) await queue.close() From 475a18863b678e72f4d3ba65af70e9d15c199333 Mon Sep 17 00:00:00 2001 From: Andrea Date: Sat, 22 Apr 2023 21:35:08 +0000 Subject: [PATCH 021/322] chore(python): replace staticmethod function with decorator (#1826) --- python/bullmq/__init__.py | 2 +- python/bullmq/job.py | 75 +++++++++++++++++++----------------- python/bullmq/queue.py | 17 +++----- python/tests/queue_tests.py | 65 +++++++++++++++++-------------- python/tests/worker_tests.py | 48 ++++++++++++----------- 5 files changed, 107 insertions(+), 100 deletions(-) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index e541674d64..a2d48b14dc 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -9,4 +9,4 @@ from bullmq.queue import Queue from bullmq.job import Job -from bullmq.worker import Worker \ No newline at end of file +from bullmq.worker import Worker diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 4108d8e020..832ded3104 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -49,55 +49,58 @@ def updateProgress(self, progress): self.progress = progress return self.scripts.updateProgress(self.id, progress) + @staticmethod + def fromJSON(queue: Queue, rawData: dict, jobId: str | None = None): + """ + Instantiates a Job from a JobJsonRaw object (coming from a deserialized JSON object) -def fromJSON(queue: Queue, rawData: dict, jobId: str | None = None): - """ - Instantiates a Job from a JobJsonRaw object (coming from a deserialized JSON object) - - @param queue: the queue where the job belongs to. - @param json: the plain object containing the job. - @param jobId: an optional job id (overrides the id coming from the JSON object) - """ - data = json.loads(rawData.get("data", '{}')) - opts = optsFromJSON(json.loads(rawData.get("opts", '{}'))) - - job = Job(queue, rawData.get("name"), data, opts) - job.id = jobId or rawData.get("id", b'').decode("utf-8") + @param queue: the queue where the job belongs to. + @param json: the plain object containing the job. + @param jobId: an optional job id (overrides the id coming from the JSON object) + """ + data = json.loads(rawData.get("data", '{}')) + opts = optsFromJSON(json.loads(rawData.get("opts", '{}'))) - job.progress = json.loads(rawData.get("progress", '0')) - job.delay = int(rawData.get("delay", "0")) - job.timestamp = int(rawData.get("timestamp", "0")) + job = Job(queue, rawData.get("name"), data, opts) + job.id = jobId or rawData.get("id", b'').decode("utf-8") - if rawData.get("finishedOn"): - job.finishedOn = int(rawData.get("finishedOn")) + job.progress = json.loads(rawData.get("progress", '0')) + job.delay = int(rawData.get("delay", "0")) + job.timestamp = int(rawData.get("timestamp", "0")) - if rawData.get("processedOn"): - job.processedOn = int(rawData.get("processedOn")) + if rawData.get("finishedOn"): + job.finishedOn = int(rawData.get("finishedOn")) - if rawData.get("rjk"): - job.repeatJobKey = rawData.get("rjk") + if rawData.get("processedOn"): + job.processedOn = int(rawData.get("processedOn")) - job.failedReason = rawData.get("failedReason") - job.attemptsMade = int(rawData.get("attemptsMade", "0")) + if rawData.get("rjk"): + job.repeatJobKey = rawData.get("rjk") - returnvalue = rawData.get("returnvalue") - if type(returnvalue) == str: - job.returnvalue = getReturnValue(returnvalue) + job.failedReason = rawData.get("failedReason") + job.attemptsMade = int(rawData.get("attemptsMade", "0")) - job.stacktrace = json.loads(rawData.get("stacktrace", "[]")) + returnvalue = rawData.get("returnvalue") + if type(returnvalue) == str: + job.returnvalue = getReturnValue(returnvalue) - # if (json.parentKey) { - # job.parentKey = json.parentKey; - # } + job.stacktrace = json.loads(rawData.get("stacktrace", "[]")) - # if (json.parent) { - # job.parent = JSON.parse(json.parent); - # } + # if (json.parentKey) { + # job.parentKey = json.parentKey; + # } - return job + # if (json.parent) { + # job.parent = JSON.parse(json.parent); + # } + return job -Job.fromJSON = staticmethod(fromJSON) + @staticmethod + async def fromId(queue: Queue, jobId: str): + key = f"{queue.prefix}:{queue.name}:{jobId}" + raw_data = await queue.client.hgetall(key) + return Job.fromJSON(queue, raw_data, jobId) def optsFromJSON(rawOpts: dict) -> dict: diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 2ad904eb99..7e80e1832d 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -1,7 +1,7 @@ -from bullmq.scripts import Scripts -from bullmq.job import Job, JobOptions from bullmq.redis_connection import RedisConnection -from bullmq.types import QueueOptions, RetryJobsOptions +from bullmq.types import QueueOptions, RetryJobsOptions, JobOptions +from bullmq.scripts import Scripts +from bullmq.job import Job class Queue: @@ -18,7 +18,8 @@ def __init__(self, name: str, redisOpts: dict | str = {}, opts: QueueOptions = { self.client = self.redisConnection.conn self.opts = opts self.prefix = opts.get("prefix", "bull") - self.scripts = Scripts(self.prefix, name, self.redisConnection.conn) + self.scripts = Scripts( + self.prefix, name, self.redisConnection.conn) async def add(self, name: str, data, opts: JobOptions = {}): """ @@ -147,11 +148,3 @@ def close(self): Close the queue instance. """ return self.redisConnection.close() - - -async def fromId(queue: Queue, jobId: str): - key = f"{queue.prefix}:{queue.name}:{jobId}" - raw_data = await queue.client.hgetall(key) - return Job.fromJSON(queue, raw_data, jobId) - -Job.fromId = staticmethod(fromId) diff --git a/python/tests/queue_tests.py b/python/tests/queue_tests.py index 7678c24e3d..20fe37c4b9 100644 --- a/python/tests/queue_tests.py +++ b/python/tests/queue_tests.py @@ -4,15 +4,16 @@ https://bbc.github.io/cloudfit-public-docs/asyncio/testing.html """ +from asyncio import Future +from bullmq import Queue, Worker, Job + import asyncio import unittest import time -from asyncio import Future - -from bullmq import Queue, Worker, Job queueName = "__bullmq_test_queue__" + class TestQueue(unittest.IsolatedAsyncioTestCase): async def asyncSetUp(self): @@ -26,16 +27,16 @@ async def asyncSetUp(self): async def test_add_job(self): queue = Queue(queueName) job = await queue.add("test-job", {"foo": "bar"}, {}) - + self.assertEqual(job.id, "1") await queue.close() - + async def test_add_job_with_options(self): queue = Queue(queueName) data = {"foo": "bar"} attempts = 3, delay = 1000 - job = await queue.add("test-job", data=data , opts={"attempts": attempts, "delay": delay}) + job = await queue.add("test-job", data=data, opts={"attempts": attempts, "delay": delay}) self.assertEqual(job.id, "1") self.assertEqual(job.attempts, attempts) @@ -60,18 +61,19 @@ async def process(job: Job, token: str): worker = Worker(queueName, process) failed_events = Future() + def failing(job: Job, result): nonlocal order if order == (job_count - 1): failed_events.set_result(None) - order+=1 + order += 1 worker.on("failed", failing) for index in range(job_count): data = {"idx": index} - await queue.add("test", data=data ) - + await queue.add("test", data=data) + await failed_events worker.off('failed', failing) @@ -83,17 +85,18 @@ def failing(job: Job, result): order = 0 completed_events = Future() + def completing(job: Job, result): nonlocal order if order == (job_count - 1): completed_events.set_result(None) - order+=1 + order += 1 worker.on("completed", completing) - fail=False + fail = False - await queue.retryJobs({ 'count': 2 }) + await queue.retryJobs({'count': 2}) await completed_events @@ -117,18 +120,19 @@ async def process(job: Job, token: str): worker = Worker(queueName, process) completed_events1 = Future() + def completing1(job: Job, result): nonlocal order if order == (job_count - 1): completed_events1.set_result(None) - order+=1 + order += 1 worker.on("completed", completing1) for index in range(job_count): data = {"idx": index} - await queue.add("test", data=data ) - + await queue.add("test", data=data) + await completed_events1 worker.off('completed', completing1) @@ -139,15 +143,16 @@ def completing1(job: Job, result): order = 0 completed_events2 = Future() + def completing2(job: Job, result): nonlocal order if order == (job_count - 1): completed_events2.set_result(None) - order+=1 + order += 1 worker.on("completed", completing2) - await queue.retryJobs({ 'count': 2, 'state': 'completed' }) + await queue.retryJobs({'count': 2, 'state': 'completed'}) await completed_events2 @@ -176,6 +181,7 @@ async def process(job: Job, token: str): failed_events = Future() timestamp = 0 + def failing(job: Job, result): nonlocal order nonlocal timestamp @@ -183,14 +189,14 @@ def failing(job: Job, result): failed_events.set_result(None) if job.data['idx'] == (job_count/2 - 1): timestamp = round(time.time() * 1000) - order+=1 + order += 1 worker.on("failed", failing) for index in range(job_count): data = {"idx": index} - await queue.add("test", data=data ) - + await queue.add("test", data=data) + await failed_events worker.off('failed', failing) @@ -202,17 +208,18 @@ def failing(job: Job, result): order = 0 completed_events = Future() + def completing(job: Job, result): nonlocal order if order == (job_count/2 - 1): completed_events.set_result(None) - order+=1 + order += 1 worker.on("completed", completing) - fail=False + fail = False - await queue.retryJobs({ 'count': 2, 'timestamp': timestamp}) + await queue.retryJobs({'count': 2, 'timestamp': timestamp}) await completed_events @@ -240,18 +247,19 @@ async def process(job: Job, token: str): worker = Worker(queueName, process) failed_events = Future() + def failing(job: Job, result): nonlocal order if order == (job_count - 1): failed_events.set_result(None) - order+=1 + order += 1 worker.on("failed", failing) for index in range(job_count): data = {"idx": index} - await queue.add("test", data=data ) - + await queue.add("test", data=data) + await failed_events worker.off('failed', failing) @@ -262,10 +270,10 @@ def failing(job: Job, result): order = 0 - fail=False + fail = False await queue.pause() - await queue.retryJobs({ 'count': 2 }) + await queue.retryJobs({'count': 2}) paused_count = await queue.getJobCounts('paused') self.assertEqual(paused_count['paused'], job_count) @@ -273,5 +281,6 @@ def failing(job: Job, result): await queue.close() await worker.close() + if __name__ == '__main__': unittest.main() diff --git a/python/tests/worker_tests.py b/python/tests/worker_tests.py index 75b0e9c1b7..728ec36e29 100644 --- a/python/tests/worker_tests.py +++ b/python/tests/worker_tests.py @@ -4,16 +4,17 @@ https://bbc.github.io/cloudfit-public-docs/asyncio/testing.html """ -import asyncio -import unittest from asyncio import Future - from bullmq import Queue, Worker, Job +import asyncio +import unittest + queueName = "__test_queue__" + class TestWorker(unittest.IsolatedAsyncioTestCase): - + async def asyncSetUp(self): print("Setting up test queue") # Delete test queue @@ -21,12 +22,12 @@ async def asyncSetUp(self): await queue.pause() await queue.obliterate() await queue.close() - + async def test_process_jobs(self): queue = Queue(queueName) data = {"foo": "bar"} - job = await queue.add("test-job", data, { "removeOnComplete": False }) - + job = await queue.add("test-job", data, {"removeOnComplete": False}) + async def process(job: Job, token: str): print("Processing job", job) return "done" @@ -35,7 +36,7 @@ async def process(job: Job, token: str): processing = Future() worker.on("completed", lambda job, result: processing.set_result(None)) - + await processing completedJob = await Job.fromId(queue, job.id) @@ -48,15 +49,14 @@ async def process(job: Job, token: str): await worker.close(force=True) await queue.close() - async def test_process_jobs_fail(self): queue = Queue(queueName) data = {"foo": "bar"} - job = await queue.add("test-job", data, { "removeOnComplete": False }) + job = await queue.add("test-job", data, {"removeOnComplete": False}) failedReason = "Failed" - + async def process(job: Job, token: str): print("Processing job", job) raise Exception(failedReason) @@ -65,7 +65,7 @@ async def process(job: Job, token: str): processing = Future() worker.on("failed", lambda job, result: processing.set_result(None)) - + await processing failedJob = await Job.fromId(queue, job.id) @@ -85,17 +85,17 @@ async def process(job: Job, token: str): async def test_process_renews_lock(self): queue = Queue(queueName) data = {"foo": "bar"} - job = await queue.add("test-job", data, { "removeOnComplete": False }) - + job = await queue.add("test-job", data, {"removeOnComplete": False}) + async def process(job: Job, token: str): await asyncio.sleep(3) return "done" - worker = Worker(queueName, process, { "lockDuration": 1000 }) + worker = Worker(queueName, process, {"lockDuration": 1000}) processing = Future() worker.on("completed", lambda job, result: processing.set_result(None)) - + await processing completedJob = await Job.fromId(queue, job.id) @@ -112,16 +112,17 @@ async def process(job: Job, token: str): async def test_process_stalled_jobs(self): queue = Queue(queueName) data = {"foo": "bar"} - job = await queue.add("test-job", data, { "removeOnComplete": False }) - + job = await queue.add("test-job", data, {"removeOnComplete": False}) + startProcessing = Future() + async def process1(job: Job, token: str): await asyncio.sleep(2) startProcessing.set_result(None) await asyncio.sleep(2) return "done1" - worker = Worker(queueName, process1, { "lockDuration": 1000 }) + worker = Worker(queueName, process1, {"lockDuration": 1000}) await startProcessing await worker.close(force=True) @@ -129,15 +130,16 @@ async def process1(job: Job, token: str): async def process2(job: Job, token: str): return "done2" - worker2 = Worker(queueName, process2, { "lockDuration": 1000, "stalledInterval": 1000 }) + worker2 = Worker(queueName, process2, { + "lockDuration": 1000, "stalledInterval": 1000}) processing = Future() - worker2.on("completed", lambda job, result: processing.set_result(None)) + worker2.on("completed", lambda job, + result: processing.set_result(None)) stalled = Future() worker2.on("stalled", lambda jobId: stalled.set_result(None)) - - + await stalled await processing From 083b4d55ea67c75ae2a40c0545157cecd8e50508 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 23 Apr 2023 20:49:42 -0500 Subject: [PATCH 022/322] chore(deps): lock file maintenance (#1851) --- yarn.lock | 72 +++++++++++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/yarn.lock b/yarn.lock index c96bb6a59a..1b5c565b94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -762,10 +762,10 @@ "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^16.0.0": - version "16.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-16.0.0.tgz#d92838a6cd9fb4639ca875ddb3437f1045cc625e" - integrity sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA== +"@octokit/openapi-types@^17.0.0": + version "17.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.0.0.tgz#7356d287f48b20e9a1f497ef8dfaabdff9cf8622" + integrity sha512-V8BVJGN0ZmMlURF55VFHFd/L92XQQ43KvFjNmY1IYbCN3V/h/uUFV6iQi19WEHM395Nn+1qhUbViCAD/1czzog== "@octokit/plugin-paginate-rest@^6.0.0": version "6.0.0" @@ -819,11 +819,11 @@ "@octokit/plugin-rest-endpoint-methods" "^7.0.0" "@octokit/types@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.0.0.tgz#6050db04ddf4188ec92d60e4da1a2ce0633ff635" - integrity sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw== + version "9.1.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.1.2.tgz#1a8d35b1f4a3d2ad386e223f249dd5f7506979c1" + integrity sha512-LPbJIuu1WNoRHbN4UMysEdlissRFpTCWyoKT7kHPufI8T+XX33/qilfMWJo3mCOjNIKu0+43oSQPf+HJa0+TTQ== dependencies: - "@octokit/openapi-types" "^16.0.0" + "@octokit/openapi-types" "^17.0.0" "@pnpm/config.env-replace@^1.1.0": version "1.1.0" @@ -1087,9 +1087,9 @@ integrity sha512-9TyS+Ph/14zCizVcp6RG7xmRsHr3jsFA088iKbQMrTRvL6Lcs5rdOpOgjsDww8vpk6Q1dBASvm7W6Hs4hQDVDg== "@types/node@*": - version "18.15.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" - integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + version "18.16.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.0.tgz#4668bc392bb6938637b47e98b1f2ed5426f33316" + integrity sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ== "@types/node@^12.20.25": version "12.20.55" @@ -1722,9 +1722,9 @@ camelcase@^6.0.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001449: - version "1.0.30001480" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz#9bbd35ee44c2480a1e3a3b9f4496f5066817164a" - integrity sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ== + version "1.0.30001481" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz#f58a717afe92f9e69d0e35ff64df596bfad93912" + integrity sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ== cardinal@^2.1.1: version "2.1.1" @@ -2306,7 +2306,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.3, define-properties@^1.1.4: +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== @@ -2528,9 +2528,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.4.284: - version "1.4.366" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.366.tgz#48d400f9c4af8e80f7bbad0d18730c165d43155e" - integrity sha512-XjC4pyf1no8kJe24nUfyexpWwiGRbZWXU/KbprSEvXcTXUlr3Zr5vK3lQt2to0ttpMhAc3iENccwPSKbnEW2Fg== + version "1.4.369" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.369.tgz#a98d838cdd79be4471cd04e9b4dffe891d037874" + integrity sha512-LfxbHXdA/S+qyoTEA4EbhxGjrxx7WK2h6yb5K2v0UCOufUKX+VZaHbl3svlzZfv9sGseym/g3Ne4DpsgRULmqg== emoji-regex@^8.0.0: version "8.0.0" @@ -2557,9 +2557,9 @@ end-of-stream@^1.1.0: once "^1.4.0" enhanced-resolve@^5.8.3: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== + version "5.13.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275" + integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -3217,7 +3217,7 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -5950,9 +5950,9 @@ postcss-values-parser@^5.0.0: quote-unquote "^1.0.0" postcss@^8.1.7, postcss@^8.4.6: - version "8.4.22" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.22.tgz#c29e6776b60ab3af602d4b513d5bd2ff9aa85dc1" - integrity sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA== + version "8.4.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" + integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -5995,9 +5995,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^2.7.1: - version "2.8.7" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" - integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-ms@^7.0.1: version "7.0.1" @@ -6280,13 +6280,13 @@ redis-parser@^3.0.0: redis-errors "^1.0.0" regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" regexpp@^3.1.0: version "3.2.0" @@ -7533,9 +7533,9 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== which-typed-array@^1.1.9: version "1.1.9" From 5bebf8d6560de78448b0413baaabd26f7227575c Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 26 Apr 2023 19:12:49 -0500 Subject: [PATCH 023/322] feat(python): add moveToDelayed job method (#1849) --- python/bullmq/backoffs.py | 38 +++++++++++ python/bullmq/job.py | 52 +++++++++++++- python/bullmq/scripts.py | 95 +++++++++++++++++++------- python/bullmq/types/__init__.py | 2 +- python/bullmq/types/backoff_options.py | 13 ++++ python/bullmq/types/job_options.py | 7 +- python/bullmq/worker.py | 20 +++--- python/run_tests.sh | 1 + python/tests/delay_tests.py | 57 ++++++++++++++++ python/tests/worker_tests.py | 34 +++++++++ 10 files changed, 282 insertions(+), 37 deletions(-) create mode 100644 python/bullmq/backoffs.py create mode 100644 python/bullmq/types/backoff_options.py create mode 100644 python/tests/delay_tests.py diff --git a/python/bullmq/backoffs.py b/python/bullmq/backoffs.py new file mode 100644 index 0000000000..3016f72d1f --- /dev/null +++ b/python/bullmq/backoffs.py @@ -0,0 +1,38 @@ +from bullmq.types import BackoffOptions + +import math + + +class Backoffs: + + builtin_strategies = { + "fixed": lambda delay: lambda attempts_made, type, err, job: delay, + "exponential": lambda delay: lambda attempts_made, type, err, job: int(round(pow(2, attempts_made - 1) * delay)) + } + + @staticmethod + def normalize(backoff: int | BackoffOptions): + if type(backoff) == int and math.isfinite(backoff): + return { + "type": 'fixed', + "delay": backoff + } + elif backoff: + return backoff + + @staticmethod + async def calculate(backoff: BackoffOptions, attempts_made: int, err, job, customStrategy): + if backoff: + strategy = lookup_strategy(backoff, customStrategy) + + return strategy(attempts_made, backoff.get("type"), err, job) + + +def lookup_strategy(backoff: BackoffOptions, custom_strategy): + backoff_type = backoff.get("type") + if backoff_type in Backoffs.builtin_strategies: + Backoffs.builtin_strategies[backoff.type](backoff.delay) + elif custom_strategy: + return custom_strategy + else: + raise Exception(f"Unknown backoff strategy {backoff_type}.If a custom backoff strategy is used, specify it when the queue is created.") diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 832ded3104..bf5dfbebb4 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -1,6 +1,7 @@ from __future__ import annotations from typing import List, Any, TYPE_CHECKING from bullmq.scripts import Scripts +from bullmq.backoffs import Backoffs if TYPE_CHECKING: from bullmq.queue import Queue from bullmq.types import JobOptions @@ -30,7 +31,11 @@ def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): self.id = opts.get("jobId", None) self.progress = 0 self.timestamp = opts.get("timestamp", round(time.time() * 1000)) - self.opts = opts + final_opts = {"attempts": 0, "delay": 0} + final_opts.update(opts or {}) + self.discarded = False + self.opts = final_opts + self.queue = queue self.delay = opts.get("delay", 0) self.attempts = opts.get("attempts", 1) self.attemptsMade = 0 @@ -48,6 +53,51 @@ def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): def updateProgress(self, progress): self.progress = progress return self.scripts.updateProgress(self.id, progress) + + async def moveToFailed(self, err, token:str, fetchNext:bool = False): + message = str(err) + self.failedReason = message + + move_to_failed = False + finished_on = 0 + command = 'failed' + + async with self.queue.redisConnection.conn.pipeline(transaction=True) as pipe: + if self.attemptsMade < self.opts['attempts'] and not self.discarded: + delay = await Backoffs.calculate( + self.opts.get('backoff'), self.attemptsMade, + err, self, self.queue.opts.get("settings") and self.queue.opts['settings'].get("backoffStrategy") + ) + if delay == -1: + move_to_failed = True + elif delay: + keys, args = self.scripts.moveToDelayedArgs( + self.id, + round(time.time() * 1000) + delay, + token + ) + + await self.scripts.commands["moveToDelayed"](keys=keys, args=args, client=pipe) + command = 'delayed' + else: + move_to_failed = True + + if move_to_failed: + keys, args = self.scripts.moveToFailedArgs( + self, message, self.opts.get("removeOnFail", False), + token, self.opts, fetchNext + ) + await self.scripts.commands["moveToFinished"](keys=keys, args=args, client=pipe) + finished_on = args[1] + + results = await pipe.execute() + code = results[0] + + if code < 0: + raise self.scripts.finishedErrors(code, self.id, command, 'active') + + if finished_on and type(finished_on) == int: + self.finishedOn = finished_on @staticmethod def fromJSON(queue: Queue, rawData: dict, jobId: str | None = None): diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 146933956d..7585785279 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -33,6 +33,7 @@ def __init__(self, prefix: str, queueName: str, redisClient: Redis): "obliterate": redisClient.register_script(self.getScript("obliterate-2.lua")), "pause": redisClient.register_script(self.getScript("pause-4.lua")), "moveToActive": redisClient.register_script(self.getScript("moveToActive-9.lua")), + "moveToDelayed": redisClient.register_script(self.getScript("moveToDelayed-8.lua")), "moveToFinished": redisClient.register_script(self.getScript("moveToFinished-12.lua")), "moveStalledJobsToWait": redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), "retryJobs": redisClient.register_script(self.getScript("retryJobs-6.lua")), @@ -88,6 +89,33 @@ def addJob(self, job: Job): return self.commands["addJob"](keys=keys, args=[packedArgs, jsonData, packedOpts]) + def moveToDelayedArgs(self, job_id: str, timestamp: int, token: str): + max_timestamp = max(0, timestamp or 0) + + if timestamp > 0: + max_timestamp = max_timestamp * 0x1000 + (convert_to_int(job_id) & 0xfff) + + keys = self.getKeys(['wait', 'active', 'priority', 'delayed']) + keys.append(self.toKey(job_id)) + keys.append(self.keys['events']) + keys.append(self.keys['paused']) + keys.append(self.keys['meta']) + + args = [self.keys[''], round(time.time() * 1000), str(max_timestamp), + job_id, token] + + return (keys, args) + + async def moveToDelayed(self, job_id: str, timestamp: int, token: str = "0"): + keys, args = self.moveToDelayedArgs(job_id, timestamp, token) + + result = await self.commands["moveToDelayed"](keys=keys, args=args) + + if result is not None: + if result < 0: + raise self.finishedErrors(result, job_id, 'moveToDelayed', 'active') + return None + def getCounts(self, types): keys = self.getKeys(['']) transformed_types = list( @@ -160,10 +188,10 @@ async def updateProgress(self, job_id: str, progress): if result is not None: if result < 0: - raise finishedErrors(result, job_id, 'updateProgress') + raise self.finishedErrors(result, job_id, 'updateProgress') return None - async def moveToFinished(self, job: Job, val: Any, propVal: str, shouldRemove, target, token: str, opts: dict, fetchNext=True) -> list[Any] | None: + def moveToFinishedArgs(self, job: Job, val: Any, propVal: str, shouldRemove, target, token: str, opts: dict, fetchNext=True) -> list[Any] | None: timestamp = round(time.time() * 1000) metricsKey = self.toKey('metrics:' + target) @@ -212,14 +240,22 @@ def getFailParentOnFailure(job: Job): args = [job.id, timestamp, propVal, val or "", target, "", fetchNext and "fetch" or "", self.keys[''], packedOpts] + return (keys, args) + + def moveToFailedArgs(self, job: Job, failed_reason: str, shouldRemove, token: str, opts: dict, fetchNext=True): + return self.moveToFinishedArgs( + job, failed_reason, 'failedReason', shouldRemove, 'failed', + token, opts, fetchNext + ) + + async def moveToFinished(self, job: Job, val: Any, propVal: str, shouldRemove, target, token: str, opts: dict, fetchNext=True) -> list[Any] | None: + keys, args = self.moveToFinishedArgs(job, val, propVal, shouldRemove, target, token, opts, fetchNext) + result = await self.commands["moveToFinished"](keys=keys, args=args) if result is not None: if result < 0: - raise finishedErrors(result, job.id, 'finished', 'active') - else: - # I do not like this as it is using a sideeffect - job.finishedOn = timestamp + raise self.finishedErrors(result, job.id, 'finished', 'active') return raw2NextJobData(result) return None @@ -236,31 +272,30 @@ def moveStalledJobsToWait(self, maxStalledCount: int, stalledInterval: int): return self.commands["moveStalledJobsToWait"](keys, args) -def finishedErrors(code: int, jobId: str, command: str, state: str) -> TypeError: - if code == ErrorCode.JobNotExist.value: - return TypeError(f"Missing key for job {jobId}.{command}") - elif code == ErrorCode.JobLockNotExist.value: - return TypeError(f"Missing lock for job {jobId}.{command}") - elif code == ErrorCode.JobNotInState.value: - return TypeError(f"Job {jobId} is not in the state {state}.{command}") - elif code == ErrorCode.JobPendingDependencies.value: - return TypeError(f"Job {jobId} has pending dependencies.{command}") - elif code == ErrorCode.ParentJobNotExist.value: - return TypeError(f"Missing key for parent job {jobId}.{command}") - elif code == ErrorCode.JobLockMismatch.value: - return TypeError(f"Lock mismatch for job {jobId}. Cmd {command} from {state}") - else: - return TypeError(f"Unknown code {str(code)} error for {jobId}.{command}") + def finishedErrors(code: int, jobId: str, command: str, state: str) -> TypeError: + if code == ErrorCode.JobNotExist.value: + return TypeError(f"Missing key for job {jobId}.{command}") + elif code == ErrorCode.JobLockNotExist.value: + return TypeError(f"Missing lock for job {jobId}.{command}") + elif code == ErrorCode.JobNotInState.value: + return TypeError(f"Job {jobId} is not in the state {state}.{command}") + elif code == ErrorCode.JobPendingDependencies.value: + return TypeError(f"Job {jobId} has pending dependencies.{command}") + elif code == ErrorCode.ParentJobNotExist.value: + return TypeError(f"Missing key for parent job {jobId}.{command}") + elif code == ErrorCode.JobLockMismatch.value: + return TypeError(f"Lock mismatch for job {jobId}. Cmd {command} from {state}") + else: + return TypeError(f"Unknown code {str(code)} error for {jobId}.{command}") def raw2NextJobData(raw: list[Any]) -> list[Any] | None: if raw: - # TODO: return all the raw datas (up to 4) + result = [None, raw[1], None, None] if len(raw) == 2 else [None, raw[1], raw[2], raw[3]] if raw[0]: - return (array2obj(raw[0]), raw[1]) - else: - return (None, raw[1]) - return None + result[0]= array2obj(raw[0]) + return result + return [None, None, None, None] def array2obj(arr: list[str]) -> dict[str, str]: @@ -268,3 +303,11 @@ def array2obj(arr: list[str]) -> dict[str, str]: for i in range(0, len(arr), 2): obj[arr[i]] = arr[i + 1] return obj + + +def convert_to_int(text: str): + try: + result = int(text) + return result + except ValueError: + return 0 diff --git a/python/bullmq/types/__init__.py b/python/bullmq/types/__init__.py index 4cfee0b376..44910011be 100644 --- a/python/bullmq/types/__init__.py +++ b/python/bullmq/types/__init__.py @@ -1,4 +1,4 @@ - +from bullmq.types.backoff_options import BackoffOptions from bullmq.types.keep_jobs import KeepJobs from bullmq.types.job_options import JobOptions from bullmq.types.queue_options import QueueOptions diff --git a/python/bullmq/types/backoff_options.py b/python/bullmq/types/backoff_options.py new file mode 100644 index 0000000000..aa21a33d29 --- /dev/null +++ b/python/bullmq/types/backoff_options.py @@ -0,0 +1,13 @@ +from typing import TypedDict + + +class BackoffOptions(TypedDict, total=False): + type: str | dict + """ + Name of the backoff strategy. + """ + + delay: int + """ + Delay in milliseconds. + """ diff --git a/python/bullmq/types/job_options.py b/python/bullmq/types/job_options.py index 28ee75db61..ab95d87e0d 100644 --- a/python/bullmq/types/job_options.py +++ b/python/bullmq/types/job_options.py @@ -1,8 +1,13 @@ from typing import TypedDict -from bullmq.types import KeepJobs +from bullmq.types import BackoffOptions, KeepJobs class JobOptions(TypedDict, total=False): + backoff: int | BackoffOptions + """ + Backoff setting for automatic retries if the job fails. + """ + jobId: str """ Override the job ID - by default, the job ID is a unique diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index f5a5e313f6..ddd6a2c1ef 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -16,12 +16,14 @@ def __init__(self, name: str, processor: Callable[[Job, str], asyncio.Future], o super().__init__() self.name = name self.processor = processor - self.opts = { - "concurrency": opts.get("concurrency", 1), - "lockDuration": opts.get("lockDuration", 30000), - "maxStalledCount": opts.get("maxStalledCount", 1), - "stalledInterval": opts.get("stalledInterval", 30000), + final_opts = { + "concurrency": 1, + "lockDuration": 30000, + "maxStalledCount": 1, + "stalledInterval": 30000, } + final_opts.update(opts or {}) + self.opts = final_opts redis_opts = opts.get("connection", {}) self.redisConnection = RedisConnection(redis_opts) self.blockingRedisConnection = RedisConnection(redis_opts) @@ -92,9 +94,11 @@ async def getNextJob(self, token: str): result = await self.scripts.moveToActive(token, self.opts) job = None job_id = None + limit_until = None delay_until = None + if result: - job, job_id = result + job, job_id, limit_until, delay_until = result # If there are no jobs in the waiting list we keep waiting with BRPOPLPUSH if job is None: @@ -102,7 +106,7 @@ async def getNextJob(self, token: str): if delay_until else 5000, 5000) / 1000 job_id = await self.bclient.brpoplpush(self.scripts.keys["wait"], self.scripts.keys["active"], timeout) if job_id: - job, job_id = await self.scripts.moveToActive(token, self.opts, job_id) + job, job_id, limit_until, delay_until = await self.scripts.moveToActive(token, self.opts, job_id) if job and job_id: return Job.fromJSON(self, job, job_id) @@ -120,7 +124,7 @@ async def processJob(self, job: Job, token: str): stacktrace = traceback.format_exc() if not self.forceClosing: - await self.scripts.moveToFailed(job, str(err), job.opts.get("removeOnFail", False), token, self.opts, fetchNext=not self.closing) + await job.moveToFailed(err, token) # TODO: Store the stacktrace in the job diff --git a/python/run_tests.sh b/python/run_tests.sh index ea0ca9df4f..39bf006076 100755 --- a/python/run_tests.sh +++ b/python/run_tests.sh @@ -1,5 +1,6 @@ #!/bin/bash redis-cli flushall +python3 -m unittest -v tests.delay_tests python3 -m unittest -v tests.job_tests python3 -m unittest -v tests.queue_tests python3 -m unittest -v tests.worker_tests \ No newline at end of file diff --git a/python/tests/delay_tests.py b/python/tests/delay_tests.py new file mode 100644 index 0000000000..9c406b7e50 --- /dev/null +++ b/python/tests/delay_tests.py @@ -0,0 +1,57 @@ +""" +Tests for delayed jobs. + +https://bbc.github.io/cloudfit-public-docs/asyncio/testing.html +""" + +import unittest +import time + +from asyncio import Future +from bullmq import Queue, Job, Worker + +queueName = "__bullmq_test_queue__" + +class TestJob(unittest.IsolatedAsyncioTestCase): + + async def asyncSetUp(self): + print("Setting up test queue") + # Delete test queue + queue = Queue(queueName) + await queue.pause() + await queue.obliterate() + await queue.close() + + async def test_progress_delayed_job_only_after_delayed_time(self): + delay = 1000 + margin = 1.2 + timestamp = round(time.time() * 1000) + queue = Queue(queueName) + + async def process(job: Job, token: str): + print('hola') + return "done" + + worker = Worker(queueName, process) + + completed_events = Future() + + def completing(job: Job, result): + self.assertGreater(round(time.time() * 1000), timestamp + delay) + self.assertGreaterEqual(job.processedOn - job.timestamp, delay) + self.assertLess(job.processedOn - job.timestamp, delay * margin, + 'processedOn is not within margin') + completed_events.set_result(None) + + worker.on("completed", completing) + + job = await queue.add("test", {"delayed": "foobar"}, {"delay": delay}) + + self.assertEqual(job.opts["delay"], delay) + + await completed_events + await queue.close() + await worker.close() + +if __name__ == '__main__': + unittest.main() diff --git a/python/tests/worker_tests.py b/python/tests/worker_tests.py index 728ec36e29..b55cc6c2e0 100644 --- a/python/tests/worker_tests.py +++ b/python/tests/worker_tests.py @@ -9,6 +9,7 @@ import asyncio import unittest +import time queueName = "__test_queue__" @@ -154,6 +155,39 @@ async def process2(job: Job, token: str): await worker2.close(force=True) await queue.close() + async def test_retry_job_after_delay_with_custom_backoff(self): + queue = Queue(queueName) + + async def process1(job: Job, token: str): + if job.attemptsMade < 3: + raise Exception("Not yet!") + return None + + def backoff_strategy(attempts_made, type, err, job): + return attempts_made * 1000 + + worker = Worker(queueName, process1, {"settings": { + "backoffStrategy": backoff_strategy + }}) + + start = round(time.time() * 1000) + await queue.add("test", { "foo": "bar" }, + {"attempts": 3, "backoff": {"type": "custom"}}) + + completed_events = Future() + + def completing(job: Job, result): + elapse = round(time.time() * 1000) - start + self.assertGreater(elapse, 3000) + completed_events.set_result(None) + + worker.on("completed", completing) + + await completed_events + + await queue.close() + await worker.close() + if __name__ == '__main__': unittest.main() From 0b538cedf63c3f006838ee3d016e463ee3492f81 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 27 Apr 2023 20:10:23 -0500 Subject: [PATCH 024/322] feat(python): save stacktrace when job fails (#1859) --- python/bullmq/job.py | 29 +++++++++++++++++++++++------ python/bullmq/scripts.py | 7 +++++++ python/bullmq/types/job_options.py | 5 +++++ python/bullmq/worker.py | 4 ---- python/tests/worker_tests.py | 3 +-- 5 files changed, 36 insertions(+), 12 deletions(-) diff --git a/python/bullmq/job.py b/python/bullmq/job.py index bf5dfbebb4..2397ba1dce 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -8,6 +8,7 @@ import json import time +import traceback optsDecodeMap = { @@ -53,16 +54,17 @@ def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): def updateProgress(self, progress): self.progress = progress return self.scripts.updateProgress(self.id, progress) - + async def moveToFailed(self, err, token:str, fetchNext:bool = False): - message = str(err) - self.failedReason = message + error_message = str(err) + self.failedReason = error_message move_to_failed = False finished_on = 0 - command = 'failed' + command = 'moveToFailed' async with self.queue.redisConnection.conn.pipeline(transaction=True) as pipe: + await self.saveStacktrace(pipe, error_message) if self.attemptsMade < self.opts['attempts'] and not self.discarded: delay = await Backoffs.calculate( self.opts.get('backoff'), self.attemptsMade, @@ -84,14 +86,14 @@ async def moveToFailed(self, err, token:str, fetchNext:bool = False): if move_to_failed: keys, args = self.scripts.moveToFailedArgs( - self, message, self.opts.get("removeOnFail", False), + self, error_message, self.opts.get("removeOnFail", False), token, self.opts, fetchNext ) await self.scripts.commands["moveToFinished"](keys=keys, args=args, client=pipe) finished_on = args[1] results = await pipe.execute() - code = results[0] + code = results[1] if code < 0: raise self.scripts.finishedErrors(code, self.id, command, 'active') @@ -99,6 +101,21 @@ async def moveToFailed(self, err, token:str, fetchNext:bool = False): if finished_on and type(finished_on) == int: self.finishedOn = finished_on + async def saveStacktrace(self, pipe, err:str): + stacktrace = traceback.format_exc() + stackTraceLimit = self.opts.get("stackTraceLimit") + + if stacktrace: + self.stacktrace.append(stacktrace) + if self.opts.get("stackTraceLimit"): + self.stacktrace = self.stacktrace[-(stackTraceLimit-1):stackTraceLimit] + + keys, args = self.scripts.saveStacktraceArgs( + self.id, json.dumps(self.stacktrace, separators=(',', ':')), err) + + await self.scripts.commands["saveStacktrace"](keys=keys, args=args, client=pipe) + + @staticmethod def fromJSON(queue: Queue, rawData: dict, jobId: str | None = None): """ diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 7585785279..57e2eb4bdf 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -37,6 +37,7 @@ def __init__(self, prefix: str, queueName: str, redisClient: Redis): "moveToFinished": redisClient.register_script(self.getScript("moveToFinished-12.lua")), "moveStalledJobsToWait": redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), "retryJobs": redisClient.register_script(self.getScript("retryJobs-6.lua")), + "saveStacktrace": redisClient.register_script(self.getScript("saveStacktrace-1.lua")), "updateProgress": redisClient.register_script(self.getScript("updateProgress-2.lua")), } @@ -89,6 +90,12 @@ def addJob(self, job: Job): return self.commands["addJob"](keys=keys, args=[packedArgs, jsonData, packedOpts]) + def saveStacktraceArgs(self, job_id: str, stacktrace: str, failedReason: str): + keys = [self.toKey(job_id)] + args = [stacktrace, failedReason] + + return (keys, args) + def moveToDelayedArgs(self, job_id: str, timestamp: int, token: str): max_timestamp = max(0, timestamp or 0) diff --git a/python/bullmq/types/job_options.py b/python/bullmq/types/job_options.py index ab95d87e0d..9cb617d477 100644 --- a/python/bullmq/types/job_options.py +++ b/python/bullmq/types/job_options.py @@ -58,3 +58,8 @@ class JobOptions(TypedDict, total=False): age and/or count to keep. It overrides whatever setting is used in the worker. Default behavior is to keep the job in the failed set. """ + + stackTraceLimit: int + """ + Limits the amount of stack trace lines that will be recorded in the stacktrace. + """ diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index ddd6a2c1ef..e13d515f19 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -121,13 +121,9 @@ async def processJob(self, job: Job, token: str): except Exception as err: try: print("Error processing job", err) - stacktrace = traceback.format_exc() - if not self.forceClosing: await job.moveToFailed(err, token) - # TODO: Store the stacktrace in the job - self.emit("failed", job, err) except Exception as err: print("Error moving job to failed", err) diff --git a/python/tests/worker_tests.py b/python/tests/worker_tests.py index b55cc6c2e0..d1b005f66b 100644 --- a/python/tests/worker_tests.py +++ b/python/tests/worker_tests.py @@ -75,8 +75,7 @@ async def process(job: Job, token: str): self.assertEqual(failedJob.attemptsMade, 1) self.assertEqual(failedJob.data, data) self.assertEqual(failedJob.failedReason, failedReason) - self.assertEqual(failedJob.stacktrace, []) - self.assertEqual(failedJob.returnvalue, None) + self.assertEqual(len(failedJob.stacktrace), 1) self.assertEqual(failedJob.returnvalue, None) self.assertNotEqual(failedJob.finishedOn, None) From 503936909e004423536667720952e87fee90cff0 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 28 Apr 2023 21:30:25 -0500 Subject: [PATCH 025/322] refactor(finished-on): save finishedOn on job methods (#1857) --- src/classes/job.ts | 7 ++++- src/classes/scripts.ts | 38 ++++++----------------- tests/test_events.ts | 69 +++++++++++++++++++++--------------------- tests/test_job.ts | 4 ++- 4 files changed, 53 insertions(+), 65 deletions(-) diff --git a/src/classes/job.ts b/src/classes/job.ts index b69673b613..85a9ca3563 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -541,13 +541,18 @@ export class Job< throw errorObject.value; } - return this.scripts.moveToCompleted( + const args = this.scripts.moveToCompletedArgs( this, stringifiedReturnValue, this.opts.removeOnComplete, token, fetchNext, ); + + const result = await this.scripts.moveToFinished(this.id, args); + this.finishedOn = args[13] as number; + + return result; } /** diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index 730168c80a..5ee4cafc02 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -303,39 +303,17 @@ export class Scripts { : { count: shouldRemove ? 0 : -1 }; } - protected async moveToFinished< + async moveToFinished< DataType = any, ReturnType = any, NameType extends string = string, - >( - job: MinimalJob, - val: any, - propVal: FinishedPropValAttribute, - shouldRemove: boolean | number | KeepJobs, - target: FinishedStatus, - token: string, - fetchNext: boolean, - ) { + >(jobId: string, args: (string | number | boolean | Buffer)[]) { const client = await this.queue.client; - const timestamp = Date.now(); - const args = this.moveToFinishedArgs( - job, - val, - propVal, - shouldRemove, - target, - token, - timestamp, - fetchNext, - ); - const result = await (client).moveToFinished(args); if (result < 0) { - throw this.finishedErrors(result, job.id, 'finished', 'active'); + throw this.finishedErrors(result, jobId, 'moveToFinished', 'active'); } else { - job.finishedOn = timestamp; - if (typeof result !== 'undefined') { return raw2NextJobData(result); } @@ -442,20 +420,22 @@ export class Scripts { return (client).getCounts(args); } - moveToCompleted( + moveToCompletedArgs( job: MinimalJob, returnvalue: R, removeOnComplete: boolean | number | KeepJobs, token: string, - fetchNext: boolean, - ) { - return this.moveToFinished( + fetchNext = false, + ): (string | number | boolean | Buffer)[] { + const timestamp = Date.now(); + return this.moveToFinishedArgs( job, returnvalue, 'returnvalue', removeOnComplete, 'completed', token, + timestamp, fetchNext, ); } diff --git a/tests/test_events.ts b/tests/test_events.ts index 2cbf40efef..fc26287fb6 100644 --- a/tests/test_events.ts +++ b/tests/test_events.ts @@ -104,46 +104,47 @@ describe('events', function () { await waiting; }); - it('emits cleaned global event when jobs were cleaned', async function () { - const worker = new Worker( - queueName, - async () => { - await delay(5); - }, - { - connection, - autorun: false, - }, - ); - const numJobs = 50; - - worker.on( - 'completed', - after(50, async function () { - await delay(1); - await queue.clean(0, 0, 'completed'); - }), - ); + describe('when jobs are cleaned', function () { + it('emits cleaned global event', async function () { + const worker = new Worker( + queueName, + async () => { + await delay(10); + }, + { + connection, + autorun: false, + }, + ); + const numJobs = 50; - const cleaned = new Promise(resolve => { - queueEvents.once('cleaned', async ({ count }) => { - expect(count).to.be.eql('50'); - resolve(); + worker.on( + 'completed', + after(numJobs, async function () { + await queue.clean(0, 0, 'completed'); + }), + ); + + const cleaned = new Promise(resolve => { + queueEvents.once('cleaned', async ({ count }) => { + expect(count).to.be.eql('50'); + resolve(); + }); }); - }); - const jobs = Array.from(Array(numJobs).keys()).map(() => ({ - name: 'test', - data: { foo: 'bar' }, - })); - await queue.addBulk(jobs); + const jobs = Array.from(Array(numJobs).keys()).map(() => ({ + name: 'test', + data: { foo: 'bar' }, + })); + await queue.addBulk(jobs); - worker.run(); + worker.run(); - await cleaned; + await cleaned; - const actualCount = await queue.count(); - expect(actualCount).to.be.equal(0); + const actualCount = await queue.count(); + expect(actualCount).to.be.equal(0); + }); }); it('emits drained global event when all jobs have been processed', async function () { diff --git a/tests/test_job.ts b/tests/test_job.ts index 6c7c710edd..1049374240 100644 --- a/tests/test_job.ts +++ b/tests/test_job.ts @@ -532,7 +532,9 @@ describe('Job', function () { await expect( job.moveToCompleted('return value', token), - ).to.be.rejectedWith(`Job ${job.id} has pending dependencies. finished`); + ).to.be.rejectedWith( + `Job ${job.id} has pending dependencies. moveToFinished`, + ); const lock = await client.get(`bull:${parentQueueName}:${job.id}:lock`); From 4f3173003464d3ef468271ad2394c1ca613f6077 Mon Sep 17 00:00:00 2001 From: Vibhanshu Pandey <127181204+vibhanshu-pmi@users.noreply.github.com> Date: Wed, 3 May 2023 01:30:52 +0530 Subject: [PATCH 026/322] docs(repeatable): fix invalid cron expression in example (#1867) --- docs/gitbook/guide/jobs/repeatable.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/gitbook/guide/jobs/repeatable.md b/docs/gitbook/guide/jobs/repeatable.md index f1e088764a..5a55119c24 100644 --- a/docs/gitbook/guide/jobs/repeatable.md +++ b/docs/gitbook/guide/jobs/repeatable.md @@ -28,7 +28,7 @@ await myQueue.add( { color: 'yellow' }, { repeat: { - pattern: '* 15 3 * * *', + pattern: '0 15 3 * * *', }, }, ); From e83f7d0447471c24a753f0ad3e302a1eb85382d5 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 2 May 2023 17:02:44 -0500 Subject: [PATCH 027/322] docs(python): add changelog (#1868) --- docs/gitbook/SUMMARY.md | 1 + docs/gitbook/python/changelog.md | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 docs/gitbook/python/changelog.md diff --git a/docs/gitbook/SUMMARY.md b/docs/gitbook/SUMMARY.md index 13797c6745..09a9e3e842 100644 --- a/docs/gitbook/SUMMARY.md +++ b/docs/gitbook/SUMMARY.md @@ -97,3 +97,4 @@ ## Python * [Introduction](python/introduction.md) +* [Changelog](python/changelog.md) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md new file mode 100644 index 0000000000..d2f631c181 --- /dev/null +++ b/docs/gitbook/python/changelog.md @@ -0,0 +1,30 @@ +# [0.3.0](https://github.com/taskforcesh/bullmq/compare/ca48163...46d6f94) (2023-03-18) + + +### Bug Fixes + +* correct condition so that the worker keeps processing jobs indefinitely \([ef0c5d6](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)\) +* fix scripts typing on array2obj function \([134f6ab](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)\) +* pass maxMetricsSize as empty string when it is not provided \([6bda2b2](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)\) + + +### Features + +* add getJobCounts method \([46d6f94](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)\) +* improve worker concurrency \([ec7c49e](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)\) + +# [0.2.0](https://github.com/taskforcesh/bullmq/compare/a97b22f...ca48163) (2023-03-29) + + +### Features + +* add trimEvents method \([ca48163](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)\) +* add retryJobs method \([2745327](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)\) + +# 0.1.0 (2023-02-15) + + +### Features + +* initial python package \([a97b22f](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)\) + From b044a03159bc3a8d8823c71019f64825f318a6c2 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 2 May 2023 18:15:30 -0500 Subject: [PATCH 028/322] feat(python): support retryJob logic (#1869) --- python/bullmq/job.py | 5 +++++ python/bullmq/scripts.py | 17 ++++++++++++++++- src/classes/job.ts | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 2397ba1dce..e08d357b51 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -81,6 +81,11 @@ async def moveToFailed(self, err, token:str, fetchNext:bool = False): await self.scripts.commands["moveToDelayed"](keys=keys, args=args, client=pipe) command = 'delayed' + else: + keys, args = self.scripts.retryJobArgs(self.id, self.opts.get("lifo", False), token) + + await self.scripts.commands["retryJob"](keys=keys, args=args, client=pipe) + command = 'retryJob' else: move_to_failed = True diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 57e2eb4bdf..b77985616b 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -36,6 +36,7 @@ def __init__(self, prefix: str, queueName: str, redisClient: Redis): "moveToDelayed": redisClient.register_script(self.getScript("moveToDelayed-8.lua")), "moveToFinished": redisClient.register_script(self.getScript("moveToFinished-12.lua")), "moveStalledJobsToWait": redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), + "retryJob": redisClient.register_script(self.getScript("retryJob-8.lua")), "retryJobs": redisClient.register_script(self.getScript("retryJobs-6.lua")), "saveStacktrace": redisClient.register_script(self.getScript("saveStacktrace-1.lua")), "updateProgress": redisClient.register_script(self.getScript("updateProgress-2.lua")), @@ -96,6 +97,21 @@ def saveStacktraceArgs(self, job_id: str, stacktrace: str, failedReason: str): return (keys, args) + def retryJobArgs(self, job_id: str, lifo: bool, token: str): + keys = self.getKeys(['active', 'wait', 'paused']) + keys.append(self.toKey(job_id)) + keys.append(self.keys['meta']) + keys.append(self.keys['events']) + keys.append(self.keys['delayed']) + keys.append(self.keys['priority']) + + push_cmd = "R" if lifo else "L" + + args = [self.keys[''], round(time.time() * 1000), push_cmd, + job_id, token] + + return (keys, args) + def moveToDelayedArgs(self, job_id: str, timestamp: int, token: str): max_timestamp = max(0, timestamp or 0) @@ -178,7 +194,6 @@ async def moveToActive(self, token: str, opts: dict, jobId: str = "") -> list[An result = await self.commands["moveToActive"](keys=keys, args=args) - # Todo: up to 4 results in tuple (only 2 now) return raw2NextJobData(result) def moveToCompleted(self, job: Job, val: Any, removeOnComplete, token: str, opts: dict, fetchNext=True): diff --git a/src/classes/job.ts b/src/classes/job.ts index 85a9ca3563..0779275dfa 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -615,7 +615,7 @@ export class Job< (multi).retryJob( this.scripts.retryJobArgs(this.id, this.opts.lifo, token), ); - command = 'retry'; + command = 'retryJob'; } } else { // If not, move to failed From 8358e28680fe85a51935052082475fb8fa5f9c06 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Tue, 2 May 2023 22:19:46 -0500 Subject: [PATCH 029/322] test(events): try to fix flaky test --- tests/test_events.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/test_events.ts b/tests/test_events.ts index fc26287fb6..0c6b57ea4e 100644 --- a/tests/test_events.ts +++ b/tests/test_events.ts @@ -121,14 +121,19 @@ describe('events', function () { worker.on( 'completed', after(numJobs, async function () { + await delay(10); await queue.clean(0, 0, 'completed'); }), ); - const cleaned = new Promise(resolve => { + const cleaned = new Promise((resolve, reject) => { queueEvents.once('cleaned', async ({ count }) => { - expect(count).to.be.eql('50'); - resolve(); + try { + expect(count).to.be.eql('50'); + resolve(); + } catch (error) { + reject(error); + } }); }); From f2f1f2ca9c53ea8dd7e7d44557d039d822ddb9b9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 3 May 2023 10:09:20 -0500 Subject: [PATCH 030/322] chore(deps): lock file maintenance (#1864) --- yarn.lock | 308 +++++++++++++++++++++++++++--------------------------- 1 file changed, 154 insertions(+), 154 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1b5c565b94..a2ca9fb35a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,57 +24,57 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" - integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== +"@babel/compat-data@^7.21.5": + version "7.21.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" + integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== "@babel/core@^7.7.5": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" - integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.8.tgz#2a8c7f0f53d60100ba4c32470ba0281c92aa9aa4" + integrity sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-compilation-targets" "^7.21.4" - "@babel/helper-module-transforms" "^7.21.2" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-compilation-targets" "^7.21.5" + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helpers" "^7.21.5" + "@babel/parser" "^7.21.8" "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.4" - "@babel/types" "^7.21.4" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" semver "^6.3.0" -"@babel/generator@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" - integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== +"@babel/generator@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f" + integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w== dependencies: - "@babel/types" "^7.21.4" + "@babel/types" "^7.21.5" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" - integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== +"@babel/helper-compilation-targets@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" + integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== dependencies: - "@babel/compat-data" "^7.21.4" + "@babel/compat-data" "^7.21.5" "@babel/helper-validator-option" "^7.21.0" browserslist "^4.21.3" lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== +"@babel/helper-environment-visitor@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" + integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== "@babel/helper-function-name@^7.21.0": version "7.21.0" @@ -91,33 +91,33 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-imports@^7.18.6": +"@babel/helper-module-imports@^7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== dependencies: "@babel/types" "^7.21.4" -"@babel/helper-module-transforms@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== +"@babel/helper-module-transforms@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" + integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-simple-access" "^7.21.5" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-validator-identifier" "^7.19.1" "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== +"@babel/helper-simple-access@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" + integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== dependencies: - "@babel/types" "^7.20.2" + "@babel/types" "^7.21.5" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" @@ -126,10 +126,10 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== +"@babel/helper-string-parser@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" + integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" @@ -141,14 +141,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== -"@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== +"@babel/helpers@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08" + integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA== dependencies: "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" "@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": version "7.18.6" @@ -159,10 +159,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" - integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== +"@babel/parser@^7.0.0", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5", "@babel/parser@^7.21.8": + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" + integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== "@babel/template@^7.20.7": version "7.20.7" @@ -173,28 +173,28 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" - integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== +"@babel/traverse@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133" + integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw== dependencies: "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-environment-visitor" "^7.18.9" + "@babel/generator" "^7.21.5" + "@babel/helper-environment-visitor" "^7.21.5" "@babel/helper-function-name" "^7.21.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.4" - "@babel/types" "^7.21.4" + "@babel/parser" "^7.21.5" + "@babel/types" "^7.21.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" - integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== +"@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" + integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== dependencies: - "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-string-parser" "^7.21.5" "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" @@ -762,10 +762,10 @@ "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^17.0.0": - version "17.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.0.0.tgz#7356d287f48b20e9a1f497ef8dfaabdff9cf8622" - integrity sha512-V8BVJGN0ZmMlURF55VFHFd/L92XQQ43KvFjNmY1IYbCN3V/h/uUFV6iQi19WEHM395Nn+1qhUbViCAD/1czzog== +"@octokit/openapi-types@^17.1.0": + version "17.1.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.1.0.tgz#9a712b5bb9d644940d8a1f24115c798c317a64a5" + integrity sha512-rnI26BAITDZTo5vqFOmA7oX4xRd18rO+gcK4MiTpJmsRMxAw0JmevNjPsjpry1bb9SVNo56P/0kbiyXXa4QluA== "@octokit/plugin-paginate-rest@^6.0.0": version "6.0.0" @@ -819,11 +819,11 @@ "@octokit/plugin-rest-endpoint-methods" "^7.0.0" "@octokit/types@^9.0.0": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.1.2.tgz#1a8d35b1f4a3d2ad386e223f249dd5f7506979c1" - integrity sha512-LPbJIuu1WNoRHbN4UMysEdlissRFpTCWyoKT7kHPufI8T+XX33/qilfMWJo3mCOjNIKu0+43oSQPf+HJa0+TTQ== + version "9.2.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.2.0.tgz#0358e3de070b1d43c5a8af63b9951c88a09fc9ed" + integrity sha512-xySzJG4noWrIBFyMu4lg4tu9vAgNg9S0aoLRONhAEz6ueyi1evBzb40HitIosaYS4XOexphG305IVcLrIX/30g== dependencies: - "@octokit/openapi-types" "^17.0.0" + "@octokit/openapi-types" "^17.1.0" "@pnpm/config.env-replace@^1.1.0": version "1.1.0" @@ -838,9 +838,9 @@ graceful-fs "4.2.10" "@pnpm/npm-conf@^2.1.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.1.1.tgz#8e50c67c902d209d2a02f1a403fc8998fe706b4c" - integrity sha512-yfRcuupmxxeDOSxvw4g+wFCrGiPD0L32f5WMzqMXp7Rl93EOCdFiDcaSNnZ10Up9GdNqkj70UTa8hfhPFphaZA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.0.tgz#221b4cfcde745d5f8928c25f391e5cc9d405b345" + integrity sha512-roLI1ul/GwzwcfcVpZYPdrgW2W/drLriObl1h+yLF5syc8/5ULWw2ALbCHUWF+4YltIqA3xFSbG4IwyJz37e9g== dependencies: "@pnpm/config.env-replace" "^1.1.0" "@pnpm/network.ca-file" "^1.0.1" @@ -1020,9 +1020,9 @@ "@types/chai" "*" "@types/chai@*", "@types/chai@^4.3.1": - version "4.3.4" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" - integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== + version "4.3.5" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" + integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== "@types/glob@^7.2.0": version "7.2.0" @@ -1087,9 +1087,9 @@ integrity sha512-9TyS+Ph/14zCizVcp6RG7xmRsHr3jsFA088iKbQMrTRvL6Lcs5rdOpOgjsDww8vpk6Q1dBASvm7W6Hs4hQDVDg== "@types/node@*": - version "18.16.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.0.tgz#4668bc392bb6938637b47e98b1f2ed5426f33316" - integrity sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ== + version "18.16.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.3.tgz#6bda7819aae6ea0b386ebc5b24bdf602f1b42b01" + integrity sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q== "@types/node@^12.20.25": version "12.20.55" @@ -1153,13 +1153,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^5.33.0": - version "5.59.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.0.tgz#0ad7cd019346cc5d150363f64869eca10ca9977c" - integrity sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w== + version "5.59.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.2.tgz#c2c443247901d95865b9f77332d9eee7c55655e8" + integrity sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ== dependencies: - "@typescript-eslint/scope-manager" "5.59.0" - "@typescript-eslint/types" "5.59.0" - "@typescript-eslint/typescript-estree" "5.59.0" + "@typescript-eslint/scope-manager" "5.59.2" + "@typescript-eslint/types" "5.59.2" + "@typescript-eslint/typescript-estree" "5.59.2" debug "^4.3.4" "@typescript-eslint/scope-manager@4.33.0": @@ -1170,23 +1170,23 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/scope-manager@5.59.0": - version "5.59.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz#86501d7a17885710b6716a23be2e93fc54a4fe8c" - integrity sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ== +"@typescript-eslint/scope-manager@5.59.2": + version "5.59.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz#f699fe936ee4e2c996d14f0fdd3a7da5ba7b9a4c" + integrity sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA== dependencies: - "@typescript-eslint/types" "5.59.0" - "@typescript-eslint/visitor-keys" "5.59.0" + "@typescript-eslint/types" "5.59.2" + "@typescript-eslint/visitor-keys" "5.59.2" "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/types@5.59.0": - version "5.59.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32" - integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== +"@typescript-eslint/types@5.59.2": + version "5.59.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.2.tgz#b511d2b9847fe277c5cb002a2318bd329ef4f655" + integrity sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w== "@typescript-eslint/typescript-estree@4.33.0", "@typescript-eslint/typescript-estree@^4.33.0": version "4.33.0" @@ -1201,13 +1201,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.59.0": - version "5.59.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz#8869156ee1dcfc5a95be3ed0e2809969ea28e965" - integrity sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg== +"@typescript-eslint/typescript-estree@5.59.2": + version "5.59.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz#6e2fabd3ba01db5d69df44e0b654c0b051fe9936" + integrity sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q== dependencies: - "@typescript-eslint/types" "5.59.0" - "@typescript-eslint/visitor-keys" "5.59.0" + "@typescript-eslint/types" "5.59.2" + "@typescript-eslint/visitor-keys" "5.59.2" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1222,12 +1222,12 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.59.0": - version "5.59.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz#a59913f2bf0baeb61b5cfcb6135d3926c3854365" - integrity sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA== +"@typescript-eslint/visitor-keys@5.59.2": + version "5.59.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz#37a419dc2723a3eacbf722512b86d6caf7d3b750" + integrity sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig== dependencies: - "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/types" "5.59.2" eslint-visitor-keys "^3.3.0" JSONStream@^1.0.4: @@ -1722,9 +1722,9 @@ camelcase@^6.0.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001449: - version "1.0.30001481" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz#f58a717afe92f9e69d0e35ff64df596bfad93912" - integrity sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ== + version "1.0.30001482" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz#8b3fad73dc35b2674a5c96df2d4f9f1c561435de" + integrity sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ== cardinal@^2.1.1: version "2.1.1" @@ -1847,9 +1847,9 @@ cli-cursor@^3.1.0: restore-cursor "^3.1.0" cli-spinners@^2.5.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.8.0.tgz#e97a3e2bd00e6d85aa0c13d7f9e3ce236f7787fc" - integrity sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ== + version "2.9.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== cli-table3@^0.6.1, cli-table3@^0.6.2: version "0.6.3" @@ -2528,9 +2528,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.4.284: - version "1.4.369" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.369.tgz#a98d838cdd79be4471cd04e9b4dffe891d037874" - integrity sha512-LfxbHXdA/S+qyoTEA4EbhxGjrxx7WK2h6yb5K2v0UCOufUKX+VZaHbl3svlzZfv9sGseym/g3Ne4DpsgRULmqg== + version "1.4.380" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.380.tgz#195dc59d930c6b74efbee6f0e6a267ce4af5ed91" + integrity sha512-XKGdI4pWM78eLH2cbXJHiBnWUwFSzZM7XujsB6stDiGu9AeSqziedP6amNLpJzE3i0rLTcfAwdCTs5ecP5yeSg== emoji-regex@^8.0.0: version "8.0.0" @@ -4983,10 +4983,10 @@ minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" @@ -5093,7 +5093,7 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -msgpackr-extract@^3.0.1: +msgpackr-extract@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz#e05ec1bb4453ddf020551bcd5daaf0092a2c279d" integrity sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A== @@ -5108,11 +5108,11 @@ msgpackr-extract@^3.0.1: "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" msgpackr@^1.6.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.8.5.tgz#8cadfb935357680648f33699d0e833c9179dbfeb" - integrity sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg== + version "1.9.1" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.9.1.tgz#4375d705232b721bedb44a3993e7aa8a6f959502" + integrity sha512-jJdrNH8tzfCtT0rjPFryBXjRDQE7rqfLkah4/8B4gYa7NNZYFBcGxqWBtfQpGC+oYyBwlkj3fARk4aooKNPHxg== optionalDependencies: - msgpackr-extract "^3.0.1" + msgpackr-extract "^3.0.2" multimatch@^4.0.0: version "4.0.0" @@ -5924,9 +5924,9 @@ pluralize@^8.0.0: integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== postcss-selector-parser@^6.0.10: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + version "6.0.12" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz#2efae5ffab3c8bfb2b7fbf0c426e3bca616c4abb" + integrity sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -6468,9 +6468,9 @@ run-parallel@^1.1.9: queue-microtask "^1.2.2" rxjs@^7.5.5: - version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" @@ -6617,9 +6617,9 @@ shell-quote@^1.6.1: integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== shiki@^0.14.1: - version "0.14.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.1.tgz#9fbe082d0a8aa2ad63df4fbf2ee11ec924aa7ee1" - integrity sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw== + version "0.14.2" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.2.tgz#d51440800b701392b31ce2336036058e338247a1" + integrity sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A== dependencies: ansi-sequence-parser "^1.1.0" jsonc-parser "^3.2.0" @@ -6844,9 +6844,9 @@ stream-combiner2@~1.1.1: readable-stream "^2.0.2" string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" @@ -7047,13 +7047,13 @@ tapable@^2.2.0: integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== + version "6.1.14" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.14.tgz#e87926bec1cfe7c9e783a77a79f3e81c1cfa3b66" + integrity sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^4.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" @@ -7657,9 +7657,9 @@ yaml@^1.10.0: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4" - integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== + version "2.2.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" + integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== yargs-parser@20.2.4: version "20.2.4" @@ -7725,9 +7725,9 @@ yargs@^15.0.2: yargs-parser "^18.1.2" yargs@^17.0.0: - version "17.7.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" - integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" escalade "^3.1.1" From 800b8c46e709a8cbc4674d84bd59d5c62251d271 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 3 May 2023 20:20:15 -0500 Subject: [PATCH 031/322] feat(python): add updateData method (#1871) --- python/bullmq/job.py | 6 +++++- python/bullmq/scripts.py | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/python/bullmq/job.py b/python/bullmq/job.py index e08d357b51..40306497b6 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -50,7 +50,11 @@ def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): self.repeatJobKey = None self.stacktrace: List[str] = [] self.scripts = Scripts(queue.prefix, queue.name, queue.redisConnection.conn) - + + def updateData(self, data): + self.data = data + return self.scripts.updateData(self.id, data) + def updateProgress(self, progress): self.progress = progress return self.scripts.updateProgress(self.id, progress) diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index b77985616b..7b9ab1c5c3 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -39,6 +39,7 @@ def __init__(self, prefix: str, queueName: str, redisClient: Redis): "retryJob": redisClient.register_script(self.getScript("retryJob-8.lua")), "retryJobs": redisClient.register_script(self.getScript("retryJobs-6.lua")), "saveStacktrace": redisClient.register_script(self.getScript("saveStacktrace-1.lua")), + "updateData": redisClient.register_script(self.getScript("updateData-1.lua")), "updateProgress": redisClient.register_script(self.getScript("updateProgress-2.lua")), } @@ -146,6 +147,18 @@ def getCounts(self, types): return self.commands["getCounts"](keys=keys, args=transformed_types) + async def updateData(self, job_id: str, data): + keys = [self.toKey(job_id)] + data_json = json.dumps(data, separators=(',', ':')) + args = [data_json] + + result = await self.commands["updateData"](keys=keys, args=args) + + if result is not None: + if result < 0: + raise self.finishedErrors(result, job_id, 'updateData') + return None + def pause(self, pause: bool = True): """ Pause or resume a queue From dd821365ab00efe1bb8bd663815ce300c4693449 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 May 2023 03:01:38 +0000 Subject: [PATCH 032/322] chore(deps): update dependency pipenv to v2023.4.29 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index 0ce3dcf43d..3f50f7bc43 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -3,7 +3,7 @@ certifi==2022.12.7 distlib==0.3.6 filelock==3.12.0 msgpack==1.0.5 -pipenv==2023.4.20 +pipenv==2023.4.29 platformdirs==3.2.0 redis==4.5.4 six==1.16.0 From 450f4490988e01a1f1a5ea054eb1ac87c384c831 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 May 2023 03:01:34 +0000 Subject: [PATCH 033/322] chore(deps): update github/codeql-action digest to f3feb00 --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 839d2ba119..7b7d1bbdbe 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,7 +42,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2 + uses: github/codeql-action/init@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -53,7 +53,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2 + uses: github/codeql-action/autobuild@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -67,4 +67,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2 + uses: github/codeql-action/analyze@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2 From a0b8cd3ca96f7ad386d437355bfb630da058d233 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 May 2023 06:39:50 +0000 Subject: [PATCH 034/322] chore(deps): update dependency platformdirs to v3.5.0 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index 3f50f7bc43..b1d8cde7b8 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -4,7 +4,7 @@ distlib==0.3.6 filelock==3.12.0 msgpack==1.0.5 pipenv==2023.4.29 -platformdirs==3.2.0 +platformdirs==3.5.0 redis==4.5.4 six==1.16.0 virtualenv==20.22.0 From 3ae441a904f1e5555754f116cb7f5f0ef38930f6 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Thu, 4 May 2023 12:52:17 +0200 Subject: [PATCH 035/322] chore(python): update python version --- python/release.sh | 7 +++++++ python/setup.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100755 python/release.sh diff --git a/python/release.sh b/python/release.sh new file mode 100755 index 0000000000..8687d2f645 --- /dev/null +++ b/python/release.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# https://betterscientificsoftware.github.io/python-for-hpc/tutorials/python-pypi-packaging/ +rm -Rf dist +rm -Rf bullmq.egg-info +# yarn build bullmq latest version +python setup.py sdist +twine upload dist/* diff --git a/python/setup.py b/python/setup.py index 265a10a8cd..ca016cdbd1 100644 --- a/python/setup.py +++ b/python/setup.py @@ -10,7 +10,7 @@ setup( name='bullmq', - version='0.1.0', + version='0.3.0', description='BullMQ for Python', long_description=long_description, long_description_content_type="text/markdown", From 332672b5d589f624db7c7dbd4a130536a011cb83 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Thu, 4 May 2023 12:52:59 +0200 Subject: [PATCH 036/322] chore(worker): remove out-commented code --- src/classes/worker.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/classes/worker.ts b/src/classes/worker.ts index df58fb9fbe..ef36d41a79 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -424,7 +424,6 @@ export class Worker< } this.running = false; - // return Promise.all(processing); return asyncFifoQueue.waitAll(); } catch (error) { this.running = false; @@ -638,11 +637,10 @@ export class Worker< } if ( - (err instanceof DelayedError || err.name == 'DelayedError') || - ( - err instanceof WaitingChildrenError || - err.name == 'WaitingChildrenError' - ) + err instanceof DelayedError || + err.name == 'DelayedError' || + err instanceof WaitingChildrenError || + err.name == 'WaitingChildrenError' ) { return; } From 870da459f419076f03885a12a4ce5a2930c500f3 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 4 May 2023 19:22:30 -0500 Subject: [PATCH 037/322] feat(python): add retry method into job (#1877) --- python/bullmq/job.py | 7 +++++++ python/bullmq/scripts.py | 25 +++++++++++++++++++++++-- tests/test_repeat.ts | 32 ++++++++++++++++++-------------- 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 40306497b6..ff84691924 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -55,6 +55,13 @@ def updateData(self, data): self.data = data return self.scripts.updateData(self.id, data) + def retry(self, state: str = "failed"): + self.failedReason = None + self.finishedOn = None + self.processedOn = None + self.returnvalue = None + return self.scripts.reprocessJob(self, state) + def updateProgress(self, progress): self.progress = progress return self.scripts.updateProgress(self.id, progress) diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 7b9ab1c5c3..ce9b1e7faa 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -30,12 +30,13 @@ def __init__(self, prefix: str, queueName: str, redisClient: Redis): "addJob": redisClient.register_script(self.getScript("addJob-8.lua")), "extendLock": redisClient.register_script(self.getScript("extendLock-2.lua")), "getCounts": redisClient.register_script(self.getScript("getCounts-1.lua")), - "obliterate": redisClient.register_script(self.getScript("obliterate-2.lua")), - "pause": redisClient.register_script(self.getScript("pause-4.lua")), "moveToActive": redisClient.register_script(self.getScript("moveToActive-9.lua")), "moveToDelayed": redisClient.register_script(self.getScript("moveToDelayed-8.lua")), "moveToFinished": redisClient.register_script(self.getScript("moveToFinished-12.lua")), "moveStalledJobsToWait": redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), + "pause": redisClient.register_script(self.getScript("pause-4.lua")), + "obliterate": redisClient.register_script(self.getScript("obliterate-2.lua")), + "reprocessJob": redisClient.register_script(self.getScript("reprocessJob-4.lua")), "retryJob": redisClient.register_script(self.getScript("retryJob-8.lua")), "retryJobs": redisClient.register_script(self.getScript("retryJobs-6.lua")), "saveStacktrace": redisClient.register_script(self.getScript("saveStacktrace-1.lua")), @@ -159,6 +160,26 @@ async def updateData(self, job_id: str, data): raise self.finishedErrors(result, job_id, 'updateData') return None + async def reprocessJob(self, job: Job, state: str): + keys = [self.toKey(job.id)] + keys.append(self.keys['events']) + keys.append(self.keys[state]) + keys.append(self.keys['wait']) + + args = [ + job.id, + ("R" if job.opts.get("lifo") else "L") + "PUSH", + "failedReason" if state == "failed" else "returnvalue", + state + ] + + result = await self.commands["reprocessJob"](keys=keys, args=args) + + if result is not None: + if result < 0: + raise self.finishedErrors(result, job.id, 'reprocessJob', state) + return None + def pause(self, pause: bool = True): """ Pause or resume a queue diff --git a/tests/test_repeat.ts b/tests/test_repeat.ts index 5b81737e85..c88c598199 100644 --- a/tests/test_repeat.ts +++ b/tests/test_repeat.ts @@ -940,22 +940,26 @@ describe('repeat', function () { let counter = 10; let prev: Job; - const completing = new Promise(resolve => { + const completing = new Promise((resolve, reject) => { worker.on('completed', async job => { - if (prev) { - expect(prev.timestamp).to.be.lt(job.timestamp); - const diff = moment(job.timestamp).diff( - moment(prev.timestamp), - 'months', - true, - ); - expect(diff).to.be.gte(1); - } - prev = job; + try { + if (prev) { + expect(prev.timestamp).to.be.lt(job.timestamp); + const diff = moment(job.timestamp).diff( + moment(prev.timestamp), + 'months', + true, + ); + expect(diff).to.be.gte(1); + } + prev = job; - counter--; - if (counter == 0) { - resolve(); + counter--; + if (counter == 0) { + resolve(); + } + } catch (error) { + reject(error); } }); }); From e81e94aeef1a07a975235c1c330f297c2bf8c9f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 May 2023 23:09:32 -0500 Subject: [PATCH 038/322] chore(deps): update github/codeql-action digest to 29b1f65 (#1876) --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 7b7d1bbdbe..6600e05300 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,7 +42,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2 + uses: github/codeql-action/init@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -53,7 +53,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2 + uses: github/codeql-action/autobuild@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -67,4 +67,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2 + uses: github/codeql-action/analyze@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2 From 31c475aba94ce3ace5f3da67b759595097a8ca7e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 5 May 2023 04:09:52 +0000 Subject: [PATCH 039/322] chore(deps): update dependency virtualenv to v20.23.0 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index b1d8cde7b8..46af7c723d 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -7,5 +7,5 @@ pipenv==2023.4.29 platformdirs==3.5.0 redis==4.5.4 six==1.16.0 -virtualenv==20.22.0 +virtualenv==20.23.0 virtualenv-clone==0.5.7 From 7af4c78af61c93925e768da358fd1dcdbaad1165 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 5 May 2023 23:17:46 +0000 Subject: [PATCH 040/322] chore(deps): update coverallsapp/github-action digest to 09b709c --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a6a372f759..ad3a555dbb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,7 +43,7 @@ jobs: - run: yarn coverage - name: Upload LCOV to Coveralls if: ${{ ( github.event_name == 'pull_request' && github.event.pull_request.head.fork == false ) || github.event_name == 'push' }} - uses: coverallsapp/github-action@d2cf0097b9511c3c5f440346ddfe756ce6f19fcf # branch=master + uses: coverallsapp/github-action@09b709cf6a16e30b0808ba050c7a6e8a5ef13f8d # branch=master with: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Check coverage change not below threshold From 39286e87e8ffabf641f229cf2da3db4c280f4637 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 5 May 2023 18:42:22 -0500 Subject: [PATCH 041/322] fix(worker): close open handles after closing (#1861) fixes #1312 --- src/classes/worker.ts | 83 +++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 42 deletions(-) diff --git a/src/classes/worker.ts b/src/classes/worker.ts index ef36d41a79..71c76593b0 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -382,7 +382,7 @@ export class Worker< await this.startStalledCheckTimer(); const jobsInProgress = new Set<{ job: Job; ts: number }>(); - await this.startLockExtenderTimer(jobsInProgress); + this.startLockExtenderTimer(jobsInProgress); const asyncFifoQueue = (this.asyncFifoQueue = new AsyncFifoQueue>()); @@ -783,47 +783,55 @@ export class Worker< if (!this.opts.skipStalledCheck) { clearTimeout(this.stalledCheckTimer); - await this.runStalledJobsCheck(); - this.stalledCheckTimer = setTimeout(async () => { - this.startStalledCheckTimer(); - }, this.opts.stalledInterval); + if (!this.closing) { + try { + await this.checkConnectionError(() => this.moveStalledJobsToWait()); + this.stalledCheckTimer = setTimeout(async () => { + await this.startStalledCheckTimer(); + }, this.opts.stalledInterval); + } catch (err) { + this.emit('error', err); + } + } } } - private async startLockExtenderTimer( + private startLockExtenderTimer( jobsInProgress: Set<{ job: Job; ts: number }>, - ): Promise { + ): void { if (!this.opts.skipLockRenewal) { clearTimeout(this.extendLocksTimer); - this.extendLocksTimer = setTimeout(async () => { - // Get all the jobs whose locks expire in less than 1/2 of the lockRenewTime - const now = Date.now(); - const jobsToExtend = []; - - for (const item of jobsInProgress) { - const { job, ts } = item; - if (!ts) { - item.ts = now; - continue; + if (!this.closing) { + this.extendLocksTimer = setTimeout(async () => { + // Get all the jobs whose locks expire in less than 1/2 of the lockRenewTime + const now = Date.now(); + const jobsToExtend = []; + + for (const item of jobsInProgress) { + const { job, ts } = item; + if (!ts) { + item.ts = now; + continue; + } + + if (ts + this.opts.lockRenewTime / 2 < now) { + item.ts = now; + jobsToExtend.push(job); + } } - if (ts + this.opts.lockRenewTime / 2 < now) { - item.ts = now; - jobsToExtend.push(job); + try { + if (jobsToExtend.length) { + await this.extendLocks(jobsToExtend); + } + } catch (err) { + this.emit('error', err); } - } - try { - if (jobsToExtend.length) { - await this.extendLocks(jobsToExtend); - } - } catch (err) { - this.emit('error', err); - } - - this.startLockExtenderTimer(jobsInProgress); - }, this.opts.lockRenewTime / 2); + this.startLockExtenderTimer(jobsInProgress); + }, this.opts.lockRenewTime / 2); + } } } @@ -892,16 +900,6 @@ export class Worker< } } - private async runStalledJobsCheck() { - try { - if (!this.closing) { - await this.checkConnectionError(() => this.moveStalledJobsToWait()); - } - } catch (err) { - this.emit('error', err); - } - } - private async moveStalledJobsToWait() { const chunkSize = 50; const [failed, stalled] = await this.scripts.moveStalledJobsToWait(); @@ -917,11 +915,12 @@ export class Worker< ), ); - if (i % chunkSize === 0) { + if ((i + 1) % chunkSize === 0) { this.notifyFailedJobs(await Promise.all(jobPromises)); jobPromises.length = 0; } } + this.notifyFailedJobs(await Promise.all(jobPromises)); } From 8f020618d364c5706aca63086effe993fd437bbc Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 5 May 2023 23:43:17 +0000 Subject: [PATCH 042/322] chore(release): 3.12.1 [skip ci] ## [3.12.1](https://github.com/taskforcesh/bullmq/compare/v3.12.0...v3.12.1) (2023-05-05) ### Bug Fixes * **python:** stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) * **worker:** close open handles after closing ([#1861](https://github.com/taskforcesh/bullmq/issues/1861)) fixes [#1312](https://github.com/taskforcesh/bullmq/issues/1312) ([39286e8](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) ### Features * **python:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) * **python:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) * **python:** add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([870da45](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) * **python:** add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) * **python:** add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) * **python:** save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) * **python:** support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) --- docs/gitbook/changelog.md | 19 +++++++++++++++++++ package.json | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index d3de1e559b..918de47345 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,22 @@ +## [3.12.1](https://github.com/taskforcesh/bullmq/compare/v3.12.0...v3.12.1) (2023-05-05) + + +### Bug Fixes + +* **python:** stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) +* **worker:** close open handles after closing ([#1861](https://github.com/taskforcesh/bullmq/issues/1861)) fixes [#1312](https://github.com/taskforcesh/bullmq/issues/1312) ([39286e8](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) + + +### Features + +* **python:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) +* **python:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) +* **python:** add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([870da45](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) +* **python:** add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) +* **python:** add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) +* **python:** save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) +* **python:** support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) + # [3.12.0](https://github.com/taskforcesh/bullmq/compare/v3.11.0...v3.12.0) (2023-04-20) diff --git a/package.json b/package.json index c89235f1f0..c461d2611b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.12.0", + "version": "3.12.1", "description": "Queue for messages and jobs based on Redis", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From 0820985e073582fdf841affad38ecc7ab64691ec Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Fri, 5 May 2023 18:44:00 +0200 Subject: [PATCH 043/322] feat(worker): add worker threads support --- src/classes/child-pool.ts | 146 +--- src/classes/child-processor.ts | 29 +- src/classes/child.ts | 243 +++++++ src/classes/index.ts | 4 +- src/classes/main-base.ts | 49 ++ src/classes/main-worker.ts | 8 + src/classes/main.ts | 8 + src/classes/master.ts | 40 -- src/classes/process-utils.ts | 41 -- src/classes/sandbox.ts | 7 +- src/classes/worker.ts | 20 +- src/interfaces/worker-options.ts | 9 + src/utils.ts | 11 +- tests/test_child-pool.ts | 167 +++-- tests/test_sandboxed_process.ts | 1067 ++++++++++++++++-------------- 15 files changed, 1041 insertions(+), 808 deletions(-) create mode 100644 src/classes/child.ts create mode 100644 src/classes/main-base.ts create mode 100644 src/classes/main-worker.ts create mode 100644 src/classes/main.ts delete mode 100644 src/classes/master.ts delete mode 100644 src/classes/process-utils.ts diff --git a/src/classes/child-pool.ts b/src/classes/child-pool.ts index 06c86bff66..df3986ecc5 100644 --- a/src/classes/child-pool.ts +++ b/src/classes/child-pool.ts @@ -1,141 +1,53 @@ -import { ChildProcess, fork } from 'child_process'; import * as path from 'path'; -import { AddressInfo, createServer } from 'net'; -import { killAsync } from './process-utils'; -import { ParentCommand, ChildCommand } from '../interfaces'; -import { parentSend } from '../utils'; +import { Child } from './child'; const CHILD_KILL_TIMEOUT = 30_000; -export interface ChildProcessExt extends ChildProcess { - processFile?: string; -} - -const getFreePort = async () => { - return new Promise(resolve => { - const server = createServer(); - server.listen(0, () => { - const { port } = server.address() as AddressInfo; - server.close(() => resolve(port)); - }); - }); -}; - -const convertExecArgv = async (execArgv: string[]): Promise => { - const standard: string[] = []; - const convertedArgs: string[] = []; - - for (let i = 0; i < execArgv.length; i++) { - const arg = execArgv[i]; - if (arg.indexOf('--inspect') === -1) { - standard.push(arg); - } else { - const argName = arg.split('=')[0]; - const port = await getFreePort(); - convertedArgs.push(`${argName}=${port}`); - } - } - - return standard.concat(convertedArgs); -}; - -/** - * @see https://nodejs.org/api/process.html#process_exit_codes - */ -const exitCodesErrors: { [index: number]: string } = { - 1: 'Uncaught Fatal Exception', - 2: 'Unused', - 3: 'Internal JavaScript Parse Error', - 4: 'Internal JavaScript Evaluation Failure', - 5: 'Fatal Error', - 6: 'Non-function Internal Exception Handler', - 7: 'Internal Exception Handler Run-Time Failure', - 8: 'Unused', - 9: 'Invalid Argument', - 10: 'Internal JavaScript Run-Time Failure', - 12: 'Invalid Debug Argument', - 13: 'Unfinished Top-Level Await', -}; - -async function initChild(child: ChildProcess, processFile: string) { - const onComplete = new Promise((resolve, reject) => { - const onMessageHandler = (msg: any) => { - if (msg.cmd === ParentCommand.InitCompleted) { - resolve(); - } else if (msg.cmd === ParentCommand.InitFailed) { - const err = new Error(); - err.stack = msg.err.stack; - err.message = msg.err.message; - reject(err); - } - child.off('message', onMessageHandler); - child.off('close', onCloseHandler); - }; - - const onCloseHandler = (code: number, signal: number) => { - if (code > 128) { - code -= 128; - } - const msg = exitCodesErrors[code] || `Unknown exit code ${code}`; - reject( - new Error(`Error initializing child: ${msg} and signal ${signal}`), - ); - child.off('message', onMessageHandler); - child.off('close', onCloseHandler); - }; - - child.on('message', onMessageHandler); - child.on('close', onCloseHandler); - }); - - await parentSend(child, { cmd: ChildCommand.Init, value: processFile }); - await onComplete; -} - export class ChildPool { - retained: { [key: number]: ChildProcessExt } = {}; - free: { [key: string]: ChildProcessExt[] } = {}; + retained: { [key: number]: Child } = {}; + free: { [key: string]: Child[] } = {}; constructor( - private masterFile = path.join(process.cwd(), 'dist/cjs/classes/master.js'), - ) {} + private opts: { mainFile?: string; useWorkerThreads?: boolean } = {}, + ) { + this.opts = { + mainFile: path.join(process.cwd(), 'dist/cjs/classes/main.js'), + useWorkerThreads: false, + ...opts, + }; + } - async retain(processFile: string): Promise { - const _this = this; - let child = _this.getFree(processFile).pop(); + async retain(processFile: string): Promise { + let child = this.getFree(processFile).pop(); if (child) { - _this.retained[child.pid] = child; + this.retained[child.pid] = child; return child; } - const execArgv = await convertExecArgv(process.execArgv); - - child = fork(this.masterFile, [], { execArgv, stdio: 'pipe' }); - child.processFile = processFile; - - _this.retained[child.pid] = child; - - child.on('exit', _this.remove.bind(_this, child)); - - child.stdout.pipe(process.stdout); - child.stderr.pipe(process.stderr); + child = new Child(this.opts.mainFile, processFile, { + useWorkerThreads: this.opts.useWorkerThreads, + }); + child.on('exit', this.remove.bind(this, child)); try { - await initChild(child, child.processFile); + await child.init(); + this.retained[child.pid] = child; + return child; } catch (err) { - _this.release(child); + console.error(err); + this.release(child); throw err; } } - release(child: ChildProcessExt): void { + release(child: Child): void { delete this.retained[child.pid]; this.getFree(child.processFile).push(child); } - remove(child: ChildProcessExt): void { + remove(child: Child): void { delete this.retained[child.pid]; const free = this.getFree(child.processFile); @@ -147,11 +59,11 @@ export class ChildPool { } async kill( - child: ChildProcess, + child: Child, signal: 'SIGTERM' | 'SIGKILL' = 'SIGKILL', ): Promise { this.remove(child); - await killAsync(child, signal, CHILD_KILL_TIMEOUT); + return child.kill(signal, CHILD_KILL_TIMEOUT); } async clean(): Promise { @@ -162,11 +74,11 @@ export class ChildPool { await Promise.all(children.map(c => this.kill(c, 'SIGTERM'))); } - getFree(id: string): ChildProcessExt[] { + getFree(id: string): Child[] { return (this.free[id] = this.free[id] || []); } - getAllFree(): ChildProcessExt[] { + getAllFree(): Child[] { return Object.values(this.free).reduce( (first, second) => first.concat(second), [], diff --git a/src/classes/child-processor.ts b/src/classes/child-processor.ts index 0d0446303f..aa2ac1862d 100644 --- a/src/classes/child-processor.ts +++ b/src/classes/child-processor.ts @@ -1,6 +1,6 @@ import { promisify } from 'util'; import { JobJson, ParentCommand, SandboxedJob } from '../interfaces'; -import { childSend, errorToJSON } from '../utils'; +import { errorToJSON } from '../utils'; enum ChildStatus { Idle, @@ -13,7 +13,7 @@ enum ChildStatus { * ChildProcessor * * This class acts as the interface between a child process and it parent process - * so that jobs can be processed in different processes than the parent. + * so that jobs can be processed in different processes. * */ export class ChildProcessor { @@ -21,6 +21,8 @@ export class ChildProcessor { public processor: any; public currentJobPromise: Promise | undefined; + constructor(private send: (msg: any) => Promise) {} + public async init(processorFile: string): Promise { let processor; try { @@ -36,7 +38,7 @@ export class ChildProcessor { } } catch (err) { this.status = ChildStatus.Errored; - return childSend(process, { + return this.send({ cmd: ParentCommand.InitFailed, err: errorToJSON(err), }); @@ -56,14 +58,14 @@ export class ChildProcessor { } this.processor = processor; this.status = ChildStatus.Idle; - await childSend(process, { + await this.send({ cmd: ParentCommand.InitCompleted, }); } public async start(jobJson: JobJson): Promise { if (this.status !== ChildStatus.Idle) { - return childSend(process, { + return this.send({ cmd: ParentCommand.Error, err: errorToJSON(new Error('cannot start a not idling child process')), }); @@ -71,14 +73,14 @@ export class ChildProcessor { this.status = ChildStatus.Started; this.currentJobPromise = (async () => { try { - const job = wrapJob(jobJson); + const job = wrapJob(jobJson, this.send); const result = (await this.processor(job)) || {}; - await childSend(process, { + await this.send({ cmd: ParentCommand.Completed, value: result, }); } catch (err) { - await childSend(process, { + await this.send({ cmd: ParentCommand.Failed, value: errorToJSON(!(err).message ? new Error(err) : err), }); @@ -110,7 +112,10 @@ export class ChildProcessor { * the functions on the original job object are not in tact. * The wrapped job adds back some of those original functions. */ -function wrapJob(job: JobJson): SandboxedJob { +function wrapJob( + job: JobJson, + send: (msg: any) => Promise, +): SandboxedJob { let progressValue = job.progress; const updateProgress = async (progress: number | object) => { @@ -118,7 +123,7 @@ function wrapJob(job: JobJson): SandboxedJob { // so that we can return it from this process synchronously. progressValue = progress; // Send message to update job progress. - await childSend(process, { + await send({ cmd: ParentCommand.Progress, value: progress, }); @@ -137,7 +142,7 @@ function wrapJob(job: JobJson): SandboxedJob { * Emulate the real job `log` function. */ log: async (row: any) => { - childSend(process, { + send({ cmd: ParentCommand.Log, value: row, }); @@ -146,7 +151,7 @@ function wrapJob(job: JobJson): SandboxedJob { * Emulate the real job `update` function. */ update: async (data: any) => { - childSend(process, { + send({ cmd: ParentCommand.Update, value: data, }); diff --git a/src/classes/child.ts b/src/classes/child.ts new file mode 100644 index 0000000000..c8d74f1eb6 --- /dev/null +++ b/src/classes/child.ts @@ -0,0 +1,243 @@ +import { ChildProcess, fork } from 'child_process'; +import { Worker } from 'worker_threads'; +import { AddressInfo, createServer } from 'net'; +import { ChildCommand, ParentCommand } from '../'; +import * as EventEmitter from 'events'; + +/** + * @see https://nodejs.org/api/process.html#process_exit_codes + */ +const exitCodesErrors: { [index: number]: string } = { + 1: 'Uncaught Fatal Exception', + 2: 'Unused', + 3: 'Internal JavaScript Parse Error', + 4: 'Internal JavaScript Evaluation Failure', + 5: 'Fatal Error', + 6: 'Non-function Internal Exception Handler', + 7: 'Internal Exception Handler Run-Time Failure', + 8: 'Unused', + 9: 'Invalid Argument', + 10: 'Internal JavaScript Run-Time Failure', + 12: 'Invalid Debug Argument', + 13: 'Unfinished Top-Level Await', +}; + +/** + * Child class + * + * This class is used to create a child process or worker thread, and allows using + * isolated processes or threads for processing jobs. + * + */ +export class Child extends EventEmitter { + childProcess: ChildProcess; + worker: Worker; + + private _exitCode: number = null; + private _signalCode: number = null; + private _killed: boolean = false; + + constructor( + private mainFile: string, + public processFile: string, + private opts = { + useWorkerThreads: false, + }, + ) { + super(); + } + + get pid() { + if (this.childProcess) { + return this.childProcess.pid; + } else if (this.worker) { + return this.worker.threadId; + } else { + throw new Error('No child process or worker thread'); + } + } + + get exitCode() { + return this._exitCode; + } + + get signalCode() { + return this._signalCode; + } + + get killed() { + if (this.childProcess) { + return this.childProcess.killed; + } + return this._killed; + } + + async init(): Promise { + const execArgv = await convertExecArgv(process.execArgv); + + let parent: ChildProcess | Worker; + + if (this.opts.useWorkerThreads) { + this.worker = parent = new Worker(this.mainFile, { + execArgv, + stdin: true, + stdout: true, + stderr: true, + }); + } else { + this.childProcess = parent = fork(this.mainFile, [], { + execArgv, + stdio: 'pipe', + }); + } + + parent.on('exit', (exitCode: number, signalCode?: number) => { + this._exitCode = exitCode; + + // Coerce to null if undefined for backwards compatibility + signalCode = typeof signalCode === 'undefined' ? null : signalCode; + this._signalCode = signalCode; + + this._killed = true; + + this.emit('exit', exitCode, signalCode); + + // Clean all listeners, we do not expect any more events after "exit" + parent.removeAllListeners(); + this.removeAllListeners(); + }); + parent.on('error', (...args) => this.emit('error', ...args)); + parent.on('message', (...args) => this.emit('message', ...args)); + parent.on('close', (...args) => this.emit('close', ...args)); + + parent.stdout.pipe(process.stdout); + parent.stderr.pipe(process.stderr); + + await this.initChild(); + } + + async send(msg: any) { + return new Promise((resolve, reject) => { + if (this.childProcess) { + this.childProcess.send(msg, (err: Error | null) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + } else if (this.worker) { + resolve(this.worker.postMessage(msg)); + } else { + resolve(); + } + }); + } + + private killProcess(signal: 'SIGTERM' | 'SIGKILL' = 'SIGKILL') { + if (this.childProcess) { + this.childProcess.kill(signal); + } else if (this.worker) { + this.worker.terminate(); + } + } + + async kill( + signal: 'SIGTERM' | 'SIGKILL' = 'SIGKILL', + timeoutMs?: number, + ): Promise { + if (this.hasProcessExited()) { + return; + } + + const onExit = onExitOnce(this.childProcess || this.worker); + this.killProcess(signal); + + if (timeoutMs !== undefined && (timeoutMs === 0 || isFinite(timeoutMs))) { + const timeoutHandle = setTimeout(() => { + if (!this.hasProcessExited()) { + this.killProcess('SIGKILL'); + } + }, timeoutMs); + await onExit; + clearTimeout(timeoutHandle); + } + await onExit; + } + + private async initChild() { + const onComplete = new Promise((resolve, reject) => { + const onMessageHandler = (msg: any) => { + if (msg.cmd === ParentCommand.InitCompleted) { + resolve(); + } else if (msg.cmd === ParentCommand.InitFailed) { + const err = new Error(); + err.stack = msg.err.stack; + err.message = msg.err.message; + reject(err); + } + this.off('message', onMessageHandler); + this.off('close', onCloseHandler); + }; + + const onCloseHandler = (code: number, signal: number) => { + if (code > 128) { + code -= 128; + } + const msg = exitCodesErrors[code] || `Unknown exit code ${code}`; + reject( + new Error(`Error initializing child: ${msg} and signal ${signal}`), + ); + this.off('message', onMessageHandler); + this.off('close', onCloseHandler); + }; + + this.on('message', onMessageHandler); + this.on('close', onCloseHandler); + }); + + await this.send({ + cmd: ChildCommand.Init, + value: this.processFile, + }); + await onComplete; + } + + hasProcessExited(): boolean { + return !!(this.exitCode !== null || this.signalCode); + } +} + +function onExitOnce(child: ChildProcess | Worker): Promise { + return new Promise(resolve => { + child.once('exit', () => resolve()); + }); +} + +const getFreePort = async () => { + return new Promise(resolve => { + const server = createServer(); + server.listen(0, () => { + const { port } = server.address() as AddressInfo; + server.close(() => resolve(port)); + }); + }); +}; + +const convertExecArgv = async (execArgv: string[]): Promise => { + const standard: string[] = []; + const convertedArgs: string[] = []; + + for (let i = 0; i < execArgv.length; i++) { + const arg = execArgv[i]; + if (arg.indexOf('--inspect') === -1) { + standard.push(arg); + } else { + const argName = arg.split('=')[0]; + const port = await getFreePort(); + convertedArgs.push(`${argName}=${port}`); + } + } + + return standard.concat(convertedArgs); +}; diff --git a/src/classes/index.ts b/src/classes/index.ts index 8ba4cac706..edd36aebcc 100644 --- a/src/classes/index.ts +++ b/src/classes/index.ts @@ -5,8 +5,8 @@ export * from './child-processor'; export * from './delayed-error'; export * from './flow-producer'; export * from './job'; -// export * from './master'; this file must not be exported -export * from './process-utils'; +// export * from './main'; this file must not be exported +// export * from './main-worker'; this file must not be exported export * from './queue-base'; export * from './queue-events'; export * from './queue-getters'; diff --git a/src/classes/main-base.ts b/src/classes/main-base.ts new file mode 100644 index 0000000000..f8441c1380 --- /dev/null +++ b/src/classes/main-base.ts @@ -0,0 +1,49 @@ +/** + * Wrapper for sandboxing. + * + */ +import { toString } from 'lodash'; +import { ChildProcessor } from './child-processor'; +import { ParentCommand, ChildCommand } from '../interfaces'; +import { errorToJSON } from '../utils'; + +export default ( + send: (msg: any) => Promise, + receiver: { on: (evt: 'message', cb: (msg: any) => void) => void }, +) => { + const childProcessor = new ChildProcessor(send); + + receiver?.on('message', async msg => { + try { + switch (msg.cmd as ChildCommand) { + case ChildCommand.Init: + await childProcessor.init(msg.value); + break; + case ChildCommand.Start: + await childProcessor.start(msg.job); + break; + case ChildCommand.Stop: + break; + } + } catch (err) { + console.error('Error handling child message'); + } + }); + + process.on('SIGTERM', () => childProcessor.waitForCurrentJobAndExit()); + process.on('SIGINT', () => childProcessor.waitForCurrentJobAndExit()); + + process.on('uncaughtException', async (err: Error) => { + if (!err.message) { + err = new Error(toString(err)); + } + await send({ + cmd: ParentCommand.Failed, + value: errorToJSON(err), + }); + + // An uncaughException leaves this process in a potentially undetermined state so + // we must exit + process.exit(-1); + }); +}; diff --git a/src/classes/main-worker.ts b/src/classes/main-worker.ts new file mode 100644 index 0000000000..769ffc0ba2 --- /dev/null +++ b/src/classes/main-worker.ts @@ -0,0 +1,8 @@ +/** + * Worker Thread wrapper for sandboxing + * + */ +import { parentPort } from 'worker_threads'; +import masterBase from './main-base'; + +masterBase(async (msg: any) => parentPort.postMessage(msg), parentPort); diff --git a/src/classes/main.ts b/src/classes/main.ts new file mode 100644 index 0000000000..5a19173dfc --- /dev/null +++ b/src/classes/main.ts @@ -0,0 +1,8 @@ +/** + * Child process wrapper for sandboxing. + * + */ +import { childSend } from '../utils'; +import masterBase from './main-base'; + +masterBase((msg: any) => childSend(process, msg), process); diff --git a/src/classes/master.ts b/src/classes/master.ts deleted file mode 100644 index 2106e34294..0000000000 --- a/src/classes/master.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { toString } from 'lodash'; -import { ChildProcessor } from './child-processor'; -import { ParentCommand, ChildCommand } from '../interfaces'; -import { childSend, errorToJSON } from '../utils'; - -const childProcessor = new ChildProcessor(); - -process.on('message', async msg => { - try { - switch (msg.cmd as ChildCommand) { - case ChildCommand.Init: - await childProcessor.init(msg.value); - break; - case ChildCommand.Start: - await childProcessor.start(msg.job); - break; - case ChildCommand.Stop: - break; - } - } catch (err) { - console.error('Error handling child message'); - } -}); - -process.on('SIGTERM', () => childProcessor.waitForCurrentJobAndExit()); -process.on('SIGINT', () => childProcessor.waitForCurrentJobAndExit()); - -process.on('uncaughtException', async (err: Error) => { - if (!err.message) { - err = new Error(toString(err)); - } - await childSend(process, { - cmd: ParentCommand.Failed, - value: errorToJSON(err), - }); - - // An uncaughException leaves this process in a potentially undetermined state so - // we must exit - process.exit(-1); -}); diff --git a/src/classes/process-utils.ts b/src/classes/process-utils.ts deleted file mode 100644 index a06bdfa099..0000000000 --- a/src/classes/process-utils.ts +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; - -import { ChildProcess } from 'child_process'; - -function onExitOnce(child: ChildProcess): Promise { - return new Promise(resolve => { - child.once('exit', () => resolve()); - }); -} - -function hasProcessExited(child: ChildProcess): boolean { - return !!(child.exitCode !== null || child.signalCode); -} - -/** - * Sends a kill signal to a child resolving when the child has exited, - * resorting to SIGKILL if the given timeout is reached - */ -export async function killAsync( - child: ChildProcess, - signal: 'SIGTERM' | 'SIGKILL' = 'SIGKILL', - timeoutMs?: number, -): Promise { - if (hasProcessExited(child)) { - return; - } - - const onExit = onExitOnce(child); - child.kill(signal); - - if (timeoutMs !== undefined && (timeoutMs === 0 || isFinite(timeoutMs))) { - const timeoutHandle = setTimeout(() => { - if (!hasProcessExited(child)) { - child.kill('SIGKILL'); - } - }, timeoutMs); - await onExit; - clearTimeout(timeoutHandle); - } - await onExit; -} diff --git a/src/classes/sandbox.ts b/src/classes/sandbox.ts index d3cc0671f7..d62136bff1 100644 --- a/src/classes/sandbox.ts +++ b/src/classes/sandbox.ts @@ -1,5 +1,4 @@ import { ChildCommand, ChildMessage, ParentCommand } from '../interfaces'; -import { parentSend } from '../utils'; import { ChildPool } from './child-pool'; import { Job } from './job'; @@ -12,7 +11,7 @@ const sandbox = ( let msgHandler: any; let exitHandler: any; - await parentSend(child, { + await child.send({ cmd: ChildCommand.Start, job: job.asJSONSandbox(), }); @@ -56,8 +55,8 @@ const sandbox = ( await done; return done; } finally { - child.removeListener('message', msgHandler); - child.removeListener('exit', exitHandler); + child.off('message', msgHandler); + child.off('exit', exitHandler); if (child.exitCode !== null || /SIG.*/.test(`${child.signalCode}`)) { childPool.remove(child); diff --git a/src/classes/worker.ts b/src/classes/worker.ts index 71c76593b0..47617a1c53 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -242,15 +242,25 @@ export class Worker< throw new Error(`File ${processorFile} does not exist`); } - let masterFile = path.join(__dirname, './master.js'); + const mainFile = this.opts.useWorkerThreads + ? 'main-worker.js' + : 'main.js'; + let mainFilePath = path.join(__dirname, `${mainFile}`); try { - fs.statSync(masterFile); // would throw if file not exists + fs.statSync(mainFilePath); // would throw if file not exists } catch (_) { - masterFile = path.join(process.cwd(), 'dist/cjs/classes/master.js'); - fs.statSync(masterFile); + mainFilePath = path.join( + process.cwd(), + `dist/cjs/classes/${mainFile}`, + ); + fs.statSync(mainFilePath); } - this.childPool = new ChildPool(masterFile); + this.childPool = new ChildPool({ + mainFile: mainFilePath, + useWorkerThreads: this.opts.useWorkerThreads, + }); + this.processFn = sandbox( processor, this.childPool, diff --git a/src/interfaces/worker-options.ts b/src/interfaces/worker-options.ts index 8f84d2032d..4eb33ed687 100644 --- a/src/interfaces/worker-options.ts +++ b/src/interfaces/worker-options.ts @@ -128,6 +128,15 @@ export interface WorkerOptions extends QueueBaseOptions { * More advanced options. */ settings?: AdvancedOptions; + + /** + * Use Worker Threads instead of Child Processes. + * Note: This option can only be used when specifying + * a file for the processor argument. + * + * @default false + */ + useWorkerThreads?: boolean; } export interface GetNextJobOptions { diff --git a/src/utils.ts b/src/utils.ts index 886d57864d..6a7fddc178 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -3,8 +3,7 @@ import { Cluster, Redis } from 'ioredis'; // @ts-ignore import { CONNECTION_CLOSED_ERROR_MSG } from 'ioredis/built/utils'; import * as semver from 'semver'; -import { ChildMessage, ParentMessage, RedisClient } from './interfaces'; -import { ChildProcess } from 'child_process'; +import { ChildMessage, RedisClient } from './interfaces'; export const errorObject: { [index: string]: any } = { value: null }; @@ -122,6 +121,7 @@ export function isNotConnectionError(error: Error): boolean { interface procSendLike { send?(message: any, callback?: (error: Error | null) => void): boolean; + postMessage?(message: any): void; } export const asyncSend = ( @@ -137,6 +137,8 @@ export const asyncSend = ( resolve(); } }); + } else if (typeof proc.postMessage === 'function') { + resolve(proc.postMessage(msg)); } else { resolve(); } @@ -157,11 +159,6 @@ export const isRedisVersionLowerThan = ( return semver.lt(version, minimumVersion); }; -export const parentSend = ( - child: ChildProcess, - msg: ParentMessage, -): Promise => asyncSend(child, msg); - export const parseObjectValues = (obj: { [key: string]: string; }): Record => { diff --git a/tests/test_child-pool.ts b/tests/test_child-pool.ts index 47b9ec1bec..e2d8b2da6d 100644 --- a/tests/test_child-pool.ts +++ b/tests/test_child-pool.ts @@ -1,86 +1,107 @@ import { expect } from 'chai'; import { ChildPool } from '../src/classes'; +import { join } from 'path'; -describe('Child pool', () => { - let pool: ChildPool; +describe('Child pool for Child Processes', () => { + sandboxProcessTests(); +}); - beforeEach(() => { - pool = new ChildPool(); +describe('Child pool for Worker Threads', () => { + sandboxProcessTests({ + mainFile: join(process.cwd(), 'dist/cjs/classes/main-worker.js'), + useWorkerThreads: true, }); +}); - afterEach(() => pool.clean()); +function sandboxProcessTests( + { + mainFile, + useWorkerThreads, + }: { mainFile?: string; useWorkerThreads?: boolean } = { + useWorkerThreads: false, + }, +) { + describe('Child pool', () => { + let pool: ChildPool; - it('should return same child if free', async () => { - const processor = __dirname + '/fixtures/fixture_processor_bar.js'; - const child = await pool.retain(processor); - expect(child).to.be.ok; - pool.release(child); - expect(pool.retained).to.be.empty; - const newChild = await pool.retain(processor); - expect(child).to.be.eql(newChild); - }); + beforeEach(() => { + pool = new ChildPool({ mainFile, useWorkerThreads }); + }); - it('should return a new child if reused the last free one', async () => { - const processor = __dirname + '/fixtures/fixture_processor_bar.js'; - let child = await pool.retain(processor); - expect(child).to.be.ok; - pool.release(child); - expect(pool.retained).to.be.empty; - let newChild = await pool.retain(processor); - expect(child).to.be.eql(newChild); - child = newChild; - newChild = await pool.retain(processor); - expect(child).not.to.be.eql(newChild); - }); + afterEach(() => pool.clean()); - it('should return a new child if none free', async () => { - const processor = __dirname + '/fixtures/fixture_processor_bar.js'; - const child = await pool.retain(processor); - expect(child).to.be.ok; - expect(pool.retained).not.to.be.empty; - const newChild = await pool.retain(processor); - expect(child).to.not.be.eql(newChild); - }); + it('should return same child if free', async () => { + const processor = __dirname + '/fixtures/fixture_processor_bar.js'; + const child = await pool.retain(processor); + expect(child).to.be.ok; + pool.release(child); + expect(pool.retained).to.be.empty; + const newChild = await pool.retain(processor); + expect(child).to.be.eql(newChild); + }); - it('should return a new child if killed', async () => { - const processor = __dirname + '/fixtures/fixture_processor_bar.js'; - const child = await pool.retain(processor); - expect(child).to.be.ok; - await pool.kill(child); - expect(pool.retained).to.be.empty; - const newChild = await pool.retain(processor); - expect(child).to.not.be.eql(newChild); - }); + it('should return a new child if reused the last free one', async () => { + const processor = __dirname + '/fixtures/fixture_processor_bar.js'; + let child = await pool.retain(processor); + expect(child).to.be.ok; + pool.release(child); + expect(pool.retained).to.be.empty; + let newChild = await pool.retain(processor); + expect(child).to.be.eql(newChild); + child = newChild; + newChild = await pool.retain(processor); + expect(child).not.to.be.eql(newChild); + }); - it('should return a new child if many retained and none free', async () => { - const processor = __dirname + '/fixtures/fixture_processor_bar.js'; - const children = await Promise.all([ - pool.retain(processor), - pool.retain(processor), - pool.retain(processor), - pool.retain(processor), - pool.retain(processor), - pool.retain(processor), - ]); - expect(children).to.have.length(6); - const child = await pool.retain(processor); - expect(children).not.to.include(child); - }).timeout(10000); + it('should return a new child if none free', async () => { + const processor = __dirname + '/fixtures/fixture_processor_bar.js'; + const child = await pool.retain(processor); + expect(child).to.be.ok; + expect(pool.retained).not.to.be.empty; + const newChild = await pool.retain(processor); + expect(child).to.not.be.eql(newChild); + }); - it('should return an old child if many retained and one free', async () => { - const processor = __dirname + '/fixtures/fixture_processor_bar.js'; - const children = await Promise.all([ - pool.retain(processor), - pool.retain(processor), - pool.retain(processor), - pool.retain(processor), - pool.retain(processor), - pool.retain(processor), - ]); + it('should return a new child if killed', async () => { + const processor = __dirname + '/fixtures/fixture_processor_bar.js'; + const child = await pool.retain(processor); + expect(child).to.be.ok; + await pool.kill(child); + expect(pool.retained).to.be.empty; + const newChild = await pool.retain(processor); + expect(child).to.not.be.eql(newChild); + }); - expect(children).to.have.length(6); - pool.release(children[0]); - const child = await pool.retain(processor); - expect(children).to.include(child); - }).timeout(10000); -}); + it('should return a new child if many retained and none free', async () => { + const processor = __dirname + '/fixtures/fixture_processor_bar.js'; + const children = await Promise.all([ + pool.retain(processor), + pool.retain(processor), + pool.retain(processor), + pool.retain(processor), + pool.retain(processor), + pool.retain(processor), + ]); + expect(children).to.have.length(6); + const child = await pool.retain(processor); + expect(children).not.to.include(child); + }).timeout(10000); + + it('should return an old child if many retained and one free', async () => { + const processor = __dirname + '/fixtures/fixture_processor_bar.js'; + const children = await Promise.all([ + pool.retain(processor), + pool.retain(processor), + pool.retain(processor), + pool.retain(processor), + pool.retain(processor), + pool.retain(processor), + ]); + + expect(children).to.have.length(6); + pool.release(children[0]); + const child = await pool.retain(processor); + expect(children).to.include(child); + }).timeout(10000); + }); +} diff --git a/tests/test_sandboxed_process.ts b/tests/test_sandboxed_process.ts index 78ebfcc895..5c721ed04d 100644 --- a/tests/test_sandboxed_process.ts +++ b/tests/test_sandboxed_process.ts @@ -1,77 +1,51 @@ import { expect } from 'chai'; import { default as IORedis } from 'ioredis'; import { after } from 'lodash'; -import { - ChildProcessExt, - FlowProducer, - Job, - Queue, - QueueEvents, - Worker, -} from '../src/classes'; +import { FlowProducer, Job, Queue, QueueEvents, Worker } from '../src/classes'; import { beforeEach } from 'mocha'; import { v4 } from 'uuid'; import { delay, removeAllQueueData } from '../src/utils'; +import { Child } from '../src/classes/child'; const { stdout, stderr } = require('test-console'); -describe('sandboxed process', () => { - let queue: Queue; - let queueEvents: QueueEvents; - let queueName: string; - - const connection = { host: 'localhost' }; +describe('Sandboxed process using child processes', () => { + sandboxProcessTests(); +}); - beforeEach(async function () { - queueName = `test-${v4()}`; - queue = new Queue(queueName, { connection }); - queueEvents = new QueueEvents(queueName, { connection }); - await queueEvents.waitUntilReady(); - }); +describe('Sandboxed process using worker threads', () => { + sandboxProcessTests({ useWorkerThreads: true }); +}); - afterEach(async function () { - await queue.close(); - await queueEvents.close(); - await removeAllQueueData(new IORedis(), queueName); - }); +function sandboxProcessTests( + { useWorkerThreads } = { useWorkerThreads: false }, +) { + describe('sandboxed process', () => { + let queue: Queue; + let queueEvents: QueueEvents; + let queueName: string; - it('should process and complete', async () => { - const processFile = __dirname + '/fixtures/fixture_processor.js'; + const connection = { host: 'localhost' }; - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, + beforeEach(async function () { + queueName = `test-${v4()}`; + queue = new Queue(queueName, { connection }); + queueEvents = new QueueEvents(queueName, { connection }); + await queueEvents.waitUntilReady(); }); - const completing = new Promise((resolve, reject) => { - worker.on('completed', async (job: Job, value: any) => { - try { - expect(job.data).to.be.eql({ foo: 'bar' }); - expect(value).to.be.eql(42); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); - await worker.close(); - resolve(); - } catch (err) { - await worker.close(); - reject(err); - } - }); + afterEach(async function () { + await queue.close(); + await queueEvents.close(); + await removeAllQueueData(new IORedis(), queueName); }); - await queue.add('test', { foo: 'bar' }); - - await completing; - - await worker.close(); - }); + it('should process and complete', async () => { + const processFile = __dirname + '/fixtures/fixture_processor.js'; - describe('when processor file is .cjs (CommonJS)', () => { - it('processes and completes', async () => { - const processFile = __dirname + '/fixtures/fixture_processor.cjs'; const worker = new Worker(queueName, processFile, { - autorun: false, connection, drainDelay: 1, + useWorkerThreads, }); const completing = new Promise((resolve, reject) => { @@ -92,325 +66,310 @@ describe('sandboxed process', () => { }); }); - worker.run(); - - await queue.add('foobar', { foo: 'bar' }); + await queue.add('test', { foo: 'bar' }); await completing; - }); - }); - - describe('when there is an output from stdout', () => { - it('uses the parent stdout', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_stdout.js'; - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, - }); + await worker.close(); + }); - const completing = new Promise(resolve => { - worker.on('completed', async (job: Job, value: any) => { - expect(job.data).to.be.eql({ foo: 'bar' }); - expect(value).to.be.eql(1); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); - resolve(); + describe('when processor file is .cjs (CommonJS)', () => { + it('processes and completes', async () => { + const processFile = __dirname + '/fixtures/fixture_processor.cjs'; + const worker = new Worker(queueName, processFile, { + autorun: false, + connection, + drainDelay: 1, + useWorkerThreads, }); - }); - const inspect = stdout.inspect(); - - await queue.add('test', { foo: 'bar' }); - let output = ''; - inspect.on('data', (chunk: string) => { - output += chunk; - }); + const completing = new Promise((resolve, reject) => { + worker.on('completed', async (job: Job, value: any) => { + try { + expect(job.data).to.be.eql({ foo: 'bar' }); + expect(value).to.be.eql(42); + expect( + Object.keys(worker['childPool'].retained), + ).to.have.lengthOf(0); + expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); + await worker.close(); + resolve(); + } catch (err) { + await worker.close(); + reject(err); + } + }); + }); - await completing; - inspect.restore(); + worker.run(); - expect(output).to.be.equal('message\n'); + await queue.add('foobar', { foo: 'bar' }); - await worker.close(); + await completing; + }); }); - }); - describe('when there is an output from stderr', () => { - it('uses the parent stderr', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_stderr.js'; + describe('when there is an output from stdout', () => { + it('uses the parent stdout', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_stdout.js'; - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, - }); - - const completing = new Promise(resolve => { - worker.on('completed', async (job: Job, value: any) => { - expect(job.data).to.be.eql({ foo: 'bar' }); - expect(value).to.be.eql(1); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); - resolve(); + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, }); - }); - const inspect = stderr.inspect(); - await queue.add('test', { foo: 'bar' }); - - let output = ''; - inspect.on('data', (chunk: string) => { - output += chunk; - }); - - await completing; - inspect.restore(); + const completing = new Promise(resolve => { + worker.on('completed', async (job: Job, value: any) => { + expect(job.data).to.be.eql({ foo: 'bar' }); + expect(value).to.be.eql(1); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( + 0, + ); + expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); + resolve(); + }); + }); + const inspect = stdout.inspect(); - expect(output).to.be.equal('error message\n'); + await queue.add('test', { foo: 'bar' }); - await worker.close(); - }); - }); + let output = ''; + inspect.on('data', (chunk: string) => { + output += chunk; + }); - describe('when processor throws UnrecoverableError', () => { - it('moves job to failed', async function () { - this.timeout(6000); + await completing; + inspect.restore(); - const processFile = - __dirname + '/fixtures/fixture_processor_unrecoverable.js'; + expect(output).to.be.equal('message\n'); - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, + await worker.close(); }); + }); - await worker.waitUntilReady(); + describe('when there is an output from stderr', () => { + it('uses the parent stderr', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_stderr.js'; - const start = Date.now(); - const job = await queue.add( - 'test', - { foo: 'bar' }, - { - attempts: 3, - backoff: 1000, - }, - ); + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - await new Promise(resolve => { - worker.on( - 'failed', - after(2, (job: Job, error) => { - const elapse = Date.now() - start; - expect(error.name).to.be.eql('UnrecoverableError'); - expect(error.message).to.be.eql('Unrecoverable'); - expect(elapse).to.be.greaterThan(1000); - expect(job.attemptsMade).to.be.eql(2); + const completing = new Promise(resolve => { + worker.on('completed', async (job: Job, value: any) => { + expect(job.data).to.be.eql({ foo: 'bar' }); + expect(value).to.be.eql(1); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( + 0, + ); + expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); resolve(); - }), - ); - }); + }); + }); + const inspect = stderr.inspect(); - const state = await job.getState(); + await queue.add('test', { foo: 'bar' }); - expect(state).to.be.equal('failed'); + let output = ''; + inspect.on('data', (chunk: string) => { + output += chunk; + }); - await worker.close(); - }); - }); + await completing; + inspect.restore(); - it('should process with named processor', async () => { - const processFile = __dirname + '/fixtures/fixture_processor.js'; - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, - }); + expect(output).to.be.equal('error message\n'); - const completing = new Promise((resolve, reject) => { - worker.on('completed', async (job: Job, value: any) => { - try { - expect(job.data).to.be.eql({ foo: 'bar' }); - expect(value).to.be.eql(42); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); - await worker.close(); - resolve(); - } catch (err) { - await worker.close(); - reject(err); - } + await worker.close(); }); }); - await queue.add('foobar', { foo: 'bar' }); + describe('when processor throws UnrecoverableError', () => { + it('moves job to failed', async function () { + this.timeout(6000); - await completing; - }); + const processFile = + __dirname + '/fixtures/fixture_processor_unrecoverable.js'; - it('should process with concurrent processors', async function () { - this.timeout(10000); - - await Promise.all([ - queue.add('test', { foo: 'bar1' }), - queue.add('test', { foo: 'bar2' }), - queue.add('test', { foo: 'bar3' }), - queue.add('test', { foo: 'bar4' }), - ]); - - const processFile = __dirname + '/fixtures/fixture_processor_slow.js'; - const worker = new Worker(queueName, processFile, { - connection, - concurrency: 4, - drainDelay: 1, - }); + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - const completing = new Promise((resolve, reject) => { - const after4 = after(4, () => { - expect(worker['childPool'].getAllFree().length).to.eql(4); - resolve(); - }); - - worker.on('completed', async (job: Job, value: any) => { - try { - expect(value).to.be.eql(42); - expect( - Object.keys(worker['childPool'].retained).length + - worker['childPool'].getAllFree().length, - ).to.eql(4); - after4(); - } catch (err) { - await worker.close(); - reject(err); - } - }); - }); + await worker.waitUntilReady(); - await completing; - await worker.close(); - }); + const start = Date.now(); + const job = await queue.add( + 'test', + { foo: 'bar' }, + { + attempts: 3, + backoff: 1000, + }, + ); - it('should reuse process with single processors', async function () { - this.timeout(30000); + await new Promise(resolve => { + worker.on( + 'failed', + after(2, (job: Job, error) => { + const elapse = Date.now() - start; + expect(error.name).to.be.eql('UnrecoverableError'); + expect(error.message).to.be.eql('Unrecoverable'); + expect(elapse).to.be.greaterThan(1000); + expect(job.attemptsMade).to.be.eql(2); + resolve(); + }), + ); + }); - const processFile = __dirname + '/fixtures/fixture_processor_slow.js'; - const worker = new Worker(queueName, processFile, { - connection, - concurrency: 1, - drainDelay: 1, - }); + const state = await job.getState(); - await Promise.all([ - queue.add('1', { foo: 'bar1' }), - queue.add('2', { foo: 'bar2' }), - queue.add('3', { foo: 'bar3' }), - queue.add('4', { foo: 'bar4' }), - ]); + expect(state).to.be.equal('failed'); - const completing = new Promise((resolve, reject) => { - const after4 = after(4, async () => { - expect(worker['childPool'].getAllFree().length).to.eql(1); await worker.close(); - resolve(); - }); - - worker.on('completed', async (job: Job, value: any) => { - try { - expect(value).to.be.eql(42); - expect( - Object.keys(worker['childPool'].retained).length + - worker['childPool'].getAllFree().length, - ).to.eql(1); - await after4(); - } catch (err) { - await worker.close(); - reject(err); - } }); }); - await completing; - }); + it('should process with named processor', async () => { + const processFile = __dirname + '/fixtures/fixture_processor.js'; + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - it('should process and update progress', async () => { - const processFile = - __dirname + '/fixtures/fixture_processor_update_progress.js'; + const completing = new Promise((resolve, reject) => { + worker.on('completed', async (job: Job, value: any) => { + try { + expect(job.data).to.be.eql({ foo: 'bar' }); + expect(value).to.be.eql(42); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( + 0, + ); + expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); + await worker.close(); + resolve(); + } catch (err) { + await worker.close(); + reject(err); + } + }); + }); - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, + await queue.add('foobar', { foo: 'bar' }); + + await completing; }); - const progresses: any[] = []; - - const completing = new Promise((resolve, reject) => { - worker.on('completed', async (job: Job, value: any) => { - try { - expect(job.data).to.be.eql({ foo: 'bar' }); - expect(value).to.be.eql(37); - expect(job.progress).to.be.eql(100); - expect(progresses).to.be.eql([10, 27, 78, 100]); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].getAllFree()).to.have.lengthOf(1); + it('should process with concurrent processors', async function () { + this.timeout(10000); + + await Promise.all([ + queue.add('test', { foo: 'bar1' }), + queue.add('test', { foo: 'bar2' }), + queue.add('test', { foo: 'bar3' }), + queue.add('test', { foo: 'bar4' }), + ]); + + const processFile = __dirname + '/fixtures/fixture_processor_slow.js'; + const worker = new Worker(queueName, processFile, { + connection, + concurrency: 4, + drainDelay: 1, + useWorkerThreads, + }); + + const completing = new Promise((resolve, reject) => { + const after4 = after(4, () => { + expect(worker['childPool'].getAllFree().length).to.eql(4); resolve(); - } catch (err) { - reject(err); - } + }); + + worker.on('completed', async (job: Job, value: any) => { + try { + expect(value).to.be.eql(42); + expect( + Object.keys(worker['childPool'].retained).length + + worker['childPool'].getAllFree().length, + ).to.eql(4); + after4(); + } catch (err) { + await worker.close(); + reject(err); + } + }); }); - }); - worker.on('progress', (job, progress) => { - progresses.push(progress); + await completing; + await worker.close(); }); - await queue.add('test', { foo: 'bar' }); - - await completing; - await worker.close(); - }); + it('should reuse process with single processors', async function () { + this.timeout(30000); - it('should process and update data', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_update.js'; + const processFile = __dirname + '/fixtures/fixture_processor_slow.js'; + const worker = new Worker(queueName, processFile, { + connection, + concurrency: 1, + drainDelay: 1, + useWorkerThreads, + }); - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, - }); + await Promise.all([ + queue.add('1', { foo: 'bar1' }), + queue.add('2', { foo: 'bar2' }), + queue.add('3', { foo: 'bar3' }), + queue.add('4', { foo: 'bar4' }), + ]); - const completing = new Promise((resolve, reject) => { - worker.on('completed', async (job: Job, value: any) => { - try { - expect(job.data).to.be.eql({ foo: 'baz' }); - expect(value).to.be.eql('result'); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].getAllFree()).to.have.lengthOf(1); + const completing = new Promise((resolve, reject) => { + const after4 = after(4, async () => { + expect(worker['childPool'].getAllFree().length).to.eql(1); + await worker.close(); resolve(); - } catch (err) { - reject(err); - } - }); - }); + }); - await queue.add('test', { bar: 'foo' }); + worker.on('completed', async (job: Job, value: any) => { + try { + expect(value).to.be.eql(42); + expect( + Object.keys(worker['childPool'].retained).length + + worker['childPool'].getAllFree().length, + ).to.eql(1); + await after4(); + } catch (err) { + await worker.close(); + reject(err); + } + }); + }); - await completing; - await worker.close(); - }); + await completing; + }); - describe('when env variables are provided', () => { - it('shares env variables', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_env.js'; + it('should process and update progress', async () => { + const processFile = + __dirname + '/fixtures/fixture_processor_update_progress.js'; const worker = new Worker(queueName, processFile, { connection, drainDelay: 1, + useWorkerThreads, }); - process.env.variable = 'variable'; + const progresses: any[] = []; const completing = new Promise((resolve, reject) => { worker.on('completed', async (job: Job, value: any) => { try { expect(job.data).to.be.eql({ foo: 'bar' }); - expect(value).to.be.eql('variable'); + expect(value).to.be.eql(37); + expect(job.progress).to.be.eql(100); + expect(progresses).to.be.eql([10, 27, 78, 100]); expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( 0, ); @@ -422,288 +381,382 @@ describe('sandboxed process', () => { }); }); + worker.on('progress', (job, progress) => { + progresses.push(progress); + }); + await queue.add('test', { foo: 'bar' }); await completing; - process.env.variable = undefined; await worker.close(); }); - }); - it('includes queueName', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_queueName.js'; + it('should process and update data', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_update.js'; - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, - }); - - const completing = new Promise((resolve, reject) => { - worker.on('completed', async (job: Job, value: any) => { - try { - expect(job.data).to.be.eql({ foo: 'bar' }); - expect(value).to.be.eql(queueName); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); - await worker.close(); - resolve(); - } catch (err) { - await worker.close(); - reject(err); - } + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, }); - }); - await queue.add('test', { foo: 'bar' }); + const completing = new Promise((resolve, reject) => { + worker.on('completed', async (job: Job, value: any) => { + try { + expect(job.data).to.be.eql({ foo: 'baz' }); + expect(value).to.be.eql('result'); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( + 0, + ); + expect(worker['childPool'].getAllFree()).to.have.lengthOf(1); + resolve(); + } catch (err) { + reject(err); + } + }); + }); - await completing; + await queue.add('test', { bar: 'foo' }); - await worker.close(); - }); + await completing; + await worker.close(); + }); - it('includes parent', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_parent.js'; - const parentQueueName = `parent-queue-${v4()}`; + describe('when env variables are provided', () => { + it('shares env variables', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_env.js'; - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, - }); + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - const completing = new Promise((resolve, reject) => { - worker.on('completed', async (job: Job, value: any) => { - try { - expect(job.data).to.be.eql({ foo: 'bar' }); - expect(value).to.be.eql({ - id: 'job-id', - queueKey: `bull:${parentQueueName}`, + process.env.variable = 'variable'; + + const completing = new Promise((resolve, reject) => { + worker.on('completed', async (job: Job, value: any) => { + try { + expect(job.data).to.be.eql({ foo: 'bar' }); + expect(value).to.be.eql('variable'); + expect( + Object.keys(worker['childPool'].retained), + ).to.have.lengthOf(0); + expect(worker['childPool'].getAllFree()).to.have.lengthOf(1); + resolve(); + } catch (err) { + reject(err); + } }); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); - await worker.close(); - resolve(); - } catch (err) { - await worker.close(); - reject(err); - } + }); + + await queue.add('test', { foo: 'bar' }); + + await completing; + process.env.variable = undefined; + await worker.close(); }); }); - const flow = new FlowProducer({ connection }); - await flow.add({ - name: 'parent-job', - queueName: parentQueueName, - data: {}, - opts: { jobId: 'job-id' }, - children: [{ name: 'child-job', data: { foo: 'bar' }, queueName }], - }); + it('includes queueName', async () => { + const processFile = + __dirname + '/fixtures/fixture_processor_queueName.js'; - await completing; + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - await worker.close(); - await flow.close(); - }); + const completing = new Promise((resolve, reject) => { + worker.on('completed', async (job: Job, value: any) => { + try { + expect(job.data).to.be.eql({ foo: 'bar' }); + expect(value).to.be.eql(queueName); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( + 0, + ); + expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); + await worker.close(); + resolve(); + } catch (err) { + await worker.close(); + reject(err); + } + }); + }); - it('should process and fail', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_fail.js'; + await queue.add('test', { foo: 'bar' }); - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, + await completing; + + await worker.close(); }); - const failing = new Promise((resolve, reject) => { - worker.on('failed', async (job, err) => { - try { - expect(job.data).eql({ foo: 'bar' }); - expect(job.failedReason).eql('Manually failed processor'); - expect(err.message).eql('Manually failed processor'); - expect(err.stack).include('fixture_processor_fail.js'); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].getAllFree()).to.have.lengthOf(1); + it('includes parent', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_parent.js'; + const parentQueueName = `parent-queue-${v4()}`; - resolve(); - } catch (err) { - await worker.close(); - reject(err); - } + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); + + const completing = new Promise((resolve, reject) => { + worker.on('completed', async (job: Job, value: any) => { + try { + expect(job.data).to.be.eql({ foo: 'bar' }); + expect(value).to.be.eql({ + id: 'job-id', + queueKey: `bull:${parentQueueName}`, + }); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( + 0, + ); + expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); + await worker.close(); + resolve(); + } catch (err) { + await worker.close(); + reject(err); + } + }); }); + + const flow = new FlowProducer({ connection }); + await flow.add({ + name: 'parent-job', + queueName: parentQueueName, + data: {}, + opts: { jobId: 'job-id' }, + children: [{ name: 'child-job', data: { foo: 'bar' }, queueName }], + }); + + await completing; + + await worker.close(); + await flow.close(); }); - await queue.add('test', { foo: 'bar' }); + it('should process and fail', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_fail.js'; - await failing; + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - await worker.close(); - }); + const failing = new Promise((resolve, reject) => { + worker.on('failed', async (job, err) => { + try { + expect(job.data).eql({ foo: 'bar' }); + expect(job.failedReason).eql('Manually failed processor'); + expect(err.message).eql('Manually failed processor'); + expect(err.stack).include('fixture_processor_fail.js'); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( + 0, + ); + expect(worker['childPool'].getAllFree()).to.have.lengthOf(1); - it('should error if processor file is missing', async () => { - let worker; - let didThrow = false; - try { - const missingProcessFile = __dirname + '/fixtures/missing_processor.js'; - worker = new Worker(queueName, missingProcessFile, { connection }); - } catch (err) { - didThrow = true; - } - - worker && (await worker.close()); - - if (!didThrow) { - throw new Error('did not throw error'); - } - }); + resolve(); + } catch (err) { + await worker.close(); + reject(err); + } + }); + }); + + await queue.add('test', { foo: 'bar' }); - it('should fail if the process crashes', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_crash.js'; + await failing; - new Worker(queueName, processFile, { - connection, - drainDelay: 1, + await worker.close(); }); - const job = await queue.add('test', {}); - - await expect(job.waitUntilFinished(queueEvents)).to.be.rejectedWith( - 'boom!', - ); - }); + it('should error if processor file is missing', async () => { + let worker; + let didThrow = false; + try { + const missingProcessFile = __dirname + '/fixtures/missing_processor.js'; + worker = new Worker(queueName, missingProcessFile, { + connection, + useWorkerThreads, + }); + } catch (err) { + didThrow = true; + } - it('should fail if the process exits 0', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_crash.js'; + worker && (await worker.close()); - new Worker(queueName, processFile, { - connection, - drainDelay: 1, + if (!didThrow) { + throw new Error('did not throw error'); + } }); - const job = await queue.add('test', { exitCode: 0 }); + it('should fail if the process crashes', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_crash.js'; - await expect(job.waitUntilFinished(queueEvents)).to.be.rejectedWith( - 'Unexpected exit code: 0 signal: null', - ); - }); + new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - it('should fail if the process exits non-0', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_crash.js'; + const job = await queue.add('test', {}); - new Worker(queueName, processFile, { - connection, - drainDelay: 1, + await expect(job.waitUntilFinished(queueEvents)).to.be.rejectedWith( + 'boom!', + ); }); - const job = await queue.add('test', { exitCode: 1 }); + it('should fail if the process exits 0', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_crash.js'; - await expect(job.waitUntilFinished(queueEvents)).to.be.rejectedWith( - 'Unexpected exit code: 1 signal: null', - ); - }); + new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - it('should fail if the process file is broken', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_broken.js'; + const job = await queue.add('test', { exitCode: 0 }); - new Worker(queueName, processFile, { - connection, - drainDelay: 1, + await expect(job.waitUntilFinished(queueEvents)).to.be.rejectedWith( + 'Unexpected exit code: 0 signal: null', + ); }); - const job = await queue.add('test', { exitCode: 1 }); + it('should fail if the process exits non-0', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_crash.js'; - await expect(job.waitUntilFinished(queueEvents)).to.be.rejectedWith( - 'Broken file processor', - ); - }); + new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - describe('when function is not exported', () => { - it('throws an error', async () => { - const processFile = - __dirname + '/fixtures/fixture_processor_missing_function.js'; + const job = await queue.add('test', { exitCode: 1 }); + + await expect(job.waitUntilFinished(queueEvents)).to.be.rejectedWith( + 'Unexpected exit code: 1 signal: null', + ); + }); + + it('should fail if the process file is broken', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_broken.js'; new Worker(queueName, processFile, { connection, drainDelay: 1, + useWorkerThreads, }); - const job = await queue.add('test', {}); + const job = await queue.add('test', { exitCode: 1 }); await expect(job.waitUntilFinished(queueEvents)).to.be.rejectedWith( - 'No function is exported in processor file', + 'Broken file processor', ); }); - }); - it('should remove exited process', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_exit.js'; + describe('when function is not exported', () => { + it('throws an error', async () => { + const processFile = + __dirname + '/fixtures/fixture_processor_missing_function.js'; - const worker = new Worker(queueName, processFile, { - connection, - drainDelay: 1, - }); + new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - const completing = new Promise((resolve, reject) => { - worker.on('completed', async () => { - try { - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].getAllFree()).to.have.lengthOf(1); - await delay(500); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].getAllFree()).to.have.lengthOf(0); - resolve(); - } catch (err) { - reject(err); - } + const job = await queue.add('test', {}); + + await expect(job.waitUntilFinished(queueEvents)).to.be.rejectedWith( + 'No function is exported in processor file', + ); }); }); - await queue.add('test', { foo: 'bar' }); + it('should remove exited process', async () => { + const processFile = __dirname + '/fixtures/fixture_processor_exit.js'; - await completing; + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); - await worker.close(); - }); + const completing = new Promise((resolve, reject) => { + worker.on('completed', async () => { + try { + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( + 0, + ); + expect(worker['childPool'].getAllFree()).to.have.lengthOf(1); + await delay(500); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( + 0, + ); + expect(worker['childPool'].getAllFree()).to.have.lengthOf(0); + resolve(); + } catch (err) { + reject(err); + } + }); + }); - it('should allow the job to complete and then exit on worker close', async function () { - this.timeout(1500000); - const processFile = __dirname + '/fixtures/fixture_processor_slow.js'; - const worker = new Worker(queueName, processFile, { connection }); + await queue.add('test', { foo: 'bar' }); - // acquire and release a child here so we know it has it's full termination handler setup - const initializedChild = await worker['childPool'].retain(processFile); - await worker['childPool'].release(initializedChild); + await completing; - // await this After we've added the job - const onJobActive = new Promise(resolve => { - worker.on('active', (job, prev) => { - expect(prev).to.be.equal('waiting'); - resolve(); - }); + await worker.close(); }); - const jobAdd = queue.add('foo', {}); - await onJobActive; + it('should allow the job to complete and then exit on worker close', async function () { + this.timeout(1500000); + const processFile = __dirname + '/fixtures/fixture_processor_slow.js'; + const worker = new Worker(queueName, processFile, { + connection, + useWorkerThreads, + }); + + // acquire and release a child here so we know it has it's full termination handler setup + const initializedChild = await worker['childPool'].retain(processFile); + await worker['childPool'].release(initializedChild); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(1); - expect(worker['childPool'].getAllFree()).to.have.lengthOf(0); - const child = Object.values( - worker['childPool'].retained, - )[0] as ChildProcessExt; + // await this After we've added the job + const onJobActive = new Promise(resolve => { + worker.on('active', (job, prev) => { + expect(prev).to.be.equal('waiting'); + resolve(); + }); + }); - expect(child).to.equal(initializedChild); - expect(child.exitCode).to.equal(null); - expect(child.killed).to.equal(false); + const jobAdd = queue.add('foo', {}); + await onJobActive; - // at this point the job should be active and running on the child - // trigger a close while we know it's doing work - await worker.close(); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(1); + expect(worker['childPool'].getAllFree()).to.have.lengthOf(0); + const child = Object.values(worker['childPool'].retained)[0] as Child; - // ensure the child did get cleaned up - expect(!!child.killed).to.eql(true); - expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); - expect(worker['childPool'].getAllFree()).to.have.lengthOf(0); + expect(child).to.equal(initializedChild); + expect(child.exitCode).to.equal(null); + expect(child.killed).to.equal(false); - const job = await jobAdd; - // check that the job did finish successfully - const jobResult = await job.waitUntilFinished(queueEvents); - expect(jobResult).to.equal(42); + // at this point the job should be active and running on the child + // trigger a close while we know it's doing work + await worker.close(); + + // ensure the child did get cleaned up + expect(!!child.killed).to.eql(true); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf(0); + expect(worker['childPool'].getAllFree()).to.have.lengthOf(0); + + const job = await jobAdd; + // check that the job did finish successfully + const jobResult = await job.waitUntilFinished(queueEvents); + expect(jobResult).to.equal(42); + }); }); -}); +} From 73ce10d31b1498e18dc352f4593444507036a6b4 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Sat, 6 May 2023 01:14:37 +0200 Subject: [PATCH 044/322] chore: add missing renaming of master to main --- package.json | 4 ++-- src/classes/child-pool.ts | 19 +++++++++++-------- src/classes/main-worker.ts | 4 ++-- src/classes/main.ts | 4 ++-- tests/test_metrics.ts | 6 ++++-- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index c461d2611b..f93b585f37 100644 --- a/package.json +++ b/package.json @@ -19,14 +19,14 @@ "dist" ], "scripts": { - "build": "npm-run-all pretest tsc:all copy:master:type clean:temp:files copy:lua copy:includes:lua", + "build": "npm-run-all pretest tsc:all copy:main:type clean:temp:files copy:lua copy:includes:lua", "circular:references": "madge --circular --extensions ts ./src", "clean:scripts": "rimraf rawScripts src/scripts", "clean:temp:files": "rimraf dist/cjs/bullmq.d.ts dist/esm/bullmq.d.ts dist/tsdoc-metadata.json", "copy:includes:lua": "copyfiles -f ./src/commands/includes/*.lua ./dist/cjs/commands/includes && copyfiles -f ./src/commands/includes/*.lua ./dist/esm/commands/includes", "copy:lua": "copyfiles -f ./src/commands/*.lua ./dist/cjs/commands && copyfiles -f ./src/commands/*.lua ./dist/esm/commands", "copy:lua:python": "copyfiles -f ./rawScripts/*.lua ./python/bullmq/commands", - "copy:master:type": "copyfiles -f ./dist/esm/classes/master.d.ts ./dist/cjs/classes", + "copy:main:type": "copyfiles -f ./dist/esm/classes/main.d.ts ./dist/esm/classes/main-worker.d.ts ./dist/cjs/classes", "coverage": "nyc --reporter=text --reporter=lcovonly yarn test", "cm": "git cz", "docs": "typedoc --excludeExternals --excludeProtected --excludePrivate --readme none src/index.ts", diff --git a/src/classes/child-pool.ts b/src/classes/child-pool.ts index df3986ecc5..73abf2adba 100644 --- a/src/classes/child-pool.ts +++ b/src/classes/child-pool.ts @@ -3,18 +3,21 @@ import { Child } from './child'; const CHILD_KILL_TIMEOUT = 30_000; +interface ChildPoolOpts { + mainFile?: string; + useWorkerThreads?: boolean; +} + export class ChildPool { retained: { [key: number]: Child } = {}; free: { [key: string]: Child[] } = {}; + private opts: ChildPoolOpts; - constructor( - private opts: { mainFile?: string; useWorkerThreads?: boolean } = {}, - ) { - this.opts = { - mainFile: path.join(process.cwd(), 'dist/cjs/classes/main.js'), - useWorkerThreads: false, - ...opts, - }; + constructor({ + mainFile = path.join(process.cwd(), 'dist/cjs/classes/main.js'), + useWorkerThreads, + }: ChildPoolOpts) { + this.opts = { mainFile, useWorkerThreads }; } async retain(processFile: string): Promise { diff --git a/src/classes/main-worker.ts b/src/classes/main-worker.ts index 769ffc0ba2..4167da9668 100644 --- a/src/classes/main-worker.ts +++ b/src/classes/main-worker.ts @@ -3,6 +3,6 @@ * */ import { parentPort } from 'worker_threads'; -import masterBase from './main-base'; +import mainBase from './main-base'; -masterBase(async (msg: any) => parentPort.postMessage(msg), parentPort); +mainBase(async (msg: any) => parentPort.postMessage(msg), parentPort); diff --git a/src/classes/main.ts b/src/classes/main.ts index 5a19173dfc..41cb178d43 100644 --- a/src/classes/main.ts +++ b/src/classes/main.ts @@ -3,6 +3,6 @@ * */ import { childSend } from '../utils'; -import masterBase from './main-base'; +import mainBase from './main-base'; -masterBase((msg: any) => childSend(process, msg), process); +mainBase((msg: any) => childSend(process, msg), process); diff --git a/tests/test_metrics.ts b/tests/test_metrics.ts index 057243f028..617cc8c733 100644 --- a/tests/test_metrics.ts +++ b/tests/test_metrics.ts @@ -3,8 +3,10 @@ import { default as IORedis } from 'ioredis'; import { beforeEach, describe, it } from 'mocha'; import * as sinon from 'sinon'; import { v4 } from 'uuid'; -import { MetricsTime, Queue, QueueEvents, Repeat, Worker } from '../src'; + +import { Queue, QueueEvents, Repeat, Worker } from '../src/classes'; import { removeAllQueueData } from '../src/utils'; +import { MetricsTime } from '../src/enums'; const ONE_SECOND = 1000; const ONE_MINUTE = 60 * ONE_SECOND; @@ -396,7 +398,7 @@ describe('metrics', function () { ); const pageSize = 10; - const data = []; + const data: number[] = []; let skip = 0; while (skip < numPoints) { From 7b8949cb4d2224f90da3c0d710393736960cc55c Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Sat, 6 May 2023 11:08:58 +0200 Subject: [PATCH 045/322] test: increase coverage for async fifo queue --- tests/test_async_fifo_queue.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/test_async_fifo_queue.ts b/tests/test_async_fifo_queue.ts index 170360c5fa..0e4bd7607c 100644 --- a/tests/test_async_fifo_queue.ts +++ b/tests/test_async_fifo_queue.ts @@ -2,6 +2,36 @@ import { expect } from 'chai'; import { AsyncFifoQueue } from '../src/classes/async-fifo-queue'; describe('AsyncFIFOQueue', () => { + it('empty queue', async () => { + const asyncFifoQueue = new AsyncFifoQueue(); + + expect(asyncFifoQueue.numPending()).to.be.eql(0); + expect(asyncFifoQueue.numQueued()).to.be.eql(0); + expect(asyncFifoQueue.numTotal()).to.be.eql(0); + + const result = await asyncFifoQueue.fetch(); + expect(result).to.be.eql(undefined); + }); + + it('handles a promise that rejects', async () => { + const asyncFifoQueue = new AsyncFifoQueue(); + + asyncFifoQueue.add( + new Promise((resolve, reject) => { + setTimeout(() => reject(new Error('test')), 10); + }), + ); + + asyncFifoQueue.add( + new Promise((resolve, reject) => { + setTimeout(() => resolve(42), 100); + }), + ); + + const result = await asyncFifoQueue.fetch(); + expect(result).to.be.eql(42); + }); + it('add several promises and wait for them to complete', async () => { const asyncFifoQueue = new AsyncFifoQueue(); const promises = [1, 2, 3, 4, 5].map( From 6ea5bbbd87129d447544d5223696f7cf1f7372d6 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Sat, 6 May 2023 12:00:00 +0200 Subject: [PATCH 046/322] test(child-pool): add another test --- tests/test_child-pool.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_child-pool.ts b/tests/test_child-pool.ts index e2d8b2da6d..99ec80064d 100644 --- a/tests/test_child-pool.ts +++ b/tests/test_child-pool.ts @@ -103,5 +103,16 @@ function sandboxProcessTests( const child = await pool.retain(processor); expect(children).to.include(child); }).timeout(10000); + + it('should consume execArgv array from process', async () => { + const processor = __dirname + '/fixtures/fixture_processor_bar.js'; + process.execArgv.push('--no-warnings'); + + const child = await pool.retain(processor); + expect(child).to.be.ok; + if (!useWorkerThreads) { + expect(child.childProcess.spawnargs).to.include('--no-warnings'); + } + }); }); } From dd1803f866ff249f2c19691dc1c020a69125a88f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 6 May 2023 10:20:24 +0000 Subject: [PATCH 047/322] chore(release): 3.13.0 [skip ci] # [3.13.0](https://github.com/taskforcesh/bullmq/compare/v3.12.1...v3.13.0) (2023-05-06) ### Features * **worker:** add worker threads support ([0820985](https://github.com/taskforcesh/bullmq/commit/0820985e073582fdf841affad38ecc7ab64691ec)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 918de47345..7ec46ee962 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +# [3.13.0](https://github.com/taskforcesh/bullmq/compare/v3.12.1...v3.13.0) (2023-05-06) + + +### Features + +* **worker:** add worker threads support ([0820985](https://github.com/taskforcesh/bullmq/commit/0820985e073582fdf841affad38ecc7ab64691ec)) + ## [3.12.1](https://github.com/taskforcesh/bullmq/compare/v3.12.0...v3.12.1) (2023-05-05) diff --git a/package.json b/package.json index f93b585f37..8e3d2d6949 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.12.1", + "version": "3.13.0", "description": "Queue for messages and jobs based on Redis", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From 01b621fea0cbdae602482ff61361c05646823223 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Sun, 7 May 2023 10:30:20 -0500 Subject: [PATCH 048/322] fix(retry): consider when queue is paused (#1880) --- python/bullmq/scripts.py | 4 +- src/classes/scripts.ts | 35 +---- ...{reprocessJob-4.lua => reprocessJob-6.lua} | 10 +- src/types/job-options.ts | 5 + tests/test_worker.ts | 130 +++++++++++------- 5 files changed, 103 insertions(+), 81 deletions(-) rename src/commands/{reprocessJob-4.lua => reprocessJob-6.lua} (80%) diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index ce9b1e7faa..1af46ce606 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -36,7 +36,7 @@ def __init__(self, prefix: str, queueName: str, redisClient: Redis): "moveStalledJobsToWait": redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), "pause": redisClient.register_script(self.getScript("pause-4.lua")), "obliterate": redisClient.register_script(self.getScript("obliterate-2.lua")), - "reprocessJob": redisClient.register_script(self.getScript("reprocessJob-4.lua")), + "reprocessJob": redisClient.register_script(self.getScript("reprocessJob-6.lua")), "retryJob": redisClient.register_script(self.getScript("retryJob-8.lua")), "retryJobs": redisClient.register_script(self.getScript("retryJobs-6.lua")), "saveStacktrace": redisClient.register_script(self.getScript("saveStacktrace-1.lua")), @@ -165,6 +165,8 @@ async def reprocessJob(self, job: Job, state: str): keys.append(self.keys['events']) keys.append(self.keys[state]) keys.append(self.keys['wait']) + keys.append(self.keys['meta']) + keys.append(self.keys['paused']) args = [ job.id, diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index 5ee4cafc02..c7a3cb5e0a 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -762,7 +762,9 @@ export class Scripts { this.queue.toKey(job.id), this.queue.keys.events, this.queue.toKey(state), - this.queue.toKey('wait'), + this.queue.keys.wait, + this.queue.keys.meta, + this.queue.keys.paused, ]; const args = [ @@ -914,37 +916,6 @@ export class Scripts { } return result; } - - /* -// * -// * Attempts to reprocess a job -// * -// * @param {Job} job -// * @param {Object} options -// * @param {String} options.state The expected job state. If the job is not found -// * on the provided state, then it's not reprocessed. Supported states: 'failed', 'completed' -// * -// * @return {Promise} Returns a promise that evaluates to a return code: -// * 1 means the operation was a success -// * 0 means the job does not exist -// * -1 means the job is currently locked and can't be retried. -// * -2 means the job was not found in the expected set - - static reprocessJob(job: Jov, state: string) { - var queue = job.queue; - - var keys = [ - queue.toKey(job.id), - queue.toKey(job.id) + ':lock', - queue.toKey(state), - queue.toKey('wait'), - ]; - - var args = [job.id, (job.opts.lifo ? 'R' : 'L') + 'PUSH', queue.token]; - - return queue.client.reprocessJob(keys.concat(args)); - } - */ } export function raw2NextJobData(raw: any[]) { diff --git a/src/commands/reprocessJob-4.lua b/src/commands/reprocessJob-6.lua similarity index 80% rename from src/commands/reprocessJob-4.lua rename to src/commands/reprocessJob-6.lua index 7ffffd33b9..22991cc970 100644 --- a/src/commands/reprocessJob-4.lua +++ b/src/commands/reprocessJob-6.lua @@ -6,6 +6,8 @@ KEYS[2] events stream KEYS[3] job state KEYS[4] wait key + KEYS[5] meta + KEYS[6] paused key ARGV[1] job.id ARGV[2] (job.opts.lifo ? 'R' : 'L') + 'PUSH' @@ -18,12 +20,18 @@ -3 means the job was not found in the expected set. ]] local rcall = redis.call; + +-- Includes +--- @include "includes/getTargetQueueList" + if (rcall("EXISTS", KEYS[1]) == 1) then local jobId = ARGV[1] if (rcall("ZREM", KEYS[3], jobId) == 1) then - rcall(ARGV[2], KEYS[4], jobId) rcall("HDEL", KEYS[1], "finishedOn", "processedOn", ARGV[3]) + local target = getTargetQueueList(KEYS[5], KEYS[4], KEYS[6]) + rcall(ARGV[2], target, jobId) + -- Emit waiting event rcall("XADD", KEYS[2], "*", "event", "waiting", "jobId", jobId, "prev", ARGV[4]); return 1 diff --git a/src/types/job-options.ts b/src/types/job-options.ts index fb88534fe6..3d615fdb98 100644 --- a/src/types/job-options.ts +++ b/src/types/job-options.ts @@ -15,4 +15,9 @@ export type RedisJobOptions = BaseJobOptions & { * If true, moves parent to failed. */ fpof?: boolean; + + /** + * Maximum amount of log entries that will be preserved + */ + kl?: number; }; diff --git a/tests/test_worker.ts b/tests/test_worker.ts index 7e69458409..197fdcd8e5 100644 --- a/tests/test_worker.ts +++ b/tests/test_worker.ts @@ -1313,6 +1313,44 @@ describe('workers', function () { await worker.close(); }); + describe('when queue is paused and retry a job', () => { + it('moves job to paused', async () => { + const worker = new Worker( + queueName, + async () => { + await delay(100); + }, + { connection }, + ); + await worker.waitUntilReady(); + + const completing = new Promise((resolve, reject) => { + worker.once('completed', async job => { + try { + expect(job).to.be.ok; + expect(job.data.foo).to.be.eql('bar'); + } catch (err) { + reject(err); + } + resolve(); + }); + }); + + const job = await queue.add('test', { foo: 'bar' }); + expect(job.id).to.be.ok; + expect(job.data.foo).to.be.eql('bar'); + + await completing; + await queue.pause(); + await job.retry('completed'); + + const pausedJobsCount = await queue.getJobCountByTypes('paused'); + expect(pausedJobsCount).to.be.equal(1); + + await worker.close(); + }); + }); + it('retry a job that fails using job retry method', async () => { let called = 0; let failedOnce = false; @@ -1498,53 +1536,6 @@ describe('workers', function () { await worker.close(); }); - describe('when retrying jobs', () => { - it('deletes token after moving jobs to delayed', async function () { - const worker = new Worker( - queueName, - async job => { - if (job.attemptsMade !== 3) { - throw new Error('error'); - } - return delay(100); - }, - { - connection, - lockDuration: 10000, - lockRenewTime: 3000, // The lock will not be updated - }, - ); - await worker.waitUntilReady(); - - const client = await queue.client; - - const job = await queue.add( - 'test', - { bar: 'baz' }, - { attempts: 3, backoff: 100 }, - ); - - worker.on('failed', async () => { - const token = await client.get(`bull:${queueName}:${job.id}:lock`); - expect(token).to.be.null; - }); - - const workerCompleted = new Promise(resolve => { - worker.once('completed', () => { - resolve(); - }); - }); - - await workerCompleted; - - const token = await client.get(`bull:${queueName}:${job.id}:lock`); - - expect(token).to.be.null; - - await worker.close(); - }); - }); - it('continues processing after a worker has stalled', async function () { let first = true; this.timeout(10000); @@ -1871,6 +1862,51 @@ describe('workers', function () { }); describe('Retries and backoffs', () => { + it('deletes token after moving jobs to delayed', async function () { + const worker = new Worker( + queueName, + async job => { + if (job.attemptsMade !== 3) { + throw new Error('error'); + } + return delay(100); + }, + { + connection, + lockDuration: 10000, + lockRenewTime: 3000, // The lock will not be updated + }, + ); + await worker.waitUntilReady(); + + const client = await queue.client; + + const job = await queue.add( + 'test', + { bar: 'baz' }, + { attempts: 3, backoff: 100 }, + ); + + worker.on('failed', async () => { + const token = await client.get(`bull:${queueName}:${job.id}:lock`); + expect(token).to.be.null; + }); + + const workerCompleted = new Promise(resolve => { + worker.once('completed', () => { + resolve(); + }); + }); + + await workerCompleted; + + const token = await client.get(`bull:${queueName}:${job.id}:lock`); + + expect(token).to.be.null; + + await worker.close(); + }); + describe('when attempts is 1 and job fails', () => { it('should execute job only once and emits retries-exhausted event', async () => { const worker = new Worker( From a880069ca02c1b9eb64fb42a0d269b3e98aa91c3 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 7 May 2023 15:31:07 +0000 Subject: [PATCH 049/322] chore(release): 3.13.1 [skip ci] ## [3.13.1](https://github.com/taskforcesh/bullmq/compare/v3.13.0...v3.13.1) (2023-05-07) ### Bug Fixes * **retry:** consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([01b621f](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 7ec46ee962..ae872f92b1 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [3.13.1](https://github.com/taskforcesh/bullmq/compare/v3.13.0...v3.13.1) (2023-05-07) + + +### Bug Fixes + +* **retry:** consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([01b621f](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) + # [3.13.0](https://github.com/taskforcesh/bullmq/compare/v3.12.1...v3.13.0) (2023-05-06) diff --git a/package.json b/package.json index 8e3d2d6949..548de94323 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.13.0", + "version": "3.13.1", "description": "Queue for messages and jobs based on Redis", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From a23f37e4079d34c8589efc85e4d726a62244f0d2 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 8 May 2023 23:33:00 -0500 Subject: [PATCH 050/322] fix(rate-limit): consider paused queue when dynamic rate limit (#1884) --- src/classes/scripts.ts | 3 + ...it-4.lua => moveJobFromActiveToWait-7.lua} | 21 ++- tests/test_rate_limiter.ts | 149 ++++++++++++------ 3 files changed, 119 insertions(+), 54 deletions(-) rename src/commands/{moveJobFromActiveToWait-4.lua => moveJobFromActiveToWait-7.lua} (50%) diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index c7a3cb5e0a..3c8af1ed9e 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -889,6 +889,9 @@ export class Scripts { this.queue.keys.wait, this.queue.keys.stalled, lockKey, + this.queue.keys.paused, + this.queue.keys.meta, + this.queue.keys.events, ]; const args = [jobId, token]; diff --git a/src/commands/moveJobFromActiveToWait-4.lua b/src/commands/moveJobFromActiveToWait-7.lua similarity index 50% rename from src/commands/moveJobFromActiveToWait-4.lua rename to src/commands/moveJobFromActiveToWait-7.lua index da2d5ef788..8326bf4736 100644 --- a/src/commands/moveJobFromActiveToWait-4.lua +++ b/src/commands/moveJobFromActiveToWait-7.lua @@ -1,11 +1,14 @@ --[[ Function to move job from active state to wait. Input: - keys[1] active key - keys[2] wait key + KEYS[1] active key + KEYS[2] wait key - keys[3] stalled key - keys[4] job lock key + KEYS[3] stalled key + KEYS[4] job lock key + KEYS[5] paused key + KEYS[6] meta key + KEYS[7] event key args[1] job id args[2] lock token @@ -13,6 +16,9 @@ ]] local rcall = redis.call +-- Includes +--- @include "includes/getTargetQueueList" + local jobId = ARGV[1] local token = ARGV[2] local lockKey = KEYS[4] @@ -21,8 +27,13 @@ local lockToken = rcall("GET", lockKey) if lockToken == token then local removed = rcall("LREM", KEYS[1], 1, jobId) if (removed > 0) then + local target = getTargetQueueList(KEYS[6], KEYS[2], KEYS[5]) + rcall("SREM", KEYS[3], jobId) - rcall("RPUSH", KEYS[2], jobId); + rcall("RPUSH", target, jobId) rcall("DEL", lockKey) + + -- Emit waiting event + rcall("XADD", KEYS[7], "*", "event", "waiting", "jobId", jobId) end end diff --git a/tests/test_rate_limiter.ts b/tests/test_rate_limiter.ts index d194a6a4ed..a6ad3eb510 100644 --- a/tests/test_rate_limiter.ts +++ b/tests/test_rate_limiter.ts @@ -261,65 +261,116 @@ describe('Rate Limiter', function () { await worker.close(); }); - it('should obey the rate limit with dynamic limit', async function () { - this.timeout(5000); + describe('when dynamic limit is used', () => { + it('should obey the rate limit', async function () { + this.timeout(5000); - const numJobs = 10; - const dynamicLimit = 250; - const duration = 100; - const margin = 0.95; // 5% margin for CI + const numJobs = 10; + const dynamicLimit = 250; + const duration = 100; + const margin = 0.95; // 5% margin for CI - const worker = new Worker( - queueName, - async job => { - if (job.attemptsMade === 1) { - await worker.rateLimit(dynamicLimit); - throw Worker.RateLimitError(); - } - }, - { - connection, - limiter: { - max: 1, - duration, + const worker = new Worker( + queueName, + async job => { + if (job.attemptsMade === 1) { + await worker.rateLimit(dynamicLimit); + throw Worker.RateLimitError(); + } }, - }, - ); + { + connection, + limiter: { + max: 1, + duration, + }, + }, + ); - const result = new Promise((resolve, reject) => { - queueEvents.on( - 'completed', - // after every job has been completed - after(numJobs, async () => { - await worker.close(); + const result = new Promise((resolve, reject) => { + queueEvents.on( + 'completed', + // after every job has been completed + after(numJobs, async () => { + await worker.close(); - try { - const timeDiff = new Date().getTime() - startTime; - expect(timeDiff).to.be.gte( - (numJobs * dynamicLimit + numJobs * duration) * margin, - ); - resolve(); - } catch (err) { - reject(err); - } - }), - ); + try { + const timeDiff = new Date().getTime() - startTime; + expect(timeDiff).to.be.gte( + (numJobs * dynamicLimit + numJobs * duration) * margin, + ); + resolve(); + } catch (err) { + reject(err); + } + }), + ); - queueEvents.on('failed', async err => { - await worker.close(); - reject(err); + queueEvents.on('failed', async err => { + await worker.close(); + reject(err); + }); }); + + const startTime = new Date().getTime(); + const jobs = Array.from(Array(numJobs).keys()).map(() => ({ + name: 'rate test', + data: {}, + })); + await queue.addBulk(jobs); + + await result; + await worker.close(); }); - const startTime = new Date().getTime(); - const jobs = Array.from(Array(numJobs).keys()).map(() => ({ - name: 'rate test', - data: {}, - })); - await queue.addBulk(jobs); + describe('when queue is paused', () => { + it('moves job to paused', async function () { + const dynamicLimit = 250; + const duration = 100; + + const worker = new Worker( + queueName, + async job => { + if (job.attemptsMade === 1) { + await queue.pause(); + await delay(150); + await worker.rateLimit(dynamicLimit); + throw Worker.RateLimitError(); + } + }, + { + connection, + autorun: false, + limiter: { + max: 1, + duration, + }, + }, + ); - await result; - await worker.close(); + const result = new Promise((resolve, reject) => { + queueEvents.on( + 'waiting', + // after every job has been moved to waiting again + after(2, () => { + resolve(); + }), + ); + }); + + await delay(200); + await queue.add('rate test', {}); + + worker.run(); + + await result; + + const pausedCount = await queue.getJobCountByTypes('paused'); + expect(pausedCount).to.equal(1); + + await worker.close(); + }); + }); }); describe('when there are more added jobs than max limiter', () => { From ce8059d5c6620acc9f8a090e447c610f80913af4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 9 May 2023 04:33:44 +0000 Subject: [PATCH 051/322] chore(release): 3.13.2 [skip ci] ## [3.13.2](https://github.com/taskforcesh/bullmq/compare/v3.13.1...v3.13.2) (2023-05-09) ### Bug Fixes * **rate-limit:** consider paused queue when dynamic rate limit ([#1884](https://github.com/taskforcesh/bullmq/issues/1884)) ([a23f37e](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index ae872f92b1..ceb2451437 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [3.13.2](https://github.com/taskforcesh/bullmq/compare/v3.13.1...v3.13.2) (2023-05-09) + + +### Bug Fixes + +* **rate-limit:** consider paused queue when dynamic rate limit ([#1884](https://github.com/taskforcesh/bullmq/issues/1884)) ([a23f37e](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) + ## [3.13.1](https://github.com/taskforcesh/bullmq/compare/v3.13.0...v3.13.1) (2023-05-07) diff --git a/package.json b/package.json index 548de94323..edbca28418 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.13.1", + "version": "3.13.2", "description": "Queue for messages and jobs based on Redis", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From 0acfb79f779c6dcffca946f843290ae7bc4066e7 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 9 May 2023 21:26:54 -0500 Subject: [PATCH 052/322] docs(bullmq-pro): update changelog (#1888) --- docs/gitbook/bullmq-pro/changelog.md | 7 +++++++ src/classes/scripts.ts | 6 +----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index 4012685003..00613c7c57 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,10 @@ +## [5.2.3](https://github.com/taskforcesh/bullmq-pro/compare/v5.2.2...v5.2.3) (2023-05-09) + + +### Bug Fixes + +* **deps:** upgrade bullmq to 3.13.2 ([#144](https://github.com/taskforcesh/bullmq-pro/issues/144)) ([4dd0bb7](https://github.com/taskforcesh/bullmq-pro/commit/4dd0bb7ff69b8270f4adf1f513a7164fb49cc375)) + ## [5.2.2](https://github.com/taskforcesh/bullmq-pro/compare/v5.2.1...v5.2.2) (2023-04-18) diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index 3c8af1ed9e..b397153f61 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -303,11 +303,7 @@ export class Scripts { : { count: shouldRemove ? 0 : -1 }; } - async moveToFinished< - DataType = any, - ReturnType = any, - NameType extends string = string, - >(jobId: string, args: (string | number | boolean | Buffer)[]) { + async moveToFinished(jobId: string, args: (string | number | boolean | Buffer)[]) { const client = await this.queue.client; const result = await (client).moveToFinished(args); From 1db396d1f54154dc94c796ae8b570336fc341f02 Mon Sep 17 00:00:00 2001 From: Sebastien La Duca Date: Wed, 10 May 2023 19:38:23 -0400 Subject: [PATCH 053/322] fix(child): use named import for EventEmitter (#1887) --- src/classes/child.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/classes/child.ts b/src/classes/child.ts index c8d74f1eb6..14c8d478c0 100644 --- a/src/classes/child.ts +++ b/src/classes/child.ts @@ -2,7 +2,7 @@ import { ChildProcess, fork } from 'child_process'; import { Worker } from 'worker_threads'; import { AddressInfo, createServer } from 'net'; import { ChildCommand, ParentCommand } from '../'; -import * as EventEmitter from 'events'; +import { EventEmitter } from 'events'; /** * @see https://nodejs.org/api/process.html#process_exit_codes From 64658c024508fe91e85a291116ed899bbea0d564 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 10 May 2023 23:39:33 +0000 Subject: [PATCH 054/322] chore(release): 3.13.3 [skip ci] ## [3.13.3](https://github.com/taskforcesh/bullmq/compare/v3.13.2...v3.13.3) (2023-05-10) ### Bug Fixes * **child:** use named import for EventEmitter ([#1887](https://github.com/taskforcesh/bullmq/issues/1887)) ([1db396d](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index ceb2451437..4cb9e8686b 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [3.13.3](https://github.com/taskforcesh/bullmq/compare/v3.13.2...v3.13.3) (2023-05-10) + + +### Bug Fixes + +* **child:** use named import for EventEmitter ([#1887](https://github.com/taskforcesh/bullmq/issues/1887)) ([1db396d](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) + ## [3.13.2](https://github.com/taskforcesh/bullmq/compare/v3.13.1...v3.13.2) (2023-05-09) diff --git a/package.json b/package.json index edbca28418..b545d7c487 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.13.2", + "version": "3.13.3", "description": "Queue for messages and jobs based on Redis", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From e0d2992eb757d437dede52054c049470d986ad44 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 11 May 2023 06:54:07 -0500 Subject: [PATCH 055/322] perf(rate-limit): call pttl in script moveJobFromActiveToWait (#1889) --- src/classes/scripts.ts | 17 ++++++++++------- src/classes/worker.ts | 11 ++--------- ...Wait-7.lua => moveJobFromActiveToWait-8.lua} | 15 +++++++++------ src/commands/takeLock-1.lua | 17 ----------------- tests/test_pause.ts | 4 +--- 5 files changed, 22 insertions(+), 42 deletions(-) rename src/commands/{moveJobFromActiveToWait-7.lua => moveJobFromActiveToWait-8.lua} (73%) delete mode 100644 src/commands/takeLock-1.lua diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index b397153f61..6d4d0aaf63 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -303,7 +303,10 @@ export class Scripts { : { count: shouldRemove ? 0 : -1 }; } - async moveToFinished(jobId: string, args: (string | number | boolean | Buffer)[]) { + async moveToFinished( + jobId: string, + args: (string | number | boolean | Buffer)[], + ) { const client = await this.queue.client; const result = await (client).moveToFinished(args); @@ -873,11 +876,8 @@ export class Scripts { * @param jobId - Job id * @returns */ - moveJobFromActiveToWait( - client: ChainableCommander, - jobId: string, - token: string, - ) { + async moveJobFromActiveToWait(jobId: string, token: string) { + const client = await this.queue.client; const lockKey = `${this.queue.toKey(jobId)}:lock`; const keys = [ @@ -887,12 +887,15 @@ export class Scripts { lockKey, this.queue.keys.paused, this.queue.keys.meta, + this.queue.keys.limiter, this.queue.keys.events, ]; const args = [jobId, token]; - return (client).moveJobFromActiveToWait(keys.concat(args)); + const pttl = await (client).moveJobFromActiveToWait(keys.concat(args)); + + return pttl < 0 ? 0 : pttl; } async obliterate(opts: { force: boolean; count: number }): Promise { diff --git a/src/classes/worker.ts b/src/classes/worker.ts index 47617a1c53..ea2d77a5a5 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -945,17 +945,10 @@ export class Worker< ); } - private async moveLimitedBackToWait( + private moveLimitedBackToWait( job: Job, token: string, ) { - const multi = (await this.client).multi(); - multi.pttl(this.keys.limiter); - this.scripts.moveJobFromActiveToWait(multi, job.id, token); - const [[err1, limitUntil], [err2]] = await multi.exec(); - if (err1 || err2) { - throw err1 || err2; - } - return parseInt(limitUntil as string) || 0; + return this.scripts.moveJobFromActiveToWait(job.id, token); } } diff --git a/src/commands/moveJobFromActiveToWait-7.lua b/src/commands/moveJobFromActiveToWait-8.lua similarity index 73% rename from src/commands/moveJobFromActiveToWait-7.lua rename to src/commands/moveJobFromActiveToWait-8.lua index 8326bf4736..6c8d97944a 100644 --- a/src/commands/moveJobFromActiveToWait-7.lua +++ b/src/commands/moveJobFromActiveToWait-8.lua @@ -8,11 +8,11 @@ KEYS[4] job lock key KEYS[5] paused key KEYS[6] meta key - KEYS[7] event key - - args[1] job id - args[2] lock token + KEYS[7] limiter key + KEYS[8] event key + ARGV[1] job id + ARGV[2] lock token ]] local rcall = redis.call @@ -24,7 +24,8 @@ local token = ARGV[2] local lockKey = KEYS[4] local lockToken = rcall("GET", lockKey) -if lockToken == token then +local pttl = rcall("PTTL", KEYS[7]) +if lockToken == token and pttl > 0 then local removed = rcall("LREM", KEYS[1], 1, jobId) if (removed > 0) then local target = getTargetQueueList(KEYS[6], KEYS[2], KEYS[5]) @@ -34,6 +35,8 @@ if lockToken == token then rcall("DEL", lockKey) -- Emit waiting event - rcall("XADD", KEYS[7], "*", "event", "waiting", "jobId", jobId) + rcall("XADD", KEYS[8], "*", "event", "waiting", "jobId", jobId) end end + +return pttl diff --git a/src/commands/takeLock-1.lua b/src/commands/takeLock-1.lua deleted file mode 100644 index dca6f77a08..0000000000 --- a/src/commands/takeLock-1.lua +++ /dev/null @@ -1,17 +0,0 @@ ---[[ - Takes a lock - - Input: - KEYS[1] 'lock', - - ARGV[1] token - ARGV[2] lock duration in milliseconds - - Output: - "OK" if lock extented succesfully. -]] -if redis.call("SET", KEYS[1], ARGV[1], "NX", "PX", ARGV[2]) then - return 1 -else - return 0 -end diff --git a/tests/test_pause.ts b/tests/test_pause.ts index 69ebffa73e..8a79198a18 100644 --- a/tests/test_pause.ts +++ b/tests/test_pause.ts @@ -26,8 +26,6 @@ describe('Pause', function () { }); it('should not process delayed jobs', async function () { - this.timeout(5000); - let processed = false; const worker = new Worker( @@ -40,7 +38,7 @@ describe('Pause', function () { await worker.waitUntilReady(); await queue.pause(); - await queue.add('test', {}, { delay: 200 }); + await queue.add('test', {}, { delay: 300 }); const counts = await queue.getJobCounts('waiting', 'delayed'); expect(counts).to.have.property('waiting', 0); From d7e640c6368a714f611920be849648348052de05 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 11 May 2023 11:54:52 +0000 Subject: [PATCH 056/322] chore(release): 3.13.4 [skip ci] ## [3.13.4](https://github.com/taskforcesh/bullmq/compare/v3.13.3...v3.13.4) (2023-05-11) ### Performance Improvements * **rate-limit:** call pttl in script moveJobFromActiveToWait ([#1889](https://github.com/taskforcesh/bullmq/issues/1889)) ([e0d2992](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 4cb9e8686b..6fb39daa5e 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [3.13.4](https://github.com/taskforcesh/bullmq/compare/v3.13.3...v3.13.4) (2023-05-11) + + +### Performance Improvements + +* **rate-limit:** call pttl in script moveJobFromActiveToWait ([#1889](https://github.com/taskforcesh/bullmq/issues/1889)) ([e0d2992](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) + ## [3.13.3](https://github.com/taskforcesh/bullmq/compare/v3.13.2...v3.13.3) (2023-05-10) diff --git a/package.json b/package.json index b545d7c487..6f7dcf1e54 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.13.3", + "version": "3.13.4", "description": "Queue for messages and jobs based on Redis", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From 4825098380066417ca1a9c3c96a750f8e8b6a81a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 May 2023 23:18:05 +0000 Subject: [PATCH 057/322] chore(deps): update dependency platformdirs to v3.5.1 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index 46af7c723d..d9c6c2ae37 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -4,7 +4,7 @@ distlib==0.3.6 filelock==3.12.0 msgpack==1.0.5 pipenv==2023.4.29 -platformdirs==3.5.0 +platformdirs==3.5.1 redis==4.5.4 six==1.16.0 virtualenv==20.23.0 From 80d39ace2cbaf61b325af8eaf3c3fe1b2bb212e6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 May 2023 11:55:41 +0000 Subject: [PATCH 058/322] chore(deps): lock file maintenance --- yarn.lock | 199 ++++++++++++++++++++++++++---------------------------- 1 file changed, 96 insertions(+), 103 deletions(-) diff --git a/yarn.lock b/yarn.lock index a2ca9fb35a..c621ad5c2e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -204,12 +204,12 @@ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@commitlint/cli@^17.0.3": - version "17.6.1" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.6.1.tgz#571a1272a656cd316f4b601cbb0fcb2ef50bfc7a" - integrity sha512-kCnDD9LE2ySiTnj/VPaxy4/oRayRcdv4aCuVxtoum8SxIU7OADHc0nJPQfheE8bHcs3zZdWzDMWltRosuT13bg== + version "17.6.3" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.6.3.tgz#a02194a2bb6efe4e681eda2addd072a8d02c9497" + integrity sha512-ItSz2fd4F+CujgIbQOfNNerDF1eFlsBGEfp9QcCb1kxTYMuKTYZzA6Nu1YRRrIaaWwe2E7awUGpIMrPoZkOG3A== dependencies: "@commitlint/format" "^17.4.4" - "@commitlint/lint" "^17.6.1" + "@commitlint/lint" "^17.6.3" "@commitlint/load" "^17.5.0" "@commitlint/read" "^17.5.1" "@commitlint/types" "^17.4.4" @@ -220,9 +220,9 @@ yargs "^17.0.0" "@commitlint/config-conventional@^17.0.3": - version "17.6.1" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.6.1.tgz#ab07c82c88f99ffee89ae321f1f49f1798127fbb" - integrity sha512-ng/ybaSLuTCH9F+7uavSOnEQ9EFMl7lHEjfAEgRh1hwmEe8SpLKpQeMo2aT1IWvHaGMuTb+gjfbzoRf2IR23NQ== + version "17.6.3" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.6.3.tgz#21f5835235493e386effeaa98b898124230b1000" + integrity sha512-bLyHEjjRWqlLQWIgYFHmUPbEFMOOLXeF3QbUinDIJev/u9e769tkoTH9YPknEywiuIrAgZaVo+OfzAIsJP0fsw== dependencies: conventional-changelog-conventionalcommits "^5.0.0" @@ -259,20 +259,20 @@ "@commitlint/types" "^17.4.4" chalk "^4.1.0" -"@commitlint/is-ignored@^17.4.4": - version "17.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.4.4.tgz#82e03f1abe2de2c0c8c162a250b8d466225e922b" - integrity sha512-Y3eo1SFJ2JQDik4rWkBC4tlRIxlXEFrRWxcyrzb1PUT2k3kZ/XGNuCDfk/u0bU2/yS0tOA/mTjFsV+C4qyACHw== +"@commitlint/is-ignored@^17.6.3": + version "17.6.3" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.6.3.tgz#8e21046558a0339fbf2a33ef0ad7d5a9ae7ff6bc" + integrity sha512-LQbNdnPbxrpbcrVKR5yf51SvquqktpyZJwqXx3lUMF6+nT9PHB8xn3wLy8pi2EQv5Zwba484JnUwDE1ygVYNQA== dependencies: "@commitlint/types" "^17.4.4" - semver "7.3.8" + semver "7.5.0" -"@commitlint/lint@^17.6.1": - version "17.6.1" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.6.1.tgz#52275acc6b3d92a9ad466535331c5dd8e85b6f42" - integrity sha512-VARJ9kxH64isgwVnC+ABPafCYzqxpsWJIpDaTuI0gh8aX4GQ0i7cn9tvxtFNfJj4ER2BAJeWJ0vURdNYjK2RQQ== +"@commitlint/lint@^17.6.3": + version "17.6.3" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.6.3.tgz#2d9a88b73c44be8b97508c980198a6f289251655" + integrity sha512-fBlXwt6SHJFgm3Tz+luuo3DkydAx9HNC5y4eBqcKuDuMVqHd2ugMNr+bQtx6riv9mXFiPoKp7nE4Xn/ls3iVDA== dependencies: - "@commitlint/is-ignored" "^17.4.4" + "@commitlint/is-ignored" "^17.6.3" "@commitlint/parse" "^17.4.4" "@commitlint/rules" "^17.6.1" "@commitlint/types" "^17.4.4" @@ -762,10 +762,10 @@ "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^17.1.0": - version "17.1.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.1.0.tgz#9a712b5bb9d644940d8a1f24115c798c317a64a5" - integrity sha512-rnI26BAITDZTo5vqFOmA7oX4xRd18rO+gcK4MiTpJmsRMxAw0JmevNjPsjpry1bb9SVNo56P/0kbiyXXa4QluA== +"@octokit/openapi-types@^17.1.1": + version "17.1.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.1.1.tgz#b046979537d4209954206d29fbf9fe6893c5acec" + integrity sha512-/X7Gh/qWiWaooJmUnYD48SYy72fyrk2ceisOSe89JojK7r0j8YrTwYpDi76kI+c6QiqX1KSgdoBTMJvktsDkYw== "@octokit/plugin-paginate-rest@^6.0.0": version "6.0.0" @@ -819,11 +819,11 @@ "@octokit/plugin-rest-endpoint-methods" "^7.0.0" "@octokit/types@^9.0.0": - version "9.2.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.2.0.tgz#0358e3de070b1d43c5a8af63b9951c88a09fc9ed" - integrity sha512-xySzJG4noWrIBFyMu4lg4tu9vAgNg9S0aoLRONhAEz6ueyi1evBzb40HitIosaYS4XOexphG305IVcLrIX/30g== + version "9.2.1" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.2.1.tgz#34ab724b66ffbe210604593127bb47fd044abbc7" + integrity sha512-Vx4keMiD/CAiwVFasLcH0xBSVbKIHebIZke9i7ZbUWGNN4vJFWSYH6Nvga7UY9NIJCGa6x3QG849XTbi5wYmkA== dependencies: - "@octokit/openapi-types" "^17.1.0" + "@octokit/openapi-types" "^17.1.1" "@pnpm/config.env-replace@^1.1.0": version "1.1.0" @@ -1087,9 +1087,9 @@ integrity sha512-9TyS+Ph/14zCizVcp6RG7xmRsHr3jsFA088iKbQMrTRvL6Lcs5rdOpOgjsDww8vpk6Q1dBASvm7W6Hs4hQDVDg== "@types/node@*": - version "18.16.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.3.tgz#6bda7819aae6ea0b386ebc5b24bdf602f1b42b01" - integrity sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q== + version "20.1.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.2.tgz#8fd63447e3f99aba6c3168fd2ec4580d5b97886f" + integrity sha512-CTO/wa8x+rZU626cL2BlbCDzydgnFNgc19h4YvizpTO88MFQxab8wqisxaofQJ/9bLGugRdWIuX/TbIs6VVF6g== "@types/node@^12.20.25": version "12.20.55" @@ -1112,9 +1112,9 @@ integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/semver@^7.3.9": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== "@types/sinon@^7.5.2": version "7.5.2" @@ -1153,13 +1153,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^5.33.0": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.2.tgz#c2c443247901d95865b9f77332d9eee7c55655e8" - integrity sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ== + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.5.tgz#63064f5eafbdbfb5f9dfbf5c4503cdf949852981" + integrity sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw== dependencies: - "@typescript-eslint/scope-manager" "5.59.2" - "@typescript-eslint/types" "5.59.2" - "@typescript-eslint/typescript-estree" "5.59.2" + "@typescript-eslint/scope-manager" "5.59.5" + "@typescript-eslint/types" "5.59.5" + "@typescript-eslint/typescript-estree" "5.59.5" debug "^4.3.4" "@typescript-eslint/scope-manager@4.33.0": @@ -1170,23 +1170,23 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/scope-manager@5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz#f699fe936ee4e2c996d14f0fdd3a7da5ba7b9a4c" - integrity sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA== +"@typescript-eslint/scope-manager@5.59.5": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.5.tgz#33ffc7e8663f42cfaac873de65ebf65d2bce674d" + integrity sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A== dependencies: - "@typescript-eslint/types" "5.59.2" - "@typescript-eslint/visitor-keys" "5.59.2" + "@typescript-eslint/types" "5.59.5" + "@typescript-eslint/visitor-keys" "5.59.5" "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/types@5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.2.tgz#b511d2b9847fe277c5cb002a2318bd329ef4f655" - integrity sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w== +"@typescript-eslint/types@5.59.5": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.5.tgz#e63c5952532306d97c6ea432cee0981f6d2258c7" + integrity sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w== "@typescript-eslint/typescript-estree@4.33.0", "@typescript-eslint/typescript-estree@^4.33.0": version "4.33.0" @@ -1201,13 +1201,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz#6e2fabd3ba01db5d69df44e0b654c0b051fe9936" - integrity sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q== +"@typescript-eslint/typescript-estree@5.59.5": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.5.tgz#9b252ce55dd765e972a7a2f99233c439c5101e42" + integrity sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg== dependencies: - "@typescript-eslint/types" "5.59.2" - "@typescript-eslint/visitor-keys" "5.59.2" + "@typescript-eslint/types" "5.59.5" + "@typescript-eslint/visitor-keys" "5.59.5" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1222,12 +1222,12 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.59.2": - version "5.59.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz#37a419dc2723a3eacbf722512b86d6caf7d3b750" - integrity sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig== +"@typescript-eslint/visitor-keys@5.59.5": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.5.tgz#ba5b8d6791a13cf9fea6716af1e7626434b29b9b" + integrity sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA== dependencies: - "@typescript-eslint/types" "5.59.2" + "@typescript-eslint/types" "5.59.5" eslint-visitor-keys "^3.3.0" JSONStream@^1.0.4: @@ -1334,12 +1334,12 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== +ansi-escapes@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== dependencies: - type-fest "^1.0.2" + type-fest "^3.0.0" ansi-regex@^5.0.1: version "5.0.1" @@ -1722,9 +1722,9 @@ camelcase@^6.0.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001449: - version "1.0.30001482" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz#8b3fad73dc35b2674a5c96df2d4f9f1c561435de" - integrity sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ== + version "1.0.30001486" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz#56a08885228edf62cbe1ac8980f2b5dae159997e" + integrity sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg== cardinal@^2.1.1: version "2.1.1" @@ -1784,7 +1784,7 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.0: +chalk@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== @@ -1851,7 +1851,7 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== -cli-table3@^0.6.1, cli-table3@^0.6.2: +cli-table3@^0.6.2, cli-table3@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== @@ -2528,9 +2528,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.4.284: - version "1.4.380" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.380.tgz#195dc59d930c6b74efbee6f0e6a267ce4af5ed91" - integrity sha512-XKGdI4pWM78eLH2cbXJHiBnWUwFSzZM7XujsB6stDiGu9AeSqziedP6amNLpJzE3i0rLTcfAwdCTs5ecP5yeSg== + version "1.4.391" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.391.tgz#197994210792e29e39baf3ce807df42f66e9b5f8" + integrity sha512-GqydVV1+kUWY5qlEzaw34/hyWTApuQrHiGrcGA2Kk/56nEK44i+YUW45VH43JuZT0Oo7uY8aVtpPhBBZXEWtSA== emoji-regex@^8.0.0: version "8.0.0" @@ -2557,9 +2557,9 @@ end-of-stream@^1.1.0: once "^1.4.0" enhanced-resolve@^5.8.3: - version "5.13.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275" - integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg== + version "5.14.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.0.tgz#0b6c676c8a3266c99fa281e4433a706f5c0c61c4" + integrity sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -2765,9 +2765,9 @@ eslint-visitor-keys@^2.0.0: integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-visitor-keys@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" - integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== eslint@^7.32.0: version "7.32.0" @@ -4789,16 +4789,16 @@ map-obj@^4.0.0: integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== marked-terminal@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.1.1.tgz#d2edc2991841d893ee943b44b40b2ee9518b4d9f" - integrity sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g== + version "5.2.0" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.2.0.tgz#c5370ec2bae24fb2b34e147b731c94fa933559d3" + integrity sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA== dependencies: - ansi-escapes "^5.0.0" + ansi-escapes "^6.2.0" cardinal "^2.1.1" - chalk "^5.0.0" - cli-table3 "^0.6.1" + chalk "^5.2.0" + cli-table3 "^0.6.3" node-emoji "^1.11.0" - supports-hyperlinks "^2.2.0" + supports-hyperlinks "^2.3.0" marked@^4.0.10, marked@^4.2.12: version "4.3.0" @@ -5184,9 +5184,9 @@ node-emoji@^1.11.0: lodash "^4.17.21" node-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== + version "2.6.11" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== dependencies: whatwg-url "^5.0.0" @@ -6556,10 +6556,10 @@ semver-regex@^3.1.2: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== +semver@7.5.0, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== dependencies: lru-cache "^6.0.0" @@ -6568,13 +6568,6 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: - version "7.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" - integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== - dependencies: - lru-cache "^6.0.0" - serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -7017,7 +7010,7 @@ supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.2.0: +supports-hyperlinks@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== @@ -7305,10 +7298,10 @@ type-fest@^0.8.0, type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== +type-fest@^3.0.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.10.0.tgz#d75f17a22be8816aea6315ab2739fe1c0c211863" + integrity sha512-hmAPf1datm+gt3c2mvu0sJyhFy6lTkIGf0GzyaZWxRLnabQfPUqg6tF95RPg6sLxKI7nFLGdFxBcf2/7+GXI+A== typed-array-length@^1.0.4: version "1.0.4" From 5b94b1ca3d23e1cfa6d3efb73e042670d0421c39 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 14 May 2023 00:32:41 -0500 Subject: [PATCH 059/322] chore(deps): update dependency redis to v4.5.5 (#1883) --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index d9c6c2ae37..a8303d2809 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -5,7 +5,7 @@ filelock==3.12.0 msgpack==1.0.5 pipenv==2023.4.29 platformdirs==3.5.1 -redis==4.5.4 +redis==4.5.5 six==1.16.0 virtualenv==20.23.0 virtualenv-clone==0.5.7 From d164fa8745514fe46bfb3feb02d24884e4ea4697 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 16 May 2023 22:07:40 -0500 Subject: [PATCH 060/322] chore(bullmq-pro): update changelog (#1902) --- docs/gitbook/bullmq-pro/changelog.md | 7 ++ src/classes/job.ts | 2 +- src/commands/addJob-8.lua | 4 +- src/commands/changeDelay-3.lua | 5 +- src/commands/getRanges-1.lua | 2 +- src/commands/includes/cleanSet.lua | 4 +- src/commands/includes/getRateLimitTTL.lua | 2 +- .../includes/updateParentDepsIfNeeded.lua | 1 - src/commands/isFinished-3.lua | 6 +- src/commands/moveToActive-9.lua | 88 +++++++++---------- src/commands/moveToDelayed-8.lua | 45 +++++----- src/commands/pause-4.lua | 16 ++-- src/commands/promote-6.lua | 10 ++- src/commands/removeRepeatable-2.lua | 3 + src/commands/reprocessJob-6.lua | 2 +- src/commands/retryJob-8.lua | 4 +- src/commands/saveStacktrace-1.lua | 5 +- src/commands/updateData-1.lua | 8 +- src/commands/updateProgress-2.lua | 8 +- tests/test_clean.ts | 10 ++- 20 files changed, 128 insertions(+), 104 deletions(-) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index 00613c7c57..10d8153d2a 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,10 @@ +## [5.2.4](https://github.com/taskforcesh/bullmq-pro/compare/v5.2.3...v5.2.4) (2023-05-16) + + +### Bug Fixes + +* **rate-limit:** consider groups when global dynamic rate limit ([#145](https://github.com/taskforcesh/bullmq-pro/issues/145)) ([6f5d1e3](https://github.com/taskforcesh/bullmq-pro/commit/6f5d1e3014824149d1c857b79587bd5fd01f9bba)) + ## [5.2.3](https://github.com/taskforcesh/bullmq-pro/compare/v5.2.2...v5.2.3) (2023-05-09) diff --git a/src/classes/job.ts b/src/classes/job.ts index 0779275dfa..b514921cfb 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -960,7 +960,7 @@ export class Job< ]; const finished = status != 0; if (finished) { - if (status == -5 || status == 2) { + if (status == -1 || status == 2) { onFailed({ failedReason: result }); } else { onCompleted({ returnvalue: getReturnValue(result) }); diff --git a/src/commands/addJob-8.lua b/src/commands/addJob-8.lua index ab2aad7b78..2b6c7191db 100644 --- a/src/commands/addJob-8.lua +++ b/src/commands/addJob-8.lua @@ -101,7 +101,7 @@ else rcall("XADD", KEYS[8], "*", "event", "duplicated", "jobId", jobId) return jobId .. "" -- convert to string - end + end end -- Store the job. @@ -150,7 +150,7 @@ else -- Standard or priority add if priority == 0 then -- LIFO or FIFO - local pushCmd = opts['lifo'] and 'RPUSH' or 'LPUSH'; + local pushCmd = opts['lifo'] and 'RPUSH' or 'LPUSH' rcall(pushCmd, target, jobId) else -- Priority add diff --git a/src/commands/changeDelay-3.lua b/src/commands/changeDelay-3.lua index c469718500..6cf305e8a2 100644 --- a/src/commands/changeDelay-3.lua +++ b/src/commands/changeDelay-3.lua @@ -19,21 +19,20 @@ local rcall = redis.call if rcall("EXISTS", KEYS[2]) == 1 then - local jobId = ARGV[3] local score = tonumber(ARGV[2]) local delayedTimestamp = (score / 0x1000) local numRemovedElements = rcall("ZREM", KEYS[1], jobId) - if (numRemovedElements < 1) then + if numRemovedElements < 1 then return -3 end rcall("HSET", KEYS[2], "delay", tonumber(ARGV[1])) rcall("ZADD", KEYS[1], score, jobId) - rcall("XADD", KEYS[3], "*", "event", "delayed", "jobId", jobId, "delay", delayedTimestamp); + rcall("XADD", KEYS[3], "*", "event", "delayed", "jobId", jobId, "delay", delayedTimestamp) return 0 else diff --git a/src/commands/getRanges-1.lua b/src/commands/getRanges-1.lua index 84e4dd2c2c..4f7b0823b5 100644 --- a/src/commands/getRanges-1.lua +++ b/src/commands/getRanges-1.lua @@ -9,7 +9,7 @@ ARGV[3] asc ARGV[4...] types ]] -local rcall = redis.call; +local rcall = redis.call local prefix = KEYS[1] local rangeStart = tonumber(ARGV[1]) local rangeEnd = tonumber(ARGV[2]) diff --git a/src/commands/includes/cleanSet.lua b/src/commands/includes/cleanSet.lua index 6d2cdb44a7..1d25d77121 100644 --- a/src/commands/includes/cleanSet.lua +++ b/src/commands/includes/cleanSet.lua @@ -29,7 +29,7 @@ local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, l if limit > 0 and deletedCount >= limit then break end - + local jobKey = jobKeyPrefix .. job -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed jobTS = getTimestamp(jobKey, attributes) @@ -45,6 +45,6 @@ local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, l rcall("ZREM", setKey, unpack(deleted, from, to)) end end - + return {deleted, deletedCount} end diff --git a/src/commands/includes/getRateLimitTTL.lua b/src/commands/includes/getRateLimitTTL.lua index 3544694743..8a74d56786 100644 --- a/src/commands/includes/getRateLimitTTL.lua +++ b/src/commands/includes/getRateLimitTTL.lua @@ -5,7 +5,7 @@ local function getRateLimitTTL(opts, limiterKey) if jobCounter ~= nil and jobCounter >= maxJobs then local pttl = rcall("PTTL", limiterKey) if pttl > 0 then - return pttl + return pttl end end end diff --git a/src/commands/includes/updateParentDepsIfNeeded.lua b/src/commands/includes/updateParentDepsIfNeeded.lua index 31b01811bc..144e35ea33 100644 --- a/src/commands/includes/updateParentDepsIfNeeded.lua +++ b/src/commands/includes/updateParentDepsIfNeeded.lua @@ -5,7 +5,6 @@ -- Includes --- @include "addDelayMarkerIfNeeded" --- @include "addJobWithPriority" ---- @include "getNextDelayedTimestamp" --- @include "getTargetQueueList" local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey, diff --git a/src/commands/isFinished-3.lua b/src/commands/isFinished-3.lua index 346b23abb0..4859d7f6b5 100644 --- a/src/commands/isFinished-3.lua +++ b/src/commands/isFinished-3.lua @@ -12,15 +12,15 @@ 0 - Not finished. 1 - Completed. 2 - Failed. - -5 - Missing job. + -1 - Missing job. ]] local rcall = redis.call if rcall("EXISTS", KEYS[3]) ~= 1 then if ARGV[2] == "1" then - return {-5,"Missing key for job " .. KEYS[3] .. ". isFinished"} + return {-1,"Missing key for job " .. KEYS[3] .. ". isFinished"} end - return -5 + return -1 end if rcall("ZSCORE", KEYS[1], ARGV[1]) ~= false then diff --git a/src/commands/moveToActive-9.lua b/src/commands/moveToActive-9.lua index 943a3ef350..61e9b7453f 100644 --- a/src/commands/moveToActive-9.lua +++ b/src/commands/moveToActive-9.lua @@ -7,29 +7,29 @@ so that no other worker picks this job again. Input: - KEYS[1] wait key - KEYS[2] active key - KEYS[3] priority key - KEYS[4] stream events key - KEYS[5] stalled key + KEYS[1] wait key + KEYS[2] active key + KEYS[3] priority key + KEYS[4] stream events key + KEYS[5] stalled key - -- Rate limiting - KEYS[6] rate limiter key - KEYS[7] delayed key + -- Rate limiting + KEYS[6] rate limiter key + KEYS[7] delayed key - -- Promote delayed jobs - KEYS[8] paused key - KEYS[9] meta key + -- Promote delayed jobs + KEYS[8] paused key + KEYS[9] meta key - -- Arguments - ARGV[1] key prefix - ARGV[2] timestamp - ARGV[3] optional job ID - ARGV[4] opts + -- Arguments + ARGV[1] key prefix + ARGV[2] timestamp + ARGV[3] optional job ID + ARGV[4] opts - opts - token - lock token - opts - lockDuration - opts - limiter + opts - token - lock token + opts - lockDuration + opts - limiter ]] local jobId local rcall = redis.call @@ -45,39 +45,39 @@ promoteDelayedJobs(KEYS[7], KEYS[1], KEYS[3], KEYS[8], KEYS[9], KEYS[4], ARGV[1] local opts if (ARGV[3] ~= "") then - jobId = ARGV[3] - -- clean stalled key - rcall("SREM", KEYS[5], jobId) + jobId = ARGV[3] + -- clean stalled key + rcall("SREM", KEYS[5], jobId) else - -- Check if we are rate limited first. - opts = cmsgpack.unpack(ARGV[4]) - local pttl = getRateLimitTTL(opts, KEYS[6]) - if pttl > 0 then - return { 0, 0, pttl } - end + -- Check if we are rate limited first. + opts = cmsgpack.unpack(ARGV[4]) + local pttl = getRateLimitTTL(opts, KEYS[6]) + if pttl > 0 then + return { 0, 0, pttl } + end - -- no job ID, try non-blocking move from wait to active - jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) + -- no job ID, try non-blocking move from wait to active + jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) end -- If jobId is special ID 0:delay, then there is no job to process -if jobId then - if string.sub(jobId, 1, 2) == "0:" then - rcall("LREM", KEYS[2], 1, jobId) - -- Move again since we just got the marker job. - jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) +if jobId then + if string.sub(jobId, 1, 2) == "0:" then + rcall("LREM", KEYS[2], 1, jobId) + -- Move again since we just got the marker job. + jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) - if jobId and string.sub(jobId, 1, 2) == "0:" then - rcall("LREM", KEYS[2], 1, jobId) - jobId = nil - end + if jobId and string.sub(jobId, 1, 2) == "0:" then + rcall("LREM", KEYS[2], 1, jobId) + jobId = nil end + end - if jobId then - opts = opts or cmsgpack.unpack(ARGV[4]) - -- this script is not really moving, it is preparing the job for processing - return moveJobFromWaitToActive(KEYS, ARGV[1], jobId, ARGV[2], opts) - end + if jobId then + opts = opts or cmsgpack.unpack(ARGV[4]) + -- this script is not really moving, it is preparing the job for processing + return moveJobFromWaitToActive(KEYS, ARGV[1], jobId, ARGV[2], opts) + end end -- Return the timestamp for the next delayed job if any. diff --git a/src/commands/moveToDelayed-8.lua b/src/commands/moveToDelayed-8.lua index d07d333e82..c9a89ae58a 100644 --- a/src/commands/moveToDelayed-8.lua +++ b/src/commands/moveToDelayed-8.lua @@ -35,34 +35,33 @@ local rcall = redis.call local jobKey = KEYS[5] if rcall("EXISTS", jobKey) == 1 then - - local delayedKey = KEYS[4] - if ARGV[5] ~= "0" then - local lockKey = jobKey .. ':lock' - if rcall("GET", lockKey) == ARGV[5] then - rcall("DEL", lockKey) - else - return -2 - end + local delayedKey = KEYS[4] + if ARGV[5] ~= "0" then + local lockKey = jobKey .. ':lock' + if rcall("GET", lockKey) == ARGV[5] then + rcall("DEL", lockKey) + else + return -2 end + end - local jobId = ARGV[4] - local score = tonumber(ARGV[3]) - local delayedTimestamp = (score / 0x1000) + local jobId = ARGV[4] + local score = tonumber(ARGV[3]) + local delayedTimestamp = (score / 0x1000) - local numRemovedElements = rcall("LREM", KEYS[2], -1, jobId) - if (numRemovedElements < 1) then - return -3 - end + local numRemovedElements = rcall("LREM", KEYS[2], -1, jobId) + if numRemovedElements < 1 then + return -3 + end - rcall("ZADD", delayedKey, score, jobId) - rcall("XADD", KEYS[6], "*", "event", "delayed", "jobId", jobId, "delay", delayedTimestamp) + rcall("ZADD", delayedKey, score, jobId) + rcall("XADD", KEYS[6], "*", "event", "delayed", "jobId", jobId, "delay", delayedTimestamp) - -- Check if we need to push a marker job to wake up sleeping workers. - local target = getTargetQueueList(KEYS[8], KEYS[1], KEYS[7]) - addDelayMarkerIfNeeded(target, delayedKey) + -- Check if we need to push a marker job to wake up sleeping workers. + local target = getTargetQueueList(KEYS[8], KEYS[1], KEYS[7]) + addDelayMarkerIfNeeded(target, delayedKey) - return 0 + return 0 else - return -1 + return -1 end diff --git a/src/commands/pause-4.lua b/src/commands/pause-4.lua index f0aa34f5cc..32b2101b20 100644 --- a/src/commands/pause-4.lua +++ b/src/commands/pause-4.lua @@ -1,16 +1,16 @@ --[[ Pauses or resumes a queue globably. - Input: - KEYS[1] 'wait' or 'paused'' - KEYS[2] 'paused' or 'wait' - KEYS[3] 'meta' - KEYS[4] events stream key + Input: + KEYS[1] 'wait' or 'paused'' + KEYS[2] 'paused' or 'wait' + KEYS[3] 'meta' + KEYS[4] events stream key - ARGV[1] 'paused' or 'resumed' + ARGV[1] 'paused' or 'resumed' - Event: - publish paused or resumed event. + Event: + publish paused or resumed event. ]] local rcall = redis.call diff --git a/src/commands/promote-6.lua b/src/commands/promote-6.lua index 09e4854f76..0a371ad394 100644 --- a/src/commands/promote-6.lua +++ b/src/commands/promote-6.lua @@ -1,7 +1,7 @@ --[[ Promotes a job that is currently "delayed" to the "waiting" state - Input: + Input: KEYS[1] 'delayed' KEYS[2] 'wait' KEYS[3] 'paused' @@ -12,10 +12,14 @@ ARGV[1] queue.toKey('') ARGV[2] jobId - Events: + Output: + 0 - OK + -3 - Job not in delayed zset. + + Events: 'waiting' ]] -local rcall = redis.call; +local rcall = redis.call local jobId = ARGV[2] -- Includes diff --git a/src/commands/removeRepeatable-2.lua b/src/commands/removeRepeatable-2.lua index faf5569c32..e69ca8fb25 100644 --- a/src/commands/removeRepeatable-2.lua +++ b/src/commands/removeRepeatable-2.lua @@ -12,6 +12,9 @@ Output: 0 - OK 1 - Missing repeat job + + Events: + 'removed' ]] local rcall = redis.call local millis = rcall("ZSCORE", KEYS[1], ARGV[2]) diff --git a/src/commands/reprocessJob-6.lua b/src/commands/reprocessJob-6.lua index 22991cc970..90f13be0f5 100644 --- a/src/commands/reprocessJob-6.lua +++ b/src/commands/reprocessJob-6.lua @@ -15,7 +15,7 @@ ARGV[4] prev state - failed/completed Output: - 1 means the operation was a success + 1 means the operation was a success -1 means the job does not exist -3 means the job was not found in the expected set. ]] diff --git a/src/commands/retryJob-8.lua b/src/commands/retryJob-8.lua index 458a6fabbe..38de37245e 100644 --- a/src/commands/retryJob-8.lua +++ b/src/commands/retryJob-8.lua @@ -50,8 +50,8 @@ if rcall("EXISTS", KEYS[4]) == 1 then rcall(ARGV[3], target, ARGV[4]) -- Emit waiting event - rcall("XADD", KEYS[6], "*", "event", "waiting", "jobId", ARGV[4], "prev", "failed"); - + rcall("XADD", KEYS[6], "*", "event", "waiting", "jobId", ARGV[4], "prev", "failed") + return 0 else return -1 diff --git a/src/commands/saveStacktrace-1.lua b/src/commands/saveStacktrace-1.lua index ac2e13922b..216e295a59 100644 --- a/src/commands/saveStacktrace-1.lua +++ b/src/commands/saveStacktrace-1.lua @@ -8,15 +8,14 @@ ARGV[2] failedReason Output: - 0 - OK + 0 - OK -1 - Missing key ]] local rcall = redis.call if rcall("EXISTS", KEYS[1]) == 1 then - rcall("HMSET", KEYS[1], "stacktrace", ARGV[1], "failedReason", ARGV[2]) - + return 0 else return -1 diff --git a/src/commands/updateData-1.lua b/src/commands/updateData-1.lua index 130b6e565b..7e57bf87b7 100644 --- a/src/commands/updateData-1.lua +++ b/src/commands/updateData-1.lua @@ -3,8 +3,12 @@ Input: KEYS[1] Job id key - - ARGV[1] data + + ARGV[1] data + + Output: + 0 - OK + -1 - Missing job. ]] local rcall = redis.call diff --git a/src/commands/updateProgress-2.lua b/src/commands/updateProgress-2.lua index 7c5f136e2d..ac6a83f052 100644 --- a/src/commands/updateProgress-2.lua +++ b/src/commands/updateProgress-2.lua @@ -4,10 +4,14 @@ Input: KEYS[1] Job id key KEYS[2] event stream key - + ARGV[1] id ARGV[2] progress - + + Output: + 0 - OK + -1 - Missing job. + Event: progress(jobId, progress) ]] diff --git a/tests/test_clean.ts b/tests/test_clean.ts index 508d4cb243..63997b3f53 100644 --- a/tests/test_clean.ts +++ b/tests/test_clean.ts @@ -49,7 +49,13 @@ describe('Cleaner', () => { }); it('should clean two jobs from the queue', async () => { - const worker = new Worker(queueName, async () => {}, { connection }); + const worker = new Worker( + queueName, + async () => { + await delay(10); + }, + { connection }, + ); await worker.waitUntilReady(); const completing = new Promise(resolve => { @@ -67,7 +73,7 @@ describe('Cleaner', () => { ]); await completing; - await delay(1); + await delay(10); const jobs = await queue.clean(0, 0); expect(jobs.length).to.be.eql(2); From b60062445a5b1f918e5a62d04576c8cac96719dc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 May 2023 09:38:36 -0500 Subject: [PATCH 061/322] chore(deps): update coverallsapp/github-action digest to 059e56d (#1907) --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ad3a555dbb..2435ed7e58 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,7 +43,7 @@ jobs: - run: yarn coverage - name: Upload LCOV to Coveralls if: ${{ ( github.event_name == 'pull_request' && github.event.pull_request.head.fork == false ) || github.event_name == 'push' }} - uses: coverallsapp/github-action@09b709cf6a16e30b0808ba050c7a6e8a5ef13f8d # branch=master + uses: coverallsapp/github-action@059e56d143348431aafb4917fc9843532d0b6ac5 # branch=master with: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Check coverage change not below threshold From 5d8f57fc1b967fe33f1cb561bb907c720bf4a286 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Fri, 19 May 2023 00:18:46 +0200 Subject: [PATCH 062/322] chore(python): bump to version 0.4.0 --- python/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/setup.py b/python/setup.py index ca016cdbd1..54eec6fd7a 100644 --- a/python/setup.py +++ b/python/setup.py @@ -10,7 +10,7 @@ setup( name='bullmq', - version='0.3.0', + version='0.4.0', description='BullMQ for Python', long_description=long_description, long_description_content_type="text/markdown", From d3673a1b79dbb1629d0b19f3fd9abcfdb32b32e0 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 20:19:28 -0500 Subject: [PATCH 063/322] ci(python): try to save commit message for python action --- .github/workflows/release.yml | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9aa0c99d39..e05ca939e4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,6 +13,8 @@ jobs: contents: write # for release publishing name: Release + env: + commitmsg: ${{ github.event.head_commit.message }} runs-on: ubuntu-latest steps: - name: Checkout repository @@ -24,10 +26,32 @@ jobs: with: node-version: lts/* cache: 'yarn' - - name: Install dependencies + - name: Install dependencies Node run: yarn install --frozen-lockfile --non-interactive - - name: Release + - name: Release Node env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: npx semantic-release + - run: yarn copy:lua:python + - name: Setup Python + uses: actions/setup-python@@57ded4d7d5e986d7296eab16560982c6dd7c923b # v4 + with: + python-version: '3.10' + cache: 'pip' + - name: Install dependencies Python + run: | + python -m pip install --upgrade pip + pip install flake8 mypy types-redis + pip install -r python/requirements.txt + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 ./python --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + cd python + - name: Release Python + if: startsWith($commitmsg, 'ci') + run: | + echo Commit MSG = $commitmsg From 3bf5e8dec40c40fd46a3f5fe551e7992804a51df Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 20:48:35 -0500 Subject: [PATCH 064/322] ci(python): delete Release Python step --- .github/workflows/release.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e05ca939e4..36b0c19acf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,7 +51,3 @@ jobs: # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics cd python - - name: Release Python - if: startsWith($commitmsg, 'ci') - run: | - echo Commit MSG = $commitmsg From 2441eaf8ea52d12b1cf645051be5592e48a8e855 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 20:52:56 -0500 Subject: [PATCH 065/322] ci(python): delete commitmsg variable --- .github/workflows/release.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 36b0c19acf..63a4fc3ace 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,8 +13,6 @@ jobs: contents: write # for release publishing name: Release - env: - commitmsg: ${{ github.event.head_commit.message }} runs-on: ubuntu-latest steps: - name: Checkout repository From e94bd835dc798ea60fcf4ce7942542f12cf42ed8 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 20:54:37 -0500 Subject: [PATCH 066/322] ci(python): delete flake8 step --- .github/workflows/release.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 63a4fc3ace..e899845237 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,10 +42,3 @@ jobs: python -m pip install --upgrade pip pip install flake8 mypy types-redis pip install -r python/requirements.txt - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 ./python --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - cd python From 8d03ba1daf5008fff8d6689ec5e335b25b9fbe2b Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 20:56:23 -0500 Subject: [PATCH 067/322] ci(python): delete install dependencies python step --- .github/workflows/release.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e899845237..7684137d3b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,8 +37,3 @@ jobs: with: python-version: '3.10' cache: 'pip' - - name: Install dependencies Python - run: | - python -m pip install --upgrade pip - pip install flake8 mypy types-redis - pip install -r python/requirements.txt From 23c6207db9be71aef1827737a461b43c39eb05e8 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 20:57:53 -0500 Subject: [PATCH 068/322] ci(python): remove setup python --- .github/workflows/release.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7684137d3b..bae3b8e729 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,8 +32,3 @@ jobs: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: npx semantic-release - run: yarn copy:lua:python - - name: Setup Python - uses: actions/setup-python@@57ded4d7d5e986d7296eab16560982c6dd7c923b # v4 - with: - python-version: '3.10' - cache: 'pip' From 980796c9540e4603907e49b095bbd3b328aec29f Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 21:01:02 -0500 Subject: [PATCH 069/322] ci(python): retry setup python --- .github/workflows/release.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bae3b8e729..8bcab00606 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,3 +32,7 @@ jobs: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: npx semantic-release - run: yarn copy:lua:python + - name: Setup Python + uses: actions/setup-python@@57ded4d7d5e986d7296eab16560982c6dd7c923b # v4 + with: + python-version: '3.10' From 1261fc487a88ee9df924f275c4eae45e7e8c62ee Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 21:03:03 -0500 Subject: [PATCH 070/322] ci(python): retry install dependencies python --- .github/workflows/release.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8bcab00606..78ad1771af 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,6 +33,12 @@ jobs: run: npx semantic-release - run: yarn copy:lua:python - name: Setup Python - uses: actions/setup-python@@57ded4d7d5e986d7296eab16560982c6dd7c923b # v4 + uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # v4 with: python-version: '3.10' + cache: 'pip' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 mypy types-redis + pip install -r python/requirements.txt From 10191ef0b2e6e578dbf3c5ab243bf1958c6a2383 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 21:04:58 -0500 Subject: [PATCH 071/322] ci(python): retry lint with flake8 python --- .github/workflows/release.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 78ad1771af..b39c281fa1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,6 +13,8 @@ jobs: contents: write # for release publishing name: Release + env: + commitmsg: ${{ github.event.head_commit.message }} runs-on: ubuntu-latest steps: - name: Checkout repository @@ -37,8 +39,15 @@ jobs: with: python-version: '3.10' cache: 'pip' - - name: Install dependencies + - name: Install dependencies Python run: | python -m pip install --upgrade pip pip install flake8 mypy types-redis pip install -r python/requirements.txt + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 ./python --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + cd python From 7510c226a5094ae3042f3d15225708c1e1d83709 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 21:06:40 -0500 Subject: [PATCH 072/322] ci(python): echo commit message --- .github/workflows/release.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b39c281fa1..0b342a26ee 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,3 +51,7 @@ jobs: # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics cd python + - name: Release Python + if: startsWith($commitmsg, 'ci') + run: | + echo Commit MSG = $commitmsg From eb3d1d499b64c07f8385dc6db99370588977f9cf Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 21:12:49 -0500 Subject: [PATCH 073/322] ci(python): fix conditional step by startsWith --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0b342a26ee..18efd74a80 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,6 +52,6 @@ jobs: flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics cd python - name: Release Python - if: startsWith($commitmsg, 'ci') + if: ${{ startsWith($commitmsg, 'ci(python)') }} run: | echo Commit MSG = $commitmsg From 822f7a904e3f91c6b95f9faf40288427d7c20f43 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 18 May 2023 21:14:59 -0500 Subject: [PATCH 074/322] ci(python): fix commitmsg env reference --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 18efd74a80..51124a2a41 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,6 +52,6 @@ jobs: flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics cd python - name: Release Python - if: ${{ startsWith($commitmsg, 'ci(python)') }} + if: ${{ startsWith(env.commitmsg, 'ci(python)') }} run: | echo Commit MSG = $commitmsg From 02594d67e73c0bfe43d0045e8f988beff27d5c0d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 20 May 2023 11:46:15 -0500 Subject: [PATCH 075/322] chore(deps): update dependency tslib to v2.5.2 (#1905) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c621ad5c2e..3727ee4b74 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7226,9 +7226,9 @@ tslib@^1.8.1: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== tsutils@^3.21.0: version "3.21.0" From e08b91b6906e2a3924955f180d431fc18c0c9c18 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Sun, 21 May 2023 18:41:49 -0500 Subject: [PATCH 076/322] test(worker): fix flaky test --- src/commands/moveToActive-9.lua | 4 +++- tests/test_worker.ts | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/commands/moveToActive-9.lua b/src/commands/moveToActive-9.lua index 61e9b7453f..0e066b1eaa 100644 --- a/src/commands/moveToActive-9.lua +++ b/src/commands/moveToActive-9.lua @@ -67,9 +67,11 @@ if jobId then -- Move again since we just got the marker job. jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) + -- Since it is possible that between a call to BRPOPLPUSH and moveToActive + -- another script puts a new maker in wait, we need to check again. if jobId and string.sub(jobId, 1, 2) == "0:" then rcall("LREM", KEYS[2], 1, jobId) - jobId = nil + jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) end end diff --git a/tests/test_worker.ts b/tests/test_worker.ts index 197fdcd8e5..cbe8744932 100644 --- a/tests/test_worker.ts +++ b/tests/test_worker.ts @@ -2070,6 +2070,10 @@ describe('workers', function () { await worker.waitUntilReady(); + const completing = new Promise(resolve => { + worker.on('completed', after(4, resolve)); + }); + await queue.add( 'test', { foo: 'bar' }, @@ -2088,9 +2092,7 @@ describe('workers', function () { await queue.addBulk(jobs); - await new Promise(resolve => { - worker.on('completed', after(4, resolve)); - }); + await completing; await worker.close(); }); From 7b1386bb823562d9666a1ad6e206e1deb63e57ec Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Mon, 22 May 2023 16:19:21 +0200 Subject: [PATCH 077/322] feat(worker): make extendLocks overridable --- src/classes/worker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/classes/worker.ts b/src/classes/worker.ts index ea2d77a5a5..510dd6bc48 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -883,7 +883,7 @@ export class Worker< } while (retry); } - private async extendLocks(jobs: Job[]) { + protected async extendLocks(jobs: Job[]) { try { const multi = (await this.client).multi(); for (const job of jobs) { From 5beaf5285bb06d457dceb7ae636ecefff80ed881 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 22 May 2023 14:27:02 +0000 Subject: [PATCH 078/322] chore(release): 3.14.0 [skip ci] # [3.14.0](https://github.com/taskforcesh/bullmq/compare/v3.13.4...v3.14.0) (2023-05-22) ### Features * **worker:** make extendLocks overridable ([7b1386b](https://github.com/taskforcesh/bullmq/commit/7b1386bb823562d9666a1ad6e206e1deb63e57ec)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 6fb39daa5e..b59ab56dbd 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +# [3.14.0](https://github.com/taskforcesh/bullmq/compare/v3.13.4...v3.14.0) (2023-05-22) + + +### Features + +* **worker:** make extendLocks overridable ([7b1386b](https://github.com/taskforcesh/bullmq/commit/7b1386bb823562d9666a1ad6e206e1deb63e57ec)) + ## [3.13.4](https://github.com/taskforcesh/bullmq/compare/v3.13.3...v3.13.4) (2023-05-11) diff --git a/package.json b/package.json index 6f7dcf1e54..53de80400a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.13.4", + "version": "3.14.0", "description": "Queue for messages and jobs based on Redis", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From 93993844c6d60421a8e39d65875088c2367ca4f9 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Mon, 22 May 2023 20:19:03 +0000 Subject: [PATCH 079/322] GITBOOK-158: change request with no subject merged in GitBook --- ...1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png | Bin 0 -> 18739 bytes docs/gitbook/SUMMARY.md | 1 + docs/gitbook/bullmq-pro/batches.md | 60 ++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png create mode 100644 docs/gitbook/bullmq-pro/batches.md diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png new file mode 100644 index 0000000000000000000000000000000000000000..82bc2ac7e3929d94826db89b05e105be49ce516f GIT binary patch literal 18739 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 K&t;ucLK6U7cus); literal 0 HcmV?d00001 diff --git a/docs/gitbook/SUMMARY.md b/docs/gitbook/SUMMARY.md index 09a9e3e842..66b908a3b1 100644 --- a/docs/gitbook/SUMMARY.md +++ b/docs/gitbook/SUMMARY.md @@ -65,6 +65,7 @@ * [Rate limiting](bullmq-pro/groups/rate-limiting.md) * [Concurrency](bullmq-pro/groups/concurrency.md) * [Pausing groups](bullmq-pro/groups/pausing-groups.md) +* [Batches](bullmq-pro/batches.md) * [NestJs](bullmq-pro/nestjs/README.md) * [Producers](bullmq-pro/nestjs/producers.md) * [API Reference](https://nestjs.bullmq.pro/) diff --git a/docs/gitbook/bullmq-pro/batches.md b/docs/gitbook/bullmq-pro/batches.md new file mode 100644 index 0000000000..4b018e61d3 --- /dev/null +++ b/docs/gitbook/bullmq-pro/batches.md @@ -0,0 +1,60 @@ +--- +description: Processing jobs in batches +--- + +# Batches + +It is possible to configure the workers so that instead of processing one job at a time they can process up to a number of jobs (a so-called batch) in one go. + +Workers using batches have slightly different semantics and behavior than normal workers, so read carefully the following examples to avoid pitfalls. + +In order to enable batches you must pass the batch option with a size representing the maximum amount of jobs per batch: + +```typescript + +const worker = new WorkerPro("My Queue", async (job: JobPro) => { + const batch = job.getBatch(); + + for(let i=0; i { + const batch = job.getBatch(); + + for(let i=0; i Date: Tue, 23 May 2023 06:59:08 +0000 Subject: [PATCH 080/322] GITBOOK-159: change request with no subject merged in GitBook --- .../guide/workers/sandboxed-processors.md | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/guide/workers/sandboxed-processors.md b/docs/gitbook/guide/workers/sandboxed-processors.md index 624876e7da..c9e84f83c6 100644 --- a/docs/gitbook/guide/workers/sandboxed-processors.md +++ b/docs/gitbook/guide/workers/sandboxed-processors.md @@ -1,8 +1,14 @@ +--- +description: Running jobs in isolated processes +--- + # Sandboxed processors -It is also possible to define workers to run on a separate process, we call this processors for sandboxed, because they run isolated from the rest of the code. +It is also possible to define workers to run on a separate process, we call these processors for sandboxed because they run isolated from the rest of the code. + +When your workers perform CPU-heavy operations, they will inevitably keep the NodeJS event loop busy, which prevents BullMQ from doing some job bookkeeping such as extending the job locks, which ultimately leads to "stalled" jobs. -Since these workers run the processor in a different process, they will not result in stalled jobs as easily as standard workers, although it is not completely impossible if the CPUs in the system are so overload that there is no practical time for the worker to perform its bookkeeping to avoid stalling. +Since these workers run the processor in a different process than the bookkeeping code, they will not result in stalled jobs as easily as standard workers. Make sure that you keep your concurrency factor within sane numbers for this not to happen In order to use a sandboxed processor just define the processor in a separate file: @@ -24,3 +30,19 @@ worker = new Worker(queueName, processorFile); ``` If you are looking for a tutorial with code examples on how to use sandboxed processors using typescript you can find one [here](https://blog.taskforce.sh/using-typescript-with-bullmq/). + +### Worker Threads + +The default mechanism for launching sandboxed workers is using Node's spawn process library. From BullMQ version v3.13.0, it is also possible to launch the workers using Node's new Worker Threads library. These threads are supposed to be less resource-demanding than the previous approach, however, they are still not as lightweight as we could expect since Nodes runtime needs to be duplicated by every thread. + +In order to enable worker threads support just use the "`useWorkerThreads`" option when defining an external processor file: + +```typescript +import { Worker } from 'bullmq' + +const processorFile = path.join(__dirname, 'my_procesor.js'); +worker = new Worker(queueName, processorFile, { useWorkerThreads: true }); +``` + + + From 5671b8cf4587a9a254ac4e1c53ae27b13c7d10fe Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Tue, 23 May 2023 08:23:20 +0000 Subject: [PATCH 081/322] GITBOOK-161: change request with no subject merged in GitBook --- docs/gitbook/bullmq-pro/batches.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/bullmq-pro/batches.md b/docs/gitbook/bullmq-pro/batches.md index 4b018e61d3..68e437c251 100644 --- a/docs/gitbook/bullmq-pro/batches.md +++ b/docs/gitbook/bullmq-pro/batches.md @@ -51,9 +51,34 @@ const worker = new WorkerPro("My Queue", async (job: JobPro) => { Only the jobs that are `setAsFailed` will fail, the rest will be moved to complete when the processor for the batch job completes. +### Handling events + +Batches are handled by wrapping all the jobs in a batch into a dummy job that keeps all the jobs in an internal array. This approach simplifies the mechanics of running batches, however, it also affects things like how events are handled. For instance, if you need to listen for individual jobs that have completed or failed you must use global events, as the event handler on the worker instance will only report on the events produced by the wrapper batch job, and not the jobs themselves. + +It is possible to call getBatch to get all the jobs belonging to a given batch. + +```typescript + worker.on('completed', job => { + const batch = job.getBatch();e + }); +``` + +Using a global event listener you can listen to individual job events even though they may be processed in a batch: + +```typescript +import { QueueEventsPro } from "@taskforcesh/bullmq-pro" + +const queueEvents = new QueueEventsPro(queueName, { connection }); +queueEvents.on('completed', (jobId, err) => { + +}); +``` + + + ### Limitations -Currently, all worker options can be used with the batches, however, there are some unsupported features that may be resolved in the future: +Currently, all worker options can be used with the batches, however, there are some unsupported features that may be implemented in the future: * [Dynamic rate limit](https://docs.bullmq.io/guide/rate-limiting#manual-rate-limit) * [Manually processing jobs](https://docs.bullmq.io/patterns/manually-fetching-jobs) From 84f03c43107af4cc1ee01da448662aa79c0ffdf8 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Tue, 23 May 2023 08:31:59 +0000 Subject: [PATCH 082/322] GITBOOK-162: change request with no subject merged in GitBook --- docs/gitbook/bullmq-pro/batches.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/bullmq-pro/batches.md b/docs/gitbook/bullmq-pro/batches.md index 68e437c251..8267afd75f 100644 --- a/docs/gitbook/bullmq-pro/batches.md +++ b/docs/gitbook/bullmq-pro/batches.md @@ -55,7 +55,7 @@ Only the jobs that are `setAsFailed` will fail, the rest will be moved to comple Batches are handled by wrapping all the jobs in a batch into a dummy job that keeps all the jobs in an internal array. This approach simplifies the mechanics of running batches, however, it also affects things like how events are handled. For instance, if you need to listen for individual jobs that have completed or failed you must use global events, as the event handler on the worker instance will only report on the events produced by the wrapper batch job, and not the jobs themselves. -It is possible to call getBatch to get all the jobs belonging to a given batch. +It is possible, however, to call the getBatch function in order to retrieve all the jobs that belong to a given batch. ```typescript worker.on('completed', job => { @@ -70,7 +70,7 @@ import { QueueEventsPro } from "@taskforcesh/bullmq-pro" const queueEvents = new QueueEventsPro(queueName, { connection }); queueEvents.on('completed', (jobId, err) => { - + // ... }); ``` From b59c2f8bd79f43bcacbac0371710be0cdbc633b2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 22:57:56 +0000 Subject: [PATCH 083/322] chore(deps): update dependency pipenv to v2023.5.19 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index a8303d2809..bbea4de00f 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -3,7 +3,7 @@ certifi==2022.12.7 distlib==0.3.6 filelock==3.12.0 msgpack==1.0.5 -pipenv==2023.4.29 +pipenv==2023.5.19 platformdirs==3.5.1 redis==4.5.5 six==1.16.0 From 8ab2353728a34c91f6b13cf697c10912158d2075 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 22:58:02 +0000 Subject: [PATCH 084/322] chore(deps): update dependency certifi to v2023 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index bbea4de00f..b850addac8 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -1,5 +1,5 @@ async-timeout==4.0.2 -certifi==2022.12.7 +certifi==2023.5.7 distlib==0.3.6 filelock==3.12.0 msgpack==1.0.5 From f0867a679c75555fa764078481252110c1e7377f Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 23 May 2023 07:02:19 -0500 Subject: [PATCH 085/322] feat(python): add getState method (#1906) --- python/bullmq/job.py | 5 ++- python/bullmq/queue.py | 2 +- python/bullmq/redis_connection.py | 17 +++++++++- python/bullmq/scripts.py | 56 +++++++++++++++++++++---------- python/bullmq/utils.py | 4 +++ python/bullmq/worker.py | 2 +- python/requirements.txt | 1 + python/tests/delay_tests.py | 3 +- python/tests/job_tests.py | 13 ++++++- python/tests/queue_tests.py | 3 +- python/tests/worker_tests.py | 4 +-- 11 files changed, 83 insertions(+), 27 deletions(-) create mode 100644 python/bullmq/utils.py diff --git a/python/bullmq/job.py b/python/bullmq/job.py index ff84691924..e1ff5a8863 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -49,7 +49,7 @@ def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): self.failedReason = None self.repeatJobKey = None self.stacktrace: List[str] = [] - self.scripts = Scripts(queue.prefix, queue.name, queue.redisConnection.conn) + self.scripts = Scripts(queue.prefix, queue.name, queue.redisConnection) def updateData(self, data): self.data = data @@ -62,6 +62,9 @@ def retry(self, state: str = "failed"): self.returnvalue = None return self.scripts.reprocessJob(self, state) + def getState(self): + return self.scripts.getState(self.id) + def updateProgress(self, progress): self.progress = progress return self.scripts.updateProgress(self.id, progress) diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 7e80e1832d..d2a8a1b3e1 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -19,7 +19,7 @@ def __init__(self, name: str, redisOpts: dict | str = {}, opts: QueueOptions = { self.opts = opts self.prefix = opts.get("prefix", "bull") self.scripts = Scripts( - self.prefix, name, self.redisConnection.conn) + self.prefix, name, self.redisConnection) async def add(self, name: str, data, opts: JobOptions = {}): """ diff --git a/python/bullmq/redis_connection.py b/python/bullmq/redis_connection.py index 9669916ec9..c6097c70ed 100644 --- a/python/bullmq/redis_connection.py +++ b/python/bullmq/redis_connection.py @@ -1,12 +1,16 @@ import redis.asyncio as redis - +import warnings class RedisConnection: """ RedisConnection class """ + minimum_version = '5.0.0' + recommended_minimum_version = '6.2.0' + def __init__(self, redisOpts: dict | str = {}): + self.version = None if isinstance(redisOpts, dict): host = redisOpts.get("host") or "localhost" port = redisOpts.get("port") or 6379 @@ -29,3 +33,14 @@ def close(self): Close the connection """ return self.conn.close() + + async def getRedisVersion(self): + if self.version is not None: + return self.version + + doc = await self.conn.info() + if doc.get("maxmemory_policy") != "noeviction": + warnings.warn(f'IMPORTANT! Eviction policy is {doc.get("maxmemory_policy")}. It should be "noeviction"') + + self.version = doc.get("redis_version") + return doc.get("redis_version") diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 1af46ce606..31add57e9d 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -6,9 +6,11 @@ from __future__ import annotations from redis import Redis from bullmq.error_code import ErrorCode +from bullmq.utils import isRedisVersionLowerThan from typing import Any, TYPE_CHECKING if TYPE_CHECKING: from bullmq.job import Job + from bullmq.redis_connection import RedisConnection import time import json @@ -21,32 +23,35 @@ class Scripts: - def __init__(self, prefix: str, queueName: str, redisClient: Redis): + def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection): self.prefix = prefix self.queueName = queueName self.keys = {} - self.redisClient = redisClient + self.redisConnection = redisConnection + self.redisClient = redisConnection.conn self.commands = { - "addJob": redisClient.register_script(self.getScript("addJob-8.lua")), - "extendLock": redisClient.register_script(self.getScript("extendLock-2.lua")), - "getCounts": redisClient.register_script(self.getScript("getCounts-1.lua")), - "moveToActive": redisClient.register_script(self.getScript("moveToActive-9.lua")), - "moveToDelayed": redisClient.register_script(self.getScript("moveToDelayed-8.lua")), - "moveToFinished": redisClient.register_script(self.getScript("moveToFinished-12.lua")), - "moveStalledJobsToWait": redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), - "pause": redisClient.register_script(self.getScript("pause-4.lua")), - "obliterate": redisClient.register_script(self.getScript("obliterate-2.lua")), - "reprocessJob": redisClient.register_script(self.getScript("reprocessJob-6.lua")), - "retryJob": redisClient.register_script(self.getScript("retryJob-8.lua")), - "retryJobs": redisClient.register_script(self.getScript("retryJobs-6.lua")), - "saveStacktrace": redisClient.register_script(self.getScript("saveStacktrace-1.lua")), - "updateData": redisClient.register_script(self.getScript("updateData-1.lua")), - "updateProgress": redisClient.register_script(self.getScript("updateProgress-2.lua")), + "addJob": self.redisClient.register_script(self.getScript("addJob-8.lua")), + "extendLock": self.redisClient.register_script(self.getScript("extendLock-2.lua")), + "getCounts": self.redisClient.register_script(self.getScript("getCounts-1.lua")), + "getState": self.redisClient.register_script(self.getScript("getState-7.lua")), + "getStateV2": self.redisClient.register_script(self.getScript("getStateV2-7.lua")), + "moveToActive": self.redisClient.register_script(self.getScript("moveToActive-9.lua")), + "moveToDelayed": self.redisClient.register_script(self.getScript("moveToDelayed-8.lua")), + "moveToFinished": self.redisClient.register_script(self.getScript("moveToFinished-12.lua")), + "moveStalledJobsToWait": self.redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), + "pause": self.redisClient.register_script(self.getScript("pause-4.lua")), + "obliterate": self.redisClient.register_script(self.getScript("obliterate-2.lua")), + "reprocessJob": self.redisClient.register_script(self.getScript("reprocessJob-6.lua")), + "retryJob": self.redisClient.register_script(self.getScript("retryJob-8.lua")), + "retryJobs": self.redisClient.register_script(self.getScript("retryJobs-6.lua")), + "saveStacktrace": self.redisClient.register_script(self.getScript("saveStacktrace-1.lua")), + "updateData": self.redisClient.register_script(self.getScript("updateData-1.lua")), + "updateProgress": self.redisClient.register_script(self.getScript("updateProgress-2.lua")), } # loop all the names and add them to the keys object names = ["", "active", "wait", "paused", "completed", "failed", "delayed", - "stalled", "limiter", "priority", "id", "stalled-check", "meta", "events"] + "stalled", "limiter", "priority", "id", "stalled-check", "meta", "events", "waiting-children"] for name in names: self.keys[name] = self.toKey(name) @@ -148,6 +153,21 @@ def getCounts(self, types): return self.commands["getCounts"](keys=keys, args=transformed_types) + async def getState(self, job_id): + keys = self.getKeys(['completed', 'failed', 'delayed', 'active', 'wait', + 'paused', 'waiting-children']) + + args = [job_id] + + redis_version = await self.redisConnection.getRedisVersion() + + if isRedisVersionLowerThan(redis_version, '6.0.6'): + result = await self.commands["getState"](keys=keys, args=args) + return result + + result = await self.commands["getStateV2"](keys=keys, args=args) + return result + async def updateData(self, job_id: str, data): keys = [self.toKey(job_id)] data_json = json.dumps(data, separators=(',', ':')) diff --git a/python/bullmq/utils.py b/python/bullmq/utils.py new file mode 100644 index 0000000000..0e89477ecf --- /dev/null +++ b/python/bullmq/utils.py @@ -0,0 +1,4 @@ +import semver + +def isRedisVersionLowerThan(current_version, minimum_version): + return semver.compare(current_version, minimum_version) == -1 diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index e13d515f19..abb84043a6 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -30,7 +30,7 @@ def __init__(self, name: str, processor: Callable[[Job, str], asyncio.Future], o self.client = self.redisConnection.conn self.bclient = self.blockingRedisConnection.conn self.prefix = opts.get("prefix", "bull") - self.scripts = Scripts(opts.get("prefix", "bull"), name, self.client) + self.scripts = Scripts(opts.get("prefix", "bull"), name, self.redisConnection) self.closing = False self.forceClosing = False self.closed = False diff --git a/python/requirements.txt b/python/requirements.txt index b850addac8..14676afe63 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -6,6 +6,7 @@ msgpack==1.0.5 pipenv==2023.5.19 platformdirs==3.5.1 redis==4.5.5 +semver==3.0.0 six==1.16.0 virtualenv==20.23.0 virtualenv-clone==0.5.7 diff --git a/python/tests/delay_tests.py b/python/tests/delay_tests.py index 9c406b7e50..2dcf860cca 100644 --- a/python/tests/delay_tests.py +++ b/python/tests/delay_tests.py @@ -9,8 +9,9 @@ from asyncio import Future from bullmq import Queue, Job, Worker +from uuid import uuid4 -queueName = "__bullmq_test_queue__" +queueName = f"__test_queue__{uuid4().hex}" class TestJob(unittest.IsolatedAsyncioTestCase): diff --git a/python/tests/job_tests.py b/python/tests/job_tests.py index 4c7065ce09..c853c6f975 100644 --- a/python/tests/job_tests.py +++ b/python/tests/job_tests.py @@ -7,8 +7,9 @@ import unittest from bullmq import Queue, Job +from uuid import uuid4 -queueName = "__bullmq_test_queue__" +queueName = f"__test_queue__{uuid4().hex}" class TestJob(unittest.IsolatedAsyncioTestCase): @@ -38,5 +39,15 @@ async def test_set_and_get_progress_as_object(self): await queue.close() + async def test_get_job_state(self): + queue = Queue(queueName) + job = await queue.add("test-job", {"foo": "bar"}, {}) + state = await job.getState() + + print(state) + self.assertEqual(state, "waiting") + + await queue.close() + if __name__ == '__main__': unittest.main() diff --git a/python/tests/queue_tests.py b/python/tests/queue_tests.py index 20fe37c4b9..03eaceacf5 100644 --- a/python/tests/queue_tests.py +++ b/python/tests/queue_tests.py @@ -6,12 +6,13 @@ from asyncio import Future from bullmq import Queue, Worker, Job +from uuid import uuid4 import asyncio import unittest import time -queueName = "__bullmq_test_queue__" +queueName = f"__test_queue__{uuid4().hex}" class TestQueue(unittest.IsolatedAsyncioTestCase): diff --git a/python/tests/worker_tests.py b/python/tests/worker_tests.py index d1b005f66b..2999bfca3e 100644 --- a/python/tests/worker_tests.py +++ b/python/tests/worker_tests.py @@ -6,13 +6,13 @@ from asyncio import Future from bullmq import Queue, Worker, Job +from uuid import uuid4 import asyncio import unittest import time -queueName = "__test_queue__" - +queueName = f"__test_queue__{uuid4().hex}" class TestWorker(unittest.IsolatedAsyncioTestCase): From 864b5e56afb1fb1a92f41d06b155529f8f701838 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 23 May 2023 22:12:42 -0500 Subject: [PATCH 086/322] docs(events): add listener api references (#1913) --- docs/gitbook/guide/events.md | 3 +++ tests/test_repeat.ts | 14 +++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/gitbook/guide/events.md b/docs/gitbook/guide/events.md index 736834aabc..13fbbfa276 100644 --- a/docs/gitbook/guide/events.md +++ b/docs/gitbook/guide/events.md @@ -57,3 +57,6 @@ The event stream is auto-trimmed so that its size does not grow too much, by def ## Read more: * 💡 [Queue Events API Reference](https://api.docs.bullmq.io/classes/QueueEvents.html) +* 💡 [Queue Events Listener API Reference](https://api.docs.bullmq.io/interfaces/QueueEventsListener.html) +* 💡 [Queue Listener API Reference](https://api.docs.bullmq.io/interfaces/QueueListener.html) +* 💡 [Worker Listener API Reference](https://api.docs.bullmq.io/interfaces/WorkerListener.html) diff --git a/tests/test_repeat.ts b/tests/test_repeat.ts index c88c598199..eb5a6ac18e 100644 --- a/tests/test_repeat.ts +++ b/tests/test_repeat.ts @@ -931,13 +931,6 @@ describe('repeat', function () { ); const delayStub = sinon.stub(worker, 'delay').callsFake(async () => {}); - await queue.add( - 'repeat', - { foo: 'bar' }, - { repeat: { pattern: '* 25 9 7 * *' } }, - ); - nextTick(); - let counter = 10; let prev: Job; const completing = new Promise((resolve, reject) => { @@ -966,6 +959,13 @@ describe('repeat', function () { worker.run(); + await queue.add( + 'repeat', + { foo: 'bar' }, + { repeat: { pattern: '* 25 9 7 * *' } }, + ); + nextTick(); + await completing; await worker.close(); delayStub.restore(); From b2d79cdee63152b85228b5002f60c82127b9e630 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 24 May 2023 23:42:19 -0500 Subject: [PATCH 087/322] test(job): do not save stacktrace when job key is missing (#1918) ref #1914 --- src/classes/worker.ts | 2 +- tests/test_job.ts | 26 ++++++++++++++++++++++++++ tests/test_repeat.ts | 2 +- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/classes/worker.ts b/src/classes/worker.ts index 510dd6bc48..80c5ac489e 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -192,7 +192,7 @@ export class Worker< constructor( name: string, - processor?: string | Processor, + processor?: string | null | Processor, opts: WorkerOptions = {}, Connection?: typeof RedisConnection, ) { diff --git a/tests/test_job.ts b/tests/test_job.ts index 1049374240..7804a5fc87 100644 --- a/tests/test_job.ts +++ b/tests/test_job.ts @@ -598,6 +598,32 @@ describe('Job', function () { await queueEvents.close(); }); + describe('when job is removed', function () { + it('should not save stacktrace', async function () { + const client = await queue.client; + const worker = new Worker(queueName, null, { + connection, + lockDuration: 100, + skipLockRenewal: true, + }); + const token = 'my-token'; + await Job.create(queue, 'test', { foo: 'bar' }, { attempts: 1 }); + const job = (await worker.getNextJob(token)) as Job; + await delay(100); + await job.remove(); + + await expect( + job.moveToFailed(new Error('test error'), '0'), + ).to.be.rejectedWith(`Missing key for job ${job.id}. failed`); + + const processed = await client.hgetall(`bull:${queueName}:${job.id}`); + + expect(processed).to.deep.equal({}); + + await worker.close(); + }); + }); + describe('when attempts made equal to attempts given', function () { it('marks the job as failed', async function () { const worker = new Worker(queueName, null, { connection }); diff --git a/tests/test_repeat.ts b/tests/test_repeat.ts index eb5a6ac18e..a1d7f76bfd 100644 --- a/tests/test_repeat.ts +++ b/tests/test_repeat.ts @@ -931,7 +931,7 @@ describe('repeat', function () { ); const delayStub = sinon.stub(worker, 'delay').callsFake(async () => {}); - let counter = 10; + let counter = 25; let prev: Job; const completing = new Promise((resolve, reject) => { worker.on('completed', async job => { From 8a7a9ddd793161a8591485ed18a191ece37026a8 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Sat, 27 May 2023 13:32:09 -0500 Subject: [PATCH 088/322] perf(retry-job): get target queue list once (#1921) --- docs/gitbook/bullmq-pro/changelog.md | 28 +++++++++++++++++++ .../includes/addDelayMarkerIfNeeded.lua | 6 ++-- src/commands/includes/promoteDelayedJobs.lua | 13 +++------ src/commands/moveToActive-9.lua | 7 +++-- src/commands/moveToFinished-12.lua | 4 ++- src/commands/retryJob-8.lua | 5 ++-- 6 files changed, 45 insertions(+), 18 deletions(-) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index 10d8153d2a..c59c8a081c 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,31 @@ +## [5.3.2](https://github.com/taskforcesh/bullmq-pro/compare/v5.3.1...v5.3.2) (2023-05-24) + + +### Bug Fixes + +* **job-pro:** use saveStacktrace script ([#150](https://github.com/taskforcesh/bullmq-pro/issues/150)) ([146d9a9](https://github.com/taskforcesh/bullmq-pro/commit/146d9a9596387026e842ab63f13212f7ed66c2c9)) + +## [5.3.1](https://github.com/taskforcesh/bullmq-pro/compare/v5.3.0...v5.3.1) (2023-05-23) + + +### Bug Fixes + +* **remove-job:** considera decreasing group concurrency ([#149](https://github.com/taskforcesh/bullmq-pro/issues/149)) ([25068e2](https://github.com/taskforcesh/bullmq-pro/commit/25068e243f993e6a22531bb8d2c6c60ffba36b9b)) + +# [5.3.0](https://github.com/taskforcesh/bullmq-pro/compare/v5.2.5...v5.3.0) (2023-05-23) + + +### Features + +* add support for job batches ([1db0c94](https://github.com/taskforcesh/bullmq-pro/commit/1db0c9436461262b3393628d3eff2191cc3247a2)) + +## [5.2.5](https://github.com/taskforcesh/bullmq-pro/compare/v5.2.4...v5.2.5) (2023-05-20) + + +### Bug Fixes + +* **retry-job:** consider promoting delayed jobs ([#147](https://github.com/taskforcesh/bullmq-pro/issues/147)) ([3efd39e](https://github.com/taskforcesh/bullmq-pro/commit/3efd39eb2552d852b916f974fc16fab6768434c5)) + ## [5.2.4](https://github.com/taskforcesh/bullmq-pro/compare/v5.2.3...v5.2.4) (2023-05-16) diff --git a/src/commands/includes/addDelayMarkerIfNeeded.lua b/src/commands/includes/addDelayMarkerIfNeeded.lua index d507791c88..1abbe05ae3 100644 --- a/src/commands/includes/addDelayMarkerIfNeeded.lua +++ b/src/commands/includes/addDelayMarkerIfNeeded.lua @@ -5,11 +5,11 @@ -- Includes --- @include "getNextDelayedTimestamp" -local function addDelayMarkerIfNeeded(target, delayedKey) - if rcall("LLEN", target) == 0 then +local function addDelayMarkerIfNeeded(targetKey, delayedKey) + if rcall("LLEN", targetKey) == 0 then local nextTimestamp = getNextDelayedTimestamp(delayedKey) if nextTimestamp ~= nil then - rcall("LPUSH", target, "0:" .. nextTimestamp) + rcall("LPUSH", targetKey, "0:" .. nextTimestamp) end end end diff --git a/src/commands/includes/promoteDelayedJobs.lua b/src/commands/includes/promoteDelayedJobs.lua index 18219f8469..db595079b6 100644 --- a/src/commands/includes/promoteDelayedJobs.lua +++ b/src/commands/includes/promoteDelayedJobs.lua @@ -5,32 +5,27 @@ Events: 'waiting' ]] -local rcall = redis.call -- Includes --- @include "addJobWithPriority" ---- @include "getTargetQueueList" -- Try to get as much as 1000 jobs at once -local function promoteDelayedJobs(delayedKey, waitKey, priorityKey, pausedKey, - metaKey, eventStreamKey, prefix, timestamp) +local function promoteDelayedJobs(delayedKey, targetKey, priorityKey, + eventStreamKey, prefix, timestamp) local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000, "LIMIT", 0, 1000) if (#jobs > 0) then rcall("ZREM", delayedKey, unpack(jobs)) - -- check if we need to use push in paused instead of waiting - local target = getTargetQueueList(metaKey, waitKey, pausedKey) - for _, jobId in ipairs(jobs) do local priority = tonumber(rcall("HGET", prefix .. jobId, "priority")) or 0 if priority == 0 then -- LIFO or FIFO - rcall("LPUSH", target, jobId) + rcall("LPUSH", targetKey, jobId) else - addJobWithPriority(priorityKey, priority, target, jobId) + addJobWithPriority(priorityKey, priority, targetKey, jobId) end -- Emit waiting event diff --git a/src/commands/moveToActive-9.lua b/src/commands/moveToActive-9.lua index 0e066b1eaa..3e9e905799 100644 --- a/src/commands/moveToActive-9.lua +++ b/src/commands/moveToActive-9.lua @@ -37,11 +37,14 @@ local rcall = redis.call -- Includes --- @include "includes/moveJobFromWaitToActive" --- @include "includes/getNextDelayedTimestamp" ---- @include "includes/promoteDelayedJobs" --- @include "includes/getRateLimitTTL" +--- @include "includes/getTargetQueueList" +--- @include "includes/promoteDelayedJobs" + +local target = getTargetQueueList(KEYS[9], KEYS[1], KEYS[8]) -- Check if there are delayed jobs that we can move to wait. -promoteDelayedJobs(KEYS[7], KEYS[1], KEYS[3], KEYS[8], KEYS[9], KEYS[4], ARGV[1], ARGV[2]) +promoteDelayedJobs(KEYS[7], target, KEYS[3], KEYS[4], ARGV[1], ARGV[2]) local opts if (ARGV[3] ~= "") then diff --git a/src/commands/moveToFinished-12.lua b/src/commands/moveToFinished-12.lua index 1eff1c35b4..a13cd36113 100644 --- a/src/commands/moveToFinished-12.lua +++ b/src/commands/moveToFinished-12.lua @@ -186,8 +186,10 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists -- and not rate limited. if (ARGV[7] == "1") then + local target = getTargetQueueList(KEYS[11], KEYS[1], KEYS[8]) + -- Check if there are delayed jobs that can be promoted - promoteDelayedJobs(KEYS[7], KEYS[1], KEYS[3], KEYS[8], KEYS[11], + promoteDelayedJobs(KEYS[7], target, KEYS[3], KEYS[4], ARGV[8], timestamp) -- Check if we are rate limited first. diff --git a/src/commands/retryJob-8.lua b/src/commands/retryJob-8.lua index 38de37245e..88b4e05900 100644 --- a/src/commands/retryJob-8.lua +++ b/src/commands/retryJob-8.lua @@ -31,7 +31,8 @@ local rcall = redis.call --- @include "includes/getTargetQueueList" --- @include "includes/promoteDelayedJobs" -promoteDelayedJobs(KEYS[7], KEYS[2], KEYS[8], KEYS[3], KEYS[5], KEYS[6], ARGV[1], ARGV[2]) +local target = getTargetQueueList(KEYS[5], KEYS[2], KEYS[3]) +promoteDelayedJobs(KEYS[7], target, KEYS[8], KEYS[6], ARGV[1], ARGV[2]) if rcall("EXISTS", KEYS[4]) == 1 then @@ -44,8 +45,6 @@ if rcall("EXISTS", KEYS[4]) == 1 then end end - local target = getTargetQueueList(KEYS[5], KEYS[2], KEYS[3]) - rcall("LREM", KEYS[1], 0, ARGV[4]) rcall(ARGV[3], target, ARGV[4]) From 5b1c5e9ccf2b01e2367582bd3214f9abdccea602 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 27 May 2023 18:32:53 +0000 Subject: [PATCH 089/322] chore(release): 3.14.1 [skip ci] ## [3.14.1](https://github.com/taskforcesh/bullmq/compare/v3.14.0...v3.14.1) (2023-05-27) ### Features * **python:** add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) ### Performance Improvements * **retry-job:** get target queue list once ([#1921](https://github.com/taskforcesh/bullmq/issues/1921)) ([8a7a9dd](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) --- docs/gitbook/changelog.md | 12 ++++++++++++ package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index b59ab56dbd..930a205a54 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,15 @@ +## [3.14.1](https://github.com/taskforcesh/bullmq/compare/v3.14.0...v3.14.1) (2023-05-27) + + +### Features + +* **python:** add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) + + +### Performance Improvements + +* **retry-job:** get target queue list once ([#1921](https://github.com/taskforcesh/bullmq/issues/1921)) ([8a7a9dd](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) + # [3.14.0](https://github.com/taskforcesh/bullmq/compare/v3.13.4...v3.14.0) (2023-05-22) diff --git a/package.json b/package.json index 53de80400a..088f23d8cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.14.0", + "version": "3.14.1", "description": "Queue for messages and jobs based on Redis", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", From 7bc4f0bd02cf85be6e3ec9e363657d0260b826d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Todori=C4=87?= <42638763+maretodoric@users.noreply.github.com> Date: Mon, 29 May 2023 09:54:57 +0200 Subject: [PATCH 090/322] chore(python): add missing types to package Include types directory --- python/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/setup.py b/python/setup.py index 54eec6fd7a..c4fc0edde1 100644 --- a/python/setup.py +++ b/python/setup.py @@ -19,7 +19,7 @@ author_email='manast@taskforce.sh', license='MIT', packages=['bullmq'], - package_data={'bullmq': ['commands/*.lua']}, + package_data={'bullmq': ['commands/*.lua', 'types/*']}, install_requires=['redis', 'msgpack', ], From 75096429d7a46d1f7babccdd4914f707eac32770 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Mon, 29 May 2023 10:05:06 +0200 Subject: [PATCH 091/322] chore(python): bump to v0.4.1 --- python/release.sh | 2 +- python/setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/release.sh b/python/release.sh index 8687d2f645..ed06a1abd2 100755 --- a/python/release.sh +++ b/python/release.sh @@ -2,6 +2,6 @@ # https://betterscientificsoftware.github.io/python-for-hpc/tutorials/python-pypi-packaging/ rm -Rf dist rm -Rf bullmq.egg-info -# yarn build bullmq latest version +yarn build bullmq # latest version python setup.py sdist twine upload dist/* diff --git a/python/setup.py b/python/setup.py index c4fc0edde1..f117f5de76 100644 --- a/python/setup.py +++ b/python/setup.py @@ -10,7 +10,7 @@ setup( name='bullmq', - version='0.4.0', + version='0.4.1', description='BullMQ for Python', long_description=long_description, long_description_content_type="text/markdown", From adc5425380b0e573dbf7a3b7423a631eff3ba351 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Mon, 29 May 2023 10:16:12 +0200 Subject: [PATCH 092/322] docs: add project homepage --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 088f23d8cf..b8b7feefa6 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "bullmq", "version": "3.14.1", "description": "Queue for messages and jobs based on Redis", + "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", From ce86eceed40283b5d3276968b65ceae31ce425bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Todori=C4=87?= <42638763+maretodoric@users.noreply.github.com> Date: Tue, 30 May 2023 00:38:30 +0200 Subject: [PATCH 093/322] fix(python): fix 'install_requires' to include semver (#1927) --- python/setup.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/python/setup.py b/python/setup.py index f117f5de76..92486932ed 100644 --- a/python/setup.py +++ b/python/setup.py @@ -20,9 +20,11 @@ license='MIT', packages=['bullmq'], package_data={'bullmq': ['commands/*.lua', 'types/*']}, - install_requires=['redis', - 'msgpack', - ], + install_requires=[ + 'redis', + 'msgpack', + 'semver', + ], classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', From b8157a3424ceb60e662e80a3b0db918241b87ecc Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 30 May 2023 18:38:06 -0500 Subject: [PATCH 094/322] fix(rate-limit): take in count priority (#1919) fixes #1915 --- src/classes/scripts.ts | 3 +- src/commands/addJob-8.lua | 2 +- ...it-8.lua => moveJobFromActiveToWait-9.lua} | 17 +++++- tests/test_rate_limiter.ts | 61 +++++++++++++++++++ 4 files changed, 78 insertions(+), 5 deletions(-) rename src/commands/{moveJobFromActiveToWait-8.lua => moveJobFromActiveToWait-9.lua} (67%) diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index 6d4d0aaf63..774c2cd5ed 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -888,10 +888,11 @@ export class Scripts { this.queue.keys.paused, this.queue.keys.meta, this.queue.keys.limiter, + this.queue.keys.priority, this.queue.keys.events, ]; - const args = [jobId, token]; + const args = [jobId, token, this.queue.toKey(jobId)]; const pttl = await (client).moveJobFromActiveToWait(keys.concat(args)); diff --git a/src/commands/addJob-8.lua b/src/commands/addJob-8.lua index 2b6c7191db..fd282e45ba 100644 --- a/src/commands/addJob-8.lua +++ b/src/commands/addJob-8.lua @@ -33,7 +33,7 @@ [6] waitChildrenKey key. [7] parent dependencies key. [8] parent? {id, queueKey} - [9] repeat job key + [9] repeat job key ARGV[2] Json stringified job data ARGV[3] msgpacked options diff --git a/src/commands/moveJobFromActiveToWait-8.lua b/src/commands/moveJobFromActiveToWait-9.lua similarity index 67% rename from src/commands/moveJobFromActiveToWait-8.lua rename to src/commands/moveJobFromActiveToWait-9.lua index 6c8d97944a..0a2ea53efe 100644 --- a/src/commands/moveJobFromActiveToWait-8.lua +++ b/src/commands/moveJobFromActiveToWait-9.lua @@ -9,14 +9,17 @@ KEYS[5] paused key KEYS[6] meta key KEYS[7] limiter key - KEYS[8] event key + KEYS[8] priority key + KEYS[9] event key ARGV[1] job id ARGV[2] lock token + ARGV[3] job id key ]] local rcall = redis.call -- Includes +--- @include "includes/addJobWithPriority" --- @include "includes/getTargetQueueList" local jobId = ARGV[1] @@ -31,11 +34,19 @@ if lockToken == token and pttl > 0 then local target = getTargetQueueList(KEYS[6], KEYS[2], KEYS[5]) rcall("SREM", KEYS[3], jobId) - rcall("RPUSH", target, jobId) + + local priority = tonumber(rcall("HGET", ARGV[3], "priority")) or 0 + + if priority > 0 then + addJobWithPriority(KEYS[8], priority, target, jobId) + else + rcall("RPUSH", target, jobId) + end + rcall("DEL", lockKey) -- Emit waiting event - rcall("XADD", KEYS[8], "*", "event", "waiting", "jobId", jobId) + rcall("XADD", KEYS[9], "*", "event", "waiting", "jobId", jobId) end end diff --git a/tests/test_rate_limiter.ts b/tests/test_rate_limiter.ts index a6ad3eb510..48d886d139 100644 --- a/tests/test_rate_limiter.ts +++ b/tests/test_rate_limiter.ts @@ -323,6 +323,67 @@ describe('Rate Limiter', function () { await worker.close(); }); + describe('when priority is provided', () => { + it('should obey the rate limit respecting priority', async function () { + this.timeout(6000); + + let extraCount = 3; + let priority = 9; + const numJobs = 4; + const dynamicLimit = 250; + const duration = 100; + + const worker = new Worker( + queueName, + async job => { + if (job.attemptsMade === 1) { + if (extraCount > 0) { + await queue.add('rate test', {}, { priority }); + priority -= 1; + extraCount -= 1; + } + await worker.rateLimit(dynamicLimit); + throw Worker.RateLimitError(); + } + }, + { + connection, + limiter: { + max: 1, + duration, + }, + }, + ); + + const result = new Promise((resolve, reject) => { + queueEvents.on( + 'completed', + // after every job has been completed + after(numJobs, async args => { + await worker.close(); + + try { + expect(args.jobId).to.be.equal('1'); + resolve(); + } catch (err) { + reject(err); + } + }), + ); + + queueEvents.on('failed', async err => { + await worker.close(); + reject(err); + }); + }); + + await queue.add('rate test', {}, { priority: 10 }); + + await result; + await worker.close(); + }); + }); + describe('when queue is paused', () => { it('moves job to paused', async function () { const dynamicLimit = 250; From 6f4fb3cac980a06816660bbc7339b81db801f4d7 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 30 May 2023 23:39:00 +0000 Subject: [PATCH 095/322] chore(release): 3.14.2 [skip ci] ## [3.14.2](https://github.com/taskforcesh/bullmq/compare/v3.14.1...v3.14.2) (2023-05-30) ### Bug Fixes * **python:** fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) * **rate-limit:** take in count priority ([#1919](https://github.com/taskforcesh/bullmq/issues/1919)) fixes [#1915](https://github.com/taskforcesh/bullmq/issues/1915) ([b8157a3](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) --- docs/gitbook/changelog.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 930a205a54..6d14e4d3a2 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,11 @@ +## [3.14.2](https://github.com/taskforcesh/bullmq/compare/v3.14.1...v3.14.2) (2023-05-30) + + +### Bug Fixes + +* **python:** fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) +* **rate-limit:** take in count priority ([#1919](https://github.com/taskforcesh/bullmq/issues/1919)) fixes [#1915](https://github.com/taskforcesh/bullmq/issues/1915) ([b8157a3](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) + ## [3.14.1](https://github.com/taskforcesh/bullmq/compare/v3.14.0...v3.14.1) (2023-05-27) diff --git a/package.json b/package.json index b8b7feefa6..137bd7e210 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.14.1", + "version": "3.14.2", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 8f4d86a547b854ea844c5a13704874af90744c2c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 31 May 2023 01:53:17 +0000 Subject: [PATCH 096/322] chore(deps): lock file maintenance --- yarn.lock | 542 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 281 insertions(+), 261 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3727ee4b74..66b8f7efc7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,64 +17,64 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.21.5": - version "7.21.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" - integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== +"@babel/compat-data@^7.22.0": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.3.tgz#cd502a6a0b6e37d7ad72ce7e71a7160a3ae36f7e" + integrity sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ== "@babel/core@^7.7.5": - version "7.21.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.8.tgz#2a8c7f0f53d60100ba4c32470ba0281c92aa9aa4" - integrity sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ== + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.1.tgz#5de51c5206f4c6f5533562838337a603c1033cfd" + integrity sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.5" - "@babel/helper-compilation-targets" "^7.21.5" - "@babel/helper-module-transforms" "^7.21.5" - "@babel/helpers" "^7.21.5" - "@babel/parser" "^7.21.8" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.5" - "@babel/types" "^7.21.5" + "@babel/generator" "^7.22.0" + "@babel/helper-compilation-targets" "^7.22.1" + "@babel/helper-module-transforms" "^7.22.1" + "@babel/helpers" "^7.22.0" + "@babel/parser" "^7.22.0" + "@babel/template" "^7.21.9" + "@babel/traverse" "^7.22.1" + "@babel/types" "^7.22.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" semver "^6.3.0" -"@babel/generator@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f" - integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w== +"@babel/generator@^7.22.0", "@babel/generator@^7.22.3": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.3.tgz#0ff675d2edb93d7596c5f6728b52615cfc0df01e" + integrity sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A== dependencies: - "@babel/types" "^7.21.5" + "@babel/types" "^7.22.3" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" - integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== +"@babel/helper-compilation-targets@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz#bfcd6b7321ffebe33290d68550e2c9d7eb7c7a58" + integrity sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ== dependencies: - "@babel/compat-data" "^7.21.5" + "@babel/compat-data" "^7.22.0" "@babel/helper-validator-option" "^7.21.0" browserslist "^4.21.3" lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-environment-visitor@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" - integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== +"@babel/helper-environment-visitor@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz#ac3a56dbada59ed969d712cf527bd8271fe3eba8" + integrity sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA== "@babel/helper-function-name@^7.21.0": version "7.21.0" @@ -98,19 +98,19 @@ dependencies: "@babel/types" "^7.21.4" -"@babel/helper-module-transforms@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" - integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== +"@babel/helper-module-transforms@^7.22.1": + version "7.22.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz#e0cad47fedcf3cae83c11021696376e2d5a50c63" + integrity sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw== dependencies: - "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-environment-visitor" "^7.22.1" "@babel/helper-module-imports" "^7.21.4" "@babel/helper-simple-access" "^7.21.5" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.5" - "@babel/types" "^7.21.5" + "@babel/template" "^7.21.9" + "@babel/traverse" "^7.22.1" + "@babel/types" "^7.22.0" "@babel/helper-simple-access@^7.21.5": version "7.21.5" @@ -141,14 +141,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== -"@babel/helpers@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08" - integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA== +"@babel/helpers@^7.22.0": + version "7.22.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.3.tgz#53b74351da9684ea2f694bf0877998da26dd830e" + integrity sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w== dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.5" - "@babel/types" "^7.21.5" + "@babel/template" "^7.21.9" + "@babel/traverse" "^7.22.1" + "@babel/types" "^7.22.3" "@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": version "7.18.6" @@ -159,40 +159,40 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5", "@babel/parser@^7.21.8": - version "7.21.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" - integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== +"@babel/parser@^7.0.0", "@babel/parser@^7.21.9", "@babel/parser@^7.22.0", "@babel/parser@^7.22.4": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.4.tgz#a770e98fd785c231af9d93f6459d36770993fb32" + integrity sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA== -"@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== +"@babel/template@^7.20.7", "@babel/template@^7.21.9": + version "7.21.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.21.9.tgz#bf8dad2859130ae46088a99c1f265394877446fb" + integrity sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" + "@babel/code-frame" "^7.21.4" + "@babel/parser" "^7.21.9" + "@babel/types" "^7.21.5" -"@babel/traverse@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133" - integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw== +"@babel/traverse@^7.22.1": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.4.tgz#c3cf96c5c290bd13b55e29d025274057727664c0" + integrity sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ== dependencies: "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.5" - "@babel/helper-environment-visitor" "^7.21.5" + "@babel/generator" "^7.22.3" + "@babel/helper-environment-visitor" "^7.22.1" "@babel/helper-function-name" "^7.21.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.5" - "@babel/types" "^7.21.5" + "@babel/parser" "^7.22.4" + "@babel/types" "^7.22.4" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" - integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== +"@babel/types@^7.18.6", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3", "@babel/types@^7.22.4": + version "7.22.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.4.tgz#56a2653ae7e7591365dabf20b76295410684c071" + integrity sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA== dependencies: "@babel/helper-string-parser" "^7.21.5" "@babel/helper-validator-identifier" "^7.19.1" @@ -204,12 +204,12 @@ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@commitlint/cli@^17.0.3": - version "17.6.3" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.6.3.tgz#a02194a2bb6efe4e681eda2addd072a8d02c9497" - integrity sha512-ItSz2fd4F+CujgIbQOfNNerDF1eFlsBGEfp9QcCb1kxTYMuKTYZzA6Nu1YRRrIaaWwe2E7awUGpIMrPoZkOG3A== + version "17.6.5" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.6.5.tgz#3a8abd6499f9d4aeafe3bf9201338ccb868a14b9" + integrity sha512-3PQrWr/uo6lzF5k7n5QuosCYnzaxP9qGBp3jhWP0Vmsa7XA6wrl9ccPqfQyXpSbQE3zBROVO3TDqgPKe4tfmLQ== dependencies: "@commitlint/format" "^17.4.4" - "@commitlint/lint" "^17.6.3" + "@commitlint/lint" "^17.6.5" "@commitlint/load" "^17.5.0" "@commitlint/read" "^17.5.1" "@commitlint/types" "^17.4.4" @@ -220,9 +220,9 @@ yargs "^17.0.0" "@commitlint/config-conventional@^17.0.3": - version "17.6.3" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.6.3.tgz#21f5835235493e386effeaa98b898124230b1000" - integrity sha512-bLyHEjjRWqlLQWIgYFHmUPbEFMOOLXeF3QbUinDIJev/u9e769tkoTH9YPknEywiuIrAgZaVo+OfzAIsJP0fsw== + version "17.6.5" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.6.5.tgz#a8ec286e634a071329fe45dc4955032c2176aeb5" + integrity sha512-Xl9H9KLl86NZm5CYNTNF9dcz1xelE/EbvhWIWcYxG/rn3UWYWdWmmnX2q6ZduNdLFSGbOxzUpIx61j5zxbeXxg== dependencies: conventional-changelog-conventionalcommits "^5.0.0" @@ -259,22 +259,22 @@ "@commitlint/types" "^17.4.4" chalk "^4.1.0" -"@commitlint/is-ignored@^17.6.3": - version "17.6.3" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.6.3.tgz#8e21046558a0339fbf2a33ef0ad7d5a9ae7ff6bc" - integrity sha512-LQbNdnPbxrpbcrVKR5yf51SvquqktpyZJwqXx3lUMF6+nT9PHB8xn3wLy8pi2EQv5Zwba484JnUwDE1ygVYNQA== +"@commitlint/is-ignored@^17.6.5": + version "17.6.5" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.6.5.tgz#cea24cd2031fe7d242590b91fab3352750887194" + integrity sha512-CQvAPt9gX7cuUbMrIaIMKczfWJqqr6m8IlJs0F2zYwyyMTQ87QMHIj5jJ5HhOaOkaj6dvTMVGx8Dd1I4xgUuoQ== dependencies: "@commitlint/types" "^17.4.4" semver "7.5.0" -"@commitlint/lint@^17.6.3": - version "17.6.3" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.6.3.tgz#2d9a88b73c44be8b97508c980198a6f289251655" - integrity sha512-fBlXwt6SHJFgm3Tz+luuo3DkydAx9HNC5y4eBqcKuDuMVqHd2ugMNr+bQtx6riv9mXFiPoKp7nE4Xn/ls3iVDA== +"@commitlint/lint@^17.6.5": + version "17.6.5" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.6.5.tgz#dfa437f14430c9874d6b1a3ba8a2d44b79780c02" + integrity sha512-BSJMwkE4LWXrOsiP9KoHG+/heSDfvOL/Nd16+ojTS/DX8HZr8dNl8l3TfVr/d/9maWD8fSegRGtBtsyGuugFrw== dependencies: - "@commitlint/is-ignored" "^17.6.3" - "@commitlint/parse" "^17.4.4" - "@commitlint/rules" "^17.6.1" + "@commitlint/is-ignored" "^17.6.5" + "@commitlint/parse" "^17.6.5" + "@commitlint/rules" "^17.6.5" "@commitlint/types" "^17.4.4" "@commitlint/load@>6.1.1", "@commitlint/load@^17.5.0": @@ -302,10 +302,10 @@ resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-17.4.2.tgz#f4753a79701ad6db6db21f69076e34de6580e22c" integrity sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q== -"@commitlint/parse@^17.4.4": - version "17.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.4.4.tgz#8311b12f2b730de6ea0679ae2a37b386bcc5b04b" - integrity sha512-EKzz4f49d3/OU0Fplog7nwz/lAfXMaDxtriidyGF9PtR+SRbgv4FhsfF310tKxs6EPj8Y+aWWuX3beN5s+yqGg== +"@commitlint/parse@^17.6.5": + version "17.6.5" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.6.5.tgz#7b84b328a6a94ca08ab7c98c491d9d3dab68f09d" + integrity sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw== dependencies: "@commitlint/types" "^17.4.4" conventional-changelog-angular "^5.0.11" @@ -334,10 +334,10 @@ resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/rules@^17.6.1": - version "17.6.1" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.6.1.tgz#dff529b8d1e0455808fe7e3e1fa70617e4eb2759" - integrity sha512-lUdHw6lYQ1RywExXDdLOKxhpp6857/4c95Dc/1BikrHgdysVUXz26yV0vp1GL7Gv+avx9WqZWTIVB7pNouxlfw== +"@commitlint/rules@^17.6.5": + version "17.6.5" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.6.5.tgz#fabcacdde923e26ac5ef90d4b3f8fc05526bbaa1" + integrity sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A== dependencies: "@commitlint/ensure" "^17.4.4" "@commitlint/message" "^17.4.2" @@ -731,10 +731,10 @@ dependencies: "@octokit/types" "^9.0.0" -"@octokit/core@^4.1.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648" - integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg== +"@octokit/core@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.1.tgz#fee6341ad0ce60c29cc455e056cd5b500410a588" + integrity sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw== dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" @@ -754,38 +754,42 @@ universal-user-agent "^6.0.0" "@octokit/graphql@^5.0.0": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" - integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== + version "5.0.6" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" + integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== dependencies: "@octokit/request" "^6.0.0" "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^17.1.1": - version "17.1.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.1.1.tgz#b046979537d4209954206d29fbf9fe6893c5acec" - integrity sha512-/X7Gh/qWiWaooJmUnYD48SYy72fyrk2ceisOSe89JojK7r0j8YrTwYpDi76kI+c6QiqX1KSgdoBTMJvktsDkYw== +"@octokit/openapi-types@^17.2.0": + version "17.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.2.0.tgz#f1800b5f9652b8e1b85cc6dfb1e0dc888810bdb5" + integrity sha512-MazrFNx4plbLsGl+LFesMo96eIXkFgEtaKbnNpdh4aQ0VM10aoylFsTYP1AEjkeoRNZiiPe3T6Gl2Hr8dJWdlQ== -"@octokit/plugin-paginate-rest@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz#f34b5a7d9416019126042cd7d7b811e006c0d561" - integrity sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw== +"@octokit/plugin-paginate-rest@^6.1.2": + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz#f86456a7a1fe9e58fec6385a85cf1b34072341f8" + integrity sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ== dependencies: - "@octokit/types" "^9.0.0" + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== +"@octokit/plugin-retry@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-4.1.3.tgz#c717d7908be26a5570941d9688e3e8a3da95e714" + integrity sha512-3YKBj7d0J/4mpEc4xzMociWsMNl5lZqrpAnYcW6mqiSGF3wFjU+c6GHih6GLClk31JNvKDr0x9jc5cfm7evkZg== + dependencies: + "@octokit/types" "^9.0.0" + bottleneck "^2.15.3" -"@octokit/plugin-rest-endpoint-methods@^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz#f7ebe18144fd89460f98f35a587b056646e84502" - integrity sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA== +"@octokit/plugin-throttling@^5.2.3": + version "5.2.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-5.2.3.tgz#9f552a14dcee5c7326dd9dee64a71ea76b108814" + integrity sha512-C9CFg9mrf6cugneKiaI841iG8DOv6P5XXkjmiNNut+swePxQ7RWEdAZRp5rJoE1hjsIqiYcKa/ZkOQ+ujPI39Q== dependencies: "@octokit/types" "^9.0.0" - deprecation "^2.3.1" + bottleneck "^2.15.3" "@octokit/request-error@^3.0.0": version "3.0.3" @@ -797,9 +801,9 @@ once "^1.4.0" "@octokit/request@^6.0.0": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4" - integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA== + version "6.2.5" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.5.tgz#7beef1065042998f7455973ef3f818e7b84d6ec2" + integrity sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ== dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" @@ -808,22 +812,17 @@ node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/rest@^19.0.0": - version "19.0.7" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.7.tgz#d2e21b4995ab96ae5bfae50b4969da7e04e0bb70" - integrity sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA== - dependencies: - "@octokit/core" "^4.1.0" - "@octokit/plugin-paginate-rest" "^6.0.0" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^7.0.0" +"@octokit/tsconfig@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz#59b024d6f3c0ed82f00d08ead5b3750469125af7" + integrity sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA== -"@octokit/types@^9.0.0": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.2.1.tgz#34ab724b66ffbe210604593127bb47fd044abbc7" - integrity sha512-Vx4keMiD/CAiwVFasLcH0xBSVbKIHebIZke9i7ZbUWGNN4vJFWSYH6Nvga7UY9NIJCGa6x3QG849XTbi5wYmkA== +"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": + version "9.2.3" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.2.3.tgz#d0af522f394d74b585cefb7efd6197ca44d183a9" + integrity sha512-MMeLdHyFIALioycq+LFcA71v0S2xpQUX2cw6pPbHQjaibcHYwLnmK/kMZaWuGfGfjBJZ3wRUq+dOaWsvrPJVvA== dependencies: - "@octokit/openapi-types" "^17.1.1" + "@octokit/openapi-types" "^17.2.0" "@pnpm/config.env-replace@^1.1.0": version "1.1.0" @@ -889,25 +888,26 @@ p-reduce "^2.0.0" "@semantic-release/github@^8.0.0", "@semantic-release/github@^8.0.5": - version "8.0.7" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.7.tgz#643aee7a5cdd2acd3ae643bb90ad4ac796901de6" - integrity sha512-VtgicRIKGvmTHwm//iqTh/5NGQwsncOMR5vQK9pMT92Aem7dv37JFKKRuulUsAnUOIlO4G8wH3gPiBAA0iW0ww== + version "8.1.0" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.1.0.tgz#c31fc5852d32975648445804d1984cd96e72c4d0" + integrity sha512-erR9E5rpdsz0dW1I7785JtndQuMWN/iDcemcptf67tBNOmBUN0b2YNOgcjYUnBpgRpZ5ozfBHrK7Bz+2ets/Dg== dependencies: - "@octokit/rest" "^19.0.0" + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^6.1.2" + "@octokit/plugin-retry" "^4.1.3" + "@octokit/plugin-throttling" "^5.2.3" "@semantic-release/error" "^3.0.0" aggregate-error "^3.0.0" - bottleneck "^2.18.1" debug "^4.0.0" dir-glob "^3.0.0" fs-extra "^11.0.0" globby "^11.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" issue-parser "^6.0.0" lodash "^4.17.4" mime "^3.0.0" p-filter "^2.0.0" - p-retry "^4.0.0" url-join "^4.0.0" "@semantic-release/npm@^9.0.0", "@semantic-release/npm@^9.0.1": @@ -959,12 +959,19 @@ dependencies: type-detect "4.0.8" +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" + "@sinonjs/fake-timers@^10.0.2": - version "10.0.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" - integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== + version "10.2.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz#b3e322a34c5f26e3184e7f6115695f299c1b1194" + integrity sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg== dependencies: - "@sinonjs/commons" "^2.0.0" + "@sinonjs/commons" "^3.0.0" "@sinonjs/fake-timers@^9.1.2": version "9.1.2" @@ -1008,9 +1015,9 @@ integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/chai-as-promised@^7.1.5": version "7.1.5" @@ -1033,9 +1040,9 @@ "@types/node" "*" "@types/json-schema@^7.0.7": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/json5@^0.0.29": version "0.0.29" @@ -1057,9 +1064,9 @@ "@types/lodash" "*" "@types/lodash@*": - version "4.14.194" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76" - integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g== + version "4.14.195" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.195.tgz#bafc975b252eb6cea78882ce8a7b6bf22a6de632" + integrity sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg== "@types/minimatch@*": version "5.1.2" @@ -1087,9 +1094,9 @@ integrity sha512-9TyS+Ph/14zCizVcp6RG7xmRsHr3jsFA088iKbQMrTRvL6Lcs5rdOpOgjsDww8vpk6Q1dBASvm7W6Hs4hQDVDg== "@types/node@*": - version "20.1.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.2.tgz#8fd63447e3f99aba6c3168fd2ec4580d5b97886f" - integrity sha512-CTO/wa8x+rZU626cL2BlbCDzydgnFNgc19h4YvizpTO88MFQxab8wqisxaofQJ/9bLGugRdWIuX/TbIs6VVF6g== + version "20.2.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" + integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== "@types/node@^12.20.25": version "12.20.55" @@ -1106,11 +1113,6 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - "@types/semver@^7.3.9": version "7.5.0" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" @@ -1153,13 +1155,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^5.33.0": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.5.tgz#63064f5eafbdbfb5f9dfbf5c4503cdf949852981" - integrity sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw== + version "5.59.8" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.8.tgz#60cbb00671d86cf746044ab797900b1448188567" + integrity sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw== dependencies: - "@typescript-eslint/scope-manager" "5.59.5" - "@typescript-eslint/types" "5.59.5" - "@typescript-eslint/typescript-estree" "5.59.5" + "@typescript-eslint/scope-manager" "5.59.8" + "@typescript-eslint/types" "5.59.8" + "@typescript-eslint/typescript-estree" "5.59.8" debug "^4.3.4" "@typescript-eslint/scope-manager@4.33.0": @@ -1170,23 +1172,23 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/scope-manager@5.59.5": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.5.tgz#33ffc7e8663f42cfaac873de65ebf65d2bce674d" - integrity sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A== +"@typescript-eslint/scope-manager@5.59.8": + version "5.59.8" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz#ff4ad4fec6433647b817c4a7d4b4165d18ea2fa8" + integrity sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig== dependencies: - "@typescript-eslint/types" "5.59.5" - "@typescript-eslint/visitor-keys" "5.59.5" + "@typescript-eslint/types" "5.59.8" + "@typescript-eslint/visitor-keys" "5.59.8" "@typescript-eslint/types@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/types@5.59.5": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.5.tgz#e63c5952532306d97c6ea432cee0981f6d2258c7" - integrity sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w== +"@typescript-eslint/types@5.59.8": + version "5.59.8" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.8.tgz#212e54414733618f5d0fd50b2da2717f630aebf8" + integrity sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w== "@typescript-eslint/typescript-estree@4.33.0", "@typescript-eslint/typescript-estree@^4.33.0": version "4.33.0" @@ -1201,13 +1203,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.59.5": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.5.tgz#9b252ce55dd765e972a7a2f99233c439c5101e42" - integrity sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg== +"@typescript-eslint/typescript-estree@5.59.8": + version "5.59.8" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz#801a7b1766481629481b3b0878148bd7a1f345d7" + integrity sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg== dependencies: - "@typescript-eslint/types" "5.59.5" - "@typescript-eslint/visitor-keys" "5.59.5" + "@typescript-eslint/types" "5.59.8" + "@typescript-eslint/visitor-keys" "5.59.8" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1222,12 +1224,12 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.59.5": - version "5.59.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.5.tgz#ba5b8d6791a13cf9fea6716af1e7626434b29b9b" - integrity sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA== +"@typescript-eslint/visitor-keys@5.59.8": + version "5.59.8" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz#aa6a7ef862add919401470c09e1609392ef3cc40" + integrity sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ== dependencies: - "@typescript-eslint/types" "5.59.5" + "@typescript-eslint/types" "5.59.8" eslint-visitor-keys "^3.3.0" JSONStream@^1.0.4: @@ -1275,6 +1277,13 @@ agent-base@6, agent-base@^6.0.2: dependencies: debug "4" +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + agentkeepalive@^4.2.1: version "4.3.0" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" @@ -1588,7 +1597,7 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -bottleneck@^2.18.1: +bottleneck@^2.15.3: version "2.19.5" resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== @@ -1621,14 +1630,14 @@ browser-stdout@1.3.1: integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserslist@^4.21.3: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + version "4.21.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.7.tgz#e2b420947e5fb0a58e8f4668ae6e23488127e551" + integrity sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA== dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" + caniuse-lite "^1.0.30001489" + electron-to-chromium "^1.4.411" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" buffer-from@^1.0.0, buffer-from@^1.1.0: version "1.1.2" @@ -1721,10 +1730,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001449: - version "1.0.30001486" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz#56a08885228edf62cbe1ac8980f2b5dae159997e" - integrity sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg== +caniuse-lite@^1.0.30001489: + version "1.0.30001491" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001491.tgz#eab0e0f392de6f7411751d148de9b5bd6b203e46" + integrity sha512-17EYIi4TLnPiTzVKMveIxU5ETlxbSO3B6iPvMbprqnKh4qJsQGk5Nh1Lp4jIMAE0XfrujsJuWZAM3oJdMHaKBA== cardinal@^2.1.1: version "2.1.1" @@ -2359,7 +2368,7 @@ dependency-tree@^8.1.1: precinct "^8.0.0" typescript "^3.9.7" -deprecation@^2.0.0, deprecation@^2.3.1: +deprecation@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== @@ -2527,10 +2536,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.4.284: - version "1.4.391" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.391.tgz#197994210792e29e39baf3ce807df42f66e9b5f8" - integrity sha512-GqydVV1+kUWY5qlEzaw34/hyWTApuQrHiGrcGA2Kk/56nEK44i+YUW45VH43JuZT0Oo7uY8aVtpPhBBZXEWtSA== +electron-to-chromium@^1.4.411: + version "1.4.414" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.414.tgz#f9eedb6fb01b50439d8228d8ee3a6fa5e0108437" + integrity sha512-RRuCvP6ekngVh2SAJaOKT/hxqc9JAsK+Pe0hP5tGQIfonU2Zy9gMGdJ+mBdyl/vNucMG6gkXYtuM4H/1giws5w== emoji-regex@^8.0.0: version "8.0.0" @@ -2557,9 +2566,9 @@ end-of-stream@^1.1.0: once "^1.4.0" enhanced-resolve@^5.8.3: - version "5.14.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.0.tgz#0b6c676c8a3266c99fa281e4433a706f5c0c61c4" - integrity sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw== + version "5.14.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" + integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -2950,9 +2959,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.9: version "3.2.12" @@ -3260,12 +3269,13 @@ get-func-name@^2.0.0: integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" + has-proto "^1.0.1" has-symbols "^1.0.3" get-own-enumerable-property-symbols@^3.0.0: @@ -3619,6 +3629,14 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -3636,6 +3654,14 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz#75cb70d04811685667183b31ab158d006750418a" + integrity sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -3880,9 +3906,9 @@ is-cidr@^4.0.2: cidr-regex "^3.1.1" is-core-module@^2.1.0, is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.12.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" - integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" @@ -5108,9 +5134,9 @@ msgpackr-extract@^3.0.2: "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" msgpackr@^1.6.2: - version "1.9.1" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.9.1.tgz#4375d705232b721bedb44a3993e7aa8a6f959502" - integrity sha512-jJdrNH8tzfCtT0rjPFryBXjRDQE7rqfLkah4/8B4gYa7NNZYFBcGxqWBtfQpGC+oYyBwlkj3fARk4aooKNPHxg== + version "1.9.2" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.9.2.tgz#cd301f85de948111eb34553bfb402f21650f368d" + integrity sha512-xtDgI3Xv0AAiZWLRGDchyzBwU6aq0rwJ+W+5Y4CZhEWtkl/hJtFFLc+3JtGTw7nz1yquxs7nL8q/yA2aqpflIQ== optionalDependencies: msgpackr-extract "^3.0.2" @@ -5218,10 +5244,10 @@ node-preload@^0.2.1: dependencies: process-on-spawn "^1.0.0" -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== +node-releases@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== node-source-walk@^4.0.0, node-source-walk@^4.2.0, node-source-walk@^4.2.2: version "4.3.0" @@ -5715,14 +5741,6 @@ p-reduce@^2.0.0: resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== -p-retry@^4.0.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== - dependencies: - "@types/retry" "0.12.0" - retry "^0.13.1" - p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -5924,9 +5942,9 @@ pluralize@^8.0.0: integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== postcss-selector-parser@^6.0.10: - version "6.0.12" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz#2efae5ffab3c8bfb2b7fbf0c426e3bca616c4abb" - integrity sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg== + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -5950,9 +5968,9 @@ postcss-values-parser@^5.0.0: quote-unquote "^1.0.0" postcss@^8.1.7, postcss@^8.4.6: - version "8.4.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" - integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== + version "8.4.24" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" + integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -6426,11 +6444,6 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -6556,7 +6569,7 @@ semver-regex@^3.1.2: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.5.0, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: +semver@7.5.0: version "7.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== @@ -6568,6 +6581,13 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + dependencies: + lru-cache "^6.0.0" + serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -6931,9 +6951,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: ansi-regex "^5.0.1" strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" @@ -7040,9 +7060,9 @@ tapable@^2.2.0: integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.14" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.14.tgz#e87926bec1cfe7c9e783a77a79f3e81c1cfa3b66" - integrity sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw== + version "6.1.15" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" + integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -7299,9 +7319,9 @@ type-fest@^0.8.0, type-fest@^0.8.1: integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== type-fest@^3.0.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.10.0.tgz#d75f17a22be8816aea6315ab2739fe1c0c211863" - integrity sha512-hmAPf1datm+gt3c2mvu0sJyhFy6lTkIGf0GzyaZWxRLnabQfPUqg6tF95RPg6sLxKI7nFLGdFxBcf2/7+GXI+A== + version "3.11.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.11.1.tgz#d8e62c7f42e14537d5b8796de5450d541f3a33a7" + integrity sha512-aCuRNRERRVh33lgQaJRlUxZqzfhzwTrsE98Mc3o3VXqmiaQdHacgUtJ0esp+7MvZ92qhtzKPeusaX6vIEcoreA== typed-array-length@^1.0.4: version "1.0.4" @@ -7400,7 +7420,7 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.10: +update-browserslist-db@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== @@ -7650,9 +7670,9 @@ yaml@^1.10.0: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" - integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== yargs-parser@20.2.4: version "20.2.4" From 9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 31 May 2023 17:52:12 -0500 Subject: [PATCH 097/322] feat(job): add changePriority method (#1901) ref #1899 --- docs/gitbook/guide/jobs/delayed.md | 19 +- docs/gitbook/guide/jobs/prioritized.md | 24 ++- src/classes/job.ts | 12 ++ src/classes/scripts.ts | 34 +++ src/commands/changePriority-4.lua | 50 +++++ src/commands/includes/getTargetQueueList.lua | 4 +- tests/test_job.ts | 207 ++++++++++++++++++- 7 files changed, 343 insertions(+), 7 deletions(-) create mode 100644 src/commands/changePriority-4.lua diff --git a/docs/gitbook/guide/jobs/delayed.md b/docs/gitbook/guide/jobs/delayed.md index b0ec16a248..e43beea0d3 100644 --- a/docs/gitbook/guide/jobs/delayed.md +++ b/docs/gitbook/guide/jobs/delayed.md @@ -20,9 +20,26 @@ await myQueue.add('house', { color: 'white' }, { delay: 5000 }); If you want to process the job after a specific point in time, just add the time remaining to that point in time. For example, let's say you want to process the job on the third of July 2035 at 10:30: ```typescript -const targetTime = new Date("03-07-2035 10:30"); +const targetTime = new Date('03-07-2035 10:30'); const delay = Number(targetTime) - Number(new Date()); await myQueue.add('house', { color: 'white' }, { delay }); ``` +## Change delay + +If you want to change the delay after inserting a delayed job, just use **changeDelay** method. For example, let's say you want to change the delay from 2000 to 4000 milliseconds: + +```typescript +const job = await Job.create(queue, 'test', { foo: 'bar' }, { delay: 2000 }); + +await job.changeDelay(4000); +``` + +{% hint style="warning" %} +Take in count that your job must be into delayed state when you change the delay. +{% endhint %} + +## Read more: + +- 💡 [Change Delay API Reference](https://api.docs.bullmq.io/classes/Job.html#changeDelay) diff --git a/docs/gitbook/guide/jobs/prioritized.md b/docs/gitbook/guide/jobs/prioritized.md index cc8798584a..85ec8f22d7 100644 --- a/docs/gitbook/guide/jobs/prioritized.md +++ b/docs/gitbook/guide/jobs/prioritized.md @@ -6,7 +6,7 @@ Jobs can also include a priority option. Using priorities, job's processing orde Adding prioritized jobs is a slower operation than the other types of jobs, with a complexity O(n) relative to the number of jobs waiting in the Queue. {% endhint %} -Note that the priorities go from 1 to MAX\_INT, whereas a lower number is always a higher priority than higher numbers. +Note that the priorities go from 1 to MAX_INT, whereas a lower number is always a higher priority than higher numbers. Jobs without a priority assigned will get the least priority. @@ -24,3 +24,25 @@ await myQueue.add('wall', { color: 'blue' }, { priority: 7 }); ``` If several jobs are added with the same priority value, then the jobs within that priority will be processed in FIFO (First in first out) fashion. + +## Change priority + +If you want to change the priority after inserting a job, just use the **changePriority** method. For example, let's say that you want to change the priority from 16 to 1: + +```typescript +const job = await Job.create(queue, 'test2', { foo: 'bar' }, { priority: 16 }); + +await job.changePriority({ + priority: 1, +}); +``` + +or if you want to use lifo option: + +```typescript +const job = await Job.create(queue, 'test2', { foo: 'bar' }, { priority: 16 }); + +await job.changePriority({ + lifo: true, +}); +``` diff --git a/src/classes/job.ts b/src/classes/job.ts index b514921cfb..9d72416a35 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -738,6 +738,18 @@ export class Job< this.delay = delay; } + /** + * Change job priority. + * + * @returns void + */ + async changePriority(opts: { + priority?: number; + lifo?: boolean; + }): Promise { + await this.scripts.changePriority(this.id, opts.priority, opts.lifo); + } + /** * Get this jobs children result values if any. * diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index 774c2cd5ed..2bbdb7a3ad 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -527,6 +527,40 @@ export class Scripts { return keys.concat([delay, JSON.stringify(timestamp), jobId]); } + async changePriority( + jobId: string, + priority = 0, + lifo = false, + ): Promise { + const client = await this.queue.client; + + const args = this.changePriorityArgs(jobId, priority, lifo); + const result = await (client).changePriority(args); + if (result < 0) { + throw this.finishedErrors(result, jobId, 'changePriority'); + } + } + + private changePriorityArgs( + jobId: string, + priority = 0, + lifo = false, + ): (string | number)[] { + const keys: (string | number)[] = [ + this.queue.keys.wait, + this.queue.keys.paused, + this.queue.keys.meta, + this.queue.keys.priority, + ]; + + return keys.concat([ + priority, + this.queue.toKey(jobId), + jobId, + lifo ? 1 : 0, + ]); + } + // Note: We have an issue here with jobs using custom job ids moveToDelayedArgs( jobId: string, diff --git a/src/commands/changePriority-4.lua b/src/commands/changePriority-4.lua new file mode 100644 index 0000000000..6a21c541d9 --- /dev/null +++ b/src/commands/changePriority-4.lua @@ -0,0 +1,50 @@ +--[[ + Change job priority + Input: + KEYS[1] 'wait', + KEYS[2] 'paused' + KEYS[3] 'meta' + KEYS[4] 'priority' + + ARGV[1] priority value + ARGV[2] job key + ARGV[3] job id + ARGV[4] lifo + + Output: + 0 - OK + -1 - Missing job +]] +local jobKey = ARGV[2] +local jobId = ARGV[3] +local priority = tonumber(ARGV[1]) +local rcall = redis.call + +-- Includes +--- @include "includes/addJobWithPriority" +--- @include "includes/getTargetQueueList" + +if rcall("EXISTS", jobKey) == 1 then + local target = getTargetQueueList(KEYS[3], KEYS[1], KEYS[2]) + + local numRemovedElements = rcall("LREM", target, -1, jobId) + if numRemovedElements > 0 then + rcall("ZREM", KEYS[4], jobId) + + -- Standard or priority add + if priority == 0 then + -- LIFO or FIFO + local pushCmd = ARGV[4] == '1' and 'RPUSH' or 'LPUSH'; + rcall(pushCmd, target, jobId) + else + -- Priority add + addJobWithPriority(KEYS[4], priority, target, jobId) + end + end + + rcall("HSET", jobKey, "priority", priority) + + return 0 +else + return -1 +end diff --git a/src/commands/includes/getTargetQueueList.lua b/src/commands/includes/getTargetQueueList.lua index 6a0a2a7b36..a208fdca6a 100644 --- a/src/commands/includes/getTargetQueueList.lua +++ b/src/commands/includes/getTargetQueueList.lua @@ -5,8 +5,8 @@ local function getTargetQueueList(queueMetaKey, waitKey, pausedKey) if rcall("HEXISTS", queueMetaKey, "paused") ~= 1 then - return waitKey + return waitKey, false else - return pausedKey + return pausedKey, true end end diff --git a/tests/test_job.ts b/tests/test_job.ts index 7804a5fc87..72b47ad4f6 100644 --- a/tests/test_job.ts +++ b/tests/test_job.ts @@ -294,7 +294,7 @@ describe('Job', function () { const job = await Job.create(queue, 'test', { foo: 'bar' }); await job.updateProgress(42); const storedJob = await Job.fromId(queue, job.id); - expect(storedJob.progress).to.be.equal(42); + expect(storedJob!.progress).to.be.equal(42); }); it('can set and get progress as object', async function () { @@ -609,7 +609,7 @@ describe('Job', function () { const token = 'my-token'; await Job.create(queue, 'test', { foo: 'bar' }, { attempts: 1 }); const job = (await worker.getNextJob(token)) as Job; - await delay(100); + await delay(105); await job.remove(); await expect( @@ -759,6 +759,207 @@ describe('Job', function () { }); }); + describe('.changePriority', () => { + it('can change priority of a job', async function () { + await Job.create(queue, 'test1', { foo: 'bar' }, { priority: 8 }); + const job = await Job.create( + queue, + 'test2', + { foo: 'bar' }, + { priority: 16 }, + ); + + await job.changePriority({ + priority: 1, + }); + + const worker = new Worker( + queueName, + async () => { + await delay(20); + }, + { connection }, + ); + await worker.waitUntilReady(); + + const completing = new Promise(resolve => { + worker.on( + 'completed', + after(2, job => { + expect(job.name).to.be.eql('test1'); + resolve(); + }), + ); + }); + + await completing; + + await worker.close(); + }); + + describe('when queue is paused', () => { + it('respects new priority', async () => { + await queue.pause(); + await Job.create(queue, 'test1', { foo: 'bar' }, { priority: 8 }); + const job = await Job.create( + queue, + 'test2', + { foo: 'bar' }, + { priority: 16 }, + ); + + await job.changePriority({ + priority: 1, + }); + + const worker = new Worker( + queueName, + async () => { + await delay(20); + }, + { connection }, + ); + await worker.waitUntilReady(); + + const completing = new Promise(resolve => { + worker.on( + 'completed', + after(2, job => { + expect(job.name).to.be.eql('test1'); + resolve(); + }), + ); + }); + + await queue.resume(); + + await completing; + + await worker.close(); + }); + }); + + describe('when lifo option is provided as true', () => { + it('moves job to the head of wait list', async () => { + await queue.pause(); + await Job.create(queue, 'test1', { foo: 'bar' }, { priority: 8 }); + const job = await Job.create( + queue, + 'test2', + { foo: 'bar' }, + { priority: 16 }, + ); + + await job.changePriority({ + lifo: true, + }); + + const worker = new Worker( + queueName, + async () => { + await delay(20); + }, + { connection }, + ); + await worker.waitUntilReady(); + + const completing = new Promise(resolve => { + worker.on( + 'completed', + after(2, job => { + expect(job.name).to.be.eql('test1'); + resolve(); + }), + ); + }); + + await queue.resume(); + + await completing; + + await worker.close(); + }); + }); + + describe('when lifo option is provided as false', () => { + it('moves job to the tail of wait list', async () => { + await queue.pause(); + const job = await Job.create( + queue, + 'test1', + { foo: 'bar' }, + { priority: 8 }, + ); + await Job.create(queue, 'test2', { foo: 'bar' }, { priority: 16 }); + + await job.changePriority({ + lifo: false, + }); + + const worker = new Worker( + queueName, + async () => { + await delay(20); + }, + { connection }, + ); + await worker.waitUntilReady(); + + const completing = new Promise(resolve => { + worker.on( + 'completed', + after(2, job => { + expect(job.name).to.be.eql('test1'); + resolve(); + }), + ); + }); + + await queue.resume(); + + await completing; + + await worker.close(); + }); + }); + + describe('when job is not in wait state', () => { + it('does not add a record in priority zset', async () => { + const job = await Job.create( + queue, + 'test1', + { foo: 'bar' }, + { delay: 500 }, + ); + + await job.changePriority({ + priority: 10, + }); + + const client = await queue.client; + const count = await client.zcard(`bull:${queueName}:priority`); + const priority = await client.hget( + `bull:${queueName}:${job.id}`, + 'priority', + ); + + expect(count).to.be.eql(0); + expect(priority).to.be.eql('10'); + }); + }); + + describe('when job does not exist', () => { + it('throws an error', async () => { + const job = await Job.create(queue, 'test', { foo: 'bar' }); + await job.remove(); + + await expect(job.changePriority({ priority: 2 })).to.be.rejectedWith( + `Missing key for job ${job.id}. changePriority`, + ); + }); + }); + }); + describe('.promote', () => { it('can promote a delayed job to be executed immediately', async () => { const job = await Job.create( @@ -792,7 +993,7 @@ describe('Job', function () { const done = new Promise(resolve => { worker.on('completed', job => { - completed.push(job.id); + completed.push(job.id!); if (completed.length > 3) { expect(completed).to.be.eql(['a', 'b', 'c', 'd']); resolve(); From 1ccf4864c957b85f244e45673513cea239796ea4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 31 May 2023 22:53:03 +0000 Subject: [PATCH 098/322] chore(release): 3.15.0 [skip ci] # [3.15.0](https://github.com/taskforcesh/bullmq/compare/v3.14.2...v3.15.0) (2023-05-31) ### Features * **job:** add changePriority method ([#1901](https://github.com/taskforcesh/bullmq/issues/1901)) ref [#1899](https://github.com/taskforcesh/bullmq/issues/1899) ([9485ad5](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 6d14e4d3a2..f575dfe618 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +# [3.15.0](https://github.com/taskforcesh/bullmq/compare/v3.14.2...v3.15.0) (2023-05-31) + + +### Features + +* **job:** add changePriority method ([#1901](https://github.com/taskforcesh/bullmq/issues/1901)) ref [#1899](https://github.com/taskforcesh/bullmq/issues/1899) ([9485ad5](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) + ## [3.14.2](https://github.com/taskforcesh/bullmq/compare/v3.14.1...v3.14.2) (2023-05-30) diff --git a/package.json b/package.json index 137bd7e210..fc90c1993f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.14.2", + "version": "3.15.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From f391f2a27d5c2959c2a591d14578b9ae125c35f6 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 1 Jun 2023 23:33:52 -0500 Subject: [PATCH 099/322] refactor(move-to-finished): return 4 values to prevent python errors when destructuring (#1936) --- docs/gitbook/bullmq-pro/changelog.md | 7 +++++++ src/commands/includes/moveJobFromWaitToActive.lua | 6 +++--- src/commands/moveToActive-9.lua | 4 +++- src/commands/moveToFinished-12.lua | 5 ++--- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index c59c8a081c..6890ce6338 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,10 @@ +## [5.3.3](https://github.com/taskforcesh/bullmq-pro/compare/v5.3.2...v5.3.3) (2023-05-30) + + +### Bug Fixes + +* **rate-limit:** take groups in count in global rate limit counter ([#151](https://github.com/taskforcesh/bullmq-pro/issues/151)) ([3d8b28d](https://github.com/taskforcesh/bullmq-pro/commit/3d8b28de087b6f97570dee74a356e11d92daf7fa)) + ## [5.3.2](https://github.com/taskforcesh/bullmq-pro/compare/v5.3.1...v5.3.2) (2023-05-24) diff --git a/src/commands/includes/moveJobFromWaitToActive.lua b/src/commands/includes/moveJobFromWaitToActive.lua index 3c50dd10df..0fcc8a2698 100644 --- a/src/commands/includes/moveJobFromWaitToActive.lua +++ b/src/commands/includes/moveJobFromWaitToActive.lua @@ -22,7 +22,7 @@ local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max']) local expireTime - if(maxJobs) then + if maxJobs then local rateLimiterKey = keys[6]; expireTime = tonumber(rcall("PTTL", rateLimiterKey)) @@ -45,7 +45,7 @@ local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts rcall("RPUSH", keys[1], jobId) -- Return when we can process more jobs - return {0, 0, expireTime} + return {0, 0, expireTime, 0} end end @@ -62,5 +62,5 @@ local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts rcall("HSET", jobKey, "processedOn", processedOn) rcall("HINCRBY", jobKey, "attemptsMade", 1) - return {rcall("HGETALL", jobKey), jobId, expireTime} -- get job data + return {rcall("HGETALL", jobKey), jobId, 0, 0} -- get job data end diff --git a/src/commands/moveToActive-9.lua b/src/commands/moveToActive-9.lua index 3e9e905799..3aeed70173 100644 --- a/src/commands/moveToActive-9.lua +++ b/src/commands/moveToActive-9.lua @@ -56,7 +56,7 @@ else opts = cmsgpack.unpack(ARGV[4]) local pttl = getRateLimitTTL(opts, KEYS[6]) if pttl > 0 then - return { 0, 0, pttl } + return { 0, 0, pttl, 0 } end -- no job ID, try non-blocking move from wait to active @@ -90,3 +90,5 @@ local nextTimestamp = getNextDelayedTimestamp(KEYS[7]) if (nextTimestamp ~= nil) then return { 0, 0, 0, nextTimestamp} end + +return { 0, 0, 0, 0} diff --git a/src/commands/moveToFinished-12.lua b/src/commands/moveToFinished-12.lua index a13cd36113..d3d6979a01 100644 --- a/src/commands/moveToFinished-12.lua +++ b/src/commands/moveToFinished-12.lua @@ -194,7 +194,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists -- Check if we are rate limited first. local pttl = getRateLimitTTL(opts, KEYS[6]) - if pttl > 0 then return {0, 0, pttl} end + if pttl > 0 then return {0, 0, pttl, 0} end jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) @@ -203,7 +203,6 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists if string.sub(jobId, 1, 2) == "0:" then rcall("LREM", KEYS[2], 1, jobId) else - opts = opts or cmsgpack.unpack(ARGV[4]) -- this script is not really moving, it is preparing the job for processing return moveJobFromWaitToActive(KEYS, ARGV[8], jobId, timestamp, opts) end @@ -211,7 +210,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists -- Return the timestamp for the next delayed job if any. local nextTimestamp = getNextDelayedTimestamp(KEYS[7]) - if (nextTimestamp ~= nil) then + if nextTimestamp ~= nil then -- The result is guaranteed to be positive, since the -- ZRANGEBYSCORE command would have return a job otherwise. return {0, 0, 0, nextTimestamp} From 945bcd39db0f76ef6e9a513304714c120317c7f3 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 2 Jun 2023 19:27:52 -0500 Subject: [PATCH 100/322] feat(python): add changePriority method (#1943) --- python/bullmq/job.py | 3 +++ python/bullmq/scripts.py | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/python/bullmq/job.py b/python/bullmq/job.py index e1ff5a8863..9c07b7e1db 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -65,6 +65,9 @@ def retry(self, state: str = "failed"): def getState(self): return self.scripts.getState(self.id) + def changePriority(self, opts: dict): + return self.scripts.changePriority(self.id, opts.get("priority", 0), opts.get("lifo", False)) + def updateProgress(self, progress): self.progress = progress return self.scripts.updateProgress(self.id, progress) diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 31add57e9d..cb291d1ad5 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -31,6 +31,7 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection self.redisClient = redisConnection.conn self.commands = { "addJob": self.redisClient.register_script(self.getScript("addJob-8.lua")), + "changePriority": self.redisClient.register_script(self.getScript("changePriority-4.lua")), "extendLock": self.redisClient.register_script(self.getScript("extendLock-2.lua")), "getCounts": self.redisClient.register_script(self.getScript("getCounts-1.lua")), "getState": self.redisClient.register_script(self.getScript("getState-7.lua")), @@ -39,8 +40,8 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection "moveToDelayed": self.redisClient.register_script(self.getScript("moveToDelayed-8.lua")), "moveToFinished": self.redisClient.register_script(self.getScript("moveToFinished-12.lua")), "moveStalledJobsToWait": self.redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), - "pause": self.redisClient.register_script(self.getScript("pause-4.lua")), "obliterate": self.redisClient.register_script(self.getScript("obliterate-2.lua")), + "pause": self.redisClient.register_script(self.getScript("pause-4.lua")), "reprocessJob": self.redisClient.register_script(self.getScript("reprocessJob-6.lua")), "retryJob": self.redisClient.register_script(self.getScript("retryJob-8.lua")), "retryJobs": self.redisClient.register_script(self.getScript("retryJobs-6.lua")), @@ -168,6 +169,21 @@ async def getState(self, job_id): result = await self.commands["getStateV2"](keys=keys, args=args) return result + async def changePriority(self, job_id: str, priority:int = 0, lifo:bool = False): + keys = [self.keys['wait'], + self.keys['paused'], + self.keys['meta'], + self.keys['priority']] + + args = [priority, self.toKey(job_id), job_id, 1 if lifo else 0] + + result = await self.commands["changePriority"](keys=keys, args=args) + + if result is not None: + if result < 0: + raise self.finishedErrors(result, job_id, 'updateData') + return None + async def updateData(self, job_id: str, data): keys = [self.toKey(job_id)] data_json = json.dumps(data, separators=(',', ':')) From bcc8030799907340f2f3db03edb2d83c77a52fb0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 3 Jun 2023 17:01:32 -0500 Subject: [PATCH 101/322] chore(deps): update actions/setup-python digest to bd6b4b6 (#1916) --- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 51124a2a41..7b3563296b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,7 +35,7 @@ jobs: run: npx semantic-release - run: yarn copy:lua:python - name: Setup Python - uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # v4 + uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # v4 with: python-version: '3.10' cache: 'pip' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2435ed7e58..75551776c5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -116,7 +116,7 @@ jobs: - run: yarn copy:lua:python - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # v4 + uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # v4 with: python-version: ${{ matrix.python-version }} From d97864a550992aeb8673557c7d8f186ab4ccb5bf Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 5 Jun 2023 16:21:13 -0500 Subject: [PATCH 102/322] fix(rate-limit): consider paused queue (#1931) --- src/commands/includes/getRateLimitTTL.lua | 16 +++--- .../includes/moveJobFromWaitToActive.lua | 16 ++---- src/commands/moveToActive-9.lua | 18 ++++--- src/commands/moveToFinished-12.lua | 8 +-- tests/test_rate_limiter.ts | 54 +++++++++++++++++++ 5 files changed, 84 insertions(+), 28 deletions(-) diff --git a/src/commands/includes/getRateLimitTTL.lua b/src/commands/includes/getRateLimitTTL.lua index 8a74d56786..dc9072aa5d 100644 --- a/src/commands/includes/getRateLimitTTL.lua +++ b/src/commands/includes/getRateLimitTTL.lua @@ -1,10 +1,14 @@ -local function getRateLimitTTL(opts, limiterKey) - local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max']) +local function getRateLimitTTL(maxJobs, rateLimiterKey) if maxJobs then - local jobCounter = tonumber(rcall("GET", limiterKey)) - if jobCounter ~= nil and jobCounter >= maxJobs then - local pttl = rcall("PTTL", limiterKey) - if pttl > 0 then + local pttl = rcall("PTTL", rateLimiterKey) + + if pttl <= 0 then + rcall("DEL", rateLimiterKey) + end + + local jobCounter = tonumber(rcall("GET", rateLimiterKey) or 0) + if jobCounter >= maxJobs then + if pttl > 0 then return pttl end end diff --git a/src/commands/includes/moveJobFromWaitToActive.lua b/src/commands/includes/moveJobFromWaitToActive.lua index 0fcc8a2698..5602d73c02 100644 --- a/src/commands/includes/moveJobFromWaitToActive.lua +++ b/src/commands/includes/moveJobFromWaitToActive.lua @@ -17,19 +17,11 @@ opts - limiter ]] -local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts) +local function moveJobFromWaitToActive(keys, keyPrefix, targetKey, jobId, processedOn, + maxJobs, expireTime, opts) -- Check if we need to perform rate limiting. - local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max']) - local expireTime - if maxJobs then local rateLimiterKey = keys[6]; - - expireTime = tonumber(rcall("PTTL", rateLimiterKey)) - if expireTime <= 0 then - rcall("DEL", rateLimiterKey) - end - local jobCounter = tonumber(rcall("INCR", rateLimiterKey)) if jobCounter == 1 then @@ -39,10 +31,10 @@ local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts end -- check if we passed rate limit, we need to remove the job and return expireTime - if jobCounter > maxJobs then + if expireTime > 0 then -- remove from active queue and add back to the wait list rcall("LREM", keys[2], 1, jobId) - rcall("RPUSH", keys[1], jobId) + rcall("RPUSH", targetKey, jobId) -- Return when we can process more jobs return {0, 0, expireTime, 0} diff --git a/src/commands/moveToActive-9.lua b/src/commands/moveToActive-9.lua index 3aeed70173..44a37314ef 100644 --- a/src/commands/moveToActive-9.lua +++ b/src/commands/moveToActive-9.lua @@ -46,17 +46,17 @@ local target = getTargetQueueList(KEYS[9], KEYS[1], KEYS[8]) -- Check if there are delayed jobs that we can move to wait. promoteDelayedJobs(KEYS[7], target, KEYS[3], KEYS[4], ARGV[1], ARGV[2]) -local opts +local opts = cmsgpack.unpack(ARGV[4]) +local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max']) +local expireTime = getRateLimitTTL(maxJobs, KEYS[6]) if (ARGV[3] ~= "") then jobId = ARGV[3] -- clean stalled key rcall("SREM", KEYS[5], jobId) else -- Check if we are rate limited first. - opts = cmsgpack.unpack(ARGV[4]) - local pttl = getRateLimitTTL(opts, KEYS[6]) - if pttl > 0 then - return { 0, 0, pttl, 0 } + if expireTime > 0 then + return { 0, 0, expireTime, 0 } end -- no job ID, try non-blocking move from wait to active @@ -67,6 +67,11 @@ end if jobId then if string.sub(jobId, 1, 2) == "0:" then rcall("LREM", KEYS[2], 1, jobId) + + if expireTime > 0 then + return { 0, 0, expireTime, 0 } + end + -- Move again since we just got the marker job. jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) @@ -79,9 +84,8 @@ if jobId then end if jobId then - opts = opts or cmsgpack.unpack(ARGV[4]) -- this script is not really moving, it is preparing the job for processing - return moveJobFromWaitToActive(KEYS, ARGV[1], jobId, ARGV[2], opts) + return moveJobFromWaitToActive(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, opts) end end diff --git a/src/commands/moveToFinished-12.lua b/src/commands/moveToFinished-12.lua index d3d6979a01..76c73b293c 100644 --- a/src/commands/moveToFinished-12.lua +++ b/src/commands/moveToFinished-12.lua @@ -192,9 +192,11 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists promoteDelayedJobs(KEYS[7], target, KEYS[3], KEYS[4], ARGV[8], timestamp) + local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max']) -- Check if we are rate limited first. - local pttl = getRateLimitTTL(opts, KEYS[6]) - if pttl > 0 then return {0, 0, pttl, 0} end + local expireTime = getRateLimitTTL(maxJobs, KEYS[6]) + + if expireTime > 0 then return {0, 0, expireTime, 0} end jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) @@ -204,7 +206,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists rcall("LREM", KEYS[2], 1, jobId) else -- this script is not really moving, it is preparing the job for processing - return moveJobFromWaitToActive(KEYS, ARGV[8], jobId, timestamp, opts) + return moveJobFromWaitToActive(KEYS, ARGV[8], target, jobId, timestamp, maxJobs, expireTime, opts) end end diff --git a/tests/test_rate_limiter.ts b/tests/test_rate_limiter.ts index 48d886d139..005eb907d2 100644 --- a/tests/test_rate_limiter.ts +++ b/tests/test_rate_limiter.ts @@ -107,6 +107,60 @@ describe('Rate Limiter', function () { await worker.close(); }); + describe('when queue is paused between rate limit', () => { + it('should add active jobs to paused', async function () { + this.timeout(20000); + + const numJobs = 4; + + const commontOpts = { + connection, + limiter: { + max: 1, + duration: 2000, + }, + }; + const worker1 = new Worker(queueName, async () => {}, commontOpts); + const worker2 = new Worker(queueName, async () => {}, commontOpts); + const worker3 = new Worker(queueName, async () => {}, commontOpts); + const worker4 = new Worker(queueName, async () => {}, commontOpts); + + const result = new Promise((resolve, reject) => { + queueEvents.once('completed', async () => { + resolve(); + }); + + queueEvents.on('failed', async err => { + reject(err); + }); + }); + + await delay(500); + + const jobs = Array.from(Array(numJobs).keys()).map(() => ({ + name: 'rate test', + data: {}, + })); + await queue.addBulk(jobs); + + await queue.pause(); + + await result; + + await delay(500); + + const counts = await queue.getJobCounts('paused', 'completed', 'wait'); + expect(counts).to.have.property('paused', numJobs - 1); + expect(counts).to.have.property('completed', 1); + expect(counts).to.have.property('wait', 0); + + await worker1.close(); + await worker2.close(); + await worker3.close(); + await worker4.close(); + }); + }); + describe('when using flows', () => { it('should obey the rate limit per queue', async function () { this.timeout(20000); From b1097c9d72dbe2cde7e2e5f6019d49e34d69b6b5 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 5 Jun 2023 21:22:09 +0000 Subject: [PATCH 103/322] chore(release): 3.15.1 [skip ci] ## [3.15.1](https://github.com/taskforcesh/bullmq/compare/v3.15.0...v3.15.1) (2023-06-05) ### Bug Fixes * **rate-limit:** consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) ### Features * **python:** add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) --- docs/gitbook/changelog.md | 12 ++++++++++++ package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index f575dfe618..75c04db087 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,15 @@ +## [3.15.1](https://github.com/taskforcesh/bullmq/compare/v3.15.0...v3.15.1) (2023-06-05) + + +### Bug Fixes + +* **rate-limit:** consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) + + +### Features + +* **python:** add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) + # [3.15.0](https://github.com/taskforcesh/bullmq/compare/v3.14.2...v3.15.0) (2023-05-31) diff --git a/package.json b/package.json index fc90c1993f..5f7644c2e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.15.0", + "version": "3.15.1", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From c5f63affe72f7b6616f4c5f3aafde858dcc0b200 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Tue, 6 Jun 2023 22:56:33 +0200 Subject: [PATCH 104/322] fix(worker): better worker client naming --- src/classes/worker.ts | 20 ++++++-------------- tests/test_getters.ts | 2 +- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/classes/worker.ts b/src/classes/worker.ts index 80c5ac489e..36db701ce6 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -272,24 +272,16 @@ export class Worker< } } + const connectionName = this.clientName(WORKER_SUFFIX); this.blockingConnection = new RedisConnection( isRedisInstance(opts.connection) - ? (opts.connection).duplicate() - : opts.connection, + ? (opts.connection).duplicate({ connectionName }) + : { ...opts.connection, connectionName }, ); this.blockingConnection.on('error', error => this.emit('error', error)); - - this.blockingConnection.on('ready', async () => { - try { - const client = await this.blockingConnection.client; - await client.client('SETNAME', this.clientName(WORKER_SUFFIX)); - } catch (error) { - if (!clientCommandMessageReg.test((error).message)) { - this.emit('error', error); - } - } - this.emit('ready'); - }); + this.blockingConnection.on('ready', () => + setTimeout(() => this.emit('ready'), 0), + ); } emit>( diff --git a/tests/test_getters.ts b/tests/test_getters.ts index 6b6e7dcd6a..d1ca3cf45b 100644 --- a/tests/test_getters.ts +++ b/tests/test_getters.ts @@ -113,7 +113,7 @@ describe('Jobs getters', function () { describe('when sharing connection', () => { // Test is very flaky on CI, so we skip it for now. - it.skip('gets all workers for a given queue', async function () { + it('gets all workers for a given queue', async function () { const ioredisConnection = new IORedis({ maxRetriesPerRequest: null }); const worker = new Worker(queueName, async () => {}, { From 492f686e685744511e3f817bf5f1d503e8094392 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 6 Jun 2023 21:05:45 +0000 Subject: [PATCH 105/322] chore(release): 3.15.2 [skip ci] ## [3.15.2](https://github.com/taskforcesh/bullmq/compare/v3.15.1...v3.15.2) (2023-06-06) ### Bug Fixes * **worker:** better worker client naming ([c5f63af](https://github.com/taskforcesh/bullmq/commit/c5f63affe72f7b6616f4c5f3aafde858dcc0b200)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 75c04db087..4916ff91d4 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [3.15.2](https://github.com/taskforcesh/bullmq/compare/v3.15.1...v3.15.2) (2023-06-06) + + +### Bug Fixes + +* **worker:** better worker client naming ([c5f63af](https://github.com/taskforcesh/bullmq/commit/c5f63affe72f7b6616f4c5f3aafde858dcc0b200)) + ## [3.15.1](https://github.com/taskforcesh/bullmq/compare/v3.15.0...v3.15.1) (2023-06-05) diff --git a/package.json b/package.json index 5f7644c2e3..a18ff3bf9d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.15.1", + "version": "3.15.2", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 8ad2e124ea75a110981779b1fddb082f6210ac54 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 7 Jun 2023 11:22:08 +0200 Subject: [PATCH 106/322] chore(python): bump to version 0.4.3 --- python/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/setup.py b/python/setup.py index 92486932ed..683962e09c 100644 --- a/python/setup.py +++ b/python/setup.py @@ -10,7 +10,7 @@ setup( name='bullmq', - version='0.4.1', + version='0.4.3', description='BullMQ for Python', long_description=long_description, long_description_content_type="text/markdown", From c884c3550d48df11ddb1e50f0500aef37cb89a66 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Wed, 7 Jun 2023 15:08:34 -0500 Subject: [PATCH 107/322] chore(deps): upgrade sinon --- package.json | 2 +- yarn.lock | 46 ++++++++++++++++------------------------------ 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index a18ff3bf9d..f8615b078c 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "rimraf": "^3.0.2", "rrule": "^2.6.9", "semantic-release": "^19.0.3", - "sinon": "^14.0.0", + "sinon": "^15.1.0", "test-console": "^2.0.0", "ts-mocha": "^10.0.0", "ts-node": "^10.7.0", diff --git a/yarn.lock b/yarn.lock index 66b8f7efc7..03774477e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -945,13 +945,6 @@ lodash "^4.17.4" read-pkg-up "^7.0.0" -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== - dependencies: - type-detect "4.0.8" - "@sinonjs/commons@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" @@ -966,24 +959,17 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^10.0.2": +"@sinonjs/fake-timers@^10.0.2", "@sinonjs/fake-timers@^10.2.0": version "10.2.0" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz#b3e322a34c5f26e3184e7f6115695f299c1b1194" integrity sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg== dependencies: "@sinonjs/commons" "^3.0.0" -"@sinonjs/fake-timers@^9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" - integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@sinonjs/samsam@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-7.0.1.tgz#5b5fa31c554636f78308439d220986b9523fc51f" - integrity sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw== +"@sinonjs/samsam@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.0.tgz#0d488c91efb3fa1442e26abea81759dfc8b5ac60" + integrity sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew== dependencies: "@sinonjs/commons" "^2.0.0" lodash.get "^4.4.2" @@ -2490,7 +2476,7 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.0.0, diff@^5.1.0: +diff@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== @@ -5191,7 +5177,7 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nise@^5.1.2: +nise@^5.1.4: version "5.1.4" resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.4.tgz#491ce7e7307d4ec546f5a659b2efe94a18b4bbc0" integrity sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg== @@ -6662,16 +6648,16 @@ signale@^1.2.1: figures "^2.0.0" pkg-conf "^2.1.0" -sinon@^14.0.0: - version "14.0.2" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-14.0.2.tgz#585a81a3c7b22cf950762ac4e7c28eb8b151c46f" - integrity sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w== +sinon@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.1.0.tgz#87656841545f7c63bd1e291df409fafd0e9aec09" + integrity sha512-cS5FgpDdE9/zx7no8bxROHymSlPLZzq0ChbbLk1DrxBfc+eTeBK3y8nIL+nu/0QeYydhhbLIr7ecHJpywjQaoQ== dependencies: - "@sinonjs/commons" "^2.0.0" - "@sinonjs/fake-timers" "^9.1.2" - "@sinonjs/samsam" "^7.0.1" - diff "^5.0.0" - nise "^5.1.2" + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers" "^10.2.0" + "@sinonjs/samsam" "^8.0.0" + diff "^5.1.0" + nise "^5.1.4" supports-color "^7.2.0" slash@^3.0.0: From 83cd06049ead23a4a6ab4ac6dbb53371ca678ab5 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 7 Jun 2023 15:12:19 -0500 Subject: [PATCH 108/322] ci(python): add python-semantic-release (#1957) --- .github/workflows/release.yml | 7 +++++-- python/bullmq/__init__.py | 2 +- python/requirements.txt | 4 +++- python/setup.cfg | 5 +++++ python/setup.py | 9 ++++++++- 5 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 python/setup.cfg diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7b3563296b..0a9c094472 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,6 +52,9 @@ jobs: flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics cd python - name: Release Python - if: ${{ startsWith(env.commitmsg, 'ci(python)') }} + if: ${{ startsWith(env.commitmsg, 'feat(python)') || startsWith(env.commitmsg, 'fix(python)') }} run: | - echo Commit MSG = $commitmsg + export VERSION=$(semantic-release print-version) + if [ ! -z "$VERSION" ]; then + GH_TOKEN=${{ secrets.GITHUB_TOKEN }} PYPI_TOKEN=${{ secrets.PYPI_TOKEN }} semantic-release publish + fi diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index a2d48b14dc..0bfd08d863 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "0.1.0" +__version__ = "0.4.3" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/requirements.txt b/python/requirements.txt index 14676afe63..a58ae14671 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -5,8 +5,10 @@ filelock==3.12.0 msgpack==1.0.5 pipenv==2023.5.19 platformdirs==3.5.1 +pre-commit==2.20.0 +python-semantic-release==7.34.3 redis==4.5.5 -semver==3.0.0 +semver==2.13.0 six==1.16.0 virtualenv==20.23.0 virtualenv-clone==0.5.7 diff --git a/python/setup.cfg b/python/setup.cfg new file mode 100644 index 0000000000..2475e16196 --- /dev/null +++ b/python/setup.cfg @@ -0,0 +1,5 @@ +[semantic_release] +branch = master +version_variable = bullmq/__init__.py:__version__ +build_command = python3 setup.py sdist +tag_format = vpy{version} \ No newline at end of file diff --git a/python/setup.py b/python/setup.py index 683962e09c..88577dc5eb 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,4 +1,5 @@ from setuptools import setup +from bullmq import __version__ # To use a consistent encoding from codecs import open @@ -10,7 +11,7 @@ setup( name='bullmq', - version='0.4.3', + version=__version__, description='BullMQ for Python', long_description=long_description, long_description_content_type="text/markdown", @@ -25,6 +26,12 @@ 'msgpack', 'semver', ], + extras_require={ + "dev": [ + "pre-commit==2.20.0", + "python-semantic-release==7.34.3", + ] + }, classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', From 49e078c7e15d6548c9c71669cf15fd38f67da2cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:13:19 +0000 Subject: [PATCH 109/322] chore(deps): update dependency pre-commit to v3 --- python/requirements.txt | 2 +- python/setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/requirements.txt b/python/requirements.txt index a58ae14671..763b184524 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -5,7 +5,7 @@ filelock==3.12.0 msgpack==1.0.5 pipenv==2023.5.19 platformdirs==3.5.1 -pre-commit==2.20.0 +pre-commit==3.3.2 python-semantic-release==7.34.3 redis==4.5.5 semver==2.13.0 diff --git a/python/setup.py b/python/setup.py index 88577dc5eb..e1445d5841 100644 --- a/python/setup.py +++ b/python/setup.py @@ -28,7 +28,7 @@ ], extras_require={ "dev": [ - "pre-commit==2.20.0", + "pre-commit==3.3.2", "python-semantic-release==7.34.3", ] }, From 75e280316a123c1620a408a0c91b3923f4408c83 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:12:37 +0000 Subject: [PATCH 110/322] chore(deps): update coverallsapp/github-action digest to c7885c0 --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 75551776c5..31119c1e14 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,7 +43,7 @@ jobs: - run: yarn coverage - name: Upload LCOV to Coveralls if: ${{ ( github.event_name == 'pull_request' && github.event.pull_request.head.fork == false ) || github.event_name == 'push' }} - uses: coverallsapp/github-action@059e56d143348431aafb4917fc9843532d0b6ac5 # branch=master + uses: coverallsapp/github-action@c7885c00cb7ec0b8f9f5ff3f53cddb980f7a4412 # branch=master with: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Check coverage change not below threshold From f1badc1d3ffbc0e5f70df4881a9e4586505083a7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:13:07 +0000 Subject: [PATCH 111/322] chore(deps): update dependency tslib to v2.5.3 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 03774477e4..bfa5f4c186 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7232,9 +7232,9 @@ tslib@^1.8.1: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" - integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + version "2.5.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" + integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== tsutils@^3.21.0: version "3.21.0" From 646707bf5559ce5ee129527b8c5905922af4002d Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 8 Jun 2023 09:24:54 -0500 Subject: [PATCH 112/322] ci(python): use contains method instead of startsWith --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0a9c094472..e37455d9f8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,7 @@ jobs: flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics cd python - name: Release Python - if: ${{ startsWith(env.commitmsg, 'feat(python)') || startsWith(env.commitmsg, 'fix(python)') }} + if: ${{ contains(env.commitmsg, '(python):') }} run: | export VERSION=$(semantic-release print-version) if [ ! -z "$VERSION" ]; then From d15581d21bc9e5ed826c92b26cbe2f2b82c1c416 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 8 Jun 2023 09:38:27 -0500 Subject: [PATCH 113/322] ci(python): move into python subfolder when releasing --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e37455d9f8..605a4f4a3f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -50,10 +50,10 @@ jobs: flake8 ./python --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - cd python - name: Release Python if: ${{ contains(env.commitmsg, '(python):') }} run: | + cd python export VERSION=$(semantic-release print-version) if [ ! -z "$VERSION" ]; then GH_TOKEN=${{ secrets.GITHUB_TOKEN }} PYPI_TOKEN=${{ secrets.PYPI_TOKEN }} semantic-release publish From 881848c1ee3835dac24daf6807b1f35da967f68b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C5=A0ajd=C3=ADk?= <30591067+MichalSajdik@users.noreply.github.com> Date: Thu, 8 Jun 2023 16:40:04 +0200 Subject: [PATCH 114/322] fix(job): use QueueEvents type for waitUntilFinished (#1958) --- .madgerc | 7 +++++++ src/classes/job.ts | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .madgerc diff --git a/.madgerc b/.madgerc new file mode 100644 index 0000000000..b407c6b4b1 --- /dev/null +++ b/.madgerc @@ -0,0 +1,7 @@ +{ + "detectiveOptions": { + "ts": { + "skipTypeImports": true + } + } +} diff --git a/src/classes/job.ts b/src/classes/job.ts index 9d72416a35..0e448d6ac2 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -33,6 +33,7 @@ import { import { Backoffs } from './backoffs'; import { Scripts } from './scripts'; import { UnrecoverableError } from './unrecoverable-error'; +import type { QueueEvents } from '@src/classes/queue-events'; const logger = debuglog('bull'); @@ -917,7 +918,7 @@ export class Job< * @param ttl - Time in milliseconds to wait for job to finish before timing out. */ async waitUntilFinished( - queueEvents: MinimalQueue, + queueEvents: QueueEvents, ttl?: number, ): Promise { await this.queue.waitUntilReady(); From 0db3d46690acdf4b8b703427ba3fbed0893724e1 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 8 Jun 2023 14:40:52 +0000 Subject: [PATCH 115/322] chore(release): 3.15.3 [skip ci] ## [3.15.3](https://github.com/taskforcesh/bullmq/compare/v3.15.2...v3.15.3) (2023-06-08) ### Bug Fixes * **job:** use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([881848c](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 4916ff91d4..f88a98b279 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [3.15.3](https://github.com/taskforcesh/bullmq/compare/v3.15.2...v3.15.3) (2023-06-08) + + +### Bug Fixes + +* **job:** use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([881848c](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) + ## [3.15.2](https://github.com/taskforcesh/bullmq/compare/v3.15.1...v3.15.2) (2023-06-06) diff --git a/package.json b/package.json index f8615b078c..1f3dd6ef38 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.15.2", + "version": "3.15.3", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 973a9d357fc954ea6c44b2e14e18aef766208129 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 8 Jun 2023 10:00:04 -0500 Subject: [PATCH 116/322] ci(python): use version_source --- python/setup.cfg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/setup.cfg b/python/setup.cfg index 2475e16196..ae55a1d1f4 100644 --- a/python/setup.cfg +++ b/python/setup.cfg @@ -2,4 +2,5 @@ branch = master version_variable = bullmq/__init__.py:__version__ build_command = python3 setup.py sdist -tag_format = vpy{version} \ No newline at end of file +tag_format = vpy{version} +version_source = tag \ No newline at end of file From 8002570555b1dfdfed3d3d331de23173d9cc67c8 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 8 Jun 2023 10:12:47 -0500 Subject: [PATCH 117/322] ci(python): use version_source as commit --- python/setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/setup.cfg b/python/setup.cfg index ae55a1d1f4..a0090c066e 100644 --- a/python/setup.cfg +++ b/python/setup.cfg @@ -3,4 +3,4 @@ branch = master version_variable = bullmq/__init__.py:__version__ build_command = python3 setup.py sdist tag_format = vpy{version} -version_source = tag \ No newline at end of file +version_source = commit \ No newline at end of file From 8a7cd621d57aaceb1e432445fb86598dfb12cb55 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 8 Jun 2023 10:28:19 -0500 Subject: [PATCH 118/322] ci(python): downgrade python-semantic-release to avoid version issue --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index 763b184524..ce55ff39de 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -6,7 +6,7 @@ msgpack==1.0.5 pipenv==2023.5.19 platformdirs==3.5.1 pre-commit==3.3.2 -python-semantic-release==7.34.3 +python-semantic-release==7.28.1 redis==4.5.5 semver==2.13.0 six==1.16.0 From 38d23aed22ca0eb16171a013c37b51cdb403e8be Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 8 Jun 2023 10:34:24 -0500 Subject: [PATCH 119/322] ci(python): set user git information --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 605a4f4a3f..559eedfb7f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,6 +54,8 @@ jobs: if: ${{ contains(env.commitmsg, '(python):') }} run: | cd python + git config --global user.email "manast@taskforce.sh" + git config --global user.name "manast" export VERSION=$(semantic-release print-version) if [ ! -z "$VERSION" ]; then GH_TOKEN=${{ secrets.GITHUB_TOKEN }} PYPI_TOKEN=${{ secrets.PYPI_TOKEN }} semantic-release publish From ba2084f45eba6a72da962316cbb86a7d9b3f37b3 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Thu, 8 Jun 2023 15:35:44 +0000 Subject: [PATCH 120/322] 0.4.4 Automatically generated by python-semantic-release --- python/CHANGELOG.md | 7 +++++++ python/bullmq/__init__.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 python/CHANGELOG.md diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md new file mode 100644 index 0000000000..759f0cb015 --- /dev/null +++ b/python/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + + + +## v0.4.4 (2023-06-08) +### Fix +* **job:** Use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([`881848c`](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 0bfd08d863..c3692b124c 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "0.4.3" +__version__ = "0.4.4" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From ef0f7ed1d4e9e1b4f8bf7aecd79bc677c956ff67 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 8 Jun 2023 10:53:10 -0500 Subject: [PATCH 121/322] ci(python): install packaging module --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 559eedfb7f..584b2d1626 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,6 +54,7 @@ jobs: if: ${{ contains(env.commitmsg, '(python):') }} run: | cd python + pip install packaging git config --global user.email "manast@taskforce.sh" git config --global user.name "manast" export VERSION=$(semantic-release print-version) From 689c84567f3a9fea51f349ca93b3008d5c187f62 Mon Sep 17 00:00:00 2001 From: Quentin Sommer Date: Thu, 8 Jun 2023 13:33:03 -0400 Subject: [PATCH 122/322] fix(job): import right reference of QueueEvents (#1964) --- src/classes/job.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/classes/job.ts b/src/classes/job.ts index 0e448d6ac2..5b3b3e7c30 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -33,7 +33,7 @@ import { import { Backoffs } from './backoffs'; import { Scripts } from './scripts'; import { UnrecoverableError } from './unrecoverable-error'; -import type { QueueEvents } from '@src/classes/queue-events'; +import type { QueueEvents } from './queue-events'; const logger = debuglog('bull'); From 2ea74830cf0363ea39b077258d70f996f255a519 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 8 Jun 2023 17:34:04 +0000 Subject: [PATCH 123/322] chore(release): 3.15.4 [skip ci] ## [3.15.4](https://github.com/taskforcesh/bullmq/compare/v3.15.3...v3.15.4) (2023-06-08) ### Bug Fixes * **job:** import right reference of QueueEvents ([#1964](https://github.com/taskforcesh/bullmq/issues/1964)) ([689c845](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index f88a98b279..d42c22c7ae 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [3.15.4](https://github.com/taskforcesh/bullmq/compare/v3.15.3...v3.15.4) (2023-06-08) + + +### Bug Fixes + +* **job:** import right reference of QueueEvents ([#1964](https://github.com/taskforcesh/bullmq/issues/1964)) ([689c845](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) + ## [3.15.3](https://github.com/taskforcesh/bullmq/compare/v3.15.2...v3.15.3) (2023-06-08) diff --git a/package.json b/package.json index 1f3dd6ef38..cadc943446 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.15.3", + "version": "3.15.4", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 6a172e97e65684f65ee570c2ae9bcc108720d5df Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 9 Jun 2023 00:19:37 -0500 Subject: [PATCH 124/322] feat(python): add remove job method (#1965) --- python/bullmq/job.py | 6 ++++++ python/bullmq/scripts.py | 9 ++++++++- src/classes/worker.ts | 1 - 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 9c07b7e1db..6c0709b795 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -72,6 +72,12 @@ def updateProgress(self, progress): self.progress = progress return self.scripts.updateProgress(self.id, progress) + async def remove(self): + removed = await self.scripts.remove(self.id) + + if not removed: + raise Exception(f"Could not remove job {self.id}") + async def moveToFailed(self, err, token:str, fetchNext:bool = False): error_message = str(err) self.failedReason = error_message diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index cb291d1ad5..f595758125 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -36,12 +36,13 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection "getCounts": self.redisClient.register_script(self.getScript("getCounts-1.lua")), "getState": self.redisClient.register_script(self.getScript("getState-7.lua")), "getStateV2": self.redisClient.register_script(self.getScript("getStateV2-7.lua")), + "moveStalledJobsToWait": self.redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), "moveToActive": self.redisClient.register_script(self.getScript("moveToActive-9.lua")), "moveToDelayed": self.redisClient.register_script(self.getScript("moveToDelayed-8.lua")), "moveToFinished": self.redisClient.register_script(self.getScript("moveToFinished-12.lua")), - "moveStalledJobsToWait": self.redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), "obliterate": self.redisClient.register_script(self.getScript("obliterate-2.lua")), "pause": self.redisClient.register_script(self.getScript("pause-4.lua")), + "removeJob": self.redisClient.register_script(self.getScript("removeJob-1.lua")), "reprocessJob": self.redisClient.register_script(self.getScript("reprocessJob-6.lua")), "retryJob": self.redisClient.register_script(self.getScript("retryJob-8.lua")), "retryJobs": self.redisClient.register_script(self.getScript("retryJobs-6.lua")), @@ -147,6 +148,12 @@ async def moveToDelayed(self, job_id: str, timestamp: int, token: str = "0"): raise self.finishedErrors(result, job_id, 'moveToDelayed', 'active') return None + async def remove(self, job_id: str): + keys = self.getKeys(['']) + args = [job_id] + + return self.commands["removeJob"](keys=keys, args=args) + def getCounts(self, types): keys = self.getKeys(['']) transformed_types = list( diff --git a/src/classes/worker.ts b/src/classes/worker.ts index 36db701ce6..42fabf2b27 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -12,7 +12,6 @@ import { } from '../interfaces'; import { MinimalQueue } from '../types'; import { - clientCommandMessageReg, delay, DELAY_TIME_1, isNotConnectionError, From 609f8de152ae8d0c538c79a34ffab0b0c36ed44d Mon Sep 17 00:00:00 2001 From: semantic-release Date: Fri, 9 Jun 2023 05:20:45 +0000 Subject: [PATCH 125/322] 0.5.0 Automatically generated by python-semantic-release --- python/CHANGELOG.md | 7 +++++++ python/bullmq/__init__.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md index 759f0cb015..87e17b65d5 100644 --- a/python/CHANGELOG.md +++ b/python/CHANGELOG.md @@ -2,6 +2,13 @@ +## v0.5.0 (2023-06-09) +### Feature +* **python:** Add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) + +### Fix +* **job:** Import right reference of QueueEvents ([#1964](https://github.com/taskforcesh/bullmq/issues/1964)) ([`689c845`](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) + ## v0.4.4 (2023-06-08) ### Fix * **job:** Use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([`881848c`](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index c3692b124c..8cbb493e4b 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "0.4.4" +__version__ = "0.5.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From 1531db4ed74b218b08f7379e0e97e5a3fe709e63 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Fri, 9 Jun 2023 10:52:24 -0500 Subject: [PATCH 126/322] ci(python): check command files --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 584b2d1626..41a3f96874 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,6 +34,7 @@ jobs: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: npx semantic-release - run: yarn copy:lua:python + - run: ls ./python/bullmq/commands - name: Setup Python uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # v4 with: @@ -54,6 +55,7 @@ jobs: if: ${{ contains(env.commitmsg, '(python):') }} run: | cd python + ls ./bullmq/commands pip install packaging git config --global user.email "manast@taskforce.sh" git config --global user.name "manast" From fdaaff0d51aaf8d1b585c88071aabf9749cceeb2 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Fri, 9 Jun 2023 10:59:09 -0500 Subject: [PATCH 127/322] ci(python): add build execution before python release --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 41a3f96874..df3d10ee30 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,12 +28,14 @@ jobs: cache: 'yarn' - name: Install dependencies Node run: yarn install --frozen-lockfile --non-interactive + - run: yarn build - name: Release Node env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: npx semantic-release - run: yarn copy:lua:python + - run: ls ./python/bullmq - run: ls ./python/bullmq/commands - name: Setup Python uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # v4 From bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Fri, 9 Jun 2023 11:03:44 -0500 Subject: [PATCH 128/322] fix(python): include lua scripts when releasing --- .github/workflows/release.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index df3d10ee30..3b7bb62ca2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,8 +35,6 @@ jobs: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: npx semantic-release - run: yarn copy:lua:python - - run: ls ./python/bullmq - - run: ls ./python/bullmq/commands - name: Setup Python uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # v4 with: @@ -57,7 +55,6 @@ jobs: if: ${{ contains(env.commitmsg, '(python):') }} run: | cd python - ls ./bullmq/commands pip install packaging git config --global user.email "manast@taskforce.sh" git config --global user.name "manast" From 25d71a1c17f53fcf432463623b1047b25d9d3ce6 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Fri, 9 Jun 2023 16:05:37 +0000 Subject: [PATCH 129/322] 0.5.1 Automatically generated by python-semantic-release --- python/CHANGELOG.md | 4 ++++ python/bullmq/__init__.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md index 87e17b65d5..07353c8480 100644 --- a/python/CHANGELOG.md +++ b/python/CHANGELOG.md @@ -2,6 +2,10 @@ +## v0.5.1 (2023-06-09) +### Fix +* **python:** Include lua scripts when releasing ([`bb4f3b2`](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) + ## v0.5.0 (2023-06-09) ### Feature * **python:** Add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 8cbb493e4b..ba91dc82ce 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "0.5.0" +__version__ = "0.5.1" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From 85d8767e96d17dc013c2553dd41e88e2c32c31f0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 10 Jun 2023 17:11:48 -0500 Subject: [PATCH 130/322] chore(deps): update actions/checkout digest to c85c95e (#1968) --- .github/workflows/api.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 551fe51a8f..43fb831e8d 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -12,7 +12,7 @@ jobs: node-version: [lts/*] steps: - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 with: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 6600e05300..4c851f14f7 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -38,7 +38,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3b7bb62ca2..85f46a0c45 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 with: fetch-depth: 0 - name: Setup Node.js diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 31119c1e14..7afc8a7f8c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 - name: Use Node.js uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 with: @@ -73,7 +73,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 with: @@ -100,7 +100,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 From e753855eef248da73a5e9f6b18f4b79319dc2f86 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Sun, 11 Jun 2023 10:40:33 -0500 Subject: [PATCH 131/322] fix(retry-job): consider priority when moving job to wait (python) (#1969) --- .github/workflows/release.yml | 2 +- src/commands/moveToDelayed-8.lua | 1 - src/commands/retryJob-8.lua | 14 +++- tests/test_worker.ts | 125 ++++++++++++++++++++++--------- 4 files changed, 103 insertions(+), 39 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 85f46a0c45..344abe1655 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,7 @@ jobs: # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Release Python - if: ${{ contains(env.commitmsg, '(python):') }} + if: ${{ contains(env.commitmsg, '(python)') }} run: | cd python pip install packaging diff --git a/src/commands/moveToDelayed-8.lua b/src/commands/moveToDelayed-8.lua index c9a89ae58a..6dd1571a5d 100644 --- a/src/commands/moveToDelayed-8.lua +++ b/src/commands/moveToDelayed-8.lua @@ -30,7 +30,6 @@ local rcall = redis.call -- Includes --- @include "includes/addDelayMarkerIfNeeded" --- @include "includes/getTargetQueueList" ---- @include "includes/getNextDelayedTimestamp" --- @include "includes/promoteDelayedJobs" local jobKey = KEYS[5] diff --git a/src/commands/retryJob-8.lua b/src/commands/retryJob-8.lua index 88b4e05900..654d0a759d 100644 --- a/src/commands/retryJob-8.lua +++ b/src/commands/retryJob-8.lua @@ -28,10 +28,13 @@ local rcall = redis.call -- Includes +--- @include "includes/addJobWithPriority" --- @include "includes/getTargetQueueList" --- @include "includes/promoteDelayedJobs" local target = getTargetQueueList(KEYS[5], KEYS[2], KEYS[3]) +-- Check if there are delayed jobs that we can move to wait. +-- test example: when there are delayed jobs between retries promoteDelayedJobs(KEYS[7], target, KEYS[8], KEYS[6], ARGV[1], ARGV[2]) if rcall("EXISTS", KEYS[4]) == 1 then @@ -46,7 +49,16 @@ if rcall("EXISTS", KEYS[4]) == 1 then end rcall("LREM", KEYS[1], 0, ARGV[4]) - rcall(ARGV[3], target, ARGV[4]) + + local priority = tonumber(rcall("HGET", KEYS[4], "priority")) or 0 + + -- Standard or priority add + if priority == 0 then + rcall(ARGV[3], target, ARGV[4]) + else + -- Priority add + addJobWithPriority(KEYS[8], priority, target, ARGV[4]) + end -- Emit waiting event rcall("XADD", KEYS[6], "*", "event", "waiting", "jobId", ARGV[4], "prev", "failed") diff --git a/tests/test_worker.ts b/tests/test_worker.ts index cbe8744932..f3e538a316 100644 --- a/tests/test_worker.ts +++ b/tests/test_worker.ts @@ -2050,51 +2050,104 @@ describe('workers', function () { }); describe('when there are delayed jobs between retries', () => { - it('promotes delayed jobs', async () => { - let id = 0; + describe('when using retryJob', () => { + it('promotes delayed jobs first', async () => { + let id = 0; - const worker = new Worker( - queueName, - async job => { - id++; - await delay(200); - if (job.attemptsMade === 1) { - expect(job.id).to.be.eql(`${id}`); - } - if (job.id == '1' && job.attemptsMade < 2) { - throw new Error('Not yet!'); - } - }, - { connection }, - ); + const worker = new Worker( + queueName, + async job => { + id++; + await delay(200); + if (job.attemptsMade === 1) { + expect(job.id).to.be.eql(`${id}`); + } + if (job.id == '1' && job.attemptsMade < 2) { + throw new Error('Not yet!'); + } + }, + { connection }, + ); - await worker.waitUntilReady(); + await worker.waitUntilReady(); + + const completing = new Promise(resolve => { + worker.on('completed', after(4, resolve)); + }); + + await queue.add( + 'test', + { foo: 'bar' }, + { + attempts: 2, + }, + ); - const completing = new Promise(resolve => { - worker.on('completed', after(4, resolve)); + const jobs = Array.from(Array(3).keys()).map(index => ({ + name: 'test', + data: {}, + opts: { + delay: 200, + }, + })); + + await queue.addBulk(jobs); + + await completing; + + await worker.close(); }); + }); - await queue.add( - 'test', - { foo: 'bar' }, - { - attempts: 2, - }, - ); + describe('when job has more priority than delayed jobs', () => { + it('executes retried job first', async () => { + let id = 0; - const jobs = Array.from(Array(3).keys()).map(index => ({ - name: 'test', - data: {}, - opts: { - delay: 200, - }, - })); + const worker = new Worker( + queueName, + async job => { + await delay(200); + if (job.attemptsMade === 1) { + id++; + expect(job.id).to.be.eql(`${id}`); + } + if (job.id == '1' && job.attemptsMade < 2) { + throw new Error('Not yet!'); + } + }, + { connection }, + ); - await queue.addBulk(jobs); + await worker.waitUntilReady(); - await completing; + const completing = new Promise(resolve => { + worker.on('completed', after(4, resolve)); + }); - await worker.close(); + await queue.add( + 'test', + { foo: 'bar' }, + { + attempts: 2, + priority: 1, + }, + ); + + const jobs = Array.from(Array(3).keys()).map(index => ({ + name: 'test', + data: {}, + opts: { + delay: 200, + priority: 2, + }, + })); + + await queue.addBulk(jobs); + + await completing; + + await worker.close(); + }); }); }); From 69b94aae13033a385bccd93f82601a0c7c4f45a0 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 11 Jun 2023 15:41:35 +0000 Subject: [PATCH 132/322] chore(release): 3.15.5 [skip ci] ## [3.15.5](https://github.com/taskforcesh/bullmq/compare/v3.15.4...v3.15.5) (2023-06-11) ### Bug Fixes * **python:** include lua scripts when releasing ([bb4f3b2](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) * **retry-job:** consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([e753855](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) ### Features * **python:** add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([6a172e9](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) --- docs/gitbook/changelog.md | 13 +++++++++++++ package.json | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index d42c22c7ae..8b92b4f1ae 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,16 @@ +## [3.15.5](https://github.com/taskforcesh/bullmq/compare/v3.15.4...v3.15.5) (2023-06-11) + + +### Bug Fixes + +* **python:** include lua scripts when releasing ([bb4f3b2](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) +* **retry-job:** consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([e753855](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) + + +### Features + +* **python:** add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([6a172e9](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) + ## [3.15.4](https://github.com/taskforcesh/bullmq/compare/v3.15.3...v3.15.4) (2023-06-08) diff --git a/package.json b/package.json index cadc943446..97a349d65d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.15.4", + "version": "3.15.5", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From a527bac0e0e5921885a1f170ebddb508b3698211 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Sun, 11 Jun 2023 15:42:29 +0000 Subject: [PATCH 133/322] 0.5.2 Automatically generated by python-semantic-release --- python/CHANGELOG.md | 4 ++++ python/bullmq/__init__.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md index 07353c8480..3f641c7f45 100644 --- a/python/CHANGELOG.md +++ b/python/CHANGELOG.md @@ -2,6 +2,10 @@ +## v0.5.2 (2023-06-11) +### Fix +* **retry-job:** Consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([`e753855`](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) + ## v0.5.1 (2023-06-09) ### Fix * **python:** Include lua scripts when releasing ([`bb4f3b2`](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index ba91dc82ce..a764df9a02 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "0.5.1" +__version__ = "0.5.2" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From 77b4de7c3b41ae63e311a2c373e0d2fc787f2f53 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 12 Jun 2023 18:48:08 -0500 Subject: [PATCH 134/322] docs(python): add missing version sections (#1974) --- docs/gitbook/changelog.md | 44 --------------------------------- python/CHANGELOG.md | 51 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 48 insertions(+), 47 deletions(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 8b92b4f1ae..caba3a31fb 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -3,14 +3,8 @@ ### Bug Fixes -* **python:** include lua scripts when releasing ([bb4f3b2](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) * **retry-job:** consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([e753855](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) - -### Features - -* **python:** add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([6a172e9](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) - ## [3.15.4](https://github.com/taskforcesh/bullmq/compare/v3.15.3...v3.15.4) (2023-06-08) @@ -39,11 +33,6 @@ * **rate-limit:** consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) - -### Features - -* **python:** add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) - # [3.15.0](https://github.com/taskforcesh/bullmq/compare/v3.14.2...v3.15.0) (2023-05-31) @@ -56,17 +45,11 @@ ### Bug Fixes -* **python:** fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) * **rate-limit:** take in count priority ([#1919](https://github.com/taskforcesh/bullmq/issues/1919)) fixes [#1915](https://github.com/taskforcesh/bullmq/issues/1915) ([b8157a3](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) ## [3.14.1](https://github.com/taskforcesh/bullmq/compare/v3.14.0...v3.14.1) (2023-05-27) -### Features - -* **python:** add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) - - ### Performance Improvements * **retry-job:** get target queue list once ([#1921](https://github.com/taskforcesh/bullmq/issues/1921)) ([8a7a9dd](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) @@ -118,20 +101,8 @@ ### Bug Fixes -* **python:** stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) * **worker:** close open handles after closing ([#1861](https://github.com/taskforcesh/bullmq/issues/1861)) fixes [#1312](https://github.com/taskforcesh/bullmq/issues/1312) ([39286e8](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) - -### Features - -* **python:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) -* **python:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) -* **python:** add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([870da45](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) -* **python:** add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) -* **python:** add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) -* **python:** save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) -* **python:** support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) - # [3.12.0](https://github.com/taskforcesh/bullmq/compare/v3.11.0...v3.12.0) (2023-04-20) @@ -142,15 +113,8 @@ # [3.11.0](https://github.com/taskforcesh/bullmq/compare/v3.10.4...v3.11.0) (2023-04-17) -### Bug Fixes - -* **python:** correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([ef0c5d6](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) - - ### Features -* **python:** add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([46d6f94](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) -* **python:** improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([ec7c49e](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) * **upstash:** don't throw an error when detecting an upstash host ([2e06bca](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) ## [3.10.4](https://github.com/taskforcesh/bullmq/compare/v3.10.3...v3.10.4) (2023-04-05) @@ -159,7 +123,6 @@ ### Bug Fixes * **flow:** do not remove completed children results ([#1788](https://github.com/taskforcesh/bullmq/issues/1788)) fixes [#1778](https://github.com/taskforcesh/bullmq/issues/1778) ([04b547a](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) -* **python:** fix scripts typing on array2obj function ([#1786](https://github.com/taskforcesh/bullmq/issues/1786)) ([134f6ab](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) ## [3.10.3](https://github.com/taskforcesh/bullmq/compare/v3.10.2...v3.10.3) (2023-03-30) @@ -167,7 +130,6 @@ ### Bug Fixes * **flow:** consider removing dependency on removeOnFail true ([#1753](https://github.com/taskforcesh/bullmq/issues/1753)) ([de5a299](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) -* **python:** pass maxMetricsSize as empty string when it is not provided fixes [#1754](https://github.com/taskforcesh/bullmq/issues/1754) ([6bda2b2](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) ## [3.10.2](https://github.com/taskforcesh/bullmq/compare/v3.10.1...v3.10.2) (2023-03-22) @@ -238,12 +200,6 @@ * **worker:** failed event receives an optional job parameter ([#1702](https://github.com/taskforcesh/bullmq/issues/1702)) fixes [#1690](https://github.com/taskforcesh/bullmq/issues/1690) ([6009906](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) - -### Features - -* **python:** add retryJobs method ([#1688](https://github.com/taskforcesh/bullmq/issues/1688)) ([2745327](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) -* **python:** add trimEvents ([#1695](https://github.com/taskforcesh/bullmq/issues/1695)) ([ca48163](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) - # [3.7.0](https://github.com/taskforcesh/bullmq/compare/v3.6.6...v3.7.0) (2023-02-16) diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md index 3f641c7f45..a984e1ec5f 100644 --- a/python/CHANGELOG.md +++ b/python/CHANGELOG.md @@ -14,9 +14,54 @@ ### Feature * **python:** Add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) +## v0.4.4 (2023-06-08) ### Fix -* **job:** Import right reference of QueueEvents ([#1964](https://github.com/taskforcesh/bullmq/issues/1964)) ([`689c845`](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) +* **deps:** Downgrade python-semantic-release to avoid version issue + +## v0.4.3 (2023-06-07) +### Feature +* Add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) + +### Fix +* **rate-limit:** Consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) + +## v0.4.2 (2023-06-01) +### Fix +* **deps:** Fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) + +## v0.4.1 (2023-05-29) +### Feature +* **job:** Add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) + +## [v0.4.0](https://github.com/taskforcesh/bullmq/compare/46d6f94...01b621f) (2023-05-18) +### Feature +* **connection:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) +* **job:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) +* **job:** Add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([`870da45`](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) +* **job:** Add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) +* **job:** Add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) +* **job:** Save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) +* Support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) + +### Fix +* **retry:** Consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([`01b621f`](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) +* **worker:** Stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) + +## [v0.3.0](https://github.com/taskforcesh/bullmq/compare/ca48163...46d6f94) (2023-04-18) +### Feature +* **queue:** Add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([`46d6f94`](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) +* Improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([`ec7c49e`](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) -## v0.4.4 (2023-06-08) ### Fix -* **job:** Use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([`881848c`](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) +* Correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([`ef0c5d6`](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) +* Fix scripts typing on array2obj function ([#1786](https://github.com/taskforcesh/bullmq/issues/1786)) ([`134f6ab`](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) +* Pass maxMetricsSize as empty string when it is not provided fixes ([#1754](https://github.com/taskforcesh/bullmq/issues/1754)) ([`6bda2b2`](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) + +## [v0.2.0](https://github.com/taskforcesh/bullmq/compare/a97b22f...ca48163) (2023-03-29) +### Feature +* Add trimEvents method ([#1695](https://github.com/taskforcesh/bullmq/issues/1695)) ([`ca48163`](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) +* **queue:** Add retryJobs method ([#1688](https://github.com/taskforcesh/bullmq/issues/1688)) ([`2745327`](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) + +## v0.1.0 (2023-02-15) +### Feature +* Initial python package ([`a97b22f`](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) From 0df6afad5e71a693b721ba52ffa6be733ee45ccb Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 13 Jun 2023 11:44:35 -0500 Subject: [PATCH 135/322] fix(worker): use timeout as integer for redis lower than v6.0.0 (python) (#1981) --- docs/gitbook/python/changelog.md | 4 ++++ python/bullmq/worker.py | 7 +++++++ python/setup.cfg | 3 ++- src/classes/worker.ts | 11 +++++++---- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index d2f631c181..4c982264c0 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -1,3 +1,7 @@ +# Changelog + + + # [0.3.0](https://github.com/taskforcesh/bullmq/compare/ca48163...46d6f94) (2023-03-18) diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index abb84043a6..66bf6225a1 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -6,10 +6,12 @@ from bullmq.job import Job from bullmq.timer import Timer from bullmq.types import WorkerOptions +from bullmq.utils import isRedisVersionLowerThan import asyncio import traceback import time +import math class Worker(EventEmitter): def __init__(self, name: str, processor: Callable[[Job, str], asyncio.Future], opts: WorkerOptions = {}): @@ -104,6 +106,11 @@ async def getNextJob(self, token: str): if job is None: timeout = min(delay_until - int(time.time() * 1000) if delay_until else 5000, 5000) / 1000 + + redis_version = await self.blockingRedisConnection.getRedisVersion() + # Only Redis v6.0.0 and above supports doubles as block time + timeout = int(math.ceil(timeout)) if isRedisVersionLowerThan(redis_version, '6.0.0') else timeout + job_id = await self.bclient.brpoplpush(self.scripts.keys["wait"], self.scripts.keys["active"], timeout) if job_id: job, job_id, limit_until, delay_until = await self.scripts.moveToActive(token, self.opts, job_id) diff --git a/python/setup.cfg b/python/setup.cfg index a0090c066e..06820555ff 100644 --- a/python/setup.cfg +++ b/python/setup.cfg @@ -3,4 +3,5 @@ branch = master version_variable = bullmq/__init__.py:__version__ build_command = python3 setup.py sdist tag_format = vpy{version} -version_source = commit \ No newline at end of file +version_source = commit +changelog_file = ../docs/gitbook/python/changelog.md \ No newline at end of file diff --git a/src/classes/worker.ts b/src/classes/worker.ts index 42fabf2b27..649ad91588 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -16,6 +16,7 @@ import { DELAY_TIME_1, isNotConnectionError, isRedisInstance, + isRedisVersionLowerThan, WORKER_SUFFIX, } from '../utils'; import { QueueBase } from './queue-base'; @@ -531,10 +532,12 @@ export class Worker< ); // Only Redis v6.0.0 and above supports doubles as block time - blockTimeout = - this.blockingConnection.redisVersion < '6.0.0' - ? Math.ceil(blockTimeout) - : blockTimeout; + blockTimeout = isRedisVersionLowerThan( + this.blockingConnection.redisVersion, + '6.0.0', + ) + ? Math.ceil(blockTimeout) + : blockTimeout; // We restrict the maximum block timeout to 10 second to avoid // blocking the connection for too long in the case of reconnections From 7f42665640b0cec1eaf32b4fec15ff1955164f8b Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 13 Jun 2023 16:45:48 +0000 Subject: [PATCH 136/322] chore(release): 3.15.6 [skip ci] ## [3.15.6](https://github.com/taskforcesh/bullmq/compare/v3.15.5...v3.15.6) (2023-06-13) ### Bug Fixes * **worker:** use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([0df6afa](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index caba3a31fb..8f202d5a0b 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [3.15.6](https://github.com/taskforcesh/bullmq/compare/v3.15.5...v3.15.6) (2023-06-13) + + +### Bug Fixes + +* **worker:** use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([0df6afa](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) + ## [3.15.5](https://github.com/taskforcesh/bullmq/compare/v3.15.4...v3.15.5) (2023-06-11) diff --git a/package.json b/package.json index 97a349d65d..e8d4109419 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.15.5", + "version": "3.15.6", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 66a0eb17a173e8661fe924389ad49c907c07d56e Mon Sep 17 00:00:00 2001 From: semantic-release Date: Tue, 13 Jun 2023 16:46:47 +0000 Subject: [PATCH 137/322] 0.5.3 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 7 +++++++ python/bullmq/__init__.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 4c982264c0..a029d4d97b 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,13 @@ +## v0.5.3 (2023-06-13) +### Fix +* **worker:** Use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([`0df6afa`](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) + +### Documentation +* **python:** Add missing version sections ([#1974](https://github.com/taskforcesh/bullmq/issues/1974)) ([`77b4de7`](https://github.com/taskforcesh/bullmq/commit/77b4de7c3b41ae63e311a2c373e0d2fc787f2f53)) + # [0.3.0](https://github.com/taskforcesh/bullmq/compare/ca48163...46d6f94) (2023-03-18) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index a764df9a02..17baa00c6f 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "0.5.2" +__version__ = "0.5.3" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From fbedf2c45ea0c0030eff26de6fb432c68e7697a9 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Tue, 13 Jun 2023 12:22:14 -0500 Subject: [PATCH 138/322] chore: update python changelog --- docs/gitbook/python/changelog.md | 77 +++++++++++++++++++++++--------- python/CHANGELOG.md | 68 +--------------------------- 2 files changed, 56 insertions(+), 89 deletions(-) mode change 100644 => 120000 python/CHANGELOG.md diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index a029d4d97b..3880cfb3e9 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -7,35 +7,68 @@ * **worker:** Use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([`0df6afa`](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) ### Documentation -* **python:** Add missing version sections ([#1974](https://github.com/taskforcesh/bullmq/issues/1974)) ([`77b4de7`](https://github.com/taskforcesh/bullmq/commit/77b4de7c3b41ae63e311a2c373e0d2fc787f2f53)) +* **changelog:** Add missing version sections ([#1974](https://github.com/taskforcesh/bullmq/issues/1974)) ([`77b4de7`](https://github.com/taskforcesh/bullmq/commit/77b4de7c3b41ae63e311a2c373e0d2fc787f2f53)) -# [0.3.0](https://github.com/taskforcesh/bullmq/compare/ca48163...46d6f94) (2023-03-18) - - -### Bug Fixes - -* correct condition so that the worker keeps processing jobs indefinitely \([ef0c5d6](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)\) -* fix scripts typing on array2obj function \([134f6ab](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)\) -* pass maxMetricsSize as empty string when it is not provided \([6bda2b2](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)\) - - -### Features - -* add getJobCounts method \([46d6f94](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)\) -* improve worker concurrency \([ec7c49e](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)\) +## v0.5.2 (2023-06-11) +### Fix +* **retry-job:** Consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([`e753855`](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) -# [0.2.0](https://github.com/taskforcesh/bullmq/compare/a97b22f...ca48163) (2023-03-29) +## v0.5.1 (2023-06-09) +### Fix +* **python:** Include lua scripts when releasing ([`bb4f3b2`](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) +## v0.5.0 (2023-06-09) +### Feature +* **python:** Add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) -### Features +## v0.4.4 (2023-06-08) +### Fix +* **deps:** Downgrade python-semantic-release to avoid version issue -* add trimEvents method \([ca48163](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)\) -* add retryJobs method \([2745327](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)\) +## v0.4.3 (2023-06-07) +### Feature +* Add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) -# 0.1.0 (2023-02-15) +### Fix +* **rate-limit:** Consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) +## v0.4.2 (2023-06-01) +### Fix +* **deps:** Fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) + +## v0.4.1 (2023-05-29) +### Feature +* **job:** Add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) + +## [v0.4.0](https://github.com/taskforcesh/bullmq/compare/46d6f94...01b621f) (2023-05-18) +### Feature +* **connection:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) +* **job:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) +* **job:** Add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([`870da45`](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) +* **job:** Add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) +* **job:** Add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) +* **job:** Save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) +* Support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) -### Features +### Fix +* **retry:** Consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([`01b621f`](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) +* **worker:** Stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) -* initial python package \([a97b22f](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)\) +## [v0.3.0](https://github.com/taskforcesh/bullmq/compare/ca48163...46d6f94) (2023-04-18) +### Feature +* **queue:** Add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([`46d6f94`](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) +* Improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([`ec7c49e`](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) +### Fix +* Correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([`ef0c5d6`](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) +* Fix scripts typing on array2obj function ([#1786](https://github.com/taskforcesh/bullmq/issues/1786)) ([`134f6ab`](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) +* Pass maxMetricsSize as empty string when it is not provided fixes ([#1754](https://github.com/taskforcesh/bullmq/issues/1754)) ([`6bda2b2`](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) + +## [v0.2.0](https://github.com/taskforcesh/bullmq/compare/a97b22f...ca48163) (2023-03-29) +### Feature +* Add trimEvents method ([#1695](https://github.com/taskforcesh/bullmq/issues/1695)) ([`ca48163`](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) +* **queue:** Add retryJobs method ([#1688](https://github.com/taskforcesh/bullmq/issues/1688)) ([`2745327`](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) + +## v0.1.0 (2023-02-15) +### Feature +* Initial python package ([`a97b22f`](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md deleted file mode 100644 index a984e1ec5f..0000000000 --- a/python/CHANGELOG.md +++ /dev/null @@ -1,67 +0,0 @@ -# Changelog - - - -## v0.5.2 (2023-06-11) -### Fix -* **retry-job:** Consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([`e753855`](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) - -## v0.5.1 (2023-06-09) -### Fix -* **python:** Include lua scripts when releasing ([`bb4f3b2`](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) - -## v0.5.0 (2023-06-09) -### Feature -* **python:** Add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) - -## v0.4.4 (2023-06-08) -### Fix -* **deps:** Downgrade python-semantic-release to avoid version issue - -## v0.4.3 (2023-06-07) -### Feature -* Add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) - -### Fix -* **rate-limit:** Consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) - -## v0.4.2 (2023-06-01) -### Fix -* **deps:** Fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) - -## v0.4.1 (2023-05-29) -### Feature -* **job:** Add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) - -## [v0.4.0](https://github.com/taskforcesh/bullmq/compare/46d6f94...01b621f) (2023-05-18) -### Feature -* **connection:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) -* **job:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) -* **job:** Add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([`870da45`](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) -* **job:** Add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) -* **job:** Add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) -* **job:** Save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) -* Support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) - -### Fix -* **retry:** Consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([`01b621f`](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) -* **worker:** Stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) - -## [v0.3.0](https://github.com/taskforcesh/bullmq/compare/ca48163...46d6f94) (2023-04-18) -### Feature -* **queue:** Add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([`46d6f94`](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) -* Improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([`ec7c49e`](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) - -### Fix -* Correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([`ef0c5d6`](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) -* Fix scripts typing on array2obj function ([#1786](https://github.com/taskforcesh/bullmq/issues/1786)) ([`134f6ab`](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) -* Pass maxMetricsSize as empty string when it is not provided fixes ([#1754](https://github.com/taskforcesh/bullmq/issues/1754)) ([`6bda2b2`](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) - -## [v0.2.0](https://github.com/taskforcesh/bullmq/compare/a97b22f...ca48163) (2023-03-29) -### Feature -* Add trimEvents method ([#1695](https://github.com/taskforcesh/bullmq/issues/1695)) ([`ca48163`](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) -* **queue:** Add retryJobs method ([#1688](https://github.com/taskforcesh/bullmq/issues/1688)) ([`2745327`](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) - -## v0.1.0 (2023-02-15) -### Feature -* Initial python package ([`a97b22f`](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md new file mode 120000 index 0000000000..d762c274f7 --- /dev/null +++ b/python/CHANGELOG.md @@ -0,0 +1 @@ +docs/gitbook/python/changelog.md \ No newline at end of file From be20157b79b6359cc0b778d6952f716fa64e2feb Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 13 Jun 2023 12:23:46 -0500 Subject: [PATCH 139/322] chore: update CHANGELOG.md ref --- python/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md index d762c274f7..a07eda1de4 120000 --- a/python/CHANGELOG.md +++ b/python/CHANGELOG.md @@ -1 +1 @@ -docs/gitbook/python/changelog.md \ No newline at end of file +../docs/gitbook/python/changelog.md From 67e5df913f65ed94dc3500480bee785a7d01f57b Mon Sep 17 00:00:00 2001 From: roggervalf Date: Tue, 13 Jun 2023 12:33:16 -0500 Subject: [PATCH 140/322] chore: fix python CHANGELOG ref --- python/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md index a07eda1de4..bb1057d153 120000 --- a/python/CHANGELOG.md +++ b/python/CHANGELOG.md @@ -1 +1 @@ -../docs/gitbook/python/changelog.md +../docs/gitbook/python/changelog.md \ No newline at end of file From c6e7b8bbc6dfa57e9c2142bfda56d0f080f8c165 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Jun 2023 17:34:34 +0000 Subject: [PATCH 141/322] chore(deps): update dependency filelock to v3.12.2 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index ce55ff39de..e6981a5f7a 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -1,7 +1,7 @@ async-timeout==4.0.2 certifi==2023.5.7 distlib==0.3.6 -filelock==3.12.0 +filelock==3.12.2 msgpack==1.0.5 pipenv==2023.5.19 platformdirs==3.5.1 From c1c8eb03f60188e1328507c1565fb2826081c824 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Jun 2023 19:26:35 +0000 Subject: [PATCH 142/322] chore(deps): update dependency msgpackr to v1.9.5 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index bfa5f4c186..9e42b41108 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5120,9 +5120,9 @@ msgpackr-extract@^3.0.2: "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" msgpackr@^1.6.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.9.2.tgz#cd301f85de948111eb34553bfb402f21650f368d" - integrity sha512-xtDgI3Xv0AAiZWLRGDchyzBwU6aq0rwJ+W+5Y4CZhEWtkl/hJtFFLc+3JtGTw7nz1yquxs7nL8q/yA2aqpflIQ== + version "1.9.5" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.9.5.tgz#ac548c5f4546db895e84e46d39d813be961dc527" + integrity sha512-/IJ3cFSN6Ci3eG2wLhbFEL6GT63yEaoN/R5My2QkV6zro+OJaVRLPlwvxY7EtHYSmDlQpk8stvOQTL2qJFkDRg== optionalDependencies: msgpackr-extract "^3.0.2" From 234e3ad7f9dfc68540fb6c118dc6ff12ac8f6c25 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 13 Jun 2023 20:48:00 +0000 Subject: [PATCH 143/322] GITBOOK-163: docs(removing-jobs): add code tabs for python --- ...1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png | Bin 0 -> 18739 bytes docs/gitbook/guide/jobs/removing-job.md | 26 +++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png new file mode 100644 index 0000000000000000000000000000000000000000..82bc2ac7e3929d94826db89b05e105be49ce516f GIT binary patch literal 18739 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 K&t;ucLK6U7cus); literal 0 HcmV?d00001 diff --git a/docs/gitbook/guide/jobs/removing-job.md b/docs/gitbook/guide/jobs/removing-job.md index 2b3b786ebc..3b570bdf7e 100644 --- a/docs/gitbook/guide/jobs/removing-job.md +++ b/docs/gitbook/guide/jobs/removing-job.md @@ -1,5 +1,9 @@ +# Removing jobs + Sometimes it is necessary to remove a job. For example, there could be a job that has bad data. +{% tabs %} +{% tab title="TypeScript" %} ```typescript import { Queue } from 'bullmq'; @@ -9,12 +13,26 @@ const job = await queue.add('wall', { color: 1 }); await job.remove(); ``` +{% endtab %} + +{% tab title="Python" %} +```python +from bullmq import Queue + +queue = Queue('paint') + +job = await queue.add('wall', {'color': 1}) + +await job.remove() +``` +{% endtab %} +{% endtabs %} {% hint style="info" %} Locked jobs (in active state) can not be removed. An error will be thrown. {% endhint %} -# Having a parent job +## Having a parent job There are 2 possible cases: @@ -25,7 +43,7 @@ There are 2 possible cases: Take in consideration that processed values will be kept in processed hset from the parent if this child is in **completed** state at the time when it's removed. {% endhint %} -# Having pending dependencies +## Having pending dependencies We may try to remove all its pending descendents first. @@ -33,6 +51,6 @@ We may try to remove all its pending descendents first. In case one of the children is locked, it will stop the deletion process. {% endhint %} -## Read more: +### Read more: -- 💡 [Remove API Reference](https://api.docs.bullmq.io/classes/Job.html#remove) +* 💡 [Remove API Reference](https://api.docs.bullmq.io/classes/Job.html#remove) From 7c5ee20471b989d297c8c5e87a6ea497a2077ae6 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 14 Jun 2023 08:59:59 -0500 Subject: [PATCH 144/322] fix(python): add retry strategy in connection (#1975) --- docs/gitbook/python/changelog.md | 22 +++++++++++----------- python/bullmq/redis_connection.py | 16 ++++++++++++++-- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 3880cfb3e9..1b2fd62734 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -27,32 +27,32 @@ ## v0.4.3 (2023-06-07) ### Feature -* Add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) +* Add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([`945bcd3`](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) ### Fix -* **rate-limit:** Consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) +* **rate-limit:** Consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([`d97864a`](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) ## v0.4.2 (2023-06-01) ### Fix -* **deps:** Fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) +* **deps:** Fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([`ce86ece`](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) ## v0.4.1 (2023-05-29) ### Feature -* **job:** Add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) +* **job:** Add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([`f0867a6`](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) ## [v0.4.0](https://github.com/taskforcesh/bullmq/compare/46d6f94...01b621f) (2023-05-18) ### Feature -* **connection:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) -* **job:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) +* **connection:** accept redis options as string ([`01f549e`](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) +* **job:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([`5bebf8d`](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) * **job:** Add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([`870da45`](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) -* **job:** Add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) -* **job:** Add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) -* **job:** Save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) -* Support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) +* **job:** Add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([`800b8c4`](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) +* **job:** Add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([`e1e1aa2`](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) +* **job:** Save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([`0b538ce`](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) +* Support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([`b044a03`](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) ### Fix * **retry:** Consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([`01b621f`](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) -* **worker:** Stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) +* **worker:** Stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([`514699c`](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) ## [v0.3.0](https://github.com/taskforcesh/bullmq/compare/ca48163...46d6f94) (2023-04-18) ### Feature diff --git a/python/bullmq/redis_connection.py b/python/bullmq/redis_connection.py index c6097c70ed..417dfac310 100644 --- a/python/bullmq/redis_connection.py +++ b/python/bullmq/redis_connection.py @@ -1,4 +1,11 @@ import redis.asyncio as redis +from redis.backoff import ExponentialBackoff +from redis.retry import Retry +from redis.exceptions import ( + BusyLoadingError, + ConnectionError, + TimeoutError +) import warnings class RedisConnection: @@ -11,6 +18,9 @@ class RedisConnection: def __init__(self, redisOpts: dict | str = {}): self.version = None + retry = Retry(ExponentialBackoff(), 3) + retry_errors = [BusyLoadingError, ConnectionError, TimeoutError] + if isinstance(redisOpts, dict): host = redisOpts.get("host") or "localhost" port = redisOpts.get("port") or 6379 @@ -18,9 +28,11 @@ def __init__(self, redisOpts: dict | str = {}): password = redisOpts.get("password") or None self.conn = redis.Redis( - host=host, port=port, db=db, password=password, decode_responses=True) + host=host, port=port, db=db, password=password, decode_responses=True, + retry=retry, retry_on_error=retry_errors) else: - self.conn = redis.from_url(redisOpts, decode_responses=True) + self.conn = redis.from_url(redisOpts, decode_responses=True, retry=retry, + retry_on_error=retry_errors) def disconnect(self): """ From 24d9ae1cbced374793429f0a9fecb5c4451ae46d Mon Sep 17 00:00:00 2001 From: semantic-release Date: Wed, 14 Jun 2023 14:01:50 +0000 Subject: [PATCH 145/322] 0.5.4 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 4 ++++ python/bullmq/__init__.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 1b2fd62734..ced9b8c172 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,10 @@ +## v0.5.4 (2023-06-14) +### Fix +* **python:** Add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([`7c5ee20`](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) + ## v0.5.3 (2023-06-13) ### Fix * **worker:** Use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([`0df6afa`](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 17baa00c6f..828f4da11c 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "0.5.3" +__version__ = "0.5.4" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From a1544a8c0f29522cd33772b14f559969db852d1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rnstjerne=20Tiedemann?= Date: Fri, 16 Jun 2023 17:07:06 +0200 Subject: [PATCH 146/322] fix(worker): set redis version always in initialization (#1989) fixes #1988 --- src/classes/redis-connection.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/classes/redis-connection.ts b/src/classes/redis-connection.ts index 742ec43ad3..8e58be675d 100644 --- a/src/classes/redis-connection.ts +++ b/src/classes/redis-connection.ts @@ -179,10 +179,10 @@ export class RedisConnection extends EventEmitter { this._client.on('ready', this.handleClientReady); await RedisConnection.waitUntilReady(this._client); - await this.loadCommands(); + this.loadCommands(); + this.version = await this.getRedisVersion(); if (this.opts && this.opts.skipVersionCheck !== true && !this.closing) { - this.version = await this.getRedisVersion(); if ( isRedisVersionLowerThan(this.version, RedisConnection.minimumVersion) ) { From 90c34c37605134c72d560ed0fc6aa03a63b6cbca Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 16 Jun 2023 15:08:04 +0000 Subject: [PATCH 147/322] chore(release): 3.15.7 [skip ci] ## [3.15.7](https://github.com/taskforcesh/bullmq/compare/v3.15.6...v3.15.7) (2023-06-16) ### Bug Fixes * **python:** add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([7c5ee20](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) * **worker:** set redis version always in initialization ([#1989](https://github.com/taskforcesh/bullmq/issues/1989)) fixes [#1988](https://github.com/taskforcesh/bullmq/issues/1988) ([a1544a8](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) --- docs/gitbook/changelog.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 8f202d5a0b..af05c1301a 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,11 @@ +## [3.15.7](https://github.com/taskforcesh/bullmq/compare/v3.15.6...v3.15.7) (2023-06-16) + + +### Bug Fixes + +* **python:** add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([7c5ee20](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) +* **worker:** set redis version always in initialization ([#1989](https://github.com/taskforcesh/bullmq/issues/1989)) fixes [#1988](https://github.com/taskforcesh/bullmq/issues/1988) ([a1544a8](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) + ## [3.15.6](https://github.com/taskforcesh/bullmq/compare/v3.15.5...v3.15.6) (2023-06-13) diff --git a/package.json b/package.json index e8d4109419..7bef6e0a90 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.15.6", + "version": "3.15.7", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 1434f7eaa515e30f2a819d6af3bcefabf7643790 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Jun 2023 15:07:50 +0000 Subject: [PATCH 148/322] chore(deps): update dependency pipenv to v2023.6.12 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index e6981a5f7a..6380a041f3 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -3,7 +3,7 @@ certifi==2023.5.7 distlib==0.3.6 filelock==3.12.2 msgpack==1.0.5 -pipenv==2023.5.19 +pipenv==2023.6.12 platformdirs==3.5.1 pre-commit==3.3.2 python-semantic-release==7.28.1 From dadeef3d31fda8ca826ca6f8b742574d761fd220 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:35:39 +0000 Subject: [PATCH 149/322] chore(deps): update dependency pre-commit to v3.3.3 --- python/requirements.txt | 2 +- python/setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/requirements.txt b/python/requirements.txt index 6380a041f3..0b4038e472 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -5,7 +5,7 @@ filelock==3.12.2 msgpack==1.0.5 pipenv==2023.6.12 platformdirs==3.5.1 -pre-commit==3.3.2 +pre-commit==3.3.3 python-semantic-release==7.28.1 redis==4.5.5 semver==2.13.0 diff --git a/python/setup.py b/python/setup.py index e1445d5841..f6d3199bb4 100644 --- a/python/setup.py +++ b/python/setup.py @@ -28,7 +28,7 @@ ], extras_require={ "dev": [ - "pre-commit==3.3.2", + "pre-commit==3.3.3", "python-semantic-release==7.34.3", ] }, From 56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 16 Jun 2023 11:48:29 -0500 Subject: [PATCH 150/322] fix(rate-limit): keep priority fifo order (#1991) fixes #1929 (python) --- .../includes/moveJobFromWaitToActive.lua | 32 ++++++--- .../includes/pushBackJobWithPriority.lua | 17 +++++ src/commands/moveJobFromActiveToWait-9.lua | 4 +- tests/test_rate_limiter.ts | 72 +++++++++++++++++++ 4 files changed, 113 insertions(+), 12 deletions(-) create mode 100644 src/commands/includes/pushBackJobWithPriority.lua diff --git a/src/commands/includes/moveJobFromWaitToActive.lua b/src/commands/includes/moveJobFromWaitToActive.lua index 5602d73c02..8c0b071083 100644 --- a/src/commands/includes/moveJobFromWaitToActive.lua +++ b/src/commands/includes/moveJobFromWaitToActive.lua @@ -17,31 +17,44 @@ opts - limiter ]] +-- Includes +--- @include "pushBackJobWithPriority" + local function moveJobFromWaitToActive(keys, keyPrefix, targetKey, jobId, processedOn, maxJobs, expireTime, opts) + rcall("ZREM", keys[3], jobId) -- remove from priority + local jobKey = keyPrefix .. jobId + -- Check if we need to perform rate limiting. if maxJobs then local rateLimiterKey = keys[6]; - local jobCounter = tonumber(rcall("INCR", rateLimiterKey)) - - if jobCounter == 1 then - local limiterDuration = opts['limiter'] and opts['limiter']['duration'] - local integerDuration = math.floor(math.abs(limiterDuration)) - rcall("PEXPIRE", rateLimiterKey, integerDuration) - end -- check if we passed rate limit, we need to remove the job and return expireTime if expireTime > 0 then -- remove from active queue and add back to the wait list rcall("LREM", keys[2], 1, jobId) - rcall("RPUSH", targetKey, jobId) + + local priority = tonumber(rcall("HGET", jobKey, "priority")) or 0 + + if priority > 0 then + pushBackJobWithPriority(keys[3], priority, targetKey, jobId) + else + rcall("RPUSH", targetKey, jobId) + end -- Return when we can process more jobs return {0, 0, expireTime, 0} end + + local jobCounter = tonumber(rcall("INCR", rateLimiterKey)) + + if jobCounter == 1 then + local limiterDuration = opts['limiter'] and opts['limiter']['duration'] + local integerDuration = math.floor(math.abs(limiterDuration)) + rcall("PEXPIRE", rateLimiterKey, integerDuration) + end end - local jobKey = keyPrefix .. jobId local lockKey = jobKey .. ':lock' -- get a lock @@ -49,7 +62,6 @@ local function moveJobFromWaitToActive(keys, keyPrefix, targetKey, jobId, proces rcall("SET", lockKey, opts['token'], "PX", opts['lockDuration']) end - rcall("ZREM", keys[3], jobId) -- remove from priority rcall("XADD", keys[4], "*", "event", "active", "jobId", jobId, "prev", "waiting") rcall("HSET", jobKey, "processedOn", processedOn) rcall("HINCRBY", jobKey, "attemptsMade", 1) diff --git a/src/commands/includes/pushBackJobWithPriority.lua b/src/commands/includes/pushBackJobWithPriority.lua new file mode 100644 index 0000000000..c563f90f24 --- /dev/null +++ b/src/commands/includes/pushBackJobWithPriority.lua @@ -0,0 +1,17 @@ +--[[ + Function to add push back job considering priority in front of same prioritized jobs. +]] +local function pushBackJobWithPriority(priorityKey, priority, targetKey, jobId) + rcall("ZADD", priorityKey, priority, jobId) + local count = rcall("ZCOUNT", priorityKey, 0, priority-1) + + local len = rcall("LLEN", targetKey) + local id = rcall("LINDEX", targetKey, len - count) + rcall("ZADD", priorityKey, priority, jobId) + + if id then + rcall("LINSERT", targetKey, "BEFORE", id, jobId) + else + rcall("RPUSH", targetKey, jobId) + end +end diff --git a/src/commands/moveJobFromActiveToWait-9.lua b/src/commands/moveJobFromActiveToWait-9.lua index 0a2ea53efe..1354a4125d 100644 --- a/src/commands/moveJobFromActiveToWait-9.lua +++ b/src/commands/moveJobFromActiveToWait-9.lua @@ -19,7 +19,7 @@ local rcall = redis.call -- Includes ---- @include "includes/addJobWithPriority" +--- @include "includes/pushBackJobWithPriority" --- @include "includes/getTargetQueueList" local jobId = ARGV[1] @@ -38,7 +38,7 @@ if lockToken == token and pttl > 0 then local priority = tonumber(rcall("HGET", ARGV[3], "priority")) or 0 if priority > 0 then - addJobWithPriority(KEYS[8], priority, target, jobId) + pushBackJobWithPriority(KEYS[8], priority, target, jobId) else rcall("RPUSH", target, jobId) end diff --git a/tests/test_rate_limiter.ts b/tests/test_rate_limiter.ts index 005eb907d2..230ce1bb3a 100644 --- a/tests/test_rate_limiter.ts +++ b/tests/test_rate_limiter.ts @@ -436,6 +436,78 @@ describe('Rate Limiter', function () { await result; await worker.close(); }); + + describe('when priority is the same for some jobs', () => { + it('should get jobs in fifo order', async function () { + this.timeout(6000); + + const numJobs = 4; + const dynamicLimit = 250; + const duration = 100; + + const worker = new Worker( + queueName, + async () => { + await worker.rateLimit(dynamicLimit); + throw Worker.RateLimitError(); + }, + { + connection, + limiter: { + max: 1, + duration, + }, + }, + ); + + for (let i = 1; i <= numJobs; i++) { + await queue.add(`${i}`, {}, { priority: 10 }); + } + + await delay(dynamicLimit); + + const jobs = await queue.getJobs(['waiting'], 0, -1, true); + expect(jobs.map(x => x.name)).to.eql(['1', '2', '3', '4']); + + await worker.close(); + }); + }); + + describe('when priority is different for some jobs', () => { + it('should get jobs in fifo order', async function () { + this.timeout(6000); + + const numJobs = 4; + const dynamicLimit = 250; + const duration = 100; + + const worker = new Worker( + queueName, + async () => { + await worker.rateLimit(dynamicLimit); + throw Worker.RateLimitError(); + }, + { + connection, + limiter: { + max: 1, + duration, + }, + }, + ); + + for (let i = 1; i <= numJobs; i++) { + await queue.add(`${i}`, {}, { priority: ((i - 1) % 2) + 1 }); + } + + await delay(dynamicLimit * 4); + + const jobs = await queue.getJobs(['waiting'], 0, -1, true); + expect(jobs.map(x => x.name)).to.eql(['1', '3', '2', '4']); + + await worker.close(); + }); + }); }); describe('when queue is paused', () => { From 5c36ae318766741a00a07af587255a5e951bd731 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 16 Jun 2023 16:49:40 +0000 Subject: [PATCH 151/322] chore(release): 3.15.8 [skip ci] ## [3.15.8](https://github.com/taskforcesh/bullmq/compare/v3.15.7...v3.15.8) (2023-06-16) ### Bug Fixes * **rate-limit:** keep priority fifo order ([#1991](https://github.com/taskforcesh/bullmq/issues/1991)) fixes [#1929](https://github.com/taskforcesh/bullmq/issues/1929) (python) ([56bd7ad](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index af05c1301a..9d0da17083 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [3.15.8](https://github.com/taskforcesh/bullmq/compare/v3.15.7...v3.15.8) (2023-06-16) + + +### Bug Fixes + +* **rate-limit:** keep priority fifo order ([#1991](https://github.com/taskforcesh/bullmq/issues/1991)) fixes [#1929](https://github.com/taskforcesh/bullmq/issues/1929) (python) ([56bd7ad](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) + ## [3.15.7](https://github.com/taskforcesh/bullmq/compare/v3.15.6...v3.15.7) (2023-06-16) diff --git a/package.json b/package.json index 7bef6e0a90..bf4267948f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.15.7", + "version": "3.15.8", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 59287d57a8e5f69abb4dfcecb5bcea36c2caa9c7 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Fri, 16 Jun 2023 16:50:43 +0000 Subject: [PATCH 152/322] 0.5.5 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 5 +++++ python/bullmq/__init__.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index ced9b8c172..d49282bc10 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,11 @@ +## v0.5.5 (2023-06-16) +### Fix +* **rate-limit:** Keep priority fifo order (#1991) fixes #1929 (python) ([`56bd7ad`](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) +* **worker:** Set redis version always in initialization (#1989) fixes #1988 ([`a1544a8`](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) + ## v0.5.4 (2023-06-14) ### Fix * **python:** Add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([`7c5ee20`](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 828f4da11c..5cc33adf41 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "0.5.4" +__version__ = "0.5.5" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From 93005e6a6001b78b6c86e8cc4f463e3152621005 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Jun 2023 12:25:46 -0500 Subject: [PATCH 153/322] chore(deps): update dependency semver to v7.5.2 (#1987) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9e42b41108..d11db80109 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6568,9 +6568,9 @@ semver@^6.0.0, semver@^6.3.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + version "7.5.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" + integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== dependencies: lru-cache "^6.0.0" From 86f8aed9702baf3be6078c6b92e1f358c888adc6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 17 Jun 2023 17:11:37 -0500 Subject: [PATCH 154/322] chore(deps): update dependency virtualenv to v20.23.1 (#1993) --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index 0b4038e472..64e13a6fe2 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -10,5 +10,5 @@ python-semantic-release==7.28.1 redis==4.5.5 semver==2.13.0 six==1.16.0 -virtualenv==20.23.0 +virtualenv==20.23.1 virtualenv-clone==0.5.7 From fc3f746441d43ebbc86256583f9b446e2ea874e5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 18 Jun 2023 20:37:07 -0500 Subject: [PATCH 155/322] chore(deps): update dependency pipenv to v2023.6.18 (#1997) --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index 64e13a6fe2..c838b27f05 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -3,7 +3,7 @@ certifi==2023.5.7 distlib==0.3.6 filelock==3.12.2 msgpack==1.0.5 -pipenv==2023.6.12 +pipenv==2023.6.18 platformdirs==3.5.1 pre-commit==3.3.3 python-semantic-release==7.28.1 From 132f2f7d011a2181d5eb05164ccb094f3e595b9d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 01:37:24 +0000 Subject: [PATCH 156/322] chore(deps): update github/codeql-action digest to 6c089f5 --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 4c851f14f7..153e9c8fa9 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,7 +42,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2 + uses: github/codeql-action/init@6c089f53dd51dc3fc7e599c3cb5356453a52ca9e # v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -53,7 +53,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2 + uses: github/codeql-action/autobuild@6c089f53dd51dc3fc7e599c3cb5356453a52ca9e # v2 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -67,4 +67,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2 + uses: github/codeql-action/analyze@6c089f53dd51dc3fc7e599c3cb5356453a52ca9e # v2 From 35e77bb93262191e379c2cf5c5937ff886b15c16 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 13:30:49 +0000 Subject: [PATCH 157/322] chore(deps): update dependency platformdirs to v3.6.0 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index c838b27f05..fbdae9acd4 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -4,7 +4,7 @@ distlib==0.3.6 filelock==3.12.2 msgpack==1.0.5 pipenv==2023.6.18 -platformdirs==3.5.1 +platformdirs==3.6.0 pre-commit==3.3.3 python-semantic-release==7.28.1 redis==4.5.5 From 854b1cabd082c1df4d55e7973f0e0b0cd4aefb79 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 20 Jun 2023 09:08:06 -0500 Subject: [PATCH 158/322] docs(update): add job data section (#1999) --- docs/gitbook/SUMMARY.md | 1 + docs/gitbook/guide/jobs/job-data.md | 72 ++++++++++++++++++++++ docs/gitbook/guide/jobs/prioritized.md | 4 ++ python/bullmq/scripts.py | 2 +- python/tests/delay_tests.py | 1 - python/tests/job_tests.py | 20 +++++- src/commands/includes/checkStalledJobs.lua | 3 +- src/commands/includes/getRateLimitTTL.lua | 2 +- src/commands/moveToActive-9.lua | 2 +- tests/test_repeat.ts | 5 +- 10 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 docs/gitbook/guide/jobs/job-data.md diff --git a/docs/gitbook/SUMMARY.md b/docs/gitbook/SUMMARY.md index 66b908a3b1..da7f5ecef5 100644 --- a/docs/gitbook/SUMMARY.md +++ b/docs/gitbook/SUMMARY.md @@ -23,6 +23,7 @@ * [FIFO](guide/jobs/fifo.md) * [LIFO](guide/jobs/lifo.md) * [Job Ids](guide/jobs/job-ids.md) + * [Job Data](guide/jobs/job-data.md) * [Delayed](guide/jobs/delayed.md) * [Repeatable](guide/jobs/repeatable.md) * [Prioritized](guide/jobs/prioritized.md) diff --git a/docs/gitbook/guide/jobs/job-data.md b/docs/gitbook/guide/jobs/job-data.md new file mode 100644 index 0000000000..be00cacd71 --- /dev/null +++ b/docs/gitbook/guide/jobs/job-data.md @@ -0,0 +1,72 @@ +# Job Data + +Every job can have its own custom data. The data is stored in the **data** attribute of the job: + +{% tabs %} +{% tab title="TypeScript" %} + +```typescript +import { Queue } from 'bullmq'; + +const myQueue = new Queue('paint'); + +const job = await myQueue.add('wall', { color: 'red' }); + +job.data; // { color: 'red' } +``` + +{% endtab %} + +{% tab title="Python" %} + +```python +from bullmq import Queue + +queue = Queue('paint') + +job = await queue.add('wall', {'color': 'red'}) + +job.data # { color: 'red' } +``` + +{% endtab %} +{% endtabs %} + +## Update data + +If you want to change the data after inserting a job, just use the **update** method. For example: + +{% tabs %} +{% tab title="TypeScript" %} + +```typescript +const job = await Job.create(queue, 'wall', { color: 'red' }); + +await job.update({ + color: 'blue', +}); + +job.data; // { color: 'blue' } +``` + +{% endtab %} + +{% tab title="Python" %} + +```python +from bullmq import Queue + +queue = Queue('paint') + +job = await queue.add('wall', {'color': 'red'}) + +await job.updateData({'color': 'blue'}) +job.data # { color: 'blue' } +``` + +{% endtab %} +{% endtabs %} + +## Read more: + +- 💡 [Update API Reference](https://api.docs.bullmq.io/classes/Job.html#update) diff --git a/docs/gitbook/guide/jobs/prioritized.md b/docs/gitbook/guide/jobs/prioritized.md index 85ec8f22d7..daaf290fa5 100644 --- a/docs/gitbook/guide/jobs/prioritized.md +++ b/docs/gitbook/guide/jobs/prioritized.md @@ -46,3 +46,7 @@ await job.changePriority({ lifo: true, }); ``` + +## Read more: + +- 💡 [Change Priority API Reference](https://api.docs.bullmq.io/classes/Job.html#changePriority) diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index f595758125..7e7b9e4173 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -148,7 +148,7 @@ async def moveToDelayed(self, job_id: str, timestamp: int, token: str = "0"): raise self.finishedErrors(result, job_id, 'moveToDelayed', 'active') return None - async def remove(self, job_id: str): + def remove(self, job_id: str): keys = self.getKeys(['']) args = [job_id] diff --git a/python/tests/delay_tests.py b/python/tests/delay_tests.py index 2dcf860cca..89c48580e5 100644 --- a/python/tests/delay_tests.py +++ b/python/tests/delay_tests.py @@ -30,7 +30,6 @@ async def test_progress_delayed_job_only_after_delayed_time(self): queue = Queue(queueName) async def process(job: Job, token: str): - print('hola') return "done" worker = Worker(queueName, process) diff --git a/python/tests/job_tests.py b/python/tests/job_tests.py index c853c6f975..5b04e49e8a 100644 --- a/python/tests/job_tests.py +++ b/python/tests/job_tests.py @@ -44,10 +44,28 @@ async def test_get_job_state(self): job = await queue.add("test-job", {"foo": "bar"}, {}) state = await job.getState() - print(state) self.assertEqual(state, "waiting") await queue.close() + async def test_update_job_data(self): + queue = Queue(queueName) + job = await queue.add("test", {"foo": "bar"}, {}) + await job.updateData({"baz": "qux"}) + stored_job = await Job.fromId(queue, job.id) + + self.assertEqual(stored_job.data, {"baz": "qux"}) + + await queue.close() + + async def test_update_job_data_when_is_removed(self): + queue = Queue(queueName) + job = await queue.add("test", {"foo": "bar"}, {}) + await job.remove() + with self.assertRaises(TypeError): + await job.updateData({"baz": "qux"}) + + await queue.close() + if __name__ == '__main__': unittest.main() diff --git a/src/commands/includes/checkStalledJobs.lua b/src/commands/includes/checkStalledJobs.lua index b93d0b6cc9..f5a67049e0 100644 --- a/src/commands/includes/checkStalledJobs.lua +++ b/src/commands/includes/checkStalledJobs.lua @@ -18,7 +18,8 @@ Events: 'stalled' with stalled job id. -]] local rcall = redis.call +]] +local rcall = redis.call -- Includes --- @include "batches" diff --git a/src/commands/includes/getRateLimitTTL.lua b/src/commands/includes/getRateLimitTTL.lua index dc9072aa5d..46a03ece90 100644 --- a/src/commands/includes/getRateLimitTTL.lua +++ b/src/commands/includes/getRateLimitTTL.lua @@ -2,7 +2,7 @@ local function getRateLimitTTL(maxJobs, rateLimiterKey) if maxJobs then local pttl = rcall("PTTL", rateLimiterKey) - if pttl <= 0 then + if pttl == 0 then rcall("DEL", rateLimiterKey) end diff --git a/src/commands/moveToActive-9.lua b/src/commands/moveToActive-9.lua index 44a37314ef..420deec092 100644 --- a/src/commands/moveToActive-9.lua +++ b/src/commands/moveToActive-9.lua @@ -92,7 +92,7 @@ end -- Return the timestamp for the next delayed job if any. local nextTimestamp = getNextDelayedTimestamp(KEYS[7]) if (nextTimestamp ~= nil) then - return { 0, 0, 0, nextTimestamp} + return { 0, 0, 0, nextTimestamp } end return { 0, 0, 0, 0} diff --git a/tests/test_repeat.ts b/tests/test_repeat.ts index a1d7f76bfd..54bcb0fe6a 100644 --- a/tests/test_repeat.ts +++ b/tests/test_repeat.ts @@ -33,11 +33,8 @@ describe('repeat', function () { const connection = { host: 'localhost' }; - beforeEach(function () { - this.clock = sinon.useFakeTimers(); - }); - beforeEach(async function () { + this.clock = sinon.useFakeTimers(); queueName = `test-${v4()}`; queue = new Queue(queueName, { connection }); repeat = new Repeat(queueName, { connection }); From 0cf17de033f6337c261c7ecab7dadb54a2ba17de Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 21 Jun 2023 11:27:27 +0000 Subject: [PATCH 159/322] GITBOOK-164: change request with no subject merged in GitBook --- docs/gitbook/bullmq-pro/introduction.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/bullmq-pro/introduction.md b/docs/gitbook/bullmq-pro/introduction.md index 9e3ac367f7..9765e4f536 100644 --- a/docs/gitbook/bullmq-pro/introduction.md +++ b/docs/gitbook/bullmq-pro/introduction.md @@ -8,6 +8,7 @@ There is a growing number of features that will be implemented in BullMQ Pro, yo ![](<../.gitbook/assets/image (4).png>) -### Pricing +### Commercial License + +BullMQ Pro is licensed per organization with unlimited use on all your projects. You can try it for free by requesting a token on this page: [https://taskforce.sh/account/bullmqpro](https://taskforce.sh/account/bullmqpro) and if you find it valuable subscript on the Subscriptions tab: [https://taskforce.sh/account/subscriptions](https://taskforce.sh/account/subscriptions). -BullMQ Pro is licensed per organization with unlimited use on all your projects. The current price is 95$/mo or 950$/year. You can try it for free by generating a new token on the "BullMQ Pro" tab in your account. From 758dd30ab60777ae66b5590faab24922affdcd46 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 21 Jun 2023 14:39:53 +0000 Subject: [PATCH 160/322] GITBOOK-165: change request with no subject merged in GitBook --- docs/gitbook/SUMMARY.md | 1 + .../guide/migration-to-newer-versions.md | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 docs/gitbook/guide/migration-to-newer-versions.md diff --git a/docs/gitbook/SUMMARY.md b/docs/gitbook/SUMMARY.md index da7f5ecef5..c188dd7e38 100644 --- a/docs/gitbook/SUMMARY.md +++ b/docs/gitbook/SUMMARY.md @@ -44,6 +44,7 @@ * [NestJs](guide/nestjs/README.md) * [Producers](guide/nestjs/producers.md) * [Going to production](guide/going-to-production.md) +* [Migration to newer versions](guide/migration-to-newer-versions.md) ## Patterns diff --git a/docs/gitbook/guide/migration-to-newer-versions.md b/docs/gitbook/guide/migration-to-newer-versions.md new file mode 100644 index 0000000000..e28db0c7b7 --- /dev/null +++ b/docs/gitbook/guide/migration-to-newer-versions.md @@ -0,0 +1,56 @@ +--- +description: Tips and hints on how to migrate your current BullMQ version to a newer one. +--- + +# Migration to newer versions + +BullMQ's team regularly releases new versions packed with bug fixes, new features, or occasionally, breaking changes. As a user operating in a production environment, you might find upgrading to these new versions while maintaining service continuity challenging. This guide offers tips and advice to ease your transition. + +The strategies needed vary depending on the nature of the upgrade. Regardless, we urge you to read this guide thoroughly, irrespective of the upgrade you're pursuing. + +## General advice + +When upgrading BullMQ, always consult the Changelog. It helps determine the extent of the changes and flags crucial considerations before upgrading. + +Avoid making large leaps between versions. If you're currently on version 1.3.7, for instance, a jump to version 4.2.6 may not be advisable. Upgrade incrementally whenever possible. Start with as many bugfix releases as possible, then proceed to new features, and finally, the major releases that encompass breaking changes. + +## Bugfix upgrade + +Bugfix releases increase only the micro version number according to SemVer—for instance, an upgrade from 3.14.4 to 3.14.7. Bugfix upgrades require no special strategies; simply update your instances to the latest version without changing your code or deployment. While it's not critical that all instances run on the same version, we recommend it for consistency. + +## New feature upgrade + +Following the SemVer specification, new features result in an increase in the minor version number, like going from 3.14.7 to 3.20.5. Generally, you can treat feature upgrades like bugfix upgrades—update all your instances to the latest version. + +However, if you're also upgrading your code to utilize a new feature, ensure it's backward compatible with the older BullMQ version. Otherwise, an older Worker might stop functioning if a new Queue adds jobs leveraging a feature the older Worker doesn't understand. + +The strategy here is to first upgrade all your instances to the version featuring the new functionality. After confirming all instances run the new version, proceed to deploy your code depending on those new features. + +## Breaking changes + +Occasionally, unavoidable changes incompatible with previous versions are made. We strive to minimize these, classifying them into two types: API-breaking changes and data structure-breaking changes. + +### API breaking changes + +API breaking changes could involve altered method parameters, removals, or different operational methods. These changes are usually straightforward to apply—you can run your BullMQ-dependent unit tests and address issues based on these changes. If you're using TypeScript, compilation errors will likely surface. Always read the [changelog](../changelog.md) for essential information about these changes. + +### Data structure breaking changes + +Data structure changes, which alter the queue's underlying structure, are more challenging. They can be either **additive** (introducing new data structures that older BullMQ versions don't understand) or **destructive** (changing or eradicating older data structures). + +For additive changes, you could simply upgrade all instances to the new version—they should apply the change and continue working without issues, akin to a [new feature upgrade](migration-to-newer-versions.md#new-features-upgrade). + +Destructive changes are the most demanding, as these fundamental alterations may make older versions unworkable, making rollback impossible if the upgrade fails. The [changelog](../changelog.md) will provide crucial information to guide you through this type of upgrade. + +## Some general strategies + +For the most demanding upgrades, you might find these strategies useful: + +### Pause/Upgrade/Unpause + +Since BullMQ supports global pause, one possible strategy, if suitable for your business case, is to pause the queue(s), wait until all current queued jobs have been processed, then perform the upgrade. Once all instances running BullMQ have been upgraded, you can unpause and let new jobs be processed by the new workers. Be aware this strategy is less useful if breaking changes affect Queue instances. Always consult the changelog for this type of information. + +### Use new queues altogether + +This drastic solution involves discontinuing use of older queues and creating new ones. You could rename older queues (e.g., "myQueueV2"), use a new Redis host, or maintain two versions of the service—one running an older BullMQ version with old queues, and a newer one with the latest BullMQ and a different set of queues. When the older version has no more jobs to process, it can be retired, leaving only the upgraded version. + From 1b1db390b4482925852b96aabc8a6fae56cfc500 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 21 Jun 2023 15:29:20 +0000 Subject: [PATCH 161/322] GITBOOK-166: change request with no subject merged in GitBook --- docs/gitbook/bullmq-pro/introduction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/gitbook/bullmq-pro/introduction.md b/docs/gitbook/bullmq-pro/introduction.md index 9765e4f536..8bd44bc472 100644 --- a/docs/gitbook/bullmq-pro/introduction.md +++ b/docs/gitbook/bullmq-pro/introduction.md @@ -10,5 +10,5 @@ There is a growing number of features that will be implemented in BullMQ Pro, yo ### Commercial License -BullMQ Pro is licensed per organization with unlimited use on all your projects. You can try it for free by requesting a token on this page: [https://taskforce.sh/account/bullmqpro](https://taskforce.sh/account/bullmqpro) and if you find it valuable subscript on the Subscriptions tab: [https://taskforce.sh/account/subscriptions](https://taskforce.sh/account/subscriptions). +BullMQ Pro is licensed per organization with unlimited use on all your projects. You can try it for free by requesting a token on this page: [https://taskforce.sh/account/bullmqpro](https://taskforce.sh/account/bullmqpro) and if you find it valuable subscribe on the Subscriptions tab: [https://taskforce.sh/account/subscriptions](https://taskforce.sh/account/subscriptions). From 59204456c98a1f23c1bc4e0626850a8aa496795c Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 21 Jun 2023 15:34:50 +0000 Subject: [PATCH 162/322] GITBOOK-167: change request with no subject merged in GitBook --- docs/gitbook/bullmq-pro/introduction.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/gitbook/bullmq-pro/introduction.md b/docs/gitbook/bullmq-pro/introduction.md index 8bd44bc472..290dd6a8b9 100644 --- a/docs/gitbook/bullmq-pro/introduction.md +++ b/docs/gitbook/bullmq-pro/introduction.md @@ -1,14 +1,18 @@ +--- +description: The commercial supported version of BullMQ +--- + # Introduction -BullMQ Pro is the commercial version of BullMQ. This version includes more advanced features and provides support from the authors of the library. +BullMQ Pro, the commercial version of BullMQ, boasts advanced features and offers dedicated support from the library's authors. You can easily install this package as a drop-in replacement for the standard BullMQ to access these new features. + +The BullMQ Pro version continues to evolve, with more features being added regularly. You can check the [roadmap](https://github.com/taskforcesh/bullmq-pro-support/projects/1) section to gain insight into what to expect in the forthcoming months. -The package is installed as a drop-in replacement of standard BullMQ, just install the Pro version to gain the new features. -There is a growing number of features that will be implemented in BullMQ Pro, you can check the [roadmap](https://github.com/taskforcesh/bullmq-pro-support/projects/1) to gain insight on what to expect in the following months. ![](<../.gitbook/assets/image (4).png>) ### Commercial License -BullMQ Pro is licensed per organization with unlimited use on all your projects. You can try it for free by requesting a token on this page: [https://taskforce.sh/account/bullmqpro](https://taskforce.sh/account/bullmqpro) and if you find it valuable subscribe on the Subscriptions tab: [https://taskforce.sh/account/subscriptions](https://taskforce.sh/account/subscriptions). +BullMQ Pro uses a per-organization licensing model, allowing unlimited use across all your projects. You can request a free trial token on [this page](https://taskforce.sh/account/bullmqpro), allowing you to evaluate its value. If you find it beneficial, consider subscribing under the '[Subscriptions](https://taskforce.sh/account/subscriptions)' tab. From 361e8cf330c15c9c5c150bcdc59db0a12e713623 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 21 Jun 2023 15:41:14 +0000 Subject: [PATCH 163/322] GITBOOK-168: change request with no subject merged in GitBook --- docs/gitbook/SUMMARY.md | 1 + docs/gitbook/bullmq-pro/support.md | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 docs/gitbook/bullmq-pro/support.md diff --git a/docs/gitbook/SUMMARY.md b/docs/gitbook/SUMMARY.md index c188dd7e38..ee524f9b95 100644 --- a/docs/gitbook/SUMMARY.md +++ b/docs/gitbook/SUMMARY.md @@ -74,6 +74,7 @@ * [Changelog](bullmq-pro/nestjs/changelog.md) * [API Reference](https://api.bullmq.pro) * [Changelog](bullmq-pro/changelog.md) +* [Support](bullmq-pro/support.md) ## Bull diff --git a/docs/gitbook/bullmq-pro/support.md b/docs/gitbook/bullmq-pro/support.md new file mode 100644 index 0000000000..aa5fd481b1 --- /dev/null +++ b/docs/gitbook/bullmq-pro/support.md @@ -0,0 +1,11 @@ +--- +description: Commercial support +--- + +# Support + +With your BullMQ Pro subscription, you receive commercial support. For the most recent and detailed terms, please refer to the "[BullMQ Pro](https://taskforce.sh/account/bullmqpro)" tab in your account. Here's a broad overview of what's included: + +* Email-based support: Customers may submit issues or queries via email to our dedicated support email address (support@taskforce.sh). +* Response time: We aim to respond to support emails within one business day (business days are defined in section 4). However, response times may vary, and quicker responses may occur on a best-effort basis. +* Resolution time: The time it takes to resolve an issue depends on the nature of the issue. Simple queries or requests for advice may be resolved quickly. More complex issues, such as bugs, may take several days or more to resolve. In some cases, we may not be able to fully resolve an issue but will provide a workaround. From a55fd777655f7d4bb7af9e4fa2f7b4f48f559189 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 21 Jun 2023 16:36:26 -0500 Subject: [PATCH 164/322] fix(python): pass right params to xtrim method (#2004) --- docs/gitbook/guide/events.md | 49 ++++++++++++++++++++++++++++++------ python/bullmq/queue.py | 2 +- python/tests/queue_tests.py | 36 ++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 9 deletions(-) diff --git a/docs/gitbook/guide/events.md b/docs/gitbook/guide/events.md index 13fbbfa276..492cf20e91 100644 --- a/docs/gitbook/guide/events.md +++ b/docs/gitbook/guide/events.md @@ -39,13 +39,16 @@ import { QueueEvents } from 'bullmq'; const queueEvents = new QueueEvents('Paint'); -queueEvents.on('completed', ({jobId: string}) => { +queueEvents.on('completed', ({ jobId: string }) => { // Called every time a job is completed in any worker. }); -queueEvents.on('progress', ({ jobId, data }: { jobId: string; data: number | object }) => { - // jobId received a progress event -}); +queueEvents.on( + 'progress', + ({ jobId, data }: { jobId: string; data: number | object }) => { + // jobId received a progress event + }, +); ``` The QueueEvents class is implemented using [Redis streams](https://redis.io/topics/streams-intro). This has some nice properties, for example, it provides guarantees that the events are delivered and not lost during disconnections such as it would be the case with standard pub-sub. @@ -54,9 +57,39 @@ The QueueEvents class is implemented using [Redis streams](https://redis.io/topi The event stream is auto-trimmed so that its size does not grow too much, by default it is \~10.000 events, but this can be configured with the `streams.events.maxLen` option. {% endhint %} +### Manual trim events + +In case you need to trim your events manually, you can use **trimEvents** method: + +{% tabs %} +{% tab title="TypeScript" %} + +```typescript +import { Queue } from 'bullmq'; + +const queue = new Queue('paint'); + +await queue.trimEvents(10); // left 10 events +``` + +{% endtab %} + +{% tab title="Python" %} + +```python +from bullmq import Queue + +queue = Queue('paint') + +await queue.trimEvents(10) # left 10 events +``` + +{% endtab %} +{% endtabs %} + ## Read more: -* 💡 [Queue Events API Reference](https://api.docs.bullmq.io/classes/QueueEvents.html) -* 💡 [Queue Events Listener API Reference](https://api.docs.bullmq.io/interfaces/QueueEventsListener.html) -* 💡 [Queue Listener API Reference](https://api.docs.bullmq.io/interfaces/QueueListener.html) -* 💡 [Worker Listener API Reference](https://api.docs.bullmq.io/interfaces/WorkerListener.html) +- 💡 [Queue Events API Reference](https://api.docs.bullmq.io/classes/QueueEvents.html) +- 💡 [Queue Events Listener API Reference](https://api.docs.bullmq.io/interfaces/QueueEventsListener.html) +- 💡 [Queue Listener API Reference](https://api.docs.bullmq.io/interfaces/QueueListener.html) +- 💡 [Worker Listener API Reference](https://api.docs.bullmq.io/interfaces/WorkerListener.html) diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index d2a8a1b3e1..59f1bf9192 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -101,7 +101,7 @@ def trimEvents(self, maxLength: int): @param maxLength: """ - return self.client.xtrim(self.opts.get("prefix", f"bull:{self.name}:events"), "MAXLEN", "~", maxLength) + return self.client.xtrim(f"{self.prefix}:{self.name}:events", maxlen = maxLength, approximate = "~") async def getJobCounts(self, *types): """ diff --git a/python/tests/queue_tests.py b/python/tests/queue_tests.py index 03eaceacf5..5b3587987d 100644 --- a/python/tests/queue_tests.py +++ b/python/tests/queue_tests.py @@ -46,6 +46,42 @@ async def test_add_job_with_options(self): await queue.close() + async def test_trim_events_manually(self): + queue = Queue(queueName) + await queue.add("test", data={}, opts={}) + await queue.add("test", data={}, opts={}) + await queue.add("test", data={}, opts={}) + await queue.add("test", data={}, opts={}) + + events_length = await queue.client.xlen(f"{queue.prefix}:{queueName}:events") + self.assertEqual(events_length, 8) + + await queue.trimEvents(0); + + events_length = await queue.client.xlen(f"{queue.prefix}:{queue.name}:events") + + self.assertEqual(events_length, 0) + + await queue.close() + + async def test_trim_events_manually_with_custom_prefix(self): + queue = Queue(queueName, {}, {"prefix": "test"}) + await queue.add("test", data={}, opts={}) + await queue.add("test", data={}, opts={}) + await queue.add("test", data={}, opts={}) + await queue.add("test", data={}, opts={}) + + events_length = await queue.client.xlen(f"test:{queueName}:events") + self.assertEqual(events_length, 8) + + await queue.trimEvents(0); + + events_length = await queue.client.xlen(f"test:{queue.name}:events") + + self.assertEqual(events_length, 0) + + await queue.close() + async def test_retry_failed_jobs(self): queue = Queue(queueName) job_count = 8 From 215c59e06d111e254c817a005b829de226ee30b7 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Wed, 21 Jun 2023 21:37:49 +0000 Subject: [PATCH 165/322] 0.5.6 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 7 +++++++ python/bullmq/__init__.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index d49282bc10..fd6309e10f 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,13 @@ +## v0.5.6 (2023-06-21) +### Fix +* **python:** Pass right params to xtrim method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([`a55fd77`](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) + +### Documentation +* **update:** Add job data section ([#1999](https://github.com/taskforcesh/bullmq/issues/1999)) ([`854b1ca`](https://github.com/taskforcesh/bullmq/commit/854b1cabd082c1df4d55e7973f0e0b0cd4aefb79)) + ## v0.5.5 (2023-06-16) ### Fix * **rate-limit:** Keep priority fifo order (#1991) fixes #1929 (python) ([`56bd7ad`](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 5cc33adf41..ffb1c4987a 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "0.5.5" +__version__ = "0.5.6" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From 42a890a2bfe45b29348030f886766400f5d41aa3 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 21 Jun 2023 16:56:59 -0500 Subject: [PATCH 166/322] perf(priority): add prioritized as a new state (#1984) (python) decouple priority to keep one zset BREAKING CHANGE: priority is separeted in its own zset, no duplication needed * feat(queue): add removeDeprecatedPriorityKey method * refactor: change job method name update to updateData ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) --- docs/gitbook/guide/jobs/job-data.md | 6 +- docs/gitbook/patterns/process-step-jobs.md | 20 ++--- python/bullmq/queue.py | 6 ++ python/bullmq/scripts.py | 43 +++++------ src/classes/child-processor.ts | 2 +- src/classes/job.ts | 17 ++++- src/classes/queue-getters.ts | 1 + src/classes/queue-keys.ts | 3 +- src/classes/queue.ts | 9 +++ src/classes/sandbox.ts | 2 +- src/classes/scripts.ts | 45 ++++++----- src/commands/{addJob-8.lua => addJob-9.lua} | 8 +- src/commands/changePriority-4.lua | 50 ------------- src/commands/changePriority-5.lua | 52 +++++++++++++ src/commands/cleanJobsInSet-2.lua | 2 + src/commands/drain-4.lua | 5 +- .../{getState-7.lua => getState-8.lua} | 25 +++++-- src/commands/getStateV2-7.lua | 51 ------------- src/commands/getStateV2-8.lua | 59 +++++++++++++++ src/commands/includes/addJobWithPriority.lua | 17 ++--- .../includes/addPriorityMarkerIfNeeded.lua | 12 +++ src/commands/includes/cleanList.lua | 3 - src/commands/includes/cleanSet.lua | 15 +--- src/commands/includes/getJobsInZset.lua | 12 +++ .../includes/moveJobFromPriorityToActive.lua | 14 ++++ ...Active.lua => prepareJobForProcessing.lua} | 20 +++-- src/commands/includes/promoteDelayedJobs.lua | 12 +-- .../includes/pushBackJobWithPriority.lua | 20 ++--- .../includes/removeJobFromAnyState.lua | 3 + src/commands/includes/removeJobs.lua | 15 +--- src/commands/includes/removeZSetJobs.lua | 15 ++++ .../includes/updateParentDepsIfNeeded.lua | 6 +- src/commands/moveJobFromActiveToWait-9.lua | 6 +- ...moveToActive-9.lua => moveToActive-10.lua} | 28 +++++-- src/commands/moveToDelayed-8.lua | 2 +- ...oFinished-12.lua => moveToFinished-13.lua} | 46 ++++++++---- src/commands/obliterate-2.lua | 12 ++- src/commands/{pause-4.lua => pause-5.lua} | 13 +++- src/commands/{promote-6.lua => promote-7.lua} | 17 +++-- src/commands/removeJob-1.lua | 1 - .../{retryJob-8.lua => retryJob-9.lua} | 10 +-- src/interfaces/minimal-job.ts | 2 +- src/interfaces/sandboxed-job.ts | 2 +- src/types/job-type.ts | 1 + tests/fixtures/fixture_processor_update.js | 4 +- tests/test_clean.ts | 39 +++++----- tests/test_flow.ts | 39 ++++++++-- tests/test_getters.ts | 5 +- tests/test_job.ts | 75 ++++++++++++------- tests/test_queue.ts | 29 ++++++- tests/test_rate_limiter.ts | 11 +-- tests/test_repeat.ts | 1 + tests/test_worker.ts | 24 +++--- 53 files changed, 580 insertions(+), 357 deletions(-) rename src/commands/{addJob-8.lua => addJob-9.lua} (96%) delete mode 100644 src/commands/changePriority-4.lua create mode 100644 src/commands/changePriority-5.lua rename src/commands/{getState-7.lua => getState-8.lua} (56%) delete mode 100644 src/commands/getStateV2-7.lua create mode 100644 src/commands/getStateV2-8.lua create mode 100644 src/commands/includes/addPriorityMarkerIfNeeded.lua create mode 100644 src/commands/includes/getJobsInZset.lua create mode 100644 src/commands/includes/moveJobFromPriorityToActive.lua rename src/commands/includes/{moveJobFromWaitToActive.lua => prepareJobForProcessing.lua} (79%) create mode 100644 src/commands/includes/removeZSetJobs.lua rename src/commands/{moveToActive-9.lua => moveToActive-10.lua} (72%) rename src/commands/{moveToFinished-12.lua => moveToFinished-13.lua} (84%) rename src/commands/{pause-4.lua => pause-5.lua} (60%) rename src/commands/{promote-6.lua => promote-7.lua} (68%) rename src/commands/{retryJob-8.lua => retryJob-9.lua} (81%) diff --git a/docs/gitbook/guide/jobs/job-data.md b/docs/gitbook/guide/jobs/job-data.md index be00cacd71..daef01e4ec 100644 --- a/docs/gitbook/guide/jobs/job-data.md +++ b/docs/gitbook/guide/jobs/job-data.md @@ -34,7 +34,7 @@ job.data # { color: 'red' } ## Update data -If you want to change the data after inserting a job, just use the **update** method. For example: +If you want to change the data after inserting a job, just use the **updateData** method. For example: {% tabs %} {% tab title="TypeScript" %} @@ -42,7 +42,7 @@ If you want to change the data after inserting a job, just use the **update** me ```typescript const job = await Job.create(queue, 'wall', { color: 'red' }); -await job.update({ +await job.updateData({ color: 'blue', }); @@ -69,4 +69,4 @@ job.data # { color: 'blue' } ## Read more: -- 💡 [Update API Reference](https://api.docs.bullmq.io/classes/Job.html#update) +- 💡 [Update API Reference](https://api.docs.bullmq.io/classes/Job.html#updateData) diff --git a/docs/gitbook/patterns/process-step-jobs.md b/docs/gitbook/patterns/process-step-jobs.md index 7ef0ddc43a..0ab9470a7e 100644 --- a/docs/gitbook/patterns/process-step-jobs.md +++ b/docs/gitbook/patterns/process-step-jobs.md @@ -17,7 +17,7 @@ const worker = new Worker( switch (step) { case Step.Initial: { await doInitialStepStuff(); - await job.update({ + await job.updateData({ step: Step.Second, }); step = Step.Second; @@ -25,7 +25,7 @@ const worker = new Worker( } case Step.Second: { await doSecondStepStuff(); - await job.update({ + await job.updateData({ step: Step.Finish, }); step = Step.Finish; @@ -67,7 +67,7 @@ const worker = new Worker( case Step.Initial: { await doInitialStepStuff(); await job.moveToDelayed(Date.now() + 200, token); - await job.update({ + await job.updateData({ step: Step.Second, }); step = Step.Second; @@ -75,7 +75,7 @@ const worker = new Worker( } case Step.Second: { await doSecondStepStuff(); - await job.update({ + await job.updateData({ step: Step.Finish, }); throw new DelayedError(); @@ -124,7 +124,7 @@ const worker = new Worker( }, }, ); - await job.update({ + await job.updateData({ step: Step.Second, }); step = Step.Second; @@ -142,7 +142,7 @@ const worker = new Worker( }, }, ); - await job.update({ + await job.updateData({ step: Step.Third, }); step = Step.Third; @@ -151,7 +151,7 @@ const worker = new Worker( case Step.Third: { const shouldWait = await job.moveToWaitingChildren(token); if (!shouldWait) { - await job.update({ + await job.updateData({ step: Step.Finish, }); step = Step.Finish; @@ -223,7 +223,7 @@ const worker = new Worker( }, }); - await job.update({ + await job.updateData({ step: Step.Second, }); step = Step.Second; @@ -231,7 +231,7 @@ const worker = new Worker( } case Step.Second: { await doSecondStepStuff(); - await job.update({ + await job.updateData({ step: Step.Third, }); step = Step.Third; @@ -240,7 +240,7 @@ const worker = new Worker( case Step.Third: { const shouldWait = await job.moveToWaitingChildren(token); if (!shouldWait) { - await job.update({ + await job.updateData({ step: Step.Finish, }); step = Step.Finish; diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 59f1bf9192..b20e0dfffc 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -103,6 +103,12 @@ def trimEvents(self, maxLength: int): """ return self.client.xtrim(f"{self.prefix}:{self.name}:events", maxlen = maxLength, approximate = "~") + def removeDeprecatedPriorityKey(self): + """ + Delete old priority helper key. + """ + return self.client.delete(f"{self.prefix}:{self.name}:priority") + async def getJobCounts(self, *types): """ Returns the job counts for each type specified or every list/set in the queue by default. diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 7e7b9e4173..6936d91264 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -30,21 +30,21 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection self.redisConnection = redisConnection self.redisClient = redisConnection.conn self.commands = { - "addJob": self.redisClient.register_script(self.getScript("addJob-8.lua")), - "changePriority": self.redisClient.register_script(self.getScript("changePriority-4.lua")), + "addJob": self.redisClient.register_script(self.getScript("addJob-9.lua")), + "changePriority": self.redisClient.register_script(self.getScript("changePriority-5.lua")), "extendLock": self.redisClient.register_script(self.getScript("extendLock-2.lua")), "getCounts": self.redisClient.register_script(self.getScript("getCounts-1.lua")), - "getState": self.redisClient.register_script(self.getScript("getState-7.lua")), - "getStateV2": self.redisClient.register_script(self.getScript("getStateV2-7.lua")), + "getState": self.redisClient.register_script(self.getScript("getState-8.lua")), + "getStateV2": self.redisClient.register_script(self.getScript("getStateV2-8.lua")), "moveStalledJobsToWait": self.redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), - "moveToActive": self.redisClient.register_script(self.getScript("moveToActive-9.lua")), + "moveToActive": self.redisClient.register_script(self.getScript("moveToActive-10.lua")), "moveToDelayed": self.redisClient.register_script(self.getScript("moveToDelayed-8.lua")), - "moveToFinished": self.redisClient.register_script(self.getScript("moveToFinished-12.lua")), + "moveToFinished": self.redisClient.register_script(self.getScript("moveToFinished-13.lua")), "obliterate": self.redisClient.register_script(self.getScript("obliterate-2.lua")), - "pause": self.redisClient.register_script(self.getScript("pause-4.lua")), + "pause": self.redisClient.register_script(self.getScript("pause-5.lua")), "removeJob": self.redisClient.register_script(self.getScript("removeJob-1.lua")), "reprocessJob": self.redisClient.register_script(self.getScript("reprocessJob-6.lua")), - "retryJob": self.redisClient.register_script(self.getScript("retryJob-8.lua")), + "retryJob": self.redisClient.register_script(self.getScript("retryJob-9.lua")), "retryJobs": self.redisClient.register_script(self.getScript("retryJobs-6.lua")), "saveStacktrace": self.redisClient.register_script(self.getScript("saveStacktrace-1.lua")), "updateData": self.redisClient.register_script(self.getScript("updateData-1.lua")), @@ -53,7 +53,7 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection # loop all the names and add them to the keys object names = ["", "active", "wait", "paused", "completed", "failed", "delayed", - "stalled", "limiter", "priority", "id", "stalled-check", "meta", "events", "waiting-children"] + "stalled", "limiter", "prioritized", "id", "stalled-check", "meta", "pc", "events", "waiting-children"] for name in names: self.keys[name] = self.toKey(name) @@ -96,7 +96,7 @@ def addJob(self, job: Job): packedOpts = msgpack.packb(job.opts) keys = self.getKeys(['wait', 'paused', 'meta', 'id', - 'delayed', 'priority', 'completed', 'events']) + 'delayed', 'prioritized', 'completed', 'events', 'pc']) return self.commands["addJob"](keys=keys, args=[packedArgs, jsonData, packedOpts]) @@ -112,7 +112,8 @@ def retryJobArgs(self, job_id: str, lifo: bool, token: str): keys.append(self.keys['meta']) keys.append(self.keys['events']) keys.append(self.keys['delayed']) - keys.append(self.keys['priority']) + keys.append(self.keys['prioritized']) + keys.append(self.keys['pc']) push_cmd = "R" if lifo else "L" @@ -127,7 +128,7 @@ def moveToDelayedArgs(self, job_id: str, timestamp: int, token: str): if timestamp > 0: max_timestamp = max_timestamp * 0x1000 + (convert_to_int(job_id) & 0xfff) - keys = self.getKeys(['wait', 'active', 'priority', 'delayed']) + keys = self.getKeys(['wait', 'active', 'prioritized', 'delayed']) keys.append(self.toKey(job_id)) keys.append(self.keys['events']) keys.append(self.keys['paused']) @@ -163,9 +164,9 @@ def getCounts(self, types): async def getState(self, job_id): keys = self.getKeys(['completed', 'failed', 'delayed', 'active', 'wait', - 'paused', 'waiting-children']) + 'paused', 'waiting-children', 'prioritized']) - args = [job_id] + args = [job_id, self.toKey(job_id)] redis_version = await self.redisConnection.getRedisVersion() @@ -180,7 +181,8 @@ async def changePriority(self, job_id: str, priority:int = 0, lifo:bool = False) keys = [self.keys['wait'], self.keys['paused'], self.keys['meta'], - self.keys['priority']] + self.keys['prioritized'], + self.keys['pc']] args = [priority, self.toKey(job_id), job_id, 1 if lifo else 0] @@ -231,7 +233,7 @@ def pause(self, pause: bool = True): """ src = "wait" if pause else "paused" dst = "paused" if pause else "wait" - keys = self.getKeys([src, dst, 'meta', 'events']) + keys = self.getKeys([src, dst, 'meta', 'prioritized', 'events']) return self.commands["pause"](keys, args=["paused" if pause else "resumed"]) async def obliterate(self, count: int, force: bool = False): @@ -265,8 +267,8 @@ async def moveToActive(self, token: str, opts: dict, jobId: str = "") -> list[An lockDuration = opts.get("lockDuration", 0) limiter = opts.get("limiter", None) - keys = self.getKeys(['wait', 'active', 'priority', 'events', - 'stalled', 'limiter', 'delayed', 'paused', 'meta']) + keys = self.getKeys(['wait', 'active', 'prioritized', 'events', + 'stalled', 'limiter', 'delayed', 'paused', 'meta', 'pc']) packedOpts = msgpack.packb( {"token": token, "lockDuration": lockDuration, "limiter": limiter}, use_bin_type=True) args = [self.keys[''], timestamp, jobId or "", packedOpts] @@ -296,10 +298,9 @@ def moveToFinishedArgs(self, job: Job, val: Any, propVal: str, shouldRemove, tar timestamp = round(time.time() * 1000) metricsKey = self.toKey('metrics:' + target) - keys = self.getKeys(['wait', 'active', 'priority', 'events', - 'stalled', 'limiter', 'delayed', 'paused', target]) + keys = self.getKeys(['wait', 'active', 'prioritized', 'events', + 'stalled', 'limiter', 'delayed', 'paused', 'meta', 'pc', target]) keys.append(self.toKey(job.id)) - keys.append(self.keys['meta']) keys.append(metricsKey) def getKeepJobs(shouldRemove: bool | dict | int | None): diff --git a/src/classes/child-processor.ts b/src/classes/child-processor.ts index aa2ac1862d..645256f4cb 100644 --- a/src/classes/child-processor.ts +++ b/src/classes/child-processor.ts @@ -150,7 +150,7 @@ function wrapJob( /* * Emulate the real job `update` function. */ - update: async (data: any) => { + updateData: async (data: any) => { send({ cmd: ParentCommand.Update, value: data, diff --git a/src/classes/job.ts b/src/classes/job.ts index 5b3b3e7c30..5f33b73b33 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -429,7 +429,7 @@ export class Job< * * @param data - the data that will replace the current jobs data. */ - update(data: DataType): Promise { + updateData(data: DataType): Promise { this.data = data; return this.scripts.updateData(this, data); @@ -551,7 +551,7 @@ export class Job< ); const result = await this.scripts.moveToFinished(this.id, args); - this.finishedOn = args[13] as number; + this.finishedOn = args[14] as number; return result; } @@ -632,7 +632,7 @@ export class Job< fetchNext, ); (multi).moveToFinished(args); - finishedOn = args[13]; + finishedOn = args[14]; command = 'failed'; } @@ -1085,6 +1085,17 @@ export class Job< ); } + if (this.opts.priority) { + if (Math.trunc(this.opts.priority) !== this.opts.priority) { + throw new Error(`Priority should not be float`); + } + + const priorityLimit = 2 ** 21; + if (this.opts.priority > 2 ** 21) { + throw new Error(`Priority should be between 0 and ${priorityLimit}`); + } + } + return this.scripts.addJob( client, jobData, diff --git a/src/classes/queue-getters.ts b/src/classes/queue-getters.ts index 1ea9537ecd..dcfaff3e8a 100644 --- a/src/classes/queue-getters.ts +++ b/src/classes/queue-getters.ts @@ -82,6 +82,7 @@ export class QueueGetters< 'delayed', 'failed', 'paused', + 'prioritized', 'waiting', 'waiting-children', ]; diff --git a/src/classes/queue-keys.ts b/src/classes/queue-keys.ts index 33406a1292..4a9f1372d5 100644 --- a/src/classes/queue-keys.ts +++ b/src/classes/queue-keys.ts @@ -14,7 +14,7 @@ export class QueueKeys { 'resumed', 'id', 'delayed', - 'priority', + 'prioritized', 'stalled-check', 'completed', 'failed', @@ -26,6 +26,7 @@ export class QueueKeys { 'meta', 'events', 'delay', + 'pc', ].forEach(key => { keys[key] = this.toKey(name, key); }); diff --git a/src/classes/queue.ts b/src/classes/queue.ts index 053e859e0c..2c4edeb74b 100644 --- a/src/classes/queue.ts +++ b/src/classes/queue.ts @@ -388,6 +388,7 @@ export class Queue< | 'wait' | 'active' | 'paused' + | 'prioritized' | 'delayed' | 'failed' = 'completed', ): Promise { @@ -454,4 +455,12 @@ export class Queue< const client = await this.client; return client.xtrim(this.keys.events, 'MAXLEN', '~', maxLength); } + + /** + * Delete old priority helper key. + */ + async removeDeprecatedPriorityKey(): Promise { + const client = await this.client; + return client.del(this.toKey('priority')); + } } diff --git a/src/classes/sandbox.ts b/src/classes/sandbox.ts index d62136bff1..93c6045630 100644 --- a/src/classes/sandbox.ts +++ b/src/classes/sandbox.ts @@ -36,7 +36,7 @@ const sandbox = ( await job.log(msg.value); break; case ParentCommand.Update: - await job.update(msg.value); + await job.updateData(msg.value); break; } }; diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index 2bbdb7a3ad..af17e812f7 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -46,15 +46,16 @@ export class Scripts { this.moveToFinishedKeys = [ queueKeys.wait, queueKeys.active, - queueKeys.priority, + queueKeys.prioritized, queueKeys.events, queueKeys.stalled, queueKeys.limiter, queueKeys.delayed, queueKeys.paused, + queueKeys.meta, + queueKeys.pc, undefined, undefined, - queueKeys.meta, undefined, ]; } @@ -84,9 +85,10 @@ export class Scripts { queueKeys.meta, queueKeys.id, queueKeys.delayed, - queueKeys.priority, + queueKeys.prioritized, queueKeys.completed, queueKeys.events, + queueKeys.pc, ]; const fpof = opts.fpof ? { fpof: true } : {}; @@ -146,7 +148,7 @@ export class Scripts { dst = 'wait'; } - const keys = [src, dst, 'meta'].map((name: string) => + const keys = [src, dst, 'meta', 'prioritized'].map((name: string) => this.queue.toKey(name), ); @@ -256,9 +258,9 @@ export class Scripts { const metricsKey = this.queue.toKey(`metrics:${target}`); const keys = this.moveToFinishedKeys; - keys[8] = queueKeys[target]; - keys[9] = this.queue.toKey(job.id ?? ''); - keys[11] = metricsKey; + keys[10] = queueKeys[target]; + keys[11] = this.queue.toKey(job.id ?? ''); + keys[12] = metricsKey; const keepJobs = this.getKeepJobs(shouldRemove, workerKeepJobs); @@ -354,7 +356,7 @@ export class Scripts { queueKeys.wait, queueKeys.paused, delayed ? queueKeys.delayed : '', - queueKeys.priority, + queueKeys.prioritized, ]; const args = [queueKeys['']]; @@ -485,14 +487,19 @@ export class Scripts { 'wait', 'paused', 'waiting-children', + 'prioritized', ].map((key: string) => { return this.queue.toKey(key); }); if (isRedisVersionLowerThan(this.queue.redisVersion, '6.0.6')) { - return (client).getState(keys.concat([jobId])); + return (client).getState( + keys.concat([jobId, this.queue.toKey(jobId)]), + ); } - return (client).getStateV2(keys.concat([jobId])); + return (client).getStateV2( + keys.concat([jobId, this.queue.toKey(jobId)]), + ); } async changeDelay(jobId: string, delay: number): Promise { @@ -550,7 +557,8 @@ export class Scripts { this.queue.keys.wait, this.queue.keys.paused, this.queue.keys.meta, - this.queue.keys.priority, + this.queue.keys.prioritized, + this.queue.keys.pc, ]; return keys.concat([ @@ -583,7 +591,7 @@ export class Scripts { const keys: (string | number)[] = [ 'wait', 'active', - 'priority', + 'prioritized', 'delayed', jobId, ].map(name => { @@ -727,7 +735,8 @@ export class Scripts { keys.push( this.queue.keys.events, this.queue.keys.delayed, - this.queue.keys.priority, + this.queue.keys.prioritized, + this.queue.keys.pc, ); const pushCmd = (lifo ? 'R' : 'L') + 'PUSH'; @@ -825,19 +834,20 @@ export class Scripts { const keys = [ queueKeys.wait, queueKeys.active, - queueKeys.priority, + queueKeys.prioritized, queueKeys.events, queueKeys.stalled, queueKeys.limiter, queueKeys.delayed, queueKeys.paused, queueKeys.meta, + queueKeys.pc, ]; const args: (string | number | boolean | Buffer)[] = [ queueKeys[''], Date.now(), - jobId, + jobId || '', pack({ token, lockDuration: opts.lockDuration, @@ -860,7 +870,8 @@ export class Scripts { this.queue.keys.wait, this.queue.keys.paused, this.queue.keys.meta, - this.queue.keys.priority, + this.queue.keys.prioritized, + this.queue.keys.pc, this.queue.keys.events, ]; @@ -922,7 +933,7 @@ export class Scripts { this.queue.keys.paused, this.queue.keys.meta, this.queue.keys.limiter, - this.queue.keys.priority, + this.queue.keys.prioritized, this.queue.keys.events, ]; diff --git a/src/commands/addJob-8.lua b/src/commands/addJob-9.lua similarity index 96% rename from src/commands/addJob-8.lua rename to src/commands/addJob-9.lua index fd282e45ba..1d2cc7eaf0 100644 --- a/src/commands/addJob-8.lua +++ b/src/commands/addJob-9.lua @@ -20,9 +20,10 @@ KEYS[3] 'meta' KEYS[4] 'id' KEYS[5] 'delayed' - KEYS[6] 'priority' + KEYS[6] 'prioritized' KEYS[7] 'completed' KEYS[8] events stream key + KEYS[9] 'pc' priority counter ARGV[1] msgpacked arguments array [1] key prefix, @@ -145,7 +146,7 @@ elseif (delayedTimestamp ~= 0) then local target = getTargetQueueList(KEYS[3], KEYS[1], KEYS[2]) addDelayMarkerIfNeeded(target, KEYS[5]) else - local target = getTargetQueueList(KEYS[3], KEYS[1], KEYS[2]) + local target, paused = getTargetQueueList(KEYS[3], KEYS[1], KEYS[2]) -- Standard or priority add if priority == 0 then @@ -153,8 +154,7 @@ else local pushCmd = opts['lifo'] and 'RPUSH' or 'LPUSH' rcall(pushCmd, target, jobId) else - -- Priority add - addJobWithPriority(KEYS[6], priority, target, jobId) + addJobWithPriority(KEYS[1], KEYS[6], priority, paused, jobId, KEYS[9]) end -- Emit waiting event rcall("XADD", KEYS[8], "*", "event", "waiting", "jobId", jobId) diff --git a/src/commands/changePriority-4.lua b/src/commands/changePriority-4.lua deleted file mode 100644 index 6a21c541d9..0000000000 --- a/src/commands/changePriority-4.lua +++ /dev/null @@ -1,50 +0,0 @@ ---[[ - Change job priority - Input: - KEYS[1] 'wait', - KEYS[2] 'paused' - KEYS[3] 'meta' - KEYS[4] 'priority' - - ARGV[1] priority value - ARGV[2] job key - ARGV[3] job id - ARGV[4] lifo - - Output: - 0 - OK - -1 - Missing job -]] -local jobKey = ARGV[2] -local jobId = ARGV[3] -local priority = tonumber(ARGV[1]) -local rcall = redis.call - --- Includes ---- @include "includes/addJobWithPriority" ---- @include "includes/getTargetQueueList" - -if rcall("EXISTS", jobKey) == 1 then - local target = getTargetQueueList(KEYS[3], KEYS[1], KEYS[2]) - - local numRemovedElements = rcall("LREM", target, -1, jobId) - if numRemovedElements > 0 then - rcall("ZREM", KEYS[4], jobId) - - -- Standard or priority add - if priority == 0 then - -- LIFO or FIFO - local pushCmd = ARGV[4] == '1' and 'RPUSH' or 'LPUSH'; - rcall(pushCmd, target, jobId) - else - -- Priority add - addJobWithPriority(KEYS[4], priority, target, jobId) - end - end - - rcall("HSET", jobKey, "priority", priority) - - return 0 -else - return -1 -end diff --git a/src/commands/changePriority-5.lua b/src/commands/changePriority-5.lua new file mode 100644 index 0000000000..57ac5ef6ee --- /dev/null +++ b/src/commands/changePriority-5.lua @@ -0,0 +1,52 @@ +--[[ + Change job priority + Input: + KEYS[1] 'wait', + KEYS[2] 'paused' + KEYS[3] 'meta' + KEYS[4] 'prioritized' + KEYS[5] 'pc' priority counter + + ARGV[1] priority value + ARGV[2] job key + ARGV[3] job id + ARGV[4] lifo + + Output: + 0 - OK + -1 - Missing job +]] +local jobKey = ARGV[2] +local jobId = ARGV[3] +local priority = tonumber(ARGV[1]) +local rcall = redis.call + +-- Includes +--- @include "includes/addJobWithPriority" +--- @include "includes/getTargetQueueList" + +if rcall("EXISTS", jobKey) == 1 then + local target, paused = getTargetQueueList(KEYS[3], KEYS[1], KEYS[2]) + + if rcall("ZREM", KEYS[4], jobId) > 0 then + addJobWithPriority(KEYS[1], KEYS[4], priority, paused, jobId, KEYS[5]) + else + local numRemovedElements = rcall("LREM", target, -1, jobId) + if numRemovedElements > 0 then + -- Standard or priority add + if priority == 0 then + -- LIFO or FIFO + local pushCmd = ARGV[4] == '1' and 'RPUSH' or 'LPUSH'; + rcall(pushCmd, target, jobId) + else + addJobWithPriority(KEYS[1], KEYS[4], priority, paused, jobId, KEYS[5]) + end + end + end + + rcall("HSET", jobKey, "priority", priority) + + return 0 +else + return -1 +end diff --git a/src/commands/cleanJobsInSet-2.lua b/src/commands/cleanJobsInSet-2.lua index 102471f849..20f06b9352 100644 --- a/src/commands/cleanJobsInSet-2.lua +++ b/src/commands/cleanJobsInSet-2.lua @@ -35,6 +35,8 @@ if ARGV[4] == "active" then result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false) elseif ARGV[4] == "delayed" then result = cleanSet(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], limit, {"processedOn", "timestamp"}) +elseif ARGV[4] == "prioritized" then + result = cleanSet(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], limit, {"timestamp"}) elseif ARGV[4] == "wait" or ARGV[4] == "paused" then result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true) else diff --git a/src/commands/drain-4.lua b/src/commands/drain-4.lua index 5d6db09d8f..13cf03676e 100644 --- a/src/commands/drain-4.lua +++ b/src/commands/drain-4.lua @@ -6,7 +6,7 @@ KEYS[1] 'wait', KEYS[2] 'paused' KEYS[3] 'delayed' - KEYS[4] 'priority' + KEYS[4] 'prioritized' ARGV[1] queue key prefix ]] @@ -14,6 +14,7 @@ local rcall = redis.call local queueBaseKey = ARGV[1] --- @include "includes/removeJobs" +--- @include "includes/removeZSetJobs" removeListJobs(KEYS[1], true, queueBaseKey, 0) --wait removeListJobs(KEYS[2], true, queueBaseKey, 0) --paused @@ -22,4 +23,4 @@ if KEYS[3] ~= "" then removeZSetJobs(KEYS[3], true, queueBaseKey, 0) --delayed end -rcall("DEL", KEYS[4]) +removeZSetJobs(KEYS[4], true, queueBaseKey, 0) --prioritized diff --git a/src/commands/getState-7.lua b/src/commands/getState-8.lua similarity index 56% rename from src/commands/getState-7.lua rename to src/commands/getState-8.lua index a61f07aa55..8fd92c7b04 100644 --- a/src/commands/getState-7.lua +++ b/src/commands/getState-8.lua @@ -8,49 +8,58 @@ KEYS[4] 'active' key KEYS[5] 'wait' key KEYS[6] 'paused' key - KEYS[7] waitChildrenKey key + KEYS[7] 'waiting-children' key + KEYS[8] 'prioritized' key ARGV[1] job id + ARGV[2] job key Output: 'completed' 'failed' 'delayed' 'active' + 'prioritized' 'waiting' 'waiting-children' 'unknown' ]] -if redis.call("ZSCORE", KEYS[1], ARGV[1]) ~= false then +local rcall = redis.call + +if rcall("ZSCORE", KEYS[1], ARGV[1]) ~= false then return "completed" end -if redis.call("ZSCORE", KEYS[2], ARGV[1]) ~= false then +if rcall("ZSCORE", KEYS[2], ARGV[1]) ~= false then return "failed" end -if redis.call("ZSCORE", KEYS[3], ARGV[1]) ~= false then +if rcall("ZSCORE", KEYS[3], ARGV[1]) ~= false then return "delayed" end +if rcall("ZSCORE", KEYS[8], ARGV[1]) ~= false then + return "prioritized" +end + -- Includes --- @include "includes/checkItemInList" -local active_items = redis.call("LRANGE", KEYS[4] , 0, -1) +local active_items = rcall("LRANGE", KEYS[4] , 0, -1) if checkItemInList(active_items, ARGV[1]) ~= nil then return "active" end -local wait_items = redis.call("LRANGE", KEYS[5] , 0, -1) +local wait_items = rcall("LRANGE", KEYS[5] , 0, -1) if checkItemInList(wait_items, ARGV[1]) ~= nil then return "waiting" end -local paused_items = redis.call("LRANGE", KEYS[6] , 0, -1) +local paused_items = rcall("LRANGE", KEYS[6] , 0, -1) if checkItemInList(paused_items, ARGV[1]) ~= nil then return "waiting" end -if redis.call("ZSCORE", KEYS[7], ARGV[1]) ~= false then +if rcall("ZSCORE", KEYS[7], ARGV[1]) ~= false then return "waiting-children" end diff --git a/src/commands/getStateV2-7.lua b/src/commands/getStateV2-7.lua deleted file mode 100644 index a17e3fe5bd..0000000000 --- a/src/commands/getStateV2-7.lua +++ /dev/null @@ -1,51 +0,0 @@ ---[[ - Get a job state - - Input: - KEYS[1] 'completed' key, - KEYS[2] 'failed' key - KEYS[3] 'delayed' key - KEYS[4] 'active' key - KEYS[5] 'wait' key - KEYS[6] 'paused' key - KEYS[7] waitChildrenKey key - - ARGV[1] job id - Output: - 'completed' - 'failed' - 'delayed' - 'active' - 'waiting' - 'waiting-children' - 'unknown' -]] -if redis.call("ZSCORE", KEYS[1], ARGV[1]) ~= false then - return "completed" -end - -if redis.call("ZSCORE", KEYS[2], ARGV[1]) ~= false then - return "failed" -end - -if redis.call("ZSCORE", KEYS[3], ARGV[1]) ~= false then - return "delayed" -end - -if redis.call("LPOS", KEYS[4] , ARGV[1]) ~= false then - return "active" -end - -if redis.call("LPOS", KEYS[5] , ARGV[1]) ~= false then - return "waiting" -end - -if redis.call("LPOS", KEYS[6] , ARGV[1]) ~= false then - return "waiting" -end - -if redis.call("ZSCORE", KEYS[7] , ARGV[1]) ~= false then - return "waiting-children" -end - -return "unknown" diff --git a/src/commands/getStateV2-8.lua b/src/commands/getStateV2-8.lua new file mode 100644 index 0000000000..d9f7e2bfea --- /dev/null +++ b/src/commands/getStateV2-8.lua @@ -0,0 +1,59 @@ +--[[ + Get a job state + + Input: + KEYS[1] 'completed' key, + KEYS[2] 'failed' key + KEYS[3] 'delayed' key + KEYS[4] 'active' key + KEYS[5] 'wait' key + KEYS[6] 'paused' key + KEYS[7] 'waiting-children' key + KEYS[8] 'prioritized' key + + ARGV[1] job id + ARGV[2] job key + Output: + 'completed' + 'failed' + 'delayed' + 'active' + 'waiting' + 'waiting-children' + 'unknown' +]] +local rcall = redis.call + +if rcall("ZSCORE", KEYS[1], ARGV[1]) ~= false then + return "completed" +end + +if rcall("ZSCORE", KEYS[2], ARGV[1]) ~= false then + return "failed" +end + +if rcall("ZSCORE", KEYS[3], ARGV[1]) ~= false then + return "delayed" +end + +if rcall("ZSCORE", KEYS[8], ARGV[1]) ~= false then + return "prioritized" +end + +if rcall("LPOS", KEYS[4] , ARGV[1]) ~= false then + return "active" +end + +if rcall("LPOS", KEYS[5] , ARGV[1]) ~= false then + return "waiting" +end + +if rcall("LPOS", KEYS[6] , ARGV[1]) ~= false then + return "waiting" +end + +if rcall("ZSCORE", KEYS[7] , ARGV[1]) ~= false then + return "waiting-children" +end + +return "unknown" diff --git a/src/commands/includes/addJobWithPriority.lua b/src/commands/includes/addJobWithPriority.lua index 869da774da..f8c981304a 100644 --- a/src/commands/includes/addJobWithPriority.lua +++ b/src/commands/includes/addJobWithPriority.lua @@ -2,15 +2,14 @@ Function to add job considering priority. ]] -local function addJobWithPriority(priorityKey, priority, targetKey, jobId) - rcall("ZADD", priorityKey, priority, jobId) - local count = rcall("ZCOUNT", priorityKey, 0, priority) +-- Includes +--- @include "addPriorityMarkerIfNeeded" - local len = rcall("LLEN", targetKey) - local id = rcall("LINDEX", targetKey, len - (count - 1)) - if id then - rcall("LINSERT", targetKey, "BEFORE", id, jobId) - else - rcall("RPUSH", targetKey, jobId) +local function addJobWithPriority(waitKey, prioritizedKey, priority, paused, jobId, priorityCounterKey) + local prioCounter = rcall("INCR", priorityCounterKey) + local score = priority * 0x100000000 + bit.band(prioCounter, 0xffffffffffff) + rcall("ZADD", prioritizedKey, score, jobId) + if not paused then + addPriorityMarkerIfNeeded(waitKey) end end diff --git a/src/commands/includes/addPriorityMarkerIfNeeded.lua b/src/commands/includes/addPriorityMarkerIfNeeded.lua new file mode 100644 index 0000000000..ea7c2d7b2b --- /dev/null +++ b/src/commands/includes/addPriorityMarkerIfNeeded.lua @@ -0,0 +1,12 @@ +--[[ + Function priority marker to wait if needed + in order to wake up our workers and to respect priority + order as much as possible +]] +local function addPriorityMarkerIfNeeded(waitKey) + local waitLen = rcall("LLEN", waitKey) + + if waitLen == 0 then + rcall("LPUSH", waitKey, "0:0") + end +end diff --git a/src/commands/includes/cleanList.lua b/src/commands/includes/cleanList.lua index a670074541..f7e7a65225 100644 --- a/src/commands/includes/cleanList.lua +++ b/src/commands/includes/cleanList.lua @@ -35,9 +35,6 @@ local function cleanList(listKey, jobKeyPrefix, rangeStart, rangeEnd, -- occur at the end of the script rcall("LSET", listKey, rangeEnd - jobIdsLen + i, deletionMarker) removeJob(job, true, jobKeyPrefix) - if isWaiting then - rcall("ZREM", jobKeyPrefix .. "priority", job) - end deletedCount = deletedCount + 1 table.insert(deleted, job) end diff --git a/src/commands/includes/cleanSet.lua b/src/commands/includes/cleanSet.lua index 1d25d77121..3f795ccdd6 100644 --- a/src/commands/includes/cleanSet.lua +++ b/src/commands/includes/cleanSet.lua @@ -5,23 +5,12 @@ -- Includes --- @include "batches" +--- @include "getJobsInZset" --- @include "getTimestamp" --- @include "removeJob" --- We use ZRANGEBYSCORE to make the case where we're deleting a limited number --- of items in a sorted set only run a single iteration. If we simply used --- ZRANGE, we may take a long time traversing through jobs that are within the --- grace period. -local function getJobs(setKey, rangeStart, rangeEnd, maxTimestamp, limit) - if limit > 0 then - return rcall("ZRANGEBYSCORE", setKey, 0, maxTimestamp, "LIMIT", 0, limit) - else - return rcall("ZRANGE", setKey, rangeStart, rangeEnd) - end -end - local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, limit, attributes) - local jobs = getJobs(setKey, rangeStart, rangeEnd, timestamp, limit) + local jobs = getJobsInZset(setKey, rangeStart, rangeEnd, timestamp, limit) local deleted = {} local deletedCount = 0 local jobTS diff --git a/src/commands/includes/getJobsInZset.lua b/src/commands/includes/getJobsInZset.lua new file mode 100644 index 0000000000..f2f4ab1f37 --- /dev/null +++ b/src/commands/includes/getJobsInZset.lua @@ -0,0 +1,12 @@ +-- We use ZRANGEBYSCORE to make the case where we're deleting a limited number +-- of items in a sorted set only run a single iteration. If we simply used +-- ZRANGE, we may take a long time traversing through jobs that are within the +-- grace period. +local function getJobsInZset(zsetKey, rangeStart, rangeEnd, maxTimestamp, limit) + if limit > 0 then + return rcall("ZRANGEBYSCORE", zsetKey, 0, maxTimestamp, "LIMIT", 0, limit) + else + return rcall("ZRANGE", zsetKey, rangeStart, rangeEnd) + end +end + \ No newline at end of file diff --git a/src/commands/includes/moveJobFromPriorityToActive.lua b/src/commands/includes/moveJobFromPriorityToActive.lua new file mode 100644 index 0000000000..fd398f0fa0 --- /dev/null +++ b/src/commands/includes/moveJobFromPriorityToActive.lua @@ -0,0 +1,14 @@ +--[[ + Function to move job from prioritized state to active. +]] + +local function moveJobFromPriorityToActive(priorityKey, activeKey, priorityCounterKey) + local prioritizedJob = rcall("ZPOPMIN", priorityKey) + if #prioritizedJob > 0 then + rcall("LPUSH", activeKey, prioritizedJob[1]) + return prioritizedJob[1] + else + rcall("DEL", priorityCounterKey) + end +end + \ No newline at end of file diff --git a/src/commands/includes/moveJobFromWaitToActive.lua b/src/commands/includes/prepareJobForProcessing.lua similarity index 79% rename from src/commands/includes/moveJobFromWaitToActive.lua rename to src/commands/includes/prepareJobForProcessing.lua index 8c0b071083..0d106ec99a 100644 --- a/src/commands/includes/moveJobFromWaitToActive.lua +++ b/src/commands/includes/prepareJobForProcessing.lua @@ -4,7 +4,7 @@ Input: keys[1] wait key keys[2] active key - keys[3] priority key + keys[3] prioritized key keys[4] stream events key keys[5] stalled key @@ -12,34 +12,38 @@ keys[6] rate limiter key keys[7] delayed key + keys[8] paused key + keys[9] meta key + keys[10] pc priority counter + opts - token - lock token opts - lockDuration opts - limiter ]] -- Includes +--- @include "addJobWithPriority" --- @include "pushBackJobWithPriority" -local function moveJobFromWaitToActive(keys, keyPrefix, targetKey, jobId, processedOn, - maxJobs, expireTime, opts) - rcall("ZREM", keys[3], jobId) -- remove from priority +local function prepareJobForProcessing(keys, keyPrefix, targetKey, jobId, processedOn, + maxJobs, expireTime, paused, opts) local jobKey = keyPrefix .. jobId -- Check if we need to perform rate limiting. if maxJobs then local rateLimiterKey = keys[6]; - -- check if we passed rate limit, we need to remove the job and return expireTime + -- check if we exceeded rate limit, we need to remove the job and return expireTime if expireTime > 0 then -- remove from active queue and add back to the wait list rcall("LREM", keys[2], 1, jobId) local priority = tonumber(rcall("HGET", jobKey, "priority")) or 0 - if priority > 0 then - pushBackJobWithPriority(keys[3], priority, targetKey, jobId) - else + if priority == 0 then rcall("RPUSH", targetKey, jobId) + else + pushBackJobWithPriority(keys[3], priority, jobId) end -- Return when we can process more jobs diff --git a/src/commands/includes/promoteDelayedJobs.lua b/src/commands/includes/promoteDelayedJobs.lua index db595079b6..ee9166c060 100644 --- a/src/commands/includes/promoteDelayedJobs.lua +++ b/src/commands/includes/promoteDelayedJobs.lua @@ -10,28 +10,30 @@ --- @include "addJobWithPriority" -- Try to get as much as 1000 jobs at once -local function promoteDelayedJobs(delayedKey, targetKey, priorityKey, - eventStreamKey, prefix, timestamp) +local function promoteDelayedJobs(delayedKey, waitKey, targetKey, prioritizedKey, + eventStreamKey, prefix, timestamp, paused, priorityCounterKey) local jobs = rcall("ZRANGEBYSCORE", delayedKey, 0, (timestamp + 1) * 0x1000, "LIMIT", 0, 1000) if (#jobs > 0) then rcall("ZREM", delayedKey, unpack(jobs)) for _, jobId in ipairs(jobs) do + local jobKey = prefix .. jobId local priority = - tonumber(rcall("HGET", prefix .. jobId, "priority")) or 0 + tonumber(rcall("HGET", jobKey, "priority")) or 0 if priority == 0 then -- LIFO or FIFO rcall("LPUSH", targetKey, jobId) else - addJobWithPriority(priorityKey, priority, targetKey, jobId) + addJobWithPriority(waitKey, prioritizedKey, priority, paused, + jobId, priorityCounterKey) end -- Emit waiting event rcall("XADD", eventStreamKey, "*", "event", "waiting", "jobId", jobId, "prev", "delayed") - rcall("HSET", prefix .. jobId, "delay", 0) + rcall("HSET", jobKey, "delay", 0) end end end diff --git a/src/commands/includes/pushBackJobWithPriority.lua b/src/commands/includes/pushBackJobWithPriority.lua index c563f90f24..5d5a29226d 100644 --- a/src/commands/includes/pushBackJobWithPriority.lua +++ b/src/commands/includes/pushBackJobWithPriority.lua @@ -1,17 +1,9 @@ --[[ - Function to add push back job considering priority in front of same prioritized jobs. + Function to push back job considering priority in front of same prioritized jobs. ]] -local function pushBackJobWithPriority(priorityKey, priority, targetKey, jobId) - rcall("ZADD", priorityKey, priority, jobId) - local count = rcall("ZCOUNT", priorityKey, 0, priority-1) - - local len = rcall("LLEN", targetKey) - local id = rcall("LINDEX", targetKey, len - count) - rcall("ZADD", priorityKey, priority, jobId) - - if id then - rcall("LINSERT", targetKey, "BEFORE", id, jobId) - else - rcall("RPUSH", targetKey, jobId) - end +local function pushBackJobWithPriority(prioritizedKey, priority, jobId) + -- in order to put it at front of same prioritized jobs + -- we consider prioritized counter as 0 + local score = priority * 0x100000000 + rcall("ZADD", prioritizedKey, score, jobId) end diff --git a/src/commands/includes/removeJobFromAnyState.lua b/src/commands/includes/removeJobFromAnyState.lua index d9b38a0385..85acc29ad9 100644 --- a/src/commands/includes/removeJobFromAnyState.lua +++ b/src/commands/includes/removeJobFromAnyState.lua @@ -19,6 +19,9 @@ local function removeJobFromAnyState( prefix, jobId) elseif rcall("ZSCORE", prefix .. "failed", jobId) then rcall("ZREM", prefix .. "failed", jobId) return "failed" + elseif rcall("ZSCORE", prefix .. "prioritized", jobId) then + rcall("ZREM", prefix .. "prioritized", jobId) + return "prioritized" -- We remove only 1 element from the list, since we assume they are not added multiple times elseif rcall("LREM", prefix .. "wait", 1, jobId) == 1 then return "wait" diff --git a/src/commands/includes/removeJobs.lua b/src/commands/includes/removeJobs.lua index e48e24e5a0..c052034ea5 100644 --- a/src/commands/includes/removeJobs.lua +++ b/src/commands/includes/removeJobs.lua @@ -4,14 +4,12 @@ -- Includes --- @include "batches" +--- @include "removeJob" local function getListItems(keyName, max) return rcall('LRANGE', keyName, 0, max - 1) end ---- @include "getZSetItems" ---- @include "removeJob" - local function removeJobs(keys, hard, baseKey, max) for i, key in ipairs(keys) do removeJob(key, hard, baseKey) @@ -25,14 +23,3 @@ local function removeListJobs(keyName, hard, baseKey, max) rcall("LTRIM", keyName, #jobs, -1) return count end - -local function removeZSetJobs(keyName, hard, baseKey, max) - local jobs = getZSetItems(keyName, max) - local count = removeJobs(jobs, hard, baseKey, max) - if(#jobs > 0) then - for from, to in batches(#jobs, 7000) do - rcall("ZREM", keyName, unpack(jobs)) - end - end - return count -end diff --git a/src/commands/includes/removeZSetJobs.lua b/src/commands/includes/removeZSetJobs.lua new file mode 100644 index 0000000000..d2bf808322 --- /dev/null +++ b/src/commands/includes/removeZSetJobs.lua @@ -0,0 +1,15 @@ +-- Includes +--- @include "batches" +--- @include "getZSetItems" +--- @include "removeJobs" + +local function removeZSetJobs(keyName, hard, baseKey, max) + local jobs = getZSetItems(keyName, max) + local count = removeJobs(jobs, hard, baseKey, max) + if(#jobs > 0) then + for from, to in batches(#jobs, 7000) do + rcall("ZREM", keyName, unpack(jobs)) + end + end + return count +end diff --git a/src/commands/includes/updateParentDepsIfNeeded.lua b/src/commands/includes/updateParentDepsIfNeeded.lua index 144e35ea33..07d7d18796 100644 --- a/src/commands/includes/updateParentDepsIfNeeded.lua +++ b/src/commands/includes/updateParentDepsIfNeeded.lua @@ -14,7 +14,8 @@ local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDepende local activeParent = rcall("ZSCORE", parentQueueKey .. ":waiting-children", parentId) if rcall("SCARD", parentDependenciesKey) == 0 and activeParent then rcall("ZREM", parentQueueKey .. ":waiting-children", parentId) - local parentTarget = getTargetQueueList(parentQueueKey .. ":meta", parentQueueKey .. ":wait", + local parentWaitKey = parentQueueKey .. ":wait" + local parentTarget, paused = getTargetQueueList(parentQueueKey .. ":meta", parentWaitKey, parentQueueKey .. ":paused") local jobAttributes = rcall("HMGET", parentKey, "priority", "delay") local priority = tonumber(jobAttributes[1]) or 0 @@ -30,7 +31,8 @@ local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDepende elseif priority == 0 then rcall("RPUSH", parentTarget, parentId) else - addJobWithPriority(parentQueueKey .. ":priority", priority, parentTarget, parentId) + addJobWithPriority(parentWaitKey, parentQueueKey .. ":prioritized", priority, paused, + parentId, parentQueueKey .. ":pc") end rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children") diff --git a/src/commands/moveJobFromActiveToWait-9.lua b/src/commands/moveJobFromActiveToWait-9.lua index 1354a4125d..5f079748e9 100644 --- a/src/commands/moveJobFromActiveToWait-9.lua +++ b/src/commands/moveJobFromActiveToWait-9.lua @@ -9,7 +9,7 @@ KEYS[5] paused key KEYS[6] meta key KEYS[7] limiter key - KEYS[8] priority key + KEYS[8] prioritized key KEYS[9] event key ARGV[1] job id @@ -31,14 +31,14 @@ local pttl = rcall("PTTL", KEYS[7]) if lockToken == token and pttl > 0 then local removed = rcall("LREM", KEYS[1], 1, jobId) if (removed > 0) then - local target = getTargetQueueList(KEYS[6], KEYS[2], KEYS[5]) + local target, paused = getTargetQueueList(KEYS[6], KEYS[2], KEYS[5]) rcall("SREM", KEYS[3], jobId) local priority = tonumber(rcall("HGET", ARGV[3], "priority")) or 0 if priority > 0 then - pushBackJobWithPriority(KEYS[8], priority, target, jobId) + pushBackJobWithPriority(KEYS[8], priority, jobId) else rcall("RPUSH", target, jobId) end diff --git a/src/commands/moveToActive-9.lua b/src/commands/moveToActive-10.lua similarity index 72% rename from src/commands/moveToActive-9.lua rename to src/commands/moveToActive-10.lua index 420deec092..d767372733 100644 --- a/src/commands/moveToActive-9.lua +++ b/src/commands/moveToActive-10.lua @@ -9,7 +9,7 @@ Input: KEYS[1] wait key KEYS[2] active key - KEYS[3] priority key + KEYS[3] prioritized key KEYS[4] stream events key KEYS[5] stalled key @@ -20,6 +20,7 @@ -- Promote delayed jobs KEYS[8] paused key KEYS[9] meta key + KEYS[10] pc priority counter -- Arguments ARGV[1] key prefix @@ -35,16 +36,17 @@ local jobId local rcall = redis.call -- Includes ---- @include "includes/moveJobFromWaitToActive" --- @include "includes/getNextDelayedTimestamp" --- @include "includes/getRateLimitTTL" --- @include "includes/getTargetQueueList" +--- @include "includes/moveJobFromPriorityToActive" +--- @include "includes/prepareJobForProcessing" --- @include "includes/promoteDelayedJobs" -local target = getTargetQueueList(KEYS[9], KEYS[1], KEYS[8]) +local target, paused = getTargetQueueList(KEYS[9], KEYS[1], KEYS[8]) -- Check if there are delayed jobs that we can move to wait. -promoteDelayedJobs(KEYS[7], target, KEYS[3], KEYS[4], ARGV[1], ARGV[2]) +promoteDelayedJobs(KEYS[7], KEYS[1], target, KEYS[3], KEYS[4], ARGV[1], ARGV[2], paused, KEYS[10]) local opts = cmsgpack.unpack(ARGV[4]) local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max']) @@ -59,6 +61,9 @@ else return { 0, 0, expireTime, 0 } end + -- paused queue + if paused then return {0, 0, 0, 0} end + -- no job ID, try non-blocking move from wait to active jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) end @@ -72,6 +77,9 @@ if jobId then return { 0, 0, expireTime, 0 } end + -- paused queue + if paused then return {0, 0, 0, 0} end + -- Move again since we just got the marker job. jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) @@ -85,7 +93,17 @@ if jobId then if jobId then -- this script is not really moving, it is preparing the job for processing - return moveJobFromWaitToActive(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, opts) + return prepareJobForProcessing(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, paused, opts) + else + jobId = moveJobFromPriorityToActive(KEYS[3], KEYS[2], KEYS[10]) + if jobId then + return prepareJobForProcessing(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, paused, opts) + end + end +else + jobId = moveJobFromPriorityToActive(KEYS[3], KEYS[2], KEYS[10]) + if jobId then + return prepareJobForProcessing(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, paused, opts) end end diff --git a/src/commands/moveToDelayed-8.lua b/src/commands/moveToDelayed-8.lua index 6dd1571a5d..77e6cd3488 100644 --- a/src/commands/moveToDelayed-8.lua +++ b/src/commands/moveToDelayed-8.lua @@ -4,7 +4,7 @@ Input: KEYS[1] wait key KEYS[2] active key - KEYS[3] priority key + KEYS[3] prioritized key KEYS[4] delayed key KEYS[5] job key KEYS[6] events stream diff --git a/src/commands/moveToFinished-12.lua b/src/commands/moveToFinished-13.lua similarity index 84% rename from src/commands/moveToFinished-12.lua rename to src/commands/moveToFinished-13.lua index 76c73b293c..e51795d400 100644 --- a/src/commands/moveToFinished-12.lua +++ b/src/commands/moveToFinished-13.lua @@ -7,7 +7,7 @@ Input: KEYS[1] wait key KEYS[2] active key - KEYS[3] priority key + KEYS[3] prioritized key KEYS[4] event stream key KEYS[5] stalled key @@ -16,11 +16,12 @@ KEYS[7] delayed key KEYS[8] paused key + KEYS[9] meta key + KEYS[10] pc priority counter - KEYS[9] completed/failed key - KEYS[10] jobId key - KEYS[11] meta key - KEYS[12] metrics key + KEYS[11] completed/failed key + KEYS[12] jobId key + KEYS[13] metrics key ARGV[1] jobId ARGV[2] timestamp @@ -56,7 +57,8 @@ local rcall = redis.call --- Includes --- @include "includes/collectMetrics" --- @include "includes/getNextDelayedTimestamp" ---- @include "includes/moveJobFromWaitToActive" +--- @include "includes/moveJobFromPriorityToActive" +--- @include "includes/prepareJobForProcessing" --- @include "includes/moveParentFromWaitingChildrenToFailed" --- @include "includes/promoteDelayedJobs" --- @include "includes/removeJobsByMaxAge" @@ -66,7 +68,7 @@ local rcall = redis.call --- @include "includes/updateParentDepsIfNeeded" --- @include "includes/getRateLimitTTL" -local jobIdKey = KEYS[10] +local jobIdKey = KEYS[12] if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists local opts = cmsgpack.unpack(ARGV[9]) @@ -117,7 +119,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists if (numRemovedElements < 1) then return -3 end -- Trim events before emiting them to avoid trimming events emitted in this script - trimEvents(KEYS[11], KEYS[4]) + trimEvents(KEYS[9], KEYS[4]) -- If job has a parent we need to -- 1) remove this job id from parents dependencies @@ -144,7 +146,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists -- Remove job? if maxCount ~= 0 then - local targetSet = KEYS[9] + local targetSet = KEYS[11] -- Add to complete/failed set rcall("ZADD", targetSet, timestamp, jobId) rcall("HMSET", jobIdKey, ARGV[3], ARGV[4], "finishedOn", timestamp) @@ -179,18 +181,18 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists -- Collect metrics if maxMetricsSize ~= "" then - collectMetrics(KEYS[12], KEYS[12] .. ':data', maxMetricsSize, timestamp) + collectMetrics(KEYS[13], KEYS[13] .. ':data', maxMetricsSize, timestamp) end -- Try to get next job to avoid an extra roundtrip if the queue is not closing, -- and not rate limited. if (ARGV[7] == "1") then - local target = getTargetQueueList(KEYS[11], KEYS[1], KEYS[8]) + local target, paused = getTargetQueueList(KEYS[9], KEYS[1], KEYS[8]) -- Check if there are delayed jobs that can be promoted - promoteDelayedJobs(KEYS[7], target, KEYS[3], - KEYS[4], ARGV[8], timestamp) + promoteDelayedJobs(KEYS[7], KEYS[1], target, KEYS[3], + KEYS[4], ARGV[8], timestamp, paused, KEYS[10]) local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max']) -- Check if we are rate limited first. @@ -198,6 +200,9 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists if expireTime > 0 then return {0, 0, expireTime, 0} end + -- paused queue + if paused then return {0, 0, 0, 0} end + jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) -- If jobId is special ID 0:delay, then there is no job to process @@ -206,7 +211,14 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists rcall("LREM", KEYS[2], 1, jobId) else -- this script is not really moving, it is preparing the job for processing - return moveJobFromWaitToActive(KEYS, ARGV[8], target, jobId, timestamp, maxJobs, expireTime, opts) + return prepareJobForProcessing(KEYS, ARGV[8], target, jobId, timestamp, maxJobs, + expireTime, paused, opts) + end + else + jobId = moveJobFromPriorityToActive(KEYS[3], KEYS[2], KEYS[10]) + if jobId then + return prepareJobForProcessing(KEYS, ARGV[8], target, jobId, timestamp, maxJobs, + expireTime, paused, opts) end end @@ -224,7 +236,11 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists local activeLen = rcall("LLEN", KEYS[2]) if activeLen == 0 then - rcall("XADD", KEYS[4], "*", "event", "drained") + local prioritizedLen = rcall("ZCARD", KEYS[3]) + + if prioritizedLen == 0 then + rcall("XADD", KEYS[4], "*", "event", "drained") + end end end diff --git a/src/commands/obliterate-2.lua b/src/commands/obliterate-2.lua index 90f5045f4f..660281c5fa 100644 --- a/src/commands/obliterate-2.lua +++ b/src/commands/obliterate-2.lua @@ -21,7 +21,9 @@ local baseKey = KEYS[2] local rcall = redis.call +-- Includes --- @include "includes/removeJobs" +--- @include "includes/removeZSetJobs" local function removeLockKeys(keys) for i, key in ipairs(keys) do @@ -68,6 +70,12 @@ if(maxCount <= 0) then return 1 end +local prioritizedKey = baseKey .. 'prioritized' +maxCount = removeZSetJobs(prioritizedKey, true, baseKey, maxCount) +if(maxCount <= 0) then + return 1 +end + local failedKey = baseKey .. 'failed' maxCount = removeZSetJobs(failedKey, true, baseKey, maxCount) if(maxCount <= 0) then @@ -75,13 +83,13 @@ if(maxCount <= 0) then end if(maxCount > 0) then - rcall("DEL", - baseKey .. 'priority', + rcall("DEL", baseKey .. 'events', baseKey .. 'delay', baseKey .. 'stalled-check', baseKey .. 'stalled', baseKey .. 'id', + baseKey .. 'pc', baseKey .. 'meta', baseKey .. 'repeat', baseKey .. 'metrics:completed', diff --git a/src/commands/pause-4.lua b/src/commands/pause-5.lua similarity index 60% rename from src/commands/pause-4.lua rename to src/commands/pause-5.lua index 32b2101b20..b3f23025b7 100644 --- a/src/commands/pause-4.lua +++ b/src/commands/pause-5.lua @@ -5,7 +5,8 @@ KEYS[1] 'wait' or 'paused'' KEYS[2] 'paused' or 'wait' KEYS[3] 'meta' - KEYS[4] events stream key + KEYS[4] 'prioritized' + KEYS[5] events stream key ARGV[1] 'paused' or 'resumed' @@ -14,6 +15,9 @@ ]] local rcall = redis.call +-- Includes +--- @include "includes/addPriorityMarkerIfNeeded" + if rcall("EXISTS", KEYS[1]) == 1 then rcall("RENAME", KEYS[1], KEYS[2]) end @@ -22,6 +26,11 @@ if ARGV[1] == "paused" then rcall("HSET", KEYS[3], "paused", 1) else rcall("HDEL", KEYS[3], "paused") + local priorityCount = rcall("ZCARD", KEYS[4]) + + if priorityCount > 0 then + addPriorityMarkerIfNeeded(KEYS[2]) + end end -rcall("XADD", KEYS[4], "*", "event", ARGV[1]); +rcall("XADD", KEYS[5], "*", "event", ARGV[1]); diff --git a/src/commands/promote-6.lua b/src/commands/promote-7.lua similarity index 68% rename from src/commands/promote-6.lua rename to src/commands/promote-7.lua index 0a371ad394..cd966e0011 100644 --- a/src/commands/promote-6.lua +++ b/src/commands/promote-7.lua @@ -6,8 +6,9 @@ KEYS[2] 'wait' KEYS[3] 'paused' KEYS[4] 'meta' - KEYS[5] 'priority' - KEYS[6] 'event stream' + KEYS[5] 'prioritized' + KEYS[6] 'pc' priority counter + KEYS[7] 'event stream' ARGV[1] queue.toKey('') ARGV[2] jobId @@ -27,8 +28,9 @@ local jobId = ARGV[2] --- @include "includes/getTargetQueueList" if rcall("ZREM", KEYS[1], jobId) == 1 then - local priority = tonumber(rcall("HGET", ARGV[1] .. jobId, "priority")) or 0 - local target = getTargetQueueList(KEYS[4], KEYS[2], KEYS[3]) + local jobKey = ARGV[1] .. jobId + local priority = tonumber(rcall("HGET", jobKey, "priority")) or 0 + local target, paused = getTargetQueueList(KEYS[4], KEYS[2], KEYS[3]) -- Remove delayed "marker" from the wait list if there is any. -- Since we are adding a job we do not need the marker anymore. @@ -41,14 +43,13 @@ if rcall("ZREM", KEYS[1], jobId) == 1 then -- LIFO or FIFO rcall("LPUSH", target, jobId) else - -- Priority add - addJobWithPriority(KEYS[5], priority, target, jobId) + addJobWithPriority(KEYS[2], KEYS[5], priority, paused, jobId, KEYS[6]) end -- Emit waiting event (wait..ing@token) - rcall("XADD", KEYS[6], "*", "event", "waiting", "jobId", jobId, "prev", "delayed"); + rcall("XADD", KEYS[7], "*", "event", "waiting", "jobId", jobId, "prev", "delayed"); - rcall("HSET", ARGV[1] .. jobId, "delay", 0) + rcall("HSET", jobKey, "delay", 0) return 0 else diff --git a/src/commands/removeJob-1.lua b/src/commands/removeJob-1.lua index 4cc150af19..1b75630fa3 100644 --- a/src/commands/removeJob-1.lua +++ b/src/commands/removeJob-1.lua @@ -49,7 +49,6 @@ local function removeJob( prefix, jobId, parentKey) local prev = removeJobFromAnyState(prefix, jobId) - rcall("ZREM", prefix .. "priority", jobId) rcall("DEL", jobKey, jobKey .. ":logs", jobKey .. ":dependencies", jobKey .. ":processed") -- -- delete keys related to rate limiter diff --git a/src/commands/retryJob-8.lua b/src/commands/retryJob-9.lua similarity index 81% rename from src/commands/retryJob-8.lua rename to src/commands/retryJob-9.lua index 654d0a759d..0fcb3a11ed 100644 --- a/src/commands/retryJob-8.lua +++ b/src/commands/retryJob-9.lua @@ -9,7 +9,8 @@ KEYS[5] 'meta' KEYS[6] events stream KEYS[7] delayed key - KEYS[8] priority key + KEYS[8] prioritized key + KEYS[9] 'pc' priority counter ARGV[1] key prefix ARGV[2] timestamp @@ -32,10 +33,10 @@ local rcall = redis.call --- @include "includes/getTargetQueueList" --- @include "includes/promoteDelayedJobs" -local target = getTargetQueueList(KEYS[5], KEYS[2], KEYS[3]) +local target, paused = getTargetQueueList(KEYS[5], KEYS[2], KEYS[3]) -- Check if there are delayed jobs that we can move to wait. -- test example: when there are delayed jobs between retries -promoteDelayedJobs(KEYS[7], target, KEYS[8], KEYS[6], ARGV[1], ARGV[2]) +promoteDelayedJobs(KEYS[7], KEYS[2], target, KEYS[8], KEYS[6], ARGV[1], ARGV[2], paused, KEYS[9]) if rcall("EXISTS", KEYS[4]) == 1 then @@ -56,8 +57,7 @@ if rcall("EXISTS", KEYS[4]) == 1 then if priority == 0 then rcall(ARGV[3], target, ARGV[4]) else - -- Priority add - addJobWithPriority(KEYS[8], priority, target, ARGV[4]) + addJobWithPriority(KEYS[2], KEYS[8], priority, paused, ARGV[4], KEYS[9]) end -- Emit waiting event diff --git a/src/interfaces/minimal-job.ts b/src/interfaces/minimal-job.ts index 55cac094f4..0d76052708 100644 --- a/src/interfaces/minimal-job.ts +++ b/src/interfaces/minimal-job.ts @@ -111,7 +111,7 @@ export interface MinimalJob< * * @param data - the data that will replace the current jobs data. */ - update(data: DataType): Promise; + updateData(data: DataType): Promise; /** * Updates a job's progress * diff --git a/src/interfaces/sandboxed-job.ts b/src/interfaces/sandboxed-job.ts index 3e058b15b8..27c05ef2bc 100644 --- a/src/interfaces/sandboxed-job.ts +++ b/src/interfaces/sandboxed-job.ts @@ -10,6 +10,6 @@ export interface SandboxedJob opts: JobsOptions; updateProgress: (value: object | number) => Promise; log: (row: any) => void; - update: (data: any) => Promise; + updateData: (data: any) => Promise; returnValue: R; } diff --git a/src/types/job-type.ts b/src/types/job-type.ts index 86d9571e90..b4f4e22b65 100644 --- a/src/types/job-type.ts +++ b/src/types/job-type.ts @@ -4,6 +4,7 @@ export type JobState = | FinishedStatus | 'active' | 'delayed' + | 'prioritized' | 'waiting' | 'waiting-children'; diff --git a/tests/fixtures/fixture_processor_update.js b/tests/fixtures/fixture_processor_update.js index c0ec2b9867..8d4d1cb84c 100644 --- a/tests/fixtures/fixture_processor_update.js +++ b/tests/fixtures/fixture_processor_update.js @@ -9,11 +9,11 @@ const delay = require('./delay'); module.exports = function (job) { return delay(50) .then(() => { - job.update({ foo: 'bar' }); + job.updateData({ foo: 'bar' }); return delay(100); }) .then(() => { - job.update({ foo: 'baz' }); + job.updateData({ foo: 'baz' }); delay(100); return 'result'; }); diff --git a/tests/test_clean.ts b/tests/test_clean.ts index 63997b3f53..f1dba9d6e1 100644 --- a/tests/test_clean.ts +++ b/tests/test_clean.ts @@ -175,6 +175,19 @@ describe('Cleaner', () => { expect(count).to.be.eql(0); }); + describe('when prioritized state is provided', async () => { + it('should clean the number of jobs requested', async () => { + await queue.add('test', { some: 'data' }, { priority: 1 }); // as queue is empty, this job will be added to wait + await queue.add('test', { some: 'data' }, { priority: 2 }); + await queue.add('test', { some: 'data' }, { priority: 3 }); + await delay(100); + const jobs = await queue.clean(0, 1, 'prioritized'); + expect(jobs.length).to.be.eql(1); + const count = await queue.getJobCounts('prioritized'); + expect(count.prioritized).to.be.eql(2); + }); + }); + describe('when delayed state is provided', async () => { it('cleans all delayed jobs', async () => { await queue.add('test', { some: 'data' }, { delay: 5000 }); @@ -467,7 +480,7 @@ describe('Cleaner', () => { }, ); await delay(1000); - await job.update({ + await job.updateData({ step: Step.Second, }); step = Step.Second; @@ -475,7 +488,7 @@ describe('Cleaner', () => { } case Step.Second: { await delay(100); - await job.update({ + await job.updateData({ step: Step.Third, }); step = Step.Third; @@ -484,7 +497,7 @@ describe('Cleaner', () => { case Step.Third: { const shouldWait = await job.moveToWaitingChildren(token!); if (!shouldWait) { - await job.update({ + await job.updateData({ step: Step.Finish, }); step = Step.Finish; @@ -607,14 +620,17 @@ describe('Cleaner', () => { }); const count = await queue.count(); - expect(count).to.be.eql(1); + expect(count).to.be.eql(0); - await queue.clean(0, 0, 'wait'); + const priorityCount = await queue.getJobCounts('prioritized'); + expect(priorityCount.prioritized).to.be.eql(1); + + await queue.clean(0, 0, 'prioritized'); const client = await queue.client; const keys = await client.keys(`bull:${queueName}:*`); - expect(keys.length).to.be.eql(3); + expect(keys.length).to.be.eql(5); const countAfterEmpty = await queue.count(); expect(countAfterEmpty).to.be.eql(0); @@ -632,17 +648,6 @@ describe('Cleaner', () => { }); }); - it('should clean the number of jobs requested', async () => { - await queue.add('test', { some: 'data' }, { priority: 1 }); - await queue.add('test', { some: 'data' }, { priority: 2 }); - await queue.add('test', { some: 'data' }, { priority: 3 }); - await delay(100); - const jobs = await queue.clean(0, 1, 'wait'); - expect(jobs.length).to.be.eql(1); - const count = await queue.count(); - expect(count).to.be.eql(2); - }); - it('should clean a job without a timestamp', async () => { const worker = new Worker( queueName, diff --git a/tests/test_flow.ts b/tests/test_flow.ts index 332a2a10d7..0770d290a5 100644 --- a/tests/test_flow.ts +++ b/tests/test_flow.ts @@ -410,14 +410,14 @@ describe('flows', () => { }, }, }); - await job.update({ + await job.updateData({ step: Step.Second, }); step = Step.Second; break; } case Step.Second: { - await job.update({ + await job.updateData({ step: Step.Third, }); step = Step.Third; @@ -426,7 +426,7 @@ describe('flows', () => { case Step.Third: { const shouldWait = await job.moveToWaitingChildren(token); if (!shouldWait) { - await job.update({ + await job.updateData({ step: Step.Finish, }); step = Step.Finish; @@ -682,7 +682,9 @@ describe('flows', () => { ]; let childrenProcessor, - processedChildren = 0; + grandChildrenProcessor, + processedChildren = 0, + processedGrandChildren = 0; const processingChildren = new Promise( resolve => (childrenProcessor = async (job: Job) => { @@ -702,6 +704,18 @@ describe('flows', () => { }), ); + const processingGrandChildren = new Promise( + resolve => + (grandChildrenProcessor = async () => { + processedGrandChildren++; + await delay(50); + + if (processedGrandChildren == 3) { + resolve(); + } + }), + ); + const parentProcessor = async (job: Job) => { const { processed, nextProcessedCursor } = await job.getDependencies({ processed: {}, @@ -718,10 +732,11 @@ describe('flows', () => { }); const childrenWorker = new Worker(queueName, childrenProcessor, { connection, + autorun: false, }); const grandchildrenWorker = new Worker( grandchildrenQueueName, - async () => {}, + grandChildrenProcessor, { connection, }, @@ -821,6 +836,10 @@ describe('flows', () => { expect(children[2].job.id).to.be.ok; expect(children[2].job.data.foo).to.be.eql('bar'); + await processingGrandChildren; + + childrenWorker.run(); + await processingChildren; await childrenWorker.close(); @@ -1202,12 +1221,17 @@ describe('flows', () => { } return values[job.data.order - 1]; }; + }); + const processingGrandchildren = new Promise(resolve => { grandChildrenProcessor = async (job: Job) => { processedGrandChildren++; await delay(10); expect(processedGrandChildren).to.be.equal(job.data.order); + if (processedGrandChildren === 3) { + resolve(); + } return values[job.data.order - 1]; }; }); @@ -1240,6 +1264,7 @@ describe('flows', () => { connection, }); const childrenWorker = new Worker(queueName, childrenProcessor, { + autorun: false, connection, }); const grandChildrenWorker = new Worker( @@ -1308,6 +1333,10 @@ describe('flows', () => { expect(parentState).to.be.eql('waiting-children'); expect(children).to.have.length(3); + await processingGrandchildren; + + childrenWorker.run(); + await processingChildren; await processingParent; diff --git a/tests/test_getters.ts b/tests/test_getters.ts index d1ca3cf45b..da0222272a 100644 --- a/tests/test_getters.ts +++ b/tests/test_getters.ts @@ -646,7 +646,8 @@ describe('Jobs getters', function () { }); describe('.getJobCounts', () => { - it('returns job counts for active, completed, delayed, failed, paused, waiting and waiting-children', async () => { + it(`returns job counts for active, completed, delayed, failed, paused, prioritized, + waiting and waiting-children`, async () => { await queue.waitUntilReady(); let fail = true; @@ -683,6 +684,7 @@ describe('Jobs getters', function () { }); await queue.add('test', { idx: 2 }, { delay: 5000 }); + await queue.add('test', { idx: 3 }, { priority: 5 }); await completing; @@ -693,6 +695,7 @@ describe('Jobs getters', function () { delayed: 1, failed: 1, paused: 0, + prioritized: 1, waiting: 1, 'waiting-children': 1, }); diff --git a/tests/test_job.ts b/tests/test_job.ts index 72b47ad4f6..3ff83d7a65 100644 --- a/tests/test_job.ts +++ b/tests/test_job.ts @@ -119,6 +119,26 @@ describe('Job', function () { ); }); }); + + describe('when priority option is provided as float', () => { + it('throws an error', async () => { + const data = { foo: 'bar' }; + const opts = { priority: 1.1 }; + await expect(Job.create(queue, 'test', data, opts)).to.be.rejectedWith( + 'Priority should not be float', + ); + }); + }); + + describe('when priority option is provided with a value greater than 2097152', () => { + it('throws an error', async () => { + const data = { foo: 'bar' }; + const opts = { priority: 2097153 }; + await expect(Job.create(queue, 'test', data, opts)).to.be.rejectedWith( + 'Priority should be between 0 and 2097152', + ); + }); + }); }); describe('JSON.stringify', () => { @@ -184,7 +204,7 @@ describe('Job', function () { 'test', { foo: 'bar' }, ); - await job.update({ baz: 'qux' }); + await job.updateData({ baz: 'qux' }); const updatedJob = await Job.fromId(queue, job.id); expect(updatedJob.data).to.be.eql({ baz: 'qux' }); @@ -194,7 +214,7 @@ describe('Job', function () { it('throws error', async function () { const job = await Job.create(queue, 'test', { foo: 'bar' }); await job.remove(); - await expect(job.update({ foo: 'baz' })).to.be.rejectedWith( + await expect(job.updateData({ foo: 'baz' })).to.be.rejectedWith( `Missing key for job ${job.id}. updateData`, ); }); @@ -882,7 +902,7 @@ describe('Job', function () { }); describe('when lifo option is provided as false', () => { - it('moves job to the tail of wait list', async () => { + it('moves job to the tail of wait list and has more priority', async () => { await queue.pause(); const job = await Job.create( queue, @@ -909,7 +929,7 @@ describe('Job', function () { worker.on( 'completed', after(2, job => { - expect(job.name).to.be.eql('test1'); + expect(job.name).to.be.eql('test2'); resolve(); }), ); @@ -979,44 +999,41 @@ describe('Job', function () { }); it('should process a promoted job according to its priority', async function () { - this.timeout(10000); + this.timeout(5000); + const completed: string[] = []; const worker = new Worker( queueName, - () => { - return delay(100); + job => { + completed.push(job.id!); + return delay(200); }, - { connection }, + { connection, autorun: false }, ); await worker.waitUntilReady(); - const completed: string[] = []; - - const done = new Promise(resolve => { - worker.on('completed', job => { - completed.push(job.id!); - if (completed.length > 3) { + const completing = new Promise(resolve => { + worker.on( + 'completed', + after(4, () => { expect(completed).to.be.eql(['a', 'b', 'c', 'd']); resolve(); - } - }); + }), + ); }); - const processStarted = new Promise(resolve => - worker.on('active', after(2, resolve)), + await queue.add('test', {}, { jobId: 'a', priority: 1 }); + await queue.add('test', {}, { jobId: 'b', priority: 2 }); + await queue.add('test', {}, { jobId: 'd', priority: 4 }); + const job = await queue.add( + 'test', + {}, + { jobId: 'c', delay: 2000, priority: 3 }, ); - - const add = (jobId: string, ms = 0) => - queue.add('test', {}, { jobId, delay: ms, priority: 1 }); - - await add('a'); - await add('b', 1); - await processStarted; - const job = await add('c', 2000); - await job.promote(); - await add('d', 1); - await done; + worker.run(); + + await completing; }); it('should not promote a job that is not delayed', async () => { diff --git a/tests/test_queue.ts b/tests/test_queue.ts index 5d1e823b86..2b9ceca52d 100644 --- a/tests/test_queue.ts +++ b/tests/test_queue.ts @@ -73,7 +73,7 @@ import { default as IORedis } from 'ioredis'; import { describe, beforeEach, it } from 'mocha'; import * as sinon from 'sinon'; import { v4 } from 'uuid'; -import { FlowProducer, Queue, Worker } from '../src/classes'; +import { FlowProducer, Job, Queue, Worker } from '../src/classes'; import { delay, removeAllQueueData } from '../src/utils'; describe('queues', function () { @@ -110,7 +110,7 @@ describe('queues', function () { describe('.drain', () => { it('count added, unprocessed jobs', async () => { const maxJobs = 100; - const added = []; + const added: Promise>[] = []; for (let i = 1; i <= maxJobs; i++) { added.push(queue.add('test', { foo: 'bar', num: i }, { priority: i })); @@ -118,7 +118,10 @@ describe('queues', function () { await Promise.all(added); const count = await queue.count(); - expect(count).to.be.eql(maxJobs); + expect(count).to.be.eql(0); + const priorityCount = await queue.getJobCountByTypes('prioritized'); + expect(priorityCount).to.be.eql(100); + await queue.drain(); const countAfterEmpty = await queue.count(); expect(countAfterEmpty).to.be.eql(0); @@ -126,7 +129,7 @@ describe('queues', function () { const client = await queue.client; const keys = await client.keys(`bull:${queue.name}:*`); - expect(keys.length).to.be.eql(3); + expect(keys.length).to.be.eql(4); }); describe('when having a flow', async () => { @@ -404,6 +407,24 @@ describe('queues', function () { }); }); + describe('.removeDeprecatedPriorityKey', () => { + it('removes old priority key', async () => { + const client = await queue.client; + await client.zadd(`bull:${queue.name}:priority`, 1, 'a'); + await client.zadd(`bull:${queue.name}:priority`, 2, 'b'); + + const count = await client.zcard(`bull:${queue.name}:priority`); + + expect(count).to.be.eql(2); + + await queue.removeDeprecatedPriorityKey(); + + const updatedCount = await client.zcard(`bull:${queue.name}:priority`); + + expect(updatedCount).to.be.eql(0); + }); + }); + describe('.retryJobs', () => { it('retries all failed jobs by default', async () => { await queue.waitUntilReady(); diff --git a/tests/test_rate_limiter.ts b/tests/test_rate_limiter.ts index 230ce1bb3a..d30de5a63f 100644 --- a/tests/test_rate_limiter.ts +++ b/tests/test_rate_limiter.ts @@ -442,7 +442,7 @@ describe('Rate Limiter', function () { this.timeout(6000); const numJobs = 4; - const dynamicLimit = 250; + const dynamicLimit = 500; const duration = 100; const worker = new Worker( @@ -459,14 +459,15 @@ describe('Rate Limiter', function () { }, }, ); + await worker.waitUntilReady(); for (let i = 1; i <= numJobs; i++) { await queue.add(`${i}`, {}, { priority: 10 }); } - await delay(dynamicLimit); + await delay(dynamicLimit / 2); - const jobs = await queue.getJobs(['waiting'], 0, -1, true); + const jobs = await queue.getJobs(['prioritized'], 0, -1, true); expect(jobs.map(x => x.name)).to.eql(['1', '2', '3', '4']); await worker.close(); @@ -502,7 +503,7 @@ describe('Rate Limiter', function () { await delay(dynamicLimit * 4); - const jobs = await queue.getJobs(['waiting'], 0, -1, true); + const jobs = await queue.getJobs(['prioritized'], 0, -1, true); expect(jobs.map(x => x.name)).to.eql(['1', '3', '2', '4']); await worker.close(); @@ -657,7 +658,7 @@ describe('Rate Limiter', function () { }); it('should obey priority', async function () { - this.timeout(20000); + this.timeout(10000); const numJobs = 10; const priorityBuckets: { [key: string]: number } = { diff --git a/tests/test_repeat.ts b/tests/test_repeat.ts index 54bcb0fe6a..3a368c531d 100644 --- a/tests/test_repeat.ts +++ b/tests/test_repeat.ts @@ -1258,6 +1258,7 @@ describe('repeat', function () { const nextTick = 1000; let processor; + this.clock.setSystemTime(new Date('2017-02-02 7:21:42')); const processing = new Promise((resolve, reject) => { processor = async (job: Job) => { diff --git a/tests/test_worker.ts b/tests/test_worker.ts index f3e538a316..b8557ed368 100644 --- a/tests/test_worker.ts +++ b/tests/test_worker.ts @@ -1140,7 +1140,7 @@ describe('workers', function () { expect(job.data.foo).to.be.equal('bar'); throw jobError; }, - { connection }, + { autorun: false, connection }, ); await worker.waitUntilReady(); @@ -1148,7 +1148,7 @@ describe('workers', function () { expect(job.id).to.be.ok; expect(job.data.foo).to.be.eql('bar'); - await new Promise(resolve => { + const failing = new Promise(resolve => { worker.once('failed', async (job, err) => { expect(job).to.be.ok; expect(job.finishedOn).to.be.a('number'); @@ -1158,6 +1158,10 @@ describe('workers', function () { }); }); + worker.run(); + + await failing; + await worker.close(); }); @@ -2298,7 +2302,7 @@ describe('workers', function () { while (step !== Step.Finish) { switch (step) { case Step.Initial: { - await job.update({ + await job.updateData({ step: Step.Second, }); step = Step.Second; @@ -2308,7 +2312,7 @@ describe('workers', function () { if (job.attemptsMade < 3) { throw new Error('Not yet!'); } - await job.update({ + await job.updateData({ step: Step.Finish, }); step = Step.Finish; @@ -2366,13 +2370,13 @@ describe('workers', function () { switch (step) { case Step.Initial: { await job.moveToDelayed(Date.now() + 200, token); - await job.update({ + await job.updateData({ step: Step.Second, }); throw new DelayedError(); } case Step.Second: { - await job.update({ + await job.updateData({ step: Step.Finish, }); step = Step.Finish; @@ -2442,7 +2446,7 @@ describe('workers', function () { }, }, ); - await job.update({ + await job.updateData({ step: Step.Second, }); step = Step.Second; @@ -2459,7 +2463,7 @@ describe('workers', function () { }, }, ); - await job.update({ + await job.updateData({ step: Step.Third, }); step = Step.Third; @@ -2469,7 +2473,7 @@ describe('workers', function () { waitingChildrenStepExecutions++; const shouldWait = await job.moveToWaitingChildren(token); if (!shouldWait) { - await job.update({ + await job.updateData({ step: Step.Finish, }); step = Step.Finish; @@ -2819,7 +2823,7 @@ describe('workers', function () { if (err instanceof CustomError) { const data = job.data; data.ids = err.failedIds; - await job.update(data); + await job.updateData(data); return 2500; } return 500; From e0ab7e6fd62487884096ed8fc6164a0be0c4d581 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 21 Jun 2023 21:58:02 +0000 Subject: [PATCH 167/322] chore(release): 4.0.0 [skip ci] # [4.0.0](https://github.com/taskforcesh/bullmq/compare/v3.15.8...v4.0.0) (2023-06-21) ### Bug Fixes * **python:** pass right params to xtrim method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([a55fd77](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) ### Performance Improvements * **priority:** add prioritized as a new state ([#1984](https://github.com/taskforcesh/bullmq/issues/1984)) (python) ([42a890a](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) ### BREAKING CHANGES * **priority:** priority is separeted in its own zset, no duplication needed * feat(queue): add removeDeprecatedPriorityKey method * refactor: change job method name update to updateData ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) --- docs/gitbook/changelog.md | 23 +++++++++++++++++++++++ package.json | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 9d0da17083..aec093b8a3 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,26 @@ +# [4.0.0](https://github.com/taskforcesh/bullmq/compare/v3.15.8...v4.0.0) (2023-06-21) + + +### Bug Fixes + +* **python:** pass right params to xtrim method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([a55fd77](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) + + +### Performance Improvements + +* **priority:** add prioritized as a new state ([#1984](https://github.com/taskforcesh/bullmq/issues/1984)) (python) ([42a890a](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) + + +### BREAKING CHANGES + +* **priority:** priority is separeted in its own zset, no duplication needed + +* feat(queue): add removeDeprecatedPriorityKey method + +* refactor: change job method name update to updateData + +ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) + ## [3.15.8](https://github.com/taskforcesh/bullmq/compare/v3.15.7...v3.15.8) (2023-06-16) diff --git a/package.json b/package.json index bf4267948f..03d8d1aa8f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "3.15.8", + "version": "4.0.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From b6b4579c77c277955ec5318d195b98742c370102 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Wed, 21 Jun 2023 21:59:13 +0000 Subject: [PATCH 168/322] 1.0.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 7 +++++++ python/bullmq/__init__.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index fd6309e10f..d2cd42acc4 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,13 @@ +## v1.0.0 (2023-06-21) +### Breaking +* priority is separeted in its own zset, no duplication needed ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) + +### Performance +* **priority:** Add prioritized as a new state (#1984) (python) ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) + ## v0.5.6 (2023-06-21) ### Fix * **python:** Pass right params to xtrim method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([`a55fd77`](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index ffb1c4987a..facd67f7c0 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "0.5.6" +__version__ = "1.0.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From ef2aab97592dd55431e413f39b3d97b3db0e5ed4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Jun 2023 00:06:49 -0500 Subject: [PATCH 169/322] chore(deps): update github/codeql-action digest to f6e388e (#2003) --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 153e9c8fa9..c69bde76e6 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,7 +42,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@6c089f53dd51dc3fc7e599c3cb5356453a52ca9e # v2 + uses: github/codeql-action/init@f6e388ebf0efc915c6c5b165b019ee61a6746a38 # v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -53,7 +53,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@6c089f53dd51dc3fc7e599c3cb5356453a52ca9e # v2 + uses: github/codeql-action/autobuild@f6e388ebf0efc915c6c5b165b019ee61a6746a38 # v2 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -67,4 +67,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@6c089f53dd51dc3fc7e599c3cb5356453a52ca9e # v2 + uses: github/codeql-action/analyze@f6e388ebf0efc915c6c5b165b019ee61a6746a38 # v2 From df50b99ac22ef92d816ed2cd195de986a0140c6d Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 22 Jun 2023 14:58:06 +0000 Subject: [PATCH 170/322] GITBOOK-169: New state architecture considering prioritized state --- .../mermaid-diagram-2023-06-22-093213 (1).png | Bin 0 -> 64286 bytes .../mermaid-diagram-2023-06-22-093213.png | Bin 0 -> 64286 bytes .../mermaid-diagram-2023-06-22-093303.png | Bin 0 -> 57368 bytes .../mermaid-diagram-2023-06-22-095138.png | Bin 0 -> 57908 bytes docs/gitbook/guide/architecture.md | 4 ++-- 5 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-093213 (1).png create mode 100644 docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-093213.png create mode 100644 docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-093303.png create mode 100644 docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-095138.png diff --git a/docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-093213 (1).png b/docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-093213 (1).png new file mode 100644 index 0000000000000000000000000000000000000000..e8c393440f21119e04fe0fad8da1cdc2045afe3e GIT binary patch literal 64286 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 BqR{{V literal 0 HcmV?d00001 diff --git a/docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-093213.png b/docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-093213.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c393440f21119e04fe0fad8da1cdc2045afe3e GIT binary patch literal 64286 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 BqR{{V literal 0 HcmV?d00001 diff --git a/docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-093303.png b/docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-093303.png new file mode 100644 index 0000000000000000000000000000000000000000..1a63de3b90a0f66726ce0c6f9ada11d9ebd651c5 GIT binary patch literal 57368 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 HI3eb?y252Du4nJ0)JKmlv6_0y50jMXCV|cIwE_ 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 literal 0 HcmV?d00001 diff --git a/docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-095138.png b/docs/gitbook/.gitbook/assets/mermaid-diagram-2023-06-22-095138.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f8bd7c093d0f07d29d785667f09c9c673060ad GIT binary patch literal 57908 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%0A{U7?p;%B^Vu*FZQB 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%0AVqz{tjQbt$ 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 af&C0pYxJX?`x9#!fWXt$&t;ucLK6VY#{t~{ literal 0 HcmV?d00001 diff --git a/docs/gitbook/guide/architecture.md b/docs/gitbook/guide/architecture.md index b48907ba21..b873decaf3 100644 --- a/docs/gitbook/guide/architecture.md +++ b/docs/gitbook/guide/architecture.md @@ -8,7 +8,7 @@ description: >- In order to use the full potential of Bull queues, it is important to understand the lifecycle of a job. From the moment a producer calls the [`add`](https://api.docs.bullmq.io/classes/Queue.html#add) method on a queue instance, a job enters a lifecycle where it will be in different states, until its completion or failure (although technically a failed job could be retried and get a new lifecycle). -![Lifecycle of a job - Queue](../.gitbook/assets/architecture.png) +

Lifecycle of a job - Queue

When a job is added to a queue it can be in one of two states, it can either be in the “wait” status, which is, in fact, a waiting list, where all jobs must enter before they can be processed, or it can be in a “delayed” status: a delayed status implies that the job is waiting for some timeout or to be promoted for being processed, however, a delayed job will not be processed directly, instead it will be placed at the beginning of the waiting list and processed as soon as a worker is idle. @@ -16,6 +16,6 @@ The next state for a job is the “active” state. The active state is represen Another way to add a job is by the [`add`](https://api.docs.bullmq.io/classes/FlowProducer.html#add) method on a flow producer instance. -![Lifecycle of a job - Flow Producer](<../.gitbook/assets/flow-architecture (1).png>) +

Lifecycle of a job - Flow Producer

When a job is added by a flow producer, it can be in one of two states, it can either be in the “wait” status, when there aren't children, or it can be in a “waiting-children” status: a waiting-children status implies that the job is waiting for all its children to be completed, however, a waiting-children job will not be processed directly, instead it will be placed at the waiting list or at delayed set (if delay is provided) as soon as the last child is marked as completed. From 2e7c90d2a5d533d23ec6a9f525259211492097f1 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 22 Jun 2023 15:05:00 +0000 Subject: [PATCH 171/322] GITBOOK-170: delete old architecture images From 7363abebce6e3bcf067fc7c220d845807ebb1489 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 23 Jun 2023 11:39:32 -0500 Subject: [PATCH 172/322] feat(queue): add getPrioritized and getPrioritizedCount methods (#2005) --- docs/gitbook/guide/architecture.md | 10 +++-- docs/gitbook/guide/jobs/prioritized.md | 2 +- src/classes/queue-getters.ts | 24 +++++++++- src/classes/scripts.ts | 8 +--- src/commands/getState-8.lua | 1 - src/commands/getStateV2-8.lua | 1 - .../includes/prepareJobForProcessing.lua | 3 +- src/commands/moveJobFromActiveToWait-9.lua | 2 +- src/commands/moveToActive-10.lua | 7 ++- src/commands/moveToFinished-13.lua | 5 +-- tests/test_clean.ts | 2 +- tests/test_getters.ts | 45 +++++++++++++++++++ tests/test_queue.ts | 2 +- 13 files changed, 87 insertions(+), 25 deletions(-) diff --git a/docs/gitbook/guide/architecture.md b/docs/gitbook/guide/architecture.md index b873decaf3..7843fd721c 100644 --- a/docs/gitbook/guide/architecture.md +++ b/docs/gitbook/guide/architecture.md @@ -10,12 +10,16 @@ In order to use the full potential of Bull queues, it is important to understand

Lifecycle of a job - Queue

-When a job is added to a queue it can be in one of two states, it can either be in the “wait” status, which is, in fact, a waiting list, where all jobs must enter before they can be processed, or it can be in a “delayed” status: a delayed status implies that the job is waiting for some timeout or to be promoted for being processed, however, a delayed job will not be processed directly, instead it will be placed at the beginning of the waiting list and processed as soon as a worker is idle. +When a job is added to a queue it can be in one of three states, it can either be in the **“wait”** status, which is, in fact, a waiting list, where all jobs must enter before they can be processed, or it can be in a **“prioritized“** status: a prioritized status implies that a job with higher priority will be processed first, or it can be in a **“delayed”** status: a delayed status implies that the job is waiting for some timeout or to be promoted for being processed, however, a delayed job will not be processed directly, instead it will be placed at the beginning of the waiting list or at prioritized set and processed as soon as a worker is idle. -The next state for a job is the “active” state. The active state is represented by a set, and are jobs that are currently being processed, i.e. they are running in the `process` function explained in the previous chapter. A job can be in the active state for an unlimited amount of time until the process is completed or an exception is thrown so that the job will end in either the “completed” or the “failed” status. +{% hint style="warning" %} +Note that priorities go from 0 to 2^21, where 0 is the highest priority, this follows a similar standard as processed in Unix (https://en.wikipedia.org/wiki/Nice_(Unix), where a higher number means less priority). +{% endhint %} + +The next state for a job is the **“active”** state. The active state is represented by a set, and are jobs that are currently being processed, i.e. they are running in the `process` function explained in the previous chapter. A job can be in the active state for an unlimited amount of time until the process is completed or an exception is thrown so that the job will end in either the **“completed”** or the **“failed”** status. Another way to add a job is by the [`add`](https://api.docs.bullmq.io/classes/FlowProducer.html#add) method on a flow producer instance.

Lifecycle of a job - Flow Producer

-When a job is added by a flow producer, it can be in one of two states, it can either be in the “wait” status, when there aren't children, or it can be in a “waiting-children” status: a waiting-children status implies that the job is waiting for all its children to be completed, however, a waiting-children job will not be processed directly, instead it will be placed at the waiting list or at delayed set (if delay is provided) as soon as the last child is marked as completed. +When a job is added by a flow producer, it can be in one of three states, it can either be in the **“wait”** or **“prioritized“** or **“delayed“** status, when there aren't children, or it can be in a **“waiting-children”** status: a waiting-children status implies that the job is waiting for all its children to be completed, however, a waiting-children job will not be processed directly, instead it will be placed at the waiting list or at delayed set (if delay is provided) or at prioritized set (if delay is 0 and priority is greater than 0) as soon as the last child is marked as completed. diff --git a/docs/gitbook/guide/jobs/prioritized.md b/docs/gitbook/guide/jobs/prioritized.md index daaf290fa5..f7fd06fdd5 100644 --- a/docs/gitbook/guide/jobs/prioritized.md +++ b/docs/gitbook/guide/jobs/prioritized.md @@ -3,7 +3,7 @@ Jobs can also include a priority option. Using priorities, job's processing order will be affected by the specified priority instead of following a FIFO or LIFO pattern. {% hint style="warning" %} -Adding prioritized jobs is a slower operation than the other types of jobs, with a complexity O(n) relative to the number of jobs waiting in the Queue. +Adding prioritized jobs is a slower operation than the other types of jobs, with a complexity O(log(n)) relative to the number of jobs in prioritized set in the Queue. {% endhint %} Note that the priorities go from 1 to MAX_INT, whereas a lower number is always a higher priority than higher numbers. diff --git a/src/classes/queue-getters.ts b/src/classes/queue-getters.ts index dcfaff3e8a..992fd44844 100644 --- a/src/classes/queue-getters.ts +++ b/src/classes/queue-getters.ts @@ -45,6 +45,7 @@ export class QueueGetters< case 'completed': case 'failed': case 'delayed': + case 'prioritized': case 'repeat': case 'waiting-children': return callback(key, count ? 'zcard' : 'zrange'); @@ -89,13 +90,15 @@ export class QueueGetters< } /** - Returns the number of jobs waiting to be processed. This includes jobs that are "waiting" or "delayed". + Returns the number of jobs waiting to be processed. This includes jobs that are + "waiting" or "delayed" or "prioritized" or "waiting-children". */ async count(): Promise { const count = await this.getJobCountByTypes( 'waiting', 'paused', 'delayed', + 'prioritized', 'waiting-children', ); @@ -173,6 +176,13 @@ export class QueueGetters< return this.getJobCountByTypes('active'); } + /** + * Returns the number of jobs in prioritized status. + */ + getPrioritizedCount(): Promise { + return this.getJobCountByTypes('prioritized'); + } + /** * Returns the number of jobs in waiting or paused statuses. */ @@ -235,6 +245,18 @@ export class QueueGetters< return this.getJobs(['delayed'], start, end, true); } + /** + * Returns the jobs that are in the "prioritized" status. + * @param start - zero based index from where to start returning jobs. + * @param end - zero based index where to stop returning jobs. + */ + getPrioritized( + start = 0, + end = -1, + ): Promise[]> { + return this.getJobs(['prioritized'], start, end, true); + } + /** * Returns the jobs that are in the "completed" status. * @param start - zero based index from where to start returning jobs. diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index af17e812f7..ed6ada91db 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -493,13 +493,9 @@ export class Scripts { }); if (isRedisVersionLowerThan(this.queue.redisVersion, '6.0.6')) { - return (client).getState( - keys.concat([jobId, this.queue.toKey(jobId)]), - ); + return (client).getState(keys.concat([jobId])); } - return (client).getStateV2( - keys.concat([jobId, this.queue.toKey(jobId)]), - ); + return (client).getStateV2(keys.concat([jobId])); } async changeDelay(jobId: string, delay: number): Promise { diff --git a/src/commands/getState-8.lua b/src/commands/getState-8.lua index 8fd92c7b04..f7195f5bef 100644 --- a/src/commands/getState-8.lua +++ b/src/commands/getState-8.lua @@ -12,7 +12,6 @@ KEYS[8] 'prioritized' key ARGV[1] job id - ARGV[2] job key Output: 'completed' 'failed' diff --git a/src/commands/getStateV2-8.lua b/src/commands/getStateV2-8.lua index d9f7e2bfea..4ee25191f9 100644 --- a/src/commands/getStateV2-8.lua +++ b/src/commands/getStateV2-8.lua @@ -12,7 +12,6 @@ KEYS[8] 'prioritized' key ARGV[1] job id - ARGV[2] job key Output: 'completed' 'failed' diff --git a/src/commands/includes/prepareJobForProcessing.lua b/src/commands/includes/prepareJobForProcessing.lua index 0d106ec99a..7181e4f5f7 100644 --- a/src/commands/includes/prepareJobForProcessing.lua +++ b/src/commands/includes/prepareJobForProcessing.lua @@ -22,11 +22,10 @@ ]] -- Includes ---- @include "addJobWithPriority" --- @include "pushBackJobWithPriority" local function prepareJobForProcessing(keys, keyPrefix, targetKey, jobId, processedOn, - maxJobs, expireTime, paused, opts) + maxJobs, expireTime, opts) local jobKey = keyPrefix .. jobId -- Check if we need to perform rate limiting. diff --git a/src/commands/moveJobFromActiveToWait-9.lua b/src/commands/moveJobFromActiveToWait-9.lua index 5f079748e9..14436a1c8c 100644 --- a/src/commands/moveJobFromActiveToWait-9.lua +++ b/src/commands/moveJobFromActiveToWait-9.lua @@ -31,7 +31,7 @@ local pttl = rcall("PTTL", KEYS[7]) if lockToken == token and pttl > 0 then local removed = rcall("LREM", KEYS[1], 1, jobId) if (removed > 0) then - local target, paused = getTargetQueueList(KEYS[6], KEYS[2], KEYS[5]) + local target = getTargetQueueList(KEYS[6], KEYS[2], KEYS[5]) rcall("SREM", KEYS[3], jobId) diff --git a/src/commands/moveToActive-10.lua b/src/commands/moveToActive-10.lua index d767372733..51426984ec 100644 --- a/src/commands/moveToActive-10.lua +++ b/src/commands/moveToActive-10.lua @@ -92,18 +92,17 @@ if jobId then end if jobId then - -- this script is not really moving, it is preparing the job for processing - return prepareJobForProcessing(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, paused, opts) + return prepareJobForProcessing(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, opts) else jobId = moveJobFromPriorityToActive(KEYS[3], KEYS[2], KEYS[10]) if jobId then - return prepareJobForProcessing(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, paused, opts) + return prepareJobForProcessing(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, opts) end end else jobId = moveJobFromPriorityToActive(KEYS[3], KEYS[2], KEYS[10]) if jobId then - return prepareJobForProcessing(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, paused, opts) + return prepareJobForProcessing(KEYS, ARGV[1], target, jobId, ARGV[2], maxJobs, expireTime, opts) end end diff --git a/src/commands/moveToFinished-13.lua b/src/commands/moveToFinished-13.lua index e51795d400..62371ad4b0 100644 --- a/src/commands/moveToFinished-13.lua +++ b/src/commands/moveToFinished-13.lua @@ -210,15 +210,14 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists if string.sub(jobId, 1, 2) == "0:" then rcall("LREM", KEYS[2], 1, jobId) else - -- this script is not really moving, it is preparing the job for processing return prepareJobForProcessing(KEYS, ARGV[8], target, jobId, timestamp, maxJobs, - expireTime, paused, opts) + expireTime, opts) end else jobId = moveJobFromPriorityToActive(KEYS[3], KEYS[2], KEYS[10]) if jobId then return prepareJobForProcessing(KEYS, ARGV[8], target, jobId, timestamp, maxJobs, - expireTime, paused, opts) + expireTime, opts) end end diff --git a/tests/test_clean.ts b/tests/test_clean.ts index f1dba9d6e1..5415083f30 100644 --- a/tests/test_clean.ts +++ b/tests/test_clean.ts @@ -620,7 +620,7 @@ describe('Cleaner', () => { }); const count = await queue.count(); - expect(count).to.be.eql(0); + expect(count).to.be.eql(1); const priorityCount = await queue.getJobCounts('prioritized'); expect(priorityCount.prioritized).to.be.eql(1); diff --git a/tests/test_getters.ts b/tests/test_getters.ts index da0222272a..775d00638a 100644 --- a/tests/test_getters.ts +++ b/tests/test_getters.ts @@ -331,6 +331,51 @@ describe('Jobs getters', function () { await failed; }); + describe('.count', () => { + describe('when there are prioritized jobs', () => { + it('retries count considering prioritized jobs', async () => { + await queue.waitUntilReady(); + + for (const index of Array.from(Array(8).keys())) { + await queue.add('test', { idx: index }, { priority: index + 1 }); + } + await queue.add('test', {}); + + const count = await queue.count(); + + expect(count).to.be.equal(9); + }); + }); + }); + + describe('.getPrioritized', () => { + it('retries prioritized job instances', async () => { + await queue.waitUntilReady(); + + for (const index of Array.from(Array(8).keys())) { + await queue.add('test', { idx: index }, { priority: index + 1 }); + } + + const prioritizedJobs = await queue.getPrioritized(); + + expect(prioritizedJobs.length).to.be.equal(8); + }); + }); + + describe('.getPrioritizedCount', () => { + it('retries prioritized count', async () => { + await queue.waitUntilReady(); + + for (const index of Array.from(Array(8).keys())) { + await queue.add('test', { idx: index }, { priority: index + 1 }); + } + + const prioritizedCount = await queue.getPrioritizedCount(); + + expect(prioritizedCount).to.be.equal(8); + }); + }); + it('should get all failed jobs when no range is provided', async () => { const worker = new Worker( queueName, diff --git a/tests/test_queue.ts b/tests/test_queue.ts index 2b9ceca52d..13de30d004 100644 --- a/tests/test_queue.ts +++ b/tests/test_queue.ts @@ -118,7 +118,7 @@ describe('queues', function () { await Promise.all(added); const count = await queue.count(); - expect(count).to.be.eql(0); + expect(count).to.be.eql(100); const priorityCount = await queue.getJobCountByTypes('prioritized'); expect(priorityCount).to.be.eql(100); From 65184e3f1388083e63ff956dea4ad62a1addf710 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 23 Jun 2023 16:40:47 +0000 Subject: [PATCH 173/322] chore(release): 4.1.0 [skip ci] # [4.1.0](https://github.com/taskforcesh/bullmq/compare/v4.0.0...v4.1.0) (2023-06-23) ### Features * **queue:** add getPrioritized and getPrioritizedCount methods ([#2005](https://github.com/taskforcesh/bullmq/issues/2005)) ([7363abe](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index aec093b8a3..f183db9772 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +# [4.1.0](https://github.com/taskforcesh/bullmq/compare/v4.0.0...v4.1.0) (2023-06-23) + + +### Features + +* **queue:** add getPrioritized and getPrioritizedCount methods ([#2005](https://github.com/taskforcesh/bullmq/issues/2005)) ([7363abe](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) + # [4.0.0](https://github.com/taskforcesh/bullmq/compare/v3.15.8...v4.0.0) (2023-06-21) diff --git a/package.json b/package.json index 03d8d1aa8f..8d359ec147 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.0.0", + "version": "4.1.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 23 Jun 2023 14:15:36 -0500 Subject: [PATCH 174/322] feat(python): add getJobs method in queue class (#2011) --- python/bullmq/queue.py | 24 ++++++++++++++++ python/bullmq/scripts.py | 55 ++++++++++++++++++++++++++++++++---- python/bullmq/utils.py | 11 ++++++++ python/bullmq/worker.py | 13 +-------- python/tests/queue_tests.py | 10 +++++++ src/classes/queue-getters.ts | 4 +-- 6 files changed, 98 insertions(+), 19 deletions(-) diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index b20e0dfffc..1fc57e785e 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -1,5 +1,7 @@ +import asyncio from bullmq.redis_connection import RedisConnection from bullmq.types import QueueOptions, RetryJobsOptions, JobOptions +from bullmq.utils import extract_result from bullmq.scripts import Scripts from bullmq.job import Job @@ -124,6 +126,28 @@ async def getJobCounts(self, *types): counts[current_types[index]] = val or 0 return counts + async def getJobs(self, types, start=0, end=-1, asc:bool=False): + current_types = self.sanitizeJobTypes(types) + job_ids = await self.scripts.getRanges(current_types, start, end, asc) + tasks = [asyncio.create_task(Job.fromId(self, i)) for i in job_ids] + job_set, _ = await asyncio.wait(tasks, return_when=asyncio.ALL_COMPLETED) + jobs = [extract_result(job_task) for job_task in job_set] + jobs_len = len(jobs) + + # we filter `None` out to remove: + jobs = list(filter(lambda j: j is not None, jobs)) + + for index, job_id in enumerate(job_ids): + pivot_job = jobs[index] + + for i in range(index,jobs_len): + current_job = jobs[i] + if current_job and current_job.id == job_id: + jobs[index] = current_job + jobs[i] = pivot_job + + return jobs + def sanitizeJobTypes(self, types): current_types = list(types) diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 6936d91264..053c81fc4e 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -34,6 +34,7 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection "changePriority": self.redisClient.register_script(self.getScript("changePriority-5.lua")), "extendLock": self.redisClient.register_script(self.getScript("extendLock-2.lua")), "getCounts": self.redisClient.register_script(self.getScript("getCounts-1.lua")), + "getRanges": self.redisClient.register_script(self.getScript("getRanges-1.lua")), "getState": self.redisClient.register_script(self.getScript("getState-8.lua")), "getStateV2": self.redisClient.register_script(self.getScript("getStateV2-8.lua")), "moveStalledJobsToWait": self.redisClient.register_script(self.getScript("moveStalledJobsToWait-8.lua")), @@ -100,6 +101,51 @@ def addJob(self, job: Job): return self.commands["addJob"](keys=keys, args=[packedArgs, jsonData, packedOpts]) + def getRangesArgs(self, types, start: int = 0, end: int = 1, asc: bool = False): + transformed_types = [] + for type in types: + transformed_types.append("wait" if type == "waiting" else type) + + keys = self.getKeys(['']) + args = [start, end, "1" if asc else "0"] + transformed_types + + return (keys, args) + + async def getRanges(self, types, start: int = 0, end: int = 1, asc: bool = False): + commands = [] + + switcher = { + "completed": "zrange", + "delayed": "zrange", + "failed": "zrange", + "priority": "zrange", + "repeat": "zrange", + "waiting-children": "zrange", + "active": "lrange", + "paused": "lrange", + "wait": "lrange" + } + transformed_types = [] + for type in types: + transformed_type = "wait" if type == "waiting" else type + transformed_types.append(transformed_type) + commands.append(switcher.get(transformed_type)) + + keys, args = self.getRangesArgs(transformed_types, start, end, asc) + + responses = await self.commands["getRanges"](keys=keys, args=args) + + results = [] + for i, response in enumerate(responses): + result = response or [] + + if asc and commands[i] == "lrange": + results+=result.reverse() + else: + results+=result + + return results + def saveStacktraceArgs(self, job_id: str, stacktrace: str, failedReason: str): keys = [self.toKey(job_id)] args = [stacktrace, failedReason] @@ -190,7 +236,7 @@ async def changePriority(self, job_id: str, priority:int = 0, lifo:bool = False) if result is not None: if result < 0: - raise self.finishedErrors(result, job_id, 'updateData') + raise self.finishedErrors(result, job_id, 'changePriority', None) return None async def updateData(self, job_id: str, data): @@ -202,7 +248,7 @@ async def updateData(self, job_id: str, data): if result is not None: if result < 0: - raise self.finishedErrors(result, job_id, 'updateData') + raise self.finishedErrors(result, job_id, 'updateData', None) return None async def reprocessJob(self, job: Job, state: str): @@ -291,7 +337,7 @@ async def updateProgress(self, job_id: str, progress): if result is not None: if result < 0: - raise self.finishedErrors(result, job_id, 'updateProgress') + raise self.finishedErrors(result, job_id, 'updateProgress', None) return None def moveToFinishedArgs(self, job: Job, val: Any, propVal: str, shouldRemove, target, token: str, opts: dict, fetchNext=True) -> list[Any] | None: @@ -373,8 +419,7 @@ def moveStalledJobsToWait(self, maxStalledCount: int, stalledInterval: int): time.time() * 1000), stalledInterval] return self.commands["moveStalledJobsToWait"](keys, args) - - def finishedErrors(code: int, jobId: str, command: str, state: str) -> TypeError: + def finishedErrors(self, code: int, jobId: str, command: str, state: str) -> TypeError: if code == ErrorCode.JobNotExist.value: return TypeError(f"Missing key for job {jobId}.{command}") elif code == ErrorCode.JobLockNotExist.value: diff --git a/python/bullmq/utils.py b/python/bullmq/utils.py index 0e89477ecf..7c1e3328bb 100644 --- a/python/bullmq/utils.py +++ b/python/bullmq/utils.py @@ -1,4 +1,15 @@ import semver +import traceback def isRedisVersionLowerThan(current_version, minimum_version): return semver.compare(current_version, minimum_version) == -1 + +def extract_result(job_task): + try: + return job_task.result() + except Exception as e: + if not str(e).startswith('Connection closed by server'): + # lets use a simple-but-effective error handling: + # print error message and ignore the job + print("ERROR:", e) + traceback.print_exc() \ No newline at end of file diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index 66bf6225a1..d3e7166e41 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -6,7 +6,7 @@ from bullmq.job import Job from bullmq.timer import Timer from bullmq.types import WorkerOptions -from bullmq.utils import isRedisVersionLowerThan +from bullmq.utils import isRedisVersionLowerThan, extract_result import asyncio import traceback @@ -195,14 +195,3 @@ async def getCompleted(task_set: set) -> tuple[list[Job], list]: # b) a failed extract_result jobs = list(filter(lambda j: j is not None, jobs)) return jobs, pending - - -def extract_result(job_task): - try: - return job_task.result() - except Exception as e: - if not str(e).startswith('Connection closed by server'): - # lets use a simple-but-effective error handling: - # print error message and ignore the job - print("ERROR:", e) - traceback.print_exc() diff --git a/python/tests/queue_tests.py b/python/tests/queue_tests.py index 5b3587987d..93909d89df 100644 --- a/python/tests/queue_tests.py +++ b/python/tests/queue_tests.py @@ -32,6 +32,16 @@ async def test_add_job(self): self.assertEqual(job.id, "1") await queue.close() + async def test_get_jobs(self): + queue = Queue(queueName) + job1 = await queue.add("test-job", {"foo": "bar"}, {}) + job2 = await queue.add("test-job", {"foo": "bar"}, {}) + jobs = await queue.getJobs(["wait"]) + + self.assertEqual(job2.id, jobs[0].id) + self.assertEqual(job1.id, jobs[1].id) + await queue.close() + async def test_add_job_with_options(self): queue = Queue(queueName) data = {"foo": "bar"} diff --git a/src/classes/queue-getters.ts b/src/classes/queue-getters.ts index 992fd44844..98548bcc2b 100644 --- a/src/classes/queue-getters.ts +++ b/src/classes/queue-getters.ts @@ -330,9 +330,9 @@ export class QueueGetters< end = -1, asc = false, ): Promise[]> { - types = this.sanitizeJobTypes(types); + const currentTypes = this.sanitizeJobTypes(types); - const jobIds = await this.getRanges(types, start, end, asc); + const jobIds = await this.getRanges(currentTypes, start, end, asc); return Promise.all( jobIds.map( From 7d7e1b4ff6f937164b80f2c7ddf210308475f4c7 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Fri, 23 Jun 2023 19:17:08 +0000 Subject: [PATCH 175/322] 1.1.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 5 +++++ python/bullmq/__init__.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index d2cd42acc4..f5fe57eecd 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,11 @@ +## v1.1.0 (2023-06-23) +### Feature +* **python:** Add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) +* **queue:** Add getPrioritized and getPrioritizedCount methods ([#2005](https://github.com/taskforcesh/bullmq/issues/2005)) ([`7363abe`](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) + ## v1.0.0 (2023-06-21) ### Breaking * priority is separeted in its own zset, no duplication needed ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index facd67f7c0..fbcc452122 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.0.0" +__version__ = "1.1.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From 57b2b72f79afb683067d49170df5d2eed46e3712 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Sat, 24 Jun 2023 11:24:53 -0500 Subject: [PATCH 176/322] feat(python): add get job methods by state (#2012) --- python/bullmq/queue.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 1fc57e785e..c72ff6c31a 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -126,6 +126,27 @@ async def getJobCounts(self, *types): counts[current_types[index]] = val or 0 return counts + def getActive(self, start = 0, end=-1): + return self.getJobs(['active'], start, end, True) + + def getCompleted(self, start = 0, end=-1): + return self.getJobs(['completed'], start, end, False) + + def getDelayed(self, start = 0, end=-1): + return self.getJobs(['delayed'], start, end, True) + + def getFailed(self, start = 0, end=-1): + return self.getJobs(['completed'], start, end, False) + + def getPrioritized(self, start = 0, end=-1): + return self.getJobs(['prioritized'], start, end, True) + + def getWaiting(self, start = 0, end=-1): + return self.getJobs(['waiting'], start, end, True) + + def getWaitingChildren(self, start = 0, end=-1): + return self.getJobs(['waiting-children'], start, end, True) + async def getJobs(self, types, start=0, end=-1, asc:bool=False): current_types = self.sanitizeJobTypes(types) job_ids = await self.scripts.getRanges(current_types, start, end, asc) @@ -145,6 +166,7 @@ async def getJobs(self, types, start=0, end=-1, asc:bool=False): if current_job and current_job.id == job_id: jobs[index] = current_job jobs[i] = pivot_job + continue return jobs From 52d9103f8cf1558d81518f5215871c65ec68d559 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Sat, 24 Jun 2023 16:26:39 +0000 Subject: [PATCH 177/322] 1.2.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 4 ++++ python/bullmq/__init__.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index f5fe57eecd..e5a7db2c27 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,10 @@ +## v1.2.0 (2023-06-24) +### Feature +* **python:** Add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) + ## v1.1.0 (2023-06-23) ### Feature * **python:** Add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index fbcc452122..9d788a229c 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.1.0" +__version__ = "1.2.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' From 0e6e836376dc89d432f384e5ada0c9356d57252a Mon Sep 17 00:00:00 2001 From: Jake Lynch Date: Wed, 28 Jun 2023 07:07:08 -0400 Subject: [PATCH 178/322] docs: update broken patterns link in the readme (#2025) --- docs/gitbook/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/gitbook/README.md b/docs/gitbook/README.md index 8357f00474..d6ba56e0c1 100644 --- a/docs/gitbook/README.md +++ b/docs/gitbook/README.md @@ -17,7 +17,7 @@ View the repository, see open issues, and contribute back [on GitHub](https://gi ## **Features** -If you are new to Message Queues, you may wonder why they are needed after all. Queues can solve many different problems in an elegant way, from smoothing out processing peaks to creating robust communication channels between micro-services or offloading heavy work from one server to many smaller workers, and many other use cases. Check the [Patterns](broken-reference) section for getting some inspiration and information about best practices. +If you are new to Message Queues, you may wonder why they are needed after all. Queues can solve many different problems in an elegant way, from smoothing out processing peaks to creating robust communication channels between micro-services or offloading heavy work from one server to many smaller workers, and many other use cases. Check the [Patterns](./patterns/adding-bulks.md) section for getting some inspiration and information about best practices. * [x] **Minimal CPU usage due to a polling-free design** * [x] **Distributed job execution based on Redis** From cb8edd644082dc90dac77bc231b22d13055ec147 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 25 Jun 2023 16:14:48 +0000 Subject: [PATCH 179/322] chore(deps): update dependency redis to v4.6.0 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index fbdae9acd4..f91085cc36 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -7,7 +7,7 @@ pipenv==2023.6.18 platformdirs==3.6.0 pre-commit==3.3.3 python-semantic-release==7.28.1 -redis==4.5.5 +redis==4.6.0 semver==2.13.0 six==1.16.0 virtualenv==20.23.1 From dc63efe6596c61487f0f7a9fbe06466fbd42d835 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 28 Jun 2023 13:06:13 +0200 Subject: [PATCH 180/322] docs: update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5b871416a9..ca5fee3b5e 100644 --- a/README.md +++ b/README.md @@ -179,12 +179,13 @@ This is just scratching the surface, check all the features and more in the offi Since there are a few job queue solutions, here is a table comparing them: -| Feature | BullMQ-Pro | BullMQ | Bull | Kue | Bee | Agenda | +| Feature | [BullMQ-Pro](https://bullmq.io/#bullmq-pro) | [BullMQ](https://bullmq.io) | Bull | Kue | Bee | Agenda | | :------------------------ | :-------------: | :-------------: | :-------------: | :---: | -------- | ------ | | Backend | redis | redis | redis | redis | redis | mongo | | Observables | ✓ | | | | | | | Group Rate Limit | ✓ | | | | | | | Group Support | ✓ | | | | | | +| Batches Support | ✓ | | | | | | | Parent/Child Dependencies | ✓ | ✓ | | | | | | Priorities | ✓ | ✓ | ✓ | ✓ | | ✓ | | Concurrency | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | From 0e33d9f12a289bdf378a446d4b4f6851fc91ae44 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 28 Jun 2023 11:13:50 +0000 Subject: [PATCH 181/322] chore(deps): update dependency tslib to v2.6.0 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d11db80109..1a8133edbc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7232,9 +7232,9 @@ tslib@^1.8.1: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" - integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== tsutils@^3.21.0: version "3.21.0" From 47e68bd6470a155ce3822772e37d1385777b89dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 28 Jun 2023 11:13:24 +0000 Subject: [PATCH 182/322] chore(deps): update dependency pipenv to v2023.6.26 --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index f91085cc36..f6c3302f56 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -3,7 +3,7 @@ certifi==2023.5.7 distlib==0.3.6 filelock==3.12.2 msgpack==1.0.5 -pipenv==2023.6.18 +pipenv==2023.6.26 platformdirs==3.6.0 pre-commit==3.3.3 python-semantic-release==7.28.1 From 667de075f4762ab72dbaa5567bbacfd5147d4770 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 28 Jun 2023 17:45:10 -0500 Subject: [PATCH 183/322] docs(changelogs): update changelogs (#2028) --- docs/gitbook/bullmq-pro/nestjs/changelog.md | 13 ++++++++++++- docs/gitbook/changelog.md | 9 +++------ docs/gitbook/python/changelog.md | 9 ++++----- src/commands/drain-4.lua | 2 +- src/commands/includes/removeJobs.lua | 12 ------------ src/commands/includes/removeListJobs.lua | 17 +++++++++++++++++ src/commands/obliterate-2.lua | 1 + 7 files changed, 38 insertions(+), 25 deletions(-) create mode 100644 src/commands/includes/removeListJobs.lua diff --git a/docs/gitbook/bullmq-pro/nestjs/changelog.md b/docs/gitbook/bullmq-pro/nestjs/changelog.md index 7325bc7bb7..176ccf924f 100644 --- a/docs/gitbook/bullmq-pro/nestjs/changelog.md +++ b/docs/gitbook/bullmq-pro/nestjs/changelog.md @@ -1,3 +1,15 @@ +# [2.0.0](https://github.com/taskforcesh/nestjs-bullmq-pro/compare/v1.1.0...v2.0.0) (2023-06-28) + + +### Features + +* **nestjs:** support version 10 and bullmq-pro version 6 ([#9](https://github.com/taskforcesh/nestjs-bullmq-pro/issues/9)) ([e55489e](https://github.com/taskforcesh/nestjs-bullmq-pro/commit/e55489e634e3feddc05347f4d74f74b67de38293)) + + +### BREAKING CHANGES + +* **nestjs:** abandon nestjs version 7 + # [1.1.0](https://github.com/taskforcesh/nestjs-bullmq-pro/compare/v1.0.3...v1.1.0) (2023-02-04) @@ -32,4 +44,3 @@ ### Features * initial setup \([12119d7](https://github.com/taskforcesh/nestjs-bullmq-pro/commit/12119d76cde0679c8f5b6892d029a8d62ce303d2)\) - diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index f183db9772..f208c35d60 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -8,9 +8,9 @@ # [4.0.0](https://github.com/taskforcesh/bullmq/compare/v3.15.8...v4.0.0) (2023-06-21) -### Bug Fixes +### Features -* **python:** pass right params to xtrim method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([a55fd77](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) +* **queue:** add removeDeprecatedPriorityKey method ### Performance Improvements @@ -22,9 +22,7 @@ * **priority:** priority is separeted in its own zset, no duplication needed -* feat(queue): add removeDeprecatedPriorityKey method - -* refactor: change job method name update to updateData +* **job:** change job method name update to updateData ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) @@ -40,7 +38,6 @@ ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ### Bug Fixes -* **python:** add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([7c5ee20](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) * **worker:** set redis version always in initialization ([#1989](https://github.com/taskforcesh/bullmq/issues/1989)) fixes [#1988](https://github.com/taskforcesh/bullmq/issues/1988) ([a1544a8](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) ## [3.15.6](https://github.com/taskforcesh/bullmq/compare/v3.15.5...v3.15.6) (2023-06-13) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index e5a7db2c27..3bfb6c5b82 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -4,12 +4,11 @@ ## v1.2.0 (2023-06-24) ### Feature -* **python:** Add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) +* **queue:** Add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) ## v1.1.0 (2023-06-23) ### Feature -* **python:** Add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) -* **queue:** Add getPrioritized and getPrioritizedCount methods ([#2005](https://github.com/taskforcesh/bullmq/issues/2005)) ([`7363abe`](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) +* **queue:** Add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) ## v1.0.0 (2023-06-21) ### Breaking @@ -20,7 +19,7 @@ ## v0.5.6 (2023-06-21) ### Fix -* **python:** Pass right params to xtrim method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([`a55fd77`](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) +* **queue:** Pass right params to trimEvents method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([`a55fd77`](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) ### Documentation * **update:** Add job data section ([#1999](https://github.com/taskforcesh/bullmq/issues/1999)) ([`854b1ca`](https://github.com/taskforcesh/bullmq/commit/854b1cabd082c1df4d55e7973f0e0b0cd4aefb79)) @@ -32,7 +31,7 @@ ## v0.5.4 (2023-06-14) ### Fix -* **python:** Add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([`7c5ee20`](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) +* **connection:** Add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([`7c5ee20`](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) ## v0.5.3 (2023-06-13) ### Fix diff --git a/src/commands/drain-4.lua b/src/commands/drain-4.lua index 13cf03676e..4d6ef7939a 100644 --- a/src/commands/drain-4.lua +++ b/src/commands/drain-4.lua @@ -13,7 +13,7 @@ local rcall = redis.call local queueBaseKey = ARGV[1] ---- @include "includes/removeJobs" +--- @include "includes/removeListJobs" --- @include "includes/removeZSetJobs" removeListJobs(KEYS[1], true, queueBaseKey, 0) --wait diff --git a/src/commands/includes/removeJobs.lua b/src/commands/includes/removeJobs.lua index c052034ea5..120bc7e00c 100644 --- a/src/commands/includes/removeJobs.lua +++ b/src/commands/includes/removeJobs.lua @@ -3,23 +3,11 @@ ]] -- Includes ---- @include "batches" --- @include "removeJob" -local function getListItems(keyName, max) - return rcall('LRANGE', keyName, 0, max - 1) -end - local function removeJobs(keys, hard, baseKey, max) for i, key in ipairs(keys) do removeJob(key, hard, baseKey) end return max - #keys end - -local function removeListJobs(keyName, hard, baseKey, max) - local jobs = getListItems(keyName, max) - local count = removeJobs(jobs, hard, baseKey, max) - rcall("LTRIM", keyName, #jobs, -1) - return count -end diff --git a/src/commands/includes/removeListJobs.lua b/src/commands/includes/removeListJobs.lua new file mode 100644 index 0000000000..cfe3652421 --- /dev/null +++ b/src/commands/includes/removeListJobs.lua @@ -0,0 +1,17 @@ +--[[ + Functions to remove jobs. +]] + +-- Includes +--- @include "removeJobs" + +local function getListItems(keyName, max) + return rcall('LRANGE', keyName, 0, max - 1) +end + +local function removeListJobs(keyName, hard, baseKey, max) + local jobs = getListItems(keyName, max) + local count = removeJobs(jobs, hard, baseKey, max) + rcall("LTRIM", keyName, #jobs, -1) + return count +end diff --git a/src/commands/obliterate-2.lua b/src/commands/obliterate-2.lua index 660281c5fa..085d968399 100644 --- a/src/commands/obliterate-2.lua +++ b/src/commands/obliterate-2.lua @@ -23,6 +23,7 @@ local rcall = redis.call -- Includes --- @include "includes/removeJobs" +--- @include "includes/removeListJobs" --- @include "includes/removeZSetJobs" local function removeLockKeys(keys) From 2c4555802d72bccc9c34ee268c80476a20ef7b49 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Thu, 29 Jun 2023 08:44:23 +0000 Subject: [PATCH 184/322] GITBOOK-172: change request with no subject merged in GitBook --- docs/gitbook/patterns/manually-fetching-jobs.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/gitbook/patterns/manually-fetching-jobs.md b/docs/gitbook/patterns/manually-fetching-jobs.md index e04eec64ed..66959f8bd7 100644 --- a/docs/gitbook/patterns/manually-fetching-jobs.md +++ b/docs/gitbook/patterns/manually-fetching-jobs.md @@ -44,6 +44,10 @@ const job = (await worker.getNextJob(token)) as Job; await job.extendLock(token, 30000); ``` +### Choosing a token + +A token represents ownership, that a given worker is currently working on a given job. If the worker dies unexpectedly, the job could be picked up by another worker when the lock expires. A good approach for generating tokes for jobs is simply to generate a UUID for every new job, but it all depends on your specific use case. + ## Checking for stalled jobs When processing jobs manually you may also want to start the stalled jobs checker. This checker is needed to move jobs that may stall (they have lost their locks) back to the wait status (or failed if they have exhausted the maximum number of [stalled attempts](https://api.docs.bullmq.io/interfaces/WorkerOptions.html#maxStalledCount), which is 1 by default). From d03ffc9c98425a96d6e9dd47a6625382556a4cbf Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 29 Jun 2023 09:08:34 -0500 Subject: [PATCH 185/322] fix(python): add recommended pyproject.toml configuration (#2029) --- python/pyproject.toml | 61 +++++++++++++++++++++++++++++++++++++++++++ python/setup.cfg | 7 ----- python/setup.py | 49 ++++------------------------------ 3 files changed, 66 insertions(+), 51 deletions(-) create mode 100644 python/pyproject.toml delete mode 100644 python/setup.cfg diff --git a/python/pyproject.toml b/python/pyproject.toml new file mode 100644 index 0000000000..2a779b9fe7 --- /dev/null +++ b/python/pyproject.toml @@ -0,0 +1,61 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[project] +name = "bullmq" +version = "1.2.0" +description='BullMQ for Python' +long_description = "README.md" +long_description_content_type="text/markdown" +authors = [ + {name = "Taskforce.sh Inc.", email = "manast@taskforce.sh"}, +] +license='MIT' +classifiers=[ + 'Development Status :: 3 - Alpha', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', +] +keywords = ["python", "bullmq", "queues"] +dependencies = [ + "redis >= 4.5.0, < 5", + "msgpack >= 1.0.0, < 2", + "semver >= 2.13.0, < 3" +] + +[project.optional-dependencies] +dev = [ + "setuptools==63.1.0", + "pre-commit==3.3.3", + "build==0.8.0", + "python-semantic-release==7.28.1", + "types-redis==4.5.5.0" +] + +[project.urls] +"Homepage" = "https://bullmq.io" +"Bug Tracker" = "https://github.com/taskforcesh/bullmq/issues" + +[tool.setuptools.packages.find] +where = ["bullmq"] +exclude = ["tests*"] + +[tool.setuptools.package-data] +bullmq = ["commands/*.lua", "types/*"] + +[tool.semantic_release] +branch = "master" +version_variable = "bullmq/__init__.py:__version__" +version_toml = "pyproject.toml:project.version" +build_command = "python3 setup.py sdist" +tag_format = "vpy{version}" +version_source = "commit" +changelog_file = "../docs/gitbook/python/changelog.md" +upload_to_pypi = true diff --git a/python/setup.cfg b/python/setup.cfg deleted file mode 100644 index 06820555ff..0000000000 --- a/python/setup.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[semantic_release] -branch = master -version_variable = bullmq/__init__.py:__version__ -build_command = python3 setup.py sdist -tag_format = vpy{version} -version_source = commit -changelog_file = ../docs/gitbook/python/changelog.md \ No newline at end of file diff --git a/python/setup.py b/python/setup.py index f6d3199bb4..b2fda9cb26 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,46 +1,7 @@ +""" +Needed to allow setuptools to build the project form pyproject.toml +For more info https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html +""" from setuptools import setup -from bullmq import __version__ -# To use a consistent encoding -from codecs import open -from os import path - -# Get the long description from the README file -with open(path.join(".", 'README.md'), encoding='utf-8') as f: - long_description = f.read() - -setup( - name='bullmq', - version=__version__, - description='BullMQ for Python', - long_description=long_description, - long_description_content_type="text/markdown", - url='https://bullmq.io', - author='Taskforce.sh Inc.', - author_email='manast@taskforce.sh', - license='MIT', - packages=['bullmq'], - package_data={'bullmq': ['commands/*.lua', 'types/*']}, - install_requires=[ - 'redis', - 'msgpack', - 'semver', - ], - extras_require={ - "dev": [ - "pre-commit==3.3.3", - "python-semantic-release==7.34.3", - ] - }, - classifiers=[ - 'Development Status :: 3 - Alpha', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: MIT License', - 'Operating System :: POSIX :: Linux', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - ], -) +setup() From a14d83a60697ce0afc25b3b82d48930ac2844410 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Thu, 29 Jun 2023 14:10:31 +0000 Subject: [PATCH 186/322] 1.2.1 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 9 +++++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 3bfb6c5b82..5a73eea949 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,15 @@ +## v1.2.1 (2023-06-29) +### Fix +* **python:** Add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) + +### Documentation +* **changelogs:** Update changelogs ([#2028](https://github.com/taskforcesh/bullmq/issues/2028)) ([`667de07`](https://github.com/taskforcesh/bullmq/commit/667de075f4762ab72dbaa5567bbacfd5147d4770)) +* Update README.md ([`dc63efe`](https://github.com/taskforcesh/bullmq/commit/dc63efe6596c61487f0f7a9fbe06466fbd42d835)) +* Update broken patterns link in the readme ([#2025](https://github.com/taskforcesh/bullmq/issues/2025)) ([`0e6e836`](https://github.com/taskforcesh/bullmq/commit/0e6e836376dc89d432f384e5ada0c9356d57252a)) + ## v1.2.0 (2023-06-24) ### Feature * **queue:** Add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 9d788a229c..5578d9a58e 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.2.0" +__version__ = "1.2.1" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 2a779b9fe7..699bee4f09 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.2.0" +version = "1.2.1" description='BullMQ for Python' long_description = "README.md" long_description_content_type="text/markdown" From d6e64493c979147a351f848212db5fa2282d3852 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 29 Jun 2023 09:40:43 -0500 Subject: [PATCH 187/322] chore(python): delete license key --- python/pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index 699bee4f09..32e6397272 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -11,7 +11,6 @@ long_description_content_type="text/markdown" authors = [ {name = "Taskforce.sh Inc.", email = "manast@taskforce.sh"}, ] -license='MIT' classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', From 3e9db5ef4d868f8b420e368a711c20c2568a5910 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 29 Jun 2023 10:11:16 -0500 Subject: [PATCH 188/322] feat(python): add getCompleted queue method (#2033) --- python/bullmq/queue.py | 10 ++++++++++ python/tests/queue_tests.py | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index c72ff6c31a..99ce5d3124 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -111,6 +111,13 @@ def removeDeprecatedPriorityKey(self): """ return self.client.delete(f"{self.prefix}:{self.name}:priority") + async def getJobCountByTypes(self, *types): + result = await self.getJobCounts(*types) + sum = 0 + for attribute in result: + sum += result[attribute] + return sum + async def getJobCounts(self, *types): """ Returns the job counts for each type specified or every list/set in the queue by default. @@ -126,6 +133,9 @@ async def getJobCounts(self, *types): counts[current_types[index]] = val or 0 return counts + def getCompletedCount(self): + return self.getJobCountByTypes('completed') + def getActive(self, start = 0, end=-1): return self.getJobs(['active'], start, end, True) diff --git a/python/tests/queue_tests.py b/python/tests/queue_tests.py index 93909d89df..bba2f78492 100644 --- a/python/tests/queue_tests.py +++ b/python/tests/queue_tests.py @@ -272,8 +272,8 @@ def completing(job: Job, result): worker.off('completed', completing) - completed_count = await queue.getJobCounts('completed') - self.assertEqual(completed_count['completed'], 4) + completed_count = await queue.getCompletedCount() + self.assertEqual(completed_count, 4) await queue.close() await worker.close() From 2226a45c2be99ea2698ba564a9cc97c2068536c6 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Thu, 29 Jun 2023 15:13:34 +0000 Subject: [PATCH 189/322] 1.3.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 4 ++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 5a73eea949..9b8d2947a8 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,10 @@ +## v1.3.0 (2023-06-29) +### Feature +* **python:** Add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) + ## v1.2.1 (2023-06-29) ### Fix * **python:** Add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 5578d9a58e..fc2af22b68 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.2.1" +__version__ = "1.3.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 32e6397272..8564b8808a 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.2.1" +version = "1.3.0" description='BullMQ for Python' long_description = "README.md" long_description_content_type="text/markdown" From 92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 29 Jun 2023 10:29:41 -0500 Subject: [PATCH 190/322] feat(python): add getFailedCount queue method (#2036) --- python/bullmq/__init__.py | 2 +- python/bullmq/queue.py | 3 +++ python/pyproject.toml | 5 ++--- python/tests/queue_tests.py | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index fc2af22b68..9d788a229c 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.3.0" +__version__ = "1.2.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 99ce5d3124..73f44fbd3e 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -136,6 +136,9 @@ async def getJobCounts(self, *types): def getCompletedCount(self): return self.getJobCountByTypes('completed') + def getFailedCount(self): + return self.getJobCountByTypes('failed') + def getActive(self, start = 0, end=-1): return self.getJobs(['active'], start, end, True) diff --git a/python/pyproject.toml b/python/pyproject.toml index 8564b8808a..1051009175 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,10 +4,9 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.3.0" +version = "1.2.0" description='BullMQ for Python' -long_description = "README.md" -long_description_content_type="text/markdown" +readme="README.md" authors = [ {name = "Taskforce.sh Inc.", email = "manast@taskforce.sh"}, ] diff --git a/python/tests/queue_tests.py b/python/tests/queue_tests.py index bba2f78492..46dae88364 100644 --- a/python/tests/queue_tests.py +++ b/python/tests/queue_tests.py @@ -125,9 +125,9 @@ def failing(job: Job, result): worker.off('failed', failing) - failed_count = await queue.getJobCounts('failed') + failed_count = await queue.getFailedCount() - self.assertEqual(failed_count['failed'], 8) + self.assertEqual(failed_count, 8) order = 0 From 6dd3410838f0260860c364c26ca7d004acb63590 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Thu, 29 Jun 2023 15:31:59 +0000 Subject: [PATCH 191/322] 1.3.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 13 +++++++++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 9b8d2947a8..e1169885c3 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,19 @@ +## v1.3.0 (2023-06-29) +### Feature +* **python:** Add getFailedCount queue method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([`92d7227`](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) +* **python:** Add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) + +### Fix +* **python:** Add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) + +### Documentation +* **changelogs:** Update changelogs ([#2028](https://github.com/taskforcesh/bullmq/issues/2028)) ([`667de07`](https://github.com/taskforcesh/bullmq/commit/667de075f4762ab72dbaa5567bbacfd5147d4770)) +* Update README.md ([`dc63efe`](https://github.com/taskforcesh/bullmq/commit/dc63efe6596c61487f0f7a9fbe06466fbd42d835)) +* Update broken patterns link in the readme ([#2025](https://github.com/taskforcesh/bullmq/issues/2025)) ([`0e6e836`](https://github.com/taskforcesh/bullmq/commit/0e6e836376dc89d432f384e5ada0c9356d57252a)) + ## v1.3.0 (2023-06-29) ### Feature * **python:** Add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 9d788a229c..fc2af22b68 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.2.0" +__version__ = "1.3.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 1051009175..365c66f832 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.2.0" +version = "1.3.0" description='BullMQ for Python' readme="README.md" authors = [ From 4994bd7626cd5996eaec77a75a008591cc35980b Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 29 Jun 2023 10:37:00 -0500 Subject: [PATCH 192/322] chore: update python changelog --- docs/gitbook/python/changelog.md | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index e1169885c3..faf32c3fa2 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -4,24 +4,11 @@ ## v1.3.0 (2023-06-29) ### Feature -* **python:** Add getFailedCount queue method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([`92d7227`](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) -* **python:** Add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) +* **queue:** Add getFailedCount method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([`92d7227`](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) +* **queue:** Add getCompletedCount method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) ### Fix -* **python:** Add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) - -### Documentation -* **changelogs:** Update changelogs ([#2028](https://github.com/taskforcesh/bullmq/issues/2028)) ([`667de07`](https://github.com/taskforcesh/bullmq/commit/667de075f4762ab72dbaa5567bbacfd5147d4770)) -* Update README.md ([`dc63efe`](https://github.com/taskforcesh/bullmq/commit/dc63efe6596c61487f0f7a9fbe06466fbd42d835)) -* Update broken patterns link in the readme ([#2025](https://github.com/taskforcesh/bullmq/issues/2025)) ([`0e6e836`](https://github.com/taskforcesh/bullmq/commit/0e6e836376dc89d432f384e5ada0c9356d57252a)) - -## v1.3.0 (2023-06-29) -### Feature -* **python:** Add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) - -## v1.2.1 (2023-06-29) -### Fix -* **python:** Add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) +* **release:** Add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) ### Documentation * **changelogs:** Update changelogs ([#2028](https://github.com/taskforcesh/bullmq/issues/2028)) ([`667de07`](https://github.com/taskforcesh/bullmq/commit/667de075f4762ab72dbaa5567bbacfd5147d4770)) From 3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 29 Jun 2023 11:21:28 -0500 Subject: [PATCH 193/322] fix(python): nuild egg-info at the root location --- python/pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index 365c66f832..1c94d09fb8 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -42,7 +42,6 @@ dev = [ "Bug Tracker" = "https://github.com/taskforcesh/bullmq/issues" [tool.setuptools.packages.find] -where = ["bullmq"] exclude = ["tests*"] [tool.setuptools.package-data] From 3a37d170639f62cfc941c13fb82f876c87cee7ac Mon Sep 17 00:00:00 2001 From: semantic-release Date: Thu, 29 Jun 2023 16:23:11 +0000 Subject: [PATCH 194/322] 1.3.1 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 4 ++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index faf32c3fa2..c7d0ec156a 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,10 @@ +## v1.3.1 (2023-06-29) +### Fix +* **python:** Nuild egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) + ## v1.3.0 (2023-06-29) ### Feature * **queue:** Add getFailedCount method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([`92d7227`](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index fc2af22b68..38f3ed494c 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.3.0" +__version__ = "1.3.1" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 1c94d09fb8..bdd2fec5e4 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.3.0" +version = "1.3.1" description='BullMQ for Python' readme="README.md" authors = [ From b71e1ca6b3bd77557a6c1219802faaeff8768392 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 29 Jun 2023 17:57:46 -0500 Subject: [PATCH 195/322] docs(bullmq-pro): update changelog --- docs/gitbook/bullmq-pro/changelog.md | 38 +++++++++++++++++++++++++++- docs/gitbook/python/changelog.md | 2 +- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index 6890ce6338..59512af504 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,40 @@ +## [6.0.1](https://github.com/taskforcesh/bullmq-pro/compare/v6.0.0...v6.0.1) (2023-06-29) + + +### Bug Fixes + +* **job:** save groupId even when the job is a parent ([#157](https://github.com/taskforcesh/bullmq-pro/issues/157)) ([1debbf4](https://github.com/taskforcesh/bullmq-pro/commit/1debbf40ca4aa8f8b5ab45c36e8732f7ffe5442b)) + +# [6.0.0](https://github.com/taskforcesh/bullmq-pro/compare/v5.3.5...v6.0.0) (2023-06-26) + + +### Performance Improvements + +* **priority:** add prioritized as a new state ([#155](https://github.com/taskforcesh/bullmq-pro/issues/155)) ([b2391ca](https://github.com/taskforcesh/bullmq-pro/commit/b2391cab4d63e97f807eaed3a6e814be01de0f32)) + + +### BREAKING CHANGES + +* **priority:** priority is separeted in its own zset, no duplication needed + +* refactor: change job method name update to updateData + +ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) + +## [5.3.5](https://github.com/taskforcesh/bullmq-pro/compare/v5.3.4...v5.3.5) (2023-06-16) + + +### Bug Fixes + +* **deps:** upgrade bullmq to 3.15.8 ([#153](https://github.com/taskforcesh/bullmq-pro/issues/153)) ([7832290](https://github.com/taskforcesh/bullmq-pro/commit/783229095057d147047cd2f95be7d9ab9d0ef5ca)) + +## [5.3.4](https://github.com/taskforcesh/bullmq-pro/compare/v5.3.3...v5.3.4) (2023-06-06) + + +### Bug Fixes + +* **deps:** upgrade bullmq to 3.15.1 ([#152](https://github.com/taskforcesh/bullmq-pro/issues/152)) ([89df87d](https://github.com/taskforcesh/bullmq-pro/commit/89df87d9561f0b3a2323cecb04a0786fec1a72a5)) + ## [5.3.3](https://github.com/taskforcesh/bullmq-pro/compare/v5.3.2...v5.3.3) (2023-05-30) @@ -794,4 +831,3 @@ Fixes https://github.com/taskforcesh/bullmq-pro-support/issues/25 * **groups:** initial implementation ([b1da106](https://github.com/taskforcesh/bullmq-pro/commit/b1da106d7870e8e2783a6028b5088e6c4fa82086)) * add queue-pro, worker-pro and redis-connection-pro ([b9de319](https://github.com/taskforcesh/bullmq-pro/commit/b9de3193b7820dc0dcf5ae1a2f673f7ed5a82aed)) * initial commit ([7924260](https://github.com/taskforcesh/bullmq-pro/commit/7924260d621dd98b8acc6aefb53c21f6d3e06186)) - diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index c7d0ec156a..247efbc73f 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -4,7 +4,7 @@ ## v1.3.1 (2023-06-29) ### Fix -* **python:** Nuild egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) +* **python:** Build egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) ## v1.3.0 (2023-06-29) ### Feature From 8ec9ed67d2803224a3b866c51f67239a5c4b7042 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 30 Jun 2023 16:02:17 -0600 Subject: [PATCH 196/322] feat(python): add getJobState queue method (#2040) --- python/bullmq/queue.py | 3 +++ python/pyproject.toml | 2 -- python/tests/queue_tests.py | 8 ++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 73f44fbd3e..46d6b6b68e 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -133,6 +133,9 @@ async def getJobCounts(self, *types): counts[current_types[index]] = val or 0 return counts + def getJobState(self, job_id: str): + return self.scripts.getState(job_id) + def getCompletedCount(self): return self.getJobCountByTypes('completed') diff --git a/python/pyproject.toml b/python/pyproject.toml index bdd2fec5e4..627ad29fb8 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -15,8 +15,6 @@ classifiers=[ 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: POSIX :: Linux', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', diff --git a/python/tests/queue_tests.py b/python/tests/queue_tests.py index 46dae88364..d0c0c604bc 100644 --- a/python/tests/queue_tests.py +++ b/python/tests/queue_tests.py @@ -42,6 +42,14 @@ async def test_get_jobs(self): self.assertEqual(job1.id, jobs[1].id) await queue.close() + async def test_get_job_state(self): + queue = Queue(queueName) + job = await queue.add("test-job", {"foo": "bar"}, {}) + state = await queue.getJobState(job.id) + + self.assertEqual(state, "waiting") + await queue.close() + async def test_add_job_with_options(self): queue = Queue(queueName) data = {"foo": "bar"} From da92a5c303d499b7019d729d55b2698385bc570b Mon Sep 17 00:00:00 2001 From: semantic-release Date: Fri, 30 Jun 2023 22:04:08 +0000 Subject: [PATCH 197/322] 1.4.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 7 +++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 247efbc73f..a591d81fc1 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,13 @@ +## v1.4.0 (2023-06-30) +### Feature +* **python:** Add getJobState queue method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([`8ec9ed6`](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) + +### Documentation +* **bullmq-pro:** Update changelog ([`b71e1ca`](https://github.com/taskforcesh/bullmq/commit/b71e1ca6b3bd77557a6c1219802faaeff8768392)) + ## v1.3.1 (2023-06-29) ### Fix * **python:** Build egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 38f3ed494c..79757c6af4 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.3.1" +__version__ = "1.4.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 627ad29fb8..bacb0e6eb9 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.3.1" +version = "1.4.0" description='BullMQ for Python' readme="README.md" authors = [ From cbc489bd59f689ced93c2c6a4162cde487475a28 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 1 Jul 2023 08:53:01 -0600 Subject: [PATCH 198/322] chore(deps): update coverallsapp/github-action digest to 3b7440a (#2039) --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7afc8a7f8c..9ff39058b8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,7 +43,7 @@ jobs: - run: yarn coverage - name: Upload LCOV to Coveralls if: ${{ ( github.event_name == 'pull_request' && github.event.pull_request.head.fork == false ) || github.event_name == 'push' }} - uses: coverallsapp/github-action@c7885c00cb7ec0b8f9f5ff3f53cddb980f7a4412 # branch=master + uses: coverallsapp/github-action@3b7440a0fbc8822c731c93250c2c5506ca51a48f # branch=master with: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Check coverage change not below threshold From 6e5d99213785c4988184fe70bf9dff6daf021880 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 2 Jul 2023 20:08:40 -0600 Subject: [PATCH 199/322] chore(deps): update dependency dev/types-redis to v4.6.0.1 (#2035) --- python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index bacb0e6eb9..884abfedb6 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -32,7 +32,7 @@ dev = [ "pre-commit==3.3.3", "build==0.8.0", "python-semantic-release==7.28.1", - "types-redis==4.5.5.0" + "types-redis==4.6.0.1" ] [project.urls] From ca17364cc2a52f6577fb66f09ec3168bbf9f1e07 Mon Sep 17 00:00:00 2001 From: ElFisherMan <36671468+ElFisherMan@users.noreply.github.com> Date: Mon, 3 Jul 2023 11:45:14 +0300 Subject: [PATCH 200/322] feat(common): add option to change repeatable jobs redis key hash algorithm (#2023) --- src/classes/repeat.ts | 46 ++++++++++++---------- src/interfaces/advanced-options.ts | 6 +++ tests/test_repeat.ts | 61 ++++++++++++++++++++++++++++++ tests/utils/repeat_utils.ts | 35 +++++++++++++++++ 4 files changed, 127 insertions(+), 21 deletions(-) create mode 100644 tests/utils/repeat_utils.ts diff --git a/src/classes/repeat.ts b/src/classes/repeat.ts index bdfca00cf1..0925c80aad 100644 --- a/src/classes/repeat.ts +++ b/src/classes/repeat.ts @@ -8,6 +8,7 @@ import { RedisConnection } from './redis-connection'; export class Repeat extends QueueBase { private repeatStrategy: RepeatStrategy; + private repeatKeyHashAlgorithm: string; constructor( name: string, @@ -18,6 +19,9 @@ export class Repeat extends QueueBase { this.repeatStrategy = (opts.settings && opts.settings.repeatStrategy) || getNextMillis; + + this.repeatKeyHashAlgorithm = + (opts.settings && opts.settings.repeatKeyHashAlgorithm) || 'md5'; } async addNextRepeatableJob( @@ -110,10 +114,10 @@ export class Repeat extends QueueBase { // // Generate unique job id for this iteration. // - const jobId = getRepeatJobId( + const jobId = this.getRepeatJobId( name, nextMillis, - md5(repeatJobKey), + this.hash(repeatJobKey), opts.repeat.jobId, ); const now = Date.now(); @@ -142,10 +146,10 @@ export class Repeat extends QueueBase { jobId?: string, ): Promise { const repeatJobKey = getRepeatKey(name, { ...repeat, jobId }); - const repeatJobId = getRepeatJobId( + const repeatJobId = this.getRepeatJobId( name, '', - md5(repeatJobKey), + this.hash(repeatJobKey), jobId || repeat.jobId, ); @@ -155,10 +159,10 @@ export class Repeat extends QueueBase { async removeRepeatableByKey(repeatJobKey: string): Promise { const data = this.keyToData(repeatJobKey); - const repeatJobId = getRepeatJobId( + const repeatJobId = this.getRepeatJobId( data.name, '', - md5(repeatJobKey), + this.hash(repeatJobKey), data.id, ); @@ -199,18 +203,22 @@ export class Repeat extends QueueBase { const client = await this.client; return client.zcard(this.toKey('repeat')); } -} -function getRepeatJobId( - name: string, - nextMillis: number | string, - namespace: string, - jobId?: string, -) { - const checksum = md5(`${name}${jobId || ''}${namespace}`); - return `repeat:${checksum}:${nextMillis}`; - // return `repeat:${jobId || ''}:${name}:${namespace}:${nextMillis}`; - //return `repeat:${name}:${namespace}:${nextMillis}`; + private hash(str: string) { + return createHash(this.repeatKeyHashAlgorithm).update(str).digest('hex'); + } + + private getRepeatJobId( + name: string, + nextMillis: number | string, + namespace: string, + jobId?: string, + ) { + const checksum = this.hash(`${name}${jobId || ''}${namespace}`); + return `repeat:${checksum}:${nextMillis}`; + // return `repeat:${jobId || ''}:${name}:${namespace}:${nextMillis}`; + //return `repeat:${name}:${namespace}:${nextMillis}`; + } } function getRepeatKey(name: string, repeat: RepeatOptions) { @@ -253,7 +261,3 @@ export const getNextMillis = (millis: number, opts: RepeatOptions): number => { // Ignore error } }; - -function md5(str: string) { - return createHash('md5').update(str).digest('hex'); -} diff --git a/src/interfaces/advanced-options.ts b/src/interfaces/advanced-options.ts index a75a64b817..cb463caf18 100644 --- a/src/interfaces/advanced-options.ts +++ b/src/interfaces/advanced-options.ts @@ -5,6 +5,12 @@ export interface AdvancedRepeatOptions { * A custom cron strategy. */ repeatStrategy?: RepeatStrategy; + + /** + * A hash algorithm to be used when trying to create the job redis key. + * Default - md5 + */ + repeatKeyHashAlgorithm?: string; } export interface AdvancedOptions extends AdvancedRepeatOptions { diff --git a/tests/test_repeat.ts b/tests/test_repeat.ts index 3a368c531d..1ceb53e4d6 100644 --- a/tests/test_repeat.ts +++ b/tests/test_repeat.ts @@ -14,6 +14,12 @@ import { } from '../src/classes'; import { JobsOptions } from '../src/types'; import { removeAllQueueData } from '../src/utils'; +import { + createRepeatableJobKey, + extractRepeatableJobChecksumFromRedisKey, + getRepeatableJobKeyPrefix, + getRepeatJobIdCheckum, +} from './utils/repeat_utils'; const moment = require('moment'); @@ -660,6 +666,61 @@ describe('repeat', function () { }); }); + it('should have repeatable job key with sha256 hashing when sha256 hash algorithm is provided', async function () { + this.timeout(20000); + const settings = { + repeatKeyHashAlgorithm: 'sha256', + }; + const currentQueue = new Queue(queueName, { connection, settings }); + + const worker = new Worker(queueName, null, { connection, settings }); + const delayStub = sinon.stub(worker, 'delay').callsFake(async () => {}); + const jobName = 'jobName'; + const jobId = 'jobId'; + const endDate = ''; + const tz = ''; + const every = 50; + const suffix = every; + await currentQueue.add( + jobName, + { foo: 'bar' }, + { + repeat: { + jobId, + every, + }, + }, + ); + + const keyPrefix = getRepeatableJobKeyPrefix(queueName); + const jobsRedisKeys = await new IORedis().keys(`${keyPrefix}*`); + expect(jobsRedisKeys.length).to.be.equal(1); + + const actualHashedRepeatableJobKey = + extractRepeatableJobChecksumFromRedisKey(jobsRedisKeys[0]); + const expectedRawKey = createRepeatableJobKey( + jobName, + jobId, + endDate, + tz, + suffix, + ); + const expectedRepeatJobIdCheckum = getRepeatJobIdCheckum( + jobName, + expectedRawKey, + settings.repeatKeyHashAlgorithm, + jobId, + ); + + expect(actualHashedRepeatableJobKey).to.be.equal( + expectedRepeatJobIdCheckum, + ); + + await currentQueue.close(); + await worker.close(); + delayStub.restore(); + }); + it('should repeat every 2 seconds and start immediately', async function () { const date = new Date('2017-02-07 9:24:00'); this.clock.setSystemTime(date); diff --git a/tests/utils/repeat_utils.ts b/tests/utils/repeat_utils.ts new file mode 100644 index 0000000000..26966390ad --- /dev/null +++ b/tests/utils/repeat_utils.ts @@ -0,0 +1,35 @@ +import { createHash } from 'crypto'; + +export function createRepeatableJobKey( + jobName: string, + jobId: string, + endDate: string, + tz: string, + suffix: number, +) { + return `${jobName}:${jobId}:${endDate}:${tz}:${suffix}`; +} + +export function getRepeatableJobKeyPrefix(queueName: string) { + return `bull:${queueName}:repeat:`; +} + +export function extractRepeatableJobChecksumFromRedisKey( + redisKey: string, +): string { + return redisKey.split(':')[3]; +} + +export function hash(repeatKeyHashAlgorithm: string, payload: string) { + return createHash(repeatKeyHashAlgorithm).update(payload).digest('hex'); +} + +export function getRepeatJobIdCheckum( + name: string, + repeatJobKey: string, + repeatKeyHashAlgorithm: string, + jobId?: string, +) { + const namespace = hash(repeatKeyHashAlgorithm, repeatJobKey); + return hash(repeatKeyHashAlgorithm, `${name}${jobId || ''}${namespace}`); +} From 5e2a3430b320f0b28147e7695d8defd59e6a6a8e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 3 Jul 2023 08:46:15 +0000 Subject: [PATCH 201/322] chore(release): 4.2.0 [skip ci] # [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) ### Bug Fixes * **python:** add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([d03ffc9](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) * **python:** nuild egg-info at the root location ([3c2d06e](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) ### Features * **common:** add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([ca17364](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) * **python:** add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([57b2b72](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) * **python:** add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([3e9db5e](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) * **python:** add getFailedCount queue method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([92d7227](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) * **python:** add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([8d5d6c1](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) * **python:** add getJobState queue method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([8ec9ed6](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) --- docs/gitbook/changelog.md | 18 ++++++++++++++++++ package.json | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index f208c35d60..ffc4e71c90 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,21 @@ +# [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) + + +### Bug Fixes + +* **python:** add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([d03ffc9](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) +* **python:** nuild egg-info at the root location ([3c2d06e](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) + + +### Features + +* **common:** add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([ca17364](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) +* **python:** add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([57b2b72](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) +* **python:** add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([3e9db5e](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) +* **python:** add getFailedCount queue method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([92d7227](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) +* **python:** add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([8d5d6c1](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) +* **python:** add getJobState queue method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([8ec9ed6](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) + # [4.1.0](https://github.com/taskforcesh/bullmq/compare/v4.0.0...v4.1.0) (2023-06-23) diff --git a/package.json b/package.json index 8d359ec147..615c04ac35 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.1.0", + "version": "4.2.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 4 Jul 2023 11:27:16 -0600 Subject: [PATCH 202/322] fix(python): fix isPaused method when custom prefix is present (#2047) --- docs/gitbook/changelog.md | 11 ------- docs/gitbook/python/changelog.md | 7 ++--- python/bullmq/queue.py | 2 +- python/tests/queue_tests.py | 30 +++++++++++++++++++ .../includes/moveJobFromPriorityToActive.lua | 1 - tests/test_repeat.ts | 1 + 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index ffc4e71c90..ce42e01925 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,20 +1,9 @@ # [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) -### Bug Fixes - -* **python:** add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([d03ffc9](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) -* **python:** nuild egg-info at the root location ([3c2d06e](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) - - ### Features * **common:** add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([ca17364](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) -* **python:** add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([57b2b72](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) -* **python:** add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([3e9db5e](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) -* **python:** add getFailedCount queue method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([92d7227](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) -* **python:** add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([8d5d6c1](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) -* **python:** add getJobState queue method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([8ec9ed6](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) # [4.1.0](https://github.com/taskforcesh/bullmq/compare/v4.0.0...v4.1.0) (2023-06-23) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index a591d81fc1..3b71c47bae 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -4,10 +4,7 @@ ## v1.4.0 (2023-06-30) ### Feature -* **python:** Add getJobState queue method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([`8ec9ed6`](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) - -### Documentation -* **bullmq-pro:** Update changelog ([`b71e1ca`](https://github.com/taskforcesh/bullmq/commit/b71e1ca6b3bd77557a6c1219802faaeff8768392)) +* **queue:** Add getJobState method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([`8ec9ed6`](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) ## v1.3.1 (2023-06-29) ### Fix @@ -32,7 +29,7 @@ ## v1.1.0 (2023-06-23) ### Feature -* **queue:** Add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) +* **queue:** Add getJobs method ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) ## v1.0.0 (2023-06-21) ### Breaking diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 46d6b6b68e..9c9e6e9e90 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -63,7 +63,7 @@ async def isPaused(self): """ Returns true if the queue is currently paused. """ - paused_key_exists = await self.client.hexists(self.opts.get("prefix", f"bull:{self.name}:meta"), "paused") + paused_key_exists = await self.client.hexists(f"{self.prefix}:{self.name}:meta", "paused") return paused_key_exists == 1 async def obliterate(self, force: bool = False): diff --git a/python/tests/queue_tests.py b/python/tests/queue_tests.py index d0c0c604bc..bff7c56610 100644 --- a/python/tests/queue_tests.py +++ b/python/tests/queue_tests.py @@ -64,6 +64,36 @@ async def test_add_job_with_options(self): await queue.close() + async def test_is_paused(self): + queue = Queue(queueName) + await queue.pause() + isPaused = await queue.isPaused() + + self.assertEqual(isPaused, True) + + await queue.resume() + + isPaused = await queue.isPaused() + + self.assertEqual(isPaused, False) + + await queue.close() + + async def test_is_paused_with_custom_prefix(self): + queue = Queue(queueName, {}, {"prefix": "test"}) + await queue.pause() + isPaused = await queue.isPaused() + + self.assertEqual(isPaused, True) + + await queue.resume() + + isPaused = await queue.isPaused() + + self.assertEqual(isPaused, False) + + await queue.close() + async def test_trim_events_manually(self): queue = Queue(queueName) await queue.add("test", data={}, opts={}) diff --git a/src/commands/includes/moveJobFromPriorityToActive.lua b/src/commands/includes/moveJobFromPriorityToActive.lua index fd398f0fa0..85ffb036d7 100644 --- a/src/commands/includes/moveJobFromPriorityToActive.lua +++ b/src/commands/includes/moveJobFromPriorityToActive.lua @@ -11,4 +11,3 @@ local function moveJobFromPriorityToActive(priorityKey, activeKey, priorityCount rcall("DEL", priorityCounterKey) end end - \ No newline at end of file diff --git a/tests/test_repeat.ts b/tests/test_repeat.ts index 1ceb53e4d6..88367a80fe 100644 --- a/tests/test_repeat.ts +++ b/tests/test_repeat.ts @@ -1010,6 +1010,7 @@ describe('repeat', function () { resolve(); } } catch (error) { + console.log(error); reject(error); } }); From 561cdc3f825014c90bedbe1d66db4a2339beea67 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Tue, 4 Jul 2023 17:28:40 +0000 Subject: [PATCH 203/322] 1.5.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 7 +++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 3b71c47bae..7c3376a6c2 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,13 @@ +## v1.5.0 (2023-07-04) +### Feature +* **common:** Add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([`ca17364`](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) + +### Fix +* **python:** Fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([`7ec1c5b`](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) + ## v1.4.0 (2023-06-30) ### Feature * **queue:** Add getJobState method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([`8ec9ed6`](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 79757c6af4..f15eeb79bb 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.4.0" +__version__ = "1.5.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 884abfedb6..482959f686 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.4.0" +version = "1.5.0" description='BullMQ for Python' readme="README.md" authors = [ From 63031484387a8cd8595da7ff0d2721c57b54d7e4 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 6 Jul 2023 08:45:15 -0600 Subject: [PATCH 204/322] ci(api): add docs-api branch logic (#2045) --- .github/workflows/api.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 43fb831e8d..4ffa6771cd 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -23,8 +23,16 @@ jobs: yarn install - name: build run: | + git config --global user.email "manast@taskforce.sh" + git config --global user.name "manast" + git checkout docs-api + git merge master --no-commit yarn pretest - yarn docs + yarn docs:json + git add . + git commit -m "chore(api): update documentation" --no-verify + git push origin docs-api + yarn docs:merge env: CI: true - name: deploy From 967d36658ff7a87dcb59f5122a11cdae97d779ef Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 6 Jul 2023 09:59:41 -0500 Subject: [PATCH 205/322] ci(api): use checkout ref to change branch --- .github/workflows/api.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 4ffa6771cd..984e061ce4 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -21,11 +21,13 @@ jobs: - name: yarn install run: | yarn install + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 + with: + ref: docs-api - name: build run: | git config --global user.email "manast@taskforce.sh" git config --global user.name "manast" - git checkout docs-api git merge master --no-commit yarn pretest yarn docs:json From c04de320efa53638cc10ebdf7939cca966ff627d Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 6 Jul 2023 10:02:43 -0500 Subject: [PATCH 206/322] ci(api): use origin/master --- .github/workflows/api.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 984e061ce4..61cd68be99 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -28,12 +28,12 @@ jobs: run: | git config --global user.email "manast@taskforce.sh" git config --global user.name "manast" - git merge master --no-commit + git merge origin/master --no-commit yarn pretest yarn docs:json git add . git commit -m "chore(api): update documentation" --no-verify - git push origin docs-api + git push origin/docs-api yarn docs:merge env: CI: true From 4af6072c506dd79b0ba525d86660271aff6a8fe1 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 6 Jul 2023 10:12:54 -0500 Subject: [PATCH 207/322] ci(api): add allow-unrelated-histories --- .github/workflows/api.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 61cd68be99..dbc229bc00 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -28,12 +28,12 @@ jobs: run: | git config --global user.email "manast@taskforce.sh" git config --global user.name "manast" - git merge origin/master --no-commit + git merge origin master --no-commit --allow-unrelated-histories yarn pretest yarn docs:json git add . git commit -m "chore(api): update documentation" --no-verify - git push origin/docs-api + git push origin docs-api yarn docs:merge env: CI: true From 08a8a7fdd4559668a3c02e34ae0c1ddf2b284c94 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 6 Jul 2023 10:14:48 -0500 Subject: [PATCH 208/322] ci(api): restore origin/master ref --- .github/workflows/api.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index dbc229bc00..61bd12b8ff 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -28,12 +28,12 @@ jobs: run: | git config --global user.email "manast@taskforce.sh" git config --global user.name "manast" - git merge origin master --no-commit --allow-unrelated-histories + git merge origin/master --no-commit --allow-unrelated-histories yarn pretest yarn docs:json git add . git commit -m "chore(api): update documentation" --no-verify - git push origin docs-api + git push origin/docs-api yarn docs:merge env: CI: true From 6d0e224cd985069055786f447b0ba7c394a76b8a Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 6 Jul 2023 13:14:40 -0600 Subject: [PATCH 209/322] feat(python): add moveToWaitingChildren job method (#2049) --- python/bullmq/__init__.py | 1 + python/bullmq/backoffs.py | 2 +- python/bullmq/custom_errors/__init__.py | 1 + .../custom_errors/waiting_children_error.py | 3 + python/bullmq/job.py | 21 +++-- python/bullmq/scripts.py | 62 +++++++++---- python/bullmq/utils.py | 6 +- python/bullmq/worker.py | 4 + python/tests/worker_tests.py | 87 ++++++++++++++++++- 9 files changed, 161 insertions(+), 26 deletions(-) create mode 100644 python/bullmq/custom_errors/__init__.py create mode 100644 python/bullmq/custom_errors/waiting_children_error.py diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index f15eeb79bb..1282fe0d23 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -10,3 +10,4 @@ from bullmq.queue import Queue from bullmq.job import Job from bullmq.worker import Worker +from bullmq.custom_errors import WaitingChildrenError diff --git a/python/bullmq/backoffs.py b/python/bullmq/backoffs.py index 3016f72d1f..59ea080eb0 100644 --- a/python/bullmq/backoffs.py +++ b/python/bullmq/backoffs.py @@ -14,7 +14,7 @@ class Backoffs: def normalize(backoff: int | BackoffOptions): if type(backoff) == int and math.isfinite(backoff): return { - "type": 'fixed', + "type": "fixed", "delay": backoff } elif backoff: diff --git a/python/bullmq/custom_errors/__init__.py b/python/bullmq/custom_errors/__init__.py new file mode 100644 index 0000000000..52cd89da6b --- /dev/null +++ b/python/bullmq/custom_errors/__init__.py @@ -0,0 +1 @@ +from bullmq.custom_errors.waiting_children_error import WaitingChildrenError diff --git a/python/bullmq/custom_errors/waiting_children_error.py b/python/bullmq/custom_errors/waiting_children_error.py new file mode 100644 index 0000000000..7134bbc9bb --- /dev/null +++ b/python/bullmq/custom_errors/waiting_children_error.py @@ -0,0 +1,3 @@ +class WaitingChildrenError(Exception): + "Raised when job is moved to waiting-children" + pass \ No newline at end of file diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 6c0709b795..59aadae9f0 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -5,6 +5,7 @@ if TYPE_CHECKING: from bullmq.queue import Queue from bullmq.types import JobOptions +from bullmq.utils import get_parent_key import json import time @@ -34,6 +35,7 @@ def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): self.timestamp = opts.get("timestamp", round(time.time() * 1000)) final_opts = {"attempts": 0, "delay": 0} final_opts.update(opts or {}) + final_opts.update({"backoff": Backoffs.normalize(opts.get('backoff'))}) self.discarded = False self.opts = final_opts self.queue = queue @@ -48,6 +50,9 @@ def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): self.returnvalue = None self.failedReason = None self.repeatJobKey = None + parent = opts.get("parent") + self.parentKey = get_parent_key(parent) + self.parent = {"id": parent.get("id"), "queueKey": parent.get("queue")} if parent else None self.stacktrace: List[str] = [] self.scripts = Scripts(queue.prefix, queue.name, queue.redisConnection) @@ -143,6 +148,12 @@ async def saveStacktrace(self, pipe, err:str): await self.scripts.commands["saveStacktrace"](keys=keys, args=args, client=pipe) + def moveToWaitingChildren(self, token, opts:dict): + return self.scripts.moveToWaitingChildren(self.id, token, opts) + + @property + def queueQualifiedName(self): + return f"{self.queue.prefix}:{self.queue.name}" @staticmethod def fromJSON(queue: Queue, rawData: dict, jobId: str | None = None): @@ -181,13 +192,11 @@ def fromJSON(queue: Queue, rawData: dict, jobId: str | None = None): job.stacktrace = json.loads(rawData.get("stacktrace", "[]")) - # if (json.parentKey) { - # job.parentKey = json.parentKey; - # } + if rawData.get("parentKey"): + job.parentKey = rawData.get("parentKey") - # if (json.parent) { - # job.parent = JSON.parse(json.parent); - # } + if rawData.get("parent"): + job.parent = json.loads(rawData.get("parent")) return job diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 053c81fc4e..dd3d210e2c 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -6,7 +6,7 @@ from __future__ import annotations from redis import Redis from bullmq.error_code import ErrorCode -from bullmq.utils import isRedisVersionLowerThan +from bullmq.utils import isRedisVersionLowerThan, get_parent_key from typing import Any, TYPE_CHECKING if TYPE_CHECKING: from bullmq.job import Job @@ -41,6 +41,7 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection "moveToActive": self.redisClient.register_script(self.getScript("moveToActive-10.lua")), "moveToDelayed": self.redisClient.register_script(self.getScript("moveToDelayed-8.lua")), "moveToFinished": self.redisClient.register_script(self.getScript("moveToFinished-13.lua")), + "moveToWaitingChildren": self.redisClient.register_script(self.getScript("moveToWaitingChildren-4.lua")), "obliterate": self.redisClient.register_script(self.getScript("obliterate-2.lua")), "pause": self.redisClient.register_script(self.getScript("pause-5.lua")), "removeJob": self.redisClient.register_script(self.getScript("removeJob-1.lua")), @@ -53,7 +54,7 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection } # loop all the names and add them to the keys object - names = ["", "active", "wait", "paused", "completed", "failed", "delayed", + names = ["", "active", "wait", "waiting-children", "paused", "completed", "failed", "delayed", "stalled", "limiter", "prioritized", "id", "stalled-check", "meta", "pc", "events", "waiting-children"] for name in names: self.keys[name] = self.toKey(name) @@ -75,22 +76,9 @@ def mapKey(key): return self.keys[key] return list(map(mapKey, keys)) - def addJob(self, job: Job): - """ - Add an item to the queue - """ - packedArgs = msgpack.packb( - [self.keys[""], job.id or "", job.name, job.timestamp], use_bin_type=True) + def addJobArgs(self, job: Job, waiting_children_key): # We are still lacking some arguments here: # ARGV[1] msgpacked arguments array - # [1] key prefix, - # [2] custom id (will not generate one automatically) - # [3] name - # [4] timestamp - # [5] parentKey? - # [6] waitChildrenKey key. - # [7] parent dependencies key. - # [8] parent? {id, queueKey} # [9] repeat job key jsonData = json.dumps(job.data, separators=(',', ':')) @@ -98,8 +86,48 @@ def addJob(self, job: Job): keys = self.getKeys(['wait', 'paused', 'meta', 'id', 'delayed', 'prioritized', 'completed', 'events', 'pc']) + parent = job.parent + parentKey = job.parentKey - return self.commands["addJob"](keys=keys, args=[packedArgs, jsonData, packedOpts]) + packedArgs = msgpack.packb( + [self.keys[""], job.id or "", job.name, job.timestamp, job.parentKey, + waiting_children_key, + f"{parentKey}:dependencies" if parentKey else None, parent],use_bin_type=True) + + args = [packedArgs, jsonData, packedOpts] + + return (keys,args) + + def addJob(self, job: Job): + """ + Add an item to the queue + """ + keys, args = self.addJobArgs(job, None) + + return self.commands["addJob"](keys=keys, args=args) + + def moveToWaitingChildrenArgs(self, job_id, token, opts): + keys = [self.toKey(job_id) + ":lock", + self.keys['active'], + self.keys['waiting-children'], + self.toKey(job_id)] + child_key = opts.get("child") if opts else None + args = [token, get_parent_key(child_key) or "", round(time.time() * 1000), job_id] + + return (keys, args) + + async def moveToWaitingChildren(self, job_id, token, opts): + keys, args = self.moveToWaitingChildrenArgs(job_id, token, opts) + result = await self.commands["moveToWaitingChildren"](keys=keys, args=args) + + if result is not None: + if result == 1: + return False + elif result == 0: + return True + elif result < 0: + raise self.finishedErrors(result, job_id, 'moveToWaitingChildren', 'active') + return None def getRangesArgs(self, types, start: int = 0, end: int = 1, asc: bool = False): transformed_types = [] diff --git a/python/bullmq/utils.py b/python/bullmq/utils.py index 7c1e3328bb..11f8bc95e2 100644 --- a/python/bullmq/utils.py +++ b/python/bullmq/utils.py @@ -12,4 +12,8 @@ def extract_result(job_task): # lets use a simple-but-effective error handling: # print error message and ignore the job print("ERROR:", e) - traceback.print_exc() \ No newline at end of file + traceback.print_exc() + +def get_parent_key(opts:dict): + if opts: + return f"{opts.get('queue')}:{opts.get('id')}" diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index d3e7166e41..9d70eb1627 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -1,5 +1,6 @@ from typing import Callable from uuid import uuid4 +from bullmq.custom_errors import WaitingChildrenError from bullmq.scripts import Scripts from bullmq.redis_connection import RedisConnection from bullmq.event_emitter import EventEmitter @@ -124,7 +125,10 @@ async def processJob(self, job: Job, token: str): result = await self.processor(job, token) if not self.forceClosing: await self.scripts.moveToCompleted(job, result, job.opts.get("removeOnComplete", False), token, self.opts, fetchNext=not self.closing) + job.returnvalue = result self.emit("completed", job, result) + except WaitingChildrenError: + return except Exception as err: try: print("Error processing job", err) diff --git a/python/tests/worker_tests.py b/python/tests/worker_tests.py index 2999bfca3e..18763332fa 100644 --- a/python/tests/worker_tests.py +++ b/python/tests/worker_tests.py @@ -5,8 +5,9 @@ """ from asyncio import Future -from bullmq import Queue, Worker, Job +from bullmq import Queue, Worker, Job, WaitingChildrenError from uuid import uuid4 +from enum import Enum import asyncio import unittest @@ -187,6 +188,90 @@ def completing(job: Job, result): await queue.close() await worker.close() + async def test_create_children_at_runtime(self): + parent_queue_name = f"__parent_queue__{uuid4().hex}" + parent_queue = Queue(parent_queue_name) + queue = Queue(queueName) + + class Step(int, Enum): + Initial = 1 + Second = 2 + Third = 3 + Finish = 4 + + waiting_children_step_executions = 0 + + async def parent_process(job: Job, token: str): + step = job.data.get("step") + while step != Step.Finish: + if step == Step.Initial: + await queue.add('child-1', {"foo": "bar" },{ + "parent": { + "id": job.id, + "queue": job.queueQualifiedName + } + }) + await job.updateData({ + "step": Step.Second + }) + step = Step.Second + elif step == Step.Second: + await queue.add('child-2', {"foo": "bar" },{ + "parent": { + "id": job.id, + "queue": job.queueQualifiedName + } + }) + await job.updateData({ + "step": Step.Third + }) + step = Step.Third + elif step == Step.Third: + nonlocal waiting_children_step_executions + waiting_children_step_executions += 1 + should_wait = await job.moveToWaitingChildren(token, {}) + if not should_wait: + await job.updateData({ + "step": Step.Finish + }) + step = Step.Finish + return Step.Finish + else: + raise WaitingChildrenError + else: + raise Exception("invalid step") + + async def children_process(job: Job, token: str): + await asyncio.sleep(0.2) + return None + + worker = Worker(parent_queue_name, parent_process, {}) + children_worker = Worker(queueName, children_process, {}) + + await parent_queue.add( "test", {"step": Step.Initial}, + { + "attempts": 3, + "backoff": 1000 + } + ) + + completed_events = Future() + + def completing(job: Job, result): + self.assertEqual(job.returnvalue, Step.Finish) + completed_events.set_result(None) + + worker.on("completed", completing) + + await completed_events + + self.assertEqual(waiting_children_step_executions, 2) + + await worker.close() + await children_worker.close() + await parent_queue.close() + await queue.close() + if __name__ == '__main__': unittest.main() From b868b021722b5df381689b75b9f805a58ecb05e2 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Thu, 6 Jul 2023 19:16:01 +0000 Subject: [PATCH 210/322] 1.6.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 4 ++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 7c3376a6c2..74fd4ffa46 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,10 @@ +## v1.6.0 (2023-07-06) +### Feature +* **python:** Add moveToWaitingChildren job method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([`6d0e224`](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) + ## v1.5.0 (2023-07-04) ### Feature * **common:** Add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([`ca17364`](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 1282fe0d23..0afd10a7ad 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.5.0" +__version__ = "1.6.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 482959f686..45ab4f1cda 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.5.0" +version = "1.6.0" description='BullMQ for Python' readme="README.md" authors = [ From 9981ce52a43b732a0097abda1fc9f94f402307f3 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 6 Jul 2023 14:30:10 -0500 Subject: [PATCH 211/322] ci(api): try to check out all branches --- .github/workflows/api.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 61bd12b8ff..dd86c1426b 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -13,6 +13,9 @@ jobs: steps: - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 + with: + # check out all branches + fetch-depth: 0 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 with: @@ -21,19 +24,16 @@ jobs: - name: yarn install run: | yarn install - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 - with: - ref: docs-api - name: build run: | git config --global user.email "manast@taskforce.sh" git config --global user.name "manast" - git merge origin/master --no-commit --allow-unrelated-histories + git checkout docs-api + git merge master --no-edit -m "chore: merge master branch on $(date +%F)" yarn pretest yarn docs:json git add . - git commit -m "chore(api): update documentation" --no-verify - git push origin/docs-api + git push docs-api yarn docs:merge env: CI: true From ce382aa98994b7831439a3d0f05098d9f39cc4a1 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 6 Jul 2023 14:35:55 -0500 Subject: [PATCH 212/322] ci(api): avoid pushing changes to docs-api --- .github/workflows/api.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index dd86c1426b..86cc49fc22 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -33,7 +33,6 @@ jobs: yarn pretest yarn docs:json git add . - git push docs-api yarn docs:merge env: CI: true From 2ac674daf78e6879d29f31a601242880bf8f975f Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 6 Jul 2023 14:40:55 -0500 Subject: [PATCH 213/322] chore(deps): upgrade typedoc to 0.24.0 --- package.json | 2 +- yarn.lock | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 615c04ac35..95cd37e807 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,7 @@ "test-console": "^2.0.0", "ts-mocha": "^10.0.0", "ts-node": "^10.7.0", - "typedoc": "^0.23.0", + "typedoc": "^0.24.0", "typescript": "^4.7.4" }, "nyc": { diff --git a/yarn.lock b/yarn.lock index 1a8133edbc..39ba7881d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4812,7 +4812,7 @@ marked-terminal@^5.0.0: node-emoji "^1.11.0" supports-hyperlinks "^2.3.0" -marked@^4.0.10, marked@^4.2.12: +marked@^4.0.10, marked@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== @@ -4915,10 +4915,10 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^7.1.3: - version "7.4.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" - integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== +minimatch@^9.0.0: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" @@ -7325,14 +7325,14 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedoc@^0.23.0: - version "0.23.28" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.28.tgz#3ce9c36ef1c273fa849d2dea18651855100d3ccd" - integrity sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w== +typedoc@^0.24.0: + version "0.24.8" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.24.8.tgz#cce9f47ba6a8d52389f5e583716a2b3b4335b63e" + integrity sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w== dependencies: lunr "^2.3.9" - marked "^4.2.12" - minimatch "^7.1.3" + marked "^4.3.0" + minimatch "^9.0.0" shiki "^0.14.1" typescript@^3.9.10, typescript@^3.9.5, typescript@^3.9.7: From b47d622fee8fa4363b23cff7969ac275d5b4b9ba Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Jul 2023 17:47:38 -0600 Subject: [PATCH 214/322] chore(deps): update dependency dev/types-redis to v4.6.0.2 (#2046) --- python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index 45ab4f1cda..e088bdc7f4 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -32,7 +32,7 @@ dev = [ "pre-commit==3.3.3", "build==0.8.0", "python-semantic-release==7.28.1", - "types-redis==4.6.0.1" + "types-redis==4.6.0.2" ] [project.urls] From b0adbf857ddf4c39fdd8de53fa60d0f0169a7f7a Mon Sep 17 00:00:00 2001 From: roggervalf Date: Fri, 7 Jul 2023 09:55:21 -0500 Subject: [PATCH 215/322] docs(gitbook): update v4 references --- ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...ge (1) (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes .../image (1) (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes ...ge (1) (1) (1) (1) (1) (1) (1) (2) (1).png | Bin 18739 -> 0 bytes .../image (1) (1) (1) (1) (1) (1) (1) (2).png | Bin 18739 -> 0 bytes .../image (1) (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes .../assets/image (1) (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes .../assets/image (1) (1) (1) (1) (1).png | Bin 18739 -> 0 bytes .../.gitbook/assets/image (1) (1) (1) (1).png | Bin 18739 -> 0 bytes .../.gitbook/assets/image (1) (1) (1).png | Bin 18739 -> 0 bytes docs/gitbook/README (1).md | 2 +- .../bull-3.x-migration/compatibility-class.md | Bin 1629 -> 1625 bytes docs/gitbook/guide/architecture.md | 4 ++-- docs/gitbook/guide/events.md | 8 ++++---- docs/gitbook/guide/flows/README.md | 6 +++--- docs/gitbook/guide/flows/adding-bulks.md | 2 +- docs/gitbook/guide/flows/fail-parent.md | 2 +- docs/gitbook/guide/flows/get-flow-tree.md | 2 +- docs/gitbook/guide/introduction.md | 2 +- docs/gitbook/guide/jobs/README.md | 2 +- docs/gitbook/guide/jobs/delayed.md | 2 +- docs/gitbook/guide/jobs/getters.md | 6 +++--- docs/gitbook/guide/jobs/job-data.md | 2 +- docs/gitbook/guide/jobs/job-ids.md | 2 +- docs/gitbook/guide/jobs/prioritized.md | 2 +- docs/gitbook/guide/jobs/removing-job.md | 2 +- docs/gitbook/guide/jobs/repeatable.md | 8 ++++---- docs/gitbook/guide/jobs/stalled.md | 2 +- docs/gitbook/guide/queues/README.md | 4 ++-- docs/gitbook/guide/queues/adding-bulks.md | 2 +- .../guide/queues/auto-removal-of-jobs.md | 4 ++-- docs/gitbook/guide/queues/removing-jobs.md | 6 +++--- docs/gitbook/guide/queuescheduler.md | 2 +- docs/gitbook/guide/rate-limiting.md | 2 +- docs/gitbook/guide/retrying-failing-jobs.md | 2 +- docs/gitbook/guide/workers/README.md | 4 ++-- .../guide/workers/graceful-shutdown.md | 3 ++- docs/gitbook/guide/workers/pausing-queues.md | 6 +++--- docs/gitbook/patterns/adding-bulks.md | 4 ++-- .../patterns/manually-fetching-jobs.md | 4 ++-- 62 files changed, 50 insertions(+), 49 deletions(-) delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (2) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (2).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1) (1).png delete mode 100644 docs/gitbook/.gitbook/assets/image (1) (1) (1).png diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 zcmb?@WmHvN+b-SR9h;C2LAtw?kdkgt5RmSUO?QfP2$B*~(nv~5NjC^0DIsy@_Icm$ zIo}xP=NV%Sh74JItu@!2_q^^ac9h05MQjWT3^+JAY-J@mEjTy?1Mu%AG!*a?UWP#g z4vr2^Sx#Ep3;yRj)J!7z?*psyQ(Rn70wTR+G=elnFXk;dIe86yP0ew*Qp8_~@)NRZ zWovbXA;Ge8NScpB^5vw>qFT|K8Cww3sKUaTINA(X&$!FJW z79+ycgdR1o2qdK-BnNac7RUmmu-V(nSx%0owqzjX=(^j- zZ6~Vvg-}0c2(?CEG%>r%2i>aTm(!(Mt^5*egp1odJ1RCdrB+r}N*)5|8b3Qol6>Wn zxJg>Cn5C|dwK`LAxt+bDV3(spvdKqgXJV2sDJ%PMd+R5!mnmgplDm_VljC4;TY840 zf`$NYZbM@aYny@IDma`Go&YVV%U|Q;a60D)0jCwCz4al&aC9qcYu1>LGn{ZcSOlU- zEVSYBT?gdDiib-}qpawOQeJ3&xbpT_$Ll7vx$S!@X7jb?r8=0mdm9;W+r1aFm;1Ea z3<1cHSrrA!D*X?2S0ld`cmis4s|=>9joUVA+~_%yv{bm-k7X9>ZPkOJL7PK(%meQk zWP?ue={yG&4GgjmS3bW5zsRCs;sg_PM@7^nN_8RKLmcgr;KUXy`P z&Xqr~Ie`+4goQTKb`jYz8NVIUdpl%oCI*bepxm|sZPqbm3N*=)Z=}|U=;J(^>fnvV zvK9IfA<~4R#K93)5Ako$UkD(c>rba?hfa9_-l2P0*aLzDI^8p9el%28QUu zZF(Fnv4Y#{5WCqcqA^4qlYH>&R^=2Heo?BP$0Zwy^Q61wQE)Bc;K)b{mvQSL-?$jV z2fdnf%Ypcz4*x$}HwQHtk+cE&r)Ouf*=3)7FJHX~G4gU%7dr{7H2gI7HbZ6(0|Ucq zf2w4v;pMc(PTaRZ;spA`?AMTj_@mi{;ANtY|W>Uo{} zrEjg~s*T6&FMiBS?-vq#9nRN%$2CZ>9na;|K%(_M2q~{y&SrnaNp7ZsIZm`>C?Rx)1U$3N}S?&(CMMV&xS4cKNfFFN)%+ zgbUApPpeCoGe6B{IsDo}%&z<1bH!V+q@<)An^M5;VUTZZcW39-gV2|VGg|-iBoV(W zXZ>hIN1Rd(i~WrRxF0jN*MsBZdau7XXfi0o9(z52fmLaASkPK_8R2~O=l9Q7;O=i| zzJIii$>y_-mpGa(OE74#OKSP_Z8VE-CX?4v8w}j}XYrR)jQ&5<^h`7l=4$k)Mcg#N z2Wcq<97j*N`_V@&jycBB2AZdO*7h}dw5n?f8#$!4~oQ?7{rO@m_K+3xt< zek`Tnvu^GlQ`fIget-+mjM#pbx`s*yn?)(n&7yO-v^TuNoyU8S>r9$(8__(Mr9 z$)ZV25HxZX;;G7gE|02AiM-I)m%`8q8z2#pH&Z35Gx5}-+Mt972(O3Nzu8o1v>m5O z%g(O&{cE+xPNMz0H2LcVEoWZwz9# zy@%a*p1H8S7fh%NZ}s~`?s?zFm(yPui`uShnl~_Z10``xa3)>9F4hx_KNlg$FYNcF z<3OSzO0tS{K}N>J{rnMf8UYQPeLSan603Rq`qMJA;HqD}k;@R%cR__$7e~v6@igLW zb0)r3YB@rhCjJ*XuQNhONeuDXx`e|vfIYq-BY4VN2`@*Pk+VkaTaYu?+ewNvliX-IfqMm!#jd+!1_iKXb3Z&Vf`W2vM_&s;eVu&%%)deS)cGyl}8BaF&yG= zP&WpxGmM$-`okYb&T=nZk|7}=W2=z;j-wRx7=|ZeADk(WjXcjM7(|Em$D=&@?gEDhF3V-#C4~ zNN+NSm1l`3mS3>SmgT{G&{^&9Z>&Oh_-MBH(Q#Si=P$5jPT!lY5_8$sNy96)UNNkF z^6L_!ZqoSDK`;Il?n%+m>-x!Y`CBUMb2p)RJ#!wk zBX6?)x6O5mw*UuD-QQgP`o-V3+VCWPg^Rb zGO&!l$4|Y;gy29pXa_~9VGq=d2ki^({za;cKR%mi^o2zxR)!x(VZZ~2JJPuoty9U! zk>(y9Jve9!F;w99(eeiz8nL}oeDkBHEJDpk`w{~8OP5!4``;TsWQ%!!q#@g24Isp! zWd{%bT%)=Y=ejU;~=9B*aSFS`L;HOVVCVvE_TxSyem$t!vwp@1+9E_S(UETvnt zm0@3rZVHJ9oqMP1bj!@s+M!15x=u8qWpmWrbQalEqsXC~3RT^o4;OG)j1~FP0=; zBH))*^ji55Pu+9nfALTNz+~H`Tt3YI1Jl4?X-uBJBlb`J7l4@p)N~ylldJq++@{p! z31FI^t$g0U$Zd@j0I7iWLfe0_)$uzxV$RhUlaKxj<>1h-}$((^rtme$pG+Dwlg6;;>zQ+Ix1 zP_+Sl)$uw#p7kmI&~Ewm?7Dd|I-|S@qMBp{+FCbWx$lM%J~=mpTB_KhKYFS{hyCSj zWmYPi4qFACJcN%-99gs}HWq7WY)s%qP_la-^w#m2GwmnP*qBrZsBAMNk3Z*bfOSxG z$w-Ckn1@afgr^AJ>o((X(KCoi?V6b$ePD18t$S`Np(NMPh~1Zcj@rz(kAjsNO>VOg zY2*pv#mEZRb6Gec?()UKP$LK=$#IH;5yGw5T*#w7JD!OyE7xT4qYiC1a!4^=ihl?d zMSGbGGA&x-NhB-g!1$V zevU*kJ%nHy`ti)KB5qlXhubQzr544Qj+?1daUoqTId>;D2MQ(VZp@0SK7-Bte)^zU zj?H}STAh)JwOrUd6vJC1%@ikdsoU+Tk9ykGU?VM2TclIy-mWDF6?+^mp0L8r!B+>-bkIczCNw@-y&2CFvXJekqXVn7)_x?G4(mn zVv(l$*YR&~0-gzVRK`c43HVtrP(Me*NI^}}Z+V2VE8%84$mHfg?s`a=?>9e3-!kv2 z++5F8RNI#(zx5cuW$EJ#X_DFZlvM(gO|RMCiF&4s9yQCd>B#&tcWd?k^Lr@6G=P=QW;8JzlT^jAdPJn-fSS`-qg_D3 z7X5aNm=^2zAi+CTeohMqQ`vRNn4Mp*jkXL!)!nX--7fq2GEN~O8G-`yI&UqpR4_|S z)}!1tcQr}L$WWit&0APH#q;WO?NG(eX9#z=Xb9;P$RN9qi(kIy?zobn2AHhBaAa&u zm+;Xu?d4YY=i4J0bK4(N-_$|*qg%4sa?Dd>s(FItc24u5R)$CJm%e!q^6}6?#Bis# zVZtecr|VV8n^Bk!o{oe`575DTAzzvN9z%k?1A@~o~K*Nu&xt}Moj!<~=QSU?=&+op-SXJzXzJg>6G2n4JO^>9xh?R@a*e80m%BbLF|m9% zA`Ef)Bn#iY^wL_b-~{WvQOidFU*(;4$Pi}>XUr3qf)P=z9`5gadQVn9`!aEJk7rwR zus3SR*+dT(+a+&fKpyw;GVnNZ=zz}eq8pX={nFBszC-(|@OYVe-t4xTs_OK%hu!rf z`7QSWG1FO$*l^3#P}q=dJx08A1yf%|U0v_``dVT{9^ySZGBWL#oRadD&&+3i@zK#Z zW1-)bR(ahpa+Sy(l}bcQjSc{2Fw8S^x;>&JEiG*X6&_AXN-7x90m$9<1@*7fUK||! z*Gw`a11a%YLGCCA-^z;=5@@Q9kChoccSgyLj|>`LyrCj^$HYHX2Lx5&8|e=X zY@j*#-tO%RiE`<({yIFYMPmKIaNUrldYm!a@5&&n?hA6!gbyU)s8!_A! z00$s*P}ULg@bNvzrV`R%Ps6cRWnyCbNsvSXaY?TsrsW81l(z~WQVK=E{&sb;NqGN( z6oXml+Xp>d1RH_*4>MRKS9k-2_P7yvo6ZV(c19foccOk*$ND}B3Su?A5!if>aRZ{Z z2%bv#RW0hThbW{}LrzW4RzgCa*oPP! zVJ)6qoXK8RVsd{%=^ty~Uo}Iuzpp>L^d7uE8<+g`>-Dn-m2!AQ6f)s~y-m3{evb2V zZv3t-{H(0#vO5=T=v4x4@`Pl3#)~xg_4bH3TMZH3oy4(-wARGS6eS5DPhF~6o30FZFB#2f1qOO%*&MhgpNxjzHRWlas7>!j2sXU0CY(oj86Qlq>+p$y;cQfqbG!7QSrqJa> zB2NDBf|tB4fKf9TQc>Bc;OMUOJEju#s9bUmrO6C?Qp~d~`P&Tu0@#7)fRG0rOar{j z6esWYa2lq^EjqdB_35_t{p~eEb-c7A?Lu(v^M($*q!=(f>?zDo3D{nE%tr^}7?r7I zK}b#gcp;%GVog_dk5T?Jz|QnRLrT9mpO?n^-CfKf$U3&J;lF=TU%G?Q5s&`V=}p42 z@uW=nl2)~ma5#qW9|wNN$?#~Ya17$D4>cVG$0SKy>)GxC+S}&s|J8-Fcr(dAp zIrQ0xdQ=(UMP-4YE`E`ke?3{p40*(g$?K$`4jVXhsr--7Tf%KW@N)Ym8`I$Ws>4cbDQeBWAA!1C`+}W zUGF?sUXHzK@{$et+uG5=2cqw>qHz2o3hbQ@8ckxuWv|=hu#kvz zx776dt=U#@o#jBg%|ov5(Ih61?}b$h;F=Yd)dXLE=O0<Z>%rp zYYR*wYbWHnABpwvGASix@W_3u%XH$ySLS>SC!Q!}hLqEU7>tZ-!cvk-;}?3p6;CT^ zV$}!RUB@GrmW+mmhLQjej*-g=o8iw8?0QssjpDQ$a@2Z!;Ev*jm3Xo01c<64>@3$XXpF{3gC+-b)AyuYBhQhzO>i>1C?O#&iyb&Z5p>A6M{U2h0H5JthH zOY(!#R;go>a3m5iX&5DeiaEIKxmwj3vHpmieT3W*kmK3NSkt_W0+N!Zre`F1e9m|{ zJPe(^@0@U&9|hA9^32u=%4@CnM2@GZOR(kz-nW?aSO9)u%pzCljSP$mNl77);&$*?mBUzsdr%$0xIfgqNHHXN69y9X{pw4VmlSA-ixJS>luy$!h`nW1rOP}!hEvVBsY!a`&H@sv3kRbW%TS5DheSl4; zhsl_=A_&~iz6xSW%;Hds6dP8Y1X~%5ka8Ln8@3vJa^&<}cF$-(9cE9?$||?Mo;7qz z1C6*!zL-Y>Wza6_;HckBnHJFXDN@=bzv-d zOH0cSaQcnc+0NH79wpa4DE_PI(x)O-0LbszfBBXD#9n(mS9}I=vhU16i7nm~_BzfV zxXQ^5bvwR28!u9Qq_t@7YU}(<2F?hg^Jx8MwyFcCmncRWY9sJitBTch8#i~ISW=AFYe5M3H>1z%3d z(Z_>M>EP_o<*&IDia>VV%Gz;lys;2Ngk|>9NlO$eBF7> zO^nE6n)P1>Yu_fp3G90+M8>Uk2$IXRVgIf3`rtvVRvgbmK!%$Unzc2!@ZF-lZ3 zNUnlkb^$KB$gt^qqkY*|beO7;hnQ$v$r=4nn}-(aD~$7tT>X+UkJ7xkfJ51faunft ze(`V`FRS0lGT z{(`$E;Fem$mUIEuO@3PTcsu8^815=*`vX3DmflE?(2s}uuAyl(Kh8Xh&=+=rM8|M{yu%oHJXZ>FEE^Kp8xDJN)-ocOEf>u04 zaZM73sjCkS8IxPnjs8ZEt*>uwfM(gt%dGGN%_$}_rtvup@TIG=Xp-evE}idBH~P=k zblz7;_OR(zzW>=U5eK#OV=>1=KWx4~NeCPSGR}ED60MQtm)OZutgJ}vdC*oOjl_c5 zghhBPkSYI3E0fgk%?R|8dnL3(XxeN2E4M_tSq6IB-o?S(!E4a*8feOrN~)o^3uhAP zJLEZh-dLuI4fa=zr>cuv%}Y`6bY?T?ZZZslgrEW)0P}*B8Ee*lrlO>it)RuCoK{K^ zlQedwAiQt}U2sqqSG<^5lI(NG`IPD@5LTC84#vy$kRaCANZg%Iw}$Z0Q_|$xE%zW& z;jRKnZV(6sjl7~XhY#1dE1VFp+GlV*$i_FBvxVLiPLt6T@#ovon`&U0daWaSgIaXa zKm>Lw)K=~QPLyuIm%=MZ2IF~s!yl|LLncUAHK%J!d|ru;vW;fizk z!kdzS8s>p_3Vm_D)?~(NU}i-@Y$kgB-M;4Kbuee0yBRtWWji~4-n`l7;m|s@QD=bv z%cbVJ6}lQPTgzI^RLbIM;5?AFrzkZEX&=kvl~w%Yy8G-drz;O^K`+#?q7MX@-BQ*l zsLs*)W*Y7Fs7ZdW+GtRoWAD+RA&QRY1>7h{c8>#G;kIHUu29>((**lRE zpYy%-_6Waj3CuA=zgaP&U9#WSOe(27`-(keG%u%#nem*AZb-Qb&qh@fvosd$zUGQA z_TLW=j)3aYkRuaeZfI>q>VjjaEHv-9aSQa&bJumrhwB9NYP#t}*8{$8wtBRT+}!Hd zqVIxboXzSc5eDSmoG{aNSA5cN>DKTo%Mps_HO8DB)&ZDRTjS_RIfYsHb#b2WkuYal zBKy1)+)tiq6iFV{Q zKy8u_Kl>wswdDEpdkK(Pby*I9?oT8j8tLq{M>5duMRL;XJiAOEP$bu48rm%(;JM2w z;n^8{YueWh(5h*+>C_Xn=C!+#uqIb-ih(kzfl)v$F22 z-GG6qj*u7CM@KOa$BI>f5y2NtvXY_U$FtTagr(iP_GFL@rBHf3m=AG==W2ABoC(dF z-w>Ds8f6gsQD|Q%Ox^$h;pWUQMHj#yAvH-M;`V+TcS>sIxP2Z70KajqaROp{=>+{! zrB7tDne%LogAJ+_sU1HG|3iX<#*7209ouG-0$*Vpb;Ar5eNnM! zi7pc(Yn8%lXUB$Stl_!X;BGJBuk9W2ok6?LkN! zDUleT#R7%kX=DPInm&#-)^@j1PVKUsCDuJ9X{;E8>p3oXc?xm?-Duq!4X?6BU4Lc4 z#okddNKU?naudRoD%j!tXzevm%xo=CUUzA}ls#w&&!E{KTMRQD1o5y4 z-u=1E@cs2!k6jxr@+IknOBnnkJN}?xpZ8Qm5?Dc@g<-k^YWzoErLRMhB&e`1CN1J0 zn|N=hwdQ0>eFiRp8|v7k2ky?>kB(_)BxT%lOT?V~vK^5@WZRKDg008+L8Wm8RXCR& zMZdn^?*7#Zz%XG2?{ZGpWxCqb5Obb|2tM*(mi6wY@*qQpR!cS9yZu@*W`C}Ko)7W`)ydD=}9&NgJ_H07D{-C^T3y)RoQTdjwS20 zHIT>uHD90&{xO+Q=!`|kwn{oj`RdQo13VXJ8M*u5P{3Q6$(e)Ge*9r+J?2UB%*R30Gz+wz6A9xIY6BO;tWx;GA~6B3g<9nM z@3ri{%Gkf)p}Oi#$Fd}>j3#-eMvxRfkU*>c1GMWg(ndT4HdNI}6V_0h(VQHr(R{SF z%JOQ7|8b1nLTXVu03hDfqw~Sxf*%R1jsY*a*iEvv){F;blc#k8AI@|Dt94KB!EjH@ zV)P%%16{^UWca1`x2<&Z2SdJ-PnBUuUUpi>xs4<-nV<46h8Z2;~fQSmrw3kcMqJb^~MVot|>t4DXTr_miU^+L|2j+uNG zuLzR{{uoK`m^evP&dUGT!dC4+S673JWBOp8efm`}vn7ga38{QHY#`Pf?q z+dbql59rav`=&+ODo*-7|3c!qM0NPsHCO+e{mHwH}$c z`bSNw9Q4f;*W7qX+4oBvx}8k&NIyrS&;UTKFk2M=IdE7W zBYdi_kt?iERWf=d)dUcxbxV==9y`1kA$7E_LBq-@{h%IXC{psOFc_1W zUa!ia@$`bEw9^8w`Sx@q?l$3kSK(yqQxmk(SxiG4$YbBOhEfPk)ybAZ8QA*CG8J--ku2U`jCEmdiRRb)-l+yzYINKi2Yk9b5EpeW8VAvGj z$@hlRPhlNSsq=H)9h*IS`c%j8ljFso;1no4Fu+!N3rk4k)wM-!Tp1M(Mb_w$a~jcf z`FoEE?-DsIHgV$j^KDrJt74uG;14H^p(0KP2iO}4ogd?$5b%1U5=?R$Mddqh@9rK{ zKNm#C?0uX^lJxi<$c~+pr)E$Bsxb#fNCtA^c4{h7T5hh1-J69($rcMnc#e;vZhIPO zpj*rHhnzN^RV(L&%BA9(z7jNO?&9&q*lGdYpZ8gOwiSR9=!?kykv;;d*}K407=SK~!V3wzpI_nq z96~~ie z|NZmRDpw2%XGnr2WJ*geXW8(myXQhnzJB{DP6?(xi^w8}{cI&Ga4)5UHcaReh+Jv) zV;HMyXx`r5AKedh7i!HzT@5<}J_C1S@9;r0bd&&J?Pok!h*wS`4+SmOtO)cQZ;M>C z*mN8+LMrYbgJ@l@Igu6XZ6L-mmqz<#D)p*Zd%DzwYDPzUG5 z2~OuysPl=Na5gPg(v})mQt^00(K}#N?}#XThk1il7Cnd!nx;g+Ma$k?^p0}5c_2k# zkwXwsu<%MWszM}s7pXZ7JXS0>mW1Ok;CR(Z6;3#xsi+LIX%_YcL~ev8-?Y7x_UdDR ztVR!_LQabrs6DhE-WcwQvM?Vd9@``v^^CkN?g`t-9Bm}*)YV%UVJ zw9bVL!4~+?5>(kbj32gUE+>R!p9h}6$1+Q@L2yM>UIJ%E-R(r&8)KhUOxxxw8puZp zbCqx6K#EIoWcXD9wx%C>54W~G94c}BpJ08zv12bCE9*X~^E&i)a3$v?)u&RNtfxQM zs7F3~zYin$IV2=$9+irl@sM|PSs3+MB@tuTb?nS83d(zI=R8SV%&(U}7xk>Itgco# zh_)r_{8nJPGU)Cq>)Y&^rcZb$P33NB{dYZ{%YP?Z;S{~4G)HLe_EIORMsi^t4YMV9 z3uhw5-S#;Qa70U#QE^{h+~@~7njNWDV!iRz(weGLDc64fIQF&%=<2!1U5C63Qm-ne zV@@cZ{DHZ=@9+L>gNizK2eftMX;Jcw)YR0f)E+g&%twTOAc~V&wM!{MHAu&1`Rr;z zMi_kSGaPZR={j-%lmxy_k;aSI6=!|0U5@d%?@PF+* zj6u4b4L03g*<)#Nd6d;+1iwv{ZWsvDnK5ZN5GI?UC#v0SMnNZL;UTY$`h=u>PKY_O zw~E4`4g^U=_)*2N8WI}^G`265=p51IdP&K4Hl*`}PkX-R!tb#8&^i8+AsM9vllZfm zejf28gm&^+?81Zl#2^z*u4vLAGkVO*;U6znAxN_9kUir7VrnYLd?!&|_}HC?-$sRmLPU6Ke%K0HgP zB?S%(A7243NkZ(|J`+2;>WkDW$9o+<{{b@aEO`)Grc?a#-IuY;E2CWKj3mKI;$$6> zg-?LhT#~jd>Zd=5w!G(dSW_hJ1jZS7s1MO!58DYlIJ* z#vWi_OZNELgY?<0gFr)ND4f)U#TPjE@$jAdaunQ7ZIZDnlr1qyMXhYI21Uc>okp5Z&qyD!w@ZY4#|KEg)O6&dh-+;<- z0vz+t-`sKzf1dRqJ^iZ|uQ9+k*9=DFg3m@GU$?!`Um0-JIMgJS$3C`cthQD{xWus4(OKHZwAa6joM zRgI%~QVe)MSU|=bU{Lp%*(kzCZndDFeI;pU?F*z~Mxe6+eW8@N+tBH=&cw$?=XIHD zU=QB{v{^a~BDK07>=cGcdjr3Fdzr(r7)y;y0iJQYAd+T^Qw21g z889N6W#ZKn&m$vgOro6YgiRo_sDOml?OEPKYWbcJ0}-cq$P$rP62b*fb`~6g=T+B>eQ*6@YR(Ri;jx1rVRE z&%_jxJVrHW!2ZT*z&(`!!h6>4;shiQia}Q4F`$yjg`D%30{;BGxmBd~FE*UT<2LBY z?}K@KOnZBFO#M#6&X+HGV%mTjpUywBtZU}vA-)=B*tL(LV<_^&g3l}_BU=oz{9d?CkFMCI@PRu!T3q{ z1!E+KE)#_zM-1(5b+9x6%w6I?W_Ys)0orv|zBNNC4!74lwsZkn9VMJA3w{>WhFgOc zqA0W5gLwnJL2$s;Iw~vh`BWM-4rjG%IviU>h^NmKEaGu5gOzb`<%~T{a4S6on+A=^ zNb>tIx4pEct=)2kMnOo9?@@~Zt1qC8-D$eWje}}OdY}r$QIpWU75*yy+4HIam@lSj z`erLdy&*XOv_~(v2bND@nqhLx9|D0l8eVk(gelcuYOeunlIfQ?$}-{wDJxWW;~Eq3 zWs!YW?A%Ae`oO@=K5Ne-aJp(JXO?r83^lWRF-TOs+~#?ZaRTxxHKwh0*w>4z_spMt zE~bj6k5BtYd|^4H?I6-Na_UHuB!HS#zzS%jZMS+uUBy;qZTol~WpIe217a z21_zbDu|WI8bhBDQP;xaPAj++VU>656UpKBW{V*9I5a#wb?;2d&xWIn0;#*ewlRnJO1j+kmU8;h4def7`e5y@E zMB{QYjfv(rmY>(jIDT5eiycdcg2trVdl1o}wQCYfs>^#Y@uj)k9LL7bZ{;cVOuV_| z^$swy2M(biXZ=qQLqIV+Qx}U-&Dw3gbSO`^SKV?fIiEJnrU%Nm(FO%5Pd_G$BEhb& z2SQ+I@`tXO0gTqE4c z{q2*$M-lH+;3oxXK#$XG{+G!^DX)OV>P+m%4^W{r%gf8N4=P{O=iF<=gOKjRln{tF zJ|n!abce+?);~F|R>Q=ZgXLqp<<>?KAZY%+2O9j#!1sDvozKgj-Q4rMDR}lKuPbjR zJiE;B_DTpn+fRSQTs#0+@7<{@L4K#os71>Ogwf_q#D-)X9jjkW6-OaRemIN;k-#~o zqd)yIr1oE)m#R&=znRg|D+eY3mL<}Ms{zULMv%|auP69s8RHjZ*-SmG_&3?fg+!7? zs+IYBZ`OcxlvEiwN@wcFB@Rw&xmZ{1*nsa)-~>$aei$KdvC_d9WkoQfcYi40((W!A7iwEX?X!>O^3_5aeyslJ z8JaB)_rXc)^~YkGF1G#+TSLk|$>G3RVi%6_(aLIoXJl}2!aVK}77+k?mf;8v5x>x; zCvXnk1hNEhoNB)JE6t%_+VoaYMChrOT|v@Ccs*%PQ1~;SiJnD&{y0r|#HB+&^2_g` zSQoye0z<@Q^}W`&PwYWSj9BMuePXtVi0C+fnQ!<3IILSKF$rG)8R@yFW&tMBvhJRi zTn6!>C(j19aeOWQkBNfN0k6rpaK|SHgF<9*mN&t4ZTpbZkI*fV`Ru*R$oCRemr=?e z2E`q!x|YVs5xtChp>k?vaAV!h?@b+!#Pu{Xmw8^N-qj9Zw?^@-wxQ$SWP zZ(9RN(2_eT4=`P;%1+Tx;<{u_1|kJqftNMrw2u z9yHu=3~s~r+XA~Mz)w*-ignmz78vH5yU~xeU+W)ij8CQDDZPLh+$~-z9cV1aV}!d5 zRalqlS;oda@@IfsY=?P?R(uXPt9Y(R*aZC7W#Mp!6Wh+1F?q5Fa%`_Mc|IbN_gU2> za$-qzDdLpwHlKWbO?mX++(T0qHR><}Q*duWAt5nvdUrgG1YZeJ=p( zVjCo6T>nD|@%d6g2^x;dIH(y`U$dV~6)ECYVVUnZSxRB|W0)>_p_^5g0b=xr?jtgB zOQIQ=Zl;Q2@X;(Y4qZsp^QbZ|0ADgaCRm!=gkUzEwax3~)S%s~j%Fx)VZvM}VU|~I zf?UQ{r@71D3vD`jMc{7khRP4(7<^je zQRa}~ndph_Mg@b=kZXf@VmXY9CDOHqSBVxR&7LU#k1!Oxf!{o-dYn)G#~`jMZn+;g zyeeT55&y$HEDctr0Q#a3>LK71(}szK%fwheo?d}J_yC}(2=*uZNtgq{{lm}rGB0z) zZ?K%0U+u-?eIY)bSi~6YXhF->#4$^ouM!UPhf5%5_w(66UkkvcZCleLpQ)l%rBiS- zWc2U5NDfvX?mumh=0)aOnS;K?hpq>}NFys$0T?`XTlod^8$EW%HRNW{BfAQ+ybQ() zETzg}0N(;Ybn!(9mZYM4g%)-zzi~e(0RnWo9b&A=$GEb_A10f;Ur4cro+59W0C5#G zOUyWz&i&W4*xUpu58a`tAJiqT!q@a%{zyTl}8u7xVhl_SBLk6+ z%wMF;q~SI#J6S=Q-FbYw`i4VVH>WBxL#ZoXzHE~7)po2DF-8%OQ^n45pRJTeh6 zW0Wid5j}*O&Hwx$yRxo9!f_WGUcvj4)!~ld zYs=hQU(zCKT=h#|vGHoBf#6*wI3&BG{y#xTevEK!Y#h(97P7IlAU3@}Qrp;T5N7k`4OyvW zskcyZcu5Q%$|A6#GS>QshGNs8NOVaGsCm5F<@qCg_zMV6@6-sJ6!iNj%! zl!b=p$A!8?OgdtH4Bm*h?W;ZnW)H-5_5nPS>f#YT(0Xejq8bi`yg!@s_|T zctIpM9OBa1V`F>2A$&3aMwwa*lttq_8PZ)?pGI1!KwfLYKqRAPAM{czAFn5?n#YZ4 z3f340NdjcQjmvohe6FC4oPH^#TvttOCq~}JQdFCHW|N?7RuEKhf$5t6bMbN@S~~L+ z7GZDCi(Z*1N-?im97Jm@`)%?_dz;7FeNhK?$n_%g&RLDW*HGxpIlbM_Fg!GQ!W1tdMD$KL(L^>U14=^k zo}YpC;A2JClP`Z@`f!usXxz)#u*cjEzF5GhuIc|ThR{m6)_1O8Z z0~?^%Iw`sh!p9L7g?-Nbi}~XO{JhB zoT6H-OeO;869l^?nM+EAyMmG-JyZr)zQXZ2p1oInHaUNgvX2NIC<152u~vUl9d<5J z8;nf2L-%R-{w@|%*kZ{byG!}ISdKbzC2uF3O3F3lG`$d_7Xj`3F6RHN%RNzSrYdl3 zLIYHNYOIq<>t#u5bP(F216`94&6IO-)6qkd6IB*m_djUkQ}R!ELxHlx|BpwVIDmUc zv(N^JSUnu{HPU6h9Y(`JY~+IIzb*vsk} zz@uU;*nopL9o|fTH!O+G%35^`cz}rf<|iuau7eiN#ywC|I)CJ8>_I0<;8>x(>)cO? zd9v?771INMChi3$z-=WffLp7l&Y%DO`C?PUJBv^ z2JC{%YmRJWIZ|-ZLdUvITmRgqK1r43ohM2)#GmN_ck53DmMCX-@_5aedVT$)gfAj* zZWtLEsaRXzZuuML@=j#p{j;3!9!~=r-zzARz+91$y_Cd1JrsEf*lB05W z{9pX_R6&ESn8ioulSQ9Z4k$i79Lm>Yv*W#{Jf{NB#*icb+0U43oacDa9{@ZIiNVv= K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 zcmb?@WmHvN+b-SR9h;C2LAtw?kdkgt5RmSUO?QfP2$B*~(nv~5NjC^0DIsy@_Icm$ zIo}xP=NV%Sh74JItu@!2_q^^ac9h05MQjWT3^+JAY-J@mEjTy?1Mu%AG!*a?UWP#g z4vr2^Sx#Ep3;yRj)J!7z?*psyQ(Rn70wTR+G=elnFXk;dIe86yP0ew*Qp8_~@)NRZ zWovbXA;Ge8NScpB^5vw>qFT|K8Cww3sKUaTINA(X&$!FJW z79+ycgdR1o2qdK-BnNac7RUmmu-V(nSx%0owqzjX=(^j- zZ6~Vvg-}0c2(?CEG%>r%2i>aTm(!(Mt^5*egp1odJ1RCdrB+r}N*)5|8b3Qol6>Wn zxJg>Cn5C|dwK`LAxt+bDV3(spvdKqgXJV2sDJ%PMd+R5!mnmgplDm_VljC4;TY840 zf`$NYZbM@aYny@IDma`Go&YVV%U|Q;a60D)0jCwCz4al&aC9qcYu1>LGn{ZcSOlU- zEVSYBT?gdDiib-}qpawOQeJ3&xbpT_$Ll7vx$S!@X7jb?r8=0mdm9;W+r1aFm;1Ea z3<1cHSrrA!D*X?2S0ld`cmis4s|=>9joUVA+~_%yv{bm-k7X9>ZPkOJL7PK(%meQk zWP?ue={yG&4GgjmS3bW5zsRCs;sg_PM@7^nN_8RKLmcgr;KUXy`P z&Xqr~Ie`+4goQTKb`jYz8NVIUdpl%oCI*bepxm|sZPqbm3N*=)Z=}|U=;J(^>fnvV zvK9IfA<~4R#K93)5Ako$UkD(c>rba?hfa9_-l2P0*aLzDI^8p9el%28QUu zZF(Fnv4Y#{5WCqcqA^4qlYH>&R^=2Heo?BP$0Zwy^Q61wQE)Bc;K)b{mvQSL-?$jV z2fdnf%Ypcz4*x$}HwQHtk+cE&r)Ouf*=3)7FJHX~G4gU%7dr{7H2gI7HbZ6(0|Ucq zf2w4v;pMc(PTaRZ;spA`?AMTj_@mi{;ANtY|W>Uo{} zrEjg~s*T6&FMiBS?-vq#9nRN%$2CZ>9na;|K%(_M2q~{y&SrnaNp7ZsIZm`>C?Rx)1U$3N}S?&(CMMV&xS4cKNfFFN)%+ zgbUApPpeCoGe6B{IsDo}%&z<1bH!V+q@<)An^M5;VUTZZcW39-gV2|VGg|-iBoV(W zXZ>hIN1Rd(i~WrRxF0jN*MsBZdau7XXfi0o9(z52fmLaASkPK_8R2~O=l9Q7;O=i| zzJIii$>y_-mpGa(OE74#OKSP_Z8VE-CX?4v8w}j}XYrR)jQ&5<^h`7l=4$k)Mcg#N z2Wcq<97j*N`_V@&jycBB2AZdO*7h}dw5n?f8#$!4~oQ?7{rO@m_K+3xt< zek`Tnvu^GlQ`fIget-+mjM#pbx`s*yn?)(n&7yO-v^TuNoyU8S>r9$(8__(Mr9 z$)ZV25HxZX;;G7gE|02AiM-I)m%`8q8z2#pH&Z35Gx5}-+Mt972(O3Nzu8o1v>m5O z%g(O&{cE+xPNMz0H2LcVEoWZwz9# zy@%a*p1H8S7fh%NZ}s~`?s?zFm(yPui`uShnl~_Z10``xa3)>9F4hx_KNlg$FYNcF z<3OSzO0tS{K}N>J{rnMf8UYQPeLSan603Rq`qMJA;HqD}k;@R%cR__$7e~v6@igLW zb0)r3YB@rhCjJ*XuQNhONeuDXx`e|vfIYq-BY4VN2`@*Pk+VkaTaYu?+ewNvliX-IfqMm!#jd+!1_iKXb3Z&Vf`W2vM_&s;eVu&%%)deS)cGyl}8BaF&yG= zP&WpxGmM$-`okYb&T=nZk|7}=W2=z;j-wRx7=|ZeADk(WjXcjM7(|Em$D=&@?gEDhF3V-#C4~ zNN+NSm1l`3mS3>SmgT{G&{^&9Z>&Oh_-MBH(Q#Si=P$5jPT!lY5_8$sNy96)UNNkF z^6L_!ZqoSDK`;Il?n%+m>-x!Y`CBUMb2p)RJ#!wk zBX6?)x6O5mw*UuD-QQgP`o-V3+VCWPg^Rb zGO&!l$4|Y;gy29pXa_~9VGq=d2ki^({za;cKR%mi^o2zxR)!x(VZZ~2JJPuoty9U! zk>(y9Jve9!F;w99(eeiz8nL}oeDkBHEJDpk`w{~8OP5!4``;TsWQ%!!q#@g24Isp! zWd{%bT%)=Y=ejU;~=9B*aSFS`L;HOVVCVvE_TxSyem$t!vwp@1+9E_S(UETvnt zm0@3rZVHJ9oqMP1bj!@s+M!15x=u8qWpmWrbQalEqsXC~3RT^o4;OG)j1~FP0=; zBH))*^ji55Pu+9nfALTNz+~H`Tt3YI1Jl4?X-uBJBlb`J7l4@p)N~ylldJq++@{p! z31FI^t$g0U$Zd@j0I7iWLfe0_)$uzxV$RhUlaKxj<>1h-}$((^rtme$pG+Dwlg6;;>zQ+Ix1 zP_+Sl)$uw#p7kmI&~Ewm?7Dd|I-|S@qMBp{+FCbWx$lM%J~=mpTB_KhKYFS{hyCSj zWmYPi4qFACJcN%-99gs}HWq7WY)s%qP_la-^w#m2GwmnP*qBrZsBAMNk3Z*bfOSxG z$w-Ckn1@afgr^AJ>o((X(KCoi?V6b$ePD18t$S`Np(NMPh~1Zcj@rz(kAjsNO>VOg zY2*pv#mEZRb6Gec?()UKP$LK=$#IH;5yGw5T*#w7JD!OyE7xT4qYiC1a!4^=ihl?d zMSGbGGA&x-NhB-g!1$V zevU*kJ%nHy`ti)KB5qlXhubQzr544Qj+?1daUoqTId>;D2MQ(VZp@0SK7-Bte)^zU zj?H}STAh)JwOrUd6vJC1%@ikdsoU+Tk9ykGU?VM2TclIy-mWDF6?+^mp0L8r!B+>-bkIczCNw@-y&2CFvXJekqXVn7)_x?G4(mn zVv(l$*YR&~0-gzVRK`c43HVtrP(Me*NI^}}Z+V2VE8%84$mHfg?s`a=?>9e3-!kv2 z++5F8RNI#(zx5cuW$EJ#X_DFZlvM(gO|RMCiF&4s9yQCd>B#&tcWd?k^Lr@6G=P=QW;8JzlT^jAdPJn-fSS`-qg_D3 z7X5aNm=^2zAi+CTeohMqQ`vRNn4Mp*jkXL!)!nX--7fq2GEN~O8G-`yI&UqpR4_|S z)}!1tcQr}L$WWit&0APH#q;WO?NG(eX9#z=Xb9;P$RN9qi(kIy?zobn2AHhBaAa&u zm+;Xu?d4YY=i4J0bK4(N-_$|*qg%4sa?Dd>s(FItc24u5R)$CJm%e!q^6}6?#Bis# zVZtecr|VV8n^Bk!o{oe`575DTAzzvN9z%k?1A@~o~K*Nu&xt}Moj!<~=QSU?=&+op-SXJzXzJg>6G2n4JO^>9xh?R@a*e80m%BbLF|m9% zA`Ef)Bn#iY^wL_b-~{WvQOidFU*(;4$Pi}>XUr3qf)P=z9`5gadQVn9`!aEJk7rwR zus3SR*+dT(+a+&fKpyw;GVnNZ=zz}eq8pX={nFBszC-(|@OYVe-t4xTs_OK%hu!rf z`7QSWG1FO$*l^3#P}q=dJx08A1yf%|U0v_``dVT{9^ySZGBWL#oRadD&&+3i@zK#Z zW1-)bR(ahpa+Sy(l}bcQjSc{2Fw8S^x;>&JEiG*X6&_AXN-7x90m$9<1@*7fUK||! z*Gw`a11a%YLGCCA-^z;=5@@Q9kChoccSgyLj|>`LyrCj^$HYHX2Lx5&8|e=X zY@j*#-tO%RiE`<({yIFYMPmKIaNUrldYm!a@5&&n?hA6!gbyU)s8!_A! z00$s*P}ULg@bNvzrV`R%Ps6cRWnyCbNsvSXaY?TsrsW81l(z~WQVK=E{&sb;NqGN( z6oXml+Xp>d1RH_*4>MRKS9k-2_P7yvo6ZV(c19foccOk*$ND}B3Su?A5!if>aRZ{Z z2%bv#RW0hThbW{}LrzW4RzgCa*oPP! zVJ)6qoXK8RVsd{%=^ty~Uo}Iuzpp>L^d7uE8<+g`>-Dn-m2!AQ6f)s~y-m3{evb2V zZv3t-{H(0#vO5=T=v4x4@`Pl3#)~xg_4bH3TMZH3oy4(-wARGS6eS5DPhF~6o30FZFB#2f1qOO%*&MhgpNxjzHRWlas7>!j2sXU0CY(oj86Qlq>+p$y;cQfqbG!7QSrqJa> zB2NDBf|tB4fKf9TQc>Bc;OMUOJEju#s9bUmrO6C?Qp~d~`P&Tu0@#7)fRG0rOar{j z6esWYa2lq^EjqdB_35_t{p~eEb-c7A?Lu(v^M($*q!=(f>?zDo3D{nE%tr^}7?r7I zK}b#gcp;%GVog_dk5T?Jz|QnRLrT9mpO?n^-CfKf$U3&J;lF=TU%G?Q5s&`V=}p42 z@uW=nl2)~ma5#qW9|wNN$?#~Ya17$D4>cVG$0SKy>)GxC+S}&s|J8-Fcr(dAp zIrQ0xdQ=(UMP-4YE`E`ke?3{p40*(g$?K$`4jVXhsr--7Tf%KW@N)Ym8`I$Ws>4cbDQeBWAA!1C`+}W zUGF?sUXHzK@{$et+uG5=2cqw>qHz2o3hbQ@8ckxuWv|=hu#kvz zx776dt=U#@o#jBg%|ov5(Ih61?}b$h;F=Yd)dXLE=O0<Z>%rp zYYR*wYbWHnABpwvGASix@W_3u%XH$ySLS>SC!Q!}hLqEU7>tZ-!cvk-;}?3p6;CT^ zV$}!RUB@GrmW+mmhLQjej*-g=o8iw8?0QssjpDQ$a@2Z!;Ev*jm3Xo01c<64>@3$XXpF{3gC+-b)AyuYBhQhzO>i>1C?O#&iyb&Z5p>A6M{U2h0H5JthH zOY(!#R;go>a3m5iX&5DeiaEIKxmwj3vHpmieT3W*kmK3NSkt_W0+N!Zre`F1e9m|{ zJPe(^@0@U&9|hA9^32u=%4@CnM2@GZOR(kz-nW?aSO9)u%pzCljSP$mNl77);&$*?mBUzsdr%$0xIfgqNHHXN69y9X{pw4VmlSA-ixJS>luy$!h`nW1rOP}!hEvVBsY!a`&H@sv3kRbW%TS5DheSl4; zhsl_=A_&~iz6xSW%;Hds6dP8Y1X~%5ka8Ln8@3vJa^&<}cF$-(9cE9?$||?Mo;7qz z1C6*!zL-Y>Wza6_;HckBnHJFXDN@=bzv-d zOH0cSaQcnc+0NH79wpa4DE_PI(x)O-0LbszfBBXD#9n(mS9}I=vhU16i7nm~_BzfV zxXQ^5bvwR28!u9Qq_t@7YU}(<2F?hg^Jx8MwyFcCmncRWY9sJitBTch8#i~ISW=AFYe5M3H>1z%3d z(Z_>M>EP_o<*&IDia>VV%Gz;lys;2Ngk|>9NlO$eBF7> zO^nE6n)P1>Yu_fp3G90+M8>Uk2$IXRVgIf3`rtvVRvgbmK!%$Unzc2!@ZF-lZ3 zNUnlkb^$KB$gt^qqkY*|beO7;hnQ$v$r=4nn}-(aD~$7tT>X+UkJ7xkfJ51faunft ze(`V`FRS0lGT z{(`$E;Fem$mUIEuO@3PTcsu8^815=*`vX3DmflE?(2s}uuAyl(Kh8Xh&=+=rM8|M{yu%oHJXZ>FEE^Kp8xDJN)-ocOEf>u04 zaZM73sjCkS8IxPnjs8ZEt*>uwfM(gt%dGGN%_$}_rtvup@TIG=Xp-evE}idBH~P=k zblz7;_OR(zzW>=U5eK#OV=>1=KWx4~NeCPSGR}ED60MQtm)OZutgJ}vdC*oOjl_c5 zghhBPkSYI3E0fgk%?R|8dnL3(XxeN2E4M_tSq6IB-o?S(!E4a*8feOrN~)o^3uhAP zJLEZh-dLuI4fa=zr>cuv%}Y`6bY?T?ZZZslgrEW)0P}*B8Ee*lrlO>it)RuCoK{K^ zlQedwAiQt}U2sqqSG<^5lI(NG`IPD@5LTC84#vy$kRaCANZg%Iw}$Z0Q_|$xE%zW& z;jRKnZV(6sjl7~XhY#1dE1VFp+GlV*$i_FBvxVLiPLt6T@#ovon`&U0daWaSgIaXa zKm>Lw)K=~QPLyuIm%=MZ2IF~s!yl|LLncUAHK%J!d|ru;vW;fizk z!kdzS8s>p_3Vm_D)?~(NU}i-@Y$kgB-M;4Kbuee0yBRtWWji~4-n`l7;m|s@QD=bv z%cbVJ6}lQPTgzI^RLbIM;5?AFrzkZEX&=kvl~w%Yy8G-drz;O^K`+#?q7MX@-BQ*l zsLs*)W*Y7Fs7ZdW+GtRoWAD+RA&QRY1>7h{c8>#G;kIHUu29>((**lRE zpYy%-_6Waj3CuA=zgaP&U9#WSOe(27`-(keG%u%#nem*AZb-Qb&qh@fvosd$zUGQA z_TLW=j)3aYkRuaeZfI>q>VjjaEHv-9aSQa&bJumrhwB9NYP#t}*8{$8wtBRT+}!Hd zqVIxboXzSc5eDSmoG{aNSA5cN>DKTo%Mps_HO8DB)&ZDRTjS_RIfYsHb#b2WkuYal zBKy1)+)tiq6iFV{Q zKy8u_Kl>wswdDEpdkK(Pby*I9?oT8j8tLq{M>5duMRL;XJiAOEP$bu48rm%(;JM2w z;n^8{YueWh(5h*+>C_Xn=C!+#uqIb-ih(kzfl)v$F22 z-GG6qj*u7CM@KOa$BI>f5y2NtvXY_U$FtTagr(iP_GFL@rBHf3m=AG==W2ABoC(dF z-w>Ds8f6gsQD|Q%Ox^$h;pWUQMHj#yAvH-M;`V+TcS>sIxP2Z70KajqaROp{=>+{! zrB7tDne%LogAJ+_sU1HG|3iX<#*7209ouG-0$*Vpb;Ar5eNnM! zi7pc(Yn8%lXUB$Stl_!X;BGJBuk9W2ok6?LkN! zDUleT#R7%kX=DPInm&#-)^@j1PVKUsCDuJ9X{;E8>p3oXc?xm?-Duq!4X?6BU4Lc4 z#okddNKU?naudRoD%j!tXzevm%xo=CUUzA}ls#w&&!E{KTMRQD1o5y4 z-u=1E@cs2!k6jxr@+IknOBnnkJN}?xpZ8Qm5?Dc@g<-k^YWzoErLRMhB&e`1CN1J0 zn|N=hwdQ0>eFiRp8|v7k2ky?>kB(_)BxT%lOT?V~vK^5@WZRKDg008+L8Wm8RXCR& zMZdn^?*7#Zz%XG2?{ZGpWxCqb5Obb|2tM*(mi6wY@*qQpR!cS9yZu@*W`C}Ko)7W`)ydD=}9&NgJ_H07D{-C^T3y)RoQTdjwS20 zHIT>uHD90&{xO+Q=!`|kwn{oj`RdQo13VXJ8M*u5P{3Q6$(e)Ge*9r+J?2UB%*R30Gz+wz6A9xIY6BO;tWx;GA~6B3g<9nM z@3ri{%Gkf)p}Oi#$Fd}>j3#-eMvxRfkU*>c1GMWg(ndT4HdNI}6V_0h(VQHr(R{SF z%JOQ7|8b1nLTXVu03hDfqw~Sxf*%R1jsY*a*iEvv){F;blc#k8AI@|Dt94KB!EjH@ zV)P%%16{^UWca1`x2<&Z2SdJ-PnBUuUUpi>xs4<-nV<46h8Z2;~fQSmrw3kcMqJb^~MVot|>t4DXTr_miU^+L|2j+uNG zuLzR{{uoK`m^evP&dUGT!dC4+S673JWBOp8efm`}vn7ga38{QHY#`Pf?q z+dbql59rav`=&+ODo*-7|3c!qM0NPsHCO+e{mHwH}$c z`bSNw9Q4f;*W7qX+4oBvx}8k&NIyrS&;UTKFk2M=IdE7W zBYdi_kt?iERWf=d)dUcxbxV==9y`1kA$7E_LBq-@{h%IXC{psOFc_1W zUa!ia@$`bEw9^8w`Sx@q?l$3kSK(yqQxmk(SxiG4$YbBOhEfPk)ybAZ8QA*CG8J--ku2U`jCEmdiRRb)-l+yzYINKi2Yk9b5EpeW8VAvGj z$@hlRPhlNSsq=H)9h*IS`c%j8ljFso;1no4Fu+!N3rk4k)wM-!Tp1M(Mb_w$a~jcf z`FoEE?-DsIHgV$j^KDrJt74uG;14H^p(0KP2iO}4ogd?$5b%1U5=?R$Mddqh@9rK{ zKNm#C?0uX^lJxi<$c~+pr)E$Bsxb#fNCtA^c4{h7T5hh1-J69($rcMnc#e;vZhIPO zpj*rHhnzN^RV(L&%BA9(z7jNO?&9&q*lGdYpZ8gOwiSR9=!?kykv;;d*}K407=SK~!V3wzpI_nq z96~~ie z|NZmRDpw2%XGnr2WJ*geXW8(myXQhnzJB{DP6?(xi^w8}{cI&Ga4)5UHcaReh+Jv) zV;HMyXx`r5AKedh7i!HzT@5<}J_C1S@9;r0bd&&J?Pok!h*wS`4+SmOtO)cQZ;M>C z*mN8+LMrYbgJ@l@Igu6XZ6L-mmqz<#D)p*Zd%DzwYDPzUG5 z2~OuysPl=Na5gPg(v})mQt^00(K}#N?}#XThk1il7Cnd!nx;g+Ma$k?^p0}5c_2k# zkwXwsu<%MWszM}s7pXZ7JXS0>mW1Ok;CR(Z6;3#xsi+LIX%_YcL~ev8-?Y7x_UdDR ztVR!_LQabrs6DhE-WcwQvM?Vd9@``v^^CkN?g`t-9Bm}*)YV%UVJ zw9bVL!4~+?5>(kbj32gUE+>R!p9h}6$1+Q@L2yM>UIJ%E-R(r&8)KhUOxxxw8puZp zbCqx6K#EIoWcXD9wx%C>54W~G94c}BpJ08zv12bCE9*X~^E&i)a3$v?)u&RNtfxQM zs7F3~zYin$IV2=$9+irl@sM|PSs3+MB@tuTb?nS83d(zI=R8SV%&(U}7xk>Itgco# zh_)r_{8nJPGU)Cq>)Y&^rcZb$P33NB{dYZ{%YP?Z;S{~4G)HLe_EIORMsi^t4YMV9 z3uhw5-S#;Qa70U#QE^{h+~@~7njNWDV!iRz(weGLDc64fIQF&%=<2!1U5C63Qm-ne zV@@cZ{DHZ=@9+L>gNizK2eftMX;Jcw)YR0f)E+g&%twTOAc~V&wM!{MHAu&1`Rr;z zMi_kSGaPZR={j-%lmxy_k;aSI6=!|0U5@d%?@PF+* zj6u4b4L03g*<)#Nd6d;+1iwv{ZWsvDnK5ZN5GI?UC#v0SMnNZL;UTY$`h=u>PKY_O zw~E4`4g^U=_)*2N8WI}^G`265=p51IdP&K4Hl*`}PkX-R!tb#8&^i8+AsM9vllZfm zejf28gm&^+?81Zl#2^z*u4vLAGkVO*;U6znAxN_9kUir7VrnYLd?!&|_}HC?-$sRmLPU6Ke%K0HgP zB?S%(A7243NkZ(|J`+2;>WkDW$9o+<{{b@aEO`)Grc?a#-IuY;E2CWKj3mKI;$$6> zg-?LhT#~jd>Zd=5w!G(dSW_hJ1jZS7s1MO!58DYlIJ* z#vWi_OZNELgY?<0gFr)ND4f)U#TPjE@$jAdaunQ7ZIZDnlr1qyMXhYI21Uc>okp5Z&qyD!w@ZY4#|KEg)O6&dh-+;<- z0vz+t-`sKzf1dRqJ^iZ|uQ9+k*9=DFg3m@GU$?!`Um0-JIMgJS$3C`cthQD{xWus4(OKHZwAa6joM zRgI%~QVe)MSU|=bU{Lp%*(kzCZndDFeI;pU?F*z~Mxe6+eW8@N+tBH=&cw$?=XIHD zU=QB{v{^a~BDK07>=cGcdjr3Fdzr(r7)y;y0iJQYAd+T^Qw21g z889N6W#ZKn&m$vgOro6YgiRo_sDOml?OEPKYWbcJ0}-cq$P$rP62b*fb`~6g=T+B>eQ*6@YR(Ri;jx1rVRE z&%_jxJVrHW!2ZT*z&(`!!h6>4;shiQia}Q4F`$yjg`D%30{;BGxmBd~FE*UT<2LBY z?}K@KOnZBFO#M#6&X+HGV%mTjpUywBtZU}vA-)=B*tL(LV<_^&g3l}_BU=oz{9d?CkFMCI@PRu!T3q{ z1!E+KE)#_zM-1(5b+9x6%w6I?W_Ys)0orv|zBNNC4!74lwsZkn9VMJA3w{>WhFgOc zqA0W5gLwnJL2$s;Iw~vh`BWM-4rjG%IviU>h^NmKEaGu5gOzb`<%~T{a4S6on+A=^ zNb>tIx4pEct=)2kMnOo9?@@~Zt1qC8-D$eWje}}OdY}r$QIpWU75*yy+4HIam@lSj z`erLdy&*XOv_~(v2bND@nqhLx9|D0l8eVk(gelcuYOeunlIfQ?$}-{wDJxWW;~Eq3 zWs!YW?A%Ae`oO@=K5Ne-aJp(JXO?r83^lWRF-TOs+~#?ZaRTxxHKwh0*w>4z_spMt zE~bj6k5BtYd|^4H?I6-Na_UHuB!HS#zzS%jZMS+uUBy;qZTol~WpIe217a z21_zbDu|WI8bhBDQP;xaPAj++VU>656UpKBW{V*9I5a#wb?;2d&xWIn0;#*ewlRnJO1j+kmU8;h4def7`e5y@E zMB{QYjfv(rmY>(jIDT5eiycdcg2trVdl1o}wQCYfs>^#Y@uj)k9LL7bZ{;cVOuV_| z^$swy2M(biXZ=qQLqIV+Qx}U-&Dw3gbSO`^SKV?fIiEJnrU%Nm(FO%5Pd_G$BEhb& z2SQ+I@`tXO0gTqE4c z{q2*$M-lH+;3oxXK#$XG{+G!^DX)OV>P+m%4^W{r%gf8N4=P{O=iF<=gOKjRln{tF zJ|n!abce+?);~F|R>Q=ZgXLqp<<>?KAZY%+2O9j#!1sDvozKgj-Q4rMDR}lKuPbjR zJiE;B_DTpn+fRSQTs#0+@7<{@L4K#os71>Ogwf_q#D-)X9jjkW6-OaRemIN;k-#~o zqd)yIr1oE)m#R&=znRg|D+eY3mL<}Ms{zULMv%|auP69s8RHjZ*-SmG_&3?fg+!7? zs+IYBZ`OcxlvEiwN@wcFB@Rw&xmZ{1*nsa)-~>$aei$KdvC_d9WkoQfcYi40((W!A7iwEX?X!>O^3_5aeyslJ z8JaB)_rXc)^~YkGF1G#+TSLk|$>G3RVi%6_(aLIoXJl}2!aVK}77+k?mf;8v5x>x; zCvXnk1hNEhoNB)JE6t%_+VoaYMChrOT|v@Ccs*%PQ1~;SiJnD&{y0r|#HB+&^2_g` zSQoye0z<@Q^}W`&PwYWSj9BMuePXtVi0C+fnQ!<3IILSKF$rG)8R@yFW&tMBvhJRi zTn6!>C(j19aeOWQkBNfN0k6rpaK|SHgF<9*mN&t4ZTpbZkI*fV`Ru*R$oCRemr=?e z2E`q!x|YVs5xtChp>k?vaAV!h?@b+!#Pu{Xmw8^N-qj9Zw?^@-wxQ$SWP zZ(9RN(2_eT4=`P;%1+Tx;<{u_1|kJqftNMrw2u z9yHu=3~s~r+XA~Mz)w*-ignmz78vH5yU~xeU+W)ij8CQDDZPLh+$~-z9cV1aV}!d5 zRalqlS;oda@@IfsY=?P?R(uXPt9Y(R*aZC7W#Mp!6Wh+1F?q5Fa%`_Mc|IbN_gU2> za$-qzDdLpwHlKWbO?mX++(T0qHR><}Q*duWAt5nvdUrgG1YZeJ=p( zVjCo6T>nD|@%d6g2^x;dIH(y`U$dV~6)ECYVVUnZSxRB|W0)>_p_^5g0b=xr?jtgB zOQIQ=Zl;Q2@X;(Y4qZsp^QbZ|0ADgaCRm!=gkUzEwax3~)S%s~j%Fx)VZvM}VU|~I zf?UQ{r@71D3vD`jMc{7khRP4(7<^je zQRa}~ndph_Mg@b=kZXf@VmXY9CDOHqSBVxR&7LU#k1!Oxf!{o-dYn)G#~`jMZn+;g zyeeT55&y$HEDctr0Q#a3>LK71(}szK%fwheo?d}J_yC}(2=*uZNtgq{{lm}rGB0z) zZ?K%0U+u-?eIY)bSi~6YXhF->#4$^ouM!UPhf5%5_w(66UkkvcZCleLpQ)l%rBiS- zWc2U5NDfvX?mumh=0)aOnS;K?hpq>}NFys$0T?`XTlod^8$EW%HRNW{BfAQ+ybQ() zETzg}0N(;Ybn!(9mZYM4g%)-zzi~e(0RnWo9b&A=$GEb_A10f;Ur4cro+59W0C5#G zOUyWz&i&W4*xUpu58a`tAJiqT!q@a%{zyTl}8u7xVhl_SBLk6+ z%wMF;q~SI#J6S=Q-FbYw`i4VVH>WBxL#ZoXzHE~7)po2DF-8%OQ^n45pRJTeh6 zW0Wid5j}*O&Hwx$yRxo9!f_WGUcvj4)!~ld zYs=hQU(zCKT=h#|vGHoBf#6*wI3&BG{y#xTevEK!Y#h(97P7IlAU3@}Qrp;T5N7k`4OyvW zskcyZcu5Q%$|A6#GS>QshGNs8NOVaGsCm5F<@qCg_zMV6@6-sJ6!iNj%! zl!b=p$A!8?OgdtH4Bm*h?W;ZnW)H-5_5nPS>f#YT(0Xejq8bi`yg!@s_|T zctIpM9OBa1V`F>2A$&3aMwwa*lttq_8PZ)?pGI1!KwfLYKqRAPAM{czAFn5?n#YZ4 z3f340NdjcQjmvohe6FC4oPH^#TvttOCq~}JQdFCHW|N?7RuEKhf$5t6bMbN@S~~L+ z7GZDCi(Z*1N-?im97Jm@`)%?_dz;7FeNhK?$n_%g&RLDW*HGxpIlbM_Fg!GQ!W1tdMD$KL(L^>U14=^k zo}YpC;A2JClP`Z@`f!usXxz)#u*cjEzF5GhuIc|ThR{m6)_1O8Z z0~?^%Iw`sh!p9L7g?-Nbi}~XO{JhB zoT6H-OeO;869l^?nM+EAyMmG-JyZr)zQXZ2p1oInHaUNgvX2NIC<152u~vUl9d<5J z8;nf2L-%R-{w@|%*kZ{byG!}ISdKbzC2uF3O3F3lG`$d_7Xj`3F6RHN%RNzSrYdl3 zLIYHNYOIq<>t#u5bP(F216`94&6IO-)6qkd6IB*m_djUkQ}R!ELxHlx|BpwVIDmUc zv(N^JSUnu{HPU6h9Y(`JY~+IIzb*vsk} zz@uU;*nopL9o|fTH!O+G%35^`cz}rf<|iuau7eiN#ywC|I)CJ8>_I0<;8>x(>)cO? zd9v?771INMChi3$z-=WffLp7l&Y%DO`C?PUJBv^ z2JC{%YmRJWIZ|-ZLdUvITmRgqK1r43ohM2)#GmN_ck53DmMCX-@_5aedVT$)gfAj* zZWtLEsaRXzZuuML@=j#p{j;3!9!~=r-zzARz+91$y_Cd1JrsEf*lB05W z{9pX_R6&ESn8ioulSQ9Z4k$i79Lm>Yv*W#{Jf{NB#*icb+0U43oacDa9{@ZIiNVv= K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (2) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (2) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (2).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (2).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/.gitbook/assets/image (1) (1) (1).png b/docs/gitbook/.gitbook/assets/image (1) (1) (1).png deleted file mode 100644 index 82bc2ac7e3929d94826db89b05e105be49ce516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18739 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 K&t;ucLK6U7cus); diff --git a/docs/gitbook/README (1).md b/docs/gitbook/README (1).md index 5b4a2f5fb5..6418dc6fc1 100644 --- a/docs/gitbook/README (1).md +++ b/docs/gitbook/README (1).md @@ -73,7 +73,7 @@ worker.on('failed', (job, err) => { There are many other events available, check the [Guide](guide/events.md) or the [API reference](https://api.docs.bullmq.io/) for more information. {% endhint %} -Sometimes you need to listen to all the workers events in a given place, for this you need to use a special class [`QueueEvents`](https://api.docs.bullmq.io/classes/QueueEvents.html): +Sometimes you need to listen to all the workers events in a given place, for this you need to use a special class [`QueueEvents`](https://api.docs.bullmq.io/classes/v4.QueueEvents.html): ```typescript import { QueueEvents } from 'bullmq'; diff --git a/docs/gitbook/bull-3.x-migration/compatibility-class.md b/docs/gitbook/bull-3.x-migration/compatibility-class.md index 58d2f2d8efa3447527ff4ff14ca031c3fd869b80..7e5b3c4ab0c583c0fa841a8a7677232fee2d91ed 100644 GIT binary patch delta 7 Ocmcc1bCYL7BpUz?j{@ER delta 12 Tcmcb~bC+jBBpVAC0~Z$n95(|1 diff --git a/docs/gitbook/guide/architecture.md b/docs/gitbook/guide/architecture.md index 7843fd721c..a7b9fea3c8 100644 --- a/docs/gitbook/guide/architecture.md +++ b/docs/gitbook/guide/architecture.md @@ -6,7 +6,7 @@ description: >- # Architecture -In order to use the full potential of Bull queues, it is important to understand the lifecycle of a job. From the moment a producer calls the [`add`](https://api.docs.bullmq.io/classes/Queue.html#add) method on a queue instance, a job enters a lifecycle where it will be in different states, until its completion or failure (although technically a failed job could be retried and get a new lifecycle). +In order to use the full potential of Bull queues, it is important to understand the lifecycle of a job. From the moment a producer calls the [`add`](https://api.docs.bullmq.io/classes/v4.Queue.html#add) method on a queue instance, a job enters a lifecycle where it will be in different states, until its completion or failure (although technically a failed job could be retried and get a new lifecycle).

Lifecycle of a job - Queue

@@ -18,7 +18,7 @@ Note that priorities go from 0 to 2^21, where 0 is the highest priority, this fo The next state for a job is the **“active”** state. The active state is represented by a set, and are jobs that are currently being processed, i.e. they are running in the `process` function explained in the previous chapter. A job can be in the active state for an unlimited amount of time until the process is completed or an exception is thrown so that the job will end in either the **“completed”** or the **“failed”** status. -Another way to add a job is by the [`add`](https://api.docs.bullmq.io/classes/FlowProducer.html#add) method on a flow producer instance. +Another way to add a job is by the [`add`](https://api.docs.bullmq.io/classes/v4.FlowProducer.html#add) method on a flow producer instance.

Lifecycle of a job - Flow Producer

diff --git a/docs/gitbook/guide/events.md b/docs/gitbook/guide/events.md index 492cf20e91..7276675c08 100644 --- a/docs/gitbook/guide/events.md +++ b/docs/gitbook/guide/events.md @@ -89,7 +89,7 @@ await queue.trimEvents(10) # left 10 events ## Read more: -- 💡 [Queue Events API Reference](https://api.docs.bullmq.io/classes/QueueEvents.html) -- 💡 [Queue Events Listener API Reference](https://api.docs.bullmq.io/interfaces/QueueEventsListener.html) -- 💡 [Queue Listener API Reference](https://api.docs.bullmq.io/interfaces/QueueListener.html) -- 💡 [Worker Listener API Reference](https://api.docs.bullmq.io/interfaces/WorkerListener.html) +- 💡 [Queue Events API Reference](https://api.docs.bullmq.io/classes/v4.QueueEvents.html) +- 💡 [Queue Events Listener API Reference](https://api.docs.bullmq.io/interfaces/v4.QueueEventsListener.html) +- 💡 [Queue Listener API Reference](https://api.docs.bullmq.io/interfaces/v4.QueueListener.html) +- 💡 [Worker Listener API Reference](https://api.docs.bullmq.io/interfaces/v4.WorkerListener.html) diff --git a/docs/gitbook/guide/flows/README.md b/docs/gitbook/guide/flows/README.md index b1708bc0b5..5649b94e95 100644 --- a/docs/gitbook/guide/flows/README.md +++ b/docs/gitbook/guide/flows/README.md @@ -12,7 +12,7 @@ This functionality enables the creation of flows where jobs are the node of tree Flows are added to a queue using the "_FlowProducer_" class. {% endhint %} -In order to create "flows" you must use the [FlowProducer](https://api.docs.bullmq.io/classes/FlowProducer.html) class. The method [_**add**_](https://api.docs.bullmq.io/classes/FlowProducer.html#add) accepts an object with the following interface: +In order to create "flows" you must use the [FlowProducer](https://api.docs.bullmq.io/classes/v4.FlowProducer.html) class. The method [_**add**_](https://api.docs.bullmq.io/classes/v4.FlowProducer.html#add) accepts an object with the following interface: ```typescript interface FlowJob { @@ -199,5 +199,5 @@ await queue.remove(job.id); ## Read more: - 📋 [Divide large jobs using flows](https://blog.taskforce.sh/splitting-heavy-jobs-using-bullmq-flows/) -- 💡 [FlowProducer API Reference](https://api.docs.bullmq.io/classes/FlowProducer.html) -- 💡 [Job API Reference](https://api.docs.bullmq.io/classes/Job.html) +- 💡 [FlowProducer API Reference](https://api.docs.bullmq.io/classes/v4.FlowProducer.html) +- 💡 [Job API Reference](https://api.docs.bullmq.io/classes/v4.Job.html) diff --git a/docs/gitbook/guide/flows/adding-bulks.md b/docs/gitbook/guide/flows/adding-bulks.md index 592eca10e2..3f897fd234 100644 --- a/docs/gitbook/guide/flows/adding-bulks.md +++ b/docs/gitbook/guide/flows/adding-bulks.md @@ -39,4 +39,4 @@ This call can only succeed or fail, and all or none of the jobs will be added. ## Read more: -- 💡 [Add Bulk API Reference](https://api.docs.bullmq.io/classes/FlowProducer.html#addBulk) +- 💡 [Add Bulk API Reference](https://api.docs.bullmq.io/classes/v4.FlowProducer.html#addBulk) diff --git a/docs/gitbook/guide/flows/fail-parent.md b/docs/gitbook/guide/flows/fail-parent.md index 670eb60804..17bc4cd46b 100644 --- a/docs/gitbook/guide/flows/fail-parent.md +++ b/docs/gitbook/guide/flows/fail-parent.md @@ -46,4 +46,4 @@ As soon as a _child_ with this option fails, the parent job will be moved to fai ## Read more: -- 💡 [Add Flow API Reference](https://api.docs.bullmq.io/classes/FlowProducer.html#add) +- 💡 [Add Flow API Reference](https://api.docs.bullmq.io/classes/v4.FlowProducer.html#add) diff --git a/docs/gitbook/guide/flows/get-flow-tree.md b/docs/gitbook/guide/flows/get-flow-tree.md index 703ec50668..c310be27b1 100644 --- a/docs/gitbook/guide/flows/get-flow-tree.md +++ b/docs/gitbook/guide/flows/get-flow-tree.md @@ -2,7 +2,7 @@ In some situations, you need to get a job and all of its children, grandchildren and so on. -The pattern to solve this requirement consists on using [getFlow](https://api.docs.bullmq.io/classes/FlowProducer.html#getFlow) method. +The pattern to solve this requirement consists on using [getFlow](https://api.docs.bullmq.io/classes/v4.FlowProducer.html#getFlow) method. ```typescript const flow = new FlowProducer({ connection }); diff --git a/docs/gitbook/guide/introduction.md b/docs/gitbook/guide/introduction.md index 16b04f5c86..8f90597a00 100644 --- a/docs/gitbook/guide/introduction.md +++ b/docs/gitbook/guide/introduction.md @@ -1,6 +1,6 @@ # Introduction -BullMQ is based in 4 classes that together can be used to resolve many different problems. These classes are [_**Queue**_](https://api.docs.bullmq.io/classes/Queue.html), [_**Worker**_](https://api.docs.bullmq.io/classes/Worker.html), [_**QueueEvents**_](https://api.docs.bullmq.io/classes/QueueEvents.html) and [_**FlowProducer**_](https://api.docs.bullmq.io/classes/FlowProducer.html). +BullMQ is based in 4 classes that together can be used to resolve many different problems. These classes are [_**Queue**_](https://api.docs.bullmq.io/classes/v4.Queue.html), [_**Worker**_](https://api.docs.bullmq.io/classes/v4.Worker.html), [_**QueueEvents**_](https://api.docs.bullmq.io/classes/v4.QueueEvents.html) and [_**FlowProducer**_](https://api.docs.bullmq.io/classes/v4.FlowProducer.html). The first class you should know about is the _Queue_ class. This class represents a queue and can be used for adding _**jobs**_ to the queue as well as some other basic manipulation such as pausing, cleaning or getting data from the queue. diff --git a/docs/gitbook/guide/jobs/README.md b/docs/gitbook/guide/jobs/README.md index b2c858ad32..a0dd1a1ed5 100644 --- a/docs/gitbook/guide/jobs/README.md +++ b/docs/gitbook/guide/jobs/README.md @@ -6,4 +6,4 @@ An important thing to consider is that you can mix the different job types in th ## Read more: -- 💡 [Job API Reference](https://api.docs.bullmq.io/classes/Job.html) +- 💡 [Job API Reference](https://api.docs.bullmq.io/classes/v4.Job.html) diff --git a/docs/gitbook/guide/jobs/delayed.md b/docs/gitbook/guide/jobs/delayed.md index e43beea0d3..5d32a73300 100644 --- a/docs/gitbook/guide/jobs/delayed.md +++ b/docs/gitbook/guide/jobs/delayed.md @@ -42,4 +42,4 @@ Take in count that your job must be into delayed state when you change the delay ## Read more: -- 💡 [Change Delay API Reference](https://api.docs.bullmq.io/classes/Job.html#changeDelay) +- 💡 [Change Delay API Reference](https://api.docs.bullmq.io/classes/v4.Job.html#changeDelay) diff --git a/docs/gitbook/guide/jobs/getters.md b/docs/gitbook/guide/jobs/getters.md index 5c6c1b35ec..c07914ceeb 100644 --- a/docs/gitbook/guide/jobs/getters.md +++ b/docs/gitbook/guide/jobs/getters.md @@ -18,7 +18,7 @@ const counts = await myQueue.getJobCounts('wait', 'completed', 'failed'); // Returns an object like this { wait: number, completed: number, failed: number } ``` -The available status are: _completed, failed, delayed, active, wait, paused_ and _repeat._ +The available status are: _completed, failed, delayed, active, wait, waiting-children, prioritized, _paused_ and _repeat._ #### Get Jobs @@ -32,5 +32,5 @@ const completed = await myQueue.getJobs(['completed'], 0, 100, true); ## Read more: -* 💡 [Get Job Counts API Reference](https://api.docs.bullmq.io/classes/Queue.html#getJobCounts) -* 💡 [Get Jobs API Reference](https://api.docs.bullmq.io/classes/Queue.html#getJobs) +* 💡 [Get Job Counts API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html#getJobCounts) +* 💡 [Get Jobs API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html#getJobs) diff --git a/docs/gitbook/guide/jobs/job-data.md b/docs/gitbook/guide/jobs/job-data.md index daef01e4ec..4f5739694c 100644 --- a/docs/gitbook/guide/jobs/job-data.md +++ b/docs/gitbook/guide/jobs/job-data.md @@ -69,4 +69,4 @@ job.data # { color: 'blue' } ## Read more: -- 💡 [Update API Reference](https://api.docs.bullmq.io/classes/Job.html#updateData) +- 💡 [Update API Reference](https://api.docs.bullmq.io/classes/v4.Job.html#updateData) diff --git a/docs/gitbook/guide/jobs/job-ids.md b/docs/gitbook/guide/jobs/job-ids.md index 3213b0584c..d283036253 100644 --- a/docs/gitbook/guide/jobs/job-ids.md +++ b/docs/gitbook/guide/jobs/job-ids.md @@ -24,4 +24,4 @@ await myQueue.add( ## Read more: -- 💡 [Duplicated Event Reference](https://api.docs.bullmq.io/interfaces/QueueEventsListener.html#duplicated) +- 💡 [Duplicated Event Reference](https://api.docs.bullmq.io/interfaces/v4.QueueEventsListener.html#duplicated) diff --git a/docs/gitbook/guide/jobs/prioritized.md b/docs/gitbook/guide/jobs/prioritized.md index f7fd06fdd5..9e148b3394 100644 --- a/docs/gitbook/guide/jobs/prioritized.md +++ b/docs/gitbook/guide/jobs/prioritized.md @@ -49,4 +49,4 @@ await job.changePriority({ ## Read more: -- 💡 [Change Priority API Reference](https://api.docs.bullmq.io/classes/Job.html#changePriority) +- 💡 [Change Priority API Reference](https://api.docs.bullmq.io/classes/v4.Job.html#changePriority) diff --git a/docs/gitbook/guide/jobs/removing-job.md b/docs/gitbook/guide/jobs/removing-job.md index 3b570bdf7e..4e36f87295 100644 --- a/docs/gitbook/guide/jobs/removing-job.md +++ b/docs/gitbook/guide/jobs/removing-job.md @@ -53,4 +53,4 @@ In case one of the children is locked, it will stop the deletion process. ### Read more: -* 💡 [Remove API Reference](https://api.docs.bullmq.io/classes/Job.html#remove) +* 💡 [Remove API Reference](https://api.docs.bullmq.io/classes/v4.Job.html#remove) diff --git a/docs/gitbook/guide/jobs/repeatable.md b/docs/gitbook/guide/jobs/repeatable.md index 5a55119c24..1dfbf8de16 100644 --- a/docs/gitbook/guide/jobs/repeatable.md +++ b/docs/gitbook/guide/jobs/repeatable.md @@ -2,7 +2,7 @@ There is a special type of _meta_ job called **repeatable**. These jobs are spec Adding a job with the `repeat` option set will actually do two things immediately: create a Repeatable Job configuration, and schedule a regular delayed job for the job's first run. This first run will be scheduled "on the hour", that is if you create a job that repeats every 15 minutes at 4:07, the job will first run at 4:15, then 4:30, and so on. -The Repeatable Job configuration is not a job, so it will not show up in methods like `getJobs()`. To manage Repeatable Job configurations, use [`getRepeatableJobs()`](https://api.docs.bullmq.io/classes/Queue.html#getRepeatableJobs) and similar. This also means repeated jobs do **not** participate in evaluating `jobId` uniqueness - that is, a non-repeatable job can have the same `jobId` as a Repeatable Job configuration, and two Repeatable Job configurations can have the same `jobId` as long as they have different repeat options. +The Repeatable Job configuration is not a job, so it will not show up in methods like `getJobs()`. To manage Repeatable Job configurations, use [`getRepeatableJobs()`](https://api.docs.bullmq.io/classes/v4.Queue.html#getRepeatableJobs) and similar. This also means repeated jobs do **not** participate in evaluating `jobId` uniqueness - that is, a non-repeatable job can have the same `jobId` as a Repeatable Job configuration, and two Repeatable Job configurations can have the same `jobId` as long as they have different repeat options. Every time a repeatable job is picked up for processing, the next repeatable job is added to the queue with a proper delay. Repeatable jobs are thus nothing more than delayed jobs that are added to the queue according to some settings. @@ -50,9 +50,9 @@ There are some important considerations regarding repeatable jobs: - Bull is smart enough not to add the same repeatable job if the repeat options are the same. - If there are no workers running, repeatable jobs will not accumulate next time a worker is online. -- repeatable jobs can be removed using the [removeRepeatable](https://api.docs.bullmq.io/classes/Queue.html#removeRepeatable) method or [removeRepeatableByKey](https://api.docs.bullmq.io/classes/Queue.html#removeRepeatableByKey). +- repeatable jobs can be removed using the [removeRepeatable](https://api.docs.bullmq.io/classes/v4.Queue.html#removeRepeatable) method or [removeRepeatableByKey](https://api.docs.bullmq.io/classes/v4.Queue.html#removeRepeatableByKey). -All repeatable jobs have a repeatable job key that holds some metadata of the repeatable job itself. It is possible to retrieve all the current repeatable jobs in the queue calling [getRepeatableJobs](https://api.docs.bullmq.io/classes/Queue.html#getRepeatableJobs): +All repeatable jobs have a repeatable job key that holds some metadata of the repeatable job itself. It is possible to retrieve all the current repeatable jobs in the queue calling [getRepeatableJobs](https://api.docs.bullmq.io/classes/v4.Queue.html#getRepeatableJobs): ```typescript import { Queue } from 'bullmq'; @@ -177,4 +177,4 @@ Repeat strategy function receives an optional jobName parameter as the 3rd one. ## Read more: -- 💡 [Repeat Strategy API Reference](https://api.docs.bullmq.io/types/RepeatStrategy.html) +- 💡 [Repeat Strategy API Reference](https://api.docs.bullmq.io/types/v4.RepeatStrategy.html) diff --git a/docs/gitbook/guide/jobs/stalled.md b/docs/gitbook/guide/jobs/stalled.md index de078751ef..97587c40cb 100644 --- a/docs/gitbook/guide/jobs/stalled.md +++ b/docs/gitbook/guide/jobs/stalled.md @@ -38,4 +38,4 @@ export default = (job) => { ## Read more: -* 💡 [Queue Scheduler API Reference](https://github.com/taskforcesh/bullmq/blob/v1.91.1/docs/gitbook/api/bullmq.queuescheduler.md) +* 💡 [Queue Scheduler API Reference](https://api.docs.bullmq.io/classes/v1.QueueScheduler.html) diff --git a/docs/gitbook/guide/queues/README.md b/docs/gitbook/guide/queues/README.md index 2e41f163e2..385e3f08fd 100644 --- a/docs/gitbook/guide/queues/README.md +++ b/docs/gitbook/guide/queues/README.md @@ -14,7 +14,7 @@ See [Connections](../connections.md) for details on how to pass Redis details to When you instance a Queue, BullMQ will just _upsert_ a small "meta-key", so if the queue existed before it will just pick it up and you can continue adding jobs to it. -The most important method is probably the [_**add**_](https://api.docs.bullmq.io/classes/Queue.html#add) method. This method allows you to add jobs to the queue in different fashions: +The most important method is probably the [_**add**_](https://api.docs.bullmq.io/classes/v4.Queue.html#add) method. This method allows you to add jobs to the queue in different fashions: ```typescript await queue.add('paint', { color: 'red' }); @@ -42,4 +42,4 @@ There are many other options available such as priorities, backoff settings, lif ## Read more: -* 💡 [Queue API Reference](https://api.docs.bullmq.io/classes/Queue.html) +* 💡 [Queue API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html) diff --git a/docs/gitbook/guide/queues/adding-bulks.md b/docs/gitbook/guide/queues/adding-bulks.md index fbcfea6328..dd4ce72844 100644 --- a/docs/gitbook/guide/queues/adding-bulks.md +++ b/docs/gitbook/guide/queues/adding-bulks.md @@ -18,4 +18,4 @@ This call can only succeed or fail, and all or none of the jobs will be added. ## Read more: -- 💡 [Add Bulk API Reference](https://api.docs.bullmq.io/classes/Queue.html#addBulk) +- 💡 [Add Bulk API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html#addBulk) diff --git a/docs/gitbook/guide/queues/auto-removal-of-jobs.md b/docs/gitbook/guide/queues/auto-removal-of-jobs.md index 7451f488d0..6d67432d88 100644 --- a/docs/gitbook/guide/queues/auto-removal-of-jobs.md +++ b/docs/gitbook/guide/queues/auto-removal-of-jobs.md @@ -40,7 +40,7 @@ new Worker('test', async job => {}, { ### Keep jobs based on their age -Another possibility is to keep jobs up to a certain age. The "removeOn" option accepts a "[KeepJobs](https://api.docs.bullmq.io/interfaces/KeepJobs.html)" object, that includes an "age" and a "count" fields. The age is used to specify how old jobs to keep (in seconds), and the count can be used to limit the total amount to keep. The count option is useful in cases we get an unexpected amount of jobs in a very short time, in this case we may just want to limit to a certain amount to avoid running out of memory. +Another possibility is to keep jobs up to a certain age. The "removeOn" option accepts a "[KeepJobs](https://api.docs.bullmq.io/interfaces/v4.KeepJobs.html)" object, that includes an "age" and a "count" fields. The age is used to specify how old jobs to keep (in seconds), and the count can be used to limit the total amount to keep. The count option is useful in cases we get an unexpected amount of jobs in a very short time, in this case we may just want to limit to a certain amount to avoid running out of memory. ```typescript await myQueue.add( @@ -83,4 +83,4 @@ One of the strategies to implement idempotence with BullMQ is to use unique job ## Read more: -- 💡 [Duplicated Event Reference](https://api.docs.bullmq.io/interfaces/QueueEventsListener.html#duplicated) +- 💡 [Duplicated Event Reference](https://api.docs.bullmq.io/interfaces/v4.QueueEventsListener.html#duplicated) diff --git a/docs/gitbook/guide/queues/removing-jobs.md b/docs/gitbook/guide/queues/removing-jobs.md index 2e551a94b5..6421cfce9c 100644 --- a/docs/gitbook/guide/queues/removing-jobs.md +++ b/docs/gitbook/guide/queues/removing-jobs.md @@ -56,6 +56,6 @@ have pending children in other queues, or just moved to wait. ## Read more: -- 💡 [Drain API Reference](https://api.docs.bullmq.io/classes/Queue.html#drain) -- 💡 [Clean API Reference](https://api.docs.bullmq.io/classes/Queue.html#clean) -- 💡 [Obliterate API Reference](https://api.docs.bullmq.io/classes/Queue.html#obliterate) +- 💡 [Drain API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html#drain) +- 💡 [Clean API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html#clean) +- 💡 [Obliterate API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html#obliterate) diff --git a/docs/gitbook/guide/queuescheduler.md b/docs/gitbook/guide/queuescheduler.md index c41df90bed..b2d6d3aff9 100644 --- a/docs/gitbook/guide/queuescheduler.md +++ b/docs/gitbook/guide/queuescheduler.md @@ -29,4 +29,4 @@ It is ok to have as many QueueScheduler instances as you want, just keep in mind ## Read more: -* 💡 [Queue Scheduler API Reference](https://github.com/taskforcesh/bullmq/blob/v1.91.1/docs/gitbook/api/bullmq.queuescheduler.md) +* 💡 [Queue Scheduler API Reference](https://api.docs.bullmq.io/classes/v1.QueueScheduler.html) diff --git a/docs/gitbook/guide/rate-limiting.md b/docs/gitbook/guide/rate-limiting.md index 0f291a6d63..5bdb0b92db 100644 --- a/docs/gitbook/guide/rate-limiting.md +++ b/docs/gitbook/guide/rate-limiting.md @@ -86,4 +86,4 @@ const worker = new Worker( ## Read more: -- 💡 [Rate Limit API Reference](https://api.docs.bullmq.io/classes/Worker.html#rateLimit) +- 💡 [Rate Limit API Reference](https://api.docs.bullmq.io/classes/v4.Worker.html#rateLimit) diff --git a/docs/gitbook/guide/retrying-failing-jobs.md b/docs/gitbook/guide/retrying-failing-jobs.md index bd80c3a910..3894595edd 100644 --- a/docs/gitbook/guide/retrying-failing-jobs.md +++ b/docs/gitbook/guide/retrying-failing-jobs.md @@ -15,7 +15,7 @@ In general, as a best practice, it is better to always throw Error objects. Ther When a processor throws an exception, the worker will catch it and move the job to the failed set. Depending on your [Queue settings](https://docs.bullmq.io/guide/queues/auto-removal-of-jobs), the job may stay in the failed set forever, or it could be automatically removed. -Often it is desirable to automatically retry failed jobs so that we do not give up until a certain amount of retries have failed. In order to activate automatic job retries you should use the [attempts](https://api.docs.bullmq.io/interfaces/BaseJobOptions.html#attempts) setting with a value larger than 1 (see the examples below). +Often it is desirable to automatically retry failed jobs so that we do not give up until a certain amount of retries have failed. In order to activate automatic job retries you should use the [attempts](https://api.docs.bullmq.io/interfaces/v4.BaseJobOptions.html#attempts) setting with a value larger than 1 (see the examples below). BullMQ supports retries of failed jobs using back-off functions. It is possible to use the **built-in** backoff functions or provide **custom** ones. If you do not specify a back-off function, the jobs will be retried without delay as soon as they fail. diff --git a/docs/gitbook/guide/workers/README.md b/docs/gitbook/guide/workers/README.md index a54b61b0d7..84d9ad387f 100644 --- a/docs/gitbook/guide/workers/README.md +++ b/docs/gitbook/guide/workers/README.md @@ -119,5 +119,5 @@ const worker = new Worker(queueName, async (job: Job) => {}); ## Read more: -* 💡 [Worker API Reference](https://api.docs.bullmq.io/classes/Worker.html) -* 💡 [Queue Events API Reference](https://api.docs.bullmq.io/classes/QueueEvents.html) +* 💡 [Worker API Reference](https://api.docs.bullmq.io/classes/v4.Worker.html) +* 💡 [Queue Events API Reference](https://api.docs.bullmq.io/classes/v4.QueueEvents.html) diff --git a/docs/gitbook/guide/workers/graceful-shutdown.md b/docs/gitbook/guide/workers/graceful-shutdown.md index 98b9d57446..1c02731f89 100644 --- a/docs/gitbook/guide/workers/graceful-shutdown.md +++ b/docs/gitbook/guide/workers/graceful-shutdown.md @@ -16,4 +16,5 @@ In order to perform a shutdown just call the _**close**_ method: await worker.close(); ``` -The above call will mark the worker as _closing_ so it will not pick up new jobs, at the same time it will wait for all the current jobs to be processed \(or failed\). This call will not timeout by itself, so you should make sure that your jobs finalize in a timely manner. If this call fails for some reason or it is not able to complete, the pending jobs will be marked as stalled and processed by other workers \(if correct stalled options are configured on the [QueueScheduler](https://api.docs.bullmq.io/interfaces/QueueSchedulerOptions.html)\). +The above call will mark the worker as _closing_ so it will not pick up new jobs, at the same time it will wait for all the current jobs to be processed \(or failed\). This call will not timeout by itself, so you should make sure that your jobs finalize in a timely manner. If this call fails for some reason or it is not able to complete, the pending jobs will be marked as stalled and processed by other workers \(if correct stalled options are configured on the [QueueScheduler](https://api.docs.bullmq.io/interfaces/v1.QueueSchedulerOptions.html)\). + diff --git a/docs/gitbook/guide/workers/pausing-queues.md b/docs/gitbook/guide/workers/pausing-queues.md index bc0e0754c0..49e6ee9a84 100644 --- a/docs/gitbook/guide/workers/pausing-queues.md +++ b/docs/gitbook/guide/workers/pausing-queues.md @@ -2,7 +2,7 @@ BullMQ supports pausing queues globally or locally. A queue is paused globally when no workers will pick up any jobs from the queue. When you pause a queue, the workers that are currently busy processing a job, will continue working on that job until it completes (or failed), and then will just keep idling until the queue has been unpaused. -Pausing a queue is performed by calling the _**pause**_ method on a [queue](https://api.docs.bullmq.io/classes/Queue.html) instance: +Pausing a queue is performed by calling the _**pause**_ method on a [queue](https://api.docs.bullmq.io/classes/v4.Queue.html) instance: ```typescript await myQueue.pause(); @@ -22,5 +22,5 @@ await myWorker.pause(true); ## Read more: -- 💡 [Pause Queue API Reference](https://api.docs.bullmq.io/classes/Queue.html#pause) -- 💡 [Pause Worker API Reference](https://api.docs.bullmq.io/classes/Worker.html#pause) +- 💡 [Pause Queue API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html#pause) +- 💡 [Pause Worker API Reference](https://api.docs.bullmq.io/classes/v4.Worker.html#pause) diff --git a/docs/gitbook/patterns/adding-bulks.md b/docs/gitbook/patterns/adding-bulks.md index 25428ed95c..3d0d70fd8f 100644 --- a/docs/gitbook/patterns/adding-bulks.md +++ b/docs/gitbook/patterns/adding-bulks.md @@ -2,7 +2,7 @@ Sometimes it is necessary to add a complete bulk of jobs from different queues atomically. For example, there could be a requirement that all the jobs must be created or none of them. Also, adding a bulk of jobs can be faster since it reduces the number of roundtrips to Redis: -You may be thinking on [queue.addBulk](https://api.docs.bullmq.io/classes/Queue.html#addBulk), but this method only adds jobs from a single queue. Another option is [flowProducer.addBulk](https://api.docs.bullmq.io/classes/FlowProducer.html#addBulk), so let's see an example: +You may be thinking on [queue.addBulk](https://api.docs.bullmq.io/classes/v4.Queue.html#addBulk), but this method only adds jobs from a single queue. Another option is [flowProducer.addBulk](https://api.docs.bullmq.io/classes/v4.FlowProducer.html#addBulk), so let's see an example: ```typescript import { FlowProducer } from 'bullmq'; @@ -29,4 +29,4 @@ This call can only succeed or fail, and all or none of the jobs will be added. ## Read more: -- 💡 [Add Bulk API Reference](https://api.docs.bullmq.io/classes/FlowProducer.html#addBulk) +- 💡 [Add Bulk API Reference](https://api.docs.bullmq.io/classes/v4.FlowProducer.html#addBulk) diff --git a/docs/gitbook/patterns/manually-fetching-jobs.md b/docs/gitbook/patterns/manually-fetching-jobs.md index 66959f8bd7..7a066fd9e8 100644 --- a/docs/gitbook/patterns/manually-fetching-jobs.md +++ b/docs/gitbook/patterns/manually-fetching-jobs.md @@ -50,13 +50,13 @@ A token represents ownership, that a given worker is currently working on a give ## Checking for stalled jobs -When processing jobs manually you may also want to start the stalled jobs checker. This checker is needed to move jobs that may stall (they have lost their locks) back to the wait status (or failed if they have exhausted the maximum number of [stalled attempts](https://api.docs.bullmq.io/interfaces/WorkerOptions.html#maxStalledCount), which is 1 by default). +When processing jobs manually you may also want to start the stalled jobs checker. This checker is needed to move jobs that may stall (they have lost their locks) back to the wait status (or failed if they have exhausted the maximum number of [stalled attempts](https://api.docs.bullmq.io/interfaces/v4.WorkerOptions.html#maxStalledCount), which is 1 by default). ```typescript await worker.startStalledCheckTimer() ``` -The checker will run periodically (based on the [stalledInterval](https://api.docs.bullmq.io/interfaces/WorkerOptions.html#stalledInterval) option) until the worker is closed. +The checker will run periodically (based on the [stalledInterval](https://api.docs.bullmq.io/interfaces/v4.WorkerOptions.html#stalledInterval) option) until the worker is closed. ## Looping through jobs From f1ca52541eecbd610b0161b21fe696decd38ee7b Mon Sep 17 00:00:00 2001 From: roggervalf Date: Fri, 7 Jul 2023 10:44:52 -0500 Subject: [PATCH 216/322] doc(python): add python tabs in getters and step jobs pattern --- .../bull-3.x-migration/compatibility-class.md | 4 + docs/gitbook/guide/jobs/getters.md | 36 +++++++ docs/gitbook/patterns/process-step-jobs.md | 100 ++++++++++++++++++ 3 files changed, 140 insertions(+) diff --git a/docs/gitbook/bull-3.x-migration/compatibility-class.md b/docs/gitbook/bull-3.x-migration/compatibility-class.md index 7e5b3c4ab0..a283ab7452 100644 --- a/docs/gitbook/bull-3.x-migration/compatibility-class.md +++ b/docs/gitbook/bull-3.x-migration/compatibility-class.md @@ -33,3 +33,7 @@ queue.add("cat", { sound: "meow" }); queue.add("cow", { sound: "moo" }); queue.add("dog", { sound: "bark" }); ``` + +## Read more: + +- 💡 [Queue3 API Reference](https://api.docs.bullmq.io/classes/v1.Queue3.html) diff --git a/docs/gitbook/guide/jobs/getters.md b/docs/gitbook/guide/jobs/getters.md index c07914ceeb..7cadcb996c 100644 --- a/docs/gitbook/guide/jobs/getters.md +++ b/docs/gitbook/guide/jobs/getters.md @@ -8,6 +8,9 @@ When jobs are added to a queue, they will be in different statuses during their It is often necessary to know how many jobs are in a given status: +{% tabs %} +{% tab title="TypeScript" %} + ```typescript import { Queue } from 'bullmq'; @@ -18,18 +21,51 @@ const counts = await myQueue.getJobCounts('wait', 'completed', 'failed'); // Returns an object like this { wait: number, completed: number, failed: number } ``` +{% endtab %} + +{% tab title="Python" %} + +```python +from bullmq import Queue + +myQueue = Queue('Paint') + +counts = await myQueue.getJobCounts('wait', 'completed', 'failed') + +# Returns an object like this { wait: number, completed: number, failed: number } +``` + +{% endtab %} +{% endtabs %} + The available status are: _completed, failed, delayed, active, wait, waiting-children, prioritized, _paused_ and _repeat._ #### Get Jobs It is also possible to retrieve the jobs with pagination style semantics. For example: +{% tabs %} +{% tab title="TypeScript" %} + ```typescript const completed = await myQueue.getJobs(['completed'], 0, 100, true); // returns the oldest 100 jobs ``` +{% endtab %} + +{% tab title="Python" %} + +```python +completed = await myQueue.getJobs(['completed'], 0, 100, True) + +# returns the oldest 100 jobs +``` + +{% endtab %} +{% endtabs %} + ## Read more: * 💡 [Get Job Counts API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html#getJobCounts) diff --git a/docs/gitbook/patterns/process-step-jobs.md b/docs/gitbook/patterns/process-step-jobs.md index 0ab9470a7e..6dc0e0c682 100644 --- a/docs/gitbook/patterns/process-step-jobs.md +++ b/docs/gitbook/patterns/process-step-jobs.md @@ -2,6 +2,9 @@ Sometimes, it is useful to break processor function into small pieces that will be processed depending on the previous executed step, we could handle this kind of logic by using switch blocks: +{% tabs %} +{% tab title="TypeScript" %} + ```typescript enum Step { Initial, @@ -41,6 +44,40 @@ const worker = new Worker( ); ``` +{% endtab %} + +{% tab title="Python" %} + +```python +class Step(int, Enum): + Initial = 1 + Second = 2 + Finish = 3 + +async def process(job: Job, token: str): + step = job.data.get("step") + while step != Step.Finish: + if step == Step.Initial: + await doInitialStepStuff() + await job.updateData({ + "step": Step.Second + }) + step = Step.Second + elif step == Step.Second: + await doSecondStepStuff() + await job.updateData({ + "step": Step.Finish + }) + step = Step.Finish + else: + raise Exception("invalid step") + +worker = Worker("queueName", process, {"connection": connection}) +``` + +{% endtab %} +{% endtabs %} + As you can see, we should save the step value; in this case, we are saving it into the job's data. So even in the case of an error, it would be retried in the last step that was saved (in case we use a backoff strategy). ## Delaying @@ -96,6 +133,9 @@ A common use case is to add children at runtime and then wait for the children t This can be handled using the `moveToWaitingChildren` method. However, it is important to note that when a job is being processed by a worker, the worker keeps a lock on this job with a certain token value. For the `moveToWaitingChildren` method to work, we need to pass said token so that it can unlock without error. Finally, we need to exit from the processor by throwing a special error `WaitingChildrenError` that will signal the worker that the job has been moved to waiting-children so that it does not try to complete (or fail the job) instead. +{% tabs %} +{% tab title="TypeScript" %} + ```typescript import { WaitingChildrenError, Worker } from 'bullmq'; @@ -170,6 +210,66 @@ const worker = new Worker( ); ``` +{% endtab %} + +{% tab title="Python" %} + +```python +from bullmq import Worker, WaitingChildrenError +from enum import Enum + +class Step(int, Enum): + Initial = 1 + Second = 2 + Third = 3 + Finish = 4 + +async def process(job: Job, token: str): + step = job.data.get("step") + while step != Step.Finish: + if step == Step.Initial: + await doInitialStepStuff() + await children_queue.add('child-1', {"foo": "bar" },{ + "parent": { + "id": job.id, + "queue": job.queueQualifiedName + } + }) + await job.updateData({ + "step": Step.Second + }) + step = Step.Second + elif step == Step.Second: + await doSecondStepStuff() + await children_queue.add('child-2', {"foo": "bar" },{ + "parent": { + "id": job.id, + "queue": job.queueQualifiedName + } + }) + await job.updateData({ + "step": Step.Third + }) + step = Step.Third + elif step == Step.Third: + should_wait = await job.moveToWaitingChildren(token, {}) + if not should_wait: + await job.updateData({ + "step": Step.Finish + }) + step = Step.Finish + return Step.Finish + else: + raise WaitingChildrenError + else: + raise Exception("invalid step") + +worker = Worker("parentQueueName", process, {"connection": connection}) +``` + +{% endtab %} +{% endtabs %} + {% hint style="info" %} Bullmq-Pro: this pattern could be handled by using observables; in that case, we do not need to save next step. {% endhint %} From 750863373adb9d8a528713a168d03b2dc3173eb1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 9 Jul 2023 00:45:22 -0600 Subject: [PATCH 217/322] chore(deps): update dependency pipenv to v2023.7.4 (#2042) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index f6c3302f56..aa6a5ee421 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -3,7 +3,7 @@ certifi==2023.5.7 distlib==0.3.6 filelock==3.12.2 msgpack==1.0.5 -pipenv==2023.6.26 +pipenv==2023.7.4 platformdirs==3.6.0 pre-commit==3.3.3 python-semantic-release==7.28.1 From a557970c755d370ed23850e2f32af35774002bc9 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 10 Jul 2023 17:36:07 -0600 Subject: [PATCH 218/322] fix(python): add requires-python config (#2056) fixes #1979 --- python/README.md | 4 ++-- python/pyproject.toml | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/python/README.md b/python/README.md index e6a9ddd66b..af4219223f 100644 --- a/python/README.md +++ b/python/README.md @@ -12,7 +12,7 @@ have been ported so far: - [ ] Add jobs to queues. - [x] Regular jobs. - - [ ] Delayed jobs. + - [x] Delayed jobs. - [ ] Job priority. - [ ] Repeatable. @@ -20,7 +20,7 @@ have been ported so far: - [ ] Job events. - [x] Job progress. - [ ] Job retries. -- [ ] Job backoff. +- [x] Job backoff. - [x] Getters. ## Installation diff --git a/python/pyproject.toml b/python/pyproject.toml index e088bdc7f4..9d35f12222 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -10,14 +10,13 @@ readme="README.md" authors = [ {name = "Taskforce.sh Inc.", email = "manast@taskforce.sh"}, ] +requires-python = ">=3.10.0" classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: POSIX :: Linux', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.10', ] keywords = ["python", "bullmq", "queues"] dependencies = [ From da7dd075ea5d2df7f04367050cb658d26f492464 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Mon, 10 Jul 2023 23:38:01 +0000 Subject: [PATCH 219/322] 1.6.1 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 7 +++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 74fd4ffa46..920f5d4772 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,13 @@ +## v1.6.1 (2023-07-10) +### Fix +* **python:** Add requires-python config (#2056) fixes #1979 ([`a557970`](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) + +### Documentation +* **gitbook:** Update v4 references ([`b0adbf8`](https://github.com/taskforcesh/bullmq/commit/b0adbf857ddf4c39fdd8de53fa60d0f0169a7f7a)) + ## v1.6.0 (2023-07-06) ### Feature * **python:** Add moveToWaitingChildren job method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([`6d0e224`](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 0afd10a7ad..c3ba93278b 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.6.0" +__version__ = "1.6.1" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 9d35f12222..af40bef7cf 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.6.0" +version = "1.6.1" description='BullMQ for Python' readme="README.md" authors = [ From f419ff1ec5cb34986fe4b79402c727a6487e949c Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 10 Jul 2023 17:48:33 -0600 Subject: [PATCH 220/322] fix(flow): emit delayed event when parent is moved to delayed (#2055) --- .../includes/updateParentDepsIfNeeded.lua | 16 +++++++++------- tests/test_flow.ts | 12 ++++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/commands/includes/updateParentDepsIfNeeded.lua b/src/commands/includes/updateParentDepsIfNeeded.lua index 07d7d18796..590776d4ae 100644 --- a/src/commands/includes/updateParentDepsIfNeeded.lua +++ b/src/commands/includes/updateParentDepsIfNeeded.lua @@ -26,15 +26,17 @@ local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDepende local parentDelayedKey = parentQueueKey .. ":delayed" rcall("ZADD", parentDelayedKey, score, parentId) + rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, + "delay", delayedTimestamp) addDelayMarkerIfNeeded(parentTarget, parentDelayedKey) - -- Standard or priority add - elseif priority == 0 then - rcall("RPUSH", parentTarget, parentId) else - addJobWithPriority(parentWaitKey, parentQueueKey .. ":prioritized", priority, paused, - parentId, parentQueueKey .. ":pc") + if priority == 0 then + rcall("RPUSH", parentTarget, parentId) + else + addJobWithPriority(parentWaitKey, parentQueueKey .. ":prioritized", priority, paused, + parentId, parentQueueKey .. ":pc") + end + rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children") end - - rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children") end end diff --git a/tests/test_flow.ts b/tests/test_flow.ts index 0770d290a5..56b99b1741 100644 --- a/tests/test_flow.ts +++ b/tests/test_flow.ts @@ -2092,6 +2092,17 @@ describe('flows', () => { connection, }, ); + const queueEvents = new QueueEvents(topQueueName, { connection }); + await queueEvents.waitUntilReady(); + + const delayed = new Promise(resolve => { + queueEvents.on('delayed', async ({ jobId, delay }) => { + const milliseconds = delay - Date.now(); + expect(milliseconds).to.be.lessThanOrEqual(3000); + expect(milliseconds).to.be.greaterThan(2000); + resolve(); + }); + }); const completed = new Promise((resolve, reject) => { childrenWorker.on('completed', async function () { @@ -2153,6 +2164,7 @@ describe('flows', () => { expect(children[0].job.data.foo).to.be.eql('bar'); await completed; + await delayed; await childrenWorker.close(); const isDelayed = await job.isDelayed(); From fc69da91d109d713ff16efca0a968466b7868f6c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 10 Jul 2023 23:49:34 +0000 Subject: [PATCH 221/322] chore(release): 4.2.1 [skip ci] ## [4.2.1](https://github.com/taskforcesh/bullmq/compare/v4.2.0...v4.2.1) (2023-07-10) ### Bug Fixes * **flow:** emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([f419ff1](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) * **python:** add requires-python config ([#2056](https://github.com/taskforcesh/bullmq/issues/2056)) fixes [#1979](https://github.com/taskforcesh/bullmq/issues/1979) ([a557970](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) * **python:** fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([7ec1c5b](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) ### Features * **python:** add moveToWaitingChildren job method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([6d0e224](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) --- docs/gitbook/changelog.md | 14 ++++++++++++++ package.json | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index ce42e01925..f76d6c1292 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,17 @@ +## [4.2.1](https://github.com/taskforcesh/bullmq/compare/v4.2.0...v4.2.1) (2023-07-10) + + +### Bug Fixes + +* **flow:** emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([f419ff1](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) +* **python:** add requires-python config ([#2056](https://github.com/taskforcesh/bullmq/issues/2056)) fixes [#1979](https://github.com/taskforcesh/bullmq/issues/1979) ([a557970](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) +* **python:** fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([7ec1c5b](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) + + +### Features + +* **python:** add moveToWaitingChildren job method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([6d0e224](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) + # [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) diff --git a/package.json b/package.json index 95cd37e807..e310c6ee8d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.2.0", + "version": "4.2.1", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 37c203c303e00a2aa4d8933bc5e68239547b1aca Mon Sep 17 00:00:00 2001 From: roggervalf Date: Tue, 11 Jul 2023 12:31:03 -0500 Subject: [PATCH 222/322] docs(bullmq-pro): update changelog to v6.0.5 --- docs/gitbook/bullmq-pro/changelog.md | 34 +++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index 59512af504..7d05cf4239 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,31 @@ +## [6.0.5](https://github.com/taskforcesh/bullmq-pro/compare/v6.0.4...v6.0.5) (2023-07-11) + + +### Bug Fixes + +* **pause-group:** do not move job to wait when queue is paused ([#162](https://github.com/taskforcesh/bullmq-pro/issues/162)) ([458b381](https://github.com/taskforcesh/bullmq-pro/commit/458b3813eef982dc661a019349776d44d6ddb194)) + +## [6.0.4](https://github.com/taskforcesh/bullmq-pro/compare/v6.0.3...v6.0.4) (2023-07-07) + + +### Bug Fixes + +* **group:** move job into group list when paused and dynamic rate limit ([#161](https://github.com/taskforcesh/bullmq-pro/issues/161)) ([1625f36](https://github.com/taskforcesh/bullmq-pro/commit/1625f36b3014ac191828d8ce070f237c19494c67)) + +## [6.0.3](https://github.com/taskforcesh/bullmq-pro/compare/v6.0.2...v6.0.3) (2023-07-05) + + +### Bug Fixes + +* **rate-limit:** emit waiting event in rateLimitGroup ([#160](https://github.com/taskforcesh/bullmq-pro/issues/160)) ([eaf3cd7](https://github.com/taskforcesh/bullmq-pro/commit/eaf3cd74e3bcd40e6ba46bb2f540cae9cb945962)) + +## [6.0.2](https://github.com/taskforcesh/bullmq-pro/compare/v6.0.1...v6.0.2) (2023-07-04) + + +### Performance Improvements + +* **remove-job:** do not remove last group id ([#159](https://github.com/taskforcesh/bullmq-pro/issues/159)) ([f5a3cd5](https://github.com/taskforcesh/bullmq-pro/commit/f5a3cd50d78bcadfd09ca9c5de1054f9620c191b)) + ## [6.0.1](https://github.com/taskforcesh/bullmq-pro/compare/v6.0.0...v6.0.1) (2023-06-29) @@ -17,7 +45,7 @@ * **priority:** priority is separeted in its own zset, no duplication needed -* refactor: change job method name update to updateData +* change job method name update to updateData ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) @@ -54,7 +82,7 @@ ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ### Bug Fixes -* **remove-job:** considera decreasing group concurrency ([#149](https://github.com/taskforcesh/bullmq-pro/issues/149)) ([25068e2](https://github.com/taskforcesh/bullmq-pro/commit/25068e243f993e6a22531bb8d2c6c60ffba36b9b)) +* **remove-job:** consider decreasing group concurrency ([#149](https://github.com/taskforcesh/bullmq-pro/issues/149)) ([25068e2](https://github.com/taskforcesh/bullmq-pro/commit/25068e243f993e6a22531bb8d2c6c60ffba36b9b)) # [5.3.0](https://github.com/taskforcesh/bullmq-pro/compare/v5.2.5...v5.3.0) (2023-05-23) @@ -189,7 +217,7 @@ ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ### Bug Fixes -* **ratelimitgroup:** several small fixes related to manual group rate limit. ([5b338d6](https://github.com/taskforcesh/bullmq-pro/commit/5b338d6b68af6762ae1c12367cff010596d8a15e)) +* **rate-limit-group:** several small fixes related to manual group rate limit. ([5b338d6](https://github.com/taskforcesh/bullmq-pro/commit/5b338d6b68af6762ae1c12367cff010596d8a15e)) ## [5.1.3](https://github.com/taskforcesh/bullmq-pro/compare/v5.1.2...v5.1.3) (2022-12-08) From e2553562271e1e4143a8fef616349bb30de4899d Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 12 Jul 2023 18:07:25 -0600 Subject: [PATCH 223/322] feat(worker): add id as part of token (#2061) --- python/bullmq/job.py | 1 + python/bullmq/worker.py | 11 ++++++++--- python/tests/queue_tests.py | 2 ++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 59aadae9f0..911d5335b2 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -50,6 +50,7 @@ def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): self.returnvalue = None self.failedReason = None self.repeatJobKey = None + self.token: str = None parent = opts.get("parent") self.parentKey = get_parent_key(parent) self.parent = {"id": parent.get("id"), "queueKey": parent.get("queue")} if parent else None diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index 9d70eb1627..74ec60f1bb 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -40,6 +40,7 @@ def __init__(self, name: str, processor: Callable[[Job, str], asyncio.Future], o self.running = False self.processing = set() self.jobs = set() + self.id = uuid4().hex if opts.get("autorun", True): asyncio.ensure_future(self.run()) @@ -55,15 +56,17 @@ async def run(self): self.running = True jobs = [] - token = uuid4().hex + token_postfix = 0 while not self.closed: if len(jobs) == 0 and len(self.processing) < self.opts.get("concurrency") and not self.closing: + token_postfix+=1 + token = f'{self.id}:{token_postfix}' waiting_job = asyncio.ensure_future(self.getNextJob(token)) self.processing.add(waiting_job) if len(jobs) > 0: - jobs_to_process = [self.processJob(job, token) for job in jobs] + jobs_to_process = [self.processJob(job, job.token) for job in jobs] processing_jobs = [asyncio.ensure_future( j) for j in jobs_to_process] self.processing.update(processing_jobs) @@ -117,7 +120,9 @@ async def getNextJob(self, token: str): job, job_id, limit_until, delay_until = await self.scripts.moveToActive(token, self.opts, job_id) if job and job_id: - return Job.fromJSON(self, job, job_id) + job_instance = Job.fromJSON(self, job, job_id) + job_instance.token = token + return job_instance async def processJob(self, job: Job, token: str): try: diff --git a/python/tests/queue_tests.py b/python/tests/queue_tests.py index bff7c56610..fbd32c6887 100644 --- a/python/tests/queue_tests.py +++ b/python/tests/queue_tests.py @@ -92,6 +92,7 @@ async def test_is_paused_with_custom_prefix(self): self.assertEqual(isPaused, False) + await queue.obliterate() await queue.close() async def test_trim_events_manually(self): @@ -128,6 +129,7 @@ async def test_trim_events_manually_with_custom_prefix(self): self.assertEqual(events_length, 0) + await queue.obliterate() await queue.close() async def test_retry_failed_jobs(self): From a82401c00cc7378cdf8206b5c74afeaaead39c2c Mon Sep 17 00:00:00 2001 From: roggervalf Date: Thu, 13 Jul 2023 13:51:28 -0500 Subject: [PATCH 224/322] docs(stalled): add pattern reference for manual fetching jobs --- docs/gitbook/changelog.md | 7 ------- docs/gitbook/guide/jobs/stalled.md | 1 + docs/gitbook/python/changelog.md | 19 ++++--------------- 3 files changed, 5 insertions(+), 22 deletions(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index f76d6c1292..0d9b2d9d1b 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -4,13 +4,6 @@ ### Bug Fixes * **flow:** emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([f419ff1](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) -* **python:** add requires-python config ([#2056](https://github.com/taskforcesh/bullmq/issues/2056)) fixes [#1979](https://github.com/taskforcesh/bullmq/issues/1979) ([a557970](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) -* **python:** fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([7ec1c5b](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) - - -### Features - -* **python:** add moveToWaitingChildren job method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([6d0e224](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) # [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) diff --git a/docs/gitbook/guide/jobs/stalled.md b/docs/gitbook/guide/jobs/stalled.md index 97587c40cb..bc02ca0539 100644 --- a/docs/gitbook/guide/jobs/stalled.md +++ b/docs/gitbook/guide/jobs/stalled.md @@ -6,6 +6,7 @@ Stalled jobs checks will only work if there is at least one [`QueueScheduler`](. {% hint style="danger" %} From BullMQ 2.0 and onwards, the QueueScheduler is not needed anymore. +For manually fetching jobs check this [pattern](https://docs.bullmq.io/patterns/manually-fetching-jobs#checking-for-stalled-jobs) {% endhint %} When a job is in an active state, i.e., it is being processed by a worker, it needs to continuously update the queue to notify that the worker is still working on the job. This mechanism prevents a worker that crashes or enters an endless loop from keeping a job in an active state forever. diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 920f5d4772..8fdd4626a9 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -4,21 +4,15 @@ ## v1.6.1 (2023-07-10) ### Fix -* **python:** Add requires-python config (#2056) fixes #1979 ([`a557970`](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) - -### Documentation -* **gitbook:** Update v4 references ([`b0adbf8`](https://github.com/taskforcesh/bullmq/commit/b0adbf857ddf4c39fdd8de53fa60d0f0169a7f7a)) +* **pyproject:** Add requires-python config (#2056) fixes #1979 ([`a557970`](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) ## v1.6.0 (2023-07-06) ### Feature -* **python:** Add moveToWaitingChildren job method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([`6d0e224`](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) +* **job:** Add moveToWaitingChildren method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([`6d0e224`](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) ## v1.5.0 (2023-07-04) -### Feature -* **common:** Add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([`ca17364`](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) - ### Fix -* **python:** Fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([`7ec1c5b`](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) +* **queue:** Fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([`7ec1c5b`](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) ## v1.4.0 (2023-06-30) ### Feature @@ -26,7 +20,7 @@ ## v1.3.1 (2023-06-29) ### Fix -* **python:** Build egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) +* **pyproject:** Build egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) ## v1.3.0 (2023-06-29) ### Feature @@ -36,11 +30,6 @@ ### Fix * **release:** Add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) -### Documentation -* **changelogs:** Update changelogs ([#2028](https://github.com/taskforcesh/bullmq/issues/2028)) ([`667de07`](https://github.com/taskforcesh/bullmq/commit/667de075f4762ab72dbaa5567bbacfd5147d4770)) -* Update README.md ([`dc63efe`](https://github.com/taskforcesh/bullmq/commit/dc63efe6596c61487f0f7a9fbe06466fbd42d835)) -* Update broken patterns link in the readme ([#2025](https://github.com/taskforcesh/bullmq/issues/2025)) ([`0e6e836`](https://github.com/taskforcesh/bullmq/commit/0e6e836376dc89d432f384e5ada0c9356d57252a)) - ## v1.2.0 (2023-06-24) ### Feature * **queue:** Add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) From f0b823a2bb078ea9b1fe953f6f068cbfe3eab757 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Jul 2023 23:55:59 -0600 Subject: [PATCH 225/322] chore(deps): update dependency dev/setuptools to v63.4.3 (#2034) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index af40bef7cf..9a2c92651a 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -27,7 +27,7 @@ dependencies = [ [project.optional-dependencies] dev = [ - "setuptools==63.1.0", + "setuptools==63.4.3", "pre-commit==3.3.3", "build==0.8.0", "python-semantic-release==7.28.1", From 3b6f33eb85f68cff97eb61253884cf540cfb4908 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 14 Jul 2023 05:57:00 +0000 Subject: [PATCH 226/322] chore(release): 4.3.0 [skip ci] # [4.3.0](https://github.com/taskforcesh/bullmq/compare/v4.2.1...v4.3.0) (2023-07-14) ### Features * **worker:** add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([e255356](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 0d9b2d9d1b..d075c6bb2b 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +# [4.3.0](https://github.com/taskforcesh/bullmq/compare/v4.2.1...v4.3.0) (2023-07-14) + + +### Features + +* **worker:** add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([e255356](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) + ## [4.2.1](https://github.com/taskforcesh/bullmq/compare/v4.2.0...v4.2.1) (2023-07-10) diff --git a/package.json b/package.json index e310c6ee8d..57049bf2ca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.2.1", + "version": "4.3.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 808ee7231c75d4d826881f25e346f01b2fd2dc23 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 14 Jul 2023 11:28:18 -0600 Subject: [PATCH 227/322] feat(python): add remove method in queue (#2066) --- python/bullmq/job.py | 3 ++- python/bullmq/queue.py | 3 +++ python/tests/queue_tests.py | 8 ++++++++ tests/test_flow.ts | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 911d5335b2..aeac395a72 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -205,7 +205,8 @@ def fromJSON(queue: Queue, rawData: dict, jobId: str | None = None): async def fromId(queue: Queue, jobId: str): key = f"{queue.prefix}:{queue.name}:{jobId}" raw_data = await queue.client.hgetall(key) - return Job.fromJSON(queue, raw_data, jobId) + if len(raw_data): + return Job.fromJSON(queue, raw_data, jobId) def optsFromJSON(rawOpts: dict) -> dict: diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 9c9e6e9e90..26668e1b5f 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -216,3 +216,6 @@ def close(self): Close the queue instance. """ return self.redisConnection.close() + + def remove(self, job_id: str): + return self.scripts.remove(job_id) diff --git a/python/tests/queue_tests.py b/python/tests/queue_tests.py index fbd32c6887..8234eb4fe7 100644 --- a/python/tests/queue_tests.py +++ b/python/tests/queue_tests.py @@ -368,6 +368,14 @@ def failing(job: Job, result): await queue.close() await worker.close() + async def test_remove_job(self): + queue = Queue(queueName) + job = await queue.add("test", {"foo": "bar"}, {}) + await queue.remove(job.id) + job = await Job.fromId(queue, job.id) + self.assertIsNone(job) + + await queue.close() if __name__ == '__main__': unittest.main() diff --git a/tests/test_flow.ts b/tests/test_flow.ts index 56b99b1741..ea1201b97f 100644 --- a/tests/test_flow.ts +++ b/tests/test_flow.ts @@ -1377,6 +1377,8 @@ describe('flows', () => { return resolve(); } + await delay(200); + throw new Error('failed'); }; }); From 980db2ba2163db32beea20546be3b072a3fcdf61 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Fri, 14 Jul 2023 17:30:08 +0000 Subject: [PATCH 228/322] 1.7.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 12 ++++++++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 8fdd4626a9..0b02c568e4 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,18 @@ +## v1.7.0 (2023-07-14) +### Feature +* **python:** Add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([`808ee72`](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) +* **worker:** Add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([`e255356`](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) + +### Fix +* **flow:** Emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([`f419ff1`](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) + +### Documentation +* **stalled:** Add pattern reference for manual fetching jobs ([`a82401c`](https://github.com/taskforcesh/bullmq/commit/a82401c00cc7378cdf8206b5c74afeaaead39c2c)) +* **bullmq-pro:** Update changelog to v6.0.5 ([`37c203c`](https://github.com/taskforcesh/bullmq/commit/37c203c303e00a2aa4d8933bc5e68239547b1aca)) + ## v1.6.1 (2023-07-10) ### Fix * **pyproject:** Add requires-python config (#2056) fixes #1979 ([`a557970`](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index c3ba93278b..6121ca82a3 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.6.1" +__version__ = "1.7.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 9a2c92651a..d107df75dc 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.6.1" +version = "1.7.0" description='BullMQ for Python' readme="README.md" authors = [ From 0bdabcd4ccf4fb16cc57c7fa67c8ccfe41031bf4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 15 Jul 2023 13:04:03 -0600 Subject: [PATCH 229/322] chore(deps): update dependency dev/setuptools to v68 (#2038) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index d107df75dc..64e55ecc0c 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -27,7 +27,7 @@ dependencies = [ [project.optional-dependencies] dev = [ - "setuptools==63.4.3", + "setuptools==68.0.0", "pre-commit==3.3.3", "build==0.8.0", "python-semantic-release==7.28.1", From bdaccd3aef8310a763169e3670cbbbd5288283e8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 15 Jul 2023 19:04:19 +0000 Subject: [PATCH 230/322] chore(deps): update actions/setup-node digest to e33196f --- .github/workflows/api.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 86cc49fc22..d9812df61f 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -17,7 +17,7 @@ jobs: # check out all branches fetch-depth: 0 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 + uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3 with: node-version: ${{ matrix.node-version }} cache: 'yarn' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 344abe1655..7ac3753062 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,7 +22,7 @@ jobs: with: fetch-depth: 0 - name: Setup Node.js - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 + uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3 with: node-version: lts/* cache: 'yarn' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9ff39058b8..8a8f4adc61 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,7 +30,7 @@ jobs: - name: Checkout repository uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 - name: Use Node.js - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 + uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3 with: node-version: ${{ env.node-version }} cache: 'yarn' @@ -75,7 +75,7 @@ jobs: - name: Checkout repository uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 + uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3 with: node-version: ${{ matrix.node-version }} cache: 'yarn' @@ -103,7 +103,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 + uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3 with: node-version: ${{ matrix.node-version }} cache: 'yarn' From d7d0981e441321c4156704c665a7015ba39d36bf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 15 Jul 2023 20:56:27 +0000 Subject: [PATCH 231/322] chore(deps): update github/codeql-action digest to 489225d --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index c69bde76e6..c1b976eb0e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -42,7 +42,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@f6e388ebf0efc915c6c5b165b019ee61a6746a38 # v2 + uses: github/codeql-action/init@489225d82a57396c6f426a40e66d461b16b3461d # v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -53,7 +53,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@f6e388ebf0efc915c6c5b165b019ee61a6746a38 # v2 + uses: github/codeql-action/autobuild@489225d82a57396c6f426a40e66d461b16b3461d # v2 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -67,4 +67,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f6e388ebf0efc915c6c5b165b019ee61a6746a38 # v2 + uses: github/codeql-action/analyze@489225d82a57396c6f426a40e66d461b16b3461d # v2 From a1577fa28870939101b1a7e31e04ae53005b9a46 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 16 Jul 2023 16:55:34 -0600 Subject: [PATCH 232/322] chore(deps): update coverallsapp/github-action digest to 95b1a23 (#2065) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8a8f4adc61..52b62e8cc0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,7 +43,7 @@ jobs: - run: yarn coverage - name: Upload LCOV to Coveralls if: ${{ ( github.event_name == 'pull_request' && github.event.pull_request.head.fork == false ) || github.event_name == 'push' }} - uses: coverallsapp/github-action@3b7440a0fbc8822c731c93250c2c5506ca51a48f # branch=master + uses: coverallsapp/github-action@95b1a2355bd0e526ad2fd62da9fd386ad4c98474 # branch=master with: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Check coverage change not below threshold From ffd49e289c57252487200d47b92193228ae7451f Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 17 Jul 2023 01:14:38 -0600 Subject: [PATCH 233/322] feat(job): add removeDependencyOnFailure option (#1953) --- docs/gitbook/guide/flows/remove-dependency.md | 48 ++++ src/classes/job.ts | 7 + src/classes/scripts.ts | 6 +- .../moveParentFromWaitingChildrenToFailed.lua | 10 + .../includes/moveParentToWaitIfNeeded.lua | 42 ++++ .../includes/updateParentDepsIfNeeded.lua | 33 +-- src/commands/moveToFinished-13.lua | 17 +- src/types/job-options.ts | 10 + tests/test_flow.ts | 218 ++++++++++++++++++ tests/test_job.ts | 13 ++ 10 files changed, 368 insertions(+), 36 deletions(-) create mode 100644 docs/gitbook/guide/flows/remove-dependency.md create mode 100644 src/commands/includes/moveParentToWaitIfNeeded.lua diff --git a/docs/gitbook/guide/flows/remove-dependency.md b/docs/gitbook/guide/flows/remove-dependency.md new file mode 100644 index 0000000000..4e90ae6207 --- /dev/null +++ b/docs/gitbook/guide/flows/remove-dependency.md @@ -0,0 +1,48 @@ +# Remove Dependency + +In some situations, you may have a parent job and need to ignore when one of its children fail. + +The pattern to solve this requirement consists on using the **removeDependencyOnFailure** option. This option will make sure that when a job fails, the dependency is removed from the parent, so the parent will complete without waiting for the failed children. + +```typescript +const flow = new FlowProducer({ connection }); + +const originalTree = await flow.add({ + name: 'root-job', + queueName: 'topQueueName', + data: {}, + children: [ + { + name, + data: { idx: 0, foo: 'bar' }, + queueName: 'childrenQueueName', + opts: { removeDependencyOnFailure: true }, + children: [ + { + name, + data: { idx: 1, foo: 'bah' }, + queueName: 'grandChildrenQueueName', + }, + { + name, + data: { idx: 2, foo: 'baz' }, + queueName: 'grandChildrenQueueName', + }, + ], + }, + { + name, + data: { idx: 3, foo: 'foo' }, + queueName: 'childrenQueueName', + }, + ], +}); +``` + +{% hint style="info" %} +As soon as a **child** with this option fails, the parent job will be moved to a waiting state only if there are no more pending children. +{% endhint %} + +## Read more: + +- 💡 [Add Flow API Reference](https://api.docs.bullmq.io/classes/FlowProducer.html#add) diff --git a/src/classes/job.ts b/src/classes/job.ts index 5f33b73b33..d0552c26bf 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -40,6 +40,7 @@ const logger = debuglog('bull'); const optsDecodeMap = { fpof: 'failParentOnFailure', kl: 'keepLogs', + rdof: 'removeDependencyOnFailure', }; const optsEncodeMap = invert(optsDecodeMap); @@ -1078,6 +1079,12 @@ export class Job< throw new Error(`Delay and repeat options could not be used together`); } + if (this.opts.removeDependencyOnFailure && this.opts.failParentOnFailure) { + throw new Error( + `RemoveDependencyOnFailure and failParentOnFailure options can not be used together`, + ); + } + if (`${parseInt(this.id, 10)}` === this.id) { //TODO: throw an error in next breaking change console.warn( diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index ed6ada91db..80ea3106ca 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -91,8 +91,9 @@ export class Scripts { queueKeys.pc, ]; - const fpof = opts.fpof ? { fpof: true } : {}; - const parent = job.parent ? { ...job.parent, ...fpof } : null; + const parent: Record = job.parent + ? { ...job.parent, fpof: opts.fpof, rdof: opts.rdof } + : null; const args = [ queueKeys[''], @@ -284,6 +285,7 @@ export class Scripts { ? opts.metrics?.maxDataPoints : '', fpof: !!job.opts?.failParentOnFailure, + rdof: !!job.opts?.removeDependencyOnFailure, }), ]; diff --git a/src/commands/includes/moveParentFromWaitingChildrenToFailed.lua b/src/commands/includes/moveParentFromWaitingChildrenToFailed.lua index b576fbd9fd..bd6a148a6a 100644 --- a/src/commands/includes/moveParentFromWaitingChildrenToFailed.lua +++ b/src/commands/includes/moveParentFromWaitingChildrenToFailed.lua @@ -2,6 +2,9 @@ Function to recursively move from waitingChildren to failed. ]] +-- Includes +--- @include "moveParentToWaitIfNeeded" + local function moveParentFromWaitingChildrenToFailed( parentQueueKey, parentKey, parentId, jobIdKey, timestamp) if rcall("ZREM", parentQueueKey .. ":waiting-children", parentId) == 1 then rcall("ZADD", parentQueueKey .. ":failed", timestamp, parentId) @@ -22,6 +25,13 @@ local function moveParentFromWaitingChildrenToFailed( parentQueueKey, parentKey, parentKey, timestamp ) + elseif parentData['rdof'] then + local grandParentKey = parentData['queueKey'] .. ':' .. parentData['id'] + local grandParentDependenciesSet = grandParentKey .. ":dependencies" + if rcall("SREM", grandParentDependenciesSet, parentKey) == 1 then + moveParentToWaitIfNeeded(parentData['queueKey'], grandParentDependenciesSet, + grandParentKey, parentData['id'], timestamp) + end end end end diff --git a/src/commands/includes/moveParentToWaitIfNeeded.lua b/src/commands/includes/moveParentToWaitIfNeeded.lua new file mode 100644 index 0000000000..42054c7a11 --- /dev/null +++ b/src/commands/includes/moveParentToWaitIfNeeded.lua @@ -0,0 +1,42 @@ +--[[ + Validate and move parent to active if needed. +]] + +-- Includes +--- @include "addDelayMarkerIfNeeded" +--- @include "addJobWithPriority" +--- @include "getTargetQueueList" + +local function moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp) + local isParentActive = rcall("ZSCORE", parentQueueKey .. ":waiting-children", parentId) + if rcall("SCARD", parentDependenciesKey) == 0 and isParentActive then + rcall("ZREM", parentQueueKey .. ":waiting-children", parentId) + local parentWaitKey = parentQueueKey .. ":wait" + local parentTarget, paused = getTargetQueueList(parentQueueKey .. ":meta", parentWaitKey, + parentQueueKey .. ":paused") + local jobAttributes = rcall("HMGET", parentKey, "priority", "delay") + local priority = tonumber(jobAttributes[1]) or 0 + local delay = tonumber(jobAttributes[2]) or 0 + + if delay > 0 then + local delayedTimestamp = tonumber(timestamp) + delay + local score = delayedTimestamp * 0x1000 + local parentDelayedKey = parentQueueKey .. ":delayed" + rcall("ZADD", parentDelayedKey, score, parentId) + rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, + "delay", delayedTimestamp) + + addDelayMarkerIfNeeded(parentTarget, parentDelayedKey) + else + if priority == 0 then + rcall("RPUSH", parentTarget, parentId) + else + addJobWithPriority(parentWaitKey, parentQueueKey .. ":prioritized", priority, paused, + parentId, parentQueueKey .. ":pc") + end + + rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, + "prev", "waiting-children") + end + end +end diff --git a/src/commands/includes/updateParentDepsIfNeeded.lua b/src/commands/includes/updateParentDepsIfNeeded.lua index 590776d4ae..feaf01963d 100644 --- a/src/commands/includes/updateParentDepsIfNeeded.lua +++ b/src/commands/includes/updateParentDepsIfNeeded.lua @@ -3,40 +3,11 @@ ]] -- Includes ---- @include "addDelayMarkerIfNeeded" ---- @include "addJobWithPriority" ---- @include "getTargetQueueList" +--- @include "moveParentToWaitIfNeeded" local function updateParentDepsIfNeeded(parentKey, parentQueueKey, parentDependenciesKey, parentId, jobIdKey, returnvalue, timestamp ) local processedSet = parentKey .. ":processed" rcall("HSET", processedSet, jobIdKey, returnvalue) - local activeParent = rcall("ZSCORE", parentQueueKey .. ":waiting-children", parentId) - if rcall("SCARD", parentDependenciesKey) == 0 and activeParent then - rcall("ZREM", parentQueueKey .. ":waiting-children", parentId) - local parentWaitKey = parentQueueKey .. ":wait" - local parentTarget, paused = getTargetQueueList(parentQueueKey .. ":meta", parentWaitKey, - parentQueueKey .. ":paused") - local jobAttributes = rcall("HMGET", parentKey, "priority", "delay") - local priority = tonumber(jobAttributes[1]) or 0 - local delay = tonumber(jobAttributes[2]) or 0 - if delay > 0 then - local delayedTimestamp = tonumber(timestamp) + delay - local score = delayedTimestamp * 0x1000 - local parentDelayedKey = parentQueueKey .. ":delayed" - rcall("ZADD", parentDelayedKey, score, parentId) - - rcall("XADD", parentQueueKey .. ":events", "*", "event", "delayed", "jobId", parentId, - "delay", delayedTimestamp) - addDelayMarkerIfNeeded(parentTarget, parentDelayedKey) - else - if priority == 0 then - rcall("RPUSH", parentTarget, parentId) - else - addJobWithPriority(parentWaitKey, parentQueueKey .. ":prioritized", priority, paused, - parentId, parentQueueKey .. ":pc") - end - rcall("XADD", parentQueueKey .. ":events", "*", "event", "waiting", "jobId", parentId, "prev", "waiting-children") - end - end + moveParentToWaitIfNeeded(parentQueueKey, parentDependenciesKey, parentKey, parentId, timestamp) end diff --git a/src/commands/moveToFinished-13.lua b/src/commands/moveToFinished-13.lua index 62371ad4b0..a984f1662b 100644 --- a/src/commands/moveToFinished-13.lua +++ b/src/commands/moveToFinished-13.lua @@ -40,6 +40,7 @@ opts - attemptsMade opts - maxMetricsSize opts - fpof - fail parent on fail + opts - rdof - remove dependency on fail Output: 0 OK @@ -60,6 +61,7 @@ local rcall = redis.call --- @include "includes/moveJobFromPriorityToActive" --- @include "includes/prepareJobForProcessing" --- @include "includes/moveParentFromWaitingChildrenToFailed" +--- @include "includes/moveParentToWaitIfNeeded" --- @include "includes/promoteDelayedJobs" --- @include "includes/removeJobsByMaxAge" --- @include "includes/removeJobsByMaxCount" @@ -130,6 +132,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists parentId = getJobIdFromKey(parentKey) parentQueueKey = getJobKeyPrefix(parentKey, ":" .. parentId) end + if parentId ~= "" then if ARGV[5] == "completed" then local dependenciesSet = parentKey .. ":dependencies" @@ -138,9 +141,17 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists dependenciesSet, parentId, jobIdKey, ARGV[4], timestamp) end - elseif opts['fpof'] then - moveParentFromWaitingChildrenToFailed(parentQueueKey, parentKey, - parentId, jobIdKey, timestamp) + else + if opts['fpof'] then + moveParentFromWaitingChildrenToFailed(parentQueueKey, parentKey, + parentId, jobIdKey, timestamp) + elseif opts['rdof'] then + local dependenciesSet = parentKey .. ":dependencies" + if rcall("SREM", dependenciesSet, jobIdKey) == 1 then + moveParentToWaitIfNeeded(parentQueueKey, dependenciesSet, + parentKey, parentId, timestamp) + end + end end end diff --git a/src/types/job-options.ts b/src/types/job-options.ts index 3d615fdb98..9a88d7e604 100644 --- a/src/types/job-options.ts +++ b/src/types/job-options.ts @@ -5,6 +5,11 @@ export type JobsOptions = BaseJobOptions & { * If true, moves parent to failed. */ failParentOnFailure?: boolean; + + /** + * If true, removes the job from its parent dependencies when it fails after all attempts. + */ + removeDependencyOnFailure?: boolean; }; /** @@ -20,4 +25,9 @@ export type RedisJobOptions = BaseJobOptions & { * Maximum amount of log entries that will be preserved */ kl?: number; + + /** + * If true, removes the job from its parent dependencies when it fails after all attempts. + */ + rdof?: boolean; }; diff --git a/tests/test_flow.ts b/tests/test_flow.ts index ea1201b97f..2d945d9b1f 100644 --- a/tests/test_flow.ts +++ b/tests/test_flow.ts @@ -350,6 +350,101 @@ describe('flows', () => { await removeAllQueueData(new IORedis(), parentQueueName); }); + describe('when removeDependencyOnFailure is provided', async () => { + it('moves parent to wait after children fail', async () => { + const parentQueueName = `parent-queue-${v4()}`; + const parentQueue = new Queue(parentQueueName, { connection }); + const name = 'child-job'; + + const parentProcessor = async (job: Job) => { + const values = await job.getDependencies({ + processed: {}, + }); + expect(values).to.deep.equal({ + processed: {}, + nextProcessedCursor: 0, + }); + }; + + const parentWorker = new Worker(parentQueueName, parentProcessor, { + connection, + }); + const childrenWorker = new Worker( + queueName, + async () => { + await delay(10); + throw new Error('error'); + }, + { + connection, + }, + ); + await parentWorker.waitUntilReady(); + await childrenWorker.waitUntilReady(); + + const completed = new Promise(resolve => { + parentWorker.on('completed', async (job: Job) => { + expect(job.finishedOn).to.be.string; + const counts = await parentQueue.getJobCounts('completed'); + expect(counts.completed).to.be.equal(1); + resolve(); + }); + }); + + const flow = new FlowProducer({ connection }); + const tree = await flow.add({ + name: 'parent-job', + queueName: parentQueueName, + data: {}, + children: [ + { + name, + data: { idx: 0, foo: 'bar' }, + queueName, + opts: { removeDependencyOnFailure: true }, + }, + { + name, + data: { idx: 1, foo: 'baz' }, + queueName, + opts: { removeDependencyOnFailure: true }, + }, + { + name, + data: { idx: 2, foo: 'qux' }, + queueName, + opts: { removeDependencyOnFailure: true }, + }, + ], + }); + + expect(tree).to.have.property('job'); + expect(tree).to.have.property('children'); + + const { children, job } = tree; + const parentState = await job.getState(); + + expect(parentState).to.be.eql('waiting-children'); + expect(children).to.have.length(3); + + expect(children[0].job.id).to.be.ok; + expect(children[0].job.data.foo).to.be.eql('bar'); + expect(children[1].job.id).to.be.ok; + expect(children[1].job.data.foo).to.be.eql('baz'); + expect(children[2].job.id).to.be.ok; + expect(children[2].job.data.foo).to.be.eql('qux'); + + await completed; + await childrenWorker.close(); + + await parentWorker.close(); + + await flow.close(); + + await removeAllQueueData(new IORedis(), parentQueueName); + }); + }); + describe('when chaining flows at runtime using step jobs', () => { it('should wait children as one step of the parent job', async function () { this.timeout(8000); @@ -1480,6 +1575,129 @@ describe('flows', () => { await removeAllQueueData(new IORedis(), parentQueueName); await removeAllQueueData(new IORedis(), grandChildrenQueueName); }); + + describe('when removeDependencyOnFailure is provided', async () => { + it('moves parent to wait after children fail', async () => { + const name = 'child-job'; + + const parentQueueName = `parent-queue-${v4()}`; + const grandChildrenQueueName = `grand-children-queue-${v4()}`; + + const parentQueue = new Queue(parentQueueName, { + connection, + }); + const grandChildrenQueue = new Queue(grandChildrenQueueName, { + connection, + }); + const queueEvents = new QueueEvents(queueName, { connection }); + await queueEvents.waitUntilReady(); + + let grandChildrenProcessor, + processedGrandChildren = 0; + const processingChildren = new Promise(resolve => { + grandChildrenProcessor = async job => { + processedGrandChildren++; + + if (processedGrandChildren === 2) { + return resolve(); + } + + if (job.data.foo === 'bar') {throw new Error('failed');} + }; + }); + + const grandChildrenWorker = new Worker( + grandChildrenQueueName, + grandChildrenProcessor, + { connection }, + ); + + await grandChildrenWorker.waitUntilReady(); + + const flow = new FlowProducer({ connection }); + const tree = await flow.add({ + name: 'parent-job', + queueName: parentQueueName, + data: {}, + children: [ + { + name, + data: { foo: 'qux' }, + queueName, + opts: { removeDependencyOnFailure: true }, + children: [ + { + name, + data: { foo: 'bar' }, + queueName: grandChildrenQueueName, + opts: { failParentOnFailure: true }, + }, + { + name, + data: { foo: 'baz' }, + queueName: grandChildrenQueueName, + }, + ], + }, + ], + }); + + const failed = new Promise(resolve => { + queueEvents.on('failed', async ({ jobId, failedReason, prev }) => { + if (jobId === tree!.children![0].job.id) { + expect(prev).to.be.equal('waiting-children'); + expect(failedReason).to.be.equal( + `child bull:${grandChildrenQueueName}:${ + tree!.children![0].children![0].job.id + } failed`, + ); + resolve(); + } + }); + }); + + expect(tree).to.have.property('job'); + expect(tree).to.have.property('children'); + + const { children, job } = tree; + const parentState = await job.getState(); + + expect(parentState).to.be.eql('waiting-children'); + + await processingChildren; + await failed; + + const { children: grandChildren } = children[0]; + const updatedGrandchildJob = await grandChildrenQueue.getJob( + grandChildren[0].job.id, + ); + const grandChildState = await updatedGrandchildJob.getState(); + + expect(grandChildState).to.be.eql('failed'); + expect(updatedGrandchildJob.failedReason).to.be.eql('failed'); + + const updatedParentJob = await queue.getJob(children[0].job.id); + const updatedParentState = await updatedParentJob.getState(); + + expect(updatedParentState).to.be.eql('failed'); + expect(updatedParentJob.failedReason).to.be.eql( + `child bull:${grandChildrenQueueName}:${updatedGrandchildJob.id} failed`, + ); + + const updatedGrandparentJob = await parentQueue.getJob(job.id); + const updatedGrandparentState = await updatedGrandparentJob.getState(); + + expect(updatedGrandparentState).to.be.eql('waiting'); + + await parentQueue.close(); + await grandChildrenWorker.close(); + await flow.close(); + await queueEvents.close(); + + await removeAllQueueData(new IORedis(), parentQueueName); + await removeAllQueueData(new IORedis(), grandChildrenQueueName); + }); + }); }); it('should get paginated processed dependencies keys', async () => { diff --git a/tests/test_job.ts b/tests/test_job.ts index 3ff83d7a65..f9bc85bb94 100644 --- a/tests/test_job.ts +++ b/tests/test_job.ts @@ -120,6 +120,19 @@ describe('Job', function () { }); }); + describe('when removeDependencyOnFailure and failParentOnFailure options are provided', () => { + it('throws an error', async () => { + const data = { foo: 'bar' }; + const opts = { + removeDependencyOnFailure: true, + failParentOnFailure: true, + }; + await expect(Job.create(queue, 'test', data, opts)).to.be.rejectedWith( + 'RemoveDependencyOnFailure and failParentOnFailure options can not be used together', + ); + }); + }); + describe('when priority option is provided as float', () => { it('throws an error', async () => { const data = { foo: 'bar' }; From 38ed54a879ecff97fab9757a5ebf6583d6d161fb Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 17 Jul 2023 07:15:43 +0000 Subject: [PATCH 234/322] chore(release): 4.4.0 [skip ci] # [4.4.0](https://github.com/taskforcesh/bullmq/compare/v4.3.0...v4.4.0) (2023-07-17) ### Features * **job:** add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([ffd49e2](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) * **python:** add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([808ee72](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) --- docs/gitbook/changelog.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index d075c6bb2b..ba6eff7c94 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,11 @@ +# [4.4.0](https://github.com/taskforcesh/bullmq/compare/v4.3.0...v4.4.0) (2023-07-17) + + +### Features + +* **job:** add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([ffd49e2](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) +* **python:** add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([808ee72](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) + # [4.3.0](https://github.com/taskforcesh/bullmq/compare/v4.2.1...v4.3.0) (2023-07-14) diff --git a/package.json b/package.json index 57049bf2ca..dbd1696c16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.3.0", + "version": "4.4.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 2e30d34edfbc82925215b7e955b4aed6e68d1d8b Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Mon, 17 Jul 2023 15:24:42 +0000 Subject: [PATCH 235/322] GITBOOK-173: change request with no subject merged in GitBook --- docs/gitbook/guide/nestjs/producers.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/gitbook/guide/nestjs/producers.md b/docs/gitbook/guide/nestjs/producers.md index 762868377b..6bbcdfa163 100644 --- a/docs/gitbook/guide/nestjs/producers.md +++ b/docs/gitbook/guide/nestjs/producers.md @@ -1,3 +1,5 @@ +# Producers + Job producers add jobs to queues. Producers are typically application services (Nest providers). To add jobs to a queue, first inject the queue into the service as follows: ```typescript @@ -18,12 +20,12 @@ The **@InjectQueue()** decorator identifies the queue by its name, as provided i Now, add a job by calling the queue's add() method. ```typescript -const job = await this.audioQueue.add({ +const job = await this.audioQueue.add('sample', { foo: 'bar', }); ``` -# Flow Producers +## Flow Producers To add flows, first inject the flow producer into the service as follows: @@ -61,6 +63,6 @@ const job = await this.fooFlowProducer.add({ }); ``` -## Read more: +### Read more: -- 💡 [Queues Technique](https://docs.nestjs.com/techniques/queues) +* 💡 [Queues Technique](https://docs.nestjs.com/techniques/queues) From 1b95185e8f4a4349037b59e61455bdec79792644 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 17 Jul 2023 14:33:54 -0600 Subject: [PATCH 236/322] fix(python): respect concurrency in worker (#2062) fixes #2063 --- python/bullmq/scripts.py | 4 +- python/bullmq/worker.py | 94 ++++++++++++++++++++++++------------ python/tests/worker_tests.py | 40 +++++++++++++++ 3 files changed, 105 insertions(+), 33 deletions(-) diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index dd3d210e2c..1638b39971 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -286,7 +286,7 @@ async def reprocessJob(self, job: Job, state: str): keys.append(self.keys['wait']) keys.append(self.keys['meta']) keys.append(self.keys['paused']) - + args = [ job.id, ("R" if job.opts.get("lifo") else "L") + "PUSH", @@ -333,7 +333,7 @@ async def retryJobs(self, state: str, count: int, timestamp: int): result = await self.commands["retryJobs"](keys=keys, args=[count or 1000, timestamp or round(time.time()*1000), current_state]) return result - async def moveToActive(self, token: str, opts: dict, jobId: str = "") -> list[Any]: + async def moveToActive(self, token: str, opts: dict, jobId: str = None) -> list[Any]: """ Add an item to the queue """ diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index 74ec60f1bb..c0b90c4a0b 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -41,6 +41,10 @@ def __init__(self, name: str, processor: Callable[[Job, str], asyncio.Future], o self.processing = set() self.jobs = set() self.id = uuid4().hex + self.waiting = None + self.blockUntil = 0 + self.limitUntil = 0 + self.drained = False if opts.get("autorun", True): asyncio.ensure_future(self.run()) @@ -59,21 +63,19 @@ async def run(self): token_postfix = 0 while not self.closed: - if len(jobs) == 0 and len(self.processing) < self.opts.get("concurrency") and not self.closing: + while not self.waiting and len(self.processing) < self.opts.get("concurrency") and not self.closing: token_postfix+=1 token = f'{self.id}:{token_postfix}' waiting_job = asyncio.ensure_future(self.getNextJob(token)) self.processing.add(waiting_job) - if len(jobs) > 0: - jobs_to_process = [self.processJob(job, job.token) for job in jobs] - processing_jobs = [asyncio.ensure_future( - j) for j in jobs_to_process] - self.processing.update(processing_jobs) - try: jobs, pending = await getCompleted(self.processing) + jobs_to_process = [self.processJob(job, job.token) for job in jobs] + processing_jobs = [asyncio.ensure_future( + j) for j in jobs_to_process] + pending.update(processing_jobs) self.processing = pending if (len(jobs) == 0 or len(self.processing) == 0) and self.closing: @@ -96,34 +98,65 @@ async def getNextJob(self, token: str): @param token: worker token to be assigned to retrieved job @returns a Job or undefined if no job was available in the queue. """ - # First try to move a job from the waiting list to the active list - result = await self.scripts.moveToActive(token, self.opts) - job = None - job_id = None + + if not self.waiting: + self.waiting = self.waitForJob() + + try: + job_id = await self.waiting + job_instance = await self.moveToActive(token, job_id) + return job_instance + finally: + self.waiting = None + else: + job_instance = await self.moveToActive(token) + return job_instance + + async def moveToActive(self, token: str, job_id: str = None): + if job_id and job_id.startswith('0:'): + self.blockUntil = int(job_id.split(':')[1]) or 0 + + result = await self.scripts.moveToActive(token, self.opts, job_id) + job_data = None + id = None limit_until = None delay_until = None if result: - job, job_id, limit_until, delay_until = result - - # If there are no jobs in the waiting list we keep waiting with BRPOPLPUSH - if job is None: - timeout = min(delay_until - int(time.time() * 1000) - if delay_until else 5000, 5000) / 1000 - - redis_version = await self.blockingRedisConnection.getRedisVersion() - # Only Redis v6.0.0 and above supports doubles as block time - timeout = int(math.ceil(timeout)) if isRedisVersionLowerThan(redis_version, '6.0.0') else timeout - - job_id = await self.bclient.brpoplpush(self.scripts.keys["wait"], self.scripts.keys["active"], timeout) - if job_id: - job, job_id, limit_until, delay_until = await self.scripts.moveToActive(token, self.opts, job_id) - - if job and job_id: - job_instance = Job.fromJSON(self, job, job_id) + job_data, id, limit_until, delay_until = result + + return self.nextJobFromJobData(job_data, id, limit_until, delay_until, token) + + def nextJobFromJobData(self, job_data = None, job_id: str = None, limit_until: int = 0, + delay_until: int = 0, token: str = None): + self.limitUntil = max(limit_until, 0) or 0 + + if not job_data: + if not self.drained: + self.drained = True + self.blockUntil = 0 + + if delay_until: + self.blockUntil = max(delay_until, 0) or 0 + + if job_data: + self.drained = False + job_instance = Job.fromJSON(self, job_data, job_id) job_instance.token = token return job_instance + async def waitForJob(self): + timeout = max(min(self.blockUntil - int(time.time() * 1000) + if self.blockUntil else 5000, 5000) / 1000, 0.00001) + + redis_version = await self.blockingRedisConnection.getRedisVersion() + # Only Redis v6.0.0 and above supports doubles as block time + timeout = int(math.ceil(timeout)) if isRedisVersionLowerThan(redis_version, '6.0.0') else timeout + + job_id = await self.bclient.brpoplpush(self.scripts.keys["wait"], self.scripts.keys["active"], timeout) + + return job_id + async def processJob(self, job: Job, token: str): try: self.jobs.add((job, token)) @@ -181,12 +214,11 @@ async def close(self, force: bool = False): """ Close the worker """ + self.closing = True if force: self.forceClosing = True self.cancelProcessing() - self.closing = True - await self.blockingRedisConnection.close() await self.redisConnection.close() @@ -196,7 +228,7 @@ def cancelProcessing(self): job.cancel() -async def getCompleted(task_set: set) -> tuple[list[Job], list]: +async def getCompleted(task_set: set) -> tuple[list[Job], set]: job_set, pending = await asyncio.wait(task_set, return_when=asyncio.FIRST_COMPLETED) jobs = [extract_result(job_task) for job_task in job_set] # we filter `None` out to remove: diff --git a/python/tests/worker_tests.py b/python/tests/worker_tests.py index 18763332fa..4cb4b7780f 100644 --- a/python/tests/worker_tests.py +++ b/python/tests/worker_tests.py @@ -272,6 +272,46 @@ def completing(job: Job, result): await parent_queue.close() await queue.close() + async def test_process_job_respecting_the_concurrency_set(self): + num_jobs_processing = 0 + pending_message_to_process = 8 + wait = 0.01 + job_count = 0 + queue = Queue(queueName) + + async def process(job: Job, token: str): + nonlocal num_jobs_processing + nonlocal wait + nonlocal pending_message_to_process + num_jobs_processing += 1 + self.assertLess(num_jobs_processing, 5) + wait += 0.1 + await asyncio.sleep(wait) + self.assertEqual(num_jobs_processing, min(pending_message_to_process, 4)) + pending_message_to_process -= 1 + num_jobs_processing -= 1 + + return None + + for _ in range(8): + await queue.add("test", data={}) + + worker = Worker(queueName, process, {"concurrency": 4 }) + + completed_events = Future() + + def completing(job: Job, result): + nonlocal job_count + if job_count == 7: + completed_events.set_result(None) + job_count += 1 + + worker.on("completed", completing) + + await completed_events + + await queue.close() + await worker.close() if __name__ == '__main__': unittest.main() From 3860ed116aed02e7d96e4917df8648fc48977fde Mon Sep 17 00:00:00 2001 From: semantic-release Date: Mon, 17 Jul 2023 20:35:23 +0000 Subject: [PATCH 237/322] 1.8.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 7 +++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 0b02c568e4..202396e6ae 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,13 @@ +## v1.8.0 (2023-07-17) +### Feature +* **job:** Add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([`ffd49e2`](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) + +### Fix +* **python:** Respect concurrency in worker (#2062) fixes #2063 ([`1b95185`](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) + ## v1.7.0 (2023-07-14) ### Feature * **python:** Add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([`808ee72`](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 6121ca82a3..83f69baa75 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.7.0" +__version__ = "1.8.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 64e55ecc0c..77452f7dc5 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.7.0" +version = "1.8.0" description='BullMQ for Python' readme="README.md" authors = [ From 34b950a9e0be5a0c541eb8a3887704b4136543d4 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Tue, 18 Jul 2023 08:03:56 +0000 Subject: [PATCH 238/322] GITBOOK-174: change request with no subject merged in GitBook --- docs/gitbook/SUMMARY.md | 1 + .../bullmq-pro/groups/max-group-size.md | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 docs/gitbook/bullmq-pro/groups/max-group-size.md diff --git a/docs/gitbook/SUMMARY.md b/docs/gitbook/SUMMARY.md index ee524f9b95..af37fc2d84 100644 --- a/docs/gitbook/SUMMARY.md +++ b/docs/gitbook/SUMMARY.md @@ -66,6 +66,7 @@ * [Groups](bullmq-pro/groups/README.md) * [Rate limiting](bullmq-pro/groups/rate-limiting.md) * [Concurrency](bullmq-pro/groups/concurrency.md) + * [Max group size](bullmq-pro/groups/max-group-size.md) * [Pausing groups](bullmq-pro/groups/pausing-groups.md) * [Batches](bullmq-pro/batches.md) * [NestJs](bullmq-pro/nestjs/README.md) diff --git a/docs/gitbook/bullmq-pro/groups/max-group-size.md b/docs/gitbook/bullmq-pro/groups/max-group-size.md new file mode 100644 index 0000000000..7669debcc3 --- /dev/null +++ b/docs/gitbook/bullmq-pro/groups/max-group-size.md @@ -0,0 +1,29 @@ +# Max group size + +It is possible to set a maximum group size. This can be useful if you want to keep the number of jobs within some limits and you can afford to discard new jobs. + +When a group has reached the defined max size, adding new jobs to that group will result in an exception being thrown, that you can catch and ignore if you do not care about it. + +You can use the "maxSize" option when adding jobs to a group like this: + +```typescript +import { QueuePro, GroupMaxSizeExceededError } from '@taskforcesh/bullmq-pro'; + +const queue = new QueuePro('myQueue', { connection }); + +try { + await queue.add('paint', { foo: 'bar' }, { + group: { + id: '1', + maxSize: 7, + }, + }); +} catch (err) { + if (err instanceof GroupMaxSizeExceededError){ + console.log(roup ${}`) + } else { + throw err; + } +} + +``` From 8abc1bb293c2fd5adbcf88c3aa5c3da7ec1a64fe Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Tue, 18 Jul 2023 08:06:10 +0000 Subject: [PATCH 239/322] GITBOOK-175: change request with no subject merged in GitBook --- docs/gitbook/bullmq-pro/groups/max-group-size.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/gitbook/bullmq-pro/groups/max-group-size.md b/docs/gitbook/bullmq-pro/groups/max-group-size.md index 7669debcc3..ed16a86ff4 100644 --- a/docs/gitbook/bullmq-pro/groups/max-group-size.md +++ b/docs/gitbook/bullmq-pro/groups/max-group-size.md @@ -10,17 +10,17 @@ You can use the "maxSize" option when adding jobs to a group like this: import { QueuePro, GroupMaxSizeExceededError } from '@taskforcesh/bullmq-pro'; const queue = new QueuePro('myQueue', { connection }); - +const groupId = 'my group'; try { await queue.add('paint', { foo: 'bar' }, { group: { - id: '1', + id: groupId, maxSize: 7, }, }); } catch (err) { if (err instanceof GroupMaxSizeExceededError){ - console.log(roup ${}`) + console.log(`Job discarded for group ${groupId}`) } else { throw err; } From 4752a4dda4a2f48526bac7eb9cb322eccd6ea222 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Tue, 18 Jul 2023 08:07:05 +0000 Subject: [PATCH 240/322] GITBOOK-176: change request with no subject merged in GitBook --- docs/gitbook/bullmq-pro/groups/max-group-size.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/gitbook/bullmq-pro/groups/max-group-size.md b/docs/gitbook/bullmq-pro/groups/max-group-size.md index ed16a86ff4..f924ebfa85 100644 --- a/docs/gitbook/bullmq-pro/groups/max-group-size.md +++ b/docs/gitbook/bullmq-pro/groups/max-group-size.md @@ -27,3 +27,9 @@ try { } ``` + + + +{% hint style="info" %} +The maxSize option is not yet available for "addBulk". +{% endhint %} From 841dc87a689897df81438ad1f43e45a4da77c388 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 18 Jul 2023 09:15:04 -0600 Subject: [PATCH 241/322] feat(job): add option for removing children in remove method (python) (#2064) --- python/bullmq/job.py | 4 +- python/bullmq/queue.py | 4 +- python/bullmq/scripts.py | 4 +- src/classes/job.ts | 6 ++- src/classes/queue.ts | 5 ++- src/classes/scripts.ts | 8 ++-- src/commands/includes/isLocked.lua | 22 +++++----- src/commands/removeJob-1.lua | 48 ++++++++++---------- tests/test_flow.ts | 70 +++++++++++++++++++++++++++++- 9 files changed, 125 insertions(+), 46 deletions(-) diff --git a/python/bullmq/job.py b/python/bullmq/job.py index aeac395a72..d1669e990b 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -78,8 +78,8 @@ def updateProgress(self, progress): self.progress = progress return self.scripts.updateProgress(self.id, progress) - async def remove(self): - removed = await self.scripts.remove(self.id) + async def remove(self, opts: dict = {}): + removed = await self.scripts.remove(self.id, opts.get("removeChildren", True)) if not removed: raise Exception(f"Could not remove job {self.id}") diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 26668e1b5f..5ec247484b 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -217,5 +217,5 @@ def close(self): """ return self.redisConnection.close() - def remove(self, job_id: str): - return self.scripts.remove(job_id) + def remove(self, job_id: str, opts: dict = {}): + return self.scripts.remove(job_id, opts.get("removeChildren", True)) diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 1638b39971..d3723943b7 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -223,9 +223,9 @@ async def moveToDelayed(self, job_id: str, timestamp: int, token: str = "0"): raise self.finishedErrors(result, job_id, 'moveToDelayed', 'active') return None - def remove(self, job_id: str): + def remove(self, job_id: str, remove_children: bool): keys = self.getKeys(['']) - args = [job_id] + args = [job_id, 1 if remove_children else 0] return self.commands["removeJob"](keys=keys, args=args) diff --git a/src/classes/job.ts b/src/classes/job.ts index d0552c26bf..54de2cf637 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -493,14 +493,16 @@ export class Job< * Completely remove the job from the queue. * Note, this call will throw an exception if the job * is being processed when the call is performed. + * + * @param opts - Options to remove a job */ - async remove(): Promise { + async remove({ removeChildren = true } = {}): Promise { await this.queue.waitUntilReady(); const queue = this.queue; const job = this; - const removed = await this.scripts.remove(job.id); + const removed = await this.scripts.remove(job.id, removeChildren); if (removed) { queue.emit('removed', job); } else { diff --git a/src/classes/queue.ts b/src/classes/queue.ts index 2c4edeb74b..fd2ba25c06 100644 --- a/src/classes/queue.ts +++ b/src/classes/queue.ts @@ -352,11 +352,12 @@ export class Queue< * dependencies. * * @param jobId - The id of the job to remove + * @param opts - Options to remove a job * @returns 1 if it managed to remove the job or 0 if the job or * any of its dependencies were locked. */ - remove(jobId: string): Promise { - return this.scripts.remove(jobId); + remove(jobId: string, { removeChildren = true } = {}): Promise { + return this.scripts.remove(jobId, removeChildren); } /** diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index 80ea3106ca..3e70f99f64 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -181,11 +181,13 @@ export class Scripts { return (client).removeRepeatable(args); } - async remove(jobId: string): Promise { + async remove(jobId: string, removeChildren: boolean): Promise { const client = await this.queue.client; - const keys = [''].map(name => this.queue.toKey(name)); - return (client).removeJob(keys.concat([jobId])); + const keys: (string | number)[] = [''].map(name => this.queue.toKey(name)); + return (client).removeJob( + keys.concat([jobId, removeChildren ? 1 : 0]), + ); } async extendLock( diff --git a/src/commands/includes/isLocked.lua b/src/commands/includes/isLocked.lua index 57ec729f1d..4795007162 100644 --- a/src/commands/includes/isLocked.lua +++ b/src/commands/includes/isLocked.lua @@ -6,22 +6,24 @@ boolean ]] -local function isLocked( prefix, jobId) +local function isLocked( prefix, jobId, removeChildren) local jobKey = prefix .. jobId; -- Check if this job is locked local lockKey = jobKey .. ':lock' local lock = rcall("GET", lockKey) if not lock then - local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies") - if (#dependencies > 0) then - for i, childJobKey in ipairs(dependencies) do - -- We need to get the jobId for this job. - local childJobId = getJobIdFromKey(childJobKey) - local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId) - local result = isLocked( childJobPrefix, childJobId ) - if result then - return true + if removeChildren == "1" then + local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies") + if (#dependencies > 0) then + for i, childJobKey in ipairs(dependencies) do + -- We need to get the jobId for this job. + local childJobId = getJobIdFromKey(childJobKey) + local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId) + local result = isLocked( childJobPrefix, childJobId, removeChildren ) + if result then + return true + end end end end diff --git a/src/commands/removeJob-1.lua b/src/commands/removeJob-1.lua index 1b75630fa3..9016b19d5d 100644 --- a/src/commands/removeJob-1.lua +++ b/src/commands/removeJob-1.lua @@ -4,7 +4,9 @@ Input: KEYS[1] queue prefix + ARGV[1] jobId + ARGV[2] remove children Events: 'removed' @@ -18,32 +20,34 @@ local rcall = redis.call --- @include "includes/removeJobFromAnyState" --- @include "includes/removeParentDependencyKey" -local function removeJob( prefix, jobId, parentKey) +local function removeJob( prefix, jobId, parentKey, removeChildren) local jobKey = prefix .. jobId; removeParentDependencyKey(jobKey, false, parentKey) - -- Check if this job has children - -- If so, we are going to try to remove the children recursively in deep first way because - -- if some job is locked we must exit with and error. - --local countProcessed = rcall("HLEN", jobKey .. ":processed") - local processed = rcall("HGETALL", jobKey .. ":processed") - - if (#processed > 0) then - for i = 1, #processed, 2 do - local childJobId = getJobIdFromKey(processed[i]) - local childJobPrefix = getJobKeyPrefix(processed[i], childJobId) - removeJob( childJobPrefix, childJobId, jobKey ) + if removeChildren == "1" then + -- Check if this job has children + -- If so, we are going to try to remove the children recursively in deep first way because + -- if some job is locked we must exit with and error. + --local countProcessed = rcall("HLEN", jobKey .. ":processed") + local processed = rcall("HGETALL", jobKey .. ":processed") + + if (#processed > 0) then + for i = 1, #processed, 2 do + local childJobId = getJobIdFromKey(processed[i]) + local childJobPrefix = getJobKeyPrefix(processed[i], childJobId) + removeJob( childJobPrefix, childJobId, jobKey, removeChildren ) + end end - end - local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies") - if (#dependencies > 0) then - for i, childJobKey in ipairs(dependencies) do - -- We need to get the jobId for this job. - local childJobId = getJobIdFromKey(childJobKey) - local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId) - removeJob( childJobPrefix, childJobId, jobKey ) + local dependencies = rcall("SMEMBERS", jobKey .. ":dependencies") + if (#dependencies > 0) then + for i, childJobKey in ipairs(dependencies) do + -- We need to get the jobId for this job. + local childJobId = getJobIdFromKey(childJobKey) + local childJobPrefix = getJobKeyPrefix(childJobKey, childJobId) + removeJob( childJobPrefix, childJobId, jobKey, removeChildren ) + end end end @@ -64,8 +68,8 @@ end local prefix = KEYS[1] -if not isLocked(prefix, ARGV[1]) then - removeJob(prefix, ARGV[1]) +if not isLocked(prefix, ARGV[1], ARGV[2]) then + removeJob(prefix, ARGV[1], nil, ARGV[2]) return 1 end return 0 diff --git a/tests/test_flow.ts b/tests/test_flow.ts index 2d945d9b1f..a15c901f0e 100644 --- a/tests/test_flow.ts +++ b/tests/test_flow.ts @@ -2741,7 +2741,7 @@ describe('flows', () => { }); }); - describe('remove', () => { + describe('.remove', () => { it('should remove all children when removing a parent', async () => { const parentQueueName = `parent-queue-${v4()}`; const name = 'child-job'; @@ -2806,6 +2806,74 @@ describe('flows', () => { await removeAllQueueData(new IORedis(), parentQueueName); }); + describe('when removeChildren option is provided as false', () => { + it('does not remove any children when removing a parent', async () => { + const parentQueueName = `parent-queue-${v4()}`; + const name = 'child-job'; + + const flow = new FlowProducer({ connection }); + const tree = await flow.add({ + name: 'parent-job', + queueName: parentQueueName, + data: {}, + children: [ + { name, data: { idx: 0, foo: 'bar' }, queueName }, + { + name, + data: { idx: 0, foo: 'baz' }, + queueName, + children: [{ name, data: { idx: 0, foo: 'qux' }, queueName }], + }, + ], + }); + + expect(await tree.job.getState()).to.be.equal('waiting-children'); + + expect(await tree.children[0].job.getState()).to.be.equal('waiting'); + expect(await tree.children[1].job.getState()).to.be.equal( + 'waiting-children', + ); + + expect(await tree.children[1].children[0].job.getState()).to.be.equal( + 'waiting', + ); + + for (let i = 0; i < tree.children.length; i++) { + const child = tree.children[i]; + const childJob = await Job.fromId(queue, child.job.id); + expect(childJob.parent).to.deep.equal({ + id: tree.job.id, + queueKey: `bull:${parentQueueName}`, + }); + } + + await tree.job.remove({ removeChildren: false }); + + const parentQueue = new Queue(parentQueueName, { connection }); + const parentJob = await Job.fromId(parentQueue, tree.job.id); + expect(parentJob).to.be.undefined; + + for (let i = 0; i < tree.children.length; i++) { + const child = tree.children[i]; + const childJob = await Job.fromId(queue, child.job.id); + expect(childJob).to.not.be.undefined; + } + + expect(await tree.children[0].job.getState()).to.be.equal('waiting'); + expect(await tree.children[1].job.getState()).to.be.equal( + 'waiting-children', + ); + expect(await tree.job.getState()).to.be.equal('unknown'); + + const jobs = await queue.getJobCountByTypes('waiting'); + expect(jobs).to.be.equal(2); + + await flow.close(); + await parentQueue.close(); + await removeAllQueueData(new IORedis(), parentQueueName); + }); + }); + describe('when there are processed children', () => { it('removes all children when removing a parent', async () => { const parentQueueName = `parent-queue-${v4()}`; From 2b31259878b5c6d46429502e1fadf51b74d8872c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 18 Jul 2023 15:16:19 +0000 Subject: [PATCH 242/322] chore(release): 4.5.0 [skip ci] # [4.5.0](https://github.com/taskforcesh/bullmq/compare/v4.4.0...v4.5.0) (2023-07-18) ### Bug Fixes * **python:** respect concurrency in worker ([#2062](https://github.com/taskforcesh/bullmq/issues/2062)) fixes [#2063](https://github.com/taskforcesh/bullmq/issues/2063) ([1b95185](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) ### Features * **job:** add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([841dc87](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) --- docs/gitbook/changelog.md | 12 ++++++++++++ package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index ba6eff7c94..eb030245a1 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,15 @@ +# [4.5.0](https://github.com/taskforcesh/bullmq/compare/v4.4.0...v4.5.0) (2023-07-18) + + +### Bug Fixes + +* **python:** respect concurrency in worker ([#2062](https://github.com/taskforcesh/bullmq/issues/2062)) fixes [#2063](https://github.com/taskforcesh/bullmq/issues/2063) ([1b95185](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) + + +### Features + +* **job:** add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([841dc87](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) + # [4.4.0](https://github.com/taskforcesh/bullmq/compare/v4.3.0...v4.4.0) (2023-07-17) diff --git a/package.json b/package.json index dbd1696c16..8ed8dad1d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.4.0", + "version": "4.5.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 38b19d8a5874fb9725b1d40d7656fd7c312710d9 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Tue, 18 Jul 2023 15:17:27 +0000 Subject: [PATCH 243/322] 1.9.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 4 ++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 202396e6ae..a94f7a69b3 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,10 @@ +## v1.9.0 (2023-07-18) +### Feature +* **job:** Add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([`841dc87`](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) + ## v1.8.0 (2023-07-17) ### Feature * **job:** Add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([`ffd49e2`](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 83f69baa75..18746d9b97 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.8.0" +__version__ = "1.9.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 77452f7dc5..25b797eb79 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.8.0" +version = "1.9.0" description='BullMQ for Python' readme="README.md" authors = [ From 75a594f36a2e8c62e16f55d917d1b8f906d18a8c Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 19 Jul 2023 10:06:55 -0600 Subject: [PATCH 244/322] docs(api): remove old api files in favor of typedoc (#2078) --- .../api/bullmq.activeeventcallback3.md | 13 -- docs/gitbook/api/bullmq.addchildrenopts.md | 21 --- .../api/bullmq.addchildrenopts.multi.md | 11 -- .../api/bullmq.addchildrenopts.nodes.md | 11 -- .../api/bullmq.addchildrenopts.parent.md | 17 -- .../api/bullmq.addchildrenopts.queuesopts.md | 11 -- docs/gitbook/api/bullmq.addnodeopts.md | 21 --- docs/gitbook/api/bullmq.addnodeopts.multi.md | 11 -- docs/gitbook/api/bullmq.addnodeopts.node.md | 11 -- docs/gitbook/api/bullmq.addnodeopts.parent.md | 17 -- .../api/bullmq.addnodeopts.queuesopts.md | 13 -- ...ullmq.advancedoptions.backoffstrategies.md | 13 -- docs/gitbook/api/bullmq.advancedoptions.md | 18 -- docs/gitbook/api/bullmq.array2obj.md | 22 --- docs/gitbook/api/bullmq.asyncsend.md | 11 -- docs/gitbook/api/bullmq.backofffunction.md | 13 -- .../api/bullmq.backoffoptions.delay.md | 13 -- docs/gitbook/api/bullmq.backoffoptions.md | 21 --- .../gitbook/api/bullmq.backoffoptions.type.md | 13 -- .../api/bullmq.backoffs.builtinstrategies.md | 11 -- docs/gitbook/api/bullmq.backoffs.calculate.md | 26 --- docs/gitbook/api/bullmq.backoffs.md | 25 --- docs/gitbook/api/bullmq.backoffs.normalize.md | 22 --- docs/gitbook/api/bullmq.bulkjoboptions.md | 13 -- docs/gitbook/api/bullmq.childcommand.md | 20 --- docs/gitbook/api/bullmq.childmessage.cmd.md | 11 -- docs/gitbook/api/bullmq.childmessage.err.md | 11 -- docs/gitbook/api/bullmq.childmessage.md | 20 --- docs/gitbook/api/bullmq.childmessage.value.md | 11 -- .../api/bullmq.childpool._constructor_.md | 20 --- docs/gitbook/api/bullmq.childpool.clean.md | 15 -- docs/gitbook/api/bullmq.childpool.free.md | 13 -- .../api/bullmq.childpool.getallfree.md | 15 -- docs/gitbook/api/bullmq.childpool.getfree.md | 22 --- docs/gitbook/api/bullmq.childpool.kill.md | 23 --- docs/gitbook/api/bullmq.childpool.md | 37 ---- docs/gitbook/api/bullmq.childpool.release.md | 22 --- docs/gitbook/api/bullmq.childpool.remove.md | 22 --- docs/gitbook/api/bullmq.childpool.retain.md | 22 --- docs/gitbook/api/bullmq.childpool.retained.md | 13 -- docs/gitbook/api/bullmq.childprocessext.md | 19 --- .../api/bullmq.childprocessext.processfile.md | 11 -- ...bullmq.childprocessor.currentjobpromise.md | 11 -- .../gitbook/api/bullmq.childprocessor.init.md | 22 --- docs/gitbook/api/bullmq.childprocessor.md | 33 ---- .../api/bullmq.childprocessor.processor.md | 11 -- .../api/bullmq.childprocessor.start.md | 22 --- .../api/bullmq.childprocessor.status.md | 11 -- .../gitbook/api/bullmq.childprocessor.stop.md | 15 -- ...childprocessor.waitforcurrentjobandexit.md | 15 -- docs/gitbook/api/bullmq.childsend.md | 11 -- .../api/bullmq.cleanedeventcallback3.md | 13 -- .../api/bullmq.clientcommandmessagereg.md | 11 -- docs/gitbook/api/bullmq.clienttype.md | 19 --- docs/gitbook/api/bullmq.clusteroptions.md | 11 -- docs/gitbook/api/bullmq.command.md | 19 --- docs/gitbook/api/bullmq.command.name.md | 11 -- docs/gitbook/api/bullmq.command.options.md | 14 -- .../api/bullmq.completedeventcallback3.md | 13 -- docs/gitbook/api/bullmq.connectionoptions.md | 13 -- docs/gitbook/api/bullmq.delay.md | 22 --- docs/gitbook/api/bullmq.delay_time_1.md | 11 -- docs/gitbook/api/bullmq.delay_time_5.md | 11 -- docs/gitbook/api/bullmq.dependenciesopts.md | 19 --- .../api/bullmq.dependenciesopts.processed.md | 14 -- .../bullmq.dependenciesopts.unprocessed.md | 14 -- docs/gitbook/api/bullmq.entryid.md | 11 -- docs/gitbook/api/bullmq.entryraw.md | 13 -- docs/gitbook/api/bullmq.errorcode.md | 22 --- .../gitbook/api/bullmq.erroreventcallback3.md | 11 -- docs/gitbook/api/bullmq.errorobject.md | 13 -- docs/gitbook/api/bullmq.eventcallback3.md | 11 -- .../api/bullmq.failedeventcallback3.md | 13 -- .../api/bullmq.finishedpropvalattribute.md | 11 -- docs/gitbook/api/bullmq.finishedstatus.md | 11 -- docs/gitbook/api/bullmq.flowjob.children.md | 11 -- docs/gitbook/api/bullmq.flowjob.data.md | 11 -- docs/gitbook/api/bullmq.flowjob.md | 23 --- docs/gitbook/api/bullmq.flowjob.name.md | 11 -- docs/gitbook/api/bullmq.flowjob.opts.md | 11 -- docs/gitbook/api/bullmq.flowjob.prefix.md | 11 -- docs/gitbook/api/bullmq.flowjob.queuename.md | 11 -- docs/gitbook/api/bullmq.flowopts.md | 18 -- .../api/bullmq.flowopts.queuesoptions.md | 13 -- .../api/bullmq.flowproducer._constructor_.md | 20 --- docs/gitbook/api/bullmq.flowproducer.add.md | 27 --- .../api/bullmq.flowproducer.addbulk.md | 28 --- .../gitbook/api/bullmq.flowproducer.client.md | 11 -- docs/gitbook/api/bullmq.flowproducer.close.md | 15 -- .../api/bullmq.flowproducer.closing.md | 11 -- .../api/bullmq.flowproducer.connection.md | 11 -- .../api/bullmq.flowproducer.disconnect.md | 15 -- .../api/bullmq.flowproducer.getflow.md | 24 --- docs/gitbook/api/bullmq.flowproducer.keys.md | 11 -- docs/gitbook/api/bullmq.flowproducer.md | 43 ----- docs/gitbook/api/bullmq.flowproducer.opts.md | 11 -- .../api/bullmq.flowproducer.queuekeys.md | 11 -- docs/gitbook/api/bullmq.flowproducer.tokey.md | 11 -- docs/gitbook/api/bullmq.flowqueuesopts.md | 13 -- .../api/bullmq.getnextjoboptions.block.md | 11 -- docs/gitbook/api/bullmq.getnextjoboptions.md | 18 -- docs/gitbook/api/bullmq.getparentkey.md | 25 --- docs/gitbook/api/bullmq.iconnection.client.md | 11 -- docs/gitbook/api/bullmq.iconnection.md | 25 --- .../api/bullmq.iconnection.waituntilready.md | 15 -- docs/gitbook/api/bullmq.isempty.md | 22 --- .../api/bullmq.isnotconnectionerror.md | 22 --- docs/gitbook/api/bullmq.isrediscluster.md | 22 --- docs/gitbook/api/bullmq.isredisinstance.md | 22 --- docs/gitbook/api/bullmq.job._constructor_.md | 27 --- docs/gitbook/api/bullmq.job.addjob.md | 26 --- docs/gitbook/api/bullmq.job.asjson.md | 18 -- docs/gitbook/api/bullmq.job.asjsonsandbox.md | 18 -- docs/gitbook/api/bullmq.job.attemptsmade.md | 13 -- docs/gitbook/api/bullmq.job.changedelay.md | 26 --- docs/gitbook/api/bullmq.job.create.md | 28 --- docs/gitbook/api/bullmq.job.createbulk.md | 30 ---- docs/gitbook/api/bullmq.job.data.md | 13 -- docs/gitbook/api/bullmq.job.discard.md | 17 -- docs/gitbook/api/bullmq.job.extendlock.md | 25 --- docs/gitbook/api/bullmq.job.failedreason.md | 13 -- docs/gitbook/api/bullmq.job.finishedon.md | 13 -- docs/gitbook/api/bullmq.job.fromid.md | 26 --- docs/gitbook/api/bullmq.job.fromjson.md | 27 --- .../api/bullmq.job.getchildrenvalues.md | 21 --- .../gitbook/api/bullmq.job.getdependencies.md | 31 ---- .../api/bullmq.job.getdependenciescount.md | 32 ---- docs/gitbook/api/bullmq.job.getstate.md | 19 --- docs/gitbook/api/bullmq.job.id.md | 11 -- docs/gitbook/api/bullmq.job.isactive.md | 17 -- docs/gitbook/api/bullmq.job.iscompleted.md | 17 -- docs/gitbook/api/bullmq.job.isdelayed.md | 17 -- docs/gitbook/api/bullmq.job.isfailed.md | 17 -- docs/gitbook/api/bullmq.job.iswaiting.md | 17 -- .../api/bullmq.job.iswaitingchildren.md | 17 -- docs/gitbook/api/bullmq.job.log.md | 24 --- docs/gitbook/api/bullmq.job.md | 78 --------- .../gitbook/api/bullmq.job.movetocompleted.md | 28 --- docs/gitbook/api/bullmq.job.movetodelayed.md | 25 --- docs/gitbook/api/bullmq.job.movetofailed.md | 28 --- .../api/bullmq.job.movetowaitingchildren.md | 27 --- docs/gitbook/api/bullmq.job.name.md | 13 -- docs/gitbook/api/bullmq.job.opts.md | 13 -- docs/gitbook/api/bullmq.job.parent.md | 13 -- docs/gitbook/api/bullmq.job.parentkey.md | 13 -- docs/gitbook/api/bullmq.job.prefix.md | 11 -- docs/gitbook/api/bullmq.job.processedon.md | 13 -- docs/gitbook/api/bullmq.job.progress.md | 13 -- docs/gitbook/api/bullmq.job.promote.md | 17 -- docs/gitbook/api/bullmq.job.queue.md | 11 -- docs/gitbook/api/bullmq.job.queuename.md | 11 -- docs/gitbook/api/bullmq.job.remove.md | 17 -- docs/gitbook/api/bullmq.job.retry.md | 26 --- docs/gitbook/api/bullmq.job.returnvalue.md | 13 -- docs/gitbook/api/bullmq.job.stacktrace.md | 13 -- docs/gitbook/api/bullmq.job.timestamp.md | 13 -- docs/gitbook/api/bullmq.job.tojson.md | 15 -- docs/gitbook/api/bullmq.job.tokey.md | 11 -- docs/gitbook/api/bullmq.job.update.md | 24 --- docs/gitbook/api/bullmq.job.updateprogress.md | 24 --- .../api/bullmq.job.waituntilfinished.md | 25 --- docs/gitbook/api/bullmq.jobdata.md | 13 -- docs/gitbook/api/bullmq.jobidforgroup.md | 24 --- .../api/bullmq.jobinformation3.cron.md | 11 -- .../api/bullmq.jobinformation3.enddate.md | 11 -- docs/gitbook/api/bullmq.jobinformation3.id.md | 11 -- .../gitbook/api/bullmq.jobinformation3.key.md | 11 -- docs/gitbook/api/bullmq.jobinformation3.md | 24 --- .../api/bullmq.jobinformation3.name.md | 11 -- .../api/bullmq.jobinformation3.next.md | 11 -- docs/gitbook/api/bullmq.jobinformation3.tz.md | 11 -- .../api/bullmq.jobjson.attemptsmade.md | 11 -- docs/gitbook/api/bullmq.jobjson.data.md | 11 -- .../api/bullmq.jobjson.failedreason.md | 11 -- docs/gitbook/api/bullmq.jobjson.finishedon.md | 11 -- docs/gitbook/api/bullmq.jobjson.id.md | 11 -- docs/gitbook/api/bullmq.jobjson.md | 30 ---- docs/gitbook/api/bullmq.jobjson.name.md | 11 -- docs/gitbook/api/bullmq.jobjson.opts.md | 11 -- docs/gitbook/api/bullmq.jobjson.parentkey.md | 11 -- .../gitbook/api/bullmq.jobjson.processedon.md | 11 -- docs/gitbook/api/bullmq.jobjson.progress.md | 11 -- .../gitbook/api/bullmq.jobjson.returnvalue.md | 11 -- docs/gitbook/api/bullmq.jobjson.stacktrace.md | 11 -- docs/gitbook/api/bullmq.jobjson.timestamp.md | 11 -- .../api/bullmq.jobjsonraw.attemptsmade.md | 11 -- docs/gitbook/api/bullmq.jobjsonraw.data.md | 11 -- .../api/bullmq.jobjsonraw.failedreason.md | 11 -- .../api/bullmq.jobjsonraw.finishedon.md | 11 -- docs/gitbook/api/bullmq.jobjsonraw.id.md | 11 -- docs/gitbook/api/bullmq.jobjsonraw.md | 31 ---- docs/gitbook/api/bullmq.jobjsonraw.name.md | 11 -- docs/gitbook/api/bullmq.jobjsonraw.opts.md | 11 -- docs/gitbook/api/bullmq.jobjsonraw.parent.md | 11 -- .../api/bullmq.jobjsonraw.parentkey.md | 11 -- .../api/bullmq.jobjsonraw.processedon.md | 11 -- .../gitbook/api/bullmq.jobjsonraw.progress.md | 11 -- .../api/bullmq.jobjsonraw.returnvalue.md | 11 -- .../api/bullmq.jobjsonraw.stacktrace.md | 11 -- .../api/bullmq.jobjsonraw.timestamp.md | 11 -- docs/gitbook/api/bullmq.jobjsonsandbox.md | 17 -- docs/gitbook/api/bullmq.jobnode.children.md | 11 -- docs/gitbook/api/bullmq.jobnode.job.md | 11 -- docs/gitbook/api/bullmq.jobnode.md | 19 --- docs/gitbook/api/bullmq.jobpromise3.cancel.md | 17 -- docs/gitbook/api/bullmq.jobpromise3.md | 18 -- .../api/bullmq.jobsoptions.attempts.md | 13 -- .../gitbook/api/bullmq.jobsoptions.backoff.md | 13 -- docs/gitbook/api/bullmq.jobsoptions.delay.md | 13 -- docs/gitbook/api/bullmq.jobsoptions.jobid.md | 13 -- docs/gitbook/api/bullmq.jobsoptions.lifo.md | 13 -- docs/gitbook/api/bullmq.jobsoptions.md | 33 ---- docs/gitbook/api/bullmq.jobsoptions.parent.md | 14 -- .../api/bullmq.jobsoptions.prevmillis.md | 13 -- .../api/bullmq.jobsoptions.priority.md | 13 -- .../api/bullmq.jobsoptions.ratelimiterkey.md | 13 -- .../bullmq.jobsoptions.removeoncomplete.md | 13 -- .../api/bullmq.jobsoptions.removeonfail.md | 13 -- docs/gitbook/api/bullmq.jobsoptions.repeat.md | 13 -- .../api/bullmq.jobsoptions.sizelimit.md | 13 -- .../api/bullmq.jobsoptions.stacktracelimit.md | 13 -- .../gitbook/api/bullmq.jobsoptions.timeout.md | 13 -- .../api/bullmq.jobsoptions.timestamp.md | 13 -- docs/gitbook/api/bullmq.jobstate.md | 13 -- docs/gitbook/api/bullmq.jobstatusclean3.md | 11 -- docs/gitbook/api/bullmq.jobtype.md | 13 -- docs/gitbook/api/bullmq.keepjobs.age.md | 13 -- docs/gitbook/api/bullmq.keepjobs.count.md | 13 -- docs/gitbook/api/bullmq.keepjobs.md | 23 --- docs/gitbook/api/bullmq.keysmap.md | 13 -- docs/gitbook/api/bullmq.killasync.md | 26 --- docs/gitbook/api/bullmq.lengthinutf8bytes.md | 24 --- docs/gitbook/api/bullmq.md | 159 ------------------ docs/gitbook/api/bullmq.metrics.count.md | 11 -- docs/gitbook/api/bullmq.metrics.data.md | 11 -- docs/gitbook/api/bullmq.metrics.md | 20 --- docs/gitbook/api/bullmq.metrics.meta.md | 15 -- .../bullmq.metricsoptions.maxdatapoints.md | 13 -- docs/gitbook/api/bullmq.metricsoptions.md | 18 -- docs/gitbook/api/bullmq.metricstime.md | 25 --- docs/gitbook/api/bullmq.minimalqueue.md | 13 -- .../api/bullmq.movetochildrenopts.child.md | 14 -- docs/gitbook/api/bullmq.movetochildrenopts.md | 19 --- .../bullmq.movetochildrenopts.timestamp.md | 11 -- docs/gitbook/api/bullmq.nodeopts.depth.md | 13 -- docs/gitbook/api/bullmq.nodeopts.id.md | 13 -- .../api/bullmq.nodeopts.maxchildren.md | 13 -- docs/gitbook/api/bullmq.nodeopts.md | 22 --- docs/gitbook/api/bullmq.nodeopts.prefix.md | 13 -- docs/gitbook/api/bullmq.nodeopts.queuename.md | 13 -- .../api/bullmq.obliterateopts.count.md | 13 -- .../api/bullmq.obliterateopts.force.md | 13 -- docs/gitbook/api/bullmq.obliterateopts.md | 19 --- docs/gitbook/api/bullmq.parent.data.md | 11 -- docs/gitbook/api/bullmq.parent.md | 24 --- docs/gitbook/api/bullmq.parent.name.md | 11 -- docs/gitbook/api/bullmq.parent.opts.md | 11 -- docs/gitbook/api/bullmq.parent.prefix.md | 11 -- docs/gitbook/api/bullmq.parent.queue.md | 11 -- docs/gitbook/api/bullmq.parentcommand.md | 24 --- docs/gitbook/api/bullmq.parentkeys.id.md | 11 -- docs/gitbook/api/bullmq.parentkeys.md | 19 --- .../gitbook/api/bullmq.parentkeys.queuekey.md | 11 -- docs/gitbook/api/bullmq.parentmessage.cmd.md | 11 -- docs/gitbook/api/bullmq.parentmessage.err.md | 11 -- docs/gitbook/api/bullmq.parentmessage.job.md | 11 -- docs/gitbook/api/bullmq.parentmessage.md | 21 --- .../gitbook/api/bullmq.parentmessage.value.md | 11 -- docs/gitbook/api/bullmq.parentopts.md | 15 -- docs/gitbook/api/bullmq.parentsend.md | 11 -- docs/gitbook/api/bullmq.processor.md | 15 -- .../api/bullmq.progresseventcallback3.md | 13 -- .../gitbook/api/bullmq.queue._constructor_.md | 22 --- docs/gitbook/api/bullmq.queue.add.md | 26 --- docs/gitbook/api/bullmq.queue.addbulk.md | 28 --- docs/gitbook/api/bullmq.queue.clean.md | 28 --- docs/gitbook/api/bullmq.queue.close.md | 15 -- .../api/bullmq.queue.defaultjoboptions.md | 13 -- docs/gitbook/api/bullmq.queue.drain.md | 24 --- docs/gitbook/api/bullmq.queue.emit.md | 23 --- .../api/bullmq.queue.getrepeatablejobs.md | 34 ---- docs/gitbook/api/bullmq.queue.ispaused.md | 17 -- docs/gitbook/api/bullmq.queue.jobsopts.md | 11 -- docs/gitbook/api/bullmq.queue.limiter.md | 13 -- docs/gitbook/api/bullmq.queue.md | 57 ------- docs/gitbook/api/bullmq.queue.obliterate.md | 26 --- docs/gitbook/api/bullmq.queue.off.md | 23 --- docs/gitbook/api/bullmq.queue.on.md | 23 --- docs/gitbook/api/bullmq.queue.once.md | 23 --- docs/gitbook/api/bullmq.queue.pause.md | 21 --- docs/gitbook/api/bullmq.queue.remove.md | 26 --- .../api/bullmq.queue.removerepeatable.md | 24 --- .../api/bullmq.queue.removerepeatablebykey.md | 22 --- docs/gitbook/api/bullmq.queue.repeat.md | 11 -- docs/gitbook/api/bullmq.queue.resume.md | 19 --- docs/gitbook/api/bullmq.queue.retryjobs.md | 29 ---- docs/gitbook/api/bullmq.queue.token.md | 11 -- docs/gitbook/api/bullmq.queue.trimevents.md | 24 --- .../api/bullmq.queue3._constructor_.md | 21 --- docs/gitbook/api/bullmq.queue3.add.md | 24 --- docs/gitbook/api/bullmq.queue3.base64name.md | 17 -- docs/gitbook/api/bullmq.queue3.clean.md | 26 --- docs/gitbook/api/bullmq.queue3.clientname.md | 17 -- docs/gitbook/api/bullmq.queue3.close.md | 19 --- docs/gitbook/api/bullmq.queue3.count.md | 17 -- .../api/bullmq.queue3.detachlistener.md | 23 --- docs/gitbook/api/bullmq.queue3.empty.md | 17 -- docs/gitbook/api/bullmq.queue3.getactive.md | 25 --- .../api/bullmq.queue3.getactivecount.md | 17 -- .../gitbook/api/bullmq.queue3.getcompleted.md | 25 --- .../api/bullmq.queue3.getcompletedcount.md | 17 -- docs/gitbook/api/bullmq.queue3.getdelayed.md | 25 --- .../api/bullmq.queue3.getdelayedcount.md | 17 -- docs/gitbook/api/bullmq.queue3.getfailed.md | 25 --- .../api/bullmq.queue3.getfailedcount.md | 17 -- docs/gitbook/api/bullmq.queue3.getjob.md | 24 --- .../api/bullmq.queue3.getjobcountbytypes.md | 24 --- .../gitbook/api/bullmq.queue3.getjobcounts.md | 26 --- docs/gitbook/api/bullmq.queue3.getjoblogs.md | 29 ---- docs/gitbook/api/bullmq.queue3.getjobs.md | 27 --- docs/gitbook/api/bullmq.queue3.getnextjob.md | 15 -- .../api/bullmq.queue3.getpausedcount.md | 17 -- .../api/bullmq.queue3.getrepeatablecount.md | 17 -- .../api/bullmq.queue3.getrepeatablejobs.md | 26 --- docs/gitbook/api/bullmq.queue3.getwaiting.md | 25 --- .../api/bullmq.queue3.getwaitingcount.md | 17 -- docs/gitbook/api/bullmq.queue3.getworkers.md | 19 --- docs/gitbook/api/bullmq.queue3.isready.md | 17 -- .../api/bullmq.queue3.isworkerpaused.md | 15 -- docs/gitbook/api/bullmq.queue3.md | 94 ----------- docs/gitbook/api/bullmq.queue3.name.md | 13 -- .../api/bullmq.queue3.nextrepeatablejob.md | 27 --- docs/gitbook/api/bullmq.queue3.off.md | 23 --- docs/gitbook/api/bullmq.queue3.on.md | 25 --- docs/gitbook/api/bullmq.queue3.on_1.md | 25 --- docs/gitbook/api/bullmq.queue3.on_10.md | 25 --- docs/gitbook/api/bullmq.queue3.on_11.md | 25 --- docs/gitbook/api/bullmq.queue3.on_12.md | 25 --- docs/gitbook/api/bullmq.queue3.on_2.md | 25 --- docs/gitbook/api/bullmq.queue3.on_3.md | 25 --- docs/gitbook/api/bullmq.queue3.on_4.md | 25 --- docs/gitbook/api/bullmq.queue3.on_5.md | 25 --- docs/gitbook/api/bullmq.queue3.on_6.md | 25 --- docs/gitbook/api/bullmq.queue3.on_7.md | 25 --- docs/gitbook/api/bullmq.queue3.on_8.md | 25 --- docs/gitbook/api/bullmq.queue3.on_9.md | 25 --- docs/gitbook/api/bullmq.queue3.once.md | 23 --- .../api/bullmq.queue3.parseclientlist.md | 26 --- docs/gitbook/api/bullmq.queue3.pause.md | 21 --- docs/gitbook/api/bullmq.queue3.pauseworker.md | 22 --- docs/gitbook/api/bullmq.queue3.process.md | 30 ---- docs/gitbook/api/bullmq.queue3.queueevents.md | 11 -- .../api/bullmq.queue3.removealllisteners.md | 22 --- .../api/bullmq.queue3.removelistener.md | 23 --- .../api/bullmq.queue3.removerepeatable.md | 27 --- .../bullmq.queue3.removerepeatablebykey.md | 24 --- docs/gitbook/api/bullmq.queue3.resume.md | 21 --- .../gitbook/api/bullmq.queue3.resumeworker.md | 15 -- docs/gitbook/api/bullmq.queue3.retryjob.md | 22 --- .../api/bullmq.queue3.setworkername.md | 17 -- docs/gitbook/api/bullmq.queue_event_suffix.md | 11 -- .../api/bullmq.queue_scheduler_suffix.md | 11 -- .../api/bullmq.queuebase._constructor_.md | 22 --- .../api/bullmq.queuebase.base64name.md | 15 -- docs/gitbook/api/bullmq.queuebase.client.md | 11 -- .../api/bullmq.queuebase.clientname.md | 22 --- docs/gitbook/api/bullmq.queuebase.close.md | 15 -- docs/gitbook/api/bullmq.queuebase.closing.md | 11 -- .../api/bullmq.queuebase.connection.md | 11 -- .../api/bullmq.queuebase.disconnect.md | 15 -- docs/gitbook/api/bullmq.queuebase.emit.md | 23 --- docs/gitbook/api/bullmq.queuebase.keys.md | 11 -- docs/gitbook/api/bullmq.queuebase.md | 43 ----- docs/gitbook/api/bullmq.queuebase.name.md | 11 -- docs/gitbook/api/bullmq.queuebase.opts.md | 11 -- .../api/bullmq.queuebase.redisversion.md | 11 -- docs/gitbook/api/bullmq.queuebase.tokey.md | 11 -- .../api/bullmq.queuebase.waituntilready.md | 15 -- ...lmq.queuebaseoptions.blockingconnection.md | 13 -- .../api/bullmq.queuebaseoptions.connection.md | 13 -- docs/gitbook/api/bullmq.queuebaseoptions.md | 23 --- .../api/bullmq.queuebaseoptions.prefix.md | 13 -- ...ullmq.queuebaseoptions.sharedconnection.md | 13 -- .../api/bullmq.queueevents._constructor_.md | 22 --- docs/gitbook/api/bullmq.queueevents.close.md | 15 -- docs/gitbook/api/bullmq.queueevents.emit.md | 23 --- docs/gitbook/api/bullmq.queueevents.md | 34 ---- docs/gitbook/api/bullmq.queueevents.off.md | 23 --- docs/gitbook/api/bullmq.queueevents.on.md | 23 --- docs/gitbook/api/bullmq.queueevents.once.md | 23 --- docs/gitbook/api/bullmq.queueevents.run.md | 15 -- ...queueeventslistener._retries-exhausted_.md | 18 -- ....queueeventslistener._waiting-children_.md | 17 -- .../api/bullmq.queueeventslistener.active.md | 18 -- .../api/bullmq.queueeventslistener.added.md | 20 --- .../api/bullmq.queueeventslistener.cleaned.md | 17 -- .../bullmq.queueeventslistener.completed.md | 19 --- .../api/bullmq.queueeventslistener.delayed.md | 18 -- .../api/bullmq.queueeventslistener.drained.md | 15 -- .../api/bullmq.queueeventslistener.error.md | 15 -- .../api/bullmq.queueeventslistener.failed.md | 19 --- .../gitbook/api/bullmq.queueeventslistener.md | 33 ---- .../api/bullmq.queueeventslistener.paused.md | 15 -- .../bullmq.queueeventslistener.progress.md | 18 -- .../api/bullmq.queueeventslistener.removed.md | 17 -- .../api/bullmq.queueeventslistener.resumed.md | 15 -- .../api/bullmq.queueeventslistener.stalled.md | 17 -- .../api/bullmq.queueeventslistener.waiting.md | 17 -- .../api/bullmq.queueeventsoptions.autorun.md | 13 -- ...llmq.queueeventsoptions.blockingtimeout.md | 13 -- .../bullmq.queueeventsoptions.lasteventid.md | 13 -- docs/gitbook/api/bullmq.queueeventsoptions.md | 23 --- docs/gitbook/api/bullmq.queuegetters.count.md | 17 -- .../api/bullmq.queuegetters.getactive.md | 23 --- .../api/bullmq.queuegetters.getactivecount.md | 17 -- .../api/bullmq.queuegetters.getcompleted.md | 23 --- .../bullmq.queuegetters.getcompletedcount.md | 17 -- .../api/bullmq.queuegetters.getdelayed.md | 23 --- .../bullmq.queuegetters.getdelayedcount.md | 17 -- .../api/bullmq.queuegetters.getfailed.md | 23 --- .../api/bullmq.queuegetters.getfailedcount.md | 17 -- .../gitbook/api/bullmq.queuegetters.getjob.md | 22 --- .../bullmq.queuegetters.getjobcountbytypes.md | 26 --- .../api/bullmq.queuegetters.getjobcounts.md | 28 --- .../api/bullmq.queuegetters.getjoblogs.md | 28 --- .../api/bullmq.queuegetters.getjobs.md | 25 --- .../api/bullmq.queuegetters.getmetrics.md | 30 ---- .../api/bullmq.queuegetters.getqueueevents.md | 21 --- .../bullmq.queuegetters.getqueueschedulers.md | 21 --- .../api/bullmq.queuegetters.getranges.md | 25 --- .../api/bullmq.queuegetters.getwaiting.md | 23 --- .../bullmq.queuegetters.getwaitingchildren.md | 23 --- ...mq.queuegetters.getwaitingchildrencount.md | 17 -- .../bullmq.queuegetters.getwaitingcount.md | 17 -- .../api/bullmq.queuegetters.getworkers.md | 21 --- docs/gitbook/api/bullmq.queuegetters.md | 41 ----- .../api/bullmq.queuekeys._constructor_.md | 20 --- docs/gitbook/api/bullmq.queuekeys.getkeys.md | 22 --- .../bullmq.queuekeys.getprefixedqueuename.md | 22 --- docs/gitbook/api/bullmq.queuekeys.md | 32 ---- docs/gitbook/api/bullmq.queuekeys.prefix.md | 11 -- docs/gitbook/api/bullmq.queuekeys.tokey.md | 23 --- .../api/bullmq.queuelistener.cleaned.md | 15 -- .../gitbook/api/bullmq.queuelistener.error.md | 15 -- docs/gitbook/api/bullmq.queuelistener.md | 24 --- .../api/bullmq.queuelistener.paused.md | 15 -- .../api/bullmq.queuelistener.progress.md | 15 -- .../api/bullmq.queuelistener.removed.md | 15 -- .../api/bullmq.queuelistener.resumed.md | 15 -- .../api/bullmq.queuelistener.waiting.md | 15 -- .../bullmq.queueoptions.defaultjoboptions.md | 11 -- .../api/bullmq.queueoptions.limiter.md | 15 -- docs/gitbook/api/bullmq.queueoptions.md | 23 --- .../api/bullmq.queueoptions.streams.md | 17 -- .../bullmq.queuescheduler._constructor_.md | 22 --- .../api/bullmq.queuescheduler.close.md | 15 -- .../gitbook/api/bullmq.queuescheduler.emit.md | 23 --- .../api/bullmq.queuescheduler.isrunning.md | 15 -- docs/gitbook/api/bullmq.queuescheduler.md | 37 ---- docs/gitbook/api/bullmq.queuescheduler.off.md | 23 --- docs/gitbook/api/bullmq.queuescheduler.on.md | 23 --- .../gitbook/api/bullmq.queuescheduler.once.md | 23 --- docs/gitbook/api/bullmq.queuescheduler.run.md | 15 -- .../bullmq.queueschedulerlistener.failed.md | 15 -- .../api/bullmq.queueschedulerlistener.md | 19 --- .../bullmq.queueschedulerlistener.stalled.md | 15 -- .../bullmq.queuescheduleroptions.autorun.md | 13 -- ...q.queuescheduleroptions.maxstalledcount.md | 13 -- .../api/bullmq.queuescheduleroptions.md | 23 --- ...q.queuescheduleroptions.stalledinterval.md | 13 -- .../api/bullmq.ratelimiteroptions.duration.md | 13 -- .../api/bullmq.ratelimiteroptions.groupkey.md | 13 -- .../api/bullmq.ratelimiteroptions.max.md | 13 -- docs/gitbook/api/bullmq.ratelimiteroptions.md | 21 --- .../bullmq.ratelimiteroptions.workerdelay.md | 13 -- docs/gitbook/api/bullmq.raw2jobdata.md | 22 --- docs/gitbook/api/bullmq.redisclient.md | 11 -- .../api/bullmq.redisconnection._client.md | 11 -- .../bullmq.redisconnection._constructor_.md | 22 --- .../api/bullmq.redisconnection.client.md | 11 -- .../api/bullmq.redisconnection.close.md | 15 -- .../api/bullmq.redisconnection.disconnect.md | 15 -- .../bullmq.redisconnection.loadcommands.md | 15 -- docs/gitbook/api/bullmq.redisconnection.md | 38 ----- .../bullmq.redisconnection.minimumversion.md | 11 -- .../api/bullmq.redisconnection.reconnect.md | 15 -- .../bullmq.redisconnection.redisversion.md | 11 -- .../bullmq.redisconnection.waituntilready.md | 24 --- docs/gitbook/api/bullmq.redisoptions.md | 11 -- docs/gitbook/api/bullmq.removeallqueuedata.md | 24 --- .../api/bullmq.removedeventcallback3.md | 13 -- .../api/bullmq.repeat.addnextrepeatablejob.md | 25 --- .../api/bullmq.repeat.getrepeatablecount.md | 15 -- .../api/bullmq.repeat.getrepeatablejobs.md | 32 ---- docs/gitbook/api/bullmq.repeat.md | 23 --- .../api/bullmq.repeat.removerepeatable.md | 24 --- .../bullmq.repeat.removerepeatablebykey.md | 22 --- .../gitbook/api/bullmq.repeatoptions.count.md | 13 -- docs/gitbook/api/bullmq.repeatoptions.cron.md | 13 -- .../gitbook/api/bullmq.repeatoptions.every.md | 13 -- .../api/bullmq.repeatoptions.immediately.md | 13 -- .../gitbook/api/bullmq.repeatoptions.jobid.md | 11 -- .../gitbook/api/bullmq.repeatoptions.limit.md | 13 -- docs/gitbook/api/bullmq.repeatoptions.md | 28 --- .../api/bullmq.repeatoptions.offset.md | 11 -- .../api/bullmq.repeatoptions.prevmillis.md | 11 -- docs/gitbook/api/bullmq.sandboxedjob.data.md | 11 -- docs/gitbook/api/bullmq.sandboxedjob.log.md | 11 -- docs/gitbook/api/bullmq.sandboxedjob.md | 24 --- docs/gitbook/api/bullmq.sandboxedjob.opts.md | 11 -- .../api/bullmq.sandboxedjob.progress.md | 11 -- .../api/bullmq.sandboxedjob.returnvalue.md | 11 -- .../api/bullmq.sandboxedjob.updateprogress.md | 11 -- .../api/bullmq.sandboxedjobprocessor.md | 13 -- .../api/bullmq.scriptloader._constructor_.md | 13 -- .../api/bullmq.scriptloader.addpathmapping.md | 25 --- .../api/bullmq.scriptloader.clearcache.md | 17 -- .../api/bullmq.scriptloader.interpolate.md | 25 --- docs/gitbook/api/bullmq.scriptloader.load.md | 25 --- .../api/bullmq.scriptloader.loadcommand.md | 23 --- .../api/bullmq.scriptloader.loadscripts.md | 31 ---- docs/gitbook/api/bullmq.scriptloader.md | 11 -- .../api/bullmq.scriptloader.parsescript.md | 26 --- .../api/bullmq.scriptloader.resolvepath.md | 25 --- .../bullmq.scriptloadererror._constructor_.md | 24 --- .../api/bullmq.scriptloadererror.includes.md | 13 -- .../api/bullmq.scriptloadererror.line.md | 11 -- docs/gitbook/api/bullmq.scriptloadererror.md | 28 --- .../api/bullmq.scriptloadererror.path.md | 11 -- .../api/bullmq.scriptloadererror.position.md | 11 -- .../api/bullmq.scriptmetadata.content.md | 13 -- .../api/bullmq.scriptmetadata.includes.md | 13 -- docs/gitbook/api/bullmq.scriptmetadata.md | 25 --- .../gitbook/api/bullmq.scriptmetadata.name.md | 13 -- .../api/bullmq.scriptmetadata.numberofkeys.md | 11 -- .../gitbook/api/bullmq.scriptmetadata.path.md | 13 -- .../api/bullmq.scriptmetadata.token.md | 13 -- docs/gitbook/api/bullmq.scripts.addjob.md | 27 --- .../gitbook/api/bullmq.scripts.changedelay.md | 24 --- .../api/bullmq.scripts.changedelayargs.md | 24 --- .../api/bullmq.scripts.cleanjobsinset.md | 29 ---- docs/gitbook/api/bullmq.scripts.drain.md | 23 --- docs/gitbook/api/bullmq.scripts.drainargs.md | 23 --- docs/gitbook/api/bullmq.scripts.extendlock.md | 25 --- .../api/bullmq.scripts.finishederrors.md | 25 --- docs/gitbook/api/bullmq.scripts.getstate.md | 23 --- docs/gitbook/api/bullmq.scripts.isfinished.md | 24 --- .../gitbook/api/bullmq.scripts.isjobinlist.md | 24 --- docs/gitbook/api/bullmq.scripts.md | 49 ------ .../bullmq.scripts.movestalledjobstowait.md | 26 --- .../api/bullmq.scripts.movetoactive.md | 24 --- .../api/bullmq.scripts.movetocompleted.md | 27 --- .../api/bullmq.scripts.movetodelayed.md | 24 --- .../api/bullmq.scripts.movetodelayedargs.md | 24 --- .../api/bullmq.scripts.movetofailedargs.md | 27 --- .../api/bullmq.scripts.movetofinishedargs.md | 29 ---- .../bullmq.scripts.movetowaitingchildren.md | 37 ---- ...ullmq.scripts.movetowaitingchildrenargs.md | 25 --- docs/gitbook/api/bullmq.scripts.obliterate.md | 26 --- docs/gitbook/api/bullmq.scripts.pause.md | 23 --- docs/gitbook/api/bullmq.scripts.promote.md | 23 --- docs/gitbook/api/bullmq.scripts.remove.md | 23 --- .../api/bullmq.scripts.removerepeatable.md | 24 --- .../bullmq.scripts.removerepeatableargs.md | 24 --- .../api/bullmq.scripts.reprocessjob.md | 28 --- .../api/bullmq.scripts.retryjobargs.md | 23 --- docs/gitbook/api/bullmq.scripts.retryjobs.md | 25 --- docs/gitbook/api/bullmq.scripts.updatedata.md | 24 --- .../api/bullmq.scripts.updatedelayset.md | 25 --- .../api/bullmq.scripts.updateprogress.md | 24 --- .../api/bullmq.stalledeventcallback3.md | 13 -- docs/gitbook/api/bullmq.strategies.md | 11 -- docs/gitbook/api/bullmq.streamname.md | 11 -- docs/gitbook/api/bullmq.streamreadraw.md | 13 -- .../api/bullmq.timermanager.clearalltimers.md | 15 -- .../api/bullmq.timermanager.cleartimer.md | 22 --- docs/gitbook/api/bullmq.timermanager.md | 22 --- .../api/bullmq.timermanager.settimer.md | 26 --- docs/gitbook/api/bullmq.trycatch.md | 24 --- ...bullmq.unrecoverableerror._constructor_.md | 20 --- docs/gitbook/api/bullmq.unrecoverableerror.md | 23 --- .../api/bullmq.waitingeventcallback3.md | 11 -- .../api/bullmq.worker._constructor_.md | 23 --- .../api/bullmq.worker.callprocessjob.md | 23 --- docs/gitbook/api/bullmq.worker.close.md | 28 --- docs/gitbook/api/bullmq.worker.createjob.md | 23 --- docs/gitbook/api/bullmq.worker.delay.md | 17 -- docs/gitbook/api/bullmq.worker.emit.md | 23 --- docs/gitbook/api/bullmq.worker.getnextjob.md | 27 --- docs/gitbook/api/bullmq.worker.ispaused.md | 19 --- docs/gitbook/api/bullmq.worker.isrunning.md | 19 --- docs/gitbook/api/bullmq.worker.md | 54 ------ .../gitbook/api/bullmq.worker.movetoactive.md | 23 --- .../api/bullmq.worker.nextjobfromjobdata.md | 23 --- docs/gitbook/api/bullmq.worker.off.md | 23 --- docs/gitbook/api/bullmq.worker.on.md | 23 --- docs/gitbook/api/bullmq.worker.once.md | 23 --- docs/gitbook/api/bullmq.worker.opts.md | 11 -- docs/gitbook/api/bullmq.worker.pause.md | 24 --- docs/gitbook/api/bullmq.worker.paused.md | 11 -- docs/gitbook/api/bullmq.worker.processfn.md | 11 -- docs/gitbook/api/bullmq.worker.processjob.md | 23 --- docs/gitbook/api/bullmq.worker.repeat.md | 11 -- docs/gitbook/api/bullmq.worker.resume.md | 17 -- docs/gitbook/api/bullmq.worker.run.md | 15 -- .../gitbook/api/bullmq.worker.timermanager.md | 11 -- .../api/bullmq.worker.waituntilready.md | 17 -- docs/gitbook/api/bullmq.worker_suffix.md | 11 -- .../api/bullmq.workerlistener.active.md | 15 -- .../api/bullmq.workerlistener.closed.md | 15 -- .../api/bullmq.workerlistener.closing.md | 15 -- .../api/bullmq.workerlistener.completed.md | 15 -- .../api/bullmq.workerlistener.drained.md | 15 -- .../api/bullmq.workerlistener.error.md | 15 -- .../api/bullmq.workerlistener.failed.md | 15 -- docs/gitbook/api/bullmq.workerlistener.md | 27 --- .../api/bullmq.workerlistener.paused.md | 15 -- .../api/bullmq.workerlistener.progress.md | 15 -- .../api/bullmq.workerlistener.resumed.md | 15 -- .../api/bullmq.workeroptions.autorun.md | 13 -- .../api/bullmq.workeroptions.concurrency.md | 13 -- .../api/bullmq.workeroptions.draindelay.md | 11 -- .../api/bullmq.workeroptions.limiter.md | 13 -- .../api/bullmq.workeroptions.lockduration.md | 11 -- .../api/bullmq.workeroptions.lockrenewtime.md | 11 -- docs/gitbook/api/bullmq.workeroptions.md | 28 --- .../api/bullmq.workeroptions.metrics.md | 13 -- .../api/bullmq.workeroptions.runretrydelay.md | 11 -- .../api/bullmq.workeroptions.settings.md | 11 -- .../bullmq.workeroptions.skipdelaycheck.md | 11 -- docs/gitbook/api/index.md | 12 -- package.json | 2 +- src/classes/flow-producer.ts | 4 +- yarn.lock | 7 + 634 files changed, 10 insertions(+), 11696 deletions(-) delete mode 100644 docs/gitbook/api/bullmq.activeeventcallback3.md delete mode 100644 docs/gitbook/api/bullmq.addchildrenopts.md delete mode 100644 docs/gitbook/api/bullmq.addchildrenopts.multi.md delete mode 100644 docs/gitbook/api/bullmq.addchildrenopts.nodes.md delete mode 100644 docs/gitbook/api/bullmq.addchildrenopts.parent.md delete mode 100644 docs/gitbook/api/bullmq.addchildrenopts.queuesopts.md delete mode 100644 docs/gitbook/api/bullmq.addnodeopts.md delete mode 100644 docs/gitbook/api/bullmq.addnodeopts.multi.md delete mode 100644 docs/gitbook/api/bullmq.addnodeopts.node.md delete mode 100644 docs/gitbook/api/bullmq.addnodeopts.parent.md delete mode 100644 docs/gitbook/api/bullmq.addnodeopts.queuesopts.md delete mode 100644 docs/gitbook/api/bullmq.advancedoptions.backoffstrategies.md delete mode 100644 docs/gitbook/api/bullmq.advancedoptions.md delete mode 100644 docs/gitbook/api/bullmq.array2obj.md delete mode 100644 docs/gitbook/api/bullmq.asyncsend.md delete mode 100644 docs/gitbook/api/bullmq.backofffunction.md delete mode 100644 docs/gitbook/api/bullmq.backoffoptions.delay.md delete mode 100644 docs/gitbook/api/bullmq.backoffoptions.md delete mode 100644 docs/gitbook/api/bullmq.backoffoptions.type.md delete mode 100644 docs/gitbook/api/bullmq.backoffs.builtinstrategies.md delete mode 100644 docs/gitbook/api/bullmq.backoffs.calculate.md delete mode 100644 docs/gitbook/api/bullmq.backoffs.md delete mode 100644 docs/gitbook/api/bullmq.backoffs.normalize.md delete mode 100644 docs/gitbook/api/bullmq.bulkjoboptions.md delete mode 100644 docs/gitbook/api/bullmq.childcommand.md delete mode 100644 docs/gitbook/api/bullmq.childmessage.cmd.md delete mode 100644 docs/gitbook/api/bullmq.childmessage.err.md delete mode 100644 docs/gitbook/api/bullmq.childmessage.md delete mode 100644 docs/gitbook/api/bullmq.childmessage.value.md delete mode 100644 docs/gitbook/api/bullmq.childpool._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.childpool.clean.md delete mode 100644 docs/gitbook/api/bullmq.childpool.free.md delete mode 100644 docs/gitbook/api/bullmq.childpool.getallfree.md delete mode 100644 docs/gitbook/api/bullmq.childpool.getfree.md delete mode 100644 docs/gitbook/api/bullmq.childpool.kill.md delete mode 100644 docs/gitbook/api/bullmq.childpool.md delete mode 100644 docs/gitbook/api/bullmq.childpool.release.md delete mode 100644 docs/gitbook/api/bullmq.childpool.remove.md delete mode 100644 docs/gitbook/api/bullmq.childpool.retain.md delete mode 100644 docs/gitbook/api/bullmq.childpool.retained.md delete mode 100644 docs/gitbook/api/bullmq.childprocessext.md delete mode 100644 docs/gitbook/api/bullmq.childprocessext.processfile.md delete mode 100644 docs/gitbook/api/bullmq.childprocessor.currentjobpromise.md delete mode 100644 docs/gitbook/api/bullmq.childprocessor.init.md delete mode 100644 docs/gitbook/api/bullmq.childprocessor.md delete mode 100644 docs/gitbook/api/bullmq.childprocessor.processor.md delete mode 100644 docs/gitbook/api/bullmq.childprocessor.start.md delete mode 100644 docs/gitbook/api/bullmq.childprocessor.status.md delete mode 100644 docs/gitbook/api/bullmq.childprocessor.stop.md delete mode 100644 docs/gitbook/api/bullmq.childprocessor.waitforcurrentjobandexit.md delete mode 100644 docs/gitbook/api/bullmq.childsend.md delete mode 100644 docs/gitbook/api/bullmq.cleanedeventcallback3.md delete mode 100644 docs/gitbook/api/bullmq.clientcommandmessagereg.md delete mode 100644 docs/gitbook/api/bullmq.clienttype.md delete mode 100644 docs/gitbook/api/bullmq.clusteroptions.md delete mode 100644 docs/gitbook/api/bullmq.command.md delete mode 100644 docs/gitbook/api/bullmq.command.name.md delete mode 100644 docs/gitbook/api/bullmq.command.options.md delete mode 100644 docs/gitbook/api/bullmq.completedeventcallback3.md delete mode 100644 docs/gitbook/api/bullmq.connectionoptions.md delete mode 100644 docs/gitbook/api/bullmq.delay.md delete mode 100644 docs/gitbook/api/bullmq.delay_time_1.md delete mode 100644 docs/gitbook/api/bullmq.delay_time_5.md delete mode 100644 docs/gitbook/api/bullmq.dependenciesopts.md delete mode 100644 docs/gitbook/api/bullmq.dependenciesopts.processed.md delete mode 100644 docs/gitbook/api/bullmq.dependenciesopts.unprocessed.md delete mode 100644 docs/gitbook/api/bullmq.entryid.md delete mode 100644 docs/gitbook/api/bullmq.entryraw.md delete mode 100644 docs/gitbook/api/bullmq.errorcode.md delete mode 100644 docs/gitbook/api/bullmq.erroreventcallback3.md delete mode 100644 docs/gitbook/api/bullmq.errorobject.md delete mode 100644 docs/gitbook/api/bullmq.eventcallback3.md delete mode 100644 docs/gitbook/api/bullmq.failedeventcallback3.md delete mode 100644 docs/gitbook/api/bullmq.finishedpropvalattribute.md delete mode 100644 docs/gitbook/api/bullmq.finishedstatus.md delete mode 100644 docs/gitbook/api/bullmq.flowjob.children.md delete mode 100644 docs/gitbook/api/bullmq.flowjob.data.md delete mode 100644 docs/gitbook/api/bullmq.flowjob.md delete mode 100644 docs/gitbook/api/bullmq.flowjob.name.md delete mode 100644 docs/gitbook/api/bullmq.flowjob.opts.md delete mode 100644 docs/gitbook/api/bullmq.flowjob.prefix.md delete mode 100644 docs/gitbook/api/bullmq.flowjob.queuename.md delete mode 100644 docs/gitbook/api/bullmq.flowopts.md delete mode 100644 docs/gitbook/api/bullmq.flowopts.queuesoptions.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.add.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.addbulk.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.client.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.close.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.closing.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.connection.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.disconnect.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.getflow.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.keys.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.opts.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.queuekeys.md delete mode 100644 docs/gitbook/api/bullmq.flowproducer.tokey.md delete mode 100644 docs/gitbook/api/bullmq.flowqueuesopts.md delete mode 100644 docs/gitbook/api/bullmq.getnextjoboptions.block.md delete mode 100644 docs/gitbook/api/bullmq.getnextjoboptions.md delete mode 100644 docs/gitbook/api/bullmq.getparentkey.md delete mode 100644 docs/gitbook/api/bullmq.iconnection.client.md delete mode 100644 docs/gitbook/api/bullmq.iconnection.md delete mode 100644 docs/gitbook/api/bullmq.iconnection.waituntilready.md delete mode 100644 docs/gitbook/api/bullmq.isempty.md delete mode 100644 docs/gitbook/api/bullmq.isnotconnectionerror.md delete mode 100644 docs/gitbook/api/bullmq.isrediscluster.md delete mode 100644 docs/gitbook/api/bullmq.isredisinstance.md delete mode 100644 docs/gitbook/api/bullmq.job._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.job.addjob.md delete mode 100644 docs/gitbook/api/bullmq.job.asjson.md delete mode 100644 docs/gitbook/api/bullmq.job.asjsonsandbox.md delete mode 100644 docs/gitbook/api/bullmq.job.attemptsmade.md delete mode 100644 docs/gitbook/api/bullmq.job.changedelay.md delete mode 100644 docs/gitbook/api/bullmq.job.create.md delete mode 100644 docs/gitbook/api/bullmq.job.createbulk.md delete mode 100644 docs/gitbook/api/bullmq.job.data.md delete mode 100644 docs/gitbook/api/bullmq.job.discard.md delete mode 100644 docs/gitbook/api/bullmq.job.extendlock.md delete mode 100644 docs/gitbook/api/bullmq.job.failedreason.md delete mode 100644 docs/gitbook/api/bullmq.job.finishedon.md delete mode 100644 docs/gitbook/api/bullmq.job.fromid.md delete mode 100644 docs/gitbook/api/bullmq.job.fromjson.md delete mode 100644 docs/gitbook/api/bullmq.job.getchildrenvalues.md delete mode 100644 docs/gitbook/api/bullmq.job.getdependencies.md delete mode 100644 docs/gitbook/api/bullmq.job.getdependenciescount.md delete mode 100644 docs/gitbook/api/bullmq.job.getstate.md delete mode 100644 docs/gitbook/api/bullmq.job.id.md delete mode 100644 docs/gitbook/api/bullmq.job.isactive.md delete mode 100644 docs/gitbook/api/bullmq.job.iscompleted.md delete mode 100644 docs/gitbook/api/bullmq.job.isdelayed.md delete mode 100644 docs/gitbook/api/bullmq.job.isfailed.md delete mode 100644 docs/gitbook/api/bullmq.job.iswaiting.md delete mode 100644 docs/gitbook/api/bullmq.job.iswaitingchildren.md delete mode 100644 docs/gitbook/api/bullmq.job.log.md delete mode 100644 docs/gitbook/api/bullmq.job.md delete mode 100644 docs/gitbook/api/bullmq.job.movetocompleted.md delete mode 100644 docs/gitbook/api/bullmq.job.movetodelayed.md delete mode 100644 docs/gitbook/api/bullmq.job.movetofailed.md delete mode 100644 docs/gitbook/api/bullmq.job.movetowaitingchildren.md delete mode 100644 docs/gitbook/api/bullmq.job.name.md delete mode 100644 docs/gitbook/api/bullmq.job.opts.md delete mode 100644 docs/gitbook/api/bullmq.job.parent.md delete mode 100644 docs/gitbook/api/bullmq.job.parentkey.md delete mode 100644 docs/gitbook/api/bullmq.job.prefix.md delete mode 100644 docs/gitbook/api/bullmq.job.processedon.md delete mode 100644 docs/gitbook/api/bullmq.job.progress.md delete mode 100644 docs/gitbook/api/bullmq.job.promote.md delete mode 100644 docs/gitbook/api/bullmq.job.queue.md delete mode 100644 docs/gitbook/api/bullmq.job.queuename.md delete mode 100644 docs/gitbook/api/bullmq.job.remove.md delete mode 100644 docs/gitbook/api/bullmq.job.retry.md delete mode 100644 docs/gitbook/api/bullmq.job.returnvalue.md delete mode 100644 docs/gitbook/api/bullmq.job.stacktrace.md delete mode 100644 docs/gitbook/api/bullmq.job.timestamp.md delete mode 100644 docs/gitbook/api/bullmq.job.tojson.md delete mode 100644 docs/gitbook/api/bullmq.job.tokey.md delete mode 100644 docs/gitbook/api/bullmq.job.update.md delete mode 100644 docs/gitbook/api/bullmq.job.updateprogress.md delete mode 100644 docs/gitbook/api/bullmq.job.waituntilfinished.md delete mode 100644 docs/gitbook/api/bullmq.jobdata.md delete mode 100644 docs/gitbook/api/bullmq.jobidforgroup.md delete mode 100644 docs/gitbook/api/bullmq.jobinformation3.cron.md delete mode 100644 docs/gitbook/api/bullmq.jobinformation3.enddate.md delete mode 100644 docs/gitbook/api/bullmq.jobinformation3.id.md delete mode 100644 docs/gitbook/api/bullmq.jobinformation3.key.md delete mode 100644 docs/gitbook/api/bullmq.jobinformation3.md delete mode 100644 docs/gitbook/api/bullmq.jobinformation3.name.md delete mode 100644 docs/gitbook/api/bullmq.jobinformation3.next.md delete mode 100644 docs/gitbook/api/bullmq.jobinformation3.tz.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.attemptsmade.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.data.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.failedreason.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.finishedon.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.id.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.name.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.opts.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.parentkey.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.processedon.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.progress.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.returnvalue.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.stacktrace.md delete mode 100644 docs/gitbook/api/bullmq.jobjson.timestamp.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.attemptsmade.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.data.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.failedreason.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.finishedon.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.id.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.name.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.opts.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.parent.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.parentkey.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.processedon.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.progress.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.returnvalue.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.stacktrace.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonraw.timestamp.md delete mode 100644 docs/gitbook/api/bullmq.jobjsonsandbox.md delete mode 100644 docs/gitbook/api/bullmq.jobnode.children.md delete mode 100644 docs/gitbook/api/bullmq.jobnode.job.md delete mode 100644 docs/gitbook/api/bullmq.jobnode.md delete mode 100644 docs/gitbook/api/bullmq.jobpromise3.cancel.md delete mode 100644 docs/gitbook/api/bullmq.jobpromise3.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.attempts.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.backoff.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.delay.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.jobid.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.lifo.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.parent.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.prevmillis.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.priority.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.ratelimiterkey.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.removeoncomplete.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.removeonfail.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.repeat.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.sizelimit.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.stacktracelimit.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.timeout.md delete mode 100644 docs/gitbook/api/bullmq.jobsoptions.timestamp.md delete mode 100644 docs/gitbook/api/bullmq.jobstate.md delete mode 100644 docs/gitbook/api/bullmq.jobstatusclean3.md delete mode 100644 docs/gitbook/api/bullmq.jobtype.md delete mode 100644 docs/gitbook/api/bullmq.keepjobs.age.md delete mode 100644 docs/gitbook/api/bullmq.keepjobs.count.md delete mode 100644 docs/gitbook/api/bullmq.keepjobs.md delete mode 100644 docs/gitbook/api/bullmq.keysmap.md delete mode 100644 docs/gitbook/api/bullmq.killasync.md delete mode 100644 docs/gitbook/api/bullmq.lengthinutf8bytes.md delete mode 100644 docs/gitbook/api/bullmq.md delete mode 100644 docs/gitbook/api/bullmq.metrics.count.md delete mode 100644 docs/gitbook/api/bullmq.metrics.data.md delete mode 100644 docs/gitbook/api/bullmq.metrics.md delete mode 100644 docs/gitbook/api/bullmq.metrics.meta.md delete mode 100644 docs/gitbook/api/bullmq.metricsoptions.maxdatapoints.md delete mode 100644 docs/gitbook/api/bullmq.metricsoptions.md delete mode 100644 docs/gitbook/api/bullmq.metricstime.md delete mode 100644 docs/gitbook/api/bullmq.minimalqueue.md delete mode 100644 docs/gitbook/api/bullmq.movetochildrenopts.child.md delete mode 100644 docs/gitbook/api/bullmq.movetochildrenopts.md delete mode 100644 docs/gitbook/api/bullmq.movetochildrenopts.timestamp.md delete mode 100644 docs/gitbook/api/bullmq.nodeopts.depth.md delete mode 100644 docs/gitbook/api/bullmq.nodeopts.id.md delete mode 100644 docs/gitbook/api/bullmq.nodeopts.maxchildren.md delete mode 100644 docs/gitbook/api/bullmq.nodeopts.md delete mode 100644 docs/gitbook/api/bullmq.nodeopts.prefix.md delete mode 100644 docs/gitbook/api/bullmq.nodeopts.queuename.md delete mode 100644 docs/gitbook/api/bullmq.obliterateopts.count.md delete mode 100644 docs/gitbook/api/bullmq.obliterateopts.force.md delete mode 100644 docs/gitbook/api/bullmq.obliterateopts.md delete mode 100644 docs/gitbook/api/bullmq.parent.data.md delete mode 100644 docs/gitbook/api/bullmq.parent.md delete mode 100644 docs/gitbook/api/bullmq.parent.name.md delete mode 100644 docs/gitbook/api/bullmq.parent.opts.md delete mode 100644 docs/gitbook/api/bullmq.parent.prefix.md delete mode 100644 docs/gitbook/api/bullmq.parent.queue.md delete mode 100644 docs/gitbook/api/bullmq.parentcommand.md delete mode 100644 docs/gitbook/api/bullmq.parentkeys.id.md delete mode 100644 docs/gitbook/api/bullmq.parentkeys.md delete mode 100644 docs/gitbook/api/bullmq.parentkeys.queuekey.md delete mode 100644 docs/gitbook/api/bullmq.parentmessage.cmd.md delete mode 100644 docs/gitbook/api/bullmq.parentmessage.err.md delete mode 100644 docs/gitbook/api/bullmq.parentmessage.job.md delete mode 100644 docs/gitbook/api/bullmq.parentmessage.md delete mode 100644 docs/gitbook/api/bullmq.parentmessage.value.md delete mode 100644 docs/gitbook/api/bullmq.parentopts.md delete mode 100644 docs/gitbook/api/bullmq.parentsend.md delete mode 100644 docs/gitbook/api/bullmq.processor.md delete mode 100644 docs/gitbook/api/bullmq.progresseventcallback3.md delete mode 100644 docs/gitbook/api/bullmq.queue._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.queue.add.md delete mode 100644 docs/gitbook/api/bullmq.queue.addbulk.md delete mode 100644 docs/gitbook/api/bullmq.queue.clean.md delete mode 100644 docs/gitbook/api/bullmq.queue.close.md delete mode 100644 docs/gitbook/api/bullmq.queue.defaultjoboptions.md delete mode 100644 docs/gitbook/api/bullmq.queue.drain.md delete mode 100644 docs/gitbook/api/bullmq.queue.emit.md delete mode 100644 docs/gitbook/api/bullmq.queue.getrepeatablejobs.md delete mode 100644 docs/gitbook/api/bullmq.queue.ispaused.md delete mode 100644 docs/gitbook/api/bullmq.queue.jobsopts.md delete mode 100644 docs/gitbook/api/bullmq.queue.limiter.md delete mode 100644 docs/gitbook/api/bullmq.queue.md delete mode 100644 docs/gitbook/api/bullmq.queue.obliterate.md delete mode 100644 docs/gitbook/api/bullmq.queue.off.md delete mode 100644 docs/gitbook/api/bullmq.queue.on.md delete mode 100644 docs/gitbook/api/bullmq.queue.once.md delete mode 100644 docs/gitbook/api/bullmq.queue.pause.md delete mode 100644 docs/gitbook/api/bullmq.queue.remove.md delete mode 100644 docs/gitbook/api/bullmq.queue.removerepeatable.md delete mode 100644 docs/gitbook/api/bullmq.queue.removerepeatablebykey.md delete mode 100644 docs/gitbook/api/bullmq.queue.repeat.md delete mode 100644 docs/gitbook/api/bullmq.queue.resume.md delete mode 100644 docs/gitbook/api/bullmq.queue.retryjobs.md delete mode 100644 docs/gitbook/api/bullmq.queue.token.md delete mode 100644 docs/gitbook/api/bullmq.queue.trimevents.md delete mode 100644 docs/gitbook/api/bullmq.queue3._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.queue3.add.md delete mode 100644 docs/gitbook/api/bullmq.queue3.base64name.md delete mode 100644 docs/gitbook/api/bullmq.queue3.clean.md delete mode 100644 docs/gitbook/api/bullmq.queue3.clientname.md delete mode 100644 docs/gitbook/api/bullmq.queue3.close.md delete mode 100644 docs/gitbook/api/bullmq.queue3.count.md delete mode 100644 docs/gitbook/api/bullmq.queue3.detachlistener.md delete mode 100644 docs/gitbook/api/bullmq.queue3.empty.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getactive.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getactivecount.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getcompleted.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getcompletedcount.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getdelayed.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getdelayedcount.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getfailed.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getfailedcount.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getjob.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getjobcountbytypes.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getjobcounts.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getjoblogs.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getjobs.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getnextjob.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getpausedcount.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getrepeatablecount.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getrepeatablejobs.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getwaiting.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getwaitingcount.md delete mode 100644 docs/gitbook/api/bullmq.queue3.getworkers.md delete mode 100644 docs/gitbook/api/bullmq.queue3.isready.md delete mode 100644 docs/gitbook/api/bullmq.queue3.isworkerpaused.md delete mode 100644 docs/gitbook/api/bullmq.queue3.md delete mode 100644 docs/gitbook/api/bullmq.queue3.name.md delete mode 100644 docs/gitbook/api/bullmq.queue3.nextrepeatablejob.md delete mode 100644 docs/gitbook/api/bullmq.queue3.off.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_1.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_10.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_11.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_12.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_2.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_3.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_4.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_5.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_6.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_7.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_8.md delete mode 100644 docs/gitbook/api/bullmq.queue3.on_9.md delete mode 100644 docs/gitbook/api/bullmq.queue3.once.md delete mode 100644 docs/gitbook/api/bullmq.queue3.parseclientlist.md delete mode 100644 docs/gitbook/api/bullmq.queue3.pause.md delete mode 100644 docs/gitbook/api/bullmq.queue3.pauseworker.md delete mode 100644 docs/gitbook/api/bullmq.queue3.process.md delete mode 100644 docs/gitbook/api/bullmq.queue3.queueevents.md delete mode 100644 docs/gitbook/api/bullmq.queue3.removealllisteners.md delete mode 100644 docs/gitbook/api/bullmq.queue3.removelistener.md delete mode 100644 docs/gitbook/api/bullmq.queue3.removerepeatable.md delete mode 100644 docs/gitbook/api/bullmq.queue3.removerepeatablebykey.md delete mode 100644 docs/gitbook/api/bullmq.queue3.resume.md delete mode 100644 docs/gitbook/api/bullmq.queue3.resumeworker.md delete mode 100644 docs/gitbook/api/bullmq.queue3.retryjob.md delete mode 100644 docs/gitbook/api/bullmq.queue3.setworkername.md delete mode 100644 docs/gitbook/api/bullmq.queue_event_suffix.md delete mode 100644 docs/gitbook/api/bullmq.queue_scheduler_suffix.md delete mode 100644 docs/gitbook/api/bullmq.queuebase._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.base64name.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.client.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.clientname.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.close.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.closing.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.connection.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.disconnect.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.emit.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.keys.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.name.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.opts.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.redisversion.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.tokey.md delete mode 100644 docs/gitbook/api/bullmq.queuebase.waituntilready.md delete mode 100644 docs/gitbook/api/bullmq.queuebaseoptions.blockingconnection.md delete mode 100644 docs/gitbook/api/bullmq.queuebaseoptions.connection.md delete mode 100644 docs/gitbook/api/bullmq.queuebaseoptions.md delete mode 100644 docs/gitbook/api/bullmq.queuebaseoptions.prefix.md delete mode 100644 docs/gitbook/api/bullmq.queuebaseoptions.sharedconnection.md delete mode 100644 docs/gitbook/api/bullmq.queueevents._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.queueevents.close.md delete mode 100644 docs/gitbook/api/bullmq.queueevents.emit.md delete mode 100644 docs/gitbook/api/bullmq.queueevents.md delete mode 100644 docs/gitbook/api/bullmq.queueevents.off.md delete mode 100644 docs/gitbook/api/bullmq.queueevents.on.md delete mode 100644 docs/gitbook/api/bullmq.queueevents.once.md delete mode 100644 docs/gitbook/api/bullmq.queueevents.run.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener._retries-exhausted_.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener._waiting-children_.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.active.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.added.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.cleaned.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.completed.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.delayed.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.drained.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.error.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.failed.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.paused.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.progress.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.removed.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.resumed.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.stalled.md delete mode 100644 docs/gitbook/api/bullmq.queueeventslistener.waiting.md delete mode 100644 docs/gitbook/api/bullmq.queueeventsoptions.autorun.md delete mode 100644 docs/gitbook/api/bullmq.queueeventsoptions.blockingtimeout.md delete mode 100644 docs/gitbook/api/bullmq.queueeventsoptions.lasteventid.md delete mode 100644 docs/gitbook/api/bullmq.queueeventsoptions.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.count.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getactive.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getactivecount.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getcompleted.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getcompletedcount.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getdelayed.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getdelayedcount.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getfailed.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getfailedcount.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getjob.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getjobcountbytypes.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getjobcounts.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getjoblogs.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getjobs.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getmetrics.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getqueueevents.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getqueueschedulers.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getranges.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getwaiting.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getwaitingchildren.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getwaitingchildrencount.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getwaitingcount.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.getworkers.md delete mode 100644 docs/gitbook/api/bullmq.queuegetters.md delete mode 100644 docs/gitbook/api/bullmq.queuekeys._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.queuekeys.getkeys.md delete mode 100644 docs/gitbook/api/bullmq.queuekeys.getprefixedqueuename.md delete mode 100644 docs/gitbook/api/bullmq.queuekeys.md delete mode 100644 docs/gitbook/api/bullmq.queuekeys.prefix.md delete mode 100644 docs/gitbook/api/bullmq.queuekeys.tokey.md delete mode 100644 docs/gitbook/api/bullmq.queuelistener.cleaned.md delete mode 100644 docs/gitbook/api/bullmq.queuelistener.error.md delete mode 100644 docs/gitbook/api/bullmq.queuelistener.md delete mode 100644 docs/gitbook/api/bullmq.queuelistener.paused.md delete mode 100644 docs/gitbook/api/bullmq.queuelistener.progress.md delete mode 100644 docs/gitbook/api/bullmq.queuelistener.removed.md delete mode 100644 docs/gitbook/api/bullmq.queuelistener.resumed.md delete mode 100644 docs/gitbook/api/bullmq.queuelistener.waiting.md delete mode 100644 docs/gitbook/api/bullmq.queueoptions.defaultjoboptions.md delete mode 100644 docs/gitbook/api/bullmq.queueoptions.limiter.md delete mode 100644 docs/gitbook/api/bullmq.queueoptions.md delete mode 100644 docs/gitbook/api/bullmq.queueoptions.streams.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduler._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduler.close.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduler.emit.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduler.isrunning.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduler.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduler.off.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduler.on.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduler.once.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduler.run.md delete mode 100644 docs/gitbook/api/bullmq.queueschedulerlistener.failed.md delete mode 100644 docs/gitbook/api/bullmq.queueschedulerlistener.md delete mode 100644 docs/gitbook/api/bullmq.queueschedulerlistener.stalled.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduleroptions.autorun.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduleroptions.maxstalledcount.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduleroptions.md delete mode 100644 docs/gitbook/api/bullmq.queuescheduleroptions.stalledinterval.md delete mode 100644 docs/gitbook/api/bullmq.ratelimiteroptions.duration.md delete mode 100644 docs/gitbook/api/bullmq.ratelimiteroptions.groupkey.md delete mode 100644 docs/gitbook/api/bullmq.ratelimiteroptions.max.md delete mode 100644 docs/gitbook/api/bullmq.ratelimiteroptions.md delete mode 100644 docs/gitbook/api/bullmq.ratelimiteroptions.workerdelay.md delete mode 100644 docs/gitbook/api/bullmq.raw2jobdata.md delete mode 100644 docs/gitbook/api/bullmq.redisclient.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection._client.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection.client.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection.close.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection.disconnect.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection.loadcommands.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection.minimumversion.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection.reconnect.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection.redisversion.md delete mode 100644 docs/gitbook/api/bullmq.redisconnection.waituntilready.md delete mode 100644 docs/gitbook/api/bullmq.redisoptions.md delete mode 100644 docs/gitbook/api/bullmq.removeallqueuedata.md delete mode 100644 docs/gitbook/api/bullmq.removedeventcallback3.md delete mode 100644 docs/gitbook/api/bullmq.repeat.addnextrepeatablejob.md delete mode 100644 docs/gitbook/api/bullmq.repeat.getrepeatablecount.md delete mode 100644 docs/gitbook/api/bullmq.repeat.getrepeatablejobs.md delete mode 100644 docs/gitbook/api/bullmq.repeat.md delete mode 100644 docs/gitbook/api/bullmq.repeat.removerepeatable.md delete mode 100644 docs/gitbook/api/bullmq.repeat.removerepeatablebykey.md delete mode 100644 docs/gitbook/api/bullmq.repeatoptions.count.md delete mode 100644 docs/gitbook/api/bullmq.repeatoptions.cron.md delete mode 100644 docs/gitbook/api/bullmq.repeatoptions.every.md delete mode 100644 docs/gitbook/api/bullmq.repeatoptions.immediately.md delete mode 100644 docs/gitbook/api/bullmq.repeatoptions.jobid.md delete mode 100644 docs/gitbook/api/bullmq.repeatoptions.limit.md delete mode 100644 docs/gitbook/api/bullmq.repeatoptions.md delete mode 100644 docs/gitbook/api/bullmq.repeatoptions.offset.md delete mode 100644 docs/gitbook/api/bullmq.repeatoptions.prevmillis.md delete mode 100644 docs/gitbook/api/bullmq.sandboxedjob.data.md delete mode 100644 docs/gitbook/api/bullmq.sandboxedjob.log.md delete mode 100644 docs/gitbook/api/bullmq.sandboxedjob.md delete mode 100644 docs/gitbook/api/bullmq.sandboxedjob.opts.md delete mode 100644 docs/gitbook/api/bullmq.sandboxedjob.progress.md delete mode 100644 docs/gitbook/api/bullmq.sandboxedjob.returnvalue.md delete mode 100644 docs/gitbook/api/bullmq.sandboxedjob.updateprogress.md delete mode 100644 docs/gitbook/api/bullmq.sandboxedjobprocessor.md delete mode 100644 docs/gitbook/api/bullmq.scriptloader._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.scriptloader.addpathmapping.md delete mode 100644 docs/gitbook/api/bullmq.scriptloader.clearcache.md delete mode 100644 docs/gitbook/api/bullmq.scriptloader.interpolate.md delete mode 100644 docs/gitbook/api/bullmq.scriptloader.load.md delete mode 100644 docs/gitbook/api/bullmq.scriptloader.loadcommand.md delete mode 100644 docs/gitbook/api/bullmq.scriptloader.loadscripts.md delete mode 100644 docs/gitbook/api/bullmq.scriptloader.md delete mode 100644 docs/gitbook/api/bullmq.scriptloader.parsescript.md delete mode 100644 docs/gitbook/api/bullmq.scriptloader.resolvepath.md delete mode 100644 docs/gitbook/api/bullmq.scriptloadererror._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.scriptloadererror.includes.md delete mode 100644 docs/gitbook/api/bullmq.scriptloadererror.line.md delete mode 100644 docs/gitbook/api/bullmq.scriptloadererror.md delete mode 100644 docs/gitbook/api/bullmq.scriptloadererror.path.md delete mode 100644 docs/gitbook/api/bullmq.scriptloadererror.position.md delete mode 100644 docs/gitbook/api/bullmq.scriptmetadata.content.md delete mode 100644 docs/gitbook/api/bullmq.scriptmetadata.includes.md delete mode 100644 docs/gitbook/api/bullmq.scriptmetadata.md delete mode 100644 docs/gitbook/api/bullmq.scriptmetadata.name.md delete mode 100644 docs/gitbook/api/bullmq.scriptmetadata.numberofkeys.md delete mode 100644 docs/gitbook/api/bullmq.scriptmetadata.path.md delete mode 100644 docs/gitbook/api/bullmq.scriptmetadata.token.md delete mode 100644 docs/gitbook/api/bullmq.scripts.addjob.md delete mode 100644 docs/gitbook/api/bullmq.scripts.changedelay.md delete mode 100644 docs/gitbook/api/bullmq.scripts.changedelayargs.md delete mode 100644 docs/gitbook/api/bullmq.scripts.cleanjobsinset.md delete mode 100644 docs/gitbook/api/bullmq.scripts.drain.md delete mode 100644 docs/gitbook/api/bullmq.scripts.drainargs.md delete mode 100644 docs/gitbook/api/bullmq.scripts.extendlock.md delete mode 100644 docs/gitbook/api/bullmq.scripts.finishederrors.md delete mode 100644 docs/gitbook/api/bullmq.scripts.getstate.md delete mode 100644 docs/gitbook/api/bullmq.scripts.isfinished.md delete mode 100644 docs/gitbook/api/bullmq.scripts.isjobinlist.md delete mode 100644 docs/gitbook/api/bullmq.scripts.md delete mode 100644 docs/gitbook/api/bullmq.scripts.movestalledjobstowait.md delete mode 100644 docs/gitbook/api/bullmq.scripts.movetoactive.md delete mode 100644 docs/gitbook/api/bullmq.scripts.movetocompleted.md delete mode 100644 docs/gitbook/api/bullmq.scripts.movetodelayed.md delete mode 100644 docs/gitbook/api/bullmq.scripts.movetodelayedargs.md delete mode 100644 docs/gitbook/api/bullmq.scripts.movetofailedargs.md delete mode 100644 docs/gitbook/api/bullmq.scripts.movetofinishedargs.md delete mode 100644 docs/gitbook/api/bullmq.scripts.movetowaitingchildren.md delete mode 100644 docs/gitbook/api/bullmq.scripts.movetowaitingchildrenargs.md delete mode 100644 docs/gitbook/api/bullmq.scripts.obliterate.md delete mode 100644 docs/gitbook/api/bullmq.scripts.pause.md delete mode 100644 docs/gitbook/api/bullmq.scripts.promote.md delete mode 100644 docs/gitbook/api/bullmq.scripts.remove.md delete mode 100644 docs/gitbook/api/bullmq.scripts.removerepeatable.md delete mode 100644 docs/gitbook/api/bullmq.scripts.removerepeatableargs.md delete mode 100644 docs/gitbook/api/bullmq.scripts.reprocessjob.md delete mode 100644 docs/gitbook/api/bullmq.scripts.retryjobargs.md delete mode 100644 docs/gitbook/api/bullmq.scripts.retryjobs.md delete mode 100644 docs/gitbook/api/bullmq.scripts.updatedata.md delete mode 100644 docs/gitbook/api/bullmq.scripts.updatedelayset.md delete mode 100644 docs/gitbook/api/bullmq.scripts.updateprogress.md delete mode 100644 docs/gitbook/api/bullmq.stalledeventcallback3.md delete mode 100644 docs/gitbook/api/bullmq.strategies.md delete mode 100644 docs/gitbook/api/bullmq.streamname.md delete mode 100644 docs/gitbook/api/bullmq.streamreadraw.md delete mode 100644 docs/gitbook/api/bullmq.timermanager.clearalltimers.md delete mode 100644 docs/gitbook/api/bullmq.timermanager.cleartimer.md delete mode 100644 docs/gitbook/api/bullmq.timermanager.md delete mode 100644 docs/gitbook/api/bullmq.timermanager.settimer.md delete mode 100644 docs/gitbook/api/bullmq.trycatch.md delete mode 100644 docs/gitbook/api/bullmq.unrecoverableerror._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.unrecoverableerror.md delete mode 100644 docs/gitbook/api/bullmq.waitingeventcallback3.md delete mode 100644 docs/gitbook/api/bullmq.worker._constructor_.md delete mode 100644 docs/gitbook/api/bullmq.worker.callprocessjob.md delete mode 100644 docs/gitbook/api/bullmq.worker.close.md delete mode 100644 docs/gitbook/api/bullmq.worker.createjob.md delete mode 100644 docs/gitbook/api/bullmq.worker.delay.md delete mode 100644 docs/gitbook/api/bullmq.worker.emit.md delete mode 100644 docs/gitbook/api/bullmq.worker.getnextjob.md delete mode 100644 docs/gitbook/api/bullmq.worker.ispaused.md delete mode 100644 docs/gitbook/api/bullmq.worker.isrunning.md delete mode 100644 docs/gitbook/api/bullmq.worker.md delete mode 100644 docs/gitbook/api/bullmq.worker.movetoactive.md delete mode 100644 docs/gitbook/api/bullmq.worker.nextjobfromjobdata.md delete mode 100644 docs/gitbook/api/bullmq.worker.off.md delete mode 100644 docs/gitbook/api/bullmq.worker.on.md delete mode 100644 docs/gitbook/api/bullmq.worker.once.md delete mode 100644 docs/gitbook/api/bullmq.worker.opts.md delete mode 100644 docs/gitbook/api/bullmq.worker.pause.md delete mode 100644 docs/gitbook/api/bullmq.worker.paused.md delete mode 100644 docs/gitbook/api/bullmq.worker.processfn.md delete mode 100644 docs/gitbook/api/bullmq.worker.processjob.md delete mode 100644 docs/gitbook/api/bullmq.worker.repeat.md delete mode 100644 docs/gitbook/api/bullmq.worker.resume.md delete mode 100644 docs/gitbook/api/bullmq.worker.run.md delete mode 100644 docs/gitbook/api/bullmq.worker.timermanager.md delete mode 100644 docs/gitbook/api/bullmq.worker.waituntilready.md delete mode 100644 docs/gitbook/api/bullmq.worker_suffix.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.active.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.closed.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.closing.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.completed.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.drained.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.error.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.failed.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.paused.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.progress.md delete mode 100644 docs/gitbook/api/bullmq.workerlistener.resumed.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.autorun.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.concurrency.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.draindelay.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.limiter.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.lockduration.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.lockrenewtime.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.metrics.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.runretrydelay.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.settings.md delete mode 100644 docs/gitbook/api/bullmq.workeroptions.skipdelaycheck.md delete mode 100644 docs/gitbook/api/index.md diff --git a/docs/gitbook/api/bullmq.activeeventcallback3.md b/docs/gitbook/api/bullmq.activeeventcallback3.md deleted file mode 100644 index 7d4b2cbb37..0000000000 --- a/docs/gitbook/api/bullmq.activeeventcallback3.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ActiveEventCallback3](./bullmq.activeeventcallback3.md) - -## ActiveEventCallback3 type - -Signature: - -```typescript -export declare type ActiveEventCallback3 = (job: Job, jobPromise?: JobPromise3) => void; -``` -References: [Job](./bullmq.job.md), [JobPromise3](./bullmq.jobpromise3.md) - diff --git a/docs/gitbook/api/bullmq.addchildrenopts.md b/docs/gitbook/api/bullmq.addchildrenopts.md deleted file mode 100644 index e222acd64d..0000000000 --- a/docs/gitbook/api/bullmq.addchildrenopts.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AddChildrenOpts](./bullmq.addchildrenopts.md) - -## AddChildrenOpts interface - -Signature: - -```typescript -export interface AddChildrenOpts -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [multi](./bullmq.addchildrenopts.multi.md) | Pipeline | | -| [nodes](./bullmq.addchildrenopts.nodes.md) | [FlowJob](./bullmq.flowjob.md)\[\] | | -| [parent](./bullmq.addchildrenopts.parent.md) | { parentOpts: { id: string; queue: string; }; parentDependenciesKey: string; } | | -| [queuesOpts?](./bullmq.addchildrenopts.queuesopts.md) | [FlowQueuesOpts](./bullmq.flowqueuesopts.md) | (Optional) | - diff --git a/docs/gitbook/api/bullmq.addchildrenopts.multi.md b/docs/gitbook/api/bullmq.addchildrenopts.multi.md deleted file mode 100644 index e50ae48d22..0000000000 --- a/docs/gitbook/api/bullmq.addchildrenopts.multi.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AddChildrenOpts](./bullmq.addchildrenopts.md) > [multi](./bullmq.addchildrenopts.multi.md) - -## AddChildrenOpts.multi property - -Signature: - -```typescript -multi: Pipeline; -``` diff --git a/docs/gitbook/api/bullmq.addchildrenopts.nodes.md b/docs/gitbook/api/bullmq.addchildrenopts.nodes.md deleted file mode 100644 index 9ee40da473..0000000000 --- a/docs/gitbook/api/bullmq.addchildrenopts.nodes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AddChildrenOpts](./bullmq.addchildrenopts.md) > [nodes](./bullmq.addchildrenopts.nodes.md) - -## AddChildrenOpts.nodes property - -Signature: - -```typescript -nodes: FlowJob[]; -``` diff --git a/docs/gitbook/api/bullmq.addchildrenopts.parent.md b/docs/gitbook/api/bullmq.addchildrenopts.parent.md deleted file mode 100644 index aa9514e5f1..0000000000 --- a/docs/gitbook/api/bullmq.addchildrenopts.parent.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AddChildrenOpts](./bullmq.addchildrenopts.md) > [parent](./bullmq.addchildrenopts.parent.md) - -## AddChildrenOpts.parent property - -Signature: - -```typescript -parent: { - parentOpts: { - id: string; - queue: string; - }; - parentDependenciesKey: string; - }; -``` diff --git a/docs/gitbook/api/bullmq.addchildrenopts.queuesopts.md b/docs/gitbook/api/bullmq.addchildrenopts.queuesopts.md deleted file mode 100644 index aa5ca57c81..0000000000 --- a/docs/gitbook/api/bullmq.addchildrenopts.queuesopts.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AddChildrenOpts](./bullmq.addchildrenopts.md) > [queuesOpts](./bullmq.addchildrenopts.queuesopts.md) - -## AddChildrenOpts.queuesOpts property - -Signature: - -```typescript -queuesOpts?: FlowQueuesOpts; -``` diff --git a/docs/gitbook/api/bullmq.addnodeopts.md b/docs/gitbook/api/bullmq.addnodeopts.md deleted file mode 100644 index 372a21f4a9..0000000000 --- a/docs/gitbook/api/bullmq.addnodeopts.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AddNodeOpts](./bullmq.addnodeopts.md) - -## AddNodeOpts interface - -Signature: - -```typescript -export interface AddNodeOpts -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [multi](./bullmq.addnodeopts.multi.md) | Pipeline | | -| [node](./bullmq.addnodeopts.node.md) | [FlowJob](./bullmq.flowjob.md) | | -| [parent?](./bullmq.addnodeopts.parent.md) | { parentOpts: { id: string; queue: string; }; parentDependenciesKey: string; } | (Optional) | -| [queuesOpts?](./bullmq.addnodeopts.queuesopts.md) | [FlowQueuesOpts](./bullmq.flowqueuesopts.md) | (Optional) Queues options that will be applied in each node depending on queue name presence. | - diff --git a/docs/gitbook/api/bullmq.addnodeopts.multi.md b/docs/gitbook/api/bullmq.addnodeopts.multi.md deleted file mode 100644 index 598b43b87f..0000000000 --- a/docs/gitbook/api/bullmq.addnodeopts.multi.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AddNodeOpts](./bullmq.addnodeopts.md) > [multi](./bullmq.addnodeopts.multi.md) - -## AddNodeOpts.multi property - -Signature: - -```typescript -multi: Pipeline; -``` diff --git a/docs/gitbook/api/bullmq.addnodeopts.node.md b/docs/gitbook/api/bullmq.addnodeopts.node.md deleted file mode 100644 index dec30267e2..0000000000 --- a/docs/gitbook/api/bullmq.addnodeopts.node.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AddNodeOpts](./bullmq.addnodeopts.md) > [node](./bullmq.addnodeopts.node.md) - -## AddNodeOpts.node property - -Signature: - -```typescript -node: FlowJob; -``` diff --git a/docs/gitbook/api/bullmq.addnodeopts.parent.md b/docs/gitbook/api/bullmq.addnodeopts.parent.md deleted file mode 100644 index de0431f009..0000000000 --- a/docs/gitbook/api/bullmq.addnodeopts.parent.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AddNodeOpts](./bullmq.addnodeopts.md) > [parent](./bullmq.addnodeopts.parent.md) - -## AddNodeOpts.parent property - -Signature: - -```typescript -parent?: { - parentOpts: { - id: string; - queue: string; - }; - parentDependenciesKey: string; - }; -``` diff --git a/docs/gitbook/api/bullmq.addnodeopts.queuesopts.md b/docs/gitbook/api/bullmq.addnodeopts.queuesopts.md deleted file mode 100644 index f009fa5afb..0000000000 --- a/docs/gitbook/api/bullmq.addnodeopts.queuesopts.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AddNodeOpts](./bullmq.addnodeopts.md) > [queuesOpts](./bullmq.addnodeopts.queuesopts.md) - -## AddNodeOpts.queuesOpts property - -Queues options that will be applied in each node depending on queue name presence. - -Signature: - -```typescript -queuesOpts?: FlowQueuesOpts; -``` diff --git a/docs/gitbook/api/bullmq.advancedoptions.backoffstrategies.md b/docs/gitbook/api/bullmq.advancedoptions.backoffstrategies.md deleted file mode 100644 index a4c34b8b11..0000000000 --- a/docs/gitbook/api/bullmq.advancedoptions.backoffstrategies.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AdvancedOptions](./bullmq.advancedoptions.md) > [backoffStrategies](./bullmq.advancedoptions.backoffstrategies.md) - -## AdvancedOptions.backoffStrategies property - -A set of custom backoff strategies keyed by name. - -Signature: - -```typescript -backoffStrategies?: {}; -``` diff --git a/docs/gitbook/api/bullmq.advancedoptions.md b/docs/gitbook/api/bullmq.advancedoptions.md deleted file mode 100644 index 1a579e2dd7..0000000000 --- a/docs/gitbook/api/bullmq.advancedoptions.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [AdvancedOptions](./bullmq.advancedoptions.md) - -## AdvancedOptions interface - -Signature: - -```typescript -export interface AdvancedOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [backoffStrategies?](./bullmq.advancedoptions.backoffstrategies.md) | {} | (Optional) A set of custom backoff strategies keyed by name. | - diff --git a/docs/gitbook/api/bullmq.array2obj.md b/docs/gitbook/api/bullmq.array2obj.md deleted file mode 100644 index f3ab35acef..0000000000 --- a/docs/gitbook/api/bullmq.array2obj.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [array2obj](./bullmq.array2obj.md) - -## array2obj() function - -Signature: - -```typescript -export declare function array2obj(arr: string[]): Record; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| arr | string\[\] | | - -Returns: - -Record<string, string> - diff --git a/docs/gitbook/api/bullmq.asyncsend.md b/docs/gitbook/api/bullmq.asyncsend.md deleted file mode 100644 index c2e6bbcfc7..0000000000 --- a/docs/gitbook/api/bullmq.asyncsend.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [asyncSend](./bullmq.asyncsend.md) - -## asyncSend variable - -Signature: - -```typescript -asyncSend: (proc: T, msg: any) => Promise -``` diff --git a/docs/gitbook/api/bullmq.backofffunction.md b/docs/gitbook/api/bullmq.backofffunction.md deleted file mode 100644 index 254e753088..0000000000 --- a/docs/gitbook/api/bullmq.backofffunction.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [BackoffFunction](./bullmq.backofffunction.md) - -## BackoffFunction type - -Signature: - -```typescript -export declare type BackoffFunction = (attemptsMade?: number, err?: Error, job?: Job) => number; -``` -References: [Job](./bullmq.job.md) - diff --git a/docs/gitbook/api/bullmq.backoffoptions.delay.md b/docs/gitbook/api/bullmq.backoffoptions.delay.md deleted file mode 100644 index f48fb8ce48..0000000000 --- a/docs/gitbook/api/bullmq.backoffoptions.delay.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [BackoffOptions](./bullmq.backoffoptions.md) > [delay](./bullmq.backoffoptions.delay.md) - -## BackoffOptions.delay property - -Delay in milliseconds. - -Signature: - -```typescript -delay?: number; -``` diff --git a/docs/gitbook/api/bullmq.backoffoptions.md b/docs/gitbook/api/bullmq.backoffoptions.md deleted file mode 100644 index 982212814f..0000000000 --- a/docs/gitbook/api/bullmq.backoffoptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [BackoffOptions](./bullmq.backoffoptions.md) - -## BackoffOptions interface - -Settings for backing off failed jobs. - -Signature: - -```typescript -export interface BackoffOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [delay?](./bullmq.backoffoptions.delay.md) | number | (Optional) Delay in milliseconds. | -| [type](./bullmq.backoffoptions.type.md) | 'fixed' \| 'exponential' \| (string & {}) | Name of the backoff strategy. | - diff --git a/docs/gitbook/api/bullmq.backoffoptions.type.md b/docs/gitbook/api/bullmq.backoffoptions.type.md deleted file mode 100644 index f049a7e2d5..0000000000 --- a/docs/gitbook/api/bullmq.backoffoptions.type.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [BackoffOptions](./bullmq.backoffoptions.md) > [type](./bullmq.backoffoptions.type.md) - -## BackoffOptions.type property - -Name of the backoff strategy. - -Signature: - -```typescript -type: 'fixed' | 'exponential' | (string & {}); -``` diff --git a/docs/gitbook/api/bullmq.backoffs.builtinstrategies.md b/docs/gitbook/api/bullmq.backoffs.builtinstrategies.md deleted file mode 100644 index 3e6a7c54d5..0000000000 --- a/docs/gitbook/api/bullmq.backoffs.builtinstrategies.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Backoffs](./bullmq.backoffs.md) > [builtinStrategies](./bullmq.backoffs.builtinstrategies.md) - -## Backoffs.builtinStrategies property - -Signature: - -```typescript -static builtinStrategies: BuiltInStrategies; -``` diff --git a/docs/gitbook/api/bullmq.backoffs.calculate.md b/docs/gitbook/api/bullmq.backoffs.calculate.md deleted file mode 100644 index b65986281d..0000000000 --- a/docs/gitbook/api/bullmq.backoffs.calculate.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Backoffs](./bullmq.backoffs.md) > [calculate](./bullmq.backoffs.calculate.md) - -## Backoffs.calculate() method - -Signature: - -```typescript -static calculate(backoff: BackoffOptions, attemptsMade: number, customStrategies: Strategies, err: Error, job: Job): number; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| backoff | [BackoffOptions](./bullmq.backoffoptions.md) | | -| attemptsMade | number | | -| customStrategies | [Strategies](./bullmq.strategies.md) | | -| err | Error | | -| job | [Job](./bullmq.job.md) | | - -Returns: - -number - diff --git a/docs/gitbook/api/bullmq.backoffs.md b/docs/gitbook/api/bullmq.backoffs.md deleted file mode 100644 index 0dee0dc229..0000000000 --- a/docs/gitbook/api/bullmq.backoffs.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Backoffs](./bullmq.backoffs.md) - -## Backoffs class - -Signature: - -```typescript -export declare class Backoffs -``` - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [builtinStrategies](./bullmq.backoffs.builtinstrategies.md) | static | BuiltInStrategies | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [calculate(backoff, attemptsMade, customStrategies, err, job)](./bullmq.backoffs.calculate.md) | static | | -| [normalize(backoff)](./bullmq.backoffs.normalize.md) | static | | - diff --git a/docs/gitbook/api/bullmq.backoffs.normalize.md b/docs/gitbook/api/bullmq.backoffs.normalize.md deleted file mode 100644 index f3ff0f9295..0000000000 --- a/docs/gitbook/api/bullmq.backoffs.normalize.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Backoffs](./bullmq.backoffs.md) > [normalize](./bullmq.backoffs.normalize.md) - -## Backoffs.normalize() method - -Signature: - -```typescript -static normalize(backoff: number | BackoffOptions): BackoffOptions; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| backoff | number \| [BackoffOptions](./bullmq.backoffoptions.md) | | - -Returns: - -[BackoffOptions](./bullmq.backoffoptions.md) - diff --git a/docs/gitbook/api/bullmq.bulkjoboptions.md b/docs/gitbook/api/bullmq.bulkjoboptions.md deleted file mode 100644 index 71f4b4aa70..0000000000 --- a/docs/gitbook/api/bullmq.bulkjoboptions.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [BulkJobOptions](./bullmq.bulkjoboptions.md) - -## BulkJobOptions type - -Signature: - -```typescript -export declare type BulkJobOptions = Omit; -``` -References: [JobsOptions](./bullmq.jobsoptions.md) - diff --git a/docs/gitbook/api/bullmq.childcommand.md b/docs/gitbook/api/bullmq.childcommand.md deleted file mode 100644 index 3c72a99a89..0000000000 --- a/docs/gitbook/api/bullmq.childcommand.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildCommand](./bullmq.childcommand.md) - -## ChildCommand enum - -Signature: - -```typescript -export declare enum ChildCommand -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| Init | 0 | | -| Start | 1 | | -| Stop | 2 | | - diff --git a/docs/gitbook/api/bullmq.childmessage.cmd.md b/docs/gitbook/api/bullmq.childmessage.cmd.md deleted file mode 100644 index 7eb0bd257c..0000000000 --- a/docs/gitbook/api/bullmq.childmessage.cmd.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildMessage](./bullmq.childmessage.md) > [cmd](./bullmq.childmessage.cmd.md) - -## ChildMessage.cmd property - -Signature: - -```typescript -cmd: ParentCommand; -``` diff --git a/docs/gitbook/api/bullmq.childmessage.err.md b/docs/gitbook/api/bullmq.childmessage.err.md deleted file mode 100644 index 385871ae2d..0000000000 --- a/docs/gitbook/api/bullmq.childmessage.err.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildMessage](./bullmq.childmessage.md) > [err](./bullmq.childmessage.err.md) - -## ChildMessage.err property - -Signature: - -```typescript -err?: Error; -``` diff --git a/docs/gitbook/api/bullmq.childmessage.md b/docs/gitbook/api/bullmq.childmessage.md deleted file mode 100644 index 7c8150c8eb..0000000000 --- a/docs/gitbook/api/bullmq.childmessage.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildMessage](./bullmq.childmessage.md) - -## ChildMessage interface - -Signature: - -```typescript -export interface ChildMessage -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [cmd](./bullmq.childmessage.cmd.md) | [ParentCommand](./bullmq.parentcommand.md) | | -| [err?](./bullmq.childmessage.err.md) | Error | (Optional) | -| [value?](./bullmq.childmessage.value.md) | any | (Optional) | - diff --git a/docs/gitbook/api/bullmq.childmessage.value.md b/docs/gitbook/api/bullmq.childmessage.value.md deleted file mode 100644 index 97890ef3ed..0000000000 --- a/docs/gitbook/api/bullmq.childmessage.value.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildMessage](./bullmq.childmessage.md) > [value](./bullmq.childmessage.value.md) - -## ChildMessage.value property - -Signature: - -```typescript -value?: any; -``` diff --git a/docs/gitbook/api/bullmq.childpool._constructor_.md b/docs/gitbook/api/bullmq.childpool._constructor_.md deleted file mode 100644 index 46b90d1bd2..0000000000 --- a/docs/gitbook/api/bullmq.childpool._constructor_.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) > [(constructor)](./bullmq.childpool._constructor_.md) - -## ChildPool.(constructor) - -Constructs a new instance of the `ChildPool` class - -Signature: - -```typescript -constructor(masterFile?: string); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| masterFile | string | | - diff --git a/docs/gitbook/api/bullmq.childpool.clean.md b/docs/gitbook/api/bullmq.childpool.clean.md deleted file mode 100644 index f3479b7d8a..0000000000 --- a/docs/gitbook/api/bullmq.childpool.clean.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) > [clean](./bullmq.childpool.clean.md) - -## ChildPool.clean() method - -Signature: - -```typescript -clean(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.childpool.free.md b/docs/gitbook/api/bullmq.childpool.free.md deleted file mode 100644 index 8bf6be3660..0000000000 --- a/docs/gitbook/api/bullmq.childpool.free.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) > [free](./bullmq.childpool.free.md) - -## ChildPool.free property - -Signature: - -```typescript -free: { - [key: string]: ChildProcessExt[]; - }; -``` diff --git a/docs/gitbook/api/bullmq.childpool.getallfree.md b/docs/gitbook/api/bullmq.childpool.getallfree.md deleted file mode 100644 index 6250d6d75e..0000000000 --- a/docs/gitbook/api/bullmq.childpool.getallfree.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) > [getAllFree](./bullmq.childpool.getallfree.md) - -## ChildPool.getAllFree() method - -Signature: - -```typescript -getAllFree(): ChildProcessExt[]; -``` -Returns: - -[ChildProcessExt](./bullmq.childprocessext.md)\[\] - diff --git a/docs/gitbook/api/bullmq.childpool.getfree.md b/docs/gitbook/api/bullmq.childpool.getfree.md deleted file mode 100644 index f2fc2645ca..0000000000 --- a/docs/gitbook/api/bullmq.childpool.getfree.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) > [getFree](./bullmq.childpool.getfree.md) - -## ChildPool.getFree() method - -Signature: - -```typescript -getFree(id: string): ChildProcessExt[]; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| id | string | | - -Returns: - -[ChildProcessExt](./bullmq.childprocessext.md)\[\] - diff --git a/docs/gitbook/api/bullmq.childpool.kill.md b/docs/gitbook/api/bullmq.childpool.kill.md deleted file mode 100644 index 49fdc4fd54..0000000000 --- a/docs/gitbook/api/bullmq.childpool.kill.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) > [kill](./bullmq.childpool.kill.md) - -## ChildPool.kill() method - -Signature: - -```typescript -kill(child: ChildProcess, signal?: 'SIGTERM' | 'SIGKILL'): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| child | ChildProcess | | -| signal | 'SIGTERM' \| 'SIGKILL' | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.childpool.md b/docs/gitbook/api/bullmq.childpool.md deleted file mode 100644 index a5e162eea2..0000000000 --- a/docs/gitbook/api/bullmq.childpool.md +++ /dev/null @@ -1,37 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) - -## ChildPool class - -Signature: - -```typescript -export declare class ChildPool -``` - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(masterFile)](./bullmq.childpool._constructor_.md) | | Constructs a new instance of the ChildPool class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [free](./bullmq.childpool.free.md) | | { \[key: string\]: [ChildProcessExt](./bullmq.childprocessext.md)\[\]; } | | -| [retained](./bullmq.childpool.retained.md) | | { \[key: number\]: [ChildProcessExt](./bullmq.childprocessext.md); } | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [clean()](./bullmq.childpool.clean.md) | | | -| [getAllFree()](./bullmq.childpool.getallfree.md) | | | -| [getFree(id)](./bullmq.childpool.getfree.md) | | | -| [kill(child, signal)](./bullmq.childpool.kill.md) | | | -| [release(child)](./bullmq.childpool.release.md) | | | -| [remove(child)](./bullmq.childpool.remove.md) | | | -| [retain(processFile)](./bullmq.childpool.retain.md) | | | - diff --git a/docs/gitbook/api/bullmq.childpool.release.md b/docs/gitbook/api/bullmq.childpool.release.md deleted file mode 100644 index 19e6274411..0000000000 --- a/docs/gitbook/api/bullmq.childpool.release.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) > [release](./bullmq.childpool.release.md) - -## ChildPool.release() method - -Signature: - -```typescript -release(child: ChildProcessExt): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| child | [ChildProcessExt](./bullmq.childprocessext.md) | | - -Returns: - -void - diff --git a/docs/gitbook/api/bullmq.childpool.remove.md b/docs/gitbook/api/bullmq.childpool.remove.md deleted file mode 100644 index b9447a7388..0000000000 --- a/docs/gitbook/api/bullmq.childpool.remove.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) > [remove](./bullmq.childpool.remove.md) - -## ChildPool.remove() method - -Signature: - -```typescript -remove(child: ChildProcessExt): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| child | [ChildProcessExt](./bullmq.childprocessext.md) | | - -Returns: - -void - diff --git a/docs/gitbook/api/bullmq.childpool.retain.md b/docs/gitbook/api/bullmq.childpool.retain.md deleted file mode 100644 index e84937002c..0000000000 --- a/docs/gitbook/api/bullmq.childpool.retain.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) > [retain](./bullmq.childpool.retain.md) - -## ChildPool.retain() method - -Signature: - -```typescript -retain(processFile: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| processFile | string | | - -Returns: - -Promise<[ChildProcessExt](./bullmq.childprocessext.md)> - diff --git a/docs/gitbook/api/bullmq.childpool.retained.md b/docs/gitbook/api/bullmq.childpool.retained.md deleted file mode 100644 index c248b1eef8..0000000000 --- a/docs/gitbook/api/bullmq.childpool.retained.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildPool](./bullmq.childpool.md) > [retained](./bullmq.childpool.retained.md) - -## ChildPool.retained property - -Signature: - -```typescript -retained: { - [key: number]: ChildProcessExt; - }; -``` diff --git a/docs/gitbook/api/bullmq.childprocessext.md b/docs/gitbook/api/bullmq.childprocessext.md deleted file mode 100644 index fc502c3eab..0000000000 --- a/docs/gitbook/api/bullmq.childprocessext.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildProcessExt](./bullmq.childprocessext.md) - -## ChildProcessExt interface - -Signature: - -```typescript -export interface ChildProcessExt extends ChildProcess -``` -Extends: ChildProcess - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [processFile?](./bullmq.childprocessext.processfile.md) | string | (Optional) | - diff --git a/docs/gitbook/api/bullmq.childprocessext.processfile.md b/docs/gitbook/api/bullmq.childprocessext.processfile.md deleted file mode 100644 index 97d33bfc1f..0000000000 --- a/docs/gitbook/api/bullmq.childprocessext.processfile.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildProcessExt](./bullmq.childprocessext.md) > [processFile](./bullmq.childprocessext.processfile.md) - -## ChildProcessExt.processFile property - -Signature: - -```typescript -processFile?: string; -``` diff --git a/docs/gitbook/api/bullmq.childprocessor.currentjobpromise.md b/docs/gitbook/api/bullmq.childprocessor.currentjobpromise.md deleted file mode 100644 index 09239dd4d4..0000000000 --- a/docs/gitbook/api/bullmq.childprocessor.currentjobpromise.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildProcessor](./bullmq.childprocessor.md) > [currentJobPromise](./bullmq.childprocessor.currentjobpromise.md) - -## ChildProcessor.currentJobPromise property - -Signature: - -```typescript -currentJobPromise: Promise | undefined; -``` diff --git a/docs/gitbook/api/bullmq.childprocessor.init.md b/docs/gitbook/api/bullmq.childprocessor.init.md deleted file mode 100644 index 2d7cae8945..0000000000 --- a/docs/gitbook/api/bullmq.childprocessor.init.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildProcessor](./bullmq.childprocessor.md) > [init](./bullmq.childprocessor.init.md) - -## ChildProcessor.init() method - -Signature: - -```typescript -init(processorFile: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| processorFile | string | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.childprocessor.md b/docs/gitbook/api/bullmq.childprocessor.md deleted file mode 100644 index 0944ee03a9..0000000000 --- a/docs/gitbook/api/bullmq.childprocessor.md +++ /dev/null @@ -1,33 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildProcessor](./bullmq.childprocessor.md) - -## ChildProcessor class - -ChildProcessor - -This class acts as the interface between a child process and it parent process so that jobs can be processed in different processes than the parent. - -Signature: - -```typescript -export declare class ChildProcessor -``` - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [currentJobPromise](./bullmq.childprocessor.currentjobpromise.md) | | Promise<unknown> \| undefined | | -| [processor](./bullmq.childprocessor.processor.md) | | any | | -| [status](./bullmq.childprocessor.status.md) | | ChildStatus | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [init(processorFile)](./bullmq.childprocessor.init.md) | | | -| [start(jobJson)](./bullmq.childprocessor.start.md) | | | -| [stop()](./bullmq.childprocessor.stop.md) | | | -| [waitForCurrentJobAndExit()](./bullmq.childprocessor.waitforcurrentjobandexit.md) | | | - diff --git a/docs/gitbook/api/bullmq.childprocessor.processor.md b/docs/gitbook/api/bullmq.childprocessor.processor.md deleted file mode 100644 index eb326a2236..0000000000 --- a/docs/gitbook/api/bullmq.childprocessor.processor.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildProcessor](./bullmq.childprocessor.md) > [processor](./bullmq.childprocessor.processor.md) - -## ChildProcessor.processor property - -Signature: - -```typescript -processor: any; -``` diff --git a/docs/gitbook/api/bullmq.childprocessor.start.md b/docs/gitbook/api/bullmq.childprocessor.start.md deleted file mode 100644 index 23ce79b8f2..0000000000 --- a/docs/gitbook/api/bullmq.childprocessor.start.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildProcessor](./bullmq.childprocessor.md) > [start](./bullmq.childprocessor.start.md) - -## ChildProcessor.start() method - -Signature: - -```typescript -start(jobJson: JobJson): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| jobJson | [JobJson](./bullmq.jobjson.md) | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.childprocessor.status.md b/docs/gitbook/api/bullmq.childprocessor.status.md deleted file mode 100644 index 8eab276044..0000000000 --- a/docs/gitbook/api/bullmq.childprocessor.status.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildProcessor](./bullmq.childprocessor.md) > [status](./bullmq.childprocessor.status.md) - -## ChildProcessor.status property - -Signature: - -```typescript -status: ChildStatus; -``` diff --git a/docs/gitbook/api/bullmq.childprocessor.stop.md b/docs/gitbook/api/bullmq.childprocessor.stop.md deleted file mode 100644 index 486d25805d..0000000000 --- a/docs/gitbook/api/bullmq.childprocessor.stop.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildProcessor](./bullmq.childprocessor.md) > [stop](./bullmq.childprocessor.stop.md) - -## ChildProcessor.stop() method - -Signature: - -```typescript -stop(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.childprocessor.waitforcurrentjobandexit.md b/docs/gitbook/api/bullmq.childprocessor.waitforcurrentjobandexit.md deleted file mode 100644 index 74f0a8edb1..0000000000 --- a/docs/gitbook/api/bullmq.childprocessor.waitforcurrentjobandexit.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ChildProcessor](./bullmq.childprocessor.md) > [waitForCurrentJobAndExit](./bullmq.childprocessor.waitforcurrentjobandexit.md) - -## ChildProcessor.waitForCurrentJobAndExit() method - -Signature: - -```typescript -waitForCurrentJobAndExit(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.childsend.md b/docs/gitbook/api/bullmq.childsend.md deleted file mode 100644 index 8d6374eb9a..0000000000 --- a/docs/gitbook/api/bullmq.childsend.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [childSend](./bullmq.childsend.md) - -## childSend variable - -Signature: - -```typescript -childSend: (proc: NodeJS.Process, msg: ChildMessage) => Promise -``` diff --git a/docs/gitbook/api/bullmq.cleanedeventcallback3.md b/docs/gitbook/api/bullmq.cleanedeventcallback3.md deleted file mode 100644 index 393f64c994..0000000000 --- a/docs/gitbook/api/bullmq.cleanedeventcallback3.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [CleanedEventCallback3](./bullmq.cleanedeventcallback3.md) - -## CleanedEventCallback3 type - -Signature: - -```typescript -export declare type CleanedEventCallback3 = (jobs: Array, status: JobStatusClean3) => void; -``` -References: [Job](./bullmq.job.md), [JobStatusClean3](./bullmq.jobstatusclean3.md) - diff --git a/docs/gitbook/api/bullmq.clientcommandmessagereg.md b/docs/gitbook/api/bullmq.clientcommandmessagereg.md deleted file mode 100644 index 8811a8ded2..0000000000 --- a/docs/gitbook/api/bullmq.clientcommandmessagereg.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [clientCommandMessageReg](./bullmq.clientcommandmessagereg.md) - -## clientCommandMessageReg variable - -Signature: - -```typescript -clientCommandMessageReg: RegExp -``` diff --git a/docs/gitbook/api/bullmq.clienttype.md b/docs/gitbook/api/bullmq.clienttype.md deleted file mode 100644 index 1b7caf5f44..0000000000 --- a/docs/gitbook/api/bullmq.clienttype.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ClientType](./bullmq.clienttype.md) - -## ClientType enum - -Signature: - -```typescript -export declare enum ClientType -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| blocking | "blocking" | | -| normal | "normal" | | - diff --git a/docs/gitbook/api/bullmq.clusteroptions.md b/docs/gitbook/api/bullmq.clusteroptions.md deleted file mode 100644 index 30cab6a1b8..0000000000 --- a/docs/gitbook/api/bullmq.clusteroptions.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ClusterOptions](./bullmq.clusteroptions.md) - -## ClusterOptions type - -Signature: - -```typescript -export declare type ClusterOptions = IORedis.ClusterOptions & BaseOptions; -``` diff --git a/docs/gitbook/api/bullmq.command.md b/docs/gitbook/api/bullmq.command.md deleted file mode 100644 index a5630feabb..0000000000 --- a/docs/gitbook/api/bullmq.command.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Command](./bullmq.command.md) - -## Command interface - -Signature: - -```typescript -export interface Command -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [name](./bullmq.command.name.md) | string | | -| [options](./bullmq.command.options.md) | { numberOfKeys: number; lua: string; } | | - diff --git a/docs/gitbook/api/bullmq.command.name.md b/docs/gitbook/api/bullmq.command.name.md deleted file mode 100644 index 5b5d119db1..0000000000 --- a/docs/gitbook/api/bullmq.command.name.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Command](./bullmq.command.md) > [name](./bullmq.command.name.md) - -## Command.name property - -Signature: - -```typescript -name: string; -``` diff --git a/docs/gitbook/api/bullmq.command.options.md b/docs/gitbook/api/bullmq.command.options.md deleted file mode 100644 index e803915ee4..0000000000 --- a/docs/gitbook/api/bullmq.command.options.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Command](./bullmq.command.md) > [options](./bullmq.command.options.md) - -## Command.options property - -Signature: - -```typescript -options: { - numberOfKeys: number; - lua: string; - }; -``` diff --git a/docs/gitbook/api/bullmq.completedeventcallback3.md b/docs/gitbook/api/bullmq.completedeventcallback3.md deleted file mode 100644 index 2485401142..0000000000 --- a/docs/gitbook/api/bullmq.completedeventcallback3.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [CompletedEventCallback3](./bullmq.completedeventcallback3.md) - -## CompletedEventCallback3 type - -Signature: - -```typescript -export declare type CompletedEventCallback3 = (job: Job, result: any) => void; -``` -References: [Job](./bullmq.job.md) - diff --git a/docs/gitbook/api/bullmq.connectionoptions.md b/docs/gitbook/api/bullmq.connectionoptions.md deleted file mode 100644 index 5e9ece6dd0..0000000000 --- a/docs/gitbook/api/bullmq.connectionoptions.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ConnectionOptions](./bullmq.connectionoptions.md) - -## ConnectionOptions type - -Signature: - -```typescript -export declare type ConnectionOptions = RedisOptions | ClusterOptions | IORedis.Redis | IORedis.Cluster; -``` -References: [RedisOptions](./bullmq.redisoptions.md), [ClusterOptions](./bullmq.clusteroptions.md) - diff --git a/docs/gitbook/api/bullmq.delay.md b/docs/gitbook/api/bullmq.delay.md deleted file mode 100644 index 8d1e6e8f6d..0000000000 --- a/docs/gitbook/api/bullmq.delay.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [delay](./bullmq.delay.md) - -## delay() function - -Signature: - -```typescript -export declare function delay(ms: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| ms | number | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.delay_time_1.md b/docs/gitbook/api/bullmq.delay_time_1.md deleted file mode 100644 index 91e146ee23..0000000000 --- a/docs/gitbook/api/bullmq.delay_time_1.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [DELAY\_TIME\_1](./bullmq.delay_time_1.md) - -## DELAY\_TIME\_1 variable - -Signature: - -```typescript -DELAY_TIME_1 = 100 -``` diff --git a/docs/gitbook/api/bullmq.delay_time_5.md b/docs/gitbook/api/bullmq.delay_time_5.md deleted file mode 100644 index 938f1608e2..0000000000 --- a/docs/gitbook/api/bullmq.delay_time_5.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [DELAY\_TIME\_5](./bullmq.delay_time_5.md) - -## DELAY\_TIME\_5 variable - -Signature: - -```typescript -DELAY_TIME_5 = 5000 -``` diff --git a/docs/gitbook/api/bullmq.dependenciesopts.md b/docs/gitbook/api/bullmq.dependenciesopts.md deleted file mode 100644 index ca539442ea..0000000000 --- a/docs/gitbook/api/bullmq.dependenciesopts.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [DependenciesOpts](./bullmq.dependenciesopts.md) - -## DependenciesOpts interface - -Signature: - -```typescript -export interface DependenciesOpts -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [processed?](./bullmq.dependenciesopts.processed.md) | { cursor?: number; count?: number; } | (Optional) | -| [unprocessed?](./bullmq.dependenciesopts.unprocessed.md) | { cursor?: number; count?: number; } | (Optional) | - diff --git a/docs/gitbook/api/bullmq.dependenciesopts.processed.md b/docs/gitbook/api/bullmq.dependenciesopts.processed.md deleted file mode 100644 index ae16d15023..0000000000 --- a/docs/gitbook/api/bullmq.dependenciesopts.processed.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [DependenciesOpts](./bullmq.dependenciesopts.md) > [processed](./bullmq.dependenciesopts.processed.md) - -## DependenciesOpts.processed property - -Signature: - -```typescript -processed?: { - cursor?: number; - count?: number; - }; -``` diff --git a/docs/gitbook/api/bullmq.dependenciesopts.unprocessed.md b/docs/gitbook/api/bullmq.dependenciesopts.unprocessed.md deleted file mode 100644 index ee28f98f5c..0000000000 --- a/docs/gitbook/api/bullmq.dependenciesopts.unprocessed.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [DependenciesOpts](./bullmq.dependenciesopts.md) > [unprocessed](./bullmq.dependenciesopts.unprocessed.md) - -## DependenciesOpts.unprocessed property - -Signature: - -```typescript -unprocessed?: { - cursor?: number; - count?: number; - }; -``` diff --git a/docs/gitbook/api/bullmq.entryid.md b/docs/gitbook/api/bullmq.entryid.md deleted file mode 100644 index 39d18638d0..0000000000 --- a/docs/gitbook/api/bullmq.entryid.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [EntryId](./bullmq.entryid.md) - -## EntryId type - -Signature: - -```typescript -export declare type EntryId = string; -``` diff --git a/docs/gitbook/api/bullmq.entryraw.md b/docs/gitbook/api/bullmq.entryraw.md deleted file mode 100644 index ce8a168e2c..0000000000 --- a/docs/gitbook/api/bullmq.entryraw.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [EntryRaw](./bullmq.entryraw.md) - -## EntryRaw type - -Signature: - -```typescript -export declare type EntryRaw = [EntryId, string[]]; -``` -References: [EntryId](./bullmq.entryid.md) - diff --git a/docs/gitbook/api/bullmq.errorcode.md b/docs/gitbook/api/bullmq.errorcode.md deleted file mode 100644 index 3ad5859f87..0000000000 --- a/docs/gitbook/api/bullmq.errorcode.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ErrorCode](./bullmq.errorcode.md) - -## ErrorCode enum - -Signature: - -```typescript -export declare enum ErrorCode -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| JobLockNotExist | -2 | | -| JobNotExist | -1 | | -| JobNotInState | -3 | | -| JobPendingDependencies | -4 | | -| ParentJobNotExist | -5 | | - diff --git a/docs/gitbook/api/bullmq.erroreventcallback3.md b/docs/gitbook/api/bullmq.erroreventcallback3.md deleted file mode 100644 index 3da56ee2d2..0000000000 --- a/docs/gitbook/api/bullmq.erroreventcallback3.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ErrorEventCallback3](./bullmq.erroreventcallback3.md) - -## ErrorEventCallback3 type - -Signature: - -```typescript -export declare type ErrorEventCallback3 = (error: Error) => void; -``` diff --git a/docs/gitbook/api/bullmq.errorobject.md b/docs/gitbook/api/bullmq.errorobject.md deleted file mode 100644 index 3551dd366b..0000000000 --- a/docs/gitbook/api/bullmq.errorobject.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [errorObject](./bullmq.errorobject.md) - -## errorObject variable - -Signature: - -```typescript -errorObject: { - [index: string]: any; -} -``` diff --git a/docs/gitbook/api/bullmq.eventcallback3.md b/docs/gitbook/api/bullmq.eventcallback3.md deleted file mode 100644 index d1452cf8d4..0000000000 --- a/docs/gitbook/api/bullmq.eventcallback3.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [EventCallback3](./bullmq.eventcallback3.md) - -## EventCallback3 type - -Signature: - -```typescript -export declare type EventCallback3 = () => void; -``` diff --git a/docs/gitbook/api/bullmq.failedeventcallback3.md b/docs/gitbook/api/bullmq.failedeventcallback3.md deleted file mode 100644 index 2c047b403f..0000000000 --- a/docs/gitbook/api/bullmq.failedeventcallback3.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FailedEventCallback3](./bullmq.failedeventcallback3.md) - -## FailedEventCallback3 type - -Signature: - -```typescript -export declare type FailedEventCallback3 = (job: Job, error: Error) => void; -``` -References: [Job](./bullmq.job.md) - diff --git a/docs/gitbook/api/bullmq.finishedpropvalattribute.md b/docs/gitbook/api/bullmq.finishedpropvalattribute.md deleted file mode 100644 index 43198c036b..0000000000 --- a/docs/gitbook/api/bullmq.finishedpropvalattribute.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FinishedPropValAttribute](./bullmq.finishedpropvalattribute.md) - -## FinishedPropValAttribute type - -Signature: - -```typescript -export declare type FinishedPropValAttribute = 'returnvalue' | 'failedReason'; -``` diff --git a/docs/gitbook/api/bullmq.finishedstatus.md b/docs/gitbook/api/bullmq.finishedstatus.md deleted file mode 100644 index 529dbeef7a..0000000000 --- a/docs/gitbook/api/bullmq.finishedstatus.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FinishedStatus](./bullmq.finishedstatus.md) - -## FinishedStatus type - -Signature: - -```typescript -export declare type FinishedStatus = 'completed' | 'failed'; -``` diff --git a/docs/gitbook/api/bullmq.flowjob.children.md b/docs/gitbook/api/bullmq.flowjob.children.md deleted file mode 100644 index 1de780114a..0000000000 --- a/docs/gitbook/api/bullmq.flowjob.children.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowJob](./bullmq.flowjob.md) > [children](./bullmq.flowjob.children.md) - -## FlowJob.children property - -Signature: - -```typescript -children?: FlowJob[]; -``` diff --git a/docs/gitbook/api/bullmq.flowjob.data.md b/docs/gitbook/api/bullmq.flowjob.data.md deleted file mode 100644 index 86dccaf52c..0000000000 --- a/docs/gitbook/api/bullmq.flowjob.data.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowJob](./bullmq.flowjob.md) > [data](./bullmq.flowjob.data.md) - -## FlowJob.data property - -Signature: - -```typescript -data?: any; -``` diff --git a/docs/gitbook/api/bullmq.flowjob.md b/docs/gitbook/api/bullmq.flowjob.md deleted file mode 100644 index 61c9d7324a..0000000000 --- a/docs/gitbook/api/bullmq.flowjob.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowJob](./bullmq.flowjob.md) - -## FlowJob interface - -Signature: - -```typescript -export interface FlowJob -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [children?](./bullmq.flowjob.children.md) | [FlowJob](./bullmq.flowjob.md)\[\] | (Optional) | -| [data?](./bullmq.flowjob.data.md) | any | (Optional) | -| [name](./bullmq.flowjob.name.md) | string | | -| [opts?](./bullmq.flowjob.opts.md) | Omit<[JobsOptions](./bullmq.jobsoptions.md), 'parent' \| 'repeat'> | (Optional) | -| [prefix?](./bullmq.flowjob.prefix.md) | string | (Optional) | -| [queueName](./bullmq.flowjob.queuename.md) | string | | - diff --git a/docs/gitbook/api/bullmq.flowjob.name.md b/docs/gitbook/api/bullmq.flowjob.name.md deleted file mode 100644 index 97eb756d32..0000000000 --- a/docs/gitbook/api/bullmq.flowjob.name.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowJob](./bullmq.flowjob.md) > [name](./bullmq.flowjob.name.md) - -## FlowJob.name property - -Signature: - -```typescript -name: string; -``` diff --git a/docs/gitbook/api/bullmq.flowjob.opts.md b/docs/gitbook/api/bullmq.flowjob.opts.md deleted file mode 100644 index 68fcca95e0..0000000000 --- a/docs/gitbook/api/bullmq.flowjob.opts.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowJob](./bullmq.flowjob.md) > [opts](./bullmq.flowjob.opts.md) - -## FlowJob.opts property - -Signature: - -```typescript -opts?: Omit; -``` diff --git a/docs/gitbook/api/bullmq.flowjob.prefix.md b/docs/gitbook/api/bullmq.flowjob.prefix.md deleted file mode 100644 index bc5b679ae3..0000000000 --- a/docs/gitbook/api/bullmq.flowjob.prefix.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowJob](./bullmq.flowjob.md) > [prefix](./bullmq.flowjob.prefix.md) - -## FlowJob.prefix property - -Signature: - -```typescript -prefix?: string; -``` diff --git a/docs/gitbook/api/bullmq.flowjob.queuename.md b/docs/gitbook/api/bullmq.flowjob.queuename.md deleted file mode 100644 index 3a9fe8c816..0000000000 --- a/docs/gitbook/api/bullmq.flowjob.queuename.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowJob](./bullmq.flowjob.md) > [queueName](./bullmq.flowjob.queuename.md) - -## FlowJob.queueName property - -Signature: - -```typescript -queueName: string; -``` diff --git a/docs/gitbook/api/bullmq.flowopts.md b/docs/gitbook/api/bullmq.flowopts.md deleted file mode 100644 index a1f821bb0f..0000000000 --- a/docs/gitbook/api/bullmq.flowopts.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowOpts](./bullmq.flowopts.md) - -## FlowOpts interface - -Signature: - -```typescript -export interface FlowOpts -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [queuesOptions](./bullmq.flowopts.queuesoptions.md) | [FlowQueuesOpts](./bullmq.flowqueuesopts.md) | Map of options for Queue classes. | - diff --git a/docs/gitbook/api/bullmq.flowopts.queuesoptions.md b/docs/gitbook/api/bullmq.flowopts.queuesoptions.md deleted file mode 100644 index b117df0bd8..0000000000 --- a/docs/gitbook/api/bullmq.flowopts.queuesoptions.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowOpts](./bullmq.flowopts.md) > [queuesOptions](./bullmq.flowopts.queuesoptions.md) - -## FlowOpts.queuesOptions property - -Map of options for Queue classes. - -Signature: - -```typescript -queuesOptions: FlowQueuesOpts; -``` diff --git a/docs/gitbook/api/bullmq.flowproducer._constructor_.md b/docs/gitbook/api/bullmq.flowproducer._constructor_.md deleted file mode 100644 index 5c1839b60b..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer._constructor_.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [(constructor)](./bullmq.flowproducer._constructor_.md) - -## FlowProducer.(constructor) - -Constructs a new instance of the `FlowProducer` class - -Signature: - -```typescript -constructor(opts?: QueueBaseOptions); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| opts | [QueueBaseOptions](./bullmq.queuebaseoptions.md) | | - diff --git a/docs/gitbook/api/bullmq.flowproducer.add.md b/docs/gitbook/api/bullmq.flowproducer.add.md deleted file mode 100644 index 31e8c7c9eb..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.add.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [add](./bullmq.flowproducer.add.md) - -## FlowProducer.add() method - -Adds a flow. - -This call would be atomic, either it fails and no jobs will be added to the queues, or it succeeds and all jobs will be added. - -Signature: - -```typescript -add(flow: FlowJob, opts?: FlowOpts): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| flow | [FlowJob](./bullmq.flowjob.md) | an object with a tree-like structure where children jobs will be processed before their parents. | -| opts | [FlowOpts](./bullmq.flowopts.md) | options that will be applied to the flow object. | - -Returns: - -Promise<[JobNode](./bullmq.jobnode.md)> - diff --git a/docs/gitbook/api/bullmq.flowproducer.addbulk.md b/docs/gitbook/api/bullmq.flowproducer.addbulk.md deleted file mode 100644 index cfd9c7c6a6..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.addbulk.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [addBulk](./bullmq.flowproducer.addbulk.md) - -## FlowProducer.addBulk() method - -Adds multiple flows. - -A flow is a tree-like structure of jobs that depend on each other. Whenever the children of a given parent are completed, the parent will be processed, being able to access the children's result data. - -All Jobs can be in different queues, either children or parents, however this call would be atomic, either it fails and no jobs will be added to the queues, or it succeeds and all jobs will be added. - -Signature: - -```typescript -addBulk(flows: FlowJob[]): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| flows | [FlowJob](./bullmq.flowjob.md)\[\] | an array of objects with a tree-like structure where children jobs will be processed before their parents. | - -Returns: - -Promise<[JobNode](./bullmq.jobnode.md)\[\]> - diff --git a/docs/gitbook/api/bullmq.flowproducer.client.md b/docs/gitbook/api/bullmq.flowproducer.client.md deleted file mode 100644 index 8d3dfc0d36..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.client.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [client](./bullmq.flowproducer.client.md) - -## FlowProducer.client property - -Signature: - -```typescript -get client(): Promise; -``` diff --git a/docs/gitbook/api/bullmq.flowproducer.close.md b/docs/gitbook/api/bullmq.flowproducer.close.md deleted file mode 100644 index 3339441096..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.close.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [close](./bullmq.flowproducer.close.md) - -## FlowProducer.close() method - -Signature: - -```typescript -close(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.flowproducer.closing.md b/docs/gitbook/api/bullmq.flowproducer.closing.md deleted file mode 100644 index 0671964417..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.closing.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [closing](./bullmq.flowproducer.closing.md) - -## FlowProducer.closing property - -Signature: - -```typescript -closing: Promise; -``` diff --git a/docs/gitbook/api/bullmq.flowproducer.connection.md b/docs/gitbook/api/bullmq.flowproducer.connection.md deleted file mode 100644 index 17a737d2a7..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.connection.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [connection](./bullmq.flowproducer.connection.md) - -## FlowProducer.connection property - -Signature: - -```typescript -protected connection: RedisConnection; -``` diff --git a/docs/gitbook/api/bullmq.flowproducer.disconnect.md b/docs/gitbook/api/bullmq.flowproducer.disconnect.md deleted file mode 100644 index efa037fedb..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.disconnect.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [disconnect](./bullmq.flowproducer.disconnect.md) - -## FlowProducer.disconnect() method - -Signature: - -```typescript -disconnect(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.flowproducer.getflow.md b/docs/gitbook/api/bullmq.flowproducer.getflow.md deleted file mode 100644 index 3f60be98ad..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.getflow.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [getFlow](./bullmq.flowproducer.getflow.md) - -## FlowProducer.getFlow() method - -Get a flow. - -Signature: - -```typescript -getFlow(opts: NodeOpts): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| opts | [NodeOpts](./bullmq.nodeopts.md) | an object with options for getting a JobNode. | - -Returns: - -Promise<[JobNode](./bullmq.jobnode.md)> - diff --git a/docs/gitbook/api/bullmq.flowproducer.keys.md b/docs/gitbook/api/bullmq.flowproducer.keys.md deleted file mode 100644 index 69e494ec25..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.keys.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [keys](./bullmq.flowproducer.keys.md) - -## FlowProducer.keys property - -Signature: - -```typescript -keys: KeysMap; -``` diff --git a/docs/gitbook/api/bullmq.flowproducer.md b/docs/gitbook/api/bullmq.flowproducer.md deleted file mode 100644 index c97b325645..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.md +++ /dev/null @@ -1,43 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) - -## FlowProducer class - -This class allows to add jobs with dependencies between them in such a way that it is possible to build complex flows. Note: A flow is a tree-like structure of jobs that depend on each other. Whenever the children of a given parent are completed, the parent will be processed, being able to access the children's result data. All Jobs can be in different queues, either children or parents, - -Signature: - -```typescript -export declare class FlowProducer extends EventEmitter -``` -Extends: EventEmitter - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(opts)](./bullmq.flowproducer._constructor_.md) | | Constructs a new instance of the FlowProducer class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [client](./bullmq.flowproducer.client.md) | | Promise<[RedisClient](./bullmq.redisclient.md)> | | -| [closing](./bullmq.flowproducer.closing.md) | | Promise<void> | | -| [connection](./bullmq.flowproducer.connection.md) | | [RedisConnection](./bullmq.redisconnection.md) | | -| [keys](./bullmq.flowproducer.keys.md) | | [KeysMap](./bullmq.keysmap.md) | | -| [opts](./bullmq.flowproducer.opts.md) | | [QueueBaseOptions](./bullmq.queuebaseoptions.md) | | -| [queueKeys](./bullmq.flowproducer.queuekeys.md) | | [QueueKeys](./bullmq.queuekeys.md) | | -| [toKey](./bullmq.flowproducer.tokey.md) | | (name: string, type: string) => string | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [add(flow, opts)](./bullmq.flowproducer.add.md) | | Adds a flow.This call would be atomic, either it fails and no jobs will be added to the queues, or it succeeds and all jobs will be added. | -| [addBulk(flows)](./bullmq.flowproducer.addbulk.md) | | Adds multiple flows.A flow is a tree-like structure of jobs that depend on each other. Whenever the children of a given parent are completed, the parent will be processed, being able to access the children's result data.All Jobs can be in different queues, either children or parents, however this call would be atomic, either it fails and no jobs will be added to the queues, or it succeeds and all jobs will be added. | -| [close()](./bullmq.flowproducer.close.md) | | | -| [disconnect()](./bullmq.flowproducer.disconnect.md) | | | -| [getFlow(opts)](./bullmq.flowproducer.getflow.md) | | Get a flow. | - diff --git a/docs/gitbook/api/bullmq.flowproducer.opts.md b/docs/gitbook/api/bullmq.flowproducer.opts.md deleted file mode 100644 index 3afe2af29c..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.opts.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [opts](./bullmq.flowproducer.opts.md) - -## FlowProducer.opts property - -Signature: - -```typescript -opts: QueueBaseOptions; -``` diff --git a/docs/gitbook/api/bullmq.flowproducer.queuekeys.md b/docs/gitbook/api/bullmq.flowproducer.queuekeys.md deleted file mode 100644 index 1aa66dfa32..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.queuekeys.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [queueKeys](./bullmq.flowproducer.queuekeys.md) - -## FlowProducer.queueKeys property - -Signature: - -```typescript -queueKeys: QueueKeys; -``` diff --git a/docs/gitbook/api/bullmq.flowproducer.tokey.md b/docs/gitbook/api/bullmq.flowproducer.tokey.md deleted file mode 100644 index 52383edbea..0000000000 --- a/docs/gitbook/api/bullmq.flowproducer.tokey.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowProducer](./bullmq.flowproducer.md) > [toKey](./bullmq.flowproducer.tokey.md) - -## FlowProducer.toKey property - -Signature: - -```typescript -toKey: (name: string, type: string) => string; -``` diff --git a/docs/gitbook/api/bullmq.flowqueuesopts.md b/docs/gitbook/api/bullmq.flowqueuesopts.md deleted file mode 100644 index a744d976e1..0000000000 --- a/docs/gitbook/api/bullmq.flowqueuesopts.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [FlowQueuesOpts](./bullmq.flowqueuesopts.md) - -## FlowQueuesOpts type - -Signature: - -```typescript -export declare type FlowQueuesOpts = Record>; -``` -References: [QueueOptions](./bullmq.queueoptions.md) - diff --git a/docs/gitbook/api/bullmq.getnextjoboptions.block.md b/docs/gitbook/api/bullmq.getnextjoboptions.block.md deleted file mode 100644 index b3042f3e88..0000000000 --- a/docs/gitbook/api/bullmq.getnextjoboptions.block.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [GetNextJobOptions](./bullmq.getnextjoboptions.md) > [block](./bullmq.getnextjoboptions.block.md) - -## GetNextJobOptions.block property - -Signature: - -```typescript -block?: boolean; -``` diff --git a/docs/gitbook/api/bullmq.getnextjoboptions.md b/docs/gitbook/api/bullmq.getnextjoboptions.md deleted file mode 100644 index b0e86fba7b..0000000000 --- a/docs/gitbook/api/bullmq.getnextjoboptions.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [GetNextJobOptions](./bullmq.getnextjoboptions.md) - -## GetNextJobOptions interface - -Signature: - -```typescript -export interface GetNextJobOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [block?](./bullmq.getnextjoboptions.block.md) | boolean | (Optional) | - diff --git a/docs/gitbook/api/bullmq.getparentkey.md b/docs/gitbook/api/bullmq.getparentkey.md deleted file mode 100644 index 7ab8823f32..0000000000 --- a/docs/gitbook/api/bullmq.getparentkey.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [getParentKey](./bullmq.getparentkey.md) - -## getParentKey() function - -Signature: - -```typescript -export declare function getParentKey(opts: { - id: string; - queue: string; -}): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| opts | { id: string; queue: string; } | | - -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.iconnection.client.md b/docs/gitbook/api/bullmq.iconnection.client.md deleted file mode 100644 index 345baad240..0000000000 --- a/docs/gitbook/api/bullmq.iconnection.client.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [IConnection](./bullmq.iconnection.md) > [client](./bullmq.iconnection.client.md) - -## IConnection.client property - -Signature: - -```typescript -client: Promise; -``` diff --git a/docs/gitbook/api/bullmq.iconnection.md b/docs/gitbook/api/bullmq.iconnection.md deleted file mode 100644 index 44d8f26e3d..0000000000 --- a/docs/gitbook/api/bullmq.iconnection.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [IConnection](./bullmq.iconnection.md) - -## IConnection interface - -Signature: - -```typescript -export interface IConnection extends EventEmitter -``` -Extends: EventEmitter - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [client](./bullmq.iconnection.client.md) | Promise<[RedisClient](./bullmq.redisclient.md)> | | - -## Methods - -| Method | Description | -| --- | --- | -| [waitUntilReady()](./bullmq.iconnection.waituntilready.md) | | - diff --git a/docs/gitbook/api/bullmq.iconnection.waituntilready.md b/docs/gitbook/api/bullmq.iconnection.waituntilready.md deleted file mode 100644 index f30eadb3ec..0000000000 --- a/docs/gitbook/api/bullmq.iconnection.waituntilready.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [IConnection](./bullmq.iconnection.md) > [waitUntilReady](./bullmq.iconnection.waituntilready.md) - -## IConnection.waitUntilReady() method - -Signature: - -```typescript -waitUntilReady(): Promise; -``` -Returns: - -Promise<boolean> - diff --git a/docs/gitbook/api/bullmq.isempty.md b/docs/gitbook/api/bullmq.isempty.md deleted file mode 100644 index a895fa3778..0000000000 --- a/docs/gitbook/api/bullmq.isempty.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [isEmpty](./bullmq.isempty.md) - -## isEmpty() function - -Signature: - -```typescript -export declare function isEmpty(obj: object): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| obj | object | | - -Returns: - -boolean - diff --git a/docs/gitbook/api/bullmq.isnotconnectionerror.md b/docs/gitbook/api/bullmq.isnotconnectionerror.md deleted file mode 100644 index db3447802c..0000000000 --- a/docs/gitbook/api/bullmq.isnotconnectionerror.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [isNotConnectionError](./bullmq.isnotconnectionerror.md) - -## isNotConnectionError() function - -Signature: - -```typescript -export declare function isNotConnectionError(error: Error): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| error | Error | | - -Returns: - -boolean - diff --git a/docs/gitbook/api/bullmq.isrediscluster.md b/docs/gitbook/api/bullmq.isrediscluster.md deleted file mode 100644 index 0ca5c0e1ef..0000000000 --- a/docs/gitbook/api/bullmq.isrediscluster.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [isRedisCluster](./bullmq.isrediscluster.md) - -## isRedisCluster() function - -Signature: - -```typescript -export declare function isRedisCluster(obj: unknown): obj is Cluster; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| obj | unknown | | - -Returns: - -obj is Cluster - diff --git a/docs/gitbook/api/bullmq.isredisinstance.md b/docs/gitbook/api/bullmq.isredisinstance.md deleted file mode 100644 index f19439ede4..0000000000 --- a/docs/gitbook/api/bullmq.isredisinstance.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [isRedisInstance](./bullmq.isredisinstance.md) - -## isRedisInstance() function - -Signature: - -```typescript -export declare function isRedisInstance(obj: any): obj is Redis | Cluster; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| obj | any | | - -Returns: - -obj is Redis \| Cluster - diff --git a/docs/gitbook/api/bullmq.job._constructor_.md b/docs/gitbook/api/bullmq.job._constructor_.md deleted file mode 100644 index 76c9dd63c8..0000000000 --- a/docs/gitbook/api/bullmq.job._constructor_.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [(constructor)](./bullmq.job._constructor_.md) - -## Job.(constructor) - -Constructs a new instance of the `Job` class - -Signature: - -```typescript -constructor(queue: MinimalQueue, - name: NameType, - data: DataType, - opts?: JobsOptions, id?: string); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| name | NameType | | -| data | DataType | | -| opts | [JobsOptions](./bullmq.jobsoptions.md) | | -| id | string | | - diff --git a/docs/gitbook/api/bullmq.job.addjob.md b/docs/gitbook/api/bullmq.job.addjob.md deleted file mode 100644 index 660c5cf359..0000000000 --- a/docs/gitbook/api/bullmq.job.addjob.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [addJob](./bullmq.job.addjob.md) - -## Job.addJob() method - -Adds the job to Redis. - -Signature: - -```typescript -addJob(client: RedisClient, parentOpts?: ParentOpts): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| client | [RedisClient](./bullmq.redisclient.md) | | -| parentOpts | [ParentOpts](./bullmq.parentopts.md) | | - -Returns: - -Promise<string> - - diff --git a/docs/gitbook/api/bullmq.job.asjson.md b/docs/gitbook/api/bullmq.job.asjson.md deleted file mode 100644 index 276152c5ed..0000000000 --- a/docs/gitbook/api/bullmq.job.asjson.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [asJSON](./bullmq.job.asjson.md) - -## Job.asJSON() method - -Prepares a job to be serialized for storage in Redis. - -Signature: - -```typescript -asJSON(): JobJson; -``` -Returns: - -[JobJson](./bullmq.jobjson.md) - - diff --git a/docs/gitbook/api/bullmq.job.asjsonsandbox.md b/docs/gitbook/api/bullmq.job.asjsonsandbox.md deleted file mode 100644 index 3eadc2187c..0000000000 --- a/docs/gitbook/api/bullmq.job.asjsonsandbox.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [asJSONSandbox](./bullmq.job.asjsonsandbox.md) - -## Job.asJSONSandbox() method - -Prepares a job to be passed to Sandbox. - -Signature: - -```typescript -asJSONSandbox(): JobJsonSandbox; -``` -Returns: - -[JobJsonSandbox](./bullmq.jobjsonsandbox.md) - - diff --git a/docs/gitbook/api/bullmq.job.attemptsmade.md b/docs/gitbook/api/bullmq.job.attemptsmade.md deleted file mode 100644 index ebf5762968..0000000000 --- a/docs/gitbook/api/bullmq.job.attemptsmade.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [attemptsMade](./bullmq.job.attemptsmade.md) - -## Job.attemptsMade property - -Number of attempts after the job has failed. - -Signature: - -```typescript -attemptsMade: number; -``` diff --git a/docs/gitbook/api/bullmq.job.changedelay.md b/docs/gitbook/api/bullmq.job.changedelay.md deleted file mode 100644 index 98277f65fa..0000000000 --- a/docs/gitbook/api/bullmq.job.changedelay.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [changeDelay](./bullmq.job.changedelay.md) - -## Job.changeDelay() method - -Change delay of a delayed job. - -Signature: - -```typescript -changeDelay(delay: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| delay | number | milliseconds to be added to current time. | - -Returns: - -Promise<void> - -void - diff --git a/docs/gitbook/api/bullmq.job.create.md b/docs/gitbook/api/bullmq.job.create.md deleted file mode 100644 index eb7313edcf..0000000000 --- a/docs/gitbook/api/bullmq.job.create.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [create](./bullmq.job.create.md) - -## Job.create() method - -Creates a new job and adds it to the queue. - -Signature: - -```typescript -static create(queue: MinimalQueue, name: N, data: T, opts?: JobsOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | the queue where to add the job. | -| name | N | the name of the job. | -| data | T | the payload of the job. | -| opts | [JobsOptions](./bullmq.jobsoptions.md) | the options bag for this job. | - -Returns: - -Promise<[Job](./bullmq.job.md)<T, R, N>> - - diff --git a/docs/gitbook/api/bullmq.job.createbulk.md b/docs/gitbook/api/bullmq.job.createbulk.md deleted file mode 100644 index d0488ffbc6..0000000000 --- a/docs/gitbook/api/bullmq.job.createbulk.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [createBulk](./bullmq.job.createbulk.md) - -## Job.createBulk() method - -Creates a bulk of jobs and adds them atomically to the given queue. - -Signature: - -```typescript -static createBulk(queue: MinimalQueue, jobs: { - name: N; - data: T; - opts?: BulkJobOptions; - }[]): Promise[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | the queue were to add the jobs. | -| jobs | { name: N; data: T; opts?: [BulkJobOptions](./bullmq.bulkjoboptions.md); }\[\] | an array of jobs to be added to the queue. | - -Returns: - -Promise<[Job](./bullmq.job.md)<T, R, N>\[\]> - - diff --git a/docs/gitbook/api/bullmq.job.data.md b/docs/gitbook/api/bullmq.job.data.md deleted file mode 100644 index c4ee23afee..0000000000 --- a/docs/gitbook/api/bullmq.job.data.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [data](./bullmq.job.data.md) - -## Job.data property - -The payload for this job. - -Signature: - -```typescript -data: DataType; -``` diff --git a/docs/gitbook/api/bullmq.job.discard.md b/docs/gitbook/api/bullmq.job.discard.md deleted file mode 100644 index 783c4c1508..0000000000 --- a/docs/gitbook/api/bullmq.job.discard.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [discard](./bullmq.job.discard.md) - -## Job.discard() method - -Marks a job to not be retried if it fails (even if attempts has been configured) - -Signature: - -```typescript -discard(): void; -``` -Returns: - -void - diff --git a/docs/gitbook/api/bullmq.job.extendlock.md b/docs/gitbook/api/bullmq.job.extendlock.md deleted file mode 100644 index 6ff86e5727..0000000000 --- a/docs/gitbook/api/bullmq.job.extendlock.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [extendLock](./bullmq.job.extendlock.md) - -## Job.extendLock() method - -Extend the lock for this job. - -Signature: - -```typescript -extendLock(token: string, duration: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| token | string | unique token for the lock | -| duration | number | lock duration in milliseconds | - -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.job.failedreason.md b/docs/gitbook/api/bullmq.job.failedreason.md deleted file mode 100644 index 9b3daa9e76..0000000000 --- a/docs/gitbook/api/bullmq.job.failedreason.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [failedReason](./bullmq.job.failedreason.md) - -## Job.failedReason property - -Reason for failing. - -Signature: - -```typescript -failedReason: string; -``` diff --git a/docs/gitbook/api/bullmq.job.finishedon.md b/docs/gitbook/api/bullmq.job.finishedon.md deleted file mode 100644 index 5420a11eda..0000000000 --- a/docs/gitbook/api/bullmq.job.finishedon.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [finishedOn](./bullmq.job.finishedon.md) - -## Job.finishedOn property - -Timestamp for when the job finished (completed or failed). - -Signature: - -```typescript -finishedOn?: number; -``` diff --git a/docs/gitbook/api/bullmq.job.fromid.md b/docs/gitbook/api/bullmq.job.fromid.md deleted file mode 100644 index c8e8b7db50..0000000000 --- a/docs/gitbook/api/bullmq.job.fromid.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [fromId](./bullmq.job.fromid.md) - -## Job.fromId() method - -Fetches a Job from the queue given the passed job id. - -Signature: - -```typescript -static fromId(queue: MinimalQueue, jobId: string): Promise | undefined>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | the queue where the job belongs to. | -| jobId | string | the job id. | - -Returns: - -Promise<[Job](./bullmq.job.md)<T, R, N> \| undefined> - - diff --git a/docs/gitbook/api/bullmq.job.fromjson.md b/docs/gitbook/api/bullmq.job.fromjson.md deleted file mode 100644 index af081942b2..0000000000 --- a/docs/gitbook/api/bullmq.job.fromjson.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [fromJSON](./bullmq.job.fromjson.md) - -## Job.fromJSON() method - -Instantiates a Job from a JobJsonRaw object (coming from a deserialized JSON object) - -Signature: - -```typescript -static fromJSON(queue: MinimalQueue, json: JobJsonRaw, jobId?: string): Job; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | the queue where the job belongs to. | -| json | [JobJsonRaw](./bullmq.jobjsonraw.md) | the plain object containing the job. | -| jobId | string | an optional job id (overrides the id coming from the JSON object) | - -Returns: - -[Job](./bullmq.job.md)<T, R, N> - - diff --git a/docs/gitbook/api/bullmq.job.getchildrenvalues.md b/docs/gitbook/api/bullmq.job.getchildrenvalues.md deleted file mode 100644 index be3b9e0af3..0000000000 --- a/docs/gitbook/api/bullmq.job.getchildrenvalues.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [getChildrenValues](./bullmq.job.getchildrenvalues.md) - -## Job.getChildrenValues() method - -Get this jobs children result values if any. - -Signature: - -```typescript -getChildrenValues(): Promise<{ - [jobKey: string]: CT; - }>; -``` -Returns: - -Promise<{ \[jobKey: string\]: CT; }> - -Object mapping children job keys with their values. - diff --git a/docs/gitbook/api/bullmq.job.getdependencies.md b/docs/gitbook/api/bullmq.job.getdependencies.md deleted file mode 100644 index 6b0b6e09e7..0000000000 --- a/docs/gitbook/api/bullmq.job.getdependencies.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [getDependencies](./bullmq.job.getdependencies.md) - -## Job.getDependencies() method - -Get children job keys if this job is a parent and has children. - -Signature: - -```typescript -getDependencies(opts?: DependenciesOpts): Promise<{ - nextProcessedCursor?: number; - processed?: Record; - nextUnprocessedCursor?: number; - unprocessed?: string[]; - }>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| opts | [DependenciesOpts](./bullmq.dependenciesopts.md) | | - -Returns: - -Promise<{ nextProcessedCursor?: number; processed?: Record<string, any>; nextUnprocessedCursor?: number; unprocessed?: string\[\]; }> - -dependencies separated by processed and unprocessed. - diff --git a/docs/gitbook/api/bullmq.job.getdependenciescount.md b/docs/gitbook/api/bullmq.job.getdependenciescount.md deleted file mode 100644 index 2b3e77e30b..0000000000 --- a/docs/gitbook/api/bullmq.job.getdependenciescount.md +++ /dev/null @@ -1,32 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [getDependenciesCount](./bullmq.job.getdependenciescount.md) - -## Job.getDependenciesCount() method - -Get children job counts if this job is a parent and has children. - -Signature: - -```typescript -getDependenciesCount(opts?: { - processed?: boolean; - unprocessed?: boolean; - }): Promise<{ - processed?: number; - unprocessed?: number; - }>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| opts | { processed?: boolean; unprocessed?: boolean; } | | - -Returns: - -Promise<{ processed?: number; unprocessed?: number; }> - -dependencies count separated by processed and unprocessed. - diff --git a/docs/gitbook/api/bullmq.job.getstate.md b/docs/gitbook/api/bullmq.job.getstate.md deleted file mode 100644 index f667aeff07..0000000000 --- a/docs/gitbook/api/bullmq.job.getstate.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [getState](./bullmq.job.getstate.md) - -## Job.getState() method - -Get current state. - -Signature: - -```typescript -getState(): Promise; -``` -Returns: - -Promise<[JobState](./bullmq.jobstate.md) \| 'unknown'> - -Returns one of these values: 'completed', 'failed', 'delayed', 'active', 'waiting', 'waiting-children', 'unknown'. - diff --git a/docs/gitbook/api/bullmq.job.id.md b/docs/gitbook/api/bullmq.job.id.md deleted file mode 100644 index cecf2c1458..0000000000 --- a/docs/gitbook/api/bullmq.job.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [id](./bullmq.job.id.md) - -## Job.id property - -Signature: - -```typescript -id?: string; -``` diff --git a/docs/gitbook/api/bullmq.job.isactive.md b/docs/gitbook/api/bullmq.job.isactive.md deleted file mode 100644 index bc03904381..0000000000 --- a/docs/gitbook/api/bullmq.job.isactive.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [isActive](./bullmq.job.isactive.md) - -## Job.isActive() method - -Signature: - -```typescript -isActive(): Promise; -``` -Returns: - -Promise<boolean> - -true of the job is active. - diff --git a/docs/gitbook/api/bullmq.job.iscompleted.md b/docs/gitbook/api/bullmq.job.iscompleted.md deleted file mode 100644 index 5c32c2109f..0000000000 --- a/docs/gitbook/api/bullmq.job.iscompleted.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [isCompleted](./bullmq.job.iscompleted.md) - -## Job.isCompleted() method - -Signature: - -```typescript -isCompleted(): Promise; -``` -Returns: - -Promise<boolean> - -true if the job has completed. - diff --git a/docs/gitbook/api/bullmq.job.isdelayed.md b/docs/gitbook/api/bullmq.job.isdelayed.md deleted file mode 100644 index 5f4b8f0a5b..0000000000 --- a/docs/gitbook/api/bullmq.job.isdelayed.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [isDelayed](./bullmq.job.isdelayed.md) - -## Job.isDelayed() method - -Signature: - -```typescript -isDelayed(): Promise; -``` -Returns: - -Promise<boolean> - -true if the job is delayed. - diff --git a/docs/gitbook/api/bullmq.job.isfailed.md b/docs/gitbook/api/bullmq.job.isfailed.md deleted file mode 100644 index 872041e749..0000000000 --- a/docs/gitbook/api/bullmq.job.isfailed.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [isFailed](./bullmq.job.isfailed.md) - -## Job.isFailed() method - -Signature: - -```typescript -isFailed(): Promise; -``` -Returns: - -Promise<boolean> - -true if the job has failed. - diff --git a/docs/gitbook/api/bullmq.job.iswaiting.md b/docs/gitbook/api/bullmq.job.iswaiting.md deleted file mode 100644 index 3ba44344b5..0000000000 --- a/docs/gitbook/api/bullmq.job.iswaiting.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [isWaiting](./bullmq.job.iswaiting.md) - -## Job.isWaiting() method - -Signature: - -```typescript -isWaiting(): Promise; -``` -Returns: - -Promise<boolean> - -true if the job is waiting. - diff --git a/docs/gitbook/api/bullmq.job.iswaitingchildren.md b/docs/gitbook/api/bullmq.job.iswaitingchildren.md deleted file mode 100644 index 68179b8862..0000000000 --- a/docs/gitbook/api/bullmq.job.iswaitingchildren.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [isWaitingChildren](./bullmq.job.iswaitingchildren.md) - -## Job.isWaitingChildren() method - -Signature: - -```typescript -isWaitingChildren(): Promise; -``` -Returns: - -Promise<boolean> - -true if the job is waiting for children. - diff --git a/docs/gitbook/api/bullmq.job.log.md b/docs/gitbook/api/bullmq.job.log.md deleted file mode 100644 index 3073bd2cb3..0000000000 --- a/docs/gitbook/api/bullmq.job.log.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [log](./bullmq.job.log.md) - -## Job.log() method - -Logs one row of log data. - -Signature: - -```typescript -log(logRow: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| logRow | string | string with log data to be logged. | - -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.job.md b/docs/gitbook/api/bullmq.job.md deleted file mode 100644 index 0b56c06bd3..0000000000 --- a/docs/gitbook/api/bullmq.job.md +++ /dev/null @@ -1,78 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) - -## Job class - -Signature: - -```typescript -export declare class Job -``` - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(queue, name, data, opts, id)](./bullmq.job._constructor_.md) | | Constructs a new instance of the Job class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [attemptsMade](./bullmq.job.attemptsmade.md) | | number | Number of attempts after the job has failed. | -| [data](./bullmq.job.data.md) | | DataType | The payload for this job. | -| [failedReason](./bullmq.job.failedreason.md) | | string | Reason for failing. | -| [finishedOn?](./bullmq.job.finishedon.md) | | number | (Optional) Timestamp for when the job finished (completed or failed). | -| [id?](./bullmq.job.id.md) | | string | (Optional) | -| [name](./bullmq.job.name.md) | | NameType | The name of the Job | -| [opts](./bullmq.job.opts.md) | | [JobsOptions](./bullmq.jobsoptions.md) | The options object for this job. | -| [parent?](./bullmq.job.parent.md) | | [ParentKeys](./bullmq.parentkeys.md) | (Optional) Object that contains parentId (id) and parent queueKey. | -| [parentKey?](./bullmq.job.parentkey.md) | | string | (Optional) Fully qualified key (including the queue prefix) pointing to the parent of this job. | -| [prefix](./bullmq.job.prefix.md) | | string | | -| [processedOn?](./bullmq.job.processedon.md) | | number | (Optional) Timestamp for when the job was processed. | -| [progress](./bullmq.job.progress.md) | | number \| object | The progress a job has performed so far. | -| [queue](./bullmq.job.queue.md) | | [MinimalQueue](./bullmq.minimalqueue.md) | | -| [queueName](./bullmq.job.queuename.md) | | string | | -| [returnvalue](./bullmq.job.returnvalue.md) | | ReturnType | The value returned by the processor when processing this job. | -| [stacktrace](./bullmq.job.stacktrace.md) | | string\[\] | Stacktrace for the error (for failed jobs). | -| [timestamp](./bullmq.job.timestamp.md) | | number | Timestamp when the job was created (unless overridden with job options). | -| [toKey](./bullmq.job.tokey.md) | | (type: string) => string | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [addJob(client, parentOpts)](./bullmq.job.addjob.md) | | Adds the job to Redis. | -| [asJSON()](./bullmq.job.asjson.md) | | Prepares a job to be serialized for storage in Redis. | -| [asJSONSandbox()](./bullmq.job.asjsonsandbox.md) | | Prepares a job to be passed to Sandbox. | -| [changeDelay(delay)](./bullmq.job.changedelay.md) | | Change delay of a delayed job. | -| [create(queue, name, data, opts)](./bullmq.job.create.md) | static | Creates a new job and adds it to the queue. | -| [createBulk(queue, jobs)](./bullmq.job.createbulk.md) | static | Creates a bulk of jobs and adds them atomically to the given queue. | -| [discard()](./bullmq.job.discard.md) | | Marks a job to not be retried if it fails (even if attempts has been configured) | -| [extendLock(token, duration)](./bullmq.job.extendlock.md) | | Extend the lock for this job. | -| [fromId(queue, jobId)](./bullmq.job.fromid.md) | static | Fetches a Job from the queue given the passed job id. | -| [fromJSON(queue, json, jobId)](./bullmq.job.fromjson.md) | static | Instantiates a Job from a JobJsonRaw object (coming from a deserialized JSON object) | -| [getChildrenValues()](./bullmq.job.getchildrenvalues.md) | | Get this jobs children result values if any. | -| [getDependencies(opts)](./bullmq.job.getdependencies.md) | | Get children job keys if this job is a parent and has children. | -| [getDependenciesCount(opts)](./bullmq.job.getdependenciescount.md) | | Get children job counts if this job is a parent and has children. | -| [getState()](./bullmq.job.getstate.md) | | Get current state. | -| [isActive()](./bullmq.job.isactive.md) | | | -| [isCompleted()](./bullmq.job.iscompleted.md) | | | -| [isDelayed()](./bullmq.job.isdelayed.md) | | | -| [isFailed()](./bullmq.job.isfailed.md) | | | -| [isWaiting()](./bullmq.job.iswaiting.md) | | | -| [isWaitingChildren()](./bullmq.job.iswaitingchildren.md) | | | -| [log(logRow)](./bullmq.job.log.md) | | Logs one row of log data. | -| [moveToCompleted(returnValue, token, fetchNext)](./bullmq.job.movetocompleted.md) | | Moves a job to the completed queue. Returned job to be used with Queue.prototype.nextJobFromJobData. | -| [moveToDelayed(timestamp)](./bullmq.job.movetodelayed.md) | | Moves the job to the delay set. | -| [moveToFailed(err, token, fetchNext)](./bullmq.job.movetofailed.md) | | Moves a job to the failed queue. | -| [moveToWaitingChildren(token, opts)](./bullmq.job.movetowaitingchildren.md) | | Moves the job to the waiting-children set. | -| [promote()](./bullmq.job.promote.md) | | Promotes a delayed job so that it starts to be processed as soon as possible. | -| [remove()](./bullmq.job.remove.md) | | Completely remove the job from the queue. Note, this call will throw an exception if the job is being processed when the call is performed. | -| [retry(state)](./bullmq.job.retry.md) | | Attempts to retry the job. Only a job that has failed or completed can be retried. | -| [toJSON()](./bullmq.job.tojson.md) | | | -| [update(data)](./bullmq.job.update.md) | | Updates a job's data | -| [updateProgress(progress)](./bullmq.job.updateprogress.md) | | Updates a job's progress | -| [waitUntilFinished(queueEvents, ttl)](./bullmq.job.waituntilfinished.md) | | Returns a promise the resolves when the job has completed (containing the return value of the job), or rejects when the job has failed (containing the failedReason). | - diff --git a/docs/gitbook/api/bullmq.job.movetocompleted.md b/docs/gitbook/api/bullmq.job.movetocompleted.md deleted file mode 100644 index 89819a6206..0000000000 --- a/docs/gitbook/api/bullmq.job.movetocompleted.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [moveToCompleted](./bullmq.job.movetocompleted.md) - -## Job.moveToCompleted() method - -Moves a job to the completed queue. Returned job to be used with Queue.prototype.nextJobFromJobData. - -Signature: - -```typescript -moveToCompleted(returnValue: ReturnType, token: string, fetchNext?: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| returnValue | ReturnType | The jobs success message. | -| token | string | Worker token used to acquire completed job. | -| fetchNext | boolean | True when wanting to fetch the next job. | - -Returns: - -Promise<[JobData](./bullmq.jobdata.md) \| \[\]> - -Returns the jobData of the next job in the waiting queue. - diff --git a/docs/gitbook/api/bullmq.job.movetodelayed.md b/docs/gitbook/api/bullmq.job.movetodelayed.md deleted file mode 100644 index 295a368c4d..0000000000 --- a/docs/gitbook/api/bullmq.job.movetodelayed.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [moveToDelayed](./bullmq.job.movetodelayed.md) - -## Job.moveToDelayed() method - -Moves the job to the delay set. - -Signature: - -```typescript -moveToDelayed(timestamp: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| timestamp | number | timestamp where the job should be moved back to "wait" | - -Returns: - -Promise<void> - - diff --git a/docs/gitbook/api/bullmq.job.movetofailed.md b/docs/gitbook/api/bullmq.job.movetofailed.md deleted file mode 100644 index bbb69d20ba..0000000000 --- a/docs/gitbook/api/bullmq.job.movetofailed.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [moveToFailed](./bullmq.job.movetofailed.md) - -## Job.moveToFailed() method - -Moves a job to the failed queue. - -Signature: - -```typescript -moveToFailed(err: E, token: string, fetchNext?: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| err | E | the jobs error message. | -| token | string | token to check job is locked by current worker | -| fetchNext | boolean | true when wanting to fetch the next job | - -Returns: - -Promise<void> - -void - diff --git a/docs/gitbook/api/bullmq.job.movetowaitingchildren.md b/docs/gitbook/api/bullmq.job.movetowaitingchildren.md deleted file mode 100644 index 065dd9e02d..0000000000 --- a/docs/gitbook/api/bullmq.job.movetowaitingchildren.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [moveToWaitingChildren](./bullmq.job.movetowaitingchildren.md) - -## Job.moveToWaitingChildren() method - -Moves the job to the waiting-children set. - -Signature: - -```typescript -moveToWaitingChildren(token: string, opts?: MoveToChildrenOpts): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| token | string | Token to check job is locked by current worker | -| opts | [MoveToChildrenOpts](./bullmq.movetochildrenopts.md) | The options bag for moving a job to waiting-children. | - -Returns: - -Promise<boolean> - -true if the job was moved - diff --git a/docs/gitbook/api/bullmq.job.name.md b/docs/gitbook/api/bullmq.job.name.md deleted file mode 100644 index 72f01a6d90..0000000000 --- a/docs/gitbook/api/bullmq.job.name.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [name](./bullmq.job.name.md) - -## Job.name property - -The name of the Job - -Signature: - -```typescript -name: NameType; -``` diff --git a/docs/gitbook/api/bullmq.job.opts.md b/docs/gitbook/api/bullmq.job.opts.md deleted file mode 100644 index 46c58afdc6..0000000000 --- a/docs/gitbook/api/bullmq.job.opts.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [opts](./bullmq.job.opts.md) - -## Job.opts property - -The options object for this job. - -Signature: - -```typescript -opts: JobsOptions; -``` diff --git a/docs/gitbook/api/bullmq.job.parent.md b/docs/gitbook/api/bullmq.job.parent.md deleted file mode 100644 index 7d02010502..0000000000 --- a/docs/gitbook/api/bullmq.job.parent.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [parent](./bullmq.job.parent.md) - -## Job.parent property - -Object that contains parentId (id) and parent queueKey. - -Signature: - -```typescript -parent?: ParentKeys; -``` diff --git a/docs/gitbook/api/bullmq.job.parentkey.md b/docs/gitbook/api/bullmq.job.parentkey.md deleted file mode 100644 index 193d7aeb8a..0000000000 --- a/docs/gitbook/api/bullmq.job.parentkey.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [parentKey](./bullmq.job.parentkey.md) - -## Job.parentKey property - -Fully qualified key (including the queue prefix) pointing to the parent of this job. - -Signature: - -```typescript -parentKey?: string; -``` diff --git a/docs/gitbook/api/bullmq.job.prefix.md b/docs/gitbook/api/bullmq.job.prefix.md deleted file mode 100644 index 26f5e15a2a..0000000000 --- a/docs/gitbook/api/bullmq.job.prefix.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [prefix](./bullmq.job.prefix.md) - -## Job.prefix property - -Signature: - -```typescript -get prefix(): string; -``` diff --git a/docs/gitbook/api/bullmq.job.processedon.md b/docs/gitbook/api/bullmq.job.processedon.md deleted file mode 100644 index 4d1107cb40..0000000000 --- a/docs/gitbook/api/bullmq.job.processedon.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [processedOn](./bullmq.job.processedon.md) - -## Job.processedOn property - -Timestamp for when the job was processed. - -Signature: - -```typescript -processedOn?: number; -``` diff --git a/docs/gitbook/api/bullmq.job.progress.md b/docs/gitbook/api/bullmq.job.progress.md deleted file mode 100644 index 22fa51d0f9..0000000000 --- a/docs/gitbook/api/bullmq.job.progress.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [progress](./bullmq.job.progress.md) - -## Job.progress property - -The progress a job has performed so far. - -Signature: - -```typescript -progress: number | object; -``` diff --git a/docs/gitbook/api/bullmq.job.promote.md b/docs/gitbook/api/bullmq.job.promote.md deleted file mode 100644 index 0e5344b8e3..0000000000 --- a/docs/gitbook/api/bullmq.job.promote.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [promote](./bullmq.job.promote.md) - -## Job.promote() method - -Promotes a delayed job so that it starts to be processed as soon as possible. - -Signature: - -```typescript -promote(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.job.queue.md b/docs/gitbook/api/bullmq.job.queue.md deleted file mode 100644 index 54d50135b1..0000000000 --- a/docs/gitbook/api/bullmq.job.queue.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [queue](./bullmq.job.queue.md) - -## Job.queue property - -Signature: - -```typescript -protected queue: MinimalQueue; -``` diff --git a/docs/gitbook/api/bullmq.job.queuename.md b/docs/gitbook/api/bullmq.job.queuename.md deleted file mode 100644 index 5f9ec1a661..0000000000 --- a/docs/gitbook/api/bullmq.job.queuename.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [queueName](./bullmq.job.queuename.md) - -## Job.queueName property - -Signature: - -```typescript -get queueName(): string; -``` diff --git a/docs/gitbook/api/bullmq.job.remove.md b/docs/gitbook/api/bullmq.job.remove.md deleted file mode 100644 index a604257db1..0000000000 --- a/docs/gitbook/api/bullmq.job.remove.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [remove](./bullmq.job.remove.md) - -## Job.remove() method - -Completely remove the job from the queue. Note, this call will throw an exception if the job is being processed when the call is performed. - -Signature: - -```typescript -remove(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.job.retry.md b/docs/gitbook/api/bullmq.job.retry.md deleted file mode 100644 index 6a0842bf77..0000000000 --- a/docs/gitbook/api/bullmq.job.retry.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [retry](./bullmq.job.retry.md) - -## Job.retry() method - -Attempts to retry the job. Only a job that has failed or completed can be retried. - -Signature: - -```typescript -retry(state?: FinishedStatus): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| state | [FinishedStatus](./bullmq.finishedstatus.md) | completed / failed | - -Returns: - -Promise<void> - -If resolved and return code is 1, then the queue emits a waiting event otherwise the operation was not a success and throw the corresponding error. If the promise rejects, it indicates that the script failed to execute - diff --git a/docs/gitbook/api/bullmq.job.returnvalue.md b/docs/gitbook/api/bullmq.job.returnvalue.md deleted file mode 100644 index 89929f7b26..0000000000 --- a/docs/gitbook/api/bullmq.job.returnvalue.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [returnvalue](./bullmq.job.returnvalue.md) - -## Job.returnvalue property - -The value returned by the processor when processing this job. - -Signature: - -```typescript -returnvalue: ReturnType; -``` diff --git a/docs/gitbook/api/bullmq.job.stacktrace.md b/docs/gitbook/api/bullmq.job.stacktrace.md deleted file mode 100644 index 12a0bfd3ed..0000000000 --- a/docs/gitbook/api/bullmq.job.stacktrace.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [stacktrace](./bullmq.job.stacktrace.md) - -## Job.stacktrace property - -Stacktrace for the error (for failed jobs). - -Signature: - -```typescript -stacktrace: string[]; -``` diff --git a/docs/gitbook/api/bullmq.job.timestamp.md b/docs/gitbook/api/bullmq.job.timestamp.md deleted file mode 100644 index 691a1b06d6..0000000000 --- a/docs/gitbook/api/bullmq.job.timestamp.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [timestamp](./bullmq.job.timestamp.md) - -## Job.timestamp property - -Timestamp when the job was created (unless overridden with job options). - -Signature: - -```typescript -timestamp: number; -``` diff --git a/docs/gitbook/api/bullmq.job.tojson.md b/docs/gitbook/api/bullmq.job.tojson.md deleted file mode 100644 index 408a28a5cb..0000000000 --- a/docs/gitbook/api/bullmq.job.tojson.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [toJSON](./bullmq.job.tojson.md) - -## Job.toJSON() method - -Signature: - -```typescript -toJSON(): Omit; -``` -Returns: - -Omit<this, 'queue'> - diff --git a/docs/gitbook/api/bullmq.job.tokey.md b/docs/gitbook/api/bullmq.job.tokey.md deleted file mode 100644 index 93d1538843..0000000000 --- a/docs/gitbook/api/bullmq.job.tokey.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [toKey](./bullmq.job.tokey.md) - -## Job.toKey property - -Signature: - -```typescript -protected toKey: (type: string) => string; -``` diff --git a/docs/gitbook/api/bullmq.job.update.md b/docs/gitbook/api/bullmq.job.update.md deleted file mode 100644 index 70c3967ece..0000000000 --- a/docs/gitbook/api/bullmq.job.update.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [update](./bullmq.job.update.md) - -## Job.update() method - -Updates a job's data - -Signature: - -```typescript -update(data: DataType): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| data | DataType | the data that will replace the current jobs data. | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.job.updateprogress.md b/docs/gitbook/api/bullmq.job.updateprogress.md deleted file mode 100644 index 823c390bce..0000000000 --- a/docs/gitbook/api/bullmq.job.updateprogress.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [updateProgress](./bullmq.job.updateprogress.md) - -## Job.updateProgress() method - -Updates a job's progress - -Signature: - -```typescript -updateProgress(progress: number | object): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| progress | number \| object | number or object to be saved as progress. | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.job.waituntilfinished.md b/docs/gitbook/api/bullmq.job.waituntilfinished.md deleted file mode 100644 index 347bec70ee..0000000000 --- a/docs/gitbook/api/bullmq.job.waituntilfinished.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Job](./bullmq.job.md) > [waitUntilFinished](./bullmq.job.waituntilfinished.md) - -## Job.waitUntilFinished() method - -Returns a promise the resolves when the job has completed (containing the return value of the job), or rejects when the job has failed (containing the failedReason). - -Signature: - -```typescript -waitUntilFinished(queueEvents: QueueEvents, ttl?: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queueEvents | [QueueEvents](./bullmq.queueevents.md) | Instance of QueueEvents. | -| ttl | number | Time in milliseconds to wait for job to finish before timing out. | - -Returns: - -Promise<ReturnType> - diff --git a/docs/gitbook/api/bullmq.jobdata.md b/docs/gitbook/api/bullmq.jobdata.md deleted file mode 100644 index 8334355f8c..0000000000 --- a/docs/gitbook/api/bullmq.jobdata.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobData](./bullmq.jobdata.md) - -## JobData type - -Signature: - -```typescript -export declare type JobData = [JobJsonRaw | number, string?]; -``` -References: [JobJsonRaw](./bullmq.jobjsonraw.md) - diff --git a/docs/gitbook/api/bullmq.jobidforgroup.md b/docs/gitbook/api/bullmq.jobidforgroup.md deleted file mode 100644 index 6beeb04c6b..0000000000 --- a/docs/gitbook/api/bullmq.jobidforgroup.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [jobIdForGroup](./bullmq.jobidforgroup.md) - -## jobIdForGroup() function - -Signature: - -```typescript -export declare function jobIdForGroup(jobOpts: JobsOptions, data: any, queueOpts: QueueOptions): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| jobOpts | [JobsOptions](./bullmq.jobsoptions.md) | | -| data | any | | -| queueOpts | [QueueOptions](./bullmq.queueoptions.md) | | - -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.jobinformation3.cron.md b/docs/gitbook/api/bullmq.jobinformation3.cron.md deleted file mode 100644 index 679410dd0d..0000000000 --- a/docs/gitbook/api/bullmq.jobinformation3.cron.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobInformation3](./bullmq.jobinformation3.md) > [cron](./bullmq.jobinformation3.cron.md) - -## JobInformation3.cron property - -Signature: - -```typescript -cron: string; -``` diff --git a/docs/gitbook/api/bullmq.jobinformation3.enddate.md b/docs/gitbook/api/bullmq.jobinformation3.enddate.md deleted file mode 100644 index 2d5a2f66f9..0000000000 --- a/docs/gitbook/api/bullmq.jobinformation3.enddate.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobInformation3](./bullmq.jobinformation3.md) > [endDate](./bullmq.jobinformation3.enddate.md) - -## JobInformation3.endDate property - -Signature: - -```typescript -endDate?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobinformation3.id.md b/docs/gitbook/api/bullmq.jobinformation3.id.md deleted file mode 100644 index 8729f989ce..0000000000 --- a/docs/gitbook/api/bullmq.jobinformation3.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobInformation3](./bullmq.jobinformation3.md) > [id](./bullmq.jobinformation3.id.md) - -## JobInformation3.id property - -Signature: - -```typescript -id?: string; -``` diff --git a/docs/gitbook/api/bullmq.jobinformation3.key.md b/docs/gitbook/api/bullmq.jobinformation3.key.md deleted file mode 100644 index 87ebc5adc3..0000000000 --- a/docs/gitbook/api/bullmq.jobinformation3.key.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobInformation3](./bullmq.jobinformation3.md) > [key](./bullmq.jobinformation3.key.md) - -## JobInformation3.key property - -Signature: - -```typescript -key: string; -``` diff --git a/docs/gitbook/api/bullmq.jobinformation3.md b/docs/gitbook/api/bullmq.jobinformation3.md deleted file mode 100644 index aafec354da..0000000000 --- a/docs/gitbook/api/bullmq.jobinformation3.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobInformation3](./bullmq.jobinformation3.md) - -## JobInformation3 interface - -Signature: - -```typescript -export interface JobInformation3 -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [cron](./bullmq.jobinformation3.cron.md) | string | | -| [endDate?](./bullmq.jobinformation3.enddate.md) | number | (Optional) | -| [id?](./bullmq.jobinformation3.id.md) | string | (Optional) | -| [key](./bullmq.jobinformation3.key.md) | string | | -| [name](./bullmq.jobinformation3.name.md) | string | | -| [next](./bullmq.jobinformation3.next.md) | number | | -| [tz?](./bullmq.jobinformation3.tz.md) | string | (Optional) | - diff --git a/docs/gitbook/api/bullmq.jobinformation3.name.md b/docs/gitbook/api/bullmq.jobinformation3.name.md deleted file mode 100644 index 7f535f476a..0000000000 --- a/docs/gitbook/api/bullmq.jobinformation3.name.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobInformation3](./bullmq.jobinformation3.md) > [name](./bullmq.jobinformation3.name.md) - -## JobInformation3.name property - -Signature: - -```typescript -name: string; -``` diff --git a/docs/gitbook/api/bullmq.jobinformation3.next.md b/docs/gitbook/api/bullmq.jobinformation3.next.md deleted file mode 100644 index 71b7e505a1..0000000000 --- a/docs/gitbook/api/bullmq.jobinformation3.next.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobInformation3](./bullmq.jobinformation3.md) > [next](./bullmq.jobinformation3.next.md) - -## JobInformation3.next property - -Signature: - -```typescript -next: number; -``` diff --git a/docs/gitbook/api/bullmq.jobinformation3.tz.md b/docs/gitbook/api/bullmq.jobinformation3.tz.md deleted file mode 100644 index 3efed41d56..0000000000 --- a/docs/gitbook/api/bullmq.jobinformation3.tz.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobInformation3](./bullmq.jobinformation3.md) > [tz](./bullmq.jobinformation3.tz.md) - -## JobInformation3.tz property - -Signature: - -```typescript -tz?: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.attemptsmade.md b/docs/gitbook/api/bullmq.jobjson.attemptsmade.md deleted file mode 100644 index 2e310b13fa..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.attemptsmade.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [attemptsMade](./bullmq.jobjson.attemptsmade.md) - -## JobJson.attemptsMade property - -Signature: - -```typescript -attemptsMade: number; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.data.md b/docs/gitbook/api/bullmq.jobjson.data.md deleted file mode 100644 index 5eb7c373de..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.data.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [data](./bullmq.jobjson.data.md) - -## JobJson.data property - -Signature: - -```typescript -data: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.failedreason.md b/docs/gitbook/api/bullmq.jobjson.failedreason.md deleted file mode 100644 index 1b34962551..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.failedreason.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [failedReason](./bullmq.jobjson.failedreason.md) - -## JobJson.failedReason property - -Signature: - -```typescript -failedReason: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.finishedon.md b/docs/gitbook/api/bullmq.jobjson.finishedon.md deleted file mode 100644 index 917447f5dc..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.finishedon.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [finishedOn](./bullmq.jobjson.finishedon.md) - -## JobJson.finishedOn property - -Signature: - -```typescript -finishedOn?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.id.md b/docs/gitbook/api/bullmq.jobjson.id.md deleted file mode 100644 index a115876896..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [id](./bullmq.jobjson.id.md) - -## JobJson.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.md b/docs/gitbook/api/bullmq.jobjson.md deleted file mode 100644 index ec656f67c1..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) - -## JobJson interface - -Signature: - -```typescript -export interface JobJson -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attemptsMade](./bullmq.jobjson.attemptsmade.md) | number | | -| [data](./bullmq.jobjson.data.md) | string | | -| [failedReason](./bullmq.jobjson.failedreason.md) | string | | -| [finishedOn?](./bullmq.jobjson.finishedon.md) | number | (Optional) | -| [id](./bullmq.jobjson.id.md) | string | | -| [name](./bullmq.jobjson.name.md) | string | | -| [opts](./bullmq.jobjson.opts.md) | [JobsOptions](./bullmq.jobsoptions.md) | | -| [parentKey?](./bullmq.jobjson.parentkey.md) | string | (Optional) | -| [processedOn?](./bullmq.jobjson.processedon.md) | number | (Optional) | -| [progress](./bullmq.jobjson.progress.md) | number \| object | | -| [returnvalue](./bullmq.jobjson.returnvalue.md) | string | | -| [stacktrace](./bullmq.jobjson.stacktrace.md) | string | | -| [timestamp](./bullmq.jobjson.timestamp.md) | number | | - diff --git a/docs/gitbook/api/bullmq.jobjson.name.md b/docs/gitbook/api/bullmq.jobjson.name.md deleted file mode 100644 index e341f23e0e..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.name.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [name](./bullmq.jobjson.name.md) - -## JobJson.name property - -Signature: - -```typescript -name: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.opts.md b/docs/gitbook/api/bullmq.jobjson.opts.md deleted file mode 100644 index 6af35a12bd..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.opts.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [opts](./bullmq.jobjson.opts.md) - -## JobJson.opts property - -Signature: - -```typescript -opts: JobsOptions; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.parentkey.md b/docs/gitbook/api/bullmq.jobjson.parentkey.md deleted file mode 100644 index b8e552a77d..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.parentkey.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [parentKey](./bullmq.jobjson.parentkey.md) - -## JobJson.parentKey property - -Signature: - -```typescript -parentKey?: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.processedon.md b/docs/gitbook/api/bullmq.jobjson.processedon.md deleted file mode 100644 index 21781efd6a..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.processedon.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [processedOn](./bullmq.jobjson.processedon.md) - -## JobJson.processedOn property - -Signature: - -```typescript -processedOn?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.progress.md b/docs/gitbook/api/bullmq.jobjson.progress.md deleted file mode 100644 index 7d7881fc70..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.progress.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [progress](./bullmq.jobjson.progress.md) - -## JobJson.progress property - -Signature: - -```typescript -progress: number | object; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.returnvalue.md b/docs/gitbook/api/bullmq.jobjson.returnvalue.md deleted file mode 100644 index 869e1a2a3d..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.returnvalue.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [returnvalue](./bullmq.jobjson.returnvalue.md) - -## JobJson.returnvalue property - -Signature: - -```typescript -returnvalue: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.stacktrace.md b/docs/gitbook/api/bullmq.jobjson.stacktrace.md deleted file mode 100644 index 4d4cd87d56..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.stacktrace.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [stacktrace](./bullmq.jobjson.stacktrace.md) - -## JobJson.stacktrace property - -Signature: - -```typescript -stacktrace: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjson.timestamp.md b/docs/gitbook/api/bullmq.jobjson.timestamp.md deleted file mode 100644 index a05a175ec8..0000000000 --- a/docs/gitbook/api/bullmq.jobjson.timestamp.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJson](./bullmq.jobjson.md) > [timestamp](./bullmq.jobjson.timestamp.md) - -## JobJson.timestamp property - -Signature: - -```typescript -timestamp: number; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.attemptsmade.md b/docs/gitbook/api/bullmq.jobjsonraw.attemptsmade.md deleted file mode 100644 index 9eeeacafac..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.attemptsmade.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [attemptsMade](./bullmq.jobjsonraw.attemptsmade.md) - -## JobJsonRaw.attemptsMade property - -Signature: - -```typescript -attemptsMade: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.data.md b/docs/gitbook/api/bullmq.jobjsonraw.data.md deleted file mode 100644 index 6987c213ca..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.data.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [data](./bullmq.jobjsonraw.data.md) - -## JobJsonRaw.data property - -Signature: - -```typescript -data: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.failedreason.md b/docs/gitbook/api/bullmq.jobjsonraw.failedreason.md deleted file mode 100644 index b25e0155b9..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.failedreason.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [failedReason](./bullmq.jobjsonraw.failedreason.md) - -## JobJsonRaw.failedReason property - -Signature: - -```typescript -failedReason: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.finishedon.md b/docs/gitbook/api/bullmq.jobjsonraw.finishedon.md deleted file mode 100644 index 060804ab5e..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.finishedon.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [finishedOn](./bullmq.jobjsonraw.finishedon.md) - -## JobJsonRaw.finishedOn property - -Signature: - -```typescript -finishedOn?: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.id.md b/docs/gitbook/api/bullmq.jobjsonraw.id.md deleted file mode 100644 index 5fd74a6793..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [id](./bullmq.jobjsonraw.id.md) - -## JobJsonRaw.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.md b/docs/gitbook/api/bullmq.jobjsonraw.md deleted file mode 100644 index 7c3d7854b7..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) - -## JobJsonRaw interface - -Signature: - -```typescript -export interface JobJsonRaw -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attemptsMade](./bullmq.jobjsonraw.attemptsmade.md) | string | | -| [data](./bullmq.jobjsonraw.data.md) | string | | -| [failedReason](./bullmq.jobjsonraw.failedreason.md) | string | | -| [finishedOn?](./bullmq.jobjsonraw.finishedon.md) | string | (Optional) | -| [id](./bullmq.jobjsonraw.id.md) | string | | -| [name](./bullmq.jobjsonraw.name.md) | string | | -| [opts](./bullmq.jobjsonraw.opts.md) | string | | -| [parent?](./bullmq.jobjsonraw.parent.md) | string | (Optional) | -| [parentKey?](./bullmq.jobjsonraw.parentkey.md) | string | (Optional) | -| [processedOn?](./bullmq.jobjsonraw.processedon.md) | string | (Optional) | -| [progress](./bullmq.jobjsonraw.progress.md) | string | | -| [returnvalue](./bullmq.jobjsonraw.returnvalue.md) | string | | -| [stacktrace](./bullmq.jobjsonraw.stacktrace.md) | string\[\] | | -| [timestamp](./bullmq.jobjsonraw.timestamp.md) | string | | - diff --git a/docs/gitbook/api/bullmq.jobjsonraw.name.md b/docs/gitbook/api/bullmq.jobjsonraw.name.md deleted file mode 100644 index 09175a99e3..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.name.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [name](./bullmq.jobjsonraw.name.md) - -## JobJsonRaw.name property - -Signature: - -```typescript -name: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.opts.md b/docs/gitbook/api/bullmq.jobjsonraw.opts.md deleted file mode 100644 index 2fcd88cd39..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.opts.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [opts](./bullmq.jobjsonraw.opts.md) - -## JobJsonRaw.opts property - -Signature: - -```typescript -opts: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.parent.md b/docs/gitbook/api/bullmq.jobjsonraw.parent.md deleted file mode 100644 index dfb94d6829..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.parent.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [parent](./bullmq.jobjsonraw.parent.md) - -## JobJsonRaw.parent property - -Signature: - -```typescript -parent?: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.parentkey.md b/docs/gitbook/api/bullmq.jobjsonraw.parentkey.md deleted file mode 100644 index a5b2e93649..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.parentkey.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [parentKey](./bullmq.jobjsonraw.parentkey.md) - -## JobJsonRaw.parentKey property - -Signature: - -```typescript -parentKey?: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.processedon.md b/docs/gitbook/api/bullmq.jobjsonraw.processedon.md deleted file mode 100644 index 0ce790380c..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.processedon.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [processedOn](./bullmq.jobjsonraw.processedon.md) - -## JobJsonRaw.processedOn property - -Signature: - -```typescript -processedOn?: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.progress.md b/docs/gitbook/api/bullmq.jobjsonraw.progress.md deleted file mode 100644 index a8d97e5a02..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.progress.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [progress](./bullmq.jobjsonraw.progress.md) - -## JobJsonRaw.progress property - -Signature: - -```typescript -progress: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.returnvalue.md b/docs/gitbook/api/bullmq.jobjsonraw.returnvalue.md deleted file mode 100644 index b1468ea9b0..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.returnvalue.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [returnvalue](./bullmq.jobjsonraw.returnvalue.md) - -## JobJsonRaw.returnvalue property - -Signature: - -```typescript -returnvalue: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.stacktrace.md b/docs/gitbook/api/bullmq.jobjsonraw.stacktrace.md deleted file mode 100644 index 7f60a37899..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.stacktrace.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [stacktrace](./bullmq.jobjsonraw.stacktrace.md) - -## JobJsonRaw.stacktrace property - -Signature: - -```typescript -stacktrace: string[]; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonraw.timestamp.md b/docs/gitbook/api/bullmq.jobjsonraw.timestamp.md deleted file mode 100644 index c3c9df2c5e..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonraw.timestamp.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonRaw](./bullmq.jobjsonraw.md) > [timestamp](./bullmq.jobjsonraw.timestamp.md) - -## JobJsonRaw.timestamp property - -Signature: - -```typescript -timestamp: string; -``` diff --git a/docs/gitbook/api/bullmq.jobjsonsandbox.md b/docs/gitbook/api/bullmq.jobjsonsandbox.md deleted file mode 100644 index 2d1c3c7e36..0000000000 --- a/docs/gitbook/api/bullmq.jobjsonsandbox.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobJsonSandbox](./bullmq.jobjsonsandbox.md) - -## JobJsonSandbox type - -Signature: - -```typescript -export declare type JobJsonSandbox = JobJson & { - queueName: string; - parent?: ParentKeys; - prefix: string; -}; -``` -References: [JobJson](./bullmq.jobjson.md), [ParentKeys](./bullmq.parentkeys.md) - diff --git a/docs/gitbook/api/bullmq.jobnode.children.md b/docs/gitbook/api/bullmq.jobnode.children.md deleted file mode 100644 index 3c6f4ffd32..0000000000 --- a/docs/gitbook/api/bullmq.jobnode.children.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobNode](./bullmq.jobnode.md) > [children](./bullmq.jobnode.children.md) - -## JobNode.children property - -Signature: - -```typescript -children?: JobNode[]; -``` diff --git a/docs/gitbook/api/bullmq.jobnode.job.md b/docs/gitbook/api/bullmq.jobnode.job.md deleted file mode 100644 index b226f808f0..0000000000 --- a/docs/gitbook/api/bullmq.jobnode.job.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobNode](./bullmq.jobnode.md) > [job](./bullmq.jobnode.job.md) - -## JobNode.job property - -Signature: - -```typescript -job: Job; -``` diff --git a/docs/gitbook/api/bullmq.jobnode.md b/docs/gitbook/api/bullmq.jobnode.md deleted file mode 100644 index 0a8381aaf7..0000000000 --- a/docs/gitbook/api/bullmq.jobnode.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobNode](./bullmq.jobnode.md) - -## JobNode interface - -Signature: - -```typescript -export interface JobNode -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [children?](./bullmq.jobnode.children.md) | [JobNode](./bullmq.jobnode.md)\[\] | (Optional) | -| [job](./bullmq.jobnode.job.md) | [Job](./bullmq.job.md) | | - diff --git a/docs/gitbook/api/bullmq.jobpromise3.cancel.md b/docs/gitbook/api/bullmq.jobpromise3.cancel.md deleted file mode 100644 index 8f5b3982a9..0000000000 --- a/docs/gitbook/api/bullmq.jobpromise3.cancel.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobPromise3](./bullmq.jobpromise3.md) > [cancel](./bullmq.jobpromise3.cancel.md) - -## JobPromise3.cancel() method - -Abort this job - -Signature: - -```typescript -cancel(): void; -``` -Returns: - -void - diff --git a/docs/gitbook/api/bullmq.jobpromise3.md b/docs/gitbook/api/bullmq.jobpromise3.md deleted file mode 100644 index bfda14d763..0000000000 --- a/docs/gitbook/api/bullmq.jobpromise3.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobPromise3](./bullmq.jobpromise3.md) - -## JobPromise3 interface - -Signature: - -```typescript -export interface JobPromise3 -``` - -## Methods - -| Method | Description | -| --- | --- | -| [cancel()](./bullmq.jobpromise3.cancel.md) | Abort this job | - diff --git a/docs/gitbook/api/bullmq.jobsoptions.attempts.md b/docs/gitbook/api/bullmq.jobsoptions.attempts.md deleted file mode 100644 index ffc5bf3f24..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.attempts.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [attempts](./bullmq.jobsoptions.attempts.md) - -## JobsOptions.attempts property - -The total number of attempts to try the job until it completes. - -Signature: - -```typescript -attempts?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.backoff.md b/docs/gitbook/api/bullmq.jobsoptions.backoff.md deleted file mode 100644 index c577f4c9f6..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.backoff.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [backoff](./bullmq.jobsoptions.backoff.md) - -## JobsOptions.backoff property - -Backoff setting for automatic retries if the job fails - -Signature: - -```typescript -backoff?: number | BackoffOptions; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.delay.md b/docs/gitbook/api/bullmq.jobsoptions.delay.md deleted file mode 100644 index ed99d7e326..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.delay.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [delay](./bullmq.jobsoptions.delay.md) - -## JobsOptions.delay property - -An amount of milliseconds to wait until this job can be processed. Note that for accurate delays, worker and producers should have their clocks synchronized. - -Signature: - -```typescript -delay?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.jobid.md b/docs/gitbook/api/bullmq.jobsoptions.jobid.md deleted file mode 100644 index 6fa3d079c9..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.jobid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [jobId](./bullmq.jobsoptions.jobid.md) - -## JobsOptions.jobId property - -Override the job ID - by default, the job ID is a unique integer, but you can use this setting to override it. If you use this option, it is up to you to ensure the jobId is unique. If you attempt to add a job with an id that already exists, it will not be added. - -Signature: - -```typescript -jobId?: string; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.lifo.md b/docs/gitbook/api/bullmq.jobsoptions.lifo.md deleted file mode 100644 index a3f4186b2f..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.lifo.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [lifo](./bullmq.jobsoptions.lifo.md) - -## JobsOptions.lifo property - -If true, adds the job to the right of the queue instead of the left (default false) - -Signature: - -```typescript -lifo?: boolean; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.md b/docs/gitbook/api/bullmq.jobsoptions.md deleted file mode 100644 index 5f2ae90765..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.md +++ /dev/null @@ -1,33 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) - -## JobsOptions interface - -Signature: - -```typescript -export interface JobsOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [attempts?](./bullmq.jobsoptions.attempts.md) | number | (Optional) The total number of attempts to try the job until it completes. | -| [backoff?](./bullmq.jobsoptions.backoff.md) | number \| [BackoffOptions](./bullmq.backoffoptions.md) | (Optional) Backoff setting for automatic retries if the job fails | -| [delay?](./bullmq.jobsoptions.delay.md) | number | (Optional) An amount of milliseconds to wait until this job can be processed. Note that for accurate delays, worker and producers should have their clocks synchronized. | -| [jobId?](./bullmq.jobsoptions.jobid.md) | string | (Optional) Override the job ID - by default, the job ID is a unique integer, but you can use this setting to override it. If you use this option, it is up to you to ensure the jobId is unique. If you attempt to add a job with an id that already exists, it will not be added. | -| [lifo?](./bullmq.jobsoptions.lifo.md) | boolean | (Optional) If true, adds the job to the right of the queue instead of the left (default false) | -| [parent?](./bullmq.jobsoptions.parent.md) | { id: string; queue: string; } | (Optional) | -| [prevMillis?](./bullmq.jobsoptions.prevmillis.md) | number | (Optional) Internal property used by repeatable jobs. | -| [priority?](./bullmq.jobsoptions.priority.md) | number | (Optional) Ranges from 1 (highest priority) to MAX\_INT (lowest priority). Note that using priorities has a slight impact on performance, so do not use it if not required. | -| [rateLimiterKey?](./bullmq.jobsoptions.ratelimiterkey.md) | string | (Optional) Rate limiter key to use if rate limiter enabled. | -| [removeOnComplete?](./bullmq.jobsoptions.removeoncomplete.md) | boolean \| number \| [KeepJobs](./bullmq.keepjobs.md) | (Optional) If true, removes the job when it successfully completes When given an number, it specifies the maximum amount of jobs to keep, or you can provide an object specifying max age and/or count to keep. Default behavior is to keep the job in the completed set. | -| [removeOnFail?](./bullmq.jobsoptions.removeonfail.md) | boolean \| number \| [KeepJobs](./bullmq.keepjobs.md) | (Optional) If true, removes the job when it fails after all attempts. When given an number, it specifies the maximum amount of jobs to keep, or you can provide an object specifying max age and/or count to keep. | -| [repeat?](./bullmq.jobsoptions.repeat.md) | [RepeatOptions](./bullmq.repeatoptions.md) | (Optional) Repeat this job, for example based on a cron schedule. | -| [sizeLimit?](./bullmq.jobsoptions.sizelimit.md) | number | (Optional) Limits the size in bytes of the job's data payload (as a JSON serialized string). | -| [stackTraceLimit?](./bullmq.jobsoptions.stacktracelimit.md) | number | (Optional) Limits the amount of stack trace lines that will be recorded in the stacktrace. | -| [timeout?](./bullmq.jobsoptions.timeout.md) | number | (Optional) The number of milliseconds after which the job should be fail with a timeout error. | -| [timestamp?](./bullmq.jobsoptions.timestamp.md) | number | (Optional) Timestamp when the job was created. Defaults to Date.now(). | - diff --git a/docs/gitbook/api/bullmq.jobsoptions.parent.md b/docs/gitbook/api/bullmq.jobsoptions.parent.md deleted file mode 100644 index 021472b350..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.parent.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [parent](./bullmq.jobsoptions.parent.md) - -## JobsOptions.parent property - -Signature: - -```typescript -parent?: { - id: string; - queue: string; - }; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.prevmillis.md b/docs/gitbook/api/bullmq.jobsoptions.prevmillis.md deleted file mode 100644 index ac26e2deb7..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.prevmillis.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [prevMillis](./bullmq.jobsoptions.prevmillis.md) - -## JobsOptions.prevMillis property - -Internal property used by repeatable jobs. - -Signature: - -```typescript -prevMillis?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.priority.md b/docs/gitbook/api/bullmq.jobsoptions.priority.md deleted file mode 100644 index ecca363434..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.priority.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [priority](./bullmq.jobsoptions.priority.md) - -## JobsOptions.priority property - -Ranges from 1 (highest priority) to MAX\_INT (lowest priority). Note that using priorities has a slight impact on performance, so do not use it if not required. - -Signature: - -```typescript -priority?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.ratelimiterkey.md b/docs/gitbook/api/bullmq.jobsoptions.ratelimiterkey.md deleted file mode 100644 index 0525657d4d..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.ratelimiterkey.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [rateLimiterKey](./bullmq.jobsoptions.ratelimiterkey.md) - -## JobsOptions.rateLimiterKey property - -Rate limiter key to use if rate limiter enabled. - -Signature: - -```typescript -rateLimiterKey?: string; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.removeoncomplete.md b/docs/gitbook/api/bullmq.jobsoptions.removeoncomplete.md deleted file mode 100644 index 6a98e05aff..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.removeoncomplete.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [removeOnComplete](./bullmq.jobsoptions.removeoncomplete.md) - -## JobsOptions.removeOnComplete property - -If true, removes the job when it successfully completes When given an number, it specifies the maximum amount of jobs to keep, or you can provide an object specifying max age and/or count to keep. Default behavior is to keep the job in the completed set. - -Signature: - -```typescript -removeOnComplete?: boolean | number | KeepJobs; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.removeonfail.md b/docs/gitbook/api/bullmq.jobsoptions.removeonfail.md deleted file mode 100644 index 6248a0c93b..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.removeonfail.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [removeOnFail](./bullmq.jobsoptions.removeonfail.md) - -## JobsOptions.removeOnFail property - -If true, removes the job when it fails after all attempts. When given an number, it specifies the maximum amount of jobs to keep, or you can provide an object specifying max age and/or count to keep. - -Signature: - -```typescript -removeOnFail?: boolean | number | KeepJobs; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.repeat.md b/docs/gitbook/api/bullmq.jobsoptions.repeat.md deleted file mode 100644 index 7ca15bdca8..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.repeat.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [repeat](./bullmq.jobsoptions.repeat.md) - -## JobsOptions.repeat property - -Repeat this job, for example based on a `cron` schedule. - -Signature: - -```typescript -repeat?: RepeatOptions; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.sizelimit.md b/docs/gitbook/api/bullmq.jobsoptions.sizelimit.md deleted file mode 100644 index f3eba468da..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.sizelimit.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [sizeLimit](./bullmq.jobsoptions.sizelimit.md) - -## JobsOptions.sizeLimit property - -Limits the size in bytes of the job's data payload (as a JSON serialized string). - -Signature: - -```typescript -sizeLimit?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.stacktracelimit.md b/docs/gitbook/api/bullmq.jobsoptions.stacktracelimit.md deleted file mode 100644 index 1be90e3232..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.stacktracelimit.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [stackTraceLimit](./bullmq.jobsoptions.stacktracelimit.md) - -## JobsOptions.stackTraceLimit property - -Limits the amount of stack trace lines that will be recorded in the stacktrace. - -Signature: - -```typescript -stackTraceLimit?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.timeout.md b/docs/gitbook/api/bullmq.jobsoptions.timeout.md deleted file mode 100644 index e82b3c402a..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.timeout.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [timeout](./bullmq.jobsoptions.timeout.md) - -## JobsOptions.timeout property - -The number of milliseconds after which the job should be fail with a timeout error. - -Signature: - -```typescript -timeout?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobsoptions.timestamp.md b/docs/gitbook/api/bullmq.jobsoptions.timestamp.md deleted file mode 100644 index 5cb72d1db5..0000000000 --- a/docs/gitbook/api/bullmq.jobsoptions.timestamp.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobsOptions](./bullmq.jobsoptions.md) > [timestamp](./bullmq.jobsoptions.timestamp.md) - -## JobsOptions.timestamp property - -Timestamp when the job was created. Defaults to `Date.now()`. - -Signature: - -```typescript -timestamp?: number; -``` diff --git a/docs/gitbook/api/bullmq.jobstate.md b/docs/gitbook/api/bullmq.jobstate.md deleted file mode 100644 index 1c119ae4c7..0000000000 --- a/docs/gitbook/api/bullmq.jobstate.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobState](./bullmq.jobstate.md) - -## JobState type - -Signature: - -```typescript -export declare type JobState = FinishedStatus | 'active' | 'delayed' | 'waiting' | 'waiting-children'; -``` -References: [FinishedStatus](./bullmq.finishedstatus.md) - diff --git a/docs/gitbook/api/bullmq.jobstatusclean3.md b/docs/gitbook/api/bullmq.jobstatusclean3.md deleted file mode 100644 index 4459524cf3..0000000000 --- a/docs/gitbook/api/bullmq.jobstatusclean3.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobStatusClean3](./bullmq.jobstatusclean3.md) - -## JobStatusClean3 type - -Signature: - -```typescript -export declare type JobStatusClean3 = 'completed' | 'wait' | 'active' | 'delayed' | 'paused' | 'failed'; -``` diff --git a/docs/gitbook/api/bullmq.jobtype.md b/docs/gitbook/api/bullmq.jobtype.md deleted file mode 100644 index e4d7c1917a..0000000000 --- a/docs/gitbook/api/bullmq.jobtype.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [JobType](./bullmq.jobtype.md) - -## JobType type - -Signature: - -```typescript -export declare type JobType = JobState | 'paused' | 'repeat' | 'wait'; -``` -References: [JobState](./bullmq.jobstate.md) - diff --git a/docs/gitbook/api/bullmq.keepjobs.age.md b/docs/gitbook/api/bullmq.keepjobs.age.md deleted file mode 100644 index d1093d5a26..0000000000 --- a/docs/gitbook/api/bullmq.keepjobs.age.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [KeepJobs](./bullmq.keepjobs.md) > [age](./bullmq.keepjobs.age.md) - -## KeepJobs.age property - -Maximum age in seconds for job to be kept. - -Signature: - -```typescript -age?: number; -``` diff --git a/docs/gitbook/api/bullmq.keepjobs.count.md b/docs/gitbook/api/bullmq.keepjobs.count.md deleted file mode 100644 index 0aba694050..0000000000 --- a/docs/gitbook/api/bullmq.keepjobs.count.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [KeepJobs](./bullmq.keepjobs.md) > [count](./bullmq.keepjobs.count.md) - -## KeepJobs.count property - -Maximum count of jobs to be kept. - -Signature: - -```typescript -count?: number; -``` diff --git a/docs/gitbook/api/bullmq.keepjobs.md b/docs/gitbook/api/bullmq.keepjobs.md deleted file mode 100644 index 2b71340ac7..0000000000 --- a/docs/gitbook/api/bullmq.keepjobs.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [KeepJobs](./bullmq.keepjobs.md) - -## KeepJobs interface - -KeepJobs - -Specify which jobs to keep after finishing. If both age and count are specified, then the jobs kept will be the ones that satisfies both properties. - -Signature: - -```typescript -export interface KeepJobs -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [age?](./bullmq.keepjobs.age.md) | number | (Optional) Maximum age in seconds for job to be kept. | -| [count?](./bullmq.keepjobs.count.md) | number | (Optional) Maximum count of jobs to be kept. | - diff --git a/docs/gitbook/api/bullmq.keysmap.md b/docs/gitbook/api/bullmq.keysmap.md deleted file mode 100644 index 6322babb92..0000000000 --- a/docs/gitbook/api/bullmq.keysmap.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [KeysMap](./bullmq.keysmap.md) - -## KeysMap type - -Signature: - -```typescript -export declare type KeysMap = { - [index in string]: string; -}; -``` diff --git a/docs/gitbook/api/bullmq.killasync.md b/docs/gitbook/api/bullmq.killasync.md deleted file mode 100644 index ad8337731e..0000000000 --- a/docs/gitbook/api/bullmq.killasync.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [killAsync](./bullmq.killasync.md) - -## killAsync() function - -Sends a kill signal to a child resolving when the child has exited, resorting to SIGKILL if the given timeout is reached - -Signature: - -```typescript -export declare function killAsync(child: ChildProcess, signal?: 'SIGTERM' | 'SIGKILL', timeoutMs?: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| child | ChildProcess | | -| signal | 'SIGTERM' \| 'SIGKILL' | | -| timeoutMs | number | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.lengthinutf8bytes.md b/docs/gitbook/api/bullmq.lengthinutf8bytes.md deleted file mode 100644 index 40ad9f38ea..0000000000 --- a/docs/gitbook/api/bullmq.lengthinutf8bytes.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [lengthInUtf8Bytes](./bullmq.lengthinutf8bytes.md) - -## lengthInUtf8Bytes() function - -Checks the size of string for ascii/non-ascii characters - -Signature: - -```typescript -export declare function lengthInUtf8Bytes(str: string): number; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| str | string | | - -Returns: - -number - diff --git a/docs/gitbook/api/bullmq.md b/docs/gitbook/api/bullmq.md deleted file mode 100644 index fc4a3a25b5..0000000000 --- a/docs/gitbook/api/bullmq.md +++ /dev/null @@ -1,159 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) - -## bullmq package - -## Classes - -| Class | Description | -| --- | --- | -| [Backoffs](./bullmq.backoffs.md) | | -| [ChildPool](./bullmq.childpool.md) | | -| [ChildProcessor](./bullmq.childprocessor.md) | ChildProcessorThis class acts as the interface between a child process and it parent process so that jobs can be processed in different processes than the parent. | -| [FlowProducer](./bullmq.flowproducer.md) | This class allows to add jobs with dependencies between them in such a way that it is possible to build complex flows. Note: A flow is a tree-like structure of jobs that depend on each other. Whenever the children of a given parent are completed, the parent will be processed, being able to access the children's result data. All Jobs can be in different queues, either children or parents, | -| [Job](./bullmq.job.md) | | -| [Queue](./bullmq.queue.md) | QueueThis class provides methods to add jobs to a queue and some othe high-level administration such as pausing or deleting queues. | -| [Queue3](./bullmq.queue3.md) | | -| [QueueBase](./bullmq.queuebase.md) | | -| [QueueEvents](./bullmq.queueevents.md) | The QueueEvents class is used for listening to the global events emitted by a given queue.This class requires a dedicated redis connection. | -| [QueueGetters](./bullmq.queuegetters.md) | | -| [QueueKeys](./bullmq.queuekeys.md) | | -| [QueueScheduler](./bullmq.queuescheduler.md) | This class is just used for some automatic bookkeeping of the queue, such as updating the delay set as well as moving stalled jobs back to the waiting list.Jobs are checked for stallness once every "visibility window" seconds. Jobs are then marked as candidates for being stalled, in the next check, the candidates are marked as stalled and moved to wait. Workers need to clean the candidate list with the jobs that they are working on, failing to update the list results in the job ending being stalled.This class requires a dedicated redis connection, and at least one is needed to be running at a given time, otherwise delays, stalled jobs, retries, repeatable jobs, etc, will not work correctly or at all. | -| [RedisConnection](./bullmq.redisconnection.md) | | -| [Repeat](./bullmq.repeat.md) | | -| [ScriptLoader](./bullmq.scriptloader.md) | Lua script loader with include support | -| [ScriptLoaderError](./bullmq.scriptloadererror.md) | | -| [Scripts](./bullmq.scripts.md) | | -| [TimerManager](./bullmq.timermanager.md) | Keeps track on timers created with setTimeout to help clearTimeout for all timers when no more delayed actions needed | -| [UnrecoverableError](./bullmq.unrecoverableerror.md) | UnrecoverableErrorError to move a job to failed even if the attemptsMade are lower than the expected limit. | -| [Worker](./bullmq.worker.md) | This class represents a worker that is able to process jobs from the queue. As soon as the class is instantiated it will start processing jobs. | - -## Enumerations - -| Enumeration | Description | -| --- | --- | -| [ChildCommand](./bullmq.childcommand.md) | | -| [ClientType](./bullmq.clienttype.md) | | -| [ErrorCode](./bullmq.errorcode.md) | | -| [MetricsTime](./bullmq.metricstime.md) | | -| [ParentCommand](./bullmq.parentcommand.md) | | - -## Functions - -| Function | Description | -| --- | --- | -| [array2obj(arr)](./bullmq.array2obj.md) | | -| [delay(ms)](./bullmq.delay.md) | | -| [getParentKey(opts)](./bullmq.getparentkey.md) | | -| [isEmpty(obj)](./bullmq.isempty.md) | | -| [isNotConnectionError(error)](./bullmq.isnotconnectionerror.md) | | -| [isRedisCluster(obj)](./bullmq.isrediscluster.md) | | -| [isRedisInstance(obj)](./bullmq.isredisinstance.md) | | -| [jobIdForGroup(jobOpts, data, queueOpts)](./bullmq.jobidforgroup.md) | | -| [killAsync(child, signal, timeoutMs)](./bullmq.killasync.md) | Sends a kill signal to a child resolving when the child has exited, resorting to SIGKILL if the given timeout is reached | -| [lengthInUtf8Bytes(str)](./bullmq.lengthinutf8bytes.md) | Checks the size of string for ascii/non-ascii characters | -| [raw2jobData(raw)](./bullmq.raw2jobdata.md) | | -| [removeAllQueueData(client, queueName, prefix)](./bullmq.removeallqueuedata.md) | | -| [tryCatch(fn, ctx, args)](./bullmq.trycatch.md) | | - -## Interfaces - -| Interface | Description | -| --- | --- | -| [AddChildrenOpts](./bullmq.addchildrenopts.md) | | -| [AddNodeOpts](./bullmq.addnodeopts.md) | | -| [AdvancedOptions](./bullmq.advancedoptions.md) | | -| [BackoffOptions](./bullmq.backoffoptions.md) | Settings for backing off failed jobs. | -| [ChildMessage](./bullmq.childmessage.md) | | -| [ChildProcessExt](./bullmq.childprocessext.md) | | -| [Command](./bullmq.command.md) | | -| [DependenciesOpts](./bullmq.dependenciesopts.md) | | -| [FlowJob](./bullmq.flowjob.md) | | -| [FlowOpts](./bullmq.flowopts.md) | | -| [GetNextJobOptions](./bullmq.getnextjoboptions.md) | | -| [IConnection](./bullmq.iconnection.md) | | -| [JobInformation3](./bullmq.jobinformation3.md) | | -| [JobJson](./bullmq.jobjson.md) | | -| [JobJsonRaw](./bullmq.jobjsonraw.md) | | -| [JobNode](./bullmq.jobnode.md) | | -| [JobPromise3](./bullmq.jobpromise3.md) | | -| [JobsOptions](./bullmq.jobsoptions.md) | | -| [KeepJobs](./bullmq.keepjobs.md) | KeepJobsSpecify which jobs to keep after finishing. If both age and count are specified, then the jobs kept will be the ones that satisfies both properties. | -| [Metrics](./bullmq.metrics.md) | | -| [MetricsOptions](./bullmq.metricsoptions.md) | | -| [MoveToChildrenOpts](./bullmq.movetochildrenopts.md) | | -| [NodeOpts](./bullmq.nodeopts.md) | | -| [ObliterateOpts](./bullmq.obliterateopts.md) | | -| [Parent](./bullmq.parent.md) | Describes the parent for a Job. | -| [ParentKeys](./bullmq.parentkeys.md) | | -| [ParentMessage](./bullmq.parentmessage.md) | | -| [QueueBaseOptions](./bullmq.queuebaseoptions.md) | Base Queue options | -| [QueueEventsListener](./bullmq.queueeventslistener.md) | | -| [QueueEventsOptions](./bullmq.queueeventsoptions.md) | Options for QueueEvents | -| [QueueListener](./bullmq.queuelistener.md) | | -| [QueueOptions](./bullmq.queueoptions.md) | Options for the Queue class. | -| [QueueSchedulerListener](./bullmq.queueschedulerlistener.md) | | -| [QueueSchedulerOptions](./bullmq.queuescheduleroptions.md) | Options for customizing the behaviour of the scheduler. | -| [RateLimiterOptions](./bullmq.ratelimiteroptions.md) | | -| [RepeatOptions](./bullmq.repeatoptions.md) | Settings for repeatable jobs | -| [SandboxedJob](./bullmq.sandboxedjob.md) | | -| [ScriptMetadata](./bullmq.scriptmetadata.md) | Script metadata | -| [Strategies](./bullmq.strategies.md) | | -| [WorkerListener](./bullmq.workerlistener.md) | | -| [WorkerOptions](./bullmq.workeroptions.md) | | - -## Variables - -| Variable | Description | -| --- | --- | -| [asyncSend](./bullmq.asyncsend.md) | | -| [childSend](./bullmq.childsend.md) | | -| [clientCommandMessageReg](./bullmq.clientcommandmessagereg.md) | | -| [DELAY\_TIME\_1](./bullmq.delay_time_1.md) | | -| [DELAY\_TIME\_5](./bullmq.delay_time_5.md) | | -| [errorObject](./bullmq.errorobject.md) | | -| [parentSend](./bullmq.parentsend.md) | | -| [QUEUE\_EVENT\_SUFFIX](./bullmq.queue_event_suffix.md) | | -| [QUEUE\_SCHEDULER\_SUFFIX](./bullmq.queue_scheduler_suffix.md) | | -| [scriptLoader](./bullmq.scriptloader.md) | | -| [WORKER\_SUFFIX](./bullmq.worker_suffix.md) | | - -## Type Aliases - -| Type Alias | Description | -| --- | --- | -| [ActiveEventCallback3](./bullmq.activeeventcallback3.md) | | -| [BackoffFunction](./bullmq.backofffunction.md) | | -| [BulkJobOptions](./bullmq.bulkjoboptions.md) | | -| [CleanedEventCallback3](./bullmq.cleanedeventcallback3.md) | | -| [ClusterOptions](./bullmq.clusteroptions.md) | | -| [CompletedEventCallback3](./bullmq.completedeventcallback3.md) | | -| [ConnectionOptions](./bullmq.connectionoptions.md) | | -| [EntryId](./bullmq.entryid.md) | | -| [EntryRaw](./bullmq.entryraw.md) | | -| [ErrorEventCallback3](./bullmq.erroreventcallback3.md) | | -| [EventCallback3](./bullmq.eventcallback3.md) | | -| [FailedEventCallback3](./bullmq.failedeventcallback3.md) | | -| [FinishedPropValAttribute](./bullmq.finishedpropvalattribute.md) | | -| [FinishedStatus](./bullmq.finishedstatus.md) | | -| [FlowQueuesOpts](./bullmq.flowqueuesopts.md) | | -| [JobData](./bullmq.jobdata.md) | | -| [JobJsonSandbox](./bullmq.jobjsonsandbox.md) | | -| [JobState](./bullmq.jobstate.md) | | -| [JobStatusClean3](./bullmq.jobstatusclean3.md) | | -| [JobType](./bullmq.jobtype.md) | | -| [KeysMap](./bullmq.keysmap.md) | | -| [MinimalQueue](./bullmq.minimalqueue.md) | | -| [ParentOpts](./bullmq.parentopts.md) | | -| [Processor](./bullmq.processor.md) | An async function that receives Jobs and handles them. | -| [ProgressEventCallback3](./bullmq.progresseventcallback3.md) | | -| [RedisClient](./bullmq.redisclient.md) | | -| [RedisOptions](./bullmq.redisoptions.md) | | -| [RemovedEventCallback3](./bullmq.removedeventcallback3.md) | | -| [SandboxedJobProcessor](./bullmq.sandboxedjobprocessor.md) | | -| [StalledEventCallback3](./bullmq.stalledeventcallback3.md) | | -| [StreamName](./bullmq.streamname.md) | | -| [StreamReadRaw](./bullmq.streamreadraw.md) | | -| [WaitingEventCallback3](./bullmq.waitingeventcallback3.md) | | - diff --git a/docs/gitbook/api/bullmq.metrics.count.md b/docs/gitbook/api/bullmq.metrics.count.md deleted file mode 100644 index 9d38086d06..0000000000 --- a/docs/gitbook/api/bullmq.metrics.count.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Metrics](./bullmq.metrics.md) > [count](./bullmq.metrics.count.md) - -## Metrics.count property - -Signature: - -```typescript -count: number; -``` diff --git a/docs/gitbook/api/bullmq.metrics.data.md b/docs/gitbook/api/bullmq.metrics.data.md deleted file mode 100644 index a89087d288..0000000000 --- a/docs/gitbook/api/bullmq.metrics.data.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Metrics](./bullmq.metrics.md) > [data](./bullmq.metrics.data.md) - -## Metrics.data property - -Signature: - -```typescript -data: number[]; -``` diff --git a/docs/gitbook/api/bullmq.metrics.md b/docs/gitbook/api/bullmq.metrics.md deleted file mode 100644 index 6d7011d9fe..0000000000 --- a/docs/gitbook/api/bullmq.metrics.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Metrics](./bullmq.metrics.md) - -## Metrics interface - -Signature: - -```typescript -export interface Metrics -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [count](./bullmq.metrics.count.md) | number | | -| [data](./bullmq.metrics.data.md) | number\[\] | | -| [meta](./bullmq.metrics.meta.md) | { count: number; prevTS: number; prevCount: number; } | | - diff --git a/docs/gitbook/api/bullmq.metrics.meta.md b/docs/gitbook/api/bullmq.metrics.meta.md deleted file mode 100644 index 8bd31786cc..0000000000 --- a/docs/gitbook/api/bullmq.metrics.meta.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Metrics](./bullmq.metrics.md) > [meta](./bullmq.metrics.meta.md) - -## Metrics.meta property - -Signature: - -```typescript -meta: { - count: number; - prevTS: number; - prevCount: number; - }; -``` diff --git a/docs/gitbook/api/bullmq.metricsoptions.maxdatapoints.md b/docs/gitbook/api/bullmq.metricsoptions.maxdatapoints.md deleted file mode 100644 index aedade7b3d..0000000000 --- a/docs/gitbook/api/bullmq.metricsoptions.maxdatapoints.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [MetricsOptions](./bullmq.metricsoptions.md) > [maxDataPoints](./bullmq.metricsoptions.maxdatapoints.md) - -## MetricsOptions.maxDataPoints property - -Enable gathering metrics for finished jobs. Output refers to all finished jobs, completed or failed. - -Signature: - -```typescript -maxDataPoints?: number; -``` diff --git a/docs/gitbook/api/bullmq.metricsoptions.md b/docs/gitbook/api/bullmq.metricsoptions.md deleted file mode 100644 index b92cfb2af8..0000000000 --- a/docs/gitbook/api/bullmq.metricsoptions.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [MetricsOptions](./bullmq.metricsoptions.md) - -## MetricsOptions interface - -Signature: - -```typescript -export interface MetricsOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [maxDataPoints?](./bullmq.metricsoptions.maxdatapoints.md) | number | (Optional) Enable gathering metrics for finished jobs. Output refers to all finished jobs, completed or failed. | - diff --git a/docs/gitbook/api/bullmq.metricstime.md b/docs/gitbook/api/bullmq.metricstime.md deleted file mode 100644 index 720acceb9b..0000000000 --- a/docs/gitbook/api/bullmq.metricstime.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [MetricsTime](./bullmq.metricstime.md) - -## MetricsTime enum - -Signature: - -```typescript -export declare enum MetricsTime -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| FIFTEEN\_MINUTES | 15 | | -| FIVE\_MINUTES | 5 | | -| ONE\_HOUR | 60 | | -| ONE\_MINUTE | 1 | | -| ONE\_MONTH | 80640 | | -| ONE\_WEEK | 10080 | | -| THIRTY\_MINUTES | 30 | | -| TWO\_WEEKS | 20160 | | - diff --git a/docs/gitbook/api/bullmq.minimalqueue.md b/docs/gitbook/api/bullmq.minimalqueue.md deleted file mode 100644 index 1099f3351b..0000000000 --- a/docs/gitbook/api/bullmq.minimalqueue.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [MinimalQueue](./bullmq.minimalqueue.md) - -## MinimalQueue type - -Signature: - -```typescript -export declare type MinimalQueue = Pick; -``` -References: [QueueBase](./bullmq.queuebase.md) - diff --git a/docs/gitbook/api/bullmq.movetochildrenopts.child.md b/docs/gitbook/api/bullmq.movetochildrenopts.child.md deleted file mode 100644 index 6643aa4633..0000000000 --- a/docs/gitbook/api/bullmq.movetochildrenopts.child.md +++ /dev/null @@ -1,14 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [MoveToChildrenOpts](./bullmq.movetochildrenopts.md) > [child](./bullmq.movetochildrenopts.child.md) - -## MoveToChildrenOpts.child property - -Signature: - -```typescript -child?: { - id: string; - queue: string; - }; -``` diff --git a/docs/gitbook/api/bullmq.movetochildrenopts.md b/docs/gitbook/api/bullmq.movetochildrenopts.md deleted file mode 100644 index ce5725d485..0000000000 --- a/docs/gitbook/api/bullmq.movetochildrenopts.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [MoveToChildrenOpts](./bullmq.movetochildrenopts.md) - -## MoveToChildrenOpts interface - -Signature: - -```typescript -export interface MoveToChildrenOpts -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [child?](./bullmq.movetochildrenopts.child.md) | { id: string; queue: string; } | (Optional) | -| [timestamp?](./bullmq.movetochildrenopts.timestamp.md) | number | (Optional) | - diff --git a/docs/gitbook/api/bullmq.movetochildrenopts.timestamp.md b/docs/gitbook/api/bullmq.movetochildrenopts.timestamp.md deleted file mode 100644 index a1340c5f8a..0000000000 --- a/docs/gitbook/api/bullmq.movetochildrenopts.timestamp.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [MoveToChildrenOpts](./bullmq.movetochildrenopts.md) > [timestamp](./bullmq.movetochildrenopts.timestamp.md) - -## MoveToChildrenOpts.timestamp property - -Signature: - -```typescript -timestamp?: number; -``` diff --git a/docs/gitbook/api/bullmq.nodeopts.depth.md b/docs/gitbook/api/bullmq.nodeopts.depth.md deleted file mode 100644 index da5f6e3681..0000000000 --- a/docs/gitbook/api/bullmq.nodeopts.depth.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [NodeOpts](./bullmq.nodeopts.md) > [depth](./bullmq.nodeopts.depth.md) - -## NodeOpts.depth property - -Maximum depth or levels to visit in the tree. - -Signature: - -```typescript -depth?: number; -``` diff --git a/docs/gitbook/api/bullmq.nodeopts.id.md b/docs/gitbook/api/bullmq.nodeopts.id.md deleted file mode 100644 index 6ad5dc6d39..0000000000 --- a/docs/gitbook/api/bullmq.nodeopts.id.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [NodeOpts](./bullmq.nodeopts.md) > [id](./bullmq.nodeopts.id.md) - -## NodeOpts.id property - -Root job id. - -Signature: - -```typescript -id: string; -``` diff --git a/docs/gitbook/api/bullmq.nodeopts.maxchildren.md b/docs/gitbook/api/bullmq.nodeopts.maxchildren.md deleted file mode 100644 index 86dc0eba36..0000000000 --- a/docs/gitbook/api/bullmq.nodeopts.maxchildren.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [NodeOpts](./bullmq.nodeopts.md) > [maxChildren](./bullmq.nodeopts.maxchildren.md) - -## NodeOpts.maxChildren property - -Maximum quantity of children per type (processed, unprocessed). - -Signature: - -```typescript -maxChildren?: number; -``` diff --git a/docs/gitbook/api/bullmq.nodeopts.md b/docs/gitbook/api/bullmq.nodeopts.md deleted file mode 100644 index 7ee17c9cd9..0000000000 --- a/docs/gitbook/api/bullmq.nodeopts.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [NodeOpts](./bullmq.nodeopts.md) - -## NodeOpts interface - -Signature: - -```typescript -export interface NodeOpts -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [depth?](./bullmq.nodeopts.depth.md) | number | (Optional) Maximum depth or levels to visit in the tree. | -| [id](./bullmq.nodeopts.id.md) | string | Root job id. | -| [maxChildren?](./bullmq.nodeopts.maxchildren.md) | number | (Optional) Maximum quantity of children per type (processed, unprocessed). | -| [prefix?](./bullmq.nodeopts.prefix.md) | string | (Optional) Prefix included in job key. | -| [queueName](./bullmq.nodeopts.queuename.md) | string | Root job queue name. | - diff --git a/docs/gitbook/api/bullmq.nodeopts.prefix.md b/docs/gitbook/api/bullmq.nodeopts.prefix.md deleted file mode 100644 index 2d08710cab..0000000000 --- a/docs/gitbook/api/bullmq.nodeopts.prefix.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [NodeOpts](./bullmq.nodeopts.md) > [prefix](./bullmq.nodeopts.prefix.md) - -## NodeOpts.prefix property - -Prefix included in job key. - -Signature: - -```typescript -prefix?: string; -``` diff --git a/docs/gitbook/api/bullmq.nodeopts.queuename.md b/docs/gitbook/api/bullmq.nodeopts.queuename.md deleted file mode 100644 index 5052f18cd3..0000000000 --- a/docs/gitbook/api/bullmq.nodeopts.queuename.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [NodeOpts](./bullmq.nodeopts.md) > [queueName](./bullmq.nodeopts.queuename.md) - -## NodeOpts.queueName property - -Root job queue name. - -Signature: - -```typescript -queueName: string; -``` diff --git a/docs/gitbook/api/bullmq.obliterateopts.count.md b/docs/gitbook/api/bullmq.obliterateopts.count.md deleted file mode 100644 index a7d541dbec..0000000000 --- a/docs/gitbook/api/bullmq.obliterateopts.count.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ObliterateOpts](./bullmq.obliterateopts.md) > [count](./bullmq.obliterateopts.count.md) - -## ObliterateOpts.count property - -Use count with the maximum number of deleted keys per iteration - -Signature: - -```typescript -count?: number; -``` diff --git a/docs/gitbook/api/bullmq.obliterateopts.force.md b/docs/gitbook/api/bullmq.obliterateopts.force.md deleted file mode 100644 index b1c075cc51..0000000000 --- a/docs/gitbook/api/bullmq.obliterateopts.force.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ObliterateOpts](./bullmq.obliterateopts.md) > [force](./bullmq.obliterateopts.force.md) - -## ObliterateOpts.force property - -Use force = true to force obliteration even with active jobs in the queue - -Signature: - -```typescript -force?: boolean; -``` diff --git a/docs/gitbook/api/bullmq.obliterateopts.md b/docs/gitbook/api/bullmq.obliterateopts.md deleted file mode 100644 index e603307060..0000000000 --- a/docs/gitbook/api/bullmq.obliterateopts.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ObliterateOpts](./bullmq.obliterateopts.md) - -## ObliterateOpts interface - -Signature: - -```typescript -export interface ObliterateOpts -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [count?](./bullmq.obliterateopts.count.md) | number | (Optional) Use count with the maximum number of deleted keys per iteration | -| [force?](./bullmq.obliterateopts.force.md) | boolean | (Optional) Use force = true to force obliteration even with active jobs in the queue | - diff --git a/docs/gitbook/api/bullmq.parent.data.md b/docs/gitbook/api/bullmq.parent.data.md deleted file mode 100644 index 556ed287ca..0000000000 --- a/docs/gitbook/api/bullmq.parent.data.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Parent](./bullmq.parent.md) > [data](./bullmq.parent.data.md) - -## Parent.data property - -Signature: - -```typescript -data?: T; -``` diff --git a/docs/gitbook/api/bullmq.parent.md b/docs/gitbook/api/bullmq.parent.md deleted file mode 100644 index c2737a35ab..0000000000 --- a/docs/gitbook/api/bullmq.parent.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Parent](./bullmq.parent.md) - -## Parent interface - -Describes the parent for a Job. - -Signature: - -```typescript -export interface Parent -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [data?](./bullmq.parent.data.md) | T | (Optional) | -| [name](./bullmq.parent.name.md) | string | | -| [opts?](./bullmq.parent.opts.md) | [JobsOptions](./bullmq.jobsoptions.md) | (Optional) | -| [prefix?](./bullmq.parent.prefix.md) | string | (Optional) | -| [queue?](./bullmq.parent.queue.md) | string | (Optional) | - diff --git a/docs/gitbook/api/bullmq.parent.name.md b/docs/gitbook/api/bullmq.parent.name.md deleted file mode 100644 index eb2e198cd9..0000000000 --- a/docs/gitbook/api/bullmq.parent.name.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Parent](./bullmq.parent.md) > [name](./bullmq.parent.name.md) - -## Parent.name property - -Signature: - -```typescript -name: string; -``` diff --git a/docs/gitbook/api/bullmq.parent.opts.md b/docs/gitbook/api/bullmq.parent.opts.md deleted file mode 100644 index 6433421044..0000000000 --- a/docs/gitbook/api/bullmq.parent.opts.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Parent](./bullmq.parent.md) > [opts](./bullmq.parent.opts.md) - -## Parent.opts property - -Signature: - -```typescript -opts?: JobsOptions; -``` diff --git a/docs/gitbook/api/bullmq.parent.prefix.md b/docs/gitbook/api/bullmq.parent.prefix.md deleted file mode 100644 index 409ae65281..0000000000 --- a/docs/gitbook/api/bullmq.parent.prefix.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Parent](./bullmq.parent.md) > [prefix](./bullmq.parent.prefix.md) - -## Parent.prefix property - -Signature: - -```typescript -prefix?: string; -``` diff --git a/docs/gitbook/api/bullmq.parent.queue.md b/docs/gitbook/api/bullmq.parent.queue.md deleted file mode 100644 index 94d96ef6b8..0000000000 --- a/docs/gitbook/api/bullmq.parent.queue.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Parent](./bullmq.parent.md) > [queue](./bullmq.parent.queue.md) - -## Parent.queue property - -Signature: - -```typescript -queue?: string; -``` diff --git a/docs/gitbook/api/bullmq.parentcommand.md b/docs/gitbook/api/bullmq.parentcommand.md deleted file mode 100644 index a17deba47e..0000000000 --- a/docs/gitbook/api/bullmq.parentcommand.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ParentCommand](./bullmq.parentcommand.md) - -## ParentCommand enum - -Signature: - -```typescript -export declare enum ParentCommand -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| Completed | 2 | | -| Error | 4 | | -| Failed | 3 | | -| InitCompleted | 1 | | -| InitFailed | 0 | | -| Log | 6 | | -| Progress | 5 | | - diff --git a/docs/gitbook/api/bullmq.parentkeys.id.md b/docs/gitbook/api/bullmq.parentkeys.id.md deleted file mode 100644 index b67f421ce3..0000000000 --- a/docs/gitbook/api/bullmq.parentkeys.id.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ParentKeys](./bullmq.parentkeys.md) > [id](./bullmq.parentkeys.id.md) - -## ParentKeys.id property - -Signature: - -```typescript -id: string; -``` diff --git a/docs/gitbook/api/bullmq.parentkeys.md b/docs/gitbook/api/bullmq.parentkeys.md deleted file mode 100644 index 3a22678e4d..0000000000 --- a/docs/gitbook/api/bullmq.parentkeys.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ParentKeys](./bullmq.parentkeys.md) - -## ParentKeys interface - -Signature: - -```typescript -export interface ParentKeys -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [id](./bullmq.parentkeys.id.md) | string | | -| [queueKey](./bullmq.parentkeys.queuekey.md) | string | | - diff --git a/docs/gitbook/api/bullmq.parentkeys.queuekey.md b/docs/gitbook/api/bullmq.parentkeys.queuekey.md deleted file mode 100644 index a336db0abd..0000000000 --- a/docs/gitbook/api/bullmq.parentkeys.queuekey.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ParentKeys](./bullmq.parentkeys.md) > [queueKey](./bullmq.parentkeys.queuekey.md) - -## ParentKeys.queueKey property - -Signature: - -```typescript -queueKey: string; -``` diff --git a/docs/gitbook/api/bullmq.parentmessage.cmd.md b/docs/gitbook/api/bullmq.parentmessage.cmd.md deleted file mode 100644 index 280c5a17a7..0000000000 --- a/docs/gitbook/api/bullmq.parentmessage.cmd.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ParentMessage](./bullmq.parentmessage.md) > [cmd](./bullmq.parentmessage.cmd.md) - -## ParentMessage.cmd property - -Signature: - -```typescript -cmd: ChildCommand; -``` diff --git a/docs/gitbook/api/bullmq.parentmessage.err.md b/docs/gitbook/api/bullmq.parentmessage.err.md deleted file mode 100644 index 51dcd59f72..0000000000 --- a/docs/gitbook/api/bullmq.parentmessage.err.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ParentMessage](./bullmq.parentmessage.md) > [err](./bullmq.parentmessage.err.md) - -## ParentMessage.err property - -Signature: - -```typescript -err?: Error; -``` diff --git a/docs/gitbook/api/bullmq.parentmessage.job.md b/docs/gitbook/api/bullmq.parentmessage.job.md deleted file mode 100644 index 1a40d1485f..0000000000 --- a/docs/gitbook/api/bullmq.parentmessage.job.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ParentMessage](./bullmq.parentmessage.md) > [job](./bullmq.parentmessage.job.md) - -## ParentMessage.job property - -Signature: - -```typescript -job?: JobJson; -``` diff --git a/docs/gitbook/api/bullmq.parentmessage.md b/docs/gitbook/api/bullmq.parentmessage.md deleted file mode 100644 index bbb33fd67f..0000000000 --- a/docs/gitbook/api/bullmq.parentmessage.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ParentMessage](./bullmq.parentmessage.md) - -## ParentMessage interface - -Signature: - -```typescript -export interface ParentMessage -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [cmd](./bullmq.parentmessage.cmd.md) | [ChildCommand](./bullmq.childcommand.md) | | -| [err?](./bullmq.parentmessage.err.md) | Error | (Optional) | -| [job?](./bullmq.parentmessage.job.md) | [JobJson](./bullmq.jobjson.md) | (Optional) | -| [value?](./bullmq.parentmessage.value.md) | any | (Optional) | - diff --git a/docs/gitbook/api/bullmq.parentmessage.value.md b/docs/gitbook/api/bullmq.parentmessage.value.md deleted file mode 100644 index 5b97cf566c..0000000000 --- a/docs/gitbook/api/bullmq.parentmessage.value.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ParentMessage](./bullmq.parentmessage.md) > [value](./bullmq.parentmessage.value.md) - -## ParentMessage.value property - -Signature: - -```typescript -value?: any; -``` diff --git a/docs/gitbook/api/bullmq.parentopts.md b/docs/gitbook/api/bullmq.parentopts.md deleted file mode 100644 index 8a9f621f4b..0000000000 --- a/docs/gitbook/api/bullmq.parentopts.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ParentOpts](./bullmq.parentopts.md) - -## ParentOpts type - -Signature: - -```typescript -export declare type ParentOpts = { - waitChildrenKey?: string; - parentDependenciesKey?: string; - parentKey?: string; -}; -``` diff --git a/docs/gitbook/api/bullmq.parentsend.md b/docs/gitbook/api/bullmq.parentsend.md deleted file mode 100644 index 9c02a25800..0000000000 --- a/docs/gitbook/api/bullmq.parentsend.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [parentSend](./bullmq.parentsend.md) - -## parentSend variable - -Signature: - -```typescript -parentSend: (child: ChildProcess, msg: ParentMessage) => Promise -``` diff --git a/docs/gitbook/api/bullmq.processor.md b/docs/gitbook/api/bullmq.processor.md deleted file mode 100644 index 2ce8e540af..0000000000 --- a/docs/gitbook/api/bullmq.processor.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Processor](./bullmq.processor.md) - -## Processor type - -An async function that receives `Job`s and handles them. - -Signature: - -```typescript -export declare type Processor = (job: Job, token?: string) => Promise; -``` -References: [Job](./bullmq.job.md) - diff --git a/docs/gitbook/api/bullmq.progresseventcallback3.md b/docs/gitbook/api/bullmq.progresseventcallback3.md deleted file mode 100644 index a14497a7ab..0000000000 --- a/docs/gitbook/api/bullmq.progresseventcallback3.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ProgressEventCallback3](./bullmq.progresseventcallback3.md) - -## ProgressEventCallback3 type - -Signature: - -```typescript -export declare type ProgressEventCallback3 = (job: Job, progress: any) => void; -``` -References: [Job](./bullmq.job.md) - diff --git a/docs/gitbook/api/bullmq.queue._constructor_.md b/docs/gitbook/api/bullmq.queue._constructor_.md deleted file mode 100644 index 382e70cb68..0000000000 --- a/docs/gitbook/api/bullmq.queue._constructor_.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [(constructor)](./bullmq.queue._constructor_.md) - -## Queue.(constructor) - -Constructs a new instance of the `Queue` class - -Signature: - -```typescript -constructor(name: string, opts?: QueueOptions, Connection?: typeof RedisConnection); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | -| opts | [QueueOptions](./bullmq.queueoptions.md) | | -| Connection | typeof [RedisConnection](./bullmq.redisconnection.md) | | - diff --git a/docs/gitbook/api/bullmq.queue.add.md b/docs/gitbook/api/bullmq.queue.add.md deleted file mode 100644 index 7f506a04ff..0000000000 --- a/docs/gitbook/api/bullmq.queue.add.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [add](./bullmq.queue.add.md) - -## Queue.add() method - -Adds a new job to the queue. - -Signature: - -```typescript -add(name: NameType, data: DataType, opts?: JobsOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | NameType | Name of the job to be added to the queue,. | -| data | DataType | Arbitrary data to append to the job. | -| opts | [JobsOptions](./bullmq.jobsoptions.md) | Job options that affects how the job is going to be processed. | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>> - diff --git a/docs/gitbook/api/bullmq.queue.addbulk.md b/docs/gitbook/api/bullmq.queue.addbulk.md deleted file mode 100644 index 202d7a50e3..0000000000 --- a/docs/gitbook/api/bullmq.queue.addbulk.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [addBulk](./bullmq.queue.addbulk.md) - -## Queue.addBulk() method - -Adds an array of jobs to the queue. - -Signature: - -```typescript -addBulk(jobs: { - name: NameType; - data: DataType; - opts?: BulkJobOptions; - }[]): Promise[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| jobs | { name: NameType; data: DataType; opts?: [BulkJobOptions](./bullmq.bulkjoboptions.md); }\[\] | The array of jobs to add to the queue. Each job is defined by 3 properties, 'name', 'data' and 'opts'. They follow the same signature as 'Queue.add'. | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, DataType, NameType>\[\]> - diff --git a/docs/gitbook/api/bullmq.queue.clean.md b/docs/gitbook/api/bullmq.queue.clean.md deleted file mode 100644 index 5494c120d0..0000000000 --- a/docs/gitbook/api/bullmq.queue.clean.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [clean](./bullmq.queue.clean.md) - -## Queue.clean() method - -Cleans jobs from a queue. Similar to drain but keeps jobs within a certain grace period. - -Signature: - -```typescript -clean(grace: number, limit: number, type?: 'completed' | 'wait' | 'active' | 'paused' | 'delayed' | 'failed'): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| grace | number | The grace period | -| limit | number | Max number of jobs to clean | -| type | 'completed' \| 'wait' \| 'active' \| 'paused' \| 'delayed' \| 'failed' | Default completed - The type of job to clean Possible values are completed, wait, active, paused, delayed, failed. Defaults to completed. | - -Returns: - -Promise<string\[\]> - -Id jobs from the deleted records - diff --git a/docs/gitbook/api/bullmq.queue.close.md b/docs/gitbook/api/bullmq.queue.close.md deleted file mode 100644 index 32262ae9b8..0000000000 --- a/docs/gitbook/api/bullmq.queue.close.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [close](./bullmq.queue.close.md) - -## Queue.close() method - -Signature: - -```typescript -close(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue.defaultjoboptions.md b/docs/gitbook/api/bullmq.queue.defaultjoboptions.md deleted file mode 100644 index 0fc1633d40..0000000000 --- a/docs/gitbook/api/bullmq.queue.defaultjoboptions.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [defaultJobOptions](./bullmq.queue.defaultjoboptions.md) - -## Queue.defaultJobOptions property - -Returns this instance current default job options. - -Signature: - -```typescript -get defaultJobOptions(): JobsOptions; -``` diff --git a/docs/gitbook/api/bullmq.queue.drain.md b/docs/gitbook/api/bullmq.queue.drain.md deleted file mode 100644 index 44e62663e1..0000000000 --- a/docs/gitbook/api/bullmq.queue.drain.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [drain](./bullmq.queue.drain.md) - -## Queue.drain() method - -Drains the queue, i.e., removes all jobs that are waiting or delayed, but not active, completed or failed. - -Signature: - -```typescript -drain(delayed?: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| delayed | boolean | Pass true if it should also clean the delayed jobs. | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue.emit.md b/docs/gitbook/api/bullmq.queue.emit.md deleted file mode 100644 index ba1532b3e2..0000000000 --- a/docs/gitbook/api/bullmq.queue.emit.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [emit](./bullmq.queue.emit.md) - -## Queue.emit() method - -Signature: - -```typescript -emit>(event: U, ...args: Parameters[U]>): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| args | Parameters<[QueueListener](./bullmq.queuelistener.md)<DataType, ResultType, NameType>\[U\]> | | - -Returns: - -boolean - diff --git a/docs/gitbook/api/bullmq.queue.getrepeatablejobs.md b/docs/gitbook/api/bullmq.queue.getrepeatablejobs.md deleted file mode 100644 index ad9e4b3caf..0000000000 --- a/docs/gitbook/api/bullmq.queue.getrepeatablejobs.md +++ /dev/null @@ -1,34 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [getRepeatableJobs](./bullmq.queue.getrepeatablejobs.md) - -## Queue.getRepeatableJobs() method - -Get all repeatable meta jobs. - -Signature: - -```typescript -getRepeatableJobs(start?: number, end?: number, asc?: boolean): Promise<{ - key: string; - name: string; - id: string; - endDate: number; - tz: string; - cron: string; - next: number; - }[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | Offset of first job to return. | -| end | number | Offset of last job to return. | -| asc | boolean | Determine the order in which jobs are returned based on their next execution time. | - -Returns: - -Promise<{ key: string; name: string; id: string; endDate: number; tz: string; cron: string; next: number; }\[\]> - diff --git a/docs/gitbook/api/bullmq.queue.ispaused.md b/docs/gitbook/api/bullmq.queue.ispaused.md deleted file mode 100644 index 22922fec75..0000000000 --- a/docs/gitbook/api/bullmq.queue.ispaused.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [isPaused](./bullmq.queue.ispaused.md) - -## Queue.isPaused() method - -Returns true if the queue is currently paused. - -Signature: - -```typescript -isPaused(): Promise; -``` -Returns: - -Promise<boolean> - diff --git a/docs/gitbook/api/bullmq.queue.jobsopts.md b/docs/gitbook/api/bullmq.queue.jobsopts.md deleted file mode 100644 index ba7f2bfea1..0000000000 --- a/docs/gitbook/api/bullmq.queue.jobsopts.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [jobsOpts](./bullmq.queue.jobsopts.md) - -## Queue.jobsOpts property - -Signature: - -```typescript -jobsOpts: JobsOptions; -``` diff --git a/docs/gitbook/api/bullmq.queue.limiter.md b/docs/gitbook/api/bullmq.queue.limiter.md deleted file mode 100644 index 5b02b43594..0000000000 --- a/docs/gitbook/api/bullmq.queue.limiter.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [limiter](./bullmq.queue.limiter.md) - -## Queue.limiter property - -Signature: - -```typescript -limiter: { - groupKey: string; - }; -``` diff --git a/docs/gitbook/api/bullmq.queue.md b/docs/gitbook/api/bullmq.queue.md deleted file mode 100644 index a916794b7a..0000000000 --- a/docs/gitbook/api/bullmq.queue.md +++ /dev/null @@ -1,57 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) - -## Queue class - -Queue - -This class provides methods to add jobs to a queue and some othe high-level administration such as pausing or deleting queues. - -Signature: - -```typescript -export declare class Queue extends QueueGetters -``` -Extends: [QueueGetters](./bullmq.queuegetters.md)<DataType, ResultType, NameType> - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(name, opts, Connection)](./bullmq.queue._constructor_.md) | | Constructs a new instance of the Queue class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [defaultJobOptions](./bullmq.queue.defaultjoboptions.md) | | [JobsOptions](./bullmq.jobsoptions.md) | Returns this instance current default job options. | -| [jobsOpts](./bullmq.queue.jobsopts.md) | | [JobsOptions](./bullmq.jobsoptions.md) | | -| [limiter](./bullmq.queue.limiter.md) | | { groupKey: string; } | | -| [repeat](./bullmq.queue.repeat.md) | | Promise<[Repeat](./bullmq.repeat.md)> | | -| [token](./bullmq.queue.token.md) | | string | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [add(name, data, opts)](./bullmq.queue.add.md) | | Adds a new job to the queue. | -| [addBulk(jobs)](./bullmq.queue.addbulk.md) | | Adds an array of jobs to the queue. | -| [clean(grace, limit, type)](./bullmq.queue.clean.md) | | Cleans jobs from a queue. Similar to drain but keeps jobs within a certain grace period. | -| [close()](./bullmq.queue.close.md) | | | -| [drain(delayed)](./bullmq.queue.drain.md) | | Drains the queue, i.e., removes all jobs that are waiting or delayed, but not active, completed or failed. | -| [emit(event, args)](./bullmq.queue.emit.md) | | | -| [getRepeatableJobs(start, end, asc)](./bullmq.queue.getrepeatablejobs.md) | | Get all repeatable meta jobs. | -| [isPaused()](./bullmq.queue.ispaused.md) | | Returns true if the queue is currently paused. | -| [obliterate(opts)](./bullmq.queue.obliterate.md) | | Completely destroys the queue and all of its contents irreversibly. This method will the \*pause\* the queue and requires that there are no active jobs. It is possible to bypass this requirement, i.e. not having active jobs using the "force" option.Note: This operation requires to iterate on all the jobs stored in the queue and can be slow for very large queues. | -| [off(eventName, listener)](./bullmq.queue.off.md) | | | -| [on(event, listener)](./bullmq.queue.on.md) | | | -| [once(event, listener)](./bullmq.queue.once.md) | | | -| [pause()](./bullmq.queue.pause.md) | | Pauses the processing of this queue globally.We use an atomic RENAME operation on the wait queue. Since we have blocking calls with BRPOPLPUSH on the wait queue, as long as the queue is renamed to 'paused', no new jobs will be processed (the current ones will run until finalized).Adding jobs requires a LUA script to check first if the paused list exist and in that case it will add it there instead of the wait list. | -| [remove(jobId)](./bullmq.queue.remove.md) | | Removes the given job from the queue as well as all its dependencies. | -| [removeRepeatable(name, repeatOpts, jobId)](./bullmq.queue.removerepeatable.md) | | | -| [removeRepeatableByKey(key)](./bullmq.queue.removerepeatablebykey.md) | | | -| [resume()](./bullmq.queue.resume.md) | | Resumes the processing of this queue globally.The method reverses the pause operation by resuming the processing of the queue. | -| [retryJobs(opts)](./bullmq.queue.retryjobs.md) | | Retry all the failed jobs. | -| [trimEvents(maxLength)](./bullmq.queue.trimevents.md) | | Trim the event stream to an approximately maxLength. | - diff --git a/docs/gitbook/api/bullmq.queue.obliterate.md b/docs/gitbook/api/bullmq.queue.obliterate.md deleted file mode 100644 index 03d8ea03e8..0000000000 --- a/docs/gitbook/api/bullmq.queue.obliterate.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [obliterate](./bullmq.queue.obliterate.md) - -## Queue.obliterate() method - -Completely destroys the queue and all of its contents irreversibly. This method will the \*pause\* the queue and requires that there are no active jobs. It is possible to bypass this requirement, i.e. not having active jobs using the "force" option. - -Note: This operation requires to iterate on all the jobs stored in the queue and can be slow for very large queues. - -Signature: - -```typescript -obliterate(opts?: ObliterateOpts): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| opts | [ObliterateOpts](./bullmq.obliterateopts.md) | Obliterate options. | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue.off.md b/docs/gitbook/api/bullmq.queue.off.md deleted file mode 100644 index 592a34544e..0000000000 --- a/docs/gitbook/api/bullmq.queue.off.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [off](./bullmq.queue.off.md) - -## Queue.off() method - -Signature: - -```typescript -off>(eventName: U, listener: QueueListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| eventName | U | | -| listener | [QueueListener](./bullmq.queuelistener.md)<DataType, ResultType, NameType>\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue.on.md b/docs/gitbook/api/bullmq.queue.on.md deleted file mode 100644 index 6396fb9178..0000000000 --- a/docs/gitbook/api/bullmq.queue.on.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [on](./bullmq.queue.on.md) - -## Queue.on() method - -Signature: - -```typescript -on>(event: U, listener: QueueListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| listener | [QueueListener](./bullmq.queuelistener.md)<DataType, ResultType, NameType>\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue.once.md b/docs/gitbook/api/bullmq.queue.once.md deleted file mode 100644 index 2c917e9bee..0000000000 --- a/docs/gitbook/api/bullmq.queue.once.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [once](./bullmq.queue.once.md) - -## Queue.once() method - -Signature: - -```typescript -once>(event: U, listener: QueueListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| listener | [QueueListener](./bullmq.queuelistener.md)<DataType, ResultType, NameType>\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue.pause.md b/docs/gitbook/api/bullmq.queue.pause.md deleted file mode 100644 index ff67b8c15c..0000000000 --- a/docs/gitbook/api/bullmq.queue.pause.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [pause](./bullmq.queue.pause.md) - -## Queue.pause() method - -Pauses the processing of this queue globally. - -We use an atomic RENAME operation on the wait queue. Since we have blocking calls with BRPOPLPUSH on the wait queue, as long as the queue is renamed to 'paused', no new jobs will be processed (the current ones will run until finalized). - -Adding jobs requires a LUA script to check first if the paused list exist and in that case it will add it there instead of the wait list. - -Signature: - -```typescript -pause(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue.remove.md b/docs/gitbook/api/bullmq.queue.remove.md deleted file mode 100644 index 6a85409cf9..0000000000 --- a/docs/gitbook/api/bullmq.queue.remove.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [remove](./bullmq.queue.remove.md) - -## Queue.remove() method - -Removes the given job from the queue as well as all its dependencies. - -Signature: - -```typescript -remove(jobId: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| jobId | string | The id of the job to remove | - -Returns: - -Promise<number> - -1 if it managed to remove the job or 0 if the job or any of its dependencies was locked. - diff --git a/docs/gitbook/api/bullmq.queue.removerepeatable.md b/docs/gitbook/api/bullmq.queue.removerepeatable.md deleted file mode 100644 index fa81f7d3af..0000000000 --- a/docs/gitbook/api/bullmq.queue.removerepeatable.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [removeRepeatable](./bullmq.queue.removerepeatable.md) - -## Queue.removeRepeatable() method - -Signature: - -```typescript -removeRepeatable(name: NameType, repeatOpts: RepeatOptions, jobId?: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | NameType | | -| repeatOpts | [RepeatOptions](./bullmq.repeatoptions.md) | | -| jobId | string | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue.removerepeatablebykey.md b/docs/gitbook/api/bullmq.queue.removerepeatablebykey.md deleted file mode 100644 index 19b581e861..0000000000 --- a/docs/gitbook/api/bullmq.queue.removerepeatablebykey.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [removeRepeatableByKey](./bullmq.queue.removerepeatablebykey.md) - -## Queue.removeRepeatableByKey() method - -Signature: - -```typescript -removeRepeatableByKey(key: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| key | string | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue.repeat.md b/docs/gitbook/api/bullmq.queue.repeat.md deleted file mode 100644 index 6f59af825b..0000000000 --- a/docs/gitbook/api/bullmq.queue.repeat.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [repeat](./bullmq.queue.repeat.md) - -## Queue.repeat property - -Signature: - -```typescript -get repeat(): Promise; -``` diff --git a/docs/gitbook/api/bullmq.queue.resume.md b/docs/gitbook/api/bullmq.queue.resume.md deleted file mode 100644 index 5921ac51db..0000000000 --- a/docs/gitbook/api/bullmq.queue.resume.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [resume](./bullmq.queue.resume.md) - -## Queue.resume() method - -Resumes the processing of this queue globally. - -The method reverses the pause operation by resuming the processing of the queue. - -Signature: - -```typescript -resume(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue.retryjobs.md b/docs/gitbook/api/bullmq.queue.retryjobs.md deleted file mode 100644 index f5667f7e0c..0000000000 --- a/docs/gitbook/api/bullmq.queue.retryjobs.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [retryJobs](./bullmq.queue.retryjobs.md) - -## Queue.retryJobs() method - -Retry all the failed jobs. - -Signature: - -```typescript -retryJobs(opts?: { - count?: number; - state?: FinishedStatus; - timestamp?: number; - }): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| opts | { count?: number; state?: [FinishedStatus](./bullmq.finishedstatus.md); timestamp?: number; } | contains number to limit how many jobs will be moved to wait status per iteration, state (failed, completed) failed by default or from which timestamp. | - -Returns: - -Promise<void> - - diff --git a/docs/gitbook/api/bullmq.queue.token.md b/docs/gitbook/api/bullmq.queue.token.md deleted file mode 100644 index 1eacfa6046..0000000000 --- a/docs/gitbook/api/bullmq.queue.token.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [token](./bullmq.queue.token.md) - -## Queue.token property - -Signature: - -```typescript -token: string; -``` diff --git a/docs/gitbook/api/bullmq.queue.trimevents.md b/docs/gitbook/api/bullmq.queue.trimevents.md deleted file mode 100644 index bc053f85fb..0000000000 --- a/docs/gitbook/api/bullmq.queue.trimevents.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue](./bullmq.queue.md) > [trimEvents](./bullmq.queue.trimevents.md) - -## Queue.trimEvents() method - -Trim the event stream to an approximately maxLength. - -Signature: - -```typescript -trimEvents(maxLength: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| maxLength | number | | - -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queue3._constructor_.md b/docs/gitbook/api/bullmq.queue3._constructor_.md deleted file mode 100644 index d36bcc59ac..0000000000 --- a/docs/gitbook/api/bullmq.queue3._constructor_.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [(constructor)](./bullmq.queue3._constructor_.md) - -## Queue3.(constructor) - -This is the Queue constructor. It creates a new Queue that is persisted in Redis. Every time the same queue is instantiated it tries to process all the old jobs that may exist from a previous unfinished session. - -Signature: - -```typescript -constructor(name: string, opts?: CommonOptions); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | -| opts | CommonOptions | | - diff --git a/docs/gitbook/api/bullmq.queue3.add.md b/docs/gitbook/api/bullmq.queue3.add.md deleted file mode 100644 index 1a6e0d4f73..0000000000 --- a/docs/gitbook/api/bullmq.queue3.add.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [add](./bullmq.queue3.add.md) - -## Queue3.add() method - -Signature: - -```typescript -add(jobName: string, data: any, opts?: JobsOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| jobName | string | | -| data | any | | -| opts | [JobsOptions](./bullmq.jobsoptions.md) | | - -Returns: - -Promise<[Job](./bullmq.job.md)> - diff --git a/docs/gitbook/api/bullmq.queue3.base64name.md b/docs/gitbook/api/bullmq.queue3.base64name.md deleted file mode 100644 index 0fb09cb548..0000000000 --- a/docs/gitbook/api/bullmq.queue3.base64name.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [base64Name](./bullmq.queue3.base64name.md) - -## Queue3.base64Name() method - -Returns Queue name in base64 encoded format - -Signature: - -```typescript -base64Name(): string; -``` -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.queue3.clean.md b/docs/gitbook/api/bullmq.queue3.clean.md deleted file mode 100644 index 074a39974a..0000000000 --- a/docs/gitbook/api/bullmq.queue3.clean.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [clean](./bullmq.queue3.clean.md) - -## Queue3.clean() method - -Tells the queue remove all jobs created outside of a grace period in milliseconds. You can clean the jobs with the following states: completed, wait (typo for waiting), active, delayed, and failed. - -Signature: - -```typescript -clean(grace: number, limit: number, type?: 'completed' | 'wait' | 'active' | 'paused' | 'delayed' | 'failed'): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| grace | number | Grace period in milliseconds. | -| limit | number | Maximum amount of jobs to clean per call. If not provided will clean all matching jobs. | -| type | 'completed' \| 'wait' \| 'active' \| 'paused' \| 'delayed' \| 'failed' | Status of the job to clean. Values are completed, wait, active, paused, delayed, and failed. Defaults to completed. | - -Returns: - -Promise<string\[\]> - diff --git a/docs/gitbook/api/bullmq.queue3.clientname.md b/docs/gitbook/api/bullmq.queue3.clientname.md deleted file mode 100644 index 070ed7bfb0..0000000000 --- a/docs/gitbook/api/bullmq.queue3.clientname.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [clientName](./bullmq.queue3.clientname.md) - -## Queue3.clientName() method - -Returns Queue name with keyPrefix (default: 'bull') - -Signature: - -```typescript -clientName(): string; -``` -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.queue3.close.md b/docs/gitbook/api/bullmq.queue3.close.md deleted file mode 100644 index 13630d2b7b..0000000000 --- a/docs/gitbook/api/bullmq.queue3.close.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [close](./bullmq.queue3.close.md) - -## Queue3.close() method - -Closes the underlying redis client. Use this to perform a graceful shutdown. - -`close` can be called from anywhere, with one caveat: if called from within a job handler the queue won't close until after the job has been processed - -Signature: - -```typescript -close(): Promise; -``` -Returns: - -Promise<any> - diff --git a/docs/gitbook/api/bullmq.queue3.count.md b/docs/gitbook/api/bullmq.queue3.count.md deleted file mode 100644 index 4b551fada4..0000000000 --- a/docs/gitbook/api/bullmq.queue3.count.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [count](./bullmq.queue3.count.md) - -## Queue3.count() method - -Returns a promise that returns the number of jobs in the queue, waiting or paused. Since there may be other processes adding or processing jobs, this value may be true only for a very small amount of time. - -Signature: - -```typescript -count(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queue3.detachlistener.md b/docs/gitbook/api/bullmq.queue3.detachlistener.md deleted file mode 100644 index 4fc1faa287..0000000000 --- a/docs/gitbook/api/bullmq.queue3.detachlistener.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [detachListener](./bullmq.queue3.detachlistener.md) - -## Queue3.detachListener() method - -Signature: - -```typescript -detachListener(event: string | symbol, listener?: (...args: any[]) => void): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | string \| symbol | | -| listener | (...args: any\[\]) => void | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.empty.md b/docs/gitbook/api/bullmq.queue3.empty.md deleted file mode 100644 index 474e160d89..0000000000 --- a/docs/gitbook/api/bullmq.queue3.empty.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [empty](./bullmq.queue3.empty.md) - -## Queue3.empty() method - -Empties a queue deleting all the input lists and associated jobs. - -Signature: - -```typescript -empty(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue3.getactive.md b/docs/gitbook/api/bullmq.queue3.getactive.md deleted file mode 100644 index 152d38903e..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getactive.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getActive](./bullmq.queue3.getactive.md) - -## Queue3.getActive() method - -Returns a promise that will return an array with the active jobs between start and end. - -Signature: - -```typescript -getActive(start?: number, end?: number): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<Array<[Job](./bullmq.job.md)>> - diff --git a/docs/gitbook/api/bullmq.queue3.getactivecount.md b/docs/gitbook/api/bullmq.queue3.getactivecount.md deleted file mode 100644 index 32e08c4572..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getactivecount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getActiveCount](./bullmq.queue3.getactivecount.md) - -## Queue3.getActiveCount() method - -Returns a promise that resolves with the quantity of active jobs. - -Signature: - -```typescript -getActiveCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queue3.getcompleted.md b/docs/gitbook/api/bullmq.queue3.getcompleted.md deleted file mode 100644 index f84458eb7b..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getcompleted.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getCompleted](./bullmq.queue3.getcompleted.md) - -## Queue3.getCompleted() method - -Returns a promise that will return an array with the completed jobs between start and end. - -Signature: - -```typescript -getCompleted(start?: number, end?: number): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<Array<[Job](./bullmq.job.md)>> - diff --git a/docs/gitbook/api/bullmq.queue3.getcompletedcount.md b/docs/gitbook/api/bullmq.queue3.getcompletedcount.md deleted file mode 100644 index 11bfe050f1..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getcompletedcount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getCompletedCount](./bullmq.queue3.getcompletedcount.md) - -## Queue3.getCompletedCount() method - -Returns a promise that resolves with the quantity of completed jobs. - -Signature: - -```typescript -getCompletedCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queue3.getdelayed.md b/docs/gitbook/api/bullmq.queue3.getdelayed.md deleted file mode 100644 index 7a7e70c937..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getdelayed.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getDelayed](./bullmq.queue3.getdelayed.md) - -## Queue3.getDelayed() method - -Returns a promise that will return an array with the delayed jobs between start and end. - -Signature: - -```typescript -getDelayed(start?: number, end?: number): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<Array<[Job](./bullmq.job.md)>> - diff --git a/docs/gitbook/api/bullmq.queue3.getdelayedcount.md b/docs/gitbook/api/bullmq.queue3.getdelayedcount.md deleted file mode 100644 index b00b5759ca..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getdelayedcount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getDelayedCount](./bullmq.queue3.getdelayedcount.md) - -## Queue3.getDelayedCount() method - -Returns a promise that resolves with the quantity of delayed jobs. - -Signature: - -```typescript -getDelayedCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queue3.getfailed.md b/docs/gitbook/api/bullmq.queue3.getfailed.md deleted file mode 100644 index 701aa9d216..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getfailed.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getFailed](./bullmq.queue3.getfailed.md) - -## Queue3.getFailed() method - -Returns a promise that will return an array with the failed jobs between start and end. - -Signature: - -```typescript -getFailed(start?: number, end?: number): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<Array<[Job](./bullmq.job.md)>> - diff --git a/docs/gitbook/api/bullmq.queue3.getfailedcount.md b/docs/gitbook/api/bullmq.queue3.getfailedcount.md deleted file mode 100644 index 1677cc2869..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getfailedcount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getFailedCount](./bullmq.queue3.getfailedcount.md) - -## Queue3.getFailedCount() method - -Returns a promise that resolves with the quantity of failed jobs. - -Signature: - -```typescript -getFailedCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queue3.getjob.md b/docs/gitbook/api/bullmq.queue3.getjob.md deleted file mode 100644 index 1dccc4ad05..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getjob.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getJob](./bullmq.queue3.getjob.md) - -## Queue3.getJob() method - -Returns a promise that will return the job instance associated with the jobId parameter. If the specified job cannot be located, the promise callback parameter will be set to null. - -Signature: - -```typescript -getJob(jobId: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| jobId | string | | - -Returns: - -Promise<[Job](./bullmq.job.md) \| null> - diff --git a/docs/gitbook/api/bullmq.queue3.getjobcountbytypes.md b/docs/gitbook/api/bullmq.queue3.getjobcountbytypes.md deleted file mode 100644 index 0cc90cd740..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getjobcountbytypes.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getJobCountByTypes](./bullmq.queue3.getjobcountbytypes.md) - -## Queue3.getJobCountByTypes() method - -Returns a promise that resolves with the job counts for the given queue of the given types. - -Signature: - -```typescript -getJobCountByTypes(...types: JobType[]): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| types | [JobType](./bullmq.jobtype.md)\[\] | | - -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queue3.getjobcounts.md b/docs/gitbook/api/bullmq.queue3.getjobcounts.md deleted file mode 100644 index 1df3608fcf..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getjobcounts.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getJobCounts](./bullmq.queue3.getjobcounts.md) - -## Queue3.getJobCounts() method - -Returns a promise that resolves with the job counts for the given queue. - -Signature: - -```typescript -getJobCounts(...types: JobType[]): Promise<{ - [index: string]: number; - }>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| types | [JobType](./bullmq.jobtype.md)\[\] | | - -Returns: - -Promise<{ \[index: string\]: number; }> - diff --git a/docs/gitbook/api/bullmq.queue3.getjoblogs.md b/docs/gitbook/api/bullmq.queue3.getjoblogs.md deleted file mode 100644 index 5f3ef7972f..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getjoblogs.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getJobLogs](./bullmq.queue3.getjoblogs.md) - -## Queue3.getJobLogs() method - -Returns a object with the logs according to the start and end arguments. The returned count value is the total amount of logs, useful for implementing pagination. - -Signature: - -```typescript -getJobLogs(jobId: string, start?: number, end?: number): Promise<{ - logs: string[]; - count: number; - }>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| jobId | string | | -| start | number | | -| end | number | | - -Returns: - -Promise<{ logs: string\[\]; count: number; }> - diff --git a/docs/gitbook/api/bullmq.queue3.getjobs.md b/docs/gitbook/api/bullmq.queue3.getjobs.md deleted file mode 100644 index 4ea30ce500..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getjobs.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getJobs](./bullmq.queue3.getjobs.md) - -## Queue3.getJobs() method - -Returns a promise that will return an array of job instances of the given types. Optional parameters for range and ordering are provided. - -Signature: - -```typescript -getJobs(types: JobType[] | JobType, start?: number, end?: number, asc?: boolean): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| types | [JobType](./bullmq.jobtype.md)\[\] \| [JobType](./bullmq.jobtype.md) | | -| start | number | | -| end | number | | -| asc | boolean | | - -Returns: - -Promise<Array<[Job](./bullmq.job.md)>> - diff --git a/docs/gitbook/api/bullmq.queue3.getnextjob.md b/docs/gitbook/api/bullmq.queue3.getnextjob.md deleted file mode 100644 index a4575ecd50..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getnextjob.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getNextJob](./bullmq.queue3.getnextjob.md) - -## Queue3.getNextJob() method - -Signature: - -```typescript -getNextJob(): Promise; -``` -Returns: - -Promise<[Job](./bullmq.job.md)> - diff --git a/docs/gitbook/api/bullmq.queue3.getpausedcount.md b/docs/gitbook/api/bullmq.queue3.getpausedcount.md deleted file mode 100644 index 6b170f405b..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getpausedcount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getPausedCount](./bullmq.queue3.getpausedcount.md) - -## Queue3.getPausedCount() method - -Returns a promise that resolves with the quantity of paused jobs. - -Signature: - -```typescript -getPausedCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queue3.getrepeatablecount.md b/docs/gitbook/api/bullmq.queue3.getrepeatablecount.md deleted file mode 100644 index d7ab34a624..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getrepeatablecount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getRepeatableCount](./bullmq.queue3.getrepeatablecount.md) - -## Queue3.getRepeatableCount() method - -Returns a promise that resolves to the quantity of repeatable jobs. - -Signature: - -```typescript -getRepeatableCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queue3.getrepeatablejobs.md b/docs/gitbook/api/bullmq.queue3.getrepeatablejobs.md deleted file mode 100644 index 333e06d233..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getrepeatablejobs.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getRepeatableJobs](./bullmq.queue3.getrepeatablejobs.md) - -## Queue3.getRepeatableJobs() method - -Returns JobInformation of repeatable jobs (ordered descending). Provide a start and/or an end index to limit the number of results. Start defaults to 0, end to -1 and asc to false. - -Signature: - -```typescript -getRepeatableJobs(start?: number, end?: number, asc?: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | -| asc | boolean | | - -Returns: - -Promise<[JobInformation3](./bullmq.jobinformation3.md)\[\]> - diff --git a/docs/gitbook/api/bullmq.queue3.getwaiting.md b/docs/gitbook/api/bullmq.queue3.getwaiting.md deleted file mode 100644 index b00280e497..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getwaiting.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getWaiting](./bullmq.queue3.getwaiting.md) - -## Queue3.getWaiting() method - -Returns a promise that will return an array with the waiting jobs between start and end. - -Signature: - -```typescript -getWaiting(start?: number, end?: number): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<Array<[Job](./bullmq.job.md)>> - diff --git a/docs/gitbook/api/bullmq.queue3.getwaitingcount.md b/docs/gitbook/api/bullmq.queue3.getwaitingcount.md deleted file mode 100644 index f32a740afe..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getwaitingcount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getWaitingCount](./bullmq.queue3.getwaitingcount.md) - -## Queue3.getWaitingCount() method - -Returns a promise that resolves with the quantity of waiting jobs. - -Signature: - -```typescript -getWaitingCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queue3.getworkers.md b/docs/gitbook/api/bullmq.queue3.getworkers.md deleted file mode 100644 index 66d4b8ef8b..0000000000 --- a/docs/gitbook/api/bullmq.queue3.getworkers.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [getWorkers](./bullmq.queue3.getworkers.md) - -## Queue3.getWorkers() method - -Returns Redis clients array which belongs to current Queue - -Signature: - -```typescript -getWorkers(): Promise<{ - [key: string]: string; - }[]>; -``` -Returns: - -Promise<{ \[key: string\]: string; }\[\]> - diff --git a/docs/gitbook/api/bullmq.queue3.isready.md b/docs/gitbook/api/bullmq.queue3.isready.md deleted file mode 100644 index 8f49f0b4f3..0000000000 --- a/docs/gitbook/api/bullmq.queue3.isready.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [isReady](./bullmq.queue3.isready.md) - -## Queue3.isReady() method - -Returns a promise that resolves when Redis is connected and the queue is ready to accept jobs. This replaces the `ready` event emitted on Queue in previous versions. - -Signature: - -```typescript -isReady(): Promise; -``` -Returns: - -Promise<this> - diff --git a/docs/gitbook/api/bullmq.queue3.isworkerpaused.md b/docs/gitbook/api/bullmq.queue3.isworkerpaused.md deleted file mode 100644 index afacf454cf..0000000000 --- a/docs/gitbook/api/bullmq.queue3.isworkerpaused.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [isWorkerPaused](./bullmq.queue3.isworkerpaused.md) - -## Queue3.isWorkerPaused() method - -Signature: - -```typescript -isWorkerPaused(): boolean; -``` -Returns: - -boolean - diff --git a/docs/gitbook/api/bullmq.queue3.md b/docs/gitbook/api/bullmq.queue3.md deleted file mode 100644 index c1e82e2235..0000000000 --- a/docs/gitbook/api/bullmq.queue3.md +++ /dev/null @@ -1,94 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) - -## Queue3 class - -> Warning: This API is now obsolete. -> -> Use Queue class instead [https://docs.bullmq.io/guide/queues](https://docs.bullmq.io/guide/queues) -> - -Signature: - -```typescript -export declare class Queue3 extends EventEmitter -``` -Extends: EventEmitter - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(name, opts)](./bullmq.queue3._constructor_.md) | | This is the Queue constructor. It creates a new Queue that is persisted in Redis. Every time the same queue is instantiated it tries to process all the old jobs that may exist from a previous unfinished session. | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [name](./bullmq.queue3.name.md) | | string | The name of the queue | -| [queueEvents](./bullmq.queue3.queueevents.md) | | [QueueEvents](./bullmq.queueevents.md) | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [add(jobName, data, opts)](./bullmq.queue3.add.md) | | | -| [base64Name()](./bullmq.queue3.base64name.md) | | Returns Queue name in base64 encoded format | -| [clean(grace, limit, type)](./bullmq.queue3.clean.md) | | Tells the queue remove all jobs created outside of a grace period in milliseconds. You can clean the jobs with the following states: completed, wait (typo for waiting), active, delayed, and failed. | -| [clientName()](./bullmq.queue3.clientname.md) | | Returns Queue name with keyPrefix (default: 'bull') | -| [close()](./bullmq.queue3.close.md) | | Closes the underlying redis client. Use this to perform a graceful shutdown.close can be called from anywhere, with one caveat: if called from within a job handler the queue won't close until after the job has been processed | -| [count()](./bullmq.queue3.count.md) | | Returns a promise that returns the number of jobs in the queue, waiting or paused. Since there may be other processes adding or processing jobs, this value may be true only for a very small amount of time. | -| [detachListener(event, listener)](./bullmq.queue3.detachlistener.md) | | | -| [empty()](./bullmq.queue3.empty.md) | | Empties a queue deleting all the input lists and associated jobs. | -| [getActive(start, end)](./bullmq.queue3.getactive.md) | | Returns a promise that will return an array with the active jobs between start and end. | -| [getActiveCount()](./bullmq.queue3.getactivecount.md) | | Returns a promise that resolves with the quantity of active jobs. | -| [getCompleted(start, end)](./bullmq.queue3.getcompleted.md) | | Returns a promise that will return an array with the completed jobs between start and end. | -| [getCompletedCount()](./bullmq.queue3.getcompletedcount.md) | | Returns a promise that resolves with the quantity of completed jobs. | -| [getDelayed(start, end)](./bullmq.queue3.getdelayed.md) | | Returns a promise that will return an array with the delayed jobs between start and end. | -| [getDelayedCount()](./bullmq.queue3.getdelayedcount.md) | | Returns a promise that resolves with the quantity of delayed jobs. | -| [getFailed(start, end)](./bullmq.queue3.getfailed.md) | | Returns a promise that will return an array with the failed jobs between start and end. | -| [getFailedCount()](./bullmq.queue3.getfailedcount.md) | | Returns a promise that resolves with the quantity of failed jobs. | -| [getJob(jobId)](./bullmq.queue3.getjob.md) | | Returns a promise that will return the job instance associated with the jobId parameter. If the specified job cannot be located, the promise callback parameter will be set to null. | -| [getJobCountByTypes(types)](./bullmq.queue3.getjobcountbytypes.md) | | Returns a promise that resolves with the job counts for the given queue of the given types. | -| [getJobCounts(types)](./bullmq.queue3.getjobcounts.md) | | Returns a promise that resolves with the job counts for the given queue. | -| [getJobLogs(jobId, start, end)](./bullmq.queue3.getjoblogs.md) | | Returns a object with the logs according to the start and end arguments. The returned count value is the total amount of logs, useful for implementing pagination. | -| [getJobs(types, start, end, asc)](./bullmq.queue3.getjobs.md) | | Returns a promise that will return an array of job instances of the given types. Optional parameters for range and ordering are provided. | -| [getNextJob()](./bullmq.queue3.getnextjob.md) | | | -| [getPausedCount()](./bullmq.queue3.getpausedcount.md) | | Returns a promise that resolves with the quantity of paused jobs. | -| [getRepeatableCount()](./bullmq.queue3.getrepeatablecount.md) | | Returns a promise that resolves to the quantity of repeatable jobs. | -| [getRepeatableJobs(start, end, asc)](./bullmq.queue3.getrepeatablejobs.md) | | Returns JobInformation of repeatable jobs (ordered descending). Provide a start and/or an end index to limit the number of results. Start defaults to 0, end to -1 and asc to false. | -| [getWaiting(start, end)](./bullmq.queue3.getwaiting.md) | | Returns a promise that will return an array with the waiting jobs between start and end. | -| [getWaitingCount()](./bullmq.queue3.getwaitingcount.md) | | Returns a promise that resolves with the quantity of waiting jobs. | -| [getWorkers()](./bullmq.queue3.getworkers.md) | | Returns Redis clients array which belongs to current Queue | -| [isReady()](./bullmq.queue3.isready.md) | | Returns a promise that resolves when Redis is connected and the queue is ready to accept jobs. This replaces the ready event emitted on Queue in previous versions. | -| [isWorkerPaused()](./bullmq.queue3.isworkerpaused.md) | | | -| [nextRepeatableJob(name, data, opts, skipCheckExists)](./bullmq.queue3.nextrepeatablejob.md) | | ??? | -| [off(event, listener)](./bullmq.queue3.off.md) | | | -| [on(event, callback)](./bullmq.queue3.on.md) | | Listens to queue events | -| [on(event, callback)](./bullmq.queue3.on_9.md) | | The queue has been resumed | -| [on(event, callback)](./bullmq.queue3.on_10.md) | | A job successfully removed. | -| [on(event, callback)](./bullmq.queue3.on_11.md) | | Old jobs have been cleaned from the queue. jobs is an array of jobs that were removed, and type is the type of those jobs. | -| [on(event, callback)](./bullmq.queue3.on_12.md) | | Emitted every time the queue has processed all the waiting jobs (even if there can be some delayed jobs not yet processed) | -| [on(event, callback)](./bullmq.queue3.on_1.md) | | An error occurred | -| [on(event, callback)](./bullmq.queue3.on_2.md) | | A Job is waiting to be processed as soon as a worker is idling. | -| [on(event, callback)](./bullmq.queue3.on_3.md) | | A job has started. You can use jobPromise.cancel() to abort it | -| [on(event, callback)](./bullmq.queue3.on_4.md) | | A job has been marked as stalled. This is useful for debugging job workers that crash or pause the event loop. | -| [on(event, callback)](./bullmq.queue3.on_5.md) | | A job's progress was updated | -| [on(event, callback)](./bullmq.queue3.on_6.md) | | A job successfully completed with a result | -| [on(event, callback)](./bullmq.queue3.on_7.md) | | A job failed with err as the reason | -| [on(event, callback)](./bullmq.queue3.on_8.md) | | The queue has been paused | -| [once(event, listener)](./bullmq.queue3.once.md) | | | -| [parseClientList(list)](./bullmq.queue3.parseclientlist.md) | | Returns Redis clients array which belongs to current Queue from string with all redis clients | -| [pause()](./bullmq.queue3.pause.md) | | Returns a promise that resolves when the queue is paused.A paused queue will not process new jobs until resumed, but current jobs being processed will continue until they are finalized. The pause can be either global or local. If global, all workers in all queue instances for a given queue will be paused. If local, just this worker will stop processing new jobs after the current lock expires. This can be useful to stop a worker from taking new jobs prior to shutting down.Pausing a queue that is already paused does nothing. | -| [pauseWorker(doNotWaitActive)](./bullmq.queue3.pauseworker.md) | | | -| [process(processor)](./bullmq.queue3.process.md) | | Defines a processing function for the jobs placed into a given Queue.The callback is called every time a job is placed in the queue. It is passed an instance of the job as first argument.If the callback signature contains the second optional done argument, the callback will be passed a done callback to be called after the job has been completed. The done callback can be called with an Error instance, to signal that the job did not complete successfully, or with a result as second argument (e.g.: done(null, result);) when the job is successful. Errors will be passed as a second argument to the "failed" event; results, as a second argument to the "completed" event.If, however, the callback signature does not contain the done argument, a promise must be returned to signal job completion. If the promise is rejected, the error will be passed as a second argument to the "failed" event. If it is resolved, its value will be the "completed" event's second argument. | -| [removeAllListeners(event)](./bullmq.queue3.removealllisteners.md) | | | -| [removeListener(event, listener)](./bullmq.queue3.removelistener.md) | | | -| [removeRepeatable(name, opts)](./bullmq.queue3.removerepeatable.md) | | Removes a given repeatable job. The RepeatOptions and JobId needs to be the same as the ones used for the job when it was added.name: The name of the to be removed job | -| [removeRepeatableByKey(repeatJobKey)](./bullmq.queue3.removerepeatablebykey.md) | | Removes a given repeatable job by key. | -| [resume()](./bullmq.queue3.resume.md) | | Returns a promise that resolves when the queue is resumed after being paused.The resume can be either local or global. If global, all workers in all queue instances for a given queue will be resumed. If local, only this worker will be resumed. Note that resuming a queue globally will not resume workers that have been paused locally; for those, resume(true) must be called directly on their instances.Resuming a queue that is not paused does nothing. | -| [resumeWorker()](./bullmq.queue3.resumeworker.md) | | | -| [retryJob(job)](./bullmq.queue3.retryjob.md) | | | -| [setWorkerName()](./bullmq.queue3.setworkername.md) | | Set clientName to Redis.client | - diff --git a/docs/gitbook/api/bullmq.queue3.name.md b/docs/gitbook/api/bullmq.queue3.name.md deleted file mode 100644 index 34db04cdb8..0000000000 --- a/docs/gitbook/api/bullmq.queue3.name.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [name](./bullmq.queue3.name.md) - -## Queue3.name property - -The name of the queue - -Signature: - -```typescript -name: string; -``` diff --git a/docs/gitbook/api/bullmq.queue3.nextrepeatablejob.md b/docs/gitbook/api/bullmq.queue3.nextrepeatablejob.md deleted file mode 100644 index b4e9665375..0000000000 --- a/docs/gitbook/api/bullmq.queue3.nextrepeatablejob.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [nextRepeatableJob](./bullmq.queue3.nextrepeatablejob.md) - -## Queue3.nextRepeatableJob() method - -??? - -Signature: - -```typescript -nextRepeatableJob(name: string, data: any, opts?: JobsOptions, skipCheckExists?: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | -| data | any | | -| opts | [JobsOptions](./bullmq.jobsoptions.md) | | -| skipCheckExists | boolean | | - -Returns: - -Promise<[Job](./bullmq.job.md)> - diff --git a/docs/gitbook/api/bullmq.queue3.off.md b/docs/gitbook/api/bullmq.queue3.off.md deleted file mode 100644 index c58c2e5592..0000000000 --- a/docs/gitbook/api/bullmq.queue3.off.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [off](./bullmq.queue3.off.md) - -## Queue3.off() method - -Signature: - -```typescript -off(event: string | symbol, listener?: (...args: any[]) => void): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | string \| symbol | | -| listener | (...args: any\[\]) => void | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on.md b/docs/gitbook/api/bullmq.queue3.on.md deleted file mode 100644 index 822b808be6..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on.md) - -## Queue3.on() method - -Listens to queue events - -Signature: - -```typescript -on(event: string, callback: (...args: any[]) => void): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | string | | -| callback | (...args: any\[\]) => void | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_1.md b/docs/gitbook/api/bullmq.queue3.on_1.md deleted file mode 100644 index b1f4283241..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_1.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_1.md) - -## Queue3.on() method - -An error occurred - -Signature: - -```typescript -on(event: 'error', callback: ErrorEventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'error' | | -| callback | [ErrorEventCallback3](./bullmq.erroreventcallback3.md) | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_10.md b/docs/gitbook/api/bullmq.queue3.on_10.md deleted file mode 100644 index ea94f504f2..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_10.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_10.md) - -## Queue3.on() method - -A job successfully removed. - -Signature: - -```typescript -on(event: 'removed', callback: RemovedEventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'removed' | | -| callback | [RemovedEventCallback3](./bullmq.removedeventcallback3.md)<T> | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_11.md b/docs/gitbook/api/bullmq.queue3.on_11.md deleted file mode 100644 index 22cf42a1d8..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_11.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_11.md) - -## Queue3.on() method - -Old jobs have been cleaned from the queue. `jobs` is an array of jobs that were removed, and `type` is the type of those jobs. - -Signature: - -```typescript -on(event: 'cleaned', callback: CleanedEventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'cleaned' | | -| callback | [CleanedEventCallback3](./bullmq.cleanedeventcallback3.md)<T> | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_12.md b/docs/gitbook/api/bullmq.queue3.on_12.md deleted file mode 100644 index 683ce369b0..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_12.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_12.md) - -## Queue3.on() method - -Emitted every time the queue has processed all the waiting jobs (even if there can be some delayed jobs not yet processed) - -Signature: - -```typescript -on(event: 'drained', callback: EventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'drained' | | -| callback | [EventCallback3](./bullmq.eventcallback3.md) | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_2.md b/docs/gitbook/api/bullmq.queue3.on_2.md deleted file mode 100644 index 1df9eb9d8b..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_2.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_2.md) - -## Queue3.on() method - -A Job is waiting to be processed as soon as a worker is idling. - -Signature: - -```typescript -on(event: 'waiting', callback: WaitingEventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'waiting' | | -| callback | [WaitingEventCallback3](./bullmq.waitingeventcallback3.md) | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_3.md b/docs/gitbook/api/bullmq.queue3.on_3.md deleted file mode 100644 index a85ab246bc..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_3.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_3.md) - -## Queue3.on() method - -A job has started. You can use `jobPromise.cancel()` to abort it - -Signature: - -```typescript -on(event: 'active', callback: ActiveEventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'active' | | -| callback | [ActiveEventCallback3](./bullmq.activeeventcallback3.md)<T> | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_4.md b/docs/gitbook/api/bullmq.queue3.on_4.md deleted file mode 100644 index 7296094629..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_4.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_4.md) - -## Queue3.on() method - -A job has been marked as stalled. This is useful for debugging job workers that crash or pause the event loop. - -Signature: - -```typescript -on(event: 'stalled', callback: StalledEventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'stalled' | | -| callback | [StalledEventCallback3](./bullmq.stalledeventcallback3.md)<T> | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_5.md b/docs/gitbook/api/bullmq.queue3.on_5.md deleted file mode 100644 index 9a3cee8326..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_5.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_5.md) - -## Queue3.on() method - -A job's progress was updated - -Signature: - -```typescript -on(event: 'progress', callback: ProgressEventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'progress' | | -| callback | [ProgressEventCallback3](./bullmq.progresseventcallback3.md)<T> | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_6.md b/docs/gitbook/api/bullmq.queue3.on_6.md deleted file mode 100644 index 81662e7e42..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_6.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_6.md) - -## Queue3.on() method - -A job successfully completed with a `result` - -Signature: - -```typescript -on(event: 'completed', callback: CompletedEventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'completed' | | -| callback | [CompletedEventCallback3](./bullmq.completedeventcallback3.md)<T> | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_7.md b/docs/gitbook/api/bullmq.queue3.on_7.md deleted file mode 100644 index 09437b4b22..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_7.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_7.md) - -## Queue3.on() method - -A job failed with `err` as the reason - -Signature: - -```typescript -on(event: 'failed', callback: FailedEventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'failed' | | -| callback | [FailedEventCallback3](./bullmq.failedeventcallback3.md)<T> | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_8.md b/docs/gitbook/api/bullmq.queue3.on_8.md deleted file mode 100644 index a204a3d696..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_8.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_8.md) - -## Queue3.on() method - -The queue has been paused - -Signature: - -```typescript -on(event: 'paused', callback: EventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'paused' | | -| callback | [EventCallback3](./bullmq.eventcallback3.md) | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.on_9.md b/docs/gitbook/api/bullmq.queue3.on_9.md deleted file mode 100644 index 9fc5ce871e..0000000000 --- a/docs/gitbook/api/bullmq.queue3.on_9.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [on](./bullmq.queue3.on_9.md) - -## Queue3.on() method - -The queue has been resumed - -Signature: - -```typescript -on(event: 'resumed', callback: EventCallback3): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | 'resumed' | | -| callback | [EventCallback3](./bullmq.eventcallback3.md) | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.once.md b/docs/gitbook/api/bullmq.queue3.once.md deleted file mode 100644 index 4aea81f420..0000000000 --- a/docs/gitbook/api/bullmq.queue3.once.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [once](./bullmq.queue3.once.md) - -## Queue3.once() method - -Signature: - -```typescript -once(event: string | symbol, listener: (...args: any[]) => void): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | string \| symbol | | -| listener | (...args: any\[\]) => void | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.parseclientlist.md b/docs/gitbook/api/bullmq.queue3.parseclientlist.md deleted file mode 100644 index 33cb94180c..0000000000 --- a/docs/gitbook/api/bullmq.queue3.parseclientlist.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [parseClientList](./bullmq.queue3.parseclientlist.md) - -## Queue3.parseClientList() method - -Returns Redis clients array which belongs to current Queue from string with all redis clients - -Signature: - -```typescript -parseClientList(list: string): { - [key: string]: string; - }[]; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| list | string | String with all redis clients | - -Returns: - -{ \[key: string\]: string; }\[\] - diff --git a/docs/gitbook/api/bullmq.queue3.pause.md b/docs/gitbook/api/bullmq.queue3.pause.md deleted file mode 100644 index 8c0ebe15ff..0000000000 --- a/docs/gitbook/api/bullmq.queue3.pause.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [pause](./bullmq.queue3.pause.md) - -## Queue3.pause() method - -Returns a promise that resolves when the queue is paused. - -A paused queue will not process new jobs until resumed, but current jobs being processed will continue until they are finalized. The pause can be either global or local. If global, all workers in all queue instances for a given queue will be paused. If local, just this worker will stop processing new jobs after the current lock expires. This can be useful to stop a worker from taking new jobs prior to shutting down. - -Pausing a queue that is already paused does nothing. - -Signature: - -```typescript -pause(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue3.pauseworker.md b/docs/gitbook/api/bullmq.queue3.pauseworker.md deleted file mode 100644 index 7ad0fcae0a..0000000000 --- a/docs/gitbook/api/bullmq.queue3.pauseworker.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [pauseWorker](./bullmq.queue3.pauseworker.md) - -## Queue3.pauseWorker() method - -Signature: - -```typescript -pauseWorker(doNotWaitActive?: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| doNotWaitActive | boolean | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue3.process.md b/docs/gitbook/api/bullmq.queue3.process.md deleted file mode 100644 index f181fc43f8..0000000000 --- a/docs/gitbook/api/bullmq.queue3.process.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [process](./bullmq.queue3.process.md) - -## Queue3.process() method - -Defines a processing function for the jobs placed into a given Queue. - -The callback is called every time a job is placed in the queue. It is passed an instance of the job as first argument. - -If the callback signature contains the second optional done argument, the callback will be passed a done callback to be called after the job has been completed. The done callback can be called with an Error instance, to signal that the job did not complete successfully, or with a result as second argument (e.g.: done(null, result);) when the job is successful. Errors will be passed as a second argument to the "failed" event; results, as a second argument to the "completed" event. - -If, however, the callback signature does not contain the done argument, a promise must be returned to signal job completion. If the promise is rejected, the error will be passed as a second argument to the "failed" event. If it is resolved, its value will be the "completed" event's second argument. - -Signature: - -```typescript -process(processor: string | Processor): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| processor | string \| [Processor](./bullmq.processor.md)<T> | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue3.queueevents.md b/docs/gitbook/api/bullmq.queue3.queueevents.md deleted file mode 100644 index 2a6adfd230..0000000000 --- a/docs/gitbook/api/bullmq.queue3.queueevents.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [queueEvents](./bullmq.queue3.queueevents.md) - -## Queue3.queueEvents property - -Signature: - -```typescript -queueEvents: QueueEvents; -``` diff --git a/docs/gitbook/api/bullmq.queue3.removealllisteners.md b/docs/gitbook/api/bullmq.queue3.removealllisteners.md deleted file mode 100644 index 320a379af3..0000000000 --- a/docs/gitbook/api/bullmq.queue3.removealllisteners.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [removeAllListeners](./bullmq.queue3.removealllisteners.md) - -## Queue3.removeAllListeners() method - -Signature: - -```typescript -removeAllListeners(event: string | symbol): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | string \| symbol | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.removelistener.md b/docs/gitbook/api/bullmq.queue3.removelistener.md deleted file mode 100644 index 0922ac8956..0000000000 --- a/docs/gitbook/api/bullmq.queue3.removelistener.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [removeListener](./bullmq.queue3.removelistener.md) - -## Queue3.removeListener() method - -Signature: - -```typescript -removeListener(event: string | symbol, listener: (...args: any[]) => void): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | string \| symbol | | -| listener | (...args: any\[\]) => void | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queue3.removerepeatable.md b/docs/gitbook/api/bullmq.queue3.removerepeatable.md deleted file mode 100644 index cc75442930..0000000000 --- a/docs/gitbook/api/bullmq.queue3.removerepeatable.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [removeRepeatable](./bullmq.queue3.removerepeatable.md) - -## Queue3.removeRepeatable() method - -Removes a given repeatable job. The RepeatOptions and JobId needs to be the same as the ones used for the job when it was added. - -name: The name of the to be removed job - -Signature: - -```typescript -removeRepeatable(name: string, opts: RepeatOptions): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | -| opts | [RepeatOptions](./bullmq.repeatoptions.md) | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue3.removerepeatablebykey.md b/docs/gitbook/api/bullmq.queue3.removerepeatablebykey.md deleted file mode 100644 index 375b4a4fb2..0000000000 --- a/docs/gitbook/api/bullmq.queue3.removerepeatablebykey.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [removeRepeatableByKey](./bullmq.queue3.removerepeatablebykey.md) - -## Queue3.removeRepeatableByKey() method - -Removes a given repeatable job by key. - -Signature: - -```typescript -removeRepeatableByKey(repeatJobKey: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| repeatJobKey | string | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue3.resume.md b/docs/gitbook/api/bullmq.queue3.resume.md deleted file mode 100644 index bb087699c7..0000000000 --- a/docs/gitbook/api/bullmq.queue3.resume.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [resume](./bullmq.queue3.resume.md) - -## Queue3.resume() method - -Returns a promise that resolves when the queue is resumed after being paused. - -The resume can be either local or global. If global, all workers in all queue instances for a given queue will be resumed. If local, only this worker will be resumed. Note that resuming a queue globally will not resume workers that have been paused locally; for those, resume(true) must be called directly on their instances. - -Resuming a queue that is not paused does nothing. - -Signature: - -```typescript -resume(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue3.resumeworker.md b/docs/gitbook/api/bullmq.queue3.resumeworker.md deleted file mode 100644 index bc4086ca21..0000000000 --- a/docs/gitbook/api/bullmq.queue3.resumeworker.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [resumeWorker](./bullmq.queue3.resumeworker.md) - -## Queue3.resumeWorker() method - -Signature: - -```typescript -resumeWorker(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue3.retryjob.md b/docs/gitbook/api/bullmq.queue3.retryjob.md deleted file mode 100644 index a201f01515..0000000000 --- a/docs/gitbook/api/bullmq.queue3.retryjob.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [retryJob](./bullmq.queue3.retryjob.md) - -## Queue3.retryJob() method - -Signature: - -```typescript -retryJob(job: Job): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| job | [Job](./bullmq.job.md) | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queue3.setworkername.md b/docs/gitbook/api/bullmq.queue3.setworkername.md deleted file mode 100644 index 6156b9722e..0000000000 --- a/docs/gitbook/api/bullmq.queue3.setworkername.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Queue3](./bullmq.queue3.md) > [setWorkerName](./bullmq.queue3.setworkername.md) - -## Queue3.setWorkerName() method - -Set clientName to Redis.client - -Signature: - -```typescript -setWorkerName(): Promise; -``` -Returns: - -Promise<any> - diff --git a/docs/gitbook/api/bullmq.queue_event_suffix.md b/docs/gitbook/api/bullmq.queue_event_suffix.md deleted file mode 100644 index 90e0c15072..0000000000 --- a/docs/gitbook/api/bullmq.queue_event_suffix.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QUEUE\_EVENT\_SUFFIX](./bullmq.queue_event_suffix.md) - -## QUEUE\_EVENT\_SUFFIX variable - -Signature: - -```typescript -QUEUE_EVENT_SUFFIX = ":qe" -``` diff --git a/docs/gitbook/api/bullmq.queue_scheduler_suffix.md b/docs/gitbook/api/bullmq.queue_scheduler_suffix.md deleted file mode 100644 index 3cff66fcad..0000000000 --- a/docs/gitbook/api/bullmq.queue_scheduler_suffix.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QUEUE\_SCHEDULER\_SUFFIX](./bullmq.queue_scheduler_suffix.md) - -## QUEUE\_SCHEDULER\_SUFFIX variable - -Signature: - -```typescript -QUEUE_SCHEDULER_SUFFIX = ":qs" -``` diff --git a/docs/gitbook/api/bullmq.queuebase._constructor_.md b/docs/gitbook/api/bullmq.queuebase._constructor_.md deleted file mode 100644 index e834c7aae8..0000000000 --- a/docs/gitbook/api/bullmq.queuebase._constructor_.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [(constructor)](./bullmq.queuebase._constructor_.md) - -## QueueBase.(constructor) - -Constructs a new instance of the `QueueBase` class - -Signature: - -```typescript -constructor(name: string, opts?: QueueBaseOptions, Connection?: typeof RedisConnection); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | -| opts | [QueueBaseOptions](./bullmq.queuebaseoptions.md) | | -| Connection | typeof [RedisConnection](./bullmq.redisconnection.md) | | - diff --git a/docs/gitbook/api/bullmq.queuebase.base64name.md b/docs/gitbook/api/bullmq.queuebase.base64name.md deleted file mode 100644 index ee232cf6c5..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.base64name.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [base64Name](./bullmq.queuebase.base64name.md) - -## QueueBase.base64Name() method - -Signature: - -```typescript -protected base64Name(): string; -``` -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.queuebase.client.md b/docs/gitbook/api/bullmq.queuebase.client.md deleted file mode 100644 index 38c0739301..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.client.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [client](./bullmq.queuebase.client.md) - -## QueueBase.client property - -Signature: - -```typescript -get client(): Promise; -``` diff --git a/docs/gitbook/api/bullmq.queuebase.clientname.md b/docs/gitbook/api/bullmq.queuebase.clientname.md deleted file mode 100644 index 7697f8ae04..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.clientname.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [clientName](./bullmq.queuebase.clientname.md) - -## QueueBase.clientName() method - -Signature: - -```typescript -protected clientName(suffix?: string): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| suffix | string | | - -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.queuebase.close.md b/docs/gitbook/api/bullmq.queuebase.close.md deleted file mode 100644 index 6e4f9ab590..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.close.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [close](./bullmq.queuebase.close.md) - -## QueueBase.close() method - -Signature: - -```typescript -close(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queuebase.closing.md b/docs/gitbook/api/bullmq.queuebase.closing.md deleted file mode 100644 index a0f8946d33..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.closing.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [closing](./bullmq.queuebase.closing.md) - -## QueueBase.closing property - -Signature: - -```typescript -closing: Promise; -``` diff --git a/docs/gitbook/api/bullmq.queuebase.connection.md b/docs/gitbook/api/bullmq.queuebase.connection.md deleted file mode 100644 index 510052668d..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.connection.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [connection](./bullmq.queuebase.connection.md) - -## QueueBase.connection property - -Signature: - -```typescript -protected connection: RedisConnection; -``` diff --git a/docs/gitbook/api/bullmq.queuebase.disconnect.md b/docs/gitbook/api/bullmq.queuebase.disconnect.md deleted file mode 100644 index fc58093231..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.disconnect.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [disconnect](./bullmq.queuebase.disconnect.md) - -## QueueBase.disconnect() method - -Signature: - -```typescript -disconnect(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queuebase.emit.md b/docs/gitbook/api/bullmq.queuebase.emit.md deleted file mode 100644 index 88710d4c9a..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.emit.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [emit](./bullmq.queuebase.emit.md) - -## QueueBase.emit() method - -Signature: - -```typescript -emit(event: string | symbol, ...args: any[]): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | string \| symbol | | -| args | any\[\] | | - -Returns: - -boolean - diff --git a/docs/gitbook/api/bullmq.queuebase.keys.md b/docs/gitbook/api/bullmq.queuebase.keys.md deleted file mode 100644 index ff40ff0994..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.keys.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [keys](./bullmq.queuebase.keys.md) - -## QueueBase.keys property - -Signature: - -```typescript -keys: KeysMap; -``` diff --git a/docs/gitbook/api/bullmq.queuebase.md b/docs/gitbook/api/bullmq.queuebase.md deleted file mode 100644 index 57617b9891..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.md +++ /dev/null @@ -1,43 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) - -## QueueBase class - -Signature: - -```typescript -export declare class QueueBase extends EventEmitter -``` -Extends: EventEmitter - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(name, opts, Connection)](./bullmq.queuebase._constructor_.md) | | Constructs a new instance of the QueueBase class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [client](./bullmq.queuebase.client.md) | | Promise<[RedisClient](./bullmq.redisclient.md)> | | -| [closing](./bullmq.queuebase.closing.md) | | Promise<void> | | -| [connection](./bullmq.queuebase.connection.md) | | [RedisConnection](./bullmq.redisconnection.md) | | -| [keys](./bullmq.queuebase.keys.md) | | [KeysMap](./bullmq.keysmap.md) | | -| [name](./bullmq.queuebase.name.md) | | string | | -| [opts](./bullmq.queuebase.opts.md) | | [QueueBaseOptions](./bullmq.queuebaseoptions.md) | | -| [redisVersion](./bullmq.queuebase.redisversion.md) | | string | | -| [toKey](./bullmq.queuebase.tokey.md) | | (type: string) => string | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [base64Name()](./bullmq.queuebase.base64name.md) | | | -| [clientName(suffix)](./bullmq.queuebase.clientname.md) | | | -| [close()](./bullmq.queuebase.close.md) | | | -| [disconnect()](./bullmq.queuebase.disconnect.md) | | | -| [emit(event, args)](./bullmq.queuebase.emit.md) | | | -| [waitUntilReady()](./bullmq.queuebase.waituntilready.md) | | | - diff --git a/docs/gitbook/api/bullmq.queuebase.name.md b/docs/gitbook/api/bullmq.queuebase.name.md deleted file mode 100644 index 83eb927ac2..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.name.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [name](./bullmq.queuebase.name.md) - -## QueueBase.name property - -Signature: - -```typescript -readonly name: string; -``` diff --git a/docs/gitbook/api/bullmq.queuebase.opts.md b/docs/gitbook/api/bullmq.queuebase.opts.md deleted file mode 100644 index 9dbcf1b37a..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.opts.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [opts](./bullmq.queuebase.opts.md) - -## QueueBase.opts property - -Signature: - -```typescript -opts: QueueBaseOptions; -``` diff --git a/docs/gitbook/api/bullmq.queuebase.redisversion.md b/docs/gitbook/api/bullmq.queuebase.redisversion.md deleted file mode 100644 index 5812fde5ee..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.redisversion.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [redisVersion](./bullmq.queuebase.redisversion.md) - -## QueueBase.redisVersion property - -Signature: - -```typescript -get redisVersion(): string; -``` diff --git a/docs/gitbook/api/bullmq.queuebase.tokey.md b/docs/gitbook/api/bullmq.queuebase.tokey.md deleted file mode 100644 index 6ec8d29078..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.tokey.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [toKey](./bullmq.queuebase.tokey.md) - -## QueueBase.toKey property - -Signature: - -```typescript -toKey: (type: string) => string; -``` diff --git a/docs/gitbook/api/bullmq.queuebase.waituntilready.md b/docs/gitbook/api/bullmq.queuebase.waituntilready.md deleted file mode 100644 index 794fcc15c0..0000000000 --- a/docs/gitbook/api/bullmq.queuebase.waituntilready.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBase](./bullmq.queuebase.md) > [waitUntilReady](./bullmq.queuebase.waituntilready.md) - -## QueueBase.waitUntilReady() method - -Signature: - -```typescript -waitUntilReady(): Promise; -``` -Returns: - -Promise<[RedisClient](./bullmq.redisclient.md)> - diff --git a/docs/gitbook/api/bullmq.queuebaseoptions.blockingconnection.md b/docs/gitbook/api/bullmq.queuebaseoptions.blockingconnection.md deleted file mode 100644 index decfeaad43..0000000000 --- a/docs/gitbook/api/bullmq.queuebaseoptions.blockingconnection.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBaseOptions](./bullmq.queuebaseoptions.md) > [blockingConnection](./bullmq.queuebaseoptions.blockingconnection.md) - -## QueueBaseOptions.blockingConnection property - -Denotes commands should retry indefinitely. - -Signature: - -```typescript -blockingConnection?: boolean; -``` diff --git a/docs/gitbook/api/bullmq.queuebaseoptions.connection.md b/docs/gitbook/api/bullmq.queuebaseoptions.connection.md deleted file mode 100644 index acbfae4fdc..0000000000 --- a/docs/gitbook/api/bullmq.queuebaseoptions.connection.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBaseOptions](./bullmq.queuebaseoptions.md) > [connection](./bullmq.queuebaseoptions.connection.md) - -## QueueBaseOptions.connection property - -Options for connecting to a Redis instance. - -Signature: - -```typescript -connection?: ConnectionOptions; -``` diff --git a/docs/gitbook/api/bullmq.queuebaseoptions.md b/docs/gitbook/api/bullmq.queuebaseoptions.md deleted file mode 100644 index 5b385ab310..0000000000 --- a/docs/gitbook/api/bullmq.queuebaseoptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBaseOptions](./bullmq.queuebaseoptions.md) - -## QueueBaseOptions interface - -Base Queue options - -Signature: - -```typescript -export interface QueueBaseOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [blockingConnection?](./bullmq.queuebaseoptions.blockingconnection.md) | boolean | (Optional) Denotes commands should retry indefinitely. | -| [connection?](./bullmq.queuebaseoptions.connection.md) | [ConnectionOptions](./bullmq.connectionoptions.md) | (Optional) Options for connecting to a Redis instance. | -| [prefix?](./bullmq.queuebaseoptions.prefix.md) | string | (Optional) Prefix for all queue keys. | -| [sharedConnection?](./bullmq.queuebaseoptions.sharedconnection.md) | boolean | (Optional) Specify if the connection is shared. | - diff --git a/docs/gitbook/api/bullmq.queuebaseoptions.prefix.md b/docs/gitbook/api/bullmq.queuebaseoptions.prefix.md deleted file mode 100644 index 7d65d4abc4..0000000000 --- a/docs/gitbook/api/bullmq.queuebaseoptions.prefix.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBaseOptions](./bullmq.queuebaseoptions.md) > [prefix](./bullmq.queuebaseoptions.prefix.md) - -## QueueBaseOptions.prefix property - -Prefix for all queue keys. - -Signature: - -```typescript -prefix?: string; -``` diff --git a/docs/gitbook/api/bullmq.queuebaseoptions.sharedconnection.md b/docs/gitbook/api/bullmq.queuebaseoptions.sharedconnection.md deleted file mode 100644 index 3bad6bea40..0000000000 --- a/docs/gitbook/api/bullmq.queuebaseoptions.sharedconnection.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueBaseOptions](./bullmq.queuebaseoptions.md) > [sharedConnection](./bullmq.queuebaseoptions.sharedconnection.md) - -## QueueBaseOptions.sharedConnection property - -Specify if the connection is shared. - -Signature: - -```typescript -sharedConnection?: boolean; -``` diff --git a/docs/gitbook/api/bullmq.queueevents._constructor_.md b/docs/gitbook/api/bullmq.queueevents._constructor_.md deleted file mode 100644 index 0c28dd73dd..0000000000 --- a/docs/gitbook/api/bullmq.queueevents._constructor_.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEvents](./bullmq.queueevents.md) > [(constructor)](./bullmq.queueevents._constructor_.md) - -## QueueEvents.(constructor) - -Constructs a new instance of the `QueueEvents` class - -Signature: - -```typescript -constructor(name: string, { connection, autorun, ...opts }?: QueueEventsOptions, Connection?: typeof RedisConnection); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | -| { connection, autorun, ...opts } | [QueueEventsOptions](./bullmq.queueeventsoptions.md) | | -| Connection | typeof [RedisConnection](./bullmq.redisconnection.md) | | - diff --git a/docs/gitbook/api/bullmq.queueevents.close.md b/docs/gitbook/api/bullmq.queueevents.close.md deleted file mode 100644 index a9a4a42120..0000000000 --- a/docs/gitbook/api/bullmq.queueevents.close.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEvents](./bullmq.queueevents.md) > [close](./bullmq.queueevents.close.md) - -## QueueEvents.close() method - -Signature: - -```typescript -close(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queueevents.emit.md b/docs/gitbook/api/bullmq.queueevents.emit.md deleted file mode 100644 index cdbd60739e..0000000000 --- a/docs/gitbook/api/bullmq.queueevents.emit.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEvents](./bullmq.queueevents.md) > [emit](./bullmq.queueevents.emit.md) - -## QueueEvents.emit() method - -Signature: - -```typescript -emit(event: U, ...args: Parameters): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| args | Parameters<[QueueEventsListener](./bullmq.queueeventslistener.md)\[U\]> | | - -Returns: - -boolean - diff --git a/docs/gitbook/api/bullmq.queueevents.md b/docs/gitbook/api/bullmq.queueevents.md deleted file mode 100644 index cc4804845e..0000000000 --- a/docs/gitbook/api/bullmq.queueevents.md +++ /dev/null @@ -1,34 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEvents](./bullmq.queueevents.md) - -## QueueEvents class - -The QueueEvents class is used for listening to the global events emitted by a given queue. - -This class requires a dedicated redis connection. - -Signature: - -```typescript -export declare class QueueEvents extends QueueBase -``` -Extends: [QueueBase](./bullmq.queuebase.md) - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(name, { connection, autorun, ...opts }, Connection)](./bullmq.queueevents._constructor_.md) | | Constructs a new instance of the QueueEvents class | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [close()](./bullmq.queueevents.close.md) | | | -| [emit(event, args)](./bullmq.queueevents.emit.md) | | | -| [off(eventName, listener)](./bullmq.queueevents.off.md) | | | -| [on(event, listener)](./bullmq.queueevents.on.md) | | | -| [once(event, listener)](./bullmq.queueevents.once.md) | | | -| [run()](./bullmq.queueevents.run.md) | | | - diff --git a/docs/gitbook/api/bullmq.queueevents.off.md b/docs/gitbook/api/bullmq.queueevents.off.md deleted file mode 100644 index 96e978c13e..0000000000 --- a/docs/gitbook/api/bullmq.queueevents.off.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEvents](./bullmq.queueevents.md) > [off](./bullmq.queueevents.off.md) - -## QueueEvents.off() method - -Signature: - -```typescript -off(eventName: U, listener: QueueEventsListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| eventName | U | | -| listener | [QueueEventsListener](./bullmq.queueeventslistener.md)\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queueevents.on.md b/docs/gitbook/api/bullmq.queueevents.on.md deleted file mode 100644 index 33dc87fa97..0000000000 --- a/docs/gitbook/api/bullmq.queueevents.on.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEvents](./bullmq.queueevents.md) > [on](./bullmq.queueevents.on.md) - -## QueueEvents.on() method - -Signature: - -```typescript -on(event: U, listener: QueueEventsListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| listener | [QueueEventsListener](./bullmq.queueeventslistener.md)\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queueevents.once.md b/docs/gitbook/api/bullmq.queueevents.once.md deleted file mode 100644 index 744ab1c0f6..0000000000 --- a/docs/gitbook/api/bullmq.queueevents.once.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEvents](./bullmq.queueevents.md) > [once](./bullmq.queueevents.once.md) - -## QueueEvents.once() method - -Signature: - -```typescript -once(event: U, listener: QueueEventsListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| listener | [QueueEventsListener](./bullmq.queueeventslistener.md)\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queueevents.run.md b/docs/gitbook/api/bullmq.queueevents.run.md deleted file mode 100644 index 38d0332173..0000000000 --- a/docs/gitbook/api/bullmq.queueevents.run.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEvents](./bullmq.queueevents.md) > [run](./bullmq.queueevents.run.md) - -## QueueEvents.run() method - -Signature: - -```typescript -run(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queueeventslistener._retries-exhausted_.md b/docs/gitbook/api/bullmq.queueeventslistener._retries-exhausted_.md deleted file mode 100644 index 72584cdaee..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener._retries-exhausted_.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > ["retries-exhausted"](./bullmq.queueeventslistener._retries-exhausted_.md) - -## QueueEventsListener."retries-exhausted" property - -Listen to 'retries-exhausted' event. - -This event is triggered when a job has retried the maximum attempts. - -Signature: - -```typescript -'retries-exhausted': (args: { - jobId: string; - attemptsMade: string; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener._waiting-children_.md b/docs/gitbook/api/bullmq.queueeventslistener._waiting-children_.md deleted file mode 100644 index f46e984a3c..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener._waiting-children_.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > ["waiting-children"](./bullmq.queueeventslistener._waiting-children_.md) - -## QueueEventsListener."waiting-children" property - -Listen to 'waiting-children' event. - -This event is triggered when a job enters the 'waiting-children' state. - -Signature: - -```typescript -'waiting-children': (args: { - jobId: string; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.active.md b/docs/gitbook/api/bullmq.queueeventslistener.active.md deleted file mode 100644 index 85b561c719..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.active.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [active](./bullmq.queueeventslistener.active.md) - -## QueueEventsListener.active property - -Listen to 'active' event. - -This event is triggered when a job enters the 'active' state. - -Signature: - -```typescript -active: (args: { - jobId: string; - prev?: string; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.added.md b/docs/gitbook/api/bullmq.queueeventslistener.added.md deleted file mode 100644 index 2229d0cbbc..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.added.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [added](./bullmq.queueeventslistener.added.md) - -## QueueEventsListener.added property - -Listen to 'added' event. - -This event is triggered when a job is created. - -Signature: - -```typescript -added: (args: { - jobId: string; - name: string; - data: string; - opts: string; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.cleaned.md b/docs/gitbook/api/bullmq.queueeventslistener.cleaned.md deleted file mode 100644 index 0a5b208dff..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.cleaned.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [cleaned](./bullmq.queueeventslistener.cleaned.md) - -## QueueEventsListener.cleaned property - -Listen to 'cleaned' event. - -This event is triggered when a cleaned method is triggered. - -Signature: - -```typescript -cleaned: (args: { - count: string; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.completed.md b/docs/gitbook/api/bullmq.queueeventslistener.completed.md deleted file mode 100644 index 93684f6a67..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.completed.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [completed](./bullmq.queueeventslistener.completed.md) - -## QueueEventsListener.completed property - -Listen to 'completed' event. - -This event is triggered when a job has successfully completed. - -Signature: - -```typescript -completed: (args: { - jobId: string; - returnvalue: string; - prev?: string; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.delayed.md b/docs/gitbook/api/bullmq.queueeventslistener.delayed.md deleted file mode 100644 index 1dee91c4c8..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.delayed.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [delayed](./bullmq.queueeventslistener.delayed.md) - -## QueueEventsListener.delayed property - -Listen to 'delayed' event. - -This event is triggered when a job is delayed. - -Signature: - -```typescript -delayed: (args: { - jobId: string; - delay: number; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.drained.md b/docs/gitbook/api/bullmq.queueeventslistener.drained.md deleted file mode 100644 index 1d56db5267..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.drained.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [drained](./bullmq.queueeventslistener.drained.md) - -## QueueEventsListener.drained property - -Listen to 'drained' event. - -This event is triggered when the queue has drained the waiting list. Note that there could still be delayed jobs waiting their timers to expire and this event will still be triggered as long as the waiting list has emptied. - -Signature: - -```typescript -drained: (id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.error.md b/docs/gitbook/api/bullmq.queueeventslistener.error.md deleted file mode 100644 index 5bd1ceccea..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.error.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [error](./bullmq.queueeventslistener.error.md) - -## QueueEventsListener.error property - -Listen to 'error' event. - -This event is triggered when an exception is thrown. - -Signature: - -```typescript -error: (args: Error) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.failed.md b/docs/gitbook/api/bullmq.queueeventslistener.failed.md deleted file mode 100644 index a98f4e860a..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.failed.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [failed](./bullmq.queueeventslistener.failed.md) - -## QueueEventsListener.failed property - -Listen to 'failed' event. - -This event is triggered when a job has thrown an exception. - -Signature: - -```typescript -failed: (args: { - jobId: string; - failedReason: string; - prev?: string; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.md b/docs/gitbook/api/bullmq.queueeventslistener.md deleted file mode 100644 index ce5bf1d727..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.md +++ /dev/null @@ -1,33 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) - -## QueueEventsListener interface - -Signature: - -```typescript -export interface QueueEventsListener -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| ["retries-exhausted"](./bullmq.queueeventslistener._retries-exhausted_.md) | (args: { jobId: string; attemptsMade: string; }, id: string) => void | Listen to 'retries-exhausted' event.This event is triggered when a job has retried the maximum attempts. | -| ["waiting-children"](./bullmq.queueeventslistener._waiting-children_.md) | (args: { jobId: string; }, id: string) => void | Listen to 'waiting-children' event.This event is triggered when a job enters the 'waiting-children' state. | -| [active](./bullmq.queueeventslistener.active.md) | (args: { jobId: string; prev?: string; }, id: string) => void | Listen to 'active' event.This event is triggered when a job enters the 'active' state. | -| [added](./bullmq.queueeventslistener.added.md) | (args: { jobId: string; name: string; data: string; opts: string; }, id: string) => void | Listen to 'added' event.This event is triggered when a job is created. | -| [cleaned](./bullmq.queueeventslistener.cleaned.md) | (args: { count: string; }, id: string) => void | Listen to 'cleaned' event.This event is triggered when a cleaned method is triggered. | -| [completed](./bullmq.queueeventslistener.completed.md) | (args: { jobId: string; returnvalue: string; prev?: string; }, id: string) => void | Listen to 'completed' event.This event is triggered when a job has successfully completed. | -| [delayed](./bullmq.queueeventslistener.delayed.md) | (args: { jobId: string; delay: number; }, id: string) => void | Listen to 'delayed' event.This event is triggered when a job is delayed. | -| [drained](./bullmq.queueeventslistener.drained.md) | (id: string) => void | Listen to 'drained' event.This event is triggered when the queue has drained the waiting list. Note that there could still be delayed jobs waiting their timers to expire and this event will still be triggered as long as the waiting list has emptied. | -| [error](./bullmq.queueeventslistener.error.md) | (args: Error) => void | Listen to 'error' event.This event is triggered when an exception is thrown. | -| [failed](./bullmq.queueeventslistener.failed.md) | (args: { jobId: string; failedReason: string; prev?: string; }, id: string) => void | Listen to 'failed' event.This event is triggered when a job has thrown an exception. | -| [paused](./bullmq.queueeventslistener.paused.md) | (args: {}, id: string) => void | Listen to 'paused' event.This event is triggered when a queue is paused. | -| [progress](./bullmq.queueeventslistener.progress.md) | (args: { jobId: string; data: number \| object; }, id: string) => void | Listen to 'progress' event.This event is triggered when a job updates it progress, i.e. the Job\#\#updateProgress() method is called. This is useful to notify progress or any other data from within a processor to the rest of the world. | -| [removed](./bullmq.queueeventslistener.removed.md) | (args: { jobId: string; }, id: string) => void | Listen to 'removed' event.This event is triggered when a job has been manually removed from the queue. | -| [resumed](./bullmq.queueeventslistener.resumed.md) | (args: {}, id: string) => void | Listen to 'resumed' event.This event is triggered when a queue is resumed. | -| [stalled](./bullmq.queueeventslistener.stalled.md) | (args: { jobId: string; }, id: string) => void | Listen to 'stalled' event.This event is triggered when a job has been moved from 'active' back to 'waiting'/'failed' due to the processor not being able to renew the lock on the said job. | -| [waiting](./bullmq.queueeventslistener.waiting.md) | (args: { jobId: string; }, id: string) => void | Listen to 'waiting' event.This event is triggered when a job enters the 'waiting' state. | - diff --git a/docs/gitbook/api/bullmq.queueeventslistener.paused.md b/docs/gitbook/api/bullmq.queueeventslistener.paused.md deleted file mode 100644 index 14cb17e02e..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.paused.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [paused](./bullmq.queueeventslistener.paused.md) - -## QueueEventsListener.paused property - -Listen to 'paused' event. - -This event is triggered when a queue is paused. - -Signature: - -```typescript -paused: (args: {}, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.progress.md b/docs/gitbook/api/bullmq.queueeventslistener.progress.md deleted file mode 100644 index 74ead304f7..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.progress.md +++ /dev/null @@ -1,18 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [progress](./bullmq.queueeventslistener.progress.md) - -## QueueEventsListener.progress property - -Listen to 'progress' event. - -This event is triggered when a job updates it progress, i.e. the Job\#\#updateProgress() method is called. This is useful to notify progress or any other data from within a processor to the rest of the world. - -Signature: - -```typescript -progress: (args: { - jobId: string; - data: number | object; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.removed.md b/docs/gitbook/api/bullmq.queueeventslistener.removed.md deleted file mode 100644 index 9eeaa944a3..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.removed.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [removed](./bullmq.queueeventslistener.removed.md) - -## QueueEventsListener.removed property - -Listen to 'removed' event. - -This event is triggered when a job has been manually removed from the queue. - -Signature: - -```typescript -removed: (args: { - jobId: string; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.resumed.md b/docs/gitbook/api/bullmq.queueeventslistener.resumed.md deleted file mode 100644 index 1dee41e68c..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.resumed.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [resumed](./bullmq.queueeventslistener.resumed.md) - -## QueueEventsListener.resumed property - -Listen to 'resumed' event. - -This event is triggered when a queue is resumed. - -Signature: - -```typescript -resumed: (args: {}, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.stalled.md b/docs/gitbook/api/bullmq.queueeventslistener.stalled.md deleted file mode 100644 index a4e9426fbe..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.stalled.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [stalled](./bullmq.queueeventslistener.stalled.md) - -## QueueEventsListener.stalled property - -Listen to 'stalled' event. - -This event is triggered when a job has been moved from 'active' back to 'waiting'/'failed' due to the processor not being able to renew the lock on the said job. - -Signature: - -```typescript -stalled: (args: { - jobId: string; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventslistener.waiting.md b/docs/gitbook/api/bullmq.queueeventslistener.waiting.md deleted file mode 100644 index eca7e395e6..0000000000 --- a/docs/gitbook/api/bullmq.queueeventslistener.waiting.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsListener](./bullmq.queueeventslistener.md) > [waiting](./bullmq.queueeventslistener.waiting.md) - -## QueueEventsListener.waiting property - -Listen to 'waiting' event. - -This event is triggered when a job enters the 'waiting' state. - -Signature: - -```typescript -waiting: (args: { - jobId: string; - }, id: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueeventsoptions.autorun.md b/docs/gitbook/api/bullmq.queueeventsoptions.autorun.md deleted file mode 100644 index eeb3c3a605..0000000000 --- a/docs/gitbook/api/bullmq.queueeventsoptions.autorun.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsOptions](./bullmq.queueeventsoptions.md) > [autorun](./bullmq.queueeventsoptions.autorun.md) - -## QueueEventsOptions.autorun property - -Condition to start listening to events at instance creation. - -Signature: - -```typescript -autorun?: boolean; -``` diff --git a/docs/gitbook/api/bullmq.queueeventsoptions.blockingtimeout.md b/docs/gitbook/api/bullmq.queueeventsoptions.blockingtimeout.md deleted file mode 100644 index 17e4ddd26e..0000000000 --- a/docs/gitbook/api/bullmq.queueeventsoptions.blockingtimeout.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsOptions](./bullmq.queueeventsoptions.md) > [blockingTimeout](./bullmq.queueeventsoptions.blockingtimeout.md) - -## QueueEventsOptions.blockingTimeout property - -Timeout for the blocking XREAD call to the events stream. - -Signature: - -```typescript -blockingTimeout?: number; -``` diff --git a/docs/gitbook/api/bullmq.queueeventsoptions.lasteventid.md b/docs/gitbook/api/bullmq.queueeventsoptions.lasteventid.md deleted file mode 100644 index b3faec3ea4..0000000000 --- a/docs/gitbook/api/bullmq.queueeventsoptions.lasteventid.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsOptions](./bullmq.queueeventsoptions.md) > [lastEventId](./bullmq.queueeventsoptions.lasteventid.md) - -## QueueEventsOptions.lastEventId property - -Last event Id. If provided it is possible to continue consuming events from a known Id instead of from the last produced event. - -Signature: - -```typescript -lastEventId?: string; -``` diff --git a/docs/gitbook/api/bullmq.queueeventsoptions.md b/docs/gitbook/api/bullmq.queueeventsoptions.md deleted file mode 100644 index 1ef5f77d9b..0000000000 --- a/docs/gitbook/api/bullmq.queueeventsoptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueEventsOptions](./bullmq.queueeventsoptions.md) - -## QueueEventsOptions interface - -Options for QueueEvents - -Signature: - -```typescript -export interface QueueEventsOptions extends QueueBaseOptions -``` -Extends: [QueueBaseOptions](./bullmq.queuebaseoptions.md) - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [autorun?](./bullmq.queueeventsoptions.autorun.md) | boolean | (Optional) Condition to start listening to events at instance creation. | -| [blockingTimeout?](./bullmq.queueeventsoptions.blockingtimeout.md) | number | (Optional) Timeout for the blocking XREAD call to the events stream. | -| [lastEventId?](./bullmq.queueeventsoptions.lasteventid.md) | string | (Optional) Last event Id. If provided it is possible to continue consuming events from a known Id instead of from the last produced event. | - diff --git a/docs/gitbook/api/bullmq.queuegetters.count.md b/docs/gitbook/api/bullmq.queuegetters.count.md deleted file mode 100644 index 134aa5760a..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.count.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [count](./bullmq.queuegetters.count.md) - -## QueueGetters.count() method - -Returns the number of jobs waiting to be processed. - -Signature: - -```typescript -count(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getactive.md b/docs/gitbook/api/bullmq.queuegetters.getactive.md deleted file mode 100644 index 42dfc36fbf..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getactive.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getActive](./bullmq.queuegetters.getactive.md) - -## QueueGetters.getActive() method - -Signature: - -```typescript -getActive(start?: number, end?: number): Promise[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>\[\]> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getactivecount.md b/docs/gitbook/api/bullmq.queuegetters.getactivecount.md deleted file mode 100644 index 5458643291..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getactivecount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getActiveCount](./bullmq.queuegetters.getactivecount.md) - -## QueueGetters.getActiveCount() method - -Returns the number of jobs in active status. - -Signature: - -```typescript -getActiveCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getcompleted.md b/docs/gitbook/api/bullmq.queuegetters.getcompleted.md deleted file mode 100644 index 14460ccc1d..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getcompleted.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getCompleted](./bullmq.queuegetters.getcompleted.md) - -## QueueGetters.getCompleted() method - -Signature: - -```typescript -getCompleted(start?: number, end?: number): Promise[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>\[\]> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getcompletedcount.md b/docs/gitbook/api/bullmq.queuegetters.getcompletedcount.md deleted file mode 100644 index 62c23ade09..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getcompletedcount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getCompletedCount](./bullmq.queuegetters.getcompletedcount.md) - -## QueueGetters.getCompletedCount() method - -Returns the number of jobs in completed status. - -Signature: - -```typescript -getCompletedCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getdelayed.md b/docs/gitbook/api/bullmq.queuegetters.getdelayed.md deleted file mode 100644 index 723bdad965..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getdelayed.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getDelayed](./bullmq.queuegetters.getdelayed.md) - -## QueueGetters.getDelayed() method - -Signature: - -```typescript -getDelayed(start?: number, end?: number): Promise[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>\[\]> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getdelayedcount.md b/docs/gitbook/api/bullmq.queuegetters.getdelayedcount.md deleted file mode 100644 index 0080c2b4c4..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getdelayedcount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getDelayedCount](./bullmq.queuegetters.getdelayedcount.md) - -## QueueGetters.getDelayedCount() method - -Returns the number of jobs in delayed status. - -Signature: - -```typescript -getDelayedCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getfailed.md b/docs/gitbook/api/bullmq.queuegetters.getfailed.md deleted file mode 100644 index 7e6f3bd1c9..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getfailed.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getFailed](./bullmq.queuegetters.getfailed.md) - -## QueueGetters.getFailed() method - -Signature: - -```typescript -getFailed(start?: number, end?: number): Promise[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>\[\]> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getfailedcount.md b/docs/gitbook/api/bullmq.queuegetters.getfailedcount.md deleted file mode 100644 index 695316f6e8..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getfailedcount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getFailedCount](./bullmq.queuegetters.getfailedcount.md) - -## QueueGetters.getFailedCount() method - -Returns the number of jobs in failed status. - -Signature: - -```typescript -getFailedCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getjob.md b/docs/gitbook/api/bullmq.queuegetters.getjob.md deleted file mode 100644 index e593c040c2..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getjob.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getJob](./bullmq.queuegetters.getjob.md) - -## QueueGetters.getJob() method - -Signature: - -```typescript -getJob(jobId: string): Promise | undefined>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| jobId | string | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType> \| undefined> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getjobcountbytypes.md b/docs/gitbook/api/bullmq.queuegetters.getjobcountbytypes.md deleted file mode 100644 index 986a8d8b47..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getjobcountbytypes.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getJobCountByTypes](./bullmq.queuegetters.getjobcountbytypes.md) - -## QueueGetters.getJobCountByTypes() method - -Job counts by type - -Queue\#getJobCountByTypes('completed') => completed count Queue\#getJobCountByTypes('completed,failed') => completed + failed count Queue\#getJobCountByTypes('completed', 'failed') => completed + failed count Queue\#getJobCountByTypes('completed', 'waiting', 'failed') => completed + waiting + failed count - -Signature: - -```typescript -getJobCountByTypes(...types: JobType[]): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| types | [JobType](./bullmq.jobtype.md)\[\] | | - -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getjobcounts.md b/docs/gitbook/api/bullmq.queuegetters.getjobcounts.md deleted file mode 100644 index edb625a900..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getjobcounts.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getJobCounts](./bullmq.queuegetters.getjobcounts.md) - -## QueueGetters.getJobCounts() method - -Returns the job counts for each type specified or every list/set in the queue by default. - -Signature: - -```typescript -getJobCounts(...types: JobType[]): Promise<{ - [index: string]: number; - }>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| types | [JobType](./bullmq.jobtype.md)\[\] | | - -Returns: - -Promise<{ \[index: string\]: number; }> - -An object, key (type) and value (count) - diff --git a/docs/gitbook/api/bullmq.queuegetters.getjoblogs.md b/docs/gitbook/api/bullmq.queuegetters.getjoblogs.md deleted file mode 100644 index cfb514f442..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getjoblogs.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getJobLogs](./bullmq.queuegetters.getjoblogs.md) - -## QueueGetters.getJobLogs() method - -Signature: - -```typescript -getJobLogs(jobId: string, start?: number, end?: number, asc?: boolean): Promise<{ - logs: [string]; - count: number; - }>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| jobId | string | | -| start | number | | -| end | number | | -| asc | boolean | | - -Returns: - -Promise<{ logs: \[string\]; count: number; }> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getjobs.md b/docs/gitbook/api/bullmq.queuegetters.getjobs.md deleted file mode 100644 index 3502eb58ab..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getjobs.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getJobs](./bullmq.queuegetters.getjobs.md) - -## QueueGetters.getJobs() method - -Signature: - -```typescript -getJobs(types?: JobType[] | JobType, start?: number, end?: number, asc?: boolean): Promise[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| types | [JobType](./bullmq.jobtype.md)\[\] \| [JobType](./bullmq.jobtype.md) | | -| start | number | | -| end | number | | -| asc | boolean | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>\[\]> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getmetrics.md b/docs/gitbook/api/bullmq.queuegetters.getmetrics.md deleted file mode 100644 index 16f2af46ef..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getmetrics.md +++ /dev/null @@ -1,30 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getMetrics](./bullmq.queuegetters.getmetrics.md) - -## QueueGetters.getMetrics() method - -Get queue metrics related to the queue. - -This method returns the gathered metrics for the queue. The metrics are represented as an array of job counts per unit of time (1 minute). - -Signature: - -```typescript -getMetrics(type: 'completed' | 'failed', start?: number, end?: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | 'completed' \| 'failed' | | -| start | number | Start point of the metrics, where 0 is the newest point to be returned. | -| end | number | End point of the metrics, where -1 is the oldest point to be returned. | - -Returns: - -Promise<[Metrics](./bullmq.metrics.md)> - -- Returns an object with queue metrics. - diff --git a/docs/gitbook/api/bullmq.queuegetters.getqueueevents.md b/docs/gitbook/api/bullmq.queuegetters.getqueueevents.md deleted file mode 100644 index 3024d6e129..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getqueueevents.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getQueueEvents](./bullmq.queuegetters.getqueueevents.md) - -## QueueGetters.getQueueEvents() method - -Get queue events list related to the queue. - -Signature: - -```typescript -getQueueEvents(): Promise<{ - [index: string]: string; - }[]>; -``` -Returns: - -Promise<{ \[index: string\]: string; }\[\]> - -- Returns an array with queue events info. - diff --git a/docs/gitbook/api/bullmq.queuegetters.getqueueschedulers.md b/docs/gitbook/api/bullmq.queuegetters.getqueueschedulers.md deleted file mode 100644 index 65916548ad..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getqueueschedulers.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getQueueSchedulers](./bullmq.queuegetters.getqueueschedulers.md) - -## QueueGetters.getQueueSchedulers() method - -Get queue schedulers list related to the queue. - -Signature: - -```typescript -getQueueSchedulers(): Promise<{ - [index: string]: string; - }[]>; -``` -Returns: - -Promise<{ \[index: string\]: string; }\[\]> - -- Returns an array with queue schedulers info. - diff --git a/docs/gitbook/api/bullmq.queuegetters.getranges.md b/docs/gitbook/api/bullmq.queuegetters.getranges.md deleted file mode 100644 index 74eacb5816..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getranges.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getRanges](./bullmq.queuegetters.getranges.md) - -## QueueGetters.getRanges() method - -Signature: - -```typescript -getRanges(types: JobType[], start?: number, end?: number, asc?: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| types | [JobType](./bullmq.jobtype.md)\[\] | | -| start | number | | -| end | number | | -| asc | boolean | | - -Returns: - -Promise<string\[\]> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getwaiting.md b/docs/gitbook/api/bullmq.queuegetters.getwaiting.md deleted file mode 100644 index 564d1110bd..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getwaiting.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getWaiting](./bullmq.queuegetters.getwaiting.md) - -## QueueGetters.getWaiting() method - -Signature: - -```typescript -getWaiting(start?: number, end?: number): Promise[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>\[\]> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getwaitingchildren.md b/docs/gitbook/api/bullmq.queuegetters.getwaitingchildren.md deleted file mode 100644 index ba13f70f57..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getwaitingchildren.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getWaitingChildren](./bullmq.queuegetters.getwaitingchildren.md) - -## QueueGetters.getWaitingChildren() method - -Signature: - -```typescript -getWaitingChildren(start?: number, end?: number): Promise[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>\[\]> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getwaitingchildrencount.md b/docs/gitbook/api/bullmq.queuegetters.getwaitingchildrencount.md deleted file mode 100644 index 41d7ea1b05..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getwaitingchildrencount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getWaitingChildrenCount](./bullmq.queuegetters.getwaitingchildrencount.md) - -## QueueGetters.getWaitingChildrenCount() method - -Returns the number of jobs in waiting-children status. - -Signature: - -```typescript -getWaitingChildrenCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getwaitingcount.md b/docs/gitbook/api/bullmq.queuegetters.getwaitingcount.md deleted file mode 100644 index 4a2742fcd1..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getwaitingcount.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getWaitingCount](./bullmq.queuegetters.getwaitingcount.md) - -## QueueGetters.getWaitingCount() method - -Returns the number of jobs in waiting or paused statuses. - -Signature: - -```typescript -getWaitingCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.queuegetters.getworkers.md b/docs/gitbook/api/bullmq.queuegetters.getworkers.md deleted file mode 100644 index f2b7786e9c..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.getworkers.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) > [getWorkers](./bullmq.queuegetters.getworkers.md) - -## QueueGetters.getWorkers() method - -Get worker list related to the queue. - -Signature: - -```typescript -getWorkers(): Promise<{ - [index: string]: string; - }[]>; -``` -Returns: - -Promise<{ \[index: string\]: string; }\[\]> - -- Returns an array with workers info. - diff --git a/docs/gitbook/api/bullmq.queuegetters.md b/docs/gitbook/api/bullmq.queuegetters.md deleted file mode 100644 index 6ef2c0dfd2..0000000000 --- a/docs/gitbook/api/bullmq.queuegetters.md +++ /dev/null @@ -1,41 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueGetters](./bullmq.queuegetters.md) - -## QueueGetters class - -Signature: - -```typescript -export declare class QueueGetters extends QueueBase -``` -Extends: [QueueBase](./bullmq.queuebase.md) - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [count()](./bullmq.queuegetters.count.md) | | Returns the number of jobs waiting to be processed. | -| [getActive(start, end)](./bullmq.queuegetters.getactive.md) | | | -| [getActiveCount()](./bullmq.queuegetters.getactivecount.md) | | Returns the number of jobs in active status. | -| [getCompleted(start, end)](./bullmq.queuegetters.getcompleted.md) | | | -| [getCompletedCount()](./bullmq.queuegetters.getcompletedcount.md) | | Returns the number of jobs in completed status. | -| [getDelayed(start, end)](./bullmq.queuegetters.getdelayed.md) | | | -| [getDelayedCount()](./bullmq.queuegetters.getdelayedcount.md) | | Returns the number of jobs in delayed status. | -| [getFailed(start, end)](./bullmq.queuegetters.getfailed.md) | | | -| [getFailedCount()](./bullmq.queuegetters.getfailedcount.md) | | Returns the number of jobs in failed status. | -| [getJob(jobId)](./bullmq.queuegetters.getjob.md) | | | -| [getJobCountByTypes(types)](./bullmq.queuegetters.getjobcountbytypes.md) | | Job counts by typeQueue\#getJobCountByTypes('completed') => completed count Queue\#getJobCountByTypes('completed,failed') => completed + failed count Queue\#getJobCountByTypes('completed', 'failed') => completed + failed count Queue\#getJobCountByTypes('completed', 'waiting', 'failed') => completed + waiting + failed count | -| [getJobCounts(types)](./bullmq.queuegetters.getjobcounts.md) | | Returns the job counts for each type specified or every list/set in the queue by default. | -| [getJobLogs(jobId, start, end, asc)](./bullmq.queuegetters.getjoblogs.md) | | | -| [getJobs(types, start, end, asc)](./bullmq.queuegetters.getjobs.md) | | | -| [getMetrics(type, start, end)](./bullmq.queuegetters.getmetrics.md) | | Get queue metrics related to the queue.This method returns the gathered metrics for the queue. The metrics are represented as an array of job counts per unit of time (1 minute). | -| [getQueueEvents()](./bullmq.queuegetters.getqueueevents.md) | | Get queue events list related to the queue. | -| [getQueueSchedulers()](./bullmq.queuegetters.getqueueschedulers.md) | | Get queue schedulers list related to the queue. | -| [getRanges(types, start, end, asc)](./bullmq.queuegetters.getranges.md) | | | -| [getWaiting(start, end)](./bullmq.queuegetters.getwaiting.md) | | | -| [getWaitingChildren(start, end)](./bullmq.queuegetters.getwaitingchildren.md) | | | -| [getWaitingChildrenCount()](./bullmq.queuegetters.getwaitingchildrencount.md) | | Returns the number of jobs in waiting-children status. | -| [getWaitingCount()](./bullmq.queuegetters.getwaitingcount.md) | | Returns the number of jobs in waiting or paused statuses. | -| [getWorkers()](./bullmq.queuegetters.getworkers.md) | | Get worker list related to the queue. | - diff --git a/docs/gitbook/api/bullmq.queuekeys._constructor_.md b/docs/gitbook/api/bullmq.queuekeys._constructor_.md deleted file mode 100644 index 3e94285bfb..0000000000 --- a/docs/gitbook/api/bullmq.queuekeys._constructor_.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueKeys](./bullmq.queuekeys.md) > [(constructor)](./bullmq.queuekeys._constructor_.md) - -## QueueKeys.(constructor) - -Constructs a new instance of the `QueueKeys` class - -Signature: - -```typescript -constructor(prefix?: string); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| prefix | string | | - diff --git a/docs/gitbook/api/bullmq.queuekeys.getkeys.md b/docs/gitbook/api/bullmq.queuekeys.getkeys.md deleted file mode 100644 index d098a8a182..0000000000 --- a/docs/gitbook/api/bullmq.queuekeys.getkeys.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueKeys](./bullmq.queuekeys.md) > [getKeys](./bullmq.queuekeys.getkeys.md) - -## QueueKeys.getKeys() method - -Signature: - -```typescript -getKeys(name: string): KeysMap; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | - -Returns: - -[KeysMap](./bullmq.keysmap.md) - diff --git a/docs/gitbook/api/bullmq.queuekeys.getprefixedqueuename.md b/docs/gitbook/api/bullmq.queuekeys.getprefixedqueuename.md deleted file mode 100644 index b0029da4b7..0000000000 --- a/docs/gitbook/api/bullmq.queuekeys.getprefixedqueuename.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueKeys](./bullmq.queuekeys.md) > [getPrefixedQueueName](./bullmq.queuekeys.getprefixedqueuename.md) - -## QueueKeys.getPrefixedQueueName() method - -Signature: - -```typescript -getPrefixedQueueName(name: string): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | - -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.queuekeys.md b/docs/gitbook/api/bullmq.queuekeys.md deleted file mode 100644 index d456932058..0000000000 --- a/docs/gitbook/api/bullmq.queuekeys.md +++ /dev/null @@ -1,32 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueKeys](./bullmq.queuekeys.md) - -## QueueKeys class - -Signature: - -```typescript -export declare class QueueKeys -``` - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(prefix)](./bullmq.queuekeys._constructor_.md) | | Constructs a new instance of the QueueKeys class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [prefix](./bullmq.queuekeys.prefix.md) | | string | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [getKeys(name)](./bullmq.queuekeys.getkeys.md) | | | -| [getPrefixedQueueName(name)](./bullmq.queuekeys.getprefixedqueuename.md) | | | -| [toKey(name, type)](./bullmq.queuekeys.tokey.md) | | | - diff --git a/docs/gitbook/api/bullmq.queuekeys.prefix.md b/docs/gitbook/api/bullmq.queuekeys.prefix.md deleted file mode 100644 index 0e24bbd993..0000000000 --- a/docs/gitbook/api/bullmq.queuekeys.prefix.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueKeys](./bullmq.queuekeys.md) > [prefix](./bullmq.queuekeys.prefix.md) - -## QueueKeys.prefix property - -Signature: - -```typescript -readonly prefix: string; -``` diff --git a/docs/gitbook/api/bullmq.queuekeys.tokey.md b/docs/gitbook/api/bullmq.queuekeys.tokey.md deleted file mode 100644 index 3ce765ae02..0000000000 --- a/docs/gitbook/api/bullmq.queuekeys.tokey.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueKeys](./bullmq.queuekeys.md) > [toKey](./bullmq.queuekeys.tokey.md) - -## QueueKeys.toKey() method - -Signature: - -```typescript -toKey(name: string, type: string): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | -| type | string | | - -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.queuelistener.cleaned.md b/docs/gitbook/api/bullmq.queuelistener.cleaned.md deleted file mode 100644 index 47562b6284..0000000000 --- a/docs/gitbook/api/bullmq.queuelistener.cleaned.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueListener](./bullmq.queuelistener.md) > [cleaned](./bullmq.queuelistener.cleaned.md) - -## QueueListener.cleaned property - -Listen to 'cleaned' event. - -This event is triggered when the queue calls clean method. - -Signature: - -```typescript -cleaned: (jobs: string[], type: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queuelistener.error.md b/docs/gitbook/api/bullmq.queuelistener.error.md deleted file mode 100644 index e983abcf8a..0000000000 --- a/docs/gitbook/api/bullmq.queuelistener.error.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueListener](./bullmq.queuelistener.md) > [error](./bullmq.queuelistener.error.md) - -## QueueListener.error property - -Listen to 'error' event. - -This event is triggered when an error is thrown. - -Signature: - -```typescript -error: (err: Error) => void; -``` diff --git a/docs/gitbook/api/bullmq.queuelistener.md b/docs/gitbook/api/bullmq.queuelistener.md deleted file mode 100644 index 1c3564cc8c..0000000000 --- a/docs/gitbook/api/bullmq.queuelistener.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueListener](./bullmq.queuelistener.md) - -## QueueListener interface - -Signature: - -```typescript -export interface QueueListener -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [cleaned](./bullmq.queuelistener.cleaned.md) | (jobs: string\[\], type: string) => void | Listen to 'cleaned' event.This event is triggered when the queue calls clean method. | -| [error](./bullmq.queuelistener.error.md) | (err: Error) => void | Listen to 'error' event.This event is triggered when an error is thrown. | -| [paused](./bullmq.queuelistener.paused.md) | () => void | Listen to 'paused' event.This event is triggered when the queue is paused. | -| [progress](./bullmq.queuelistener.progress.md) | (job: [Job](./bullmq.job.md)<DataType, ResultType, NameType>, progress: number \| object) => void | Listen to 'progress' event.This event is triggered when the job updates its progress. | -| [removed](./bullmq.queuelistener.removed.md) | (job: [Job](./bullmq.job.md)<DataType, ResultType, NameType>) => void | Listen to 'removed' event.This event is triggered when a job is removed. | -| [resumed](./bullmq.queuelistener.resumed.md) | () => void | Listen to 'resumed' event.This event is triggered when the queue is resumed. | -| [waiting](./bullmq.queuelistener.waiting.md) | (job: [Job](./bullmq.job.md)<DataType, ResultType, NameType>) => void | Listen to 'waiting' event.This event is triggered when the queue creates a new job. | - diff --git a/docs/gitbook/api/bullmq.queuelistener.paused.md b/docs/gitbook/api/bullmq.queuelistener.paused.md deleted file mode 100644 index 8e94405158..0000000000 --- a/docs/gitbook/api/bullmq.queuelistener.paused.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueListener](./bullmq.queuelistener.md) > [paused](./bullmq.queuelistener.paused.md) - -## QueueListener.paused property - -Listen to 'paused' event. - -This event is triggered when the queue is paused. - -Signature: - -```typescript -paused: () => void; -``` diff --git a/docs/gitbook/api/bullmq.queuelistener.progress.md b/docs/gitbook/api/bullmq.queuelistener.progress.md deleted file mode 100644 index c64f1a9973..0000000000 --- a/docs/gitbook/api/bullmq.queuelistener.progress.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueListener](./bullmq.queuelistener.md) > [progress](./bullmq.queuelistener.progress.md) - -## QueueListener.progress property - -Listen to 'progress' event. - -This event is triggered when the job updates its progress. - -Signature: - -```typescript -progress: (job: Job, progress: number | object) => void; -``` diff --git a/docs/gitbook/api/bullmq.queuelistener.removed.md b/docs/gitbook/api/bullmq.queuelistener.removed.md deleted file mode 100644 index 13e1235faf..0000000000 --- a/docs/gitbook/api/bullmq.queuelistener.removed.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueListener](./bullmq.queuelistener.md) > [removed](./bullmq.queuelistener.removed.md) - -## QueueListener.removed property - -Listen to 'removed' event. - -This event is triggered when a job is removed. - -Signature: - -```typescript -removed: (job: Job) => void; -``` diff --git a/docs/gitbook/api/bullmq.queuelistener.resumed.md b/docs/gitbook/api/bullmq.queuelistener.resumed.md deleted file mode 100644 index fe3f544946..0000000000 --- a/docs/gitbook/api/bullmq.queuelistener.resumed.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueListener](./bullmq.queuelistener.md) > [resumed](./bullmq.queuelistener.resumed.md) - -## QueueListener.resumed property - -Listen to 'resumed' event. - -This event is triggered when the queue is resumed. - -Signature: - -```typescript -resumed: () => void; -``` diff --git a/docs/gitbook/api/bullmq.queuelistener.waiting.md b/docs/gitbook/api/bullmq.queuelistener.waiting.md deleted file mode 100644 index 7b17d46fb9..0000000000 --- a/docs/gitbook/api/bullmq.queuelistener.waiting.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueListener](./bullmq.queuelistener.md) > [waiting](./bullmq.queuelistener.waiting.md) - -## QueueListener.waiting property - -Listen to 'waiting' event. - -This event is triggered when the queue creates a new job. - -Signature: - -```typescript -waiting: (job: Job) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueoptions.defaultjoboptions.md b/docs/gitbook/api/bullmq.queueoptions.defaultjoboptions.md deleted file mode 100644 index 2563379503..0000000000 --- a/docs/gitbook/api/bullmq.queueoptions.defaultjoboptions.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueOptions](./bullmq.queueoptions.md) > [defaultJobOptions](./bullmq.queueoptions.defaultjoboptions.md) - -## QueueOptions.defaultJobOptions property - -Signature: - -```typescript -defaultJobOptions?: JobsOptions; -``` diff --git a/docs/gitbook/api/bullmq.queueoptions.limiter.md b/docs/gitbook/api/bullmq.queueoptions.limiter.md deleted file mode 100644 index dc70f0af2a..0000000000 --- a/docs/gitbook/api/bullmq.queueoptions.limiter.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueOptions](./bullmq.queueoptions.md) > [limiter](./bullmq.queueoptions.limiter.md) - -## QueueOptions.limiter property - -Options for the rate limiter. - -Signature: - -```typescript -limiter?: { - groupKey: string; - }; -``` diff --git a/docs/gitbook/api/bullmq.queueoptions.md b/docs/gitbook/api/bullmq.queueoptions.md deleted file mode 100644 index 646effd278..0000000000 --- a/docs/gitbook/api/bullmq.queueoptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueOptions](./bullmq.queueoptions.md) - -## QueueOptions interface - -Options for the Queue class. - -Signature: - -```typescript -export interface QueueOptions extends QueueBaseOptions -``` -Extends: [QueueBaseOptions](./bullmq.queuebaseoptions.md) - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [defaultJobOptions?](./bullmq.queueoptions.defaultjoboptions.md) | [JobsOptions](./bullmq.jobsoptions.md) | (Optional) | -| [limiter?](./bullmq.queueoptions.limiter.md) | { groupKey: string; } | (Optional) Options for the rate limiter. | -| [streams?](./bullmq.queueoptions.streams.md) | { events: { maxLen: number; }; } | (Optional) Options for the streams used internally in BullMQ. | - diff --git a/docs/gitbook/api/bullmq.queueoptions.streams.md b/docs/gitbook/api/bullmq.queueoptions.streams.md deleted file mode 100644 index 8a2b812e7c..0000000000 --- a/docs/gitbook/api/bullmq.queueoptions.streams.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueOptions](./bullmq.queueoptions.md) > [streams](./bullmq.queueoptions.streams.md) - -## QueueOptions.streams property - -Options for the streams used internally in BullMQ. - -Signature: - -```typescript -streams?: { - events: { - maxLen: number; - }; - }; -``` diff --git a/docs/gitbook/api/bullmq.queuescheduler._constructor_.md b/docs/gitbook/api/bullmq.queuescheduler._constructor_.md deleted file mode 100644 index bfed4d219b..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduler._constructor_.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueScheduler](./bullmq.queuescheduler.md) > [(constructor)](./bullmq.queuescheduler._constructor_.md) - -## QueueScheduler.(constructor) - -Constructs a new instance of the `QueueScheduler` class - -Signature: - -```typescript -constructor(name: string, { connection, autorun, ...opts }?: QueueSchedulerOptions, Connection?: typeof RedisConnection); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | -| { connection, autorun, ...opts } | [QueueSchedulerOptions](./bullmq.queuescheduleroptions.md) | | -| Connection | typeof [RedisConnection](./bullmq.redisconnection.md) | | - diff --git a/docs/gitbook/api/bullmq.queuescheduler.close.md b/docs/gitbook/api/bullmq.queuescheduler.close.md deleted file mode 100644 index 46332e50fd..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduler.close.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueScheduler](./bullmq.queuescheduler.md) > [close](./bullmq.queuescheduler.close.md) - -## QueueScheduler.close() method - -Signature: - -```typescript -close(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queuescheduler.emit.md b/docs/gitbook/api/bullmq.queuescheduler.emit.md deleted file mode 100644 index 045cad4e09..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduler.emit.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueScheduler](./bullmq.queuescheduler.md) > [emit](./bullmq.queuescheduler.emit.md) - -## QueueScheduler.emit() method - -Signature: - -```typescript -emit(event: U, ...args: Parameters): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| args | Parameters<[QueueSchedulerListener](./bullmq.queueschedulerlistener.md)\[U\]> | | - -Returns: - -boolean - diff --git a/docs/gitbook/api/bullmq.queuescheduler.isrunning.md b/docs/gitbook/api/bullmq.queuescheduler.isrunning.md deleted file mode 100644 index ab4eaf8509..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduler.isrunning.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueScheduler](./bullmq.queuescheduler.md) > [isRunning](./bullmq.queuescheduler.isrunning.md) - -## QueueScheduler.isRunning() method - -Signature: - -```typescript -isRunning(): boolean; -``` -Returns: - -boolean - diff --git a/docs/gitbook/api/bullmq.queuescheduler.md b/docs/gitbook/api/bullmq.queuescheduler.md deleted file mode 100644 index 7cc3f82da9..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduler.md +++ /dev/null @@ -1,37 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueScheduler](./bullmq.queuescheduler.md) - -## QueueScheduler class - -This class is just used for some automatic bookkeeping of the queue, such as updating the delay set as well as moving stalled jobs back to the waiting list. - -Jobs are checked for stallness once every "visibility window" seconds. Jobs are then marked as candidates for being stalled, in the next check, the candidates are marked as stalled and moved to wait. Workers need to clean the candidate list with the jobs that they are working on, failing to update the list results in the job ending being stalled. - -This class requires a dedicated redis connection, and at least one is needed to be running at a given time, otherwise delays, stalled jobs, retries, repeatable jobs, etc, will not work correctly or at all. - -Signature: - -```typescript -export declare class QueueScheduler extends QueueBase -``` -Extends: [QueueBase](./bullmq.queuebase.md) - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(name, { connection, autorun, ...opts }, Connection)](./bullmq.queuescheduler._constructor_.md) | | Constructs a new instance of the QueueScheduler class | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [close()](./bullmq.queuescheduler.close.md) | | | -| [emit(event, args)](./bullmq.queuescheduler.emit.md) | | | -| [isRunning()](./bullmq.queuescheduler.isrunning.md) | | | -| [off(eventName, listener)](./bullmq.queuescheduler.off.md) | | | -| [on(event, listener)](./bullmq.queuescheduler.on.md) | | | -| [once(event, listener)](./bullmq.queuescheduler.once.md) | | | -| [run()](./bullmq.queuescheduler.run.md) | | | - diff --git a/docs/gitbook/api/bullmq.queuescheduler.off.md b/docs/gitbook/api/bullmq.queuescheduler.off.md deleted file mode 100644 index b37f8614df..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduler.off.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueScheduler](./bullmq.queuescheduler.md) > [off](./bullmq.queuescheduler.off.md) - -## QueueScheduler.off() method - -Signature: - -```typescript -off(eventName: U, listener: QueueSchedulerListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| eventName | U | | -| listener | [QueueSchedulerListener](./bullmq.queueschedulerlistener.md)\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queuescheduler.on.md b/docs/gitbook/api/bullmq.queuescheduler.on.md deleted file mode 100644 index 12c4f63056..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduler.on.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueScheduler](./bullmq.queuescheduler.md) > [on](./bullmq.queuescheduler.on.md) - -## QueueScheduler.on() method - -Signature: - -```typescript -on(event: U, listener: QueueSchedulerListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| listener | [QueueSchedulerListener](./bullmq.queueschedulerlistener.md)\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queuescheduler.once.md b/docs/gitbook/api/bullmq.queuescheduler.once.md deleted file mode 100644 index 3381047aff..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduler.once.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueScheduler](./bullmq.queuescheduler.md) > [once](./bullmq.queuescheduler.once.md) - -## QueueScheduler.once() method - -Signature: - -```typescript -once(event: U, listener: QueueSchedulerListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| listener | [QueueSchedulerListener](./bullmq.queueschedulerlistener.md)\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.queuescheduler.run.md b/docs/gitbook/api/bullmq.queuescheduler.run.md deleted file mode 100644 index ba3ed57798..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduler.run.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueScheduler](./bullmq.queuescheduler.md) > [run](./bullmq.queuescheduler.run.md) - -## QueueScheduler.run() method - -Signature: - -```typescript -run(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.queueschedulerlistener.failed.md b/docs/gitbook/api/bullmq.queueschedulerlistener.failed.md deleted file mode 100644 index e78a36dc9b..0000000000 --- a/docs/gitbook/api/bullmq.queueschedulerlistener.failed.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueSchedulerListener](./bullmq.queueschedulerlistener.md) > [failed](./bullmq.queueschedulerlistener.failed.md) - -## QueueSchedulerListener.failed property - -Listen to 'failed' event. - -This event is triggered when a job has thrown an exception. - -Signature: - -```typescript -failed: (jobId: string, failedReason: Error, prev: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queueschedulerlistener.md b/docs/gitbook/api/bullmq.queueschedulerlistener.md deleted file mode 100644 index 68f5c49c23..0000000000 --- a/docs/gitbook/api/bullmq.queueschedulerlistener.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueSchedulerListener](./bullmq.queueschedulerlistener.md) - -## QueueSchedulerListener interface - -Signature: - -```typescript -export interface QueueSchedulerListener -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [failed](./bullmq.queueschedulerlistener.failed.md) | (jobId: string, failedReason: Error, prev: string) => void | Listen to 'failed' event.This event is triggered when a job has thrown an exception. | -| [stalled](./bullmq.queueschedulerlistener.stalled.md) | (jobId: string, prev: string) => void | Listen to 'stalled' event.This event is triggered when a job gets stalled. | - diff --git a/docs/gitbook/api/bullmq.queueschedulerlistener.stalled.md b/docs/gitbook/api/bullmq.queueschedulerlistener.stalled.md deleted file mode 100644 index 1716035f24..0000000000 --- a/docs/gitbook/api/bullmq.queueschedulerlistener.stalled.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueSchedulerListener](./bullmq.queueschedulerlistener.md) > [stalled](./bullmq.queueschedulerlistener.stalled.md) - -## QueueSchedulerListener.stalled property - -Listen to 'stalled' event. - -This event is triggered when a job gets stalled. - -Signature: - -```typescript -stalled: (jobId: string, prev: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.queuescheduleroptions.autorun.md b/docs/gitbook/api/bullmq.queuescheduleroptions.autorun.md deleted file mode 100644 index f089baf62f..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduleroptions.autorun.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueSchedulerOptions](./bullmq.queuescheduleroptions.md) > [autorun](./bullmq.queuescheduleroptions.autorun.md) - -## QueueSchedulerOptions.autorun property - -Condition to start scheduler at instance creation. - -Signature: - -```typescript -autorun?: boolean; -``` diff --git a/docs/gitbook/api/bullmq.queuescheduleroptions.maxstalledcount.md b/docs/gitbook/api/bullmq.queuescheduleroptions.maxstalledcount.md deleted file mode 100644 index 8f7335d728..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduleroptions.maxstalledcount.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueSchedulerOptions](./bullmq.queuescheduleroptions.md) > [maxStalledCount](./bullmq.queuescheduleroptions.maxstalledcount.md) - -## QueueSchedulerOptions.maxStalledCount property - -Amount of times a job can be recovered from a stalled state to the `wait` state. If this is exceeded, the job is moved to `failed`. - -Signature: - -```typescript -maxStalledCount?: number; -``` diff --git a/docs/gitbook/api/bullmq.queuescheduleroptions.md b/docs/gitbook/api/bullmq.queuescheduleroptions.md deleted file mode 100644 index 756b2203e1..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduleroptions.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueSchedulerOptions](./bullmq.queuescheduleroptions.md) - -## QueueSchedulerOptions interface - -Options for customizing the behaviour of the scheduler. - -Signature: - -```typescript -export interface QueueSchedulerOptions extends QueueBaseOptions -``` -Extends: [QueueBaseOptions](./bullmq.queuebaseoptions.md) - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [autorun?](./bullmq.queuescheduleroptions.autorun.md) | boolean | (Optional) Condition to start scheduler at instance creation. | -| [maxStalledCount?](./bullmq.queuescheduleroptions.maxstalledcount.md) | number | (Optional) Amount of times a job can be recovered from a stalled state to the wait state. If this is exceeded, the job is moved to failed. | -| [stalledInterval?](./bullmq.queuescheduleroptions.stalledinterval.md) | number | (Optional) Number of milliseconds between stallness checks. | - diff --git a/docs/gitbook/api/bullmq.queuescheduleroptions.stalledinterval.md b/docs/gitbook/api/bullmq.queuescheduleroptions.stalledinterval.md deleted file mode 100644 index bad3ec880d..0000000000 --- a/docs/gitbook/api/bullmq.queuescheduleroptions.stalledinterval.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [QueueSchedulerOptions](./bullmq.queuescheduleroptions.md) > [stalledInterval](./bullmq.queuescheduleroptions.stalledinterval.md) - -## QueueSchedulerOptions.stalledInterval property - -Number of milliseconds between stallness checks. - -Signature: - -```typescript -stalledInterval?: number; -``` diff --git a/docs/gitbook/api/bullmq.ratelimiteroptions.duration.md b/docs/gitbook/api/bullmq.ratelimiteroptions.duration.md deleted file mode 100644 index a8ff0b1787..0000000000 --- a/docs/gitbook/api/bullmq.ratelimiteroptions.duration.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RateLimiterOptions](./bullmq.ratelimiteroptions.md) > [duration](./bullmq.ratelimiteroptions.duration.md) - -## RateLimiterOptions.duration property - -Time in milliseconds. During this time, a maximum of `max` jobs will be processed. - -Signature: - -```typescript -duration: number; -``` diff --git a/docs/gitbook/api/bullmq.ratelimiteroptions.groupkey.md b/docs/gitbook/api/bullmq.ratelimiteroptions.groupkey.md deleted file mode 100644 index 01c94c2797..0000000000 --- a/docs/gitbook/api/bullmq.ratelimiteroptions.groupkey.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RateLimiterOptions](./bullmq.ratelimiteroptions.md) > [groupKey](./bullmq.ratelimiteroptions.groupkey.md) - -## RateLimiterOptions.groupKey property - -It is possible to define a rate limiter based on group keys, for example you may want to have a rate limiter per customer instead of a global rate limiter for all customers - -Signature: - -```typescript -groupKey?: string; -``` diff --git a/docs/gitbook/api/bullmq.ratelimiteroptions.max.md b/docs/gitbook/api/bullmq.ratelimiteroptions.max.md deleted file mode 100644 index def223b00d..0000000000 --- a/docs/gitbook/api/bullmq.ratelimiteroptions.max.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RateLimiterOptions](./bullmq.ratelimiteroptions.md) > [max](./bullmq.ratelimiteroptions.max.md) - -## RateLimiterOptions.max property - -Max number of jobs to process in the time period specified in `duration`. - -Signature: - -```typescript -max: number; -``` diff --git a/docs/gitbook/api/bullmq.ratelimiteroptions.md b/docs/gitbook/api/bullmq.ratelimiteroptions.md deleted file mode 100644 index e98328de2c..0000000000 --- a/docs/gitbook/api/bullmq.ratelimiteroptions.md +++ /dev/null @@ -1,21 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RateLimiterOptions](./bullmq.ratelimiteroptions.md) - -## RateLimiterOptions interface - -Signature: - -```typescript -export interface RateLimiterOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [duration](./bullmq.ratelimiteroptions.duration.md) | number | Time in milliseconds. During this time, a maximum of max jobs will be processed. | -| [groupKey?](./bullmq.ratelimiteroptions.groupkey.md) | string | (Optional) It is possible to define a rate limiter based on group keys, for example you may want to have a rate limiter per customer instead of a global rate limiter for all customers | -| [max](./bullmq.ratelimiteroptions.max.md) | number | Max number of jobs to process in the time period specified in duration. | -| [workerDelay?](./bullmq.ratelimiteroptions.workerdelay.md) | boolean | (Optional) This option enables a heuristic so that when a queue is heavily rete limited, it delays the workers so that they do not try to pick jobs when there is no point in doing so. Note: It is not recommended to use this option when using groupKeys unless you have a big amount of workers since you may be delaying workers that could pick jobs in groups that have not been rate limited. | - diff --git a/docs/gitbook/api/bullmq.ratelimiteroptions.workerdelay.md b/docs/gitbook/api/bullmq.ratelimiteroptions.workerdelay.md deleted file mode 100644 index 409eaeeaaa..0000000000 --- a/docs/gitbook/api/bullmq.ratelimiteroptions.workerdelay.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RateLimiterOptions](./bullmq.ratelimiteroptions.md) > [workerDelay](./bullmq.ratelimiteroptions.workerdelay.md) - -## RateLimiterOptions.workerDelay property - -This option enables a heuristic so that when a queue is heavily rete limited, it delays the workers so that they do not try to pick jobs when there is no point in doing so. Note: It is not recommended to use this option when using groupKeys unless you have a big amount of workers since you may be delaying workers that could pick jobs in groups that have not been rate limited. - -Signature: - -```typescript -workerDelay?: boolean; -``` diff --git a/docs/gitbook/api/bullmq.raw2jobdata.md b/docs/gitbook/api/bullmq.raw2jobdata.md deleted file mode 100644 index 5b060d817a..0000000000 --- a/docs/gitbook/api/bullmq.raw2jobdata.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [raw2jobData](./bullmq.raw2jobdata.md) - -## raw2jobData() function - -Signature: - -```typescript -export declare function raw2jobData(raw: any[]): [JobJsonRaw | number, string?] | []; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| raw | any\[\] | | - -Returns: - -\[[JobJsonRaw](./bullmq.jobjsonraw.md) \| number, string?\] \| \[\] - diff --git a/docs/gitbook/api/bullmq.redisclient.md b/docs/gitbook/api/bullmq.redisclient.md deleted file mode 100644 index 752e06721a..0000000000 --- a/docs/gitbook/api/bullmq.redisclient.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisClient](./bullmq.redisclient.md) - -## RedisClient type - -Signature: - -```typescript -export declare type RedisClient = Redis | Cluster; -``` diff --git a/docs/gitbook/api/bullmq.redisconnection._client.md b/docs/gitbook/api/bullmq.redisconnection._client.md deleted file mode 100644 index 9372b53908..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection._client.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) > [\_client](./bullmq.redisconnection._client.md) - -## RedisConnection.\_client property - -Signature: - -```typescript -protected _client: RedisClient; -``` diff --git a/docs/gitbook/api/bullmq.redisconnection._constructor_.md b/docs/gitbook/api/bullmq.redisconnection._constructor_.md deleted file mode 100644 index fc40bc91f0..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection._constructor_.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) > [(constructor)](./bullmq.redisconnection._constructor_.md) - -## RedisConnection.(constructor) - -Constructs a new instance of the `RedisConnection` class - -Signature: - -```typescript -constructor(opts?: ConnectionOptions, shared?: boolean, blocking?: boolean); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| opts | [ConnectionOptions](./bullmq.connectionoptions.md) | | -| shared | boolean | | -| blocking | boolean | | - diff --git a/docs/gitbook/api/bullmq.redisconnection.client.md b/docs/gitbook/api/bullmq.redisconnection.client.md deleted file mode 100644 index 2b3e275174..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection.client.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) > [client](./bullmq.redisconnection.client.md) - -## RedisConnection.client property - -Signature: - -```typescript -get client(): Promise; -``` diff --git a/docs/gitbook/api/bullmq.redisconnection.close.md b/docs/gitbook/api/bullmq.redisconnection.close.md deleted file mode 100644 index 624baa3678..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection.close.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) > [close](./bullmq.redisconnection.close.md) - -## RedisConnection.close() method - -Signature: - -```typescript -close(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.redisconnection.disconnect.md b/docs/gitbook/api/bullmq.redisconnection.disconnect.md deleted file mode 100644 index 2b41cf13f8..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection.disconnect.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) > [disconnect](./bullmq.redisconnection.disconnect.md) - -## RedisConnection.disconnect() method - -Signature: - -```typescript -disconnect(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.redisconnection.loadcommands.md b/docs/gitbook/api/bullmq.redisconnection.loadcommands.md deleted file mode 100644 index 340913b4e1..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection.loadcommands.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) > [loadCommands](./bullmq.redisconnection.loadcommands.md) - -## RedisConnection.loadCommands() method - -Signature: - -```typescript -protected loadCommands(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.redisconnection.md b/docs/gitbook/api/bullmq.redisconnection.md deleted file mode 100644 index 1cbf94aa44..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection.md +++ /dev/null @@ -1,38 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) - -## RedisConnection class - -Signature: - -```typescript -export declare class RedisConnection extends EventEmitter -``` -Extends: EventEmitter - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(opts, shared, blocking)](./bullmq.redisconnection._constructor_.md) | | Constructs a new instance of the RedisConnection class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [\_client](./bullmq.redisconnection._client.md) | | [RedisClient](./bullmq.redisclient.md) | | -| [client](./bullmq.redisconnection.client.md) | | Promise<[RedisClient](./bullmq.redisclient.md)> | | -| [minimumVersion](./bullmq.redisconnection.minimumversion.md) | static | string | | -| [redisVersion](./bullmq.redisconnection.redisversion.md) | | string | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [close()](./bullmq.redisconnection.close.md) | | | -| [disconnect()](./bullmq.redisconnection.disconnect.md) | | | -| [loadCommands()](./bullmq.redisconnection.loadcommands.md) | | | -| [reconnect()](./bullmq.redisconnection.reconnect.md) | | | -| [waitUntilReady(client)](./bullmq.redisconnection.waituntilready.md) | static | Waits for a redis client to be ready. | - diff --git a/docs/gitbook/api/bullmq.redisconnection.minimumversion.md b/docs/gitbook/api/bullmq.redisconnection.minimumversion.md deleted file mode 100644 index ee7c751964..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection.minimumversion.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) > [minimumVersion](./bullmq.redisconnection.minimumversion.md) - -## RedisConnection.minimumVersion property - -Signature: - -```typescript -static minimumVersion: string; -``` diff --git a/docs/gitbook/api/bullmq.redisconnection.reconnect.md b/docs/gitbook/api/bullmq.redisconnection.reconnect.md deleted file mode 100644 index 81cfe4c99c..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection.reconnect.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) > [reconnect](./bullmq.redisconnection.reconnect.md) - -## RedisConnection.reconnect() method - -Signature: - -```typescript -reconnect(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.redisconnection.redisversion.md b/docs/gitbook/api/bullmq.redisconnection.redisversion.md deleted file mode 100644 index f51d3a7782..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection.redisversion.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) > [redisVersion](./bullmq.redisconnection.redisversion.md) - -## RedisConnection.redisVersion property - -Signature: - -```typescript -get redisVersion(): string; -``` diff --git a/docs/gitbook/api/bullmq.redisconnection.waituntilready.md b/docs/gitbook/api/bullmq.redisconnection.waituntilready.md deleted file mode 100644 index 2530cda29b..0000000000 --- a/docs/gitbook/api/bullmq.redisconnection.waituntilready.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisConnection](./bullmq.redisconnection.md) > [waitUntilReady](./bullmq.redisconnection.waituntilready.md) - -## RedisConnection.waitUntilReady() method - -Waits for a redis client to be ready. - -Signature: - -```typescript -static waitUntilReady(client: RedisClient): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| client | [RedisClient](./bullmq.redisclient.md) | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.redisoptions.md b/docs/gitbook/api/bullmq.redisoptions.md deleted file mode 100644 index 6becc39755..0000000000 --- a/docs/gitbook/api/bullmq.redisoptions.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RedisOptions](./bullmq.redisoptions.md) - -## RedisOptions type - -Signature: - -```typescript -export declare type RedisOptions = IORedis.RedisOptions & BaseOptions; -``` diff --git a/docs/gitbook/api/bullmq.removeallqueuedata.md b/docs/gitbook/api/bullmq.removeallqueuedata.md deleted file mode 100644 index 652e40e68a..0000000000 --- a/docs/gitbook/api/bullmq.removeallqueuedata.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [removeAllQueueData](./bullmq.removeallqueuedata.md) - -## removeAllQueueData() function - -Signature: - -```typescript -export declare function removeAllQueueData(client: RedisClient, queueName: string, prefix?: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| client | [RedisClient](./bullmq.redisclient.md) | | -| queueName | string | | -| prefix | string | | - -Returns: - -Promise<void \| boolean> - diff --git a/docs/gitbook/api/bullmq.removedeventcallback3.md b/docs/gitbook/api/bullmq.removedeventcallback3.md deleted file mode 100644 index 11a92b6fc6..0000000000 --- a/docs/gitbook/api/bullmq.removedeventcallback3.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RemovedEventCallback3](./bullmq.removedeventcallback3.md) - -## RemovedEventCallback3 type - -Signature: - -```typescript -export declare type RemovedEventCallback3 = (job: Job) => void; -``` -References: [Job](./bullmq.job.md) - diff --git a/docs/gitbook/api/bullmq.repeat.addnextrepeatablejob.md b/docs/gitbook/api/bullmq.repeat.addnextrepeatablejob.md deleted file mode 100644 index 79aa597d7e..0000000000 --- a/docs/gitbook/api/bullmq.repeat.addnextrepeatablejob.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Repeat](./bullmq.repeat.md) > [addNextRepeatableJob](./bullmq.repeat.addnextrepeatablejob.md) - -## Repeat.addNextRepeatableJob() method - -Signature: - -```typescript -addNextRepeatableJob(name: N, data: T, opts: JobsOptions, skipCheckExists?: boolean): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | N | | -| data | T | | -| opts | [JobsOptions](./bullmq.jobsoptions.md) | | -| skipCheckExists | boolean | | - -Returns: - -Promise<[Job](./bullmq.job.md)<T, R, N>> - diff --git a/docs/gitbook/api/bullmq.repeat.getrepeatablecount.md b/docs/gitbook/api/bullmq.repeat.getrepeatablecount.md deleted file mode 100644 index f60ea37a6e..0000000000 --- a/docs/gitbook/api/bullmq.repeat.getrepeatablecount.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Repeat](./bullmq.repeat.md) > [getRepeatableCount](./bullmq.repeat.getrepeatablecount.md) - -## Repeat.getRepeatableCount() method - -Signature: - -```typescript -getRepeatableCount(): Promise; -``` -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.repeat.getrepeatablejobs.md b/docs/gitbook/api/bullmq.repeat.getrepeatablejobs.md deleted file mode 100644 index 2c6fdc01f1..0000000000 --- a/docs/gitbook/api/bullmq.repeat.getrepeatablejobs.md +++ /dev/null @@ -1,32 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Repeat](./bullmq.repeat.md) > [getRepeatableJobs](./bullmq.repeat.getrepeatablejobs.md) - -## Repeat.getRepeatableJobs() method - -Signature: - -```typescript -getRepeatableJobs(start?: number, end?: number, asc?: boolean): Promise<{ - key: string; - name: string; - id: string; - endDate: number; - tz: string; - cron: string; - next: number; - }[]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| start | number | | -| end | number | | -| asc | boolean | | - -Returns: - -Promise<{ key: string; name: string; id: string; endDate: number; tz: string; cron: string; next: number; }\[\]> - diff --git a/docs/gitbook/api/bullmq.repeat.md b/docs/gitbook/api/bullmq.repeat.md deleted file mode 100644 index be7644e7e0..0000000000 --- a/docs/gitbook/api/bullmq.repeat.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Repeat](./bullmq.repeat.md) - -## Repeat class - -Signature: - -```typescript -export declare class Repeat extends QueueBase -``` -Extends: [QueueBase](./bullmq.queuebase.md) - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [addNextRepeatableJob(name, data, opts, skipCheckExists)](./bullmq.repeat.addnextrepeatablejob.md) | | | -| [getRepeatableCount()](./bullmq.repeat.getrepeatablecount.md) | | | -| [getRepeatableJobs(start, end, asc)](./bullmq.repeat.getrepeatablejobs.md) | | | -| [removeRepeatable(name, repeat, jobId)](./bullmq.repeat.removerepeatable.md) | | | -| [removeRepeatableByKey(repeatJobKey)](./bullmq.repeat.removerepeatablebykey.md) | | | - diff --git a/docs/gitbook/api/bullmq.repeat.removerepeatable.md b/docs/gitbook/api/bullmq.repeat.removerepeatable.md deleted file mode 100644 index 1965320797..0000000000 --- a/docs/gitbook/api/bullmq.repeat.removerepeatable.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Repeat](./bullmq.repeat.md) > [removeRepeatable](./bullmq.repeat.removerepeatable.md) - -## Repeat.removeRepeatable() method - -Signature: - -```typescript -removeRepeatable(name: string, repeat: RepeatOptions, jobId?: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | -| repeat | [RepeatOptions](./bullmq.repeatoptions.md) | | -| jobId | string | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.repeat.removerepeatablebykey.md b/docs/gitbook/api/bullmq.repeat.removerepeatablebykey.md deleted file mode 100644 index 5e11a10583..0000000000 --- a/docs/gitbook/api/bullmq.repeat.removerepeatablebykey.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Repeat](./bullmq.repeat.md) > [removeRepeatableByKey](./bullmq.repeat.removerepeatablebykey.md) - -## Repeat.removeRepeatableByKey() method - -Signature: - -```typescript -removeRepeatableByKey(repeatJobKey: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| repeatJobKey | string | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.repeatoptions.count.md b/docs/gitbook/api/bullmq.repeatoptions.count.md deleted file mode 100644 index d7d66e28ce..0000000000 --- a/docs/gitbook/api/bullmq.repeatoptions.count.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RepeatOptions](./bullmq.repeatoptions.md) > [count](./bullmq.repeatoptions.count.md) - -## RepeatOptions.count property - -The start value for the repeat iteration count. - -Signature: - -```typescript -count?: number; -``` diff --git a/docs/gitbook/api/bullmq.repeatoptions.cron.md b/docs/gitbook/api/bullmq.repeatoptions.cron.md deleted file mode 100644 index 1dab2d21e0..0000000000 --- a/docs/gitbook/api/bullmq.repeatoptions.cron.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RepeatOptions](./bullmq.repeatoptions.md) > [cron](./bullmq.repeatoptions.cron.md) - -## RepeatOptions.cron property - -A cron pattern - -Signature: - -```typescript -cron?: string; -``` diff --git a/docs/gitbook/api/bullmq.repeatoptions.every.md b/docs/gitbook/api/bullmq.repeatoptions.every.md deleted file mode 100644 index c457f1ce16..0000000000 --- a/docs/gitbook/api/bullmq.repeatoptions.every.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RepeatOptions](./bullmq.repeatoptions.md) > [every](./bullmq.repeatoptions.every.md) - -## RepeatOptions.every property - -Repeat after this amount of milliseconds (`cron` setting cannot be used together with this setting.) - -Signature: - -```typescript -every?: number; -``` diff --git a/docs/gitbook/api/bullmq.repeatoptions.immediately.md b/docs/gitbook/api/bullmq.repeatoptions.immediately.md deleted file mode 100644 index 90360a6fe5..0000000000 --- a/docs/gitbook/api/bullmq.repeatoptions.immediately.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RepeatOptions](./bullmq.repeatoptions.md) > [immediately](./bullmq.repeatoptions.immediately.md) - -## RepeatOptions.immediately property - -Repeated job should start right now ( work only with every settings) - -Signature: - -```typescript -immediately?: boolean; -``` diff --git a/docs/gitbook/api/bullmq.repeatoptions.jobid.md b/docs/gitbook/api/bullmq.repeatoptions.jobid.md deleted file mode 100644 index b08e44674e..0000000000 --- a/docs/gitbook/api/bullmq.repeatoptions.jobid.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RepeatOptions](./bullmq.repeatoptions.md) > [jobId](./bullmq.repeatoptions.jobid.md) - -## RepeatOptions.jobId property - -Signature: - -```typescript -jobId?: string; -``` diff --git a/docs/gitbook/api/bullmq.repeatoptions.limit.md b/docs/gitbook/api/bullmq.repeatoptions.limit.md deleted file mode 100644 index 4127afa265..0000000000 --- a/docs/gitbook/api/bullmq.repeatoptions.limit.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RepeatOptions](./bullmq.repeatoptions.md) > [limit](./bullmq.repeatoptions.limit.md) - -## RepeatOptions.limit property - -Number of times the job should repeat at max. - -Signature: - -```typescript -limit?: number; -``` diff --git a/docs/gitbook/api/bullmq.repeatoptions.md b/docs/gitbook/api/bullmq.repeatoptions.md deleted file mode 100644 index ac2e1fabba..0000000000 --- a/docs/gitbook/api/bullmq.repeatoptions.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RepeatOptions](./bullmq.repeatoptions.md) - -## RepeatOptions interface - -Settings for repeatable jobs - -Signature: - -```typescript -export interface RepeatOptions extends Omit -``` -Extends: Omit<ParserOptions, 'iterator'> - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [count?](./bullmq.repeatoptions.count.md) | number | (Optional) The start value for the repeat iteration count. | -| [cron?](./bullmq.repeatoptions.cron.md) | string | (Optional) A cron pattern | -| [every?](./bullmq.repeatoptions.every.md) | number | (Optional) Repeat after this amount of milliseconds (cron setting cannot be used together with this setting.) | -| [immediately?](./bullmq.repeatoptions.immediately.md) | boolean | (Optional) Repeated job should start right now ( work only with every settings) | -| [jobId?](./bullmq.repeatoptions.jobid.md) | string | (Optional) | -| [limit?](./bullmq.repeatoptions.limit.md) | number | (Optional) Number of times the job should repeat at max. | -| [offset?](./bullmq.repeatoptions.offset.md) | number | (Optional) | -| [prevMillis?](./bullmq.repeatoptions.prevmillis.md) | number | (Optional) | - diff --git a/docs/gitbook/api/bullmq.repeatoptions.offset.md b/docs/gitbook/api/bullmq.repeatoptions.offset.md deleted file mode 100644 index 9f66edda28..0000000000 --- a/docs/gitbook/api/bullmq.repeatoptions.offset.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RepeatOptions](./bullmq.repeatoptions.md) > [offset](./bullmq.repeatoptions.offset.md) - -## RepeatOptions.offset property - -Signature: - -```typescript -offset?: number; -``` diff --git a/docs/gitbook/api/bullmq.repeatoptions.prevmillis.md b/docs/gitbook/api/bullmq.repeatoptions.prevmillis.md deleted file mode 100644 index 449987e7a7..0000000000 --- a/docs/gitbook/api/bullmq.repeatoptions.prevmillis.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [RepeatOptions](./bullmq.repeatoptions.md) > [prevMillis](./bullmq.repeatoptions.prevmillis.md) - -## RepeatOptions.prevMillis property - -Signature: - -```typescript -prevMillis?: number; -``` diff --git a/docs/gitbook/api/bullmq.sandboxedjob.data.md b/docs/gitbook/api/bullmq.sandboxedjob.data.md deleted file mode 100644 index 97d6fc5813..0000000000 --- a/docs/gitbook/api/bullmq.sandboxedjob.data.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [SandboxedJob](./bullmq.sandboxedjob.md) > [data](./bullmq.sandboxedjob.data.md) - -## SandboxedJob.data property - -Signature: - -```typescript -data: T; -``` diff --git a/docs/gitbook/api/bullmq.sandboxedjob.log.md b/docs/gitbook/api/bullmq.sandboxedjob.log.md deleted file mode 100644 index 0fc6bb20fa..0000000000 --- a/docs/gitbook/api/bullmq.sandboxedjob.log.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [SandboxedJob](./bullmq.sandboxedjob.md) > [log](./bullmq.sandboxedjob.log.md) - -## SandboxedJob.log property - -Signature: - -```typescript -log: (row: any) => void; -``` diff --git a/docs/gitbook/api/bullmq.sandboxedjob.md b/docs/gitbook/api/bullmq.sandboxedjob.md deleted file mode 100644 index 0677b46e98..0000000000 --- a/docs/gitbook/api/bullmq.sandboxedjob.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [SandboxedJob](./bullmq.sandboxedjob.md) - -## SandboxedJob interface - -Signature: - -```typescript -export interface SandboxedJob extends Omit -``` -Extends: Omit<[JobJson](./bullmq.jobjson.md), 'data' \| 'opts' \| 'progress' \| 'returnValue'> - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [data](./bullmq.sandboxedjob.data.md) | T | | -| [log](./bullmq.sandboxedjob.log.md) | (row: any) => void | | -| [opts](./bullmq.sandboxedjob.opts.md) | [JobsOptions](./bullmq.jobsoptions.md) | | -| [progress](./bullmq.sandboxedjob.progress.md) | (() => object \| number) \| ((value: object \| number) => Promise<void>) | | -| [returnValue](./bullmq.sandboxedjob.returnvalue.md) | R | | -| [updateProgress](./bullmq.sandboxedjob.updateprogress.md) | (value: object \| number) => Promise<void> | | - diff --git a/docs/gitbook/api/bullmq.sandboxedjob.opts.md b/docs/gitbook/api/bullmq.sandboxedjob.opts.md deleted file mode 100644 index 8be0360063..0000000000 --- a/docs/gitbook/api/bullmq.sandboxedjob.opts.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [SandboxedJob](./bullmq.sandboxedjob.md) > [opts](./bullmq.sandboxedjob.opts.md) - -## SandboxedJob.opts property - -Signature: - -```typescript -opts: JobsOptions; -``` diff --git a/docs/gitbook/api/bullmq.sandboxedjob.progress.md b/docs/gitbook/api/bullmq.sandboxedjob.progress.md deleted file mode 100644 index 3360e6c39f..0000000000 --- a/docs/gitbook/api/bullmq.sandboxedjob.progress.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [SandboxedJob](./bullmq.sandboxedjob.md) > [progress](./bullmq.sandboxedjob.progress.md) - -## SandboxedJob.progress property - -Signature: - -```typescript -progress: (() => object | number) | ((value: object | number) => Promise); -``` diff --git a/docs/gitbook/api/bullmq.sandboxedjob.returnvalue.md b/docs/gitbook/api/bullmq.sandboxedjob.returnvalue.md deleted file mode 100644 index b771a82ca9..0000000000 --- a/docs/gitbook/api/bullmq.sandboxedjob.returnvalue.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [SandboxedJob](./bullmq.sandboxedjob.md) > [returnValue](./bullmq.sandboxedjob.returnvalue.md) - -## SandboxedJob.returnValue property - -Signature: - -```typescript -returnValue: R; -``` diff --git a/docs/gitbook/api/bullmq.sandboxedjob.updateprogress.md b/docs/gitbook/api/bullmq.sandboxedjob.updateprogress.md deleted file mode 100644 index 731d0a3b0e..0000000000 --- a/docs/gitbook/api/bullmq.sandboxedjob.updateprogress.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [SandboxedJob](./bullmq.sandboxedjob.md) > [updateProgress](./bullmq.sandboxedjob.updateprogress.md) - -## SandboxedJob.updateProgress property - -Signature: - -```typescript -updateProgress: (value: object | number) => Promise; -``` diff --git a/docs/gitbook/api/bullmq.sandboxedjobprocessor.md b/docs/gitbook/api/bullmq.sandboxedjobprocessor.md deleted file mode 100644 index f41dd2bcf3..0000000000 --- a/docs/gitbook/api/bullmq.sandboxedjobprocessor.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [SandboxedJobProcessor](./bullmq.sandboxedjobprocessor.md) - -## SandboxedJobProcessor type - -Signature: - -```typescript -export declare type SandboxedJobProcessor = ((job: SandboxedJob) => R | PromiseLike) | ((job: SandboxedJob, callback: (error: unknown, result: R) => void) => void); -``` -References: [SandboxedJob](./bullmq.sandboxedjob.md) - diff --git a/docs/gitbook/api/bullmq.scriptloader._constructor_.md b/docs/gitbook/api/bullmq.scriptloader._constructor_.md deleted file mode 100644 index 948e775609..0000000000 --- a/docs/gitbook/api/bullmq.scriptloader._constructor_.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoader](./bullmq.scriptloader.md) > [(constructor)](./bullmq.scriptloader._constructor_.md) - -## ScriptLoader.(constructor) - -Constructs a new instance of the `ScriptLoader` class - -Signature: - -```typescript -constructor(); -``` diff --git a/docs/gitbook/api/bullmq.scriptloader.addpathmapping.md b/docs/gitbook/api/bullmq.scriptloader.addpathmapping.md deleted file mode 100644 index b73d3ca245..0000000000 --- a/docs/gitbook/api/bullmq.scriptloader.addpathmapping.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoader](./bullmq.scriptloader.md) > [addPathMapping](./bullmq.scriptloader.addpathmapping.md) - -## ScriptLoader.addPathMapping() method - -Add a script path mapping. Allows includes of the form "/utils.lua" where `includes` is a user defined path - -Signature: - -```typescript -addPathMapping(name: string, mappedPath: string): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | the name of the mapping. Note: do not include angle brackets | -| mappedPath | string | if a relative path is passed, it's relative to the \*caller\* of this function. Mapped paths are also accepted, e.g. "\~/server/scripts/lua" or "/includes" | - -Returns: - -void - diff --git a/docs/gitbook/api/bullmq.scriptloader.clearcache.md b/docs/gitbook/api/bullmq.scriptloader.clearcache.md deleted file mode 100644 index 7d0a036e22..0000000000 --- a/docs/gitbook/api/bullmq.scriptloader.clearcache.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoader](./bullmq.scriptloader.md) > [clearCache](./bullmq.scriptloader.clearcache.md) - -## ScriptLoader.clearCache() method - -Clears the command cache - -Signature: - -```typescript -clearCache(): void; -``` -Returns: - -void - diff --git a/docs/gitbook/api/bullmq.scriptloader.interpolate.md b/docs/gitbook/api/bullmq.scriptloader.interpolate.md deleted file mode 100644 index a88a7c725a..0000000000 --- a/docs/gitbook/api/bullmq.scriptloader.interpolate.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoader](./bullmq.scriptloader.md) > [interpolate](./bullmq.scriptloader.interpolate.md) - -## ScriptLoader.interpolate() method - -Construct the final version of a file by interpolating its includes in dependency order. - -Signature: - -```typescript -interpolate(file: ScriptMetadata, processed?: Set): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| file | [ScriptMetadata](./bullmq.scriptmetadata.md) | the file whose content we want to construct | -| processed | Set<string> | a cache to keep track of which includes have already been processed | - -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.scriptloader.load.md b/docs/gitbook/api/bullmq.scriptloader.load.md deleted file mode 100644 index 2bb2e2eede..0000000000 --- a/docs/gitbook/api/bullmq.scriptloader.load.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoader](./bullmq.scriptloader.md) > [load](./bullmq.scriptloader.load.md) - -## ScriptLoader.load() method - -Attach all lua scripts in a given directory to a client instance - -Signature: - -```typescript -load(client: RedisClient, pathname: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| client | [RedisClient](./bullmq.redisclient.md) | redis client to attach script to | -| pathname | string | the path to the directory containing the scripts | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.scriptloader.loadcommand.md b/docs/gitbook/api/bullmq.scriptloader.loadcommand.md deleted file mode 100644 index 3429ddf8e5..0000000000 --- a/docs/gitbook/api/bullmq.scriptloader.loadcommand.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoader](./bullmq.scriptloader.md) > [loadCommand](./bullmq.scriptloader.loadcommand.md) - -## ScriptLoader.loadCommand() method - -Signature: - -```typescript -loadCommand(filename: string, cache?: Map): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| filename | string | | -| cache | Map<string, [ScriptMetadata](./bullmq.scriptmetadata.md)> | | - -Returns: - -Promise<[Command](./bullmq.command.md)> - diff --git a/docs/gitbook/api/bullmq.scriptloader.loadscripts.md b/docs/gitbook/api/bullmq.scriptloader.loadscripts.md deleted file mode 100644 index ee3fbf663b..0000000000 --- a/docs/gitbook/api/bullmq.scriptloader.loadscripts.md +++ /dev/null @@ -1,31 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoader](./bullmq.scriptloader.md) > [loadScripts](./bullmq.scriptloader.loadscripts.md) - -## ScriptLoader.loadScripts() method - -Load redis lua scripts. The name of the script must have the following format: - -cmdName-numKeys.lua - -cmdName must be in camel case format. - -For example: moveToFinish-3.lua - -Signature: - -```typescript -loadScripts(dir?: string, cache?: Map): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| dir | string | | -| cache | Map<string, [ScriptMetadata](./bullmq.scriptmetadata.md)> | | - -Returns: - -Promise<[Command](./bullmq.command.md)\[\]> - diff --git a/docs/gitbook/api/bullmq.scriptloader.md b/docs/gitbook/api/bullmq.scriptloader.md deleted file mode 100644 index de17e73d26..0000000000 --- a/docs/gitbook/api/bullmq.scriptloader.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [scriptLoader](./bullmq.scriptloader.md) - -## scriptLoader variable - -Signature: - -```typescript -scriptLoader: ScriptLoader -``` diff --git a/docs/gitbook/api/bullmq.scriptloader.parsescript.md b/docs/gitbook/api/bullmq.scriptloader.parsescript.md deleted file mode 100644 index 13a936f3fe..0000000000 --- a/docs/gitbook/api/bullmq.scriptloader.parsescript.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoader](./bullmq.scriptloader.md) > [parseScript](./bullmq.scriptloader.parsescript.md) - -## ScriptLoader.parseScript() method - -Parse a (top-level) lua script - -Signature: - -```typescript -parseScript(filename: string, content: string, cache?: Map): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| filename | string | the full path to the script | -| content | string | the content of the script | -| cache | Map<string, [ScriptMetadata](./bullmq.scriptmetadata.md)> | cache | - -Returns: - -Promise<[ScriptMetadata](./bullmq.scriptmetadata.md)> - diff --git a/docs/gitbook/api/bullmq.scriptloader.resolvepath.md b/docs/gitbook/api/bullmq.scriptloader.resolvepath.md deleted file mode 100644 index c109d3a7aa..0000000000 --- a/docs/gitbook/api/bullmq.scriptloader.resolvepath.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoader](./bullmq.scriptloader.md) > [resolvePath](./bullmq.scriptloader.resolvepath.md) - -## ScriptLoader.resolvePath() method - -Resolve the script path considering path mappings - -Signature: - -```typescript -resolvePath(scriptName: string, stack?: string[]): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| scriptName | string | the name of the script | -| stack | string\[\] | the include stack, for nicer errors | - -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.scriptloadererror._constructor_.md b/docs/gitbook/api/bullmq.scriptloadererror._constructor_.md deleted file mode 100644 index 6ef10c6adc..0000000000 --- a/docs/gitbook/api/bullmq.scriptloadererror._constructor_.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoaderError](./bullmq.scriptloadererror.md) > [(constructor)](./bullmq.scriptloadererror._constructor_.md) - -## ScriptLoaderError.(constructor) - -Constructs a new instance of the `ScriptLoaderError` class - -Signature: - -```typescript -constructor(message: string, path: string, stack?: string[], line?: number, position?: number); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| message | string | | -| path | string | | -| stack | string\[\] | | -| line | number | | -| position | number | | - diff --git a/docs/gitbook/api/bullmq.scriptloadererror.includes.md b/docs/gitbook/api/bullmq.scriptloadererror.includes.md deleted file mode 100644 index 64f0ca075f..0000000000 --- a/docs/gitbook/api/bullmq.scriptloadererror.includes.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoaderError](./bullmq.scriptloadererror.md) > [includes](./bullmq.scriptloadererror.includes.md) - -## ScriptLoaderError.includes property - -The include stack - -Signature: - -```typescript -readonly includes: string[]; -``` diff --git a/docs/gitbook/api/bullmq.scriptloadererror.line.md b/docs/gitbook/api/bullmq.scriptloadererror.line.md deleted file mode 100644 index 21a34370f9..0000000000 --- a/docs/gitbook/api/bullmq.scriptloadererror.line.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoaderError](./bullmq.scriptloadererror.md) > [line](./bullmq.scriptloadererror.line.md) - -## ScriptLoaderError.line property - -Signature: - -```typescript -readonly line: number; -``` diff --git a/docs/gitbook/api/bullmq.scriptloadererror.md b/docs/gitbook/api/bullmq.scriptloadererror.md deleted file mode 100644 index 07b2e53c8d..0000000000 --- a/docs/gitbook/api/bullmq.scriptloadererror.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoaderError](./bullmq.scriptloadererror.md) - -## ScriptLoaderError class - -Signature: - -```typescript -export declare class ScriptLoaderError extends Error -``` -Extends: Error - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(message, path, stack, line, position)](./bullmq.scriptloadererror._constructor_.md) | | Constructs a new instance of the ScriptLoaderError class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [includes](./bullmq.scriptloadererror.includes.md) | | string\[\] | The include stack | -| [line](./bullmq.scriptloadererror.line.md) | | number | | -| [path](./bullmq.scriptloadererror.path.md) | | string | | -| [position](./bullmq.scriptloadererror.position.md) | | number | | - diff --git a/docs/gitbook/api/bullmq.scriptloadererror.path.md b/docs/gitbook/api/bullmq.scriptloadererror.path.md deleted file mode 100644 index f874923ee0..0000000000 --- a/docs/gitbook/api/bullmq.scriptloadererror.path.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoaderError](./bullmq.scriptloadererror.md) > [path](./bullmq.scriptloadererror.path.md) - -## ScriptLoaderError.path property - -Signature: - -```typescript -readonly path: string; -``` diff --git a/docs/gitbook/api/bullmq.scriptloadererror.position.md b/docs/gitbook/api/bullmq.scriptloadererror.position.md deleted file mode 100644 index b3efbef623..0000000000 --- a/docs/gitbook/api/bullmq.scriptloadererror.position.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptLoaderError](./bullmq.scriptloadererror.md) > [position](./bullmq.scriptloadererror.position.md) - -## ScriptLoaderError.position property - -Signature: - -```typescript -readonly position: number; -``` diff --git a/docs/gitbook/api/bullmq.scriptmetadata.content.md b/docs/gitbook/api/bullmq.scriptmetadata.content.md deleted file mode 100644 index 238420ee90..0000000000 --- a/docs/gitbook/api/bullmq.scriptmetadata.content.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptMetadata](./bullmq.scriptmetadata.md) > [content](./bullmq.scriptmetadata.content.md) - -## ScriptMetadata.content property - -The raw script content - -Signature: - -```typescript -content: string; -``` diff --git a/docs/gitbook/api/bullmq.scriptmetadata.includes.md b/docs/gitbook/api/bullmq.scriptmetadata.includes.md deleted file mode 100644 index 612ac663b0..0000000000 --- a/docs/gitbook/api/bullmq.scriptmetadata.includes.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptMetadata](./bullmq.scriptmetadata.md) > [includes](./bullmq.scriptmetadata.includes.md) - -## ScriptMetadata.includes property - -Metadata on the scripts that this script includes - -Signature: - -```typescript -includes: ScriptMetadata[]; -``` diff --git a/docs/gitbook/api/bullmq.scriptmetadata.md b/docs/gitbook/api/bullmq.scriptmetadata.md deleted file mode 100644 index 0d6a5f745e..0000000000 --- a/docs/gitbook/api/bullmq.scriptmetadata.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptMetadata](./bullmq.scriptmetadata.md) - -## ScriptMetadata interface - -Script metadata - -Signature: - -```typescript -export interface ScriptMetadata -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [content](./bullmq.scriptmetadata.content.md) | string | The raw script content | -| [includes](./bullmq.scriptmetadata.includes.md) | [ScriptMetadata](./bullmq.scriptmetadata.md)\[\] | Metadata on the scripts that this script includes | -| [name](./bullmq.scriptmetadata.name.md) | string | Name of the script | -| [numberOfKeys?](./bullmq.scriptmetadata.numberofkeys.md) | number | (Optional) | -| [path](./bullmq.scriptmetadata.path.md) | string | The path to the script. For includes, this is the normalized path, whereas it may not be normalized for the top-level parent | -| [token](./bullmq.scriptmetadata.token.md) | string | A hash of the normalized path for easy replacement in the parent | - diff --git a/docs/gitbook/api/bullmq.scriptmetadata.name.md b/docs/gitbook/api/bullmq.scriptmetadata.name.md deleted file mode 100644 index 65782c2235..0000000000 --- a/docs/gitbook/api/bullmq.scriptmetadata.name.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptMetadata](./bullmq.scriptmetadata.md) > [name](./bullmq.scriptmetadata.name.md) - -## ScriptMetadata.name property - -Name of the script - -Signature: - -```typescript -name: string; -``` diff --git a/docs/gitbook/api/bullmq.scriptmetadata.numberofkeys.md b/docs/gitbook/api/bullmq.scriptmetadata.numberofkeys.md deleted file mode 100644 index 63ff77785a..0000000000 --- a/docs/gitbook/api/bullmq.scriptmetadata.numberofkeys.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptMetadata](./bullmq.scriptmetadata.md) > [numberOfKeys](./bullmq.scriptmetadata.numberofkeys.md) - -## ScriptMetadata.numberOfKeys property - -Signature: - -```typescript -numberOfKeys?: number; -``` diff --git a/docs/gitbook/api/bullmq.scriptmetadata.path.md b/docs/gitbook/api/bullmq.scriptmetadata.path.md deleted file mode 100644 index 6e2c1f889b..0000000000 --- a/docs/gitbook/api/bullmq.scriptmetadata.path.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptMetadata](./bullmq.scriptmetadata.md) > [path](./bullmq.scriptmetadata.path.md) - -## ScriptMetadata.path property - -The path to the script. For includes, this is the normalized path, whereas it may not be normalized for the top-level parent - -Signature: - -```typescript -path: string; -``` diff --git a/docs/gitbook/api/bullmq.scriptmetadata.token.md b/docs/gitbook/api/bullmq.scriptmetadata.token.md deleted file mode 100644 index 7f6303209a..0000000000 --- a/docs/gitbook/api/bullmq.scriptmetadata.token.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [ScriptMetadata](./bullmq.scriptmetadata.md) > [token](./bullmq.scriptmetadata.token.md) - -## ScriptMetadata.token property - -A hash of the normalized path for easy replacement in the parent - -Signature: - -```typescript -token: string; -``` diff --git a/docs/gitbook/api/bullmq.scripts.addjob.md b/docs/gitbook/api/bullmq.scripts.addjob.md deleted file mode 100644 index dfb0f775ec..0000000000 --- a/docs/gitbook/api/bullmq.scripts.addjob.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [addJob](./bullmq.scripts.addjob.md) - -## Scripts.addJob() method - -Signature: - -```typescript -static addJob(client: RedisClient, queue: MinimalQueue, job: JobJson, opts: JobsOptions, jobId: string, parentOpts?: ParentOpts): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| client | [RedisClient](./bullmq.redisclient.md) | | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| job | [JobJson](./bullmq.jobjson.md) | | -| opts | [JobsOptions](./bullmq.jobsoptions.md) | | -| jobId | string | | -| parentOpts | [ParentOpts](./bullmq.parentopts.md) | | - -Returns: - -Promise<string> - diff --git a/docs/gitbook/api/bullmq.scripts.changedelay.md b/docs/gitbook/api/bullmq.scripts.changedelay.md deleted file mode 100644 index 18861df778..0000000000 --- a/docs/gitbook/api/bullmq.scripts.changedelay.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [changeDelay](./bullmq.scripts.changedelay.md) - -## Scripts.changeDelay() method - -Signature: - -```typescript -static changeDelay(queue: MinimalQueue, jobId: string, delay: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | -| delay | number | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.scripts.changedelayargs.md b/docs/gitbook/api/bullmq.scripts.changedelayargs.md deleted file mode 100644 index 482f7b523b..0000000000 --- a/docs/gitbook/api/bullmq.scripts.changedelayargs.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [changeDelayArgs](./bullmq.scripts.changedelayargs.md) - -## Scripts.changeDelayArgs() method - -Signature: - -```typescript -static changeDelayArgs(queue: MinimalQueue, jobId: string, timestamp: number): string[]; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | -| timestamp | number | | - -Returns: - -string\[\] - diff --git a/docs/gitbook/api/bullmq.scripts.cleanjobsinset.md b/docs/gitbook/api/bullmq.scripts.cleanjobsinset.md deleted file mode 100644 index 91389197d7..0000000000 --- a/docs/gitbook/api/bullmq.scripts.cleanjobsinset.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [cleanJobsInSet](./bullmq.scripts.cleanjobsinset.md) - -## Scripts.cleanJobsInSet() method - -Remove jobs in a specific state. - -Signature: - -```typescript -static cleanJobsInSet(queue: MinimalQueue, set: string, timestamp: number, limit?: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| set | string | | -| timestamp | number | | -| limit | number | | - -Returns: - -Promise<string\[\]> - -Id jobs from the deleted records. - diff --git a/docs/gitbook/api/bullmq.scripts.drain.md b/docs/gitbook/api/bullmq.scripts.drain.md deleted file mode 100644 index e6754bd7fc..0000000000 --- a/docs/gitbook/api/bullmq.scripts.drain.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [drain](./bullmq.scripts.drain.md) - -## Scripts.drain() method - -Signature: - -```typescript -static drain(queue: MinimalQueue, delayed: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| delayed | boolean | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.scripts.drainargs.md b/docs/gitbook/api/bullmq.scripts.drainargs.md deleted file mode 100644 index a78df26c16..0000000000 --- a/docs/gitbook/api/bullmq.scripts.drainargs.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [drainArgs](./bullmq.scripts.drainargs.md) - -## Scripts.drainArgs() method - -Signature: - -```typescript -static drainArgs(queue: MinimalQueue, delayed: boolean): (string | number)[]; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| delayed | boolean | | - -Returns: - -(string \| number)\[\] - diff --git a/docs/gitbook/api/bullmq.scripts.extendlock.md b/docs/gitbook/api/bullmq.scripts.extendlock.md deleted file mode 100644 index d506868516..0000000000 --- a/docs/gitbook/api/bullmq.scripts.extendlock.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [extendLock](./bullmq.scripts.extendlock.md) - -## Scripts.extendLock() method - -Signature: - -```typescript -static extendLock(queue: MinimalQueue, jobId: string, token: string, duration: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | -| token | string | | -| duration | number | | - -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.scripts.finishederrors.md b/docs/gitbook/api/bullmq.scripts.finishederrors.md deleted file mode 100644 index 79c56d76cf..0000000000 --- a/docs/gitbook/api/bullmq.scripts.finishederrors.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [finishedErrors](./bullmq.scripts.finishederrors.md) - -## Scripts.finishedErrors() method - -Signature: - -```typescript -static finishedErrors(code: number, jobId: string, command: string, state?: string): Error; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| code | number | | -| jobId | string | | -| command | string | | -| state | string | | - -Returns: - -Error - diff --git a/docs/gitbook/api/bullmq.scripts.getstate.md b/docs/gitbook/api/bullmq.scripts.getstate.md deleted file mode 100644 index 6ee409b8a6..0000000000 --- a/docs/gitbook/api/bullmq.scripts.getstate.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [getState](./bullmq.scripts.getstate.md) - -## Scripts.getState() method - -Signature: - -```typescript -static getState(queue: MinimalQueue, jobId: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | - -Returns: - -Promise<[JobState](./bullmq.jobstate.md) \| 'unknown'> - diff --git a/docs/gitbook/api/bullmq.scripts.isfinished.md b/docs/gitbook/api/bullmq.scripts.isfinished.md deleted file mode 100644 index d9700e4b09..0000000000 --- a/docs/gitbook/api/bullmq.scripts.isfinished.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [isFinished](./bullmq.scripts.isfinished.md) - -## Scripts.isFinished() method - -Signature: - -```typescript -static isFinished(queue: MinimalQueue, jobId: string, returnValue?: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | -| returnValue | boolean | | - -Returns: - -Promise<number \| \[number, string\]> - diff --git a/docs/gitbook/api/bullmq.scripts.isjobinlist.md b/docs/gitbook/api/bullmq.scripts.isjobinlist.md deleted file mode 100644 index 2089e87da8..0000000000 --- a/docs/gitbook/api/bullmq.scripts.isjobinlist.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [isJobInList](./bullmq.scripts.isjobinlist.md) - -## Scripts.isJobInList() method - -Signature: - -```typescript -static isJobInList(queue: MinimalQueue, listKey: string, jobId: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| listKey | string | | -| jobId | string | | - -Returns: - -Promise<boolean> - diff --git a/docs/gitbook/api/bullmq.scripts.md b/docs/gitbook/api/bullmq.scripts.md deleted file mode 100644 index d2f15b0d4b..0000000000 --- a/docs/gitbook/api/bullmq.scripts.md +++ /dev/null @@ -1,49 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) - -## Scripts class - -Signature: - -```typescript -export declare class Scripts -``` - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [addJob(client, queue, job, opts, jobId, parentOpts)](./bullmq.scripts.addjob.md) | static | | -| [changeDelay(queue, jobId, delay)](./bullmq.scripts.changedelay.md) | static | | -| [changeDelayArgs(queue, jobId, timestamp)](./bullmq.scripts.changedelayargs.md) | static | | -| [cleanJobsInSet(queue, set, timestamp, limit)](./bullmq.scripts.cleanjobsinset.md) | static | Remove jobs in a specific state. | -| [drain(queue, delayed)](./bullmq.scripts.drain.md) | static | | -| [drainArgs(queue, delayed)](./bullmq.scripts.drainargs.md) | static | | -| [extendLock(queue, jobId, token, duration)](./bullmq.scripts.extendlock.md) | static | | -| [finishedErrors(code, jobId, command, state)](./bullmq.scripts.finishederrors.md) | static | | -| [getState(queue, jobId)](./bullmq.scripts.getstate.md) | static | | -| [isFinished(queue, jobId, returnValue)](./bullmq.scripts.isfinished.md) | static | | -| [isJobInList(queue, listKey, jobId)](./bullmq.scripts.isjobinlist.md) | static | | -| [moveStalledJobsToWait(queue)](./bullmq.scripts.movestalledjobstowait.md) | static | Looks for unlocked jobs in the active queue.The job was being worked on, but the worker process died and it failed to renew the lock. We call these jobs 'stalled'. This is the most common case. We resolve these by moving them back to wait to be re-processed. To prevent jobs from cycling endlessly between active and wait, (e.g. if the job handler keeps crashing), we limit the number stalled job recoveries to settings.maxStalledCount. | -| [moveToActive(worker, token, jobId)](./bullmq.scripts.movetoactive.md) | static | | -| [moveToCompleted(queue, job, returnvalue, removeOnComplete, token, fetchNext)](./bullmq.scripts.movetocompleted.md) | static | | -| [moveToDelayed(queue, jobId, timestamp)](./bullmq.scripts.movetodelayed.md) | static | | -| [moveToDelayedArgs(queue, jobId, timestamp)](./bullmq.scripts.movetodelayedargs.md) | static | | -| [moveToFailedArgs(queue, job, failedReason, removeOnFailed, token, fetchNext)](./bullmq.scripts.movetofailedargs.md) | static | | -| [moveToFinishedArgs(queue, job, val, propVal, shouldRemove, target, token, fetchNext)](./bullmq.scripts.movetofinishedargs.md) | static | | -| [moveToWaitingChildren(queue, jobId, token, opts)](./bullmq.scripts.movetowaitingchildren.md) | static | Move parent job to waiting-children state. | -| [moveToWaitingChildrenArgs(queue, jobId, token, opts)](./bullmq.scripts.movetowaitingchildrenargs.md) | static | | -| [obliterate(queue, opts)](./bullmq.scripts.obliterate.md) | static | | -| [pause(queue, pause)](./bullmq.scripts.pause.md) | static | | -| [promote(queue, jobId)](./bullmq.scripts.promote.md) | static | | -| [remove(queue, jobId)](./bullmq.scripts.remove.md) | static | | -| [removeRepeatable(queue, repeatJobId, repeatJobKey)](./bullmq.scripts.removerepeatable.md) | static | | -| [removeRepeatableArgs(queue, repeatJobId, repeatJobKey)](./bullmq.scripts.removerepeatableargs.md) | static | | -| [reprocessJob(queue, job, state)](./bullmq.scripts.reprocessjob.md) | static | Attempts to reprocess a job | -| [retryJobArgs(queue, job)](./bullmq.scripts.retryjobargs.md) | static | | -| [retryJobs(queue, state, count, timestamp)](./bullmq.scripts.retryjobs.md) | static | | -| [updateData(queue, job, data)](./bullmq.scripts.updatedata.md) | static | | -| [updateDelaySet(queue, delayedTimestamp)](./bullmq.scripts.updatedelayset.md) | static | It checks if the job in the top of the delay set should be moved back to the top of the wait queue (so that it will be processed as soon as possible) | -| [updateProgress(queue, job, progress)](./bullmq.scripts.updateprogress.md) | static | | - diff --git a/docs/gitbook/api/bullmq.scripts.movestalledjobstowait.md b/docs/gitbook/api/bullmq.scripts.movestalledjobstowait.md deleted file mode 100644 index c10ebc0d26..0000000000 --- a/docs/gitbook/api/bullmq.scripts.movestalledjobstowait.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [moveStalledJobsToWait](./bullmq.scripts.movestalledjobstowait.md) - -## Scripts.moveStalledJobsToWait() method - -Looks for unlocked jobs in the active queue. - -The job was being worked on, but the worker process died and it failed to renew the lock. We call these jobs 'stalled'. This is the most common case. We resolve these by moving them back to wait to be re-processed. To prevent jobs from cycling endlessly between active and wait, (e.g. if the job handler keeps crashing), we limit the number stalled job recoveries to settings.maxStalledCount. - -Signature: - -```typescript -static moveStalledJobsToWait(queue: QueueScheduler): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [QueueScheduler](./bullmq.queuescheduler.md) | | - -Returns: - -Promise<any> - diff --git a/docs/gitbook/api/bullmq.scripts.movetoactive.md b/docs/gitbook/api/bullmq.scripts.movetoactive.md deleted file mode 100644 index ee6e40bffd..0000000000 --- a/docs/gitbook/api/bullmq.scripts.movetoactive.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [moveToActive](./bullmq.scripts.movetoactive.md) - -## Scripts.moveToActive() method - -Signature: - -```typescript -static moveToActive(worker: Worker, token: string, jobId?: string): Promise<[] | [number | JobJsonRaw, string?]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| worker | [Worker](./bullmq.worker.md)<T, R, N> | | -| token | string | | -| jobId | string | | - -Returns: - -Promise<\[\] \| \[number \| [JobJsonRaw](./bullmq.jobjsonraw.md), string?\]> - diff --git a/docs/gitbook/api/bullmq.scripts.movetocompleted.md b/docs/gitbook/api/bullmq.scripts.movetocompleted.md deleted file mode 100644 index 44e43e4453..0000000000 --- a/docs/gitbook/api/bullmq.scripts.movetocompleted.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [moveToCompleted](./bullmq.scripts.movetocompleted.md) - -## Scripts.moveToCompleted() method - -Signature: - -```typescript -static moveToCompleted(queue: MinimalQueue, job: Job, returnvalue: R, removeOnComplete: boolean | number | KeepJobs, token: string, fetchNext: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| job | [Job](./bullmq.job.md)<T, R, N> | | -| returnvalue | R | | -| removeOnComplete | boolean \| number \| [KeepJobs](./bullmq.keepjobs.md) | | -| token | string | | -| fetchNext | boolean | | - -Returns: - -Promise<[JobData](./bullmq.jobdata.md) \| \[\]> - diff --git a/docs/gitbook/api/bullmq.scripts.movetodelayed.md b/docs/gitbook/api/bullmq.scripts.movetodelayed.md deleted file mode 100644 index 71daa1f712..0000000000 --- a/docs/gitbook/api/bullmq.scripts.movetodelayed.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [moveToDelayed](./bullmq.scripts.movetodelayed.md) - -## Scripts.moveToDelayed() method - -Signature: - -```typescript -static moveToDelayed(queue: MinimalQueue, jobId: string, timestamp: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | -| timestamp | number | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.scripts.movetodelayedargs.md b/docs/gitbook/api/bullmq.scripts.movetodelayedargs.md deleted file mode 100644 index 9f482416fe..0000000000 --- a/docs/gitbook/api/bullmq.scripts.movetodelayedargs.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [moveToDelayedArgs](./bullmq.scripts.movetodelayedargs.md) - -## Scripts.moveToDelayedArgs() method - -Signature: - -```typescript -static moveToDelayedArgs(queue: MinimalQueue, jobId: string, timestamp: number): string[]; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | -| timestamp | number | | - -Returns: - -string\[\] - diff --git a/docs/gitbook/api/bullmq.scripts.movetofailedargs.md b/docs/gitbook/api/bullmq.scripts.movetofailedargs.md deleted file mode 100644 index ee1bda63d1..0000000000 --- a/docs/gitbook/api/bullmq.scripts.movetofailedargs.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [moveToFailedArgs](./bullmq.scripts.movetofailedargs.md) - -## Scripts.moveToFailedArgs() method - -Signature: - -```typescript -static moveToFailedArgs(queue: MinimalQueue, job: Job, failedReason: string, removeOnFailed: boolean | number | KeepJobs, token: string, fetchNext?: boolean): string[]; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| job | [Job](./bullmq.job.md)<T, R, N> | | -| failedReason | string | | -| removeOnFailed | boolean \| number \| [KeepJobs](./bullmq.keepjobs.md) | | -| token | string | | -| fetchNext | boolean | | - -Returns: - -string\[\] - diff --git a/docs/gitbook/api/bullmq.scripts.movetofinishedargs.md b/docs/gitbook/api/bullmq.scripts.movetofinishedargs.md deleted file mode 100644 index b3269f0be7..0000000000 --- a/docs/gitbook/api/bullmq.scripts.movetofinishedargs.md +++ /dev/null @@ -1,29 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [moveToFinishedArgs](./bullmq.scripts.movetofinishedargs.md) - -## Scripts.moveToFinishedArgs() method - -Signature: - -```typescript -static moveToFinishedArgs(queue: MinimalQueue, job: Job, val: any, propVal: FinishedPropValAttribute, shouldRemove: boolean | number | KeepJobs, target: FinishedStatus, token: string, fetchNext?: boolean): string[]; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| job | [Job](./bullmq.job.md)<T, R, N> | | -| val | any | | -| propVal | [FinishedPropValAttribute](./bullmq.finishedpropvalattribute.md) | | -| shouldRemove | boolean \| number \| [KeepJobs](./bullmq.keepjobs.md) | | -| target | [FinishedStatus](./bullmq.finishedstatus.md) | | -| token | string | | -| fetchNext | boolean | | - -Returns: - -string\[\] - diff --git a/docs/gitbook/api/bullmq.scripts.movetowaitingchildren.md b/docs/gitbook/api/bullmq.scripts.movetowaitingchildren.md deleted file mode 100644 index 15bbe2f2b4..0000000000 --- a/docs/gitbook/api/bullmq.scripts.movetowaitingchildren.md +++ /dev/null @@ -1,37 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [moveToWaitingChildren](./bullmq.scripts.movetowaitingchildren.md) - -## Scripts.moveToWaitingChildren() method - -Move parent job to waiting-children state. - -Signature: - -```typescript -static moveToWaitingChildren(queue: MinimalQueue, jobId: string, token: string, opts?: MoveToChildrenOpts): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | -| token | string | | -| opts | [MoveToChildrenOpts](./bullmq.movetochildrenopts.md) | | - -Returns: - -Promise<boolean> - -true if job is successfully moved, false if there are pending dependencies. - -## Exceptions - -JobNotExist This exception is thrown if jobId is missing. - -JobLockNotExist This exception is thrown if job lock is missing. - -JobNotInState This exception is thrown if job is not in active state. - diff --git a/docs/gitbook/api/bullmq.scripts.movetowaitingchildrenargs.md b/docs/gitbook/api/bullmq.scripts.movetowaitingchildrenargs.md deleted file mode 100644 index 2210b646cd..0000000000 --- a/docs/gitbook/api/bullmq.scripts.movetowaitingchildrenargs.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [moveToWaitingChildrenArgs](./bullmq.scripts.movetowaitingchildrenargs.md) - -## Scripts.moveToWaitingChildrenArgs() method - -Signature: - -```typescript -static moveToWaitingChildrenArgs(queue: MinimalQueue, jobId: string, token: string, opts?: MoveToChildrenOpts): string[]; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | -| token | string | | -| opts | [MoveToChildrenOpts](./bullmq.movetochildrenopts.md) | | - -Returns: - -string\[\] - diff --git a/docs/gitbook/api/bullmq.scripts.obliterate.md b/docs/gitbook/api/bullmq.scripts.obliterate.md deleted file mode 100644 index b060117b9b..0000000000 --- a/docs/gitbook/api/bullmq.scripts.obliterate.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [obliterate](./bullmq.scripts.obliterate.md) - -## Scripts.obliterate() method - -Signature: - -```typescript -static obliterate(queue: MinimalQueue, opts: { - force: boolean; - count: number; - }): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| opts | { force: boolean; count: number; } | | - -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.scripts.pause.md b/docs/gitbook/api/bullmq.scripts.pause.md deleted file mode 100644 index 45ff5b2219..0000000000 --- a/docs/gitbook/api/bullmq.scripts.pause.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [pause](./bullmq.scripts.pause.md) - -## Scripts.pause() method - -Signature: - -```typescript -static pause(queue: MinimalQueue, pause: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| pause | boolean | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.scripts.promote.md b/docs/gitbook/api/bullmq.scripts.promote.md deleted file mode 100644 index 98a4a4e6f0..0000000000 --- a/docs/gitbook/api/bullmq.scripts.promote.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [promote](./bullmq.scripts.promote.md) - -## Scripts.promote() method - -Signature: - -```typescript -static promote(queue: MinimalQueue, jobId: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | - -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.scripts.remove.md b/docs/gitbook/api/bullmq.scripts.remove.md deleted file mode 100644 index 9e18f313b4..0000000000 --- a/docs/gitbook/api/bullmq.scripts.remove.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [remove](./bullmq.scripts.remove.md) - -## Scripts.remove() method - -Signature: - -```typescript -static remove(queue: MinimalQueue, jobId: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| jobId | string | | - -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.scripts.removerepeatable.md b/docs/gitbook/api/bullmq.scripts.removerepeatable.md deleted file mode 100644 index f85eb08f7a..0000000000 --- a/docs/gitbook/api/bullmq.scripts.removerepeatable.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [removeRepeatable](./bullmq.scripts.removerepeatable.md) - -## Scripts.removeRepeatable() method - -Signature: - -```typescript -static removeRepeatable(queue: MinimalQueue, repeatJobId: string, repeatJobKey: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| repeatJobId | string | | -| repeatJobKey | string | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.scripts.removerepeatableargs.md b/docs/gitbook/api/bullmq.scripts.removerepeatableargs.md deleted file mode 100644 index 0d5ec16d75..0000000000 --- a/docs/gitbook/api/bullmq.scripts.removerepeatableargs.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [removeRepeatableArgs](./bullmq.scripts.removerepeatableargs.md) - -## Scripts.removeRepeatableArgs() method - -Signature: - -```typescript -static removeRepeatableArgs(queue: MinimalQueue, repeatJobId: string, repeatJobKey: string): string[]; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| repeatJobId | string | | -| repeatJobKey | string | | - -Returns: - -string\[\] - diff --git a/docs/gitbook/api/bullmq.scripts.reprocessjob.md b/docs/gitbook/api/bullmq.scripts.reprocessjob.md deleted file mode 100644 index 7673f9adc9..0000000000 --- a/docs/gitbook/api/bullmq.scripts.reprocessjob.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [reprocessJob](./bullmq.scripts.reprocessjob.md) - -## Scripts.reprocessJob() method - -Attempts to reprocess a job - -Signature: - -```typescript -static reprocessJob(queue: MinimalQueue, job: Job, state: 'failed' | 'completed'): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| job | [Job](./bullmq.job.md)<T, R, N> | | -| state | 'failed' \| 'completed' | The expected job state. If the job is not found on the provided state, then it's not reprocessed. Supported states: 'failed', 'completed' | - -Returns: - -Promise<void> - -Returns a promise that evaluates to a return code: 1 means the operation was a success 0 means the job does not exist -1 means the job is currently locked and can't be retried. -2 means the job was not found in the expected set - diff --git a/docs/gitbook/api/bullmq.scripts.retryjobargs.md b/docs/gitbook/api/bullmq.scripts.retryjobargs.md deleted file mode 100644 index edc13dee61..0000000000 --- a/docs/gitbook/api/bullmq.scripts.retryjobargs.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [retryJobArgs](./bullmq.scripts.retryjobargs.md) - -## Scripts.retryJobArgs() method - -Signature: - -```typescript -static retryJobArgs(queue: MinimalQueue, job: Job): string[]; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| job | [Job](./bullmq.job.md)<T, R, N> | | - -Returns: - -string\[\] - diff --git a/docs/gitbook/api/bullmq.scripts.retryjobs.md b/docs/gitbook/api/bullmq.scripts.retryjobs.md deleted file mode 100644 index 35475fb5db..0000000000 --- a/docs/gitbook/api/bullmq.scripts.retryjobs.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [retryJobs](./bullmq.scripts.retryjobs.md) - -## Scripts.retryJobs() method - -Signature: - -```typescript -static retryJobs(queue: MinimalQueue, state?: FinishedStatus, count?: number, timestamp?: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| state | [FinishedStatus](./bullmq.finishedstatus.md) | | -| count | number | | -| timestamp | number | | - -Returns: - -Promise<number> - diff --git a/docs/gitbook/api/bullmq.scripts.updatedata.md b/docs/gitbook/api/bullmq.scripts.updatedata.md deleted file mode 100644 index c31d5bbe13..0000000000 --- a/docs/gitbook/api/bullmq.scripts.updatedata.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [updateData](./bullmq.scripts.updatedata.md) - -## Scripts.updateData() method - -Signature: - -```typescript -static updateData(queue: MinimalQueue, job: Job, data: T): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| job | [Job](./bullmq.job.md)<T, R, N> | | -| data | T | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.scripts.updatedelayset.md b/docs/gitbook/api/bullmq.scripts.updatedelayset.md deleted file mode 100644 index ff81987555..0000000000 --- a/docs/gitbook/api/bullmq.scripts.updatedelayset.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [updateDelaySet](./bullmq.scripts.updatedelayset.md) - -## Scripts.updateDelaySet() method - -It checks if the job in the top of the delay set should be moved back to the top of the wait queue (so that it will be processed as soon as possible) - -Signature: - -```typescript -static updateDelaySet(queue: MinimalQueue, delayedTimestamp: number): Promise<[number, string]>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| delayedTimestamp | number | | - -Returns: - -Promise<\[number, string\]> - diff --git a/docs/gitbook/api/bullmq.scripts.updateprogress.md b/docs/gitbook/api/bullmq.scripts.updateprogress.md deleted file mode 100644 index f7da6cdfab..0000000000 --- a/docs/gitbook/api/bullmq.scripts.updateprogress.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Scripts](./bullmq.scripts.md) > [updateProgress](./bullmq.scripts.updateprogress.md) - -## Scripts.updateProgress() method - -Signature: - -```typescript -static updateProgress(queue: MinimalQueue, job: Job, progress: number | object): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| queue | [MinimalQueue](./bullmq.minimalqueue.md) | | -| job | [Job](./bullmq.job.md)<T, R, N> | | -| progress | number \| object | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.stalledeventcallback3.md b/docs/gitbook/api/bullmq.stalledeventcallback3.md deleted file mode 100644 index 67d427a96e..0000000000 --- a/docs/gitbook/api/bullmq.stalledeventcallback3.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [StalledEventCallback3](./bullmq.stalledeventcallback3.md) - -## StalledEventCallback3 type - -Signature: - -```typescript -export declare type StalledEventCallback3 = (job: Job) => void; -``` -References: [Job](./bullmq.job.md) - diff --git a/docs/gitbook/api/bullmq.strategies.md b/docs/gitbook/api/bullmq.strategies.md deleted file mode 100644 index e2c1de1f2a..0000000000 --- a/docs/gitbook/api/bullmq.strategies.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Strategies](./bullmq.strategies.md) - -## Strategies interface - -Signature: - -```typescript -export interface Strategies -``` diff --git a/docs/gitbook/api/bullmq.streamname.md b/docs/gitbook/api/bullmq.streamname.md deleted file mode 100644 index 94305f364f..0000000000 --- a/docs/gitbook/api/bullmq.streamname.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [StreamName](./bullmq.streamname.md) - -## StreamName type - -Signature: - -```typescript -export declare type StreamName = string; -``` diff --git a/docs/gitbook/api/bullmq.streamreadraw.md b/docs/gitbook/api/bullmq.streamreadraw.md deleted file mode 100644 index 4dcc249f4b..0000000000 --- a/docs/gitbook/api/bullmq.streamreadraw.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [StreamReadRaw](./bullmq.streamreadraw.md) - -## StreamReadRaw type - -Signature: - -```typescript -export declare type StreamReadRaw = [StreamName, EntryRaw[]][]; -``` -References: [StreamName](./bullmq.streamname.md), [EntryRaw](./bullmq.entryraw.md) - diff --git a/docs/gitbook/api/bullmq.timermanager.clearalltimers.md b/docs/gitbook/api/bullmq.timermanager.clearalltimers.md deleted file mode 100644 index c145044021..0000000000 --- a/docs/gitbook/api/bullmq.timermanager.clearalltimers.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [TimerManager](./bullmq.timermanager.md) > [clearAllTimers](./bullmq.timermanager.clearalltimers.md) - -## TimerManager.clearAllTimers() method - -Signature: - -```typescript -clearAllTimers(): void; -``` -Returns: - -void - diff --git a/docs/gitbook/api/bullmq.timermanager.cleartimer.md b/docs/gitbook/api/bullmq.timermanager.cleartimer.md deleted file mode 100644 index 3924bd5cf3..0000000000 --- a/docs/gitbook/api/bullmq.timermanager.cleartimer.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [TimerManager](./bullmq.timermanager.md) > [clearTimer](./bullmq.timermanager.cleartimer.md) - -## TimerManager.clearTimer() method - -Signature: - -```typescript -clearTimer(id: string): void; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| id | string | | - -Returns: - -void - diff --git a/docs/gitbook/api/bullmq.timermanager.md b/docs/gitbook/api/bullmq.timermanager.md deleted file mode 100644 index 974a8fc23b..0000000000 --- a/docs/gitbook/api/bullmq.timermanager.md +++ /dev/null @@ -1,22 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [TimerManager](./bullmq.timermanager.md) - -## TimerManager class - -Keeps track on timers created with setTimeout to help clearTimeout for all timers when no more delayed actions needed - -Signature: - -```typescript -export declare class TimerManager -``` - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [clearAllTimers()](./bullmq.timermanager.clearalltimers.md) | | | -| [clearTimer(id)](./bullmq.timermanager.cleartimer.md) | | | -| [setTimer(name, delay, fn)](./bullmq.timermanager.settimer.md) | | Creates a new timer and returns its ID. | - diff --git a/docs/gitbook/api/bullmq.timermanager.settimer.md b/docs/gitbook/api/bullmq.timermanager.settimer.md deleted file mode 100644 index b44d731b86..0000000000 --- a/docs/gitbook/api/bullmq.timermanager.settimer.md +++ /dev/null @@ -1,26 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [TimerManager](./bullmq.timermanager.md) > [setTimer](./bullmq.timermanager.settimer.md) - -## TimerManager.setTimer() method - -Creates a new timer and returns its ID. - -Signature: - -```typescript -setTimer(name: string, delay: number, fn: Function): string; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | Readable name for the timer | -| delay | number | Delay in milliseconds | -| fn | Function | Callback function that is executed after the timer expires | - -Returns: - -string - diff --git a/docs/gitbook/api/bullmq.trycatch.md b/docs/gitbook/api/bullmq.trycatch.md deleted file mode 100644 index 8bee310632..0000000000 --- a/docs/gitbook/api/bullmq.trycatch.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [tryCatch](./bullmq.trycatch.md) - -## tryCatch() function - -Signature: - -```typescript -export declare function tryCatch(fn: (...args: any) => any, ctx: any, args: any[]): any; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| fn | (...args: any) => any | | -| ctx | any | | -| args | any\[\] | | - -Returns: - -any - diff --git a/docs/gitbook/api/bullmq.unrecoverableerror._constructor_.md b/docs/gitbook/api/bullmq.unrecoverableerror._constructor_.md deleted file mode 100644 index 0d747b69d4..0000000000 --- a/docs/gitbook/api/bullmq.unrecoverableerror._constructor_.md +++ /dev/null @@ -1,20 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [UnrecoverableError](./bullmq.unrecoverableerror.md) > [(constructor)](./bullmq.unrecoverableerror._constructor_.md) - -## UnrecoverableError.(constructor) - -Constructs a new instance of the `UnrecoverableError` class - -Signature: - -```typescript -constructor(message?: string); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| message | string | | - diff --git a/docs/gitbook/api/bullmq.unrecoverableerror.md b/docs/gitbook/api/bullmq.unrecoverableerror.md deleted file mode 100644 index 1449679e3b..0000000000 --- a/docs/gitbook/api/bullmq.unrecoverableerror.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [UnrecoverableError](./bullmq.unrecoverableerror.md) - -## UnrecoverableError class - -UnrecoverableError - -Error to move a job to failed even if the attemptsMade are lower than the expected limit. - -Signature: - -```typescript -export declare class UnrecoverableError extends Error -``` -Extends: Error - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(message)](./bullmq.unrecoverableerror._constructor_.md) | | Constructs a new instance of the UnrecoverableError class | - diff --git a/docs/gitbook/api/bullmq.waitingeventcallback3.md b/docs/gitbook/api/bullmq.waitingeventcallback3.md deleted file mode 100644 index da347ea747..0000000000 --- a/docs/gitbook/api/bullmq.waitingeventcallback3.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WaitingEventCallback3](./bullmq.waitingeventcallback3.md) - -## WaitingEventCallback3 type - -Signature: - -```typescript -export declare type WaitingEventCallback3 = (jobId: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.worker._constructor_.md b/docs/gitbook/api/bullmq.worker._constructor_.md deleted file mode 100644 index a547850073..0000000000 --- a/docs/gitbook/api/bullmq.worker._constructor_.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [(constructor)](./bullmq.worker._constructor_.md) - -## Worker.(constructor) - -Constructs a new instance of the `Worker` class - -Signature: - -```typescript -constructor(name: string, processor?: string | Processor, opts?: WorkerOptions, Connection?: typeof RedisConnection); -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| name | string | | -| processor | string \| [Processor](./bullmq.processor.md)<DataType, ResultType, NameType> | | -| opts | [WorkerOptions](./bullmq.workeroptions.md) | | -| Connection | typeof [RedisConnection](./bullmq.redisconnection.md) | | - diff --git a/docs/gitbook/api/bullmq.worker.callprocessjob.md b/docs/gitbook/api/bullmq.worker.callprocessjob.md deleted file mode 100644 index 007ab60f2c..0000000000 --- a/docs/gitbook/api/bullmq.worker.callprocessjob.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [callProcessJob](./bullmq.worker.callprocessjob.md) - -## Worker.callProcessJob() method - -Signature: - -```typescript -protected callProcessJob(job: Job, token: string): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| job | [Job](./bullmq.job.md)<DataType, ResultType, NameType> | | -| token | string | | - -Returns: - -Promise<ResultType> - diff --git a/docs/gitbook/api/bullmq.worker.close.md b/docs/gitbook/api/bullmq.worker.close.md deleted file mode 100644 index 7d3faa6aa2..0000000000 --- a/docs/gitbook/api/bullmq.worker.close.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [close](./bullmq.worker.close.md) - -## Worker.close() method - -Closes the worker and related redis connections. - -This method waits for current jobs to finalize before returning. - -Signature: - -```typescript -close(force?: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| force | boolean | Use force boolean parameter if you do not want to wait for current jobs to be processed. | - -Returns: - -Promise<void> - -Promise that resolves when the worker has been closed. - diff --git a/docs/gitbook/api/bullmq.worker.createjob.md b/docs/gitbook/api/bullmq.worker.createjob.md deleted file mode 100644 index de4eff4052..0000000000 --- a/docs/gitbook/api/bullmq.worker.createjob.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [createJob](./bullmq.worker.createjob.md) - -## Worker.createJob() method - -Signature: - -```typescript -protected createJob(data: JobJsonRaw, jobId: string): Job; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| data | [JobJsonRaw](./bullmq.jobjsonraw.md) | | -| jobId | string | | - -Returns: - -[Job](./bullmq.job.md)<DataType, ResultType, NameType> - diff --git a/docs/gitbook/api/bullmq.worker.delay.md b/docs/gitbook/api/bullmq.worker.delay.md deleted file mode 100644 index b2f966ca87..0000000000 --- a/docs/gitbook/api/bullmq.worker.delay.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [delay](./bullmq.worker.delay.md) - -## Worker.delay() method - -This function is exposed only for testing purposes. - -Signature: - -```typescript -delay(): Promise; -``` -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.worker.emit.md b/docs/gitbook/api/bullmq.worker.emit.md deleted file mode 100644 index 51e2ca40fe..0000000000 --- a/docs/gitbook/api/bullmq.worker.emit.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [emit](./bullmq.worker.emit.md) - -## Worker.emit() method - -Signature: - -```typescript -emit>(event: U, ...args: Parameters[U]>): boolean; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| args | Parameters<[WorkerListener](./bullmq.workerlistener.md)<DataType, ResultType, NameType>\[U\]> | | - -Returns: - -boolean - diff --git a/docs/gitbook/api/bullmq.worker.getnextjob.md b/docs/gitbook/api/bullmq.worker.getnextjob.md deleted file mode 100644 index e5318a7e36..0000000000 --- a/docs/gitbook/api/bullmq.worker.getnextjob.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [getNextJob](./bullmq.worker.getnextjob.md) - -## Worker.getNextJob() method - -Returns a promise that resolves to the next job in queue. - -Signature: - -```typescript -getNextJob(token: string, { block }?: GetNextJobOptions): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| token | string | worker token to be assigned to retrieved job | -| { block } | [GetNextJobOptions](./bullmq.getnextjoboptions.md) | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>> - -a Job or undefined if no job was available in the queue. - diff --git a/docs/gitbook/api/bullmq.worker.ispaused.md b/docs/gitbook/api/bullmq.worker.ispaused.md deleted file mode 100644 index d696d32251..0000000000 --- a/docs/gitbook/api/bullmq.worker.ispaused.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [isPaused](./bullmq.worker.ispaused.md) - -## Worker.isPaused() method - -Checks if worker is paused. - -Signature: - -```typescript -isPaused(): boolean; -``` -Returns: - -boolean - -true if worker is paused, false otherwise. - diff --git a/docs/gitbook/api/bullmq.worker.isrunning.md b/docs/gitbook/api/bullmq.worker.isrunning.md deleted file mode 100644 index b7268df52b..0000000000 --- a/docs/gitbook/api/bullmq.worker.isrunning.md +++ /dev/null @@ -1,19 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [isRunning](./bullmq.worker.isrunning.md) - -## Worker.isRunning() method - -Checks if worker is currently running. - -Signature: - -```typescript -isRunning(): boolean; -``` -Returns: - -boolean - -true if worker is running, false otherwise. - diff --git a/docs/gitbook/api/bullmq.worker.md b/docs/gitbook/api/bullmq.worker.md deleted file mode 100644 index 1410767c42..0000000000 --- a/docs/gitbook/api/bullmq.worker.md +++ /dev/null @@ -1,54 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) - -## Worker class - -This class represents a worker that is able to process jobs from the queue. As soon as the class is instantiated it will start processing jobs. - -Signature: - -```typescript -export declare class Worker extends QueueBase -``` -Extends: [QueueBase](./bullmq.queuebase.md) - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(name, processor, opts, Connection)](./bullmq.worker._constructor_.md) | | Constructs a new instance of the Worker class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [opts](./bullmq.worker.opts.md) | | [WorkerOptions](./bullmq.workeroptions.md) | | -| [paused](./bullmq.worker.paused.md) | | Promise<void> | | -| [processFn](./bullmq.worker.processfn.md) | | [Processor](./bullmq.processor.md)<DataType, ResultType, NameType> | | -| [repeat](./bullmq.worker.repeat.md) | | Promise<[Repeat](./bullmq.repeat.md)> | | -| [timerManager](./bullmq.worker.timermanager.md) | | [TimerManager](./bullmq.timermanager.md) | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [callProcessJob(job, token)](./bullmq.worker.callprocessjob.md) | | | -| [close(force)](./bullmq.worker.close.md) | | Closes the worker and related redis connections.This method waits for current jobs to finalize before returning. | -| [createJob(data, jobId)](./bullmq.worker.createjob.md) | | | -| [delay()](./bullmq.worker.delay.md) | | This function is exposed only for testing purposes. | -| [emit(event, args)](./bullmq.worker.emit.md) | | | -| [getNextJob(token, { block })](./bullmq.worker.getnextjob.md) | | Returns a promise that resolves to the next job in queue. | -| [isPaused()](./bullmq.worker.ispaused.md) | | Checks if worker is paused. | -| [isRunning()](./bullmq.worker.isrunning.md) | | Checks if worker is currently running. | -| [moveToActive(token, jobId)](./bullmq.worker.movetoactive.md) | | | -| [nextJobFromJobData(jobData, jobId)](./bullmq.worker.nextjobfromjobdata.md) | | | -| [off(eventName, listener)](./bullmq.worker.off.md) | | | -| [on(event, listener)](./bullmq.worker.on.md) | | | -| [once(event, listener)](./bullmq.worker.once.md) | | | -| [pause(doNotWaitActive)](./bullmq.worker.pause.md) | | Pauses the processing of this queue only for this worker. | -| [processJob(job, token)](./bullmq.worker.processjob.md) | | | -| [resume()](./bullmq.worker.resume.md) | | Resumes processing of this worker (if paused). | -| [run()](./bullmq.worker.run.md) | | | -| [waitUntilReady()](./bullmq.worker.waituntilready.md) | | Waits until the worker is ready to start processing jobs. In general only useful when writing tests. | - diff --git a/docs/gitbook/api/bullmq.worker.movetoactive.md b/docs/gitbook/api/bullmq.worker.movetoactive.md deleted file mode 100644 index 474013e52f..0000000000 --- a/docs/gitbook/api/bullmq.worker.movetoactive.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [moveToActive](./bullmq.worker.movetoactive.md) - -## Worker.moveToActive() method - -Signature: - -```typescript -protected moveToActive(token: string, jobId?: string): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| token | string | | -| jobId | string | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>> - diff --git a/docs/gitbook/api/bullmq.worker.nextjobfromjobdata.md b/docs/gitbook/api/bullmq.worker.nextjobfromjobdata.md deleted file mode 100644 index 8db5d10664..0000000000 --- a/docs/gitbook/api/bullmq.worker.nextjobfromjobdata.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [nextJobFromJobData](./bullmq.worker.nextjobfromjobdata.md) - -## Worker.nextJobFromJobData() method - -Signature: - -```typescript -protected nextJobFromJobData(jobData?: JobJsonRaw | number, jobId?: string): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| jobData | [JobJsonRaw](./bullmq.jobjsonraw.md) \| number | | -| jobId | string | | - -Returns: - -Promise<[Job](./bullmq.job.md)<DataType, ResultType, NameType>> - diff --git a/docs/gitbook/api/bullmq.worker.off.md b/docs/gitbook/api/bullmq.worker.off.md deleted file mode 100644 index 5e4d342087..0000000000 --- a/docs/gitbook/api/bullmq.worker.off.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [off](./bullmq.worker.off.md) - -## Worker.off() method - -Signature: - -```typescript -off>(eventName: U, listener: WorkerListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| eventName | U | | -| listener | [WorkerListener](./bullmq.workerlistener.md)<DataType, ResultType, NameType>\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.worker.on.md b/docs/gitbook/api/bullmq.worker.on.md deleted file mode 100644 index d279a792e5..0000000000 --- a/docs/gitbook/api/bullmq.worker.on.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [on](./bullmq.worker.on.md) - -## Worker.on() method - -Signature: - -```typescript -on>(event: U, listener: WorkerListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| listener | [WorkerListener](./bullmq.workerlistener.md)<DataType, ResultType, NameType>\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.worker.once.md b/docs/gitbook/api/bullmq.worker.once.md deleted file mode 100644 index df4a80113c..0000000000 --- a/docs/gitbook/api/bullmq.worker.once.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [once](./bullmq.worker.once.md) - -## Worker.once() method - -Signature: - -```typescript -once>(event: U, listener: WorkerListener[U]): this; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| event | U | | -| listener | [WorkerListener](./bullmq.workerlistener.md)<DataType, ResultType, NameType>\[U\] | | - -Returns: - -this - diff --git a/docs/gitbook/api/bullmq.worker.opts.md b/docs/gitbook/api/bullmq.worker.opts.md deleted file mode 100644 index b7cd3861f1..0000000000 --- a/docs/gitbook/api/bullmq.worker.opts.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [opts](./bullmq.worker.opts.md) - -## Worker.opts property - -Signature: - -```typescript -opts: WorkerOptions; -``` diff --git a/docs/gitbook/api/bullmq.worker.pause.md b/docs/gitbook/api/bullmq.worker.pause.md deleted file mode 100644 index a74ed31fe7..0000000000 --- a/docs/gitbook/api/bullmq.worker.pause.md +++ /dev/null @@ -1,24 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [pause](./bullmq.worker.pause.md) - -## Worker.pause() method - -Pauses the processing of this queue only for this worker. - -Signature: - -```typescript -pause(doNotWaitActive?: boolean): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| doNotWaitActive | boolean | | - -Returns: - -Promise<void> - diff --git a/docs/gitbook/api/bullmq.worker.paused.md b/docs/gitbook/api/bullmq.worker.paused.md deleted file mode 100644 index b60fef083e..0000000000 --- a/docs/gitbook/api/bullmq.worker.paused.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [paused](./bullmq.worker.paused.md) - -## Worker.paused property - -Signature: - -```typescript -protected paused: Promise; -``` diff --git a/docs/gitbook/api/bullmq.worker.processfn.md b/docs/gitbook/api/bullmq.worker.processfn.md deleted file mode 100644 index 01d25ff296..0000000000 --- a/docs/gitbook/api/bullmq.worker.processfn.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [processFn](./bullmq.worker.processfn.md) - -## Worker.processFn property - -Signature: - -```typescript -protected processFn: Processor; -``` diff --git a/docs/gitbook/api/bullmq.worker.processjob.md b/docs/gitbook/api/bullmq.worker.processjob.md deleted file mode 100644 index 620d0baab2..0000000000 --- a/docs/gitbook/api/bullmq.worker.processjob.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [processJob](./bullmq.worker.processjob.md) - -## Worker.processJob() method - -Signature: - -```typescript -processJob(job: Job, token: string): Promise>; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| job | [Job](./bullmq.job.md)<DataType, ResultType, NameType> | | -| token | string | | - -Returns: - -Promise<void \| [Job](./bullmq.job.md)<DataType, ResultType, NameType>> - diff --git a/docs/gitbook/api/bullmq.worker.repeat.md b/docs/gitbook/api/bullmq.worker.repeat.md deleted file mode 100644 index 87f5e92d30..0000000000 --- a/docs/gitbook/api/bullmq.worker.repeat.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [repeat](./bullmq.worker.repeat.md) - -## Worker.repeat property - -Signature: - -```typescript -get repeat(): Promise; -``` diff --git a/docs/gitbook/api/bullmq.worker.resume.md b/docs/gitbook/api/bullmq.worker.resume.md deleted file mode 100644 index 24350f74dc..0000000000 --- a/docs/gitbook/api/bullmq.worker.resume.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [resume](./bullmq.worker.resume.md) - -## Worker.resume() method - -Resumes processing of this worker (if paused). - -Signature: - -```typescript -resume(): void; -``` -Returns: - -void - diff --git a/docs/gitbook/api/bullmq.worker.run.md b/docs/gitbook/api/bullmq.worker.run.md deleted file mode 100644 index 0adb0238e8..0000000000 --- a/docs/gitbook/api/bullmq.worker.run.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [run](./bullmq.worker.run.md) - -## Worker.run() method - -Signature: - -```typescript -run(): Promise; -``` -Returns: - -Promise<any\[\]> - diff --git a/docs/gitbook/api/bullmq.worker.timermanager.md b/docs/gitbook/api/bullmq.worker.timermanager.md deleted file mode 100644 index 8622c4bc82..0000000000 --- a/docs/gitbook/api/bullmq.worker.timermanager.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [timerManager](./bullmq.worker.timermanager.md) - -## Worker.timerManager property - -Signature: - -```typescript -protected timerManager: TimerManager; -``` diff --git a/docs/gitbook/api/bullmq.worker.waituntilready.md b/docs/gitbook/api/bullmq.worker.waituntilready.md deleted file mode 100644 index 914748ab1e..0000000000 --- a/docs/gitbook/api/bullmq.worker.waituntilready.md +++ /dev/null @@ -1,17 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [Worker](./bullmq.worker.md) > [waitUntilReady](./bullmq.worker.waituntilready.md) - -## Worker.waitUntilReady() method - -Waits until the worker is ready to start processing jobs. In general only useful when writing tests. - -Signature: - -```typescript -waitUntilReady(): Promise; -``` -Returns: - -Promise<[RedisClient](./bullmq.redisclient.md)> - diff --git a/docs/gitbook/api/bullmq.worker_suffix.md b/docs/gitbook/api/bullmq.worker_suffix.md deleted file mode 100644 index d2167dd073..0000000000 --- a/docs/gitbook/api/bullmq.worker_suffix.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WORKER\_SUFFIX](./bullmq.worker_suffix.md) - -## WORKER\_SUFFIX variable - -Signature: - -```typescript -WORKER_SUFFIX = "" -``` diff --git a/docs/gitbook/api/bullmq.workerlistener.active.md b/docs/gitbook/api/bullmq.workerlistener.active.md deleted file mode 100644 index 18c4a114f1..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.active.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) > [active](./bullmq.workerlistener.active.md) - -## WorkerListener.active property - -Listen to 'active' event. - -This event is triggered when a job enters the 'active' state. - -Signature: - -```typescript -active: (job: Job, prev: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.workerlistener.closed.md b/docs/gitbook/api/bullmq.workerlistener.closed.md deleted file mode 100644 index 2e2d9fa657..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.closed.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) > [closed](./bullmq.workerlistener.closed.md) - -## WorkerListener.closed property - -Listen to 'closing' event. - -This event is triggered when the worker is closed. - -Signature: - -```typescript -closed: () => void; -``` diff --git a/docs/gitbook/api/bullmq.workerlistener.closing.md b/docs/gitbook/api/bullmq.workerlistener.closing.md deleted file mode 100644 index 67a45f20b7..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.closing.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) > [closing](./bullmq.workerlistener.closing.md) - -## WorkerListener.closing property - -Listen to 'closing' event. - -This event is triggered when the worker is closing. - -Signature: - -```typescript -closing: (msg: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.workerlistener.completed.md b/docs/gitbook/api/bullmq.workerlistener.completed.md deleted file mode 100644 index 1ccb15752c..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.completed.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) > [completed](./bullmq.workerlistener.completed.md) - -## WorkerListener.completed property - -Listen to 'completed' event. - -This event is triggered when a job has successfully completed. - -Signature: - -```typescript -completed: (job: Job, result: ResultType, prev: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.workerlistener.drained.md b/docs/gitbook/api/bullmq.workerlistener.drained.md deleted file mode 100644 index 2cd889ebcf..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.drained.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) > [drained](./bullmq.workerlistener.drained.md) - -## WorkerListener.drained property - -Listen to 'drained' event. - -This event is triggered when the queue has drained the waiting list. Note that there could still be delayed jobs waiting their timers to expire and this event will still be triggered as long as the waiting list has emptied. - -Signature: - -```typescript -drained: () => void; -``` diff --git a/docs/gitbook/api/bullmq.workerlistener.error.md b/docs/gitbook/api/bullmq.workerlistener.error.md deleted file mode 100644 index 18cd1ed618..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.error.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) > [error](./bullmq.workerlistener.error.md) - -## WorkerListener.error property - -Listen to 'error' event. - -This event is triggered when an error is throw. - -Signature: - -```typescript -error: (failedReason: Error) => void; -``` diff --git a/docs/gitbook/api/bullmq.workerlistener.failed.md b/docs/gitbook/api/bullmq.workerlistener.failed.md deleted file mode 100644 index 53c8043938..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.failed.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) > [failed](./bullmq.workerlistener.failed.md) - -## WorkerListener.failed property - -Listen to 'failed' event. - -This event is triggered when a job has thrown an exception. - -Signature: - -```typescript -failed: (job: Job, error: Error, prev: string) => void; -``` diff --git a/docs/gitbook/api/bullmq.workerlistener.md b/docs/gitbook/api/bullmq.workerlistener.md deleted file mode 100644 index 709919d54a..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.md +++ /dev/null @@ -1,27 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) - -## WorkerListener interface - -Signature: - -```typescript -export interface WorkerListener -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [active](./bullmq.workerlistener.active.md) | (job: [Job](./bullmq.job.md)<DataType, ResultType, NameType>, prev: string) => void | Listen to 'active' event.This event is triggered when a job enters the 'active' state. | -| [closed](./bullmq.workerlistener.closed.md) | () => void | Listen to 'closing' event.This event is triggered when the worker is closed. | -| [closing](./bullmq.workerlistener.closing.md) | (msg: string) => void | Listen to 'closing' event.This event is triggered when the worker is closing. | -| [completed](./bullmq.workerlistener.completed.md) | (job: [Job](./bullmq.job.md)<DataType, ResultType, NameType>, result: ResultType, prev: string) => void | Listen to 'completed' event.This event is triggered when a job has successfully completed. | -| [drained](./bullmq.workerlistener.drained.md) | () => void | Listen to 'drained' event.This event is triggered when the queue has drained the waiting list. Note that there could still be delayed jobs waiting their timers to expire and this event will still be triggered as long as the waiting list has emptied. | -| [error](./bullmq.workerlistener.error.md) | (failedReason: Error) => void | Listen to 'error' event.This event is triggered when an error is throw. | -| [failed](./bullmq.workerlistener.failed.md) | (job: [Job](./bullmq.job.md)<DataType, ResultType, NameType>, error: Error, prev: string) => void | Listen to 'failed' event.This event is triggered when a job has thrown an exception. | -| [paused](./bullmq.workerlistener.paused.md) | () => void | Listen to 'paused' event.This event is triggered when the queue is paused. | -| [progress](./bullmq.workerlistener.progress.md) | (job: [Job](./bullmq.job.md)<DataType, ResultType, NameType>, progress: number \| object) => void | Listen to 'progress' event.This event is triggered when a job updates it progress, i.e. the Job\#\#updateProgress() method is called. This is useful to notify progress or any other data from within a processor to the rest of the world. | -| [resumed](./bullmq.workerlistener.resumed.md) | () => void | Listen to 'resumed' event.This event is triggered when the queue is resumed. | - diff --git a/docs/gitbook/api/bullmq.workerlistener.paused.md b/docs/gitbook/api/bullmq.workerlistener.paused.md deleted file mode 100644 index cf9e0fca05..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.paused.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) > [paused](./bullmq.workerlistener.paused.md) - -## WorkerListener.paused property - -Listen to 'paused' event. - -This event is triggered when the queue is paused. - -Signature: - -```typescript -paused: () => void; -``` diff --git a/docs/gitbook/api/bullmq.workerlistener.progress.md b/docs/gitbook/api/bullmq.workerlistener.progress.md deleted file mode 100644 index 06dae722b2..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.progress.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) > [progress](./bullmq.workerlistener.progress.md) - -## WorkerListener.progress property - -Listen to 'progress' event. - -This event is triggered when a job updates it progress, i.e. the Job\#\#updateProgress() method is called. This is useful to notify progress or any other data from within a processor to the rest of the world. - -Signature: - -```typescript -progress: (job: Job, progress: number | object) => void; -``` diff --git a/docs/gitbook/api/bullmq.workerlistener.resumed.md b/docs/gitbook/api/bullmq.workerlistener.resumed.md deleted file mode 100644 index f738354ca5..0000000000 --- a/docs/gitbook/api/bullmq.workerlistener.resumed.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerListener](./bullmq.workerlistener.md) > [resumed](./bullmq.workerlistener.resumed.md) - -## WorkerListener.resumed property - -Listen to 'resumed' event. - -This event is triggered when the queue is resumed. - -Signature: - -```typescript -resumed: () => void; -``` diff --git a/docs/gitbook/api/bullmq.workeroptions.autorun.md b/docs/gitbook/api/bullmq.workeroptions.autorun.md deleted file mode 100644 index 26ad2adedd..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.autorun.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) > [autorun](./bullmq.workeroptions.autorun.md) - -## WorkerOptions.autorun property - -Condition to start processor at instance creation. - -Signature: - -```typescript -autorun?: boolean; -``` diff --git a/docs/gitbook/api/bullmq.workeroptions.concurrency.md b/docs/gitbook/api/bullmq.workeroptions.concurrency.md deleted file mode 100644 index 48e331a933..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.concurrency.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) > [concurrency](./bullmq.workeroptions.concurrency.md) - -## WorkerOptions.concurrency property - -Amount of jobs that a single worker is allowed to work on in parallel. - -Signature: - -```typescript -concurrency?: number; -``` diff --git a/docs/gitbook/api/bullmq.workeroptions.draindelay.md b/docs/gitbook/api/bullmq.workeroptions.draindelay.md deleted file mode 100644 index 70763a1ea7..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.draindelay.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) > [drainDelay](./bullmq.workeroptions.draindelay.md) - -## WorkerOptions.drainDelay property - -Signature: - -```typescript -drainDelay?: number; -``` diff --git a/docs/gitbook/api/bullmq.workeroptions.limiter.md b/docs/gitbook/api/bullmq.workeroptions.limiter.md deleted file mode 100644 index a87f583c87..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.limiter.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) > [limiter](./bullmq.workeroptions.limiter.md) - -## WorkerOptions.limiter property - -Enable rate limiter - -Signature: - -```typescript -limiter?: RateLimiterOptions; -``` diff --git a/docs/gitbook/api/bullmq.workeroptions.lockduration.md b/docs/gitbook/api/bullmq.workeroptions.lockduration.md deleted file mode 100644 index 4d9d2f8ff0..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.lockduration.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) > [lockDuration](./bullmq.workeroptions.lockduration.md) - -## WorkerOptions.lockDuration property - -Signature: - -```typescript -lockDuration?: number; -``` diff --git a/docs/gitbook/api/bullmq.workeroptions.lockrenewtime.md b/docs/gitbook/api/bullmq.workeroptions.lockrenewtime.md deleted file mode 100644 index 62b7f5397e..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.lockrenewtime.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) > [lockRenewTime](./bullmq.workeroptions.lockrenewtime.md) - -## WorkerOptions.lockRenewTime property - -Signature: - -```typescript -lockRenewTime?: number; -``` diff --git a/docs/gitbook/api/bullmq.workeroptions.md b/docs/gitbook/api/bullmq.workeroptions.md deleted file mode 100644 index 44a771de90..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.md +++ /dev/null @@ -1,28 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) - -## WorkerOptions interface - -Signature: - -```typescript -export interface WorkerOptions extends QueueBaseOptions -``` -Extends: [QueueBaseOptions](./bullmq.queuebaseoptions.md) - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [autorun?](./bullmq.workeroptions.autorun.md) | boolean | (Optional) Condition to start processor at instance creation. | -| [concurrency?](./bullmq.workeroptions.concurrency.md) | number | (Optional) Amount of jobs that a single worker is allowed to work on in parallel. | -| [drainDelay?](./bullmq.workeroptions.draindelay.md) | number | (Optional) | -| [limiter?](./bullmq.workeroptions.limiter.md) | [RateLimiterOptions](./bullmq.ratelimiteroptions.md) | (Optional) Enable rate limiter | -| [lockDuration?](./bullmq.workeroptions.lockduration.md) | number | (Optional) | -| [lockRenewTime?](./bullmq.workeroptions.lockrenewtime.md) | number | (Optional) | -| [metrics?](./bullmq.workeroptions.metrics.md) | [MetricsOptions](./bullmq.metricsoptions.md) | (Optional) Enable collect metrics. | -| [runRetryDelay?](./bullmq.workeroptions.runretrydelay.md) | number | (Optional) | -| [settings?](./bullmq.workeroptions.settings.md) | [AdvancedOptions](./bullmq.advancedoptions.md) | (Optional) | -| [skipDelayCheck?](./bullmq.workeroptions.skipdelaycheck.md) | boolean | (Optional) | - diff --git a/docs/gitbook/api/bullmq.workeroptions.metrics.md b/docs/gitbook/api/bullmq.workeroptions.metrics.md deleted file mode 100644 index f9cdf055f8..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.metrics.md +++ /dev/null @@ -1,13 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) > [metrics](./bullmq.workeroptions.metrics.md) - -## WorkerOptions.metrics property - -Enable collect metrics. - -Signature: - -```typescript -metrics?: MetricsOptions; -``` diff --git a/docs/gitbook/api/bullmq.workeroptions.runretrydelay.md b/docs/gitbook/api/bullmq.workeroptions.runretrydelay.md deleted file mode 100644 index 6e2a0bc15c..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.runretrydelay.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) > [runRetryDelay](./bullmq.workeroptions.runretrydelay.md) - -## WorkerOptions.runRetryDelay property - -Signature: - -```typescript -runRetryDelay?: number; -``` diff --git a/docs/gitbook/api/bullmq.workeroptions.settings.md b/docs/gitbook/api/bullmq.workeroptions.settings.md deleted file mode 100644 index cd3bda58f4..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.settings.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) > [settings](./bullmq.workeroptions.settings.md) - -## WorkerOptions.settings property - -Signature: - -```typescript -settings?: AdvancedOptions; -``` diff --git a/docs/gitbook/api/bullmq.workeroptions.skipdelaycheck.md b/docs/gitbook/api/bullmq.workeroptions.skipdelaycheck.md deleted file mode 100644 index da9db79279..0000000000 --- a/docs/gitbook/api/bullmq.workeroptions.skipdelaycheck.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [bullmq](./bullmq.md) > [WorkerOptions](./bullmq.workeroptions.md) > [skipDelayCheck](./bullmq.workeroptions.skipdelaycheck.md) - -## WorkerOptions.skipDelayCheck property - -Signature: - -```typescript -skipDelayCheck?: boolean; -``` diff --git a/docs/gitbook/api/index.md b/docs/gitbook/api/index.md deleted file mode 100644 index cdfa76bba3..0000000000 --- a/docs/gitbook/api/index.md +++ /dev/null @@ -1,12 +0,0 @@ - - -[Home](./index.md) - -## API Reference - -## Packages - -| Package | Description | -| --- | --- | -| [bullmq](./bullmq.md) | | - diff --git a/package.json b/package.json index 8ed8dad1d1..74698efac2 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "ioredis": "^5.3.2", "lodash": "^4.17.21", "msgpackr": "^1.6.2", - "semver": "^7.3.7", + "semver": "^7.5.4", "tslib": "^2.0.0", "uuid": "^9.0.0" }, diff --git a/src/classes/flow-producer.ts b/src/classes/flow-producer.ts index 6e01b3ff85..4aa8a95a23 100644 --- a/src/classes/flow-producer.ts +++ b/src/classes/flow-producer.ts @@ -400,10 +400,10 @@ export class FlowProducer extends EventEmitter { maxChildren: number, ) { const getChild = (key: string) => { - const [prefix, queueName, id, groupId] = key.split(':'); + const [prefix, queueName, id] = key.split(':'); return this.getNode(client, { - id: groupId ? `${id}:${groupId}` : id, + id, queueName, prefix, depth, diff --git a/yarn.lock b/yarn.lock index 39ba7881d2..58f7e0939d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6574,6 +6574,13 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semve dependencies: lru-cache "^6.0.0" +semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" From 6074592574256ec4b1c340126288e803e56b1a64 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 19 Jul 2023 12:59:35 +0200 Subject: [PATCH 245/322] feat(queue): add promoteJobs to promote all delayed jobs --- src/classes/queue.ts | 22 +++++++++++++-- src/classes/scripts.ts | 10 ++++++- src/commands/retryJobs-6.lua | 53 ++++++++++++++++++++++++------------ tests/test_queue.ts | 39 ++++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 20 deletions(-) diff --git a/src/classes/queue.ts b/src/classes/queue.ts index fd2ba25c06..fe13d2bcdb 100644 --- a/src/classes/queue.ts +++ b/src/classes/queue.ts @@ -430,8 +430,11 @@ export class Queue< /** * Retry all the failed jobs. * - * @param opts - contains number to limit how many jobs will be moved to wait status per iteration, - * state (failed, completed) failed by default or from which timestamp. + * @param opts: { count: number; state: FinishedStatus; timestamp: number} + * - count number to limit how many jobs will be moved to wait status per iteration, + * - state failed by default or completed. + * - timestamp from which timestamp to start moving jobs to wait status, default Date.now(). + * * @returns */ async retryJobs( @@ -447,6 +450,21 @@ export class Queue< } while (cursor); } + /** + * Promote all the delayed jobs. + * + * @param opts: { count: number } + * - count number to limit how many jobs will be moved to wait status per iteration + * + * @returns + */ + async promoteJobs(opts: { count?: number } = {}): Promise { + let cursor = 0; + do { + cursor = await this.scripts.promoteJobs(opts.count); + } while (cursor); + } + /** * Trim the event stream to an approximately maxLength. * diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index 3e70f99f64..0561235c6b 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -751,7 +751,7 @@ export class Scripts { } protected retryJobsArgs( - state: FinishedStatus, + state: FinishedStatus | 'delayed', count: number, timestamp: number, ): (string | number)[] { @@ -781,6 +781,14 @@ export class Scripts { return (client).retryJobs(args); } + async promoteJobs(count = 1000): Promise { + const client = await this.queue.client; + + const args = this.retryJobsArgs('delayed', count, Number.MAX_VALUE); + + return (client).retryJobs(args); + } + /** * Attempts to reprocess a job * diff --git a/src/commands/retryJobs-6.lua b/src/commands/retryJobs-6.lua index 096aba97c5..c2e4964cfc 100644 --- a/src/commands/retryJobs-6.lua +++ b/src/commands/retryJobs-6.lua @@ -1,10 +1,13 @@ --[[ - Attempts to retry all failed jobs + Attempts to retry all jobs + + Note: as this script now can be used also for completed and delayed jobs, the name "retry" + is not really accurate anymore. Input: KEYS[1] base key KEYS[2] events stream - KEYS[3] state key (failed, completed) + KEYS[3] state key (failed, completed, delayed) KEYS[4] 'wait' KEYS[5] 'paused' KEYS[6] 'meta' @@ -26,28 +29,44 @@ local rcall = redis.call; --- @include "includes/batches" --- @include "includes/getTargetQueueList" -local target = getTargetQueueList(KEYS[6], KEYS[4], KEYS[5]) +local metaKey = KEYS[6] +local target = getTargetQueueList(metaKey, KEYS[4], KEYS[5]) local jobs = rcall('ZRANGEBYSCORE', KEYS[3], 0, timestamp, 'LIMIT', 0, maxCount) if (#jobs > 0) then - for i, key in ipairs(jobs) do - local jobKey = KEYS[1] .. key - rcall("HDEL", jobKey, "finishedOn", "processedOn", "failedReason", "returnvalue") - - -- Emit waiting event - rcall("XADD", KEYS[2], "*", "event", "waiting", "jobId", key, "prev", ARGV[3]); - end - - for from, to in batches(#jobs, 7000) do - rcall("ZREM", KEYS[3], unpack(jobs, from, to)) - rcall("LPUSH", target, unpack(jobs, from, to)) - end + + if KEYS[3]:match("failed$") then + for i, key in ipairs(jobs) do + local jobKey = KEYS[1] .. key + rcall("HDEL", jobKey, "finishedOn", "processedOn", "failedReason") + end + end + + if KEYS[3]:match("completed$") then + for i, key in ipairs(jobs) do + local jobKey = KEYS[1] .. key + rcall("HDEL", jobKey, "finishedOn", "processedOn", "returnvalue") + end + end + + local maxEvents = rcall("HGET", metaKey, "opts.maxLenEvents") or 10000 + + for i, key in ipairs(jobs) do + -- Emit waiting event + rcall("XADD", KEYS[2], "MAXLEN", "~", maxEvents, "*", "event", + "waiting", "jobId", key, "prev", ARGV[3]); + end + + for from, to in batches(#jobs, 7000) do + rcall("ZREM", KEYS[3], unpack(jobs, from, to)) + rcall("LPUSH", target, unpack(jobs, from, to)) + end end maxCount = maxCount - #jobs -if(maxCount <= 0) then - return 1 +if (maxCount <= 0) then + return 1 end return 0 diff --git a/tests/test_queue.ts b/tests/test_queue.ts index 13de30d004..5912a38b14 100644 --- a/tests/test_queue.ts +++ b/tests/test_queue.ts @@ -647,4 +647,43 @@ describe('queues', function () { }); }); }); + + describe('.promoteJobs', () => { + it('promotes all delayed jobs by default', async () => { + await queue.waitUntilReady(); + const jobCount = 8; + + for (let i = 0; i < jobCount; i++) { + await queue.add('test', { idx: i }, { delay: 10000 }); + } + + const delayedCount = await queue.getJobCounts('delayed'); + expect(delayedCount.delayed).to.be.equal(jobCount); + + await queue.promoteJobs(); + + const waitingCount = await queue.getJobCounts('waiting'); + expect(waitingCount.waiting).to.be.equal(jobCount); + + const worker = new Worker( + queueName, + async () => { + await delay(10); + }, + { connection }, + ); + await worker.waitUntilReady(); + + const completing = new Promise(resolve => { + worker.on('completed', after(jobCount, resolve)); + }); + + await completing; + + const promotedCount = await queue.getJobCounts('delayed'); + expect(promotedCount.delayed).to.be.equal(0); + + await worker.close(); + }); + }); }); From 60484d04dc0c1e602b2638e41ecc5de0e4e66b2d Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 19 Jul 2023 17:43:21 +0200 Subject: [PATCH 246/322] chore: fix review comments --- python/bullmq/scripts.py | 4 ++-- src/classes/scripts.ts | 4 ++-- .../{retryJobs-6.lua => moveJobsToWait-6.lua} | 13 ++++--------- 3 files changed, 8 insertions(+), 13 deletions(-) rename src/commands/{retryJobs-6.lua => moveJobsToWait-6.lua} (86%) diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index d3723943b7..1e7bb9c866 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -47,7 +47,7 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection "removeJob": self.redisClient.register_script(self.getScript("removeJob-1.lua")), "reprocessJob": self.redisClient.register_script(self.getScript("reprocessJob-6.lua")), "retryJob": self.redisClient.register_script(self.getScript("retryJob-9.lua")), - "retryJobs": self.redisClient.register_script(self.getScript("retryJobs-6.lua")), + "moveJobsToWait": self.redisClient.register_script(self.getScript("moveJobsToWait-6.lua")), "saveStacktrace": self.redisClient.register_script(self.getScript("saveStacktrace-1.lua")), "updateData": self.redisClient.register_script(self.getScript("updateData-1.lua")), "updateProgress": self.redisClient.register_script(self.getScript("updateProgress-2.lua")), @@ -330,7 +330,7 @@ async def retryJobs(self, state: str, count: int, timestamp: int): current_state = state or 'failed' keys = self.getKeys( ['', 'events', current_state, 'wait', 'paused', 'meta']) - result = await self.commands["retryJobs"](keys=keys, args=[count or 1000, timestamp or round(time.time()*1000), current_state]) + result = await self.commands["moveJobsToWait"](keys=keys, args=[count or 1000, timestamp or round(time.time()*1000), current_state]) return result async def moveToActive(self, token: str, opts: dict, jobId: str = None) -> list[Any]: diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index 0561235c6b..d6d6acd2a6 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -778,7 +778,7 @@ export class Scripts { const args = this.retryJobsArgs(state, count, timestamp); - return (client).retryJobs(args); + return (client).moveJobsToWait(args); } async promoteJobs(count = 1000): Promise { @@ -786,7 +786,7 @@ export class Scripts { const args = this.retryJobsArgs('delayed', count, Number.MAX_VALUE); - return (client).retryJobs(args); + return (client).moveJobsToWait(args); } /** diff --git a/src/commands/retryJobs-6.lua b/src/commands/moveJobsToWait-6.lua similarity index 86% rename from src/commands/retryJobs-6.lua rename to src/commands/moveJobsToWait-6.lua index c2e4964cfc..03e32a72c8 100644 --- a/src/commands/retryJobs-6.lua +++ b/src/commands/moveJobsToWait-6.lua @@ -1,8 +1,7 @@ --[[ - Attempts to retry all jobs + Move completed, failed or delayed jobs to wait. - Note: as this script now can be used also for completed and delayed jobs, the name "retry" - is not really accurate anymore. + Note: Does not support jobs with priorities. Input: KEYS[1] base key @@ -40,9 +39,7 @@ if (#jobs > 0) then local jobKey = KEYS[1] .. key rcall("HDEL", jobKey, "finishedOn", "processedOn", "failedReason") end - end - - if KEYS[3]:match("completed$") then + elseif KEYS[3]:match("completed$") then for i, key in ipairs(jobs) do local jobKey = KEYS[1] .. key rcall("HDEL", jobKey, "finishedOn", "processedOn", "returnvalue") @@ -65,8 +62,6 @@ end maxCount = maxCount - #jobs -if (maxCount <= 0) then - return 1 -end +if (maxCount <= 0) then return 1 end return 0 From 39b2565325a56b1df87f49dfe3a1ba9deb0ea174 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 19 Jul 2023 19:23:12 +0000 Subject: [PATCH 247/322] chore(release): 4.6.0 [skip ci] # [4.6.0](https://github.com/taskforcesh/bullmq/compare/v4.5.0...v4.6.0) (2023-07-19) ### Features * **queue:** add promoteJobs to promote all delayed jobs ([6074592](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index eb030245a1..88624db8be 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +# [4.6.0](https://github.com/taskforcesh/bullmq/compare/v4.5.0...v4.6.0) (2023-07-19) + + +### Features + +* **queue:** add promoteJobs to promote all delayed jobs ([6074592](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) + # [4.5.0](https://github.com/taskforcesh/bullmq/compare/v4.4.0...v4.5.0) (2023-07-18) diff --git a/package.json b/package.json index 74698efac2..caf673f6f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.5.0", + "version": "4.6.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From dd40cf1eaf13767ddcd5e68c4f33d974b65e6f18 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 20 Jul 2023 10:23:21 -0600 Subject: [PATCH 248/322] docs(retry): add stop retrying jobs pattern (#2080) ref #1571 --- docs/gitbook/SUMMARY.md | 1 + docs/gitbook/guide/retrying-failing-jobs.md | 28 +--------- docs/gitbook/patterns/stop-retrying-jobs.md | 54 +++++++++++++++++++ tests/test_rate_limiter.ts | 58 ++++++++++++++++++++- 4 files changed, 114 insertions(+), 27 deletions(-) create mode 100644 docs/gitbook/patterns/stop-retrying-jobs.md diff --git a/docs/gitbook/SUMMARY.md b/docs/gitbook/SUMMARY.md index af37fc2d84..094223f2f9 100644 --- a/docs/gitbook/SUMMARY.md +++ b/docs/gitbook/SUMMARY.md @@ -56,6 +56,7 @@ * [Throttle jobs](patterns/throttle-jobs.md) * [Process Step Jobs](patterns/process-step-jobs.md) * [Failing fast when Redis is down](patterns/failing-fast-when-redis-is-down.md) +* [Stop retrying jobs](patterns/stop-retrying-jobs.md) ## BullMQ Pro diff --git a/docs/gitbook/guide/retrying-failing-jobs.md b/docs/gitbook/guide/retrying-failing-jobs.md index 3894595edd..fc4ff481de 100644 --- a/docs/gitbook/guide/retrying-failing-jobs.md +++ b/docs/gitbook/guide/retrying-failing-jobs.md @@ -2,8 +2,8 @@ As your queues processes jobs, it is inevitable that over time some of these jobs will fail. In BullMQ, a job is considered failed in the following scenarios: -* The processor function defined in your [Worker](https://docs.bullmq.io/guide/workers) has thrown an exception. -* The job has become [stalled](https://docs.bullmq.io/guide/jobs/stalled) and it has consumed the "max stalled count" setting. +- The processor function defined in your [Worker](https://docs.bullmq.io/guide/workers) has thrown an exception. +- The job has become [stalled](https://docs.bullmq.io/guide/jobs/stalled) and it has consumed the "max stalled count" setting. {% hint style="danger" %} The exceptions thrown in a processor must be an [Error](https://nodejs.org/api/errors.html#class-error) object for BullMQ to work correctly. @@ -128,27 +128,3 @@ const worker = new Worker('foo', async job => doSomeProcessing(), { }, }); ``` - -## Stop retrying jobs - -When a processor throws an exception that is considered unrecoverable, you should use the `UnrecoverableError` class. In this case, BullMQ will just move the job to the failed set without performing any retries overriding any attempts settings used when adding the job to the queue. - -```typescript -import { Worker, UnrecoverableError } from 'bullmq'; - -const worker = new Worker('foo', async job => {doSomeProcessing(); -throw new UnrecoverableError('Unrecoverable'); -}, { - connection - }, -}); - -await queue.add( - 'test-retry', - { foo: 'bar' }, - { - attempts: 3, - backoff: 1000, - }, -); -``` diff --git a/docs/gitbook/patterns/stop-retrying-jobs.md b/docs/gitbook/patterns/stop-retrying-jobs.md new file mode 100644 index 0000000000..90dcc192e9 --- /dev/null +++ b/docs/gitbook/patterns/stop-retrying-jobs.md @@ -0,0 +1,54 @@ +# Stop retrying jobs + +When a processor throws an exception that is considered unrecoverable, you should use the `UnrecoverableError` class. In this case, BullMQ will just move the job to the failed set without performing any retries overriding any attempts settings used when adding the job to the queue. + +```typescript +import { Worker, UnrecoverableError } from 'bullmq'; + +const worker = new Worker('foo', async job => {doSomeProcessing(); +throw new UnrecoverableError('Unrecoverable'); +}, { + connection + }, +}); + +await queue.add( + 'test-retry', + { foo: 'bar' }, + { + attempts: 3, + backoff: 1000, + }, +); +``` + +## Fail job when manual rate-limit + +When we set our queue as rate limited and it's being reprocessed, attempts check is ignored as this case is not considered as a real Error, but in case you want to consider the max attempt as an error you can do the following: + +```typescript +import { Worker, UnrecoverableError } from 'bullmq'; + +const worker = new Worker( + 'myQueue', + async job => { + const [isRateLimited, duration] = await doExternalCall(); + if (isRateLimited) { + await worker.rateLimit(duration); + if (job.attemptsMade >= job.opts.attempts) { + throw new UnrecoverableError('Unrecoverable'); + } + // Do not forget to throw this special exception, + // since the job is no longer active after being rate limited. + throw Worker.RateLimitError(); + } + }, + { + connection, + }, +); +``` + +## Read more: + +- 💡 [Rate Limit API Reference](https://api.docs.bullmq.io/classes/v4.Worker.html#rateLimit) diff --git a/tests/test_rate_limiter.ts b/tests/test_rate_limiter.ts index d30de5a63f..23afc09665 100644 --- a/tests/test_rate_limiter.ts +++ b/tests/test_rate_limiter.ts @@ -3,7 +3,13 @@ import { default as IORedis } from 'ioredis'; import { after, every } from 'lodash'; import { beforeEach, describe, it } from 'mocha'; import { v4 } from 'uuid'; -import { FlowProducer, Queue, QueueEvents, Worker } from '../src/classes'; +import { + FlowProducer, + Queue, + QueueEvents, + Worker, + UnrecoverableError, +} from '../src/classes'; import { delay, removeAllQueueData } from '../src/utils'; describe('Rate Limiter', function () { @@ -377,6 +383,56 @@ describe('Rate Limiter', function () { await worker.close(); }); + describe('when reaching max attempts and we want to move the job to failed', () => { + it('should throw Unrecoverable error', async function () { + const dynamicLimit = 550; + const duration = 100; + + const worker = new Worker( + queueName, + async job => { + await worker.rateLimit(dynamicLimit); + if (job.attemptsMade >= job.opts.attempts!) { + throw new UnrecoverableError('Unrecoverable'); + } + throw Worker.RateLimitError(); + }, + { + connection, + limiter: { + max: 1, + duration, + }, + }, + ); + + const result = new Promise((resolve, reject) => { + queueEvents.once('failed', async () => { + try { + const timeDiff = new Date().getTime() - startTime; + expect(timeDiff).to.be.gte(dynamicLimit); + resolve(); + } catch (err) { + reject(err); + } + }); + }); + + const startTime = new Date().getTime(); + await queue.add( + 'rate-test', + { foo: 'bar' }, + { + attempts: 2, + backoff: 1000, + }, + ); + + await result; + await worker.close(); + }); + }); + describe('when priority is provided', () => { it('should obey the rate limit respecting priority', async function () { this.timeout(6000); From fc7f92bc3cd5208e79405d4573a1b64f692c3be2 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 20 Jul 2023 10:58:45 -0600 Subject: [PATCH 249/322] fix(python): upgrade semver to prevent warnings (#2074) --- .github/workflows/release.yml | 21 ++++++++++--------- python/pyproject.toml | 38 ++++++++++++++++++++++++++++++----- python/requirements.txt | 3 +-- 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7ac3753062..71940c28e2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,6 +10,7 @@ env: jobs: release: permissions: + id-token: write contents: write # for release publishing name: Release @@ -51,14 +52,14 @@ jobs: flake8 ./python --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Release Python + - name: Python Semantic Release if: ${{ contains(env.commitmsg, '(python)') }} - run: | - cd python - pip install packaging - git config --global user.email "manast@taskforce.sh" - git config --global user.name "manast" - export VERSION=$(semantic-release print-version) - if [ ! -z "$VERSION" ]; then - GH_TOKEN=${{ secrets.GITHUB_TOKEN }} PYPI_TOKEN=${{ secrets.PYPI_TOKEN }} semantic-release publish - fi + uses: python-semantic-release/python-semantic-release@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + - name: Publish package distributions to PyPI + id: pypi-publish + if: ${{ contains(env.commitmsg, '(python)') }} + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_TOKEN }} diff --git a/python/pyproject.toml b/python/pyproject.toml index 25b797eb79..951e0436c9 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -22,7 +22,7 @@ keywords = ["python", "bullmq", "queues"] dependencies = [ "redis >= 4.5.0, < 5", "msgpack >= 1.0.0, < 2", - "semver >= 2.13.0, < 3" + "semver >= 3.0.1" ] [project.optional-dependencies] @@ -30,7 +30,6 @@ dev = [ "setuptools==68.0.0", "pre-commit==3.3.3", "build==0.8.0", - "python-semantic-release==7.28.1", "types-redis==4.6.0.2" ] @@ -45,11 +44,40 @@ exclude = ["tests*"] bullmq = ["commands/*.lua", "types/*"] [tool.semantic_release] -branch = "master" -version_variable = "bullmq/__init__.py:__version__" +version_variables = ["bullmq/__init__.py:__version__"] version_toml = "pyproject.toml:project.version" build_command = "python3 setup.py sdist" tag_format = "vpy{version}" version_source = "commit" -changelog_file = "../docs/gitbook/python/changelog.md" upload_to_pypi = true + +[tool.semantic_release.commit_parser_options] +allowed_tags = [ + "build", + "chore", + "ci", + "docs", + "feat", + "fix", + "perf", + "style", + "refactor", + "test", +] +minor_tags = ["feat"] +patch_tags = ["fix", "perf"] + +[tool.semantic_release.changelog] +changelog_file = "../docs/gitbook/python/changelog.md" +exclude_commit_patterns = ["^((?!python).)*$"] + +[tool.semantic_release.branches.master] +match = "master" +prerelease = false +prerelease_token = "rc" + +[tool.semantic_release.remote] +name = "origin" +type = "github" +ignore_token_for_push = false +token = { env = "GH_TOKEN" } diff --git a/python/requirements.txt b/python/requirements.txt index aa6a5ee421..0e34126c28 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -6,9 +6,8 @@ msgpack==1.0.5 pipenv==2023.7.4 platformdirs==3.6.0 pre-commit==3.3.3 -python-semantic-release==7.28.1 redis==4.6.0 -semver==2.13.0 +semver==3.0.1 six==1.16.0 virtualenv==20.23.1 virtualenv-clone==0.5.7 From f81e042c62252726c7fb84814e14e22c9d3e467b Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 21 Jul 2023 16:26:08 +0000 Subject: [PATCH 250/322] 4.6.1 Automatically generated by python-semantic-release --- docs/gitbook/changelog.md | 10067 +++++++++++++++++++++++++++++++----- 1 file changed, 8790 insertions(+), 1277 deletions(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 88624db8be..a380e69965 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,2857 +1,10370 @@ -# [4.6.0](https://github.com/taskforcesh/bullmq/compare/v4.5.0...v4.6.0) (2023-07-19) +# CHANGELOG + + + +## v4.6.1 (2023-07-21) + +### Documentation + +* docs(retry): add stop retrying jobs pattern (#2080) ref #1571 ([`dd40cf1`](https://github.com/taskforcesh/bullmq/commit/dd40cf1eaf13767ddcd5e68c4f33d974b65e6f18)) + +### Fix + +* fix(python): upgrade semver to prevent warnings (#2074) ([`fc7f92b`](https://github.com/taskforcesh/bullmq/commit/fc7f92bc3cd5208e79405d4573a1b64f692c3be2)) +## v4.6.0 (2023-07-19) + +### Chore + +* chore(release): 4.6.0 [skip ci] + +# [4.6.0](https://github.com/taskforcesh/bullmq/compare/v4.5.0...v4.6.0) (2023-07-19) + ### Features -* **queue:** add promoteJobs to promote all delayed jobs ([6074592](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) +* **queue:** add promoteJobs to promote all delayed jobs ([6074592](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) ([`39b2565`](https://github.com/taskforcesh/bullmq/commit/39b2565325a56b1df87f49dfe3a1ba9deb0ea174)) + +* chore: fix review comments ([`60484d0`](https://github.com/taskforcesh/bullmq/commit/60484d04dc0c1e602b2638e41ecc5de0e4e66b2d)) + +### Documentation + +* docs(api): remove old api files in favor of typedoc (#2078) ([`75a594f`](https://github.com/taskforcesh/bullmq/commit/75a594f36a2e8c62e16f55d917d1b8f906d18a8c)) + +### Feature + +* feat(queue): add promoteJobs to promote all delayed jobs ([`6074592`](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) + + +## v4.5.0 (2023-07-18) + +### Chore + +* chore(release): 4.5.0 [skip ci] # [4.5.0](https://github.com/taskforcesh/bullmq/compare/v4.4.0...v4.5.0) (2023-07-18) +### Bug Fixes + +* **python:** respect concurrency in worker ([#2062](https://github.com/taskforcesh/bullmq/issues/2062)) fixes [#2063](https://github.com/taskforcesh/bullmq/issues/2063) ([1b95185](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) + +### Features + +* **job:** add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([841dc87](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) ([`2b31259`](https://github.com/taskforcesh/bullmq/commit/2b31259878b5c6d46429502e1fadf51b74d8872c)) + +### Feature + +* feat(job): add option for removing children in remove method (python) (#2064) ([`841dc87`](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) + +### Fix + +* fix(python): respect concurrency in worker (#2062) fixes #2063 ([`1b95185`](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) + +### Unknown + +* GITBOOK-176: change request with no subject merged in GitBook ([`4752a4d`](https://github.com/taskforcesh/bullmq/commit/4752a4dda4a2f48526bac7eb9cb322eccd6ea222)) + +* GITBOOK-175: change request with no subject merged in GitBook ([`8abc1bb`](https://github.com/taskforcesh/bullmq/commit/8abc1bb293c2fd5adbcf88c3aa5c3da7ec1a64fe)) + +* GITBOOK-174: change request with no subject merged in GitBook ([`34b950a`](https://github.com/taskforcesh/bullmq/commit/34b950a9e0be5a0c541eb8a3887704b4136543d4)) + +* GITBOOK-173: change request with no subject merged in GitBook ([`2e30d34`](https://github.com/taskforcesh/bullmq/commit/2e30d34edfbc82925215b7e955b4aed6e68d1d8b)) + + +## v4.4.0 (2023-07-17) + +### Chore + +* chore(release): 4.4.0 [skip ci] + +# [4.4.0](https://github.com/taskforcesh/bullmq/compare/v4.3.0...v4.4.0) (2023-07-17) + +### Features + +* **job:** add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([ffd49e2](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) +* **python:** add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([808ee72](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) ([`38ed54a`](https://github.com/taskforcesh/bullmq/commit/38ed54a879ecff97fab9757a5ebf6583d6d161fb)) + +* chore(deps): update coverallsapp/github-action digest to 95b1a23 (#2065) + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`a1577fa`](https://github.com/taskforcesh/bullmq/commit/a1577fa28870939101b1a7e31e04ae53005b9a46)) + +* chore(deps): update github/codeql-action digest to 489225d ([`d7d0981`](https://github.com/taskforcesh/bullmq/commit/d7d0981e441321c4156704c665a7015ba39d36bf)) + +* chore(deps): update actions/setup-node digest to e33196f ([`bdaccd3`](https://github.com/taskforcesh/bullmq/commit/bdaccd3aef8310a763169e3670cbbbd5288283e8)) + +* chore(deps): update dependency dev/setuptools to v68 (#2038) + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`0bdabcd`](https://github.com/taskforcesh/bullmq/commit/0bdabcd4ccf4fb16cc57c7fa67c8ccfe41031bf4)) + +### Feature + +* feat(job): add removeDependencyOnFailure option (#1953) ([`ffd49e2`](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) + +* feat(python): add remove method in queue (#2066) ([`808ee72`](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) + + +## v4.3.0 (2023-07-14) + +### Chore + +* chore(release): 4.3.0 [skip ci] + +# [4.3.0](https://github.com/taskforcesh/bullmq/compare/v4.2.1...v4.3.0) (2023-07-14) + +### Features + +* **worker:** add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([e255356](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) ([`3b6f33e`](https://github.com/taskforcesh/bullmq/commit/3b6f33eb85f68cff97eb61253884cf540cfb4908)) + +* chore(deps): update dependency dev/setuptools to v63.4.3 (#2034) + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`f0b823a`](https://github.com/taskforcesh/bullmq/commit/f0b823a2bb078ea9b1fe953f6f068cbfe3eab757)) + +### Documentation + +* docs(stalled): add pattern reference for manual fetching jobs ([`a82401c`](https://github.com/taskforcesh/bullmq/commit/a82401c00cc7378cdf8206b5c74afeaaead39c2c)) + +* docs(bullmq-pro): update changelog to v6.0.5 ([`37c203c`](https://github.com/taskforcesh/bullmq/commit/37c203c303e00a2aa4d8933bc5e68239547b1aca)) + +### Feature + +* feat(worker): add id as part of token (#2061) ([`e255356`](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) + + +## v4.2.1 (2023-07-10) + +### Chore + +* chore(release): 4.2.1 [skip ci] + +## [4.2.1](https://github.com/taskforcesh/bullmq/compare/v4.2.0...v4.2.1) (2023-07-10) + +### Bug Fixes + +* **flow:** emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([f419ff1](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) +* **python:** add requires-python config ([#2056](https://github.com/taskforcesh/bullmq/issues/2056)) fixes [#1979](https://github.com/taskforcesh/bullmq/issues/1979) ([a557970](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) +* **python:** fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([7ec1c5b](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) + +### Features + +* **python:** add moveToWaitingChildren job method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([6d0e224](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) ([`fc69da9`](https://github.com/taskforcesh/bullmq/commit/fc69da91d109d713ff16efca0a968466b7868f6c)) + +* chore(deps): update dependency pipenv to v2023.7.4 (#2042) + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`7508633`](https://github.com/taskforcesh/bullmq/commit/750863373adb9d8a528713a168d03b2dc3173eb1)) + +* chore(deps): update dependency dev/types-redis to v4.6.0.2 (#2046) ([`b47d622`](https://github.com/taskforcesh/bullmq/commit/b47d622fee8fa4363b23cff7969ac275d5b4b9ba)) + +* chore(deps): upgrade typedoc to 0.24.0 ([`2ac674d`](https://github.com/taskforcesh/bullmq/commit/2ac674daf78e6879d29f31a601242880bf8f975f)) + +### Ci + +* ci(api): avoid pushing changes to docs-api ([`ce382aa`](https://github.com/taskforcesh/bullmq/commit/ce382aa98994b7831439a3d0f05098d9f39cc4a1)) + +* ci(api): try to check out all branches ([`9981ce5`](https://github.com/taskforcesh/bullmq/commit/9981ce52a43b732a0097abda1fc9f94f402307f3)) + +* ci(api): restore origin/master ref ([`08a8a7f`](https://github.com/taskforcesh/bullmq/commit/08a8a7fdd4559668a3c02e34ae0c1ddf2b284c94)) + +* ci(api): add allow-unrelated-histories ([`4af6072`](https://github.com/taskforcesh/bullmq/commit/4af6072c506dd79b0ba525d86660271aff6a8fe1)) + +* ci(api): use origin/master ([`c04de32`](https://github.com/taskforcesh/bullmq/commit/c04de320efa53638cc10ebdf7939cca966ff627d)) + +* ci(api): use checkout ref to change branch ([`967d366`](https://github.com/taskforcesh/bullmq/commit/967d36658ff7a87dcb59f5122a11cdae97d779ef)) + +* ci(api): add docs-api branch logic (#2045) ([`6303148`](https://github.com/taskforcesh/bullmq/commit/63031484387a8cd8595da7ff0d2721c57b54d7e4)) + +### Documentation + +* docs(gitbook): update v4 references ([`b0adbf8`](https://github.com/taskforcesh/bullmq/commit/b0adbf857ddf4c39fdd8de53fa60d0f0169a7f7a)) + +### Feature + +* feat(python): add moveToWaitingChildren job method (#2049) ([`6d0e224`](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) + +### Fix + +* fix(flow): emit delayed event when parent is moved to delayed (#2055) ([`f419ff1`](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) + +* fix(python): add requires-python config (#2056) fixes #1979 ([`a557970`](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) + +* fix(python): fix isPaused method when custom prefix is present (#2047) ([`7ec1c5b`](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) + +### Unknown + +* doc(python): add python tabs in getters and step jobs pattern ([`f1ca525`](https://github.com/taskforcesh/bullmq/commit/f1ca52541eecbd610b0161b21fe696decd38ee7b)) + + +## v4.2.0 (2023-07-03) + +### Chore + +* chore(release): 4.2.0 [skip ci] + +# [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) + +### Bug Fixes + +* **python:** add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([d03ffc9](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) +* **python:** nuild egg-info at the root location ([3c2d06e](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) + +### Features + +* **common:** add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([ca17364](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) +* **python:** add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([57b2b72](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) +* **python:** add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([3e9db5e](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) +* **python:** add getFailedCount queue method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([92d7227](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) +* **python:** add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([8d5d6c1](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) +* **python:** add getJobState queue method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([8ec9ed6](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) ([`5e2a343`](https://github.com/taskforcesh/bullmq/commit/5e2a3430b320f0b28147e7695d8defd59e6a6a8e)) + +* chore(deps): update dependency dev/types-redis to v4.6.0.1 (#2035) ([`6e5d992`](https://github.com/taskforcesh/bullmq/commit/6e5d99213785c4988184fe70bf9dff6daf021880)) + +* chore(deps): update coverallsapp/github-action digest to 3b7440a (#2039) ([`cbc489b`](https://github.com/taskforcesh/bullmq/commit/cbc489bd59f689ced93c2c6a4162cde487475a28)) + +* chore: update python changelog ([`4994bd7`](https://github.com/taskforcesh/bullmq/commit/4994bd7626cd5996eaec77a75a008591cc35980b)) + +* chore(python): delete license key ([`d6e6449`](https://github.com/taskforcesh/bullmq/commit/d6e64493c979147a351f848212db5fa2282d3852)) + +* chore(deps): update dependency pipenv to v2023.6.26 ([`47e68bd`](https://github.com/taskforcesh/bullmq/commit/47e68bd6470a155ce3822772e37d1385777b89dd)) + +* chore(deps): update dependency tslib to v2.6.0 ([`0e33d9f`](https://github.com/taskforcesh/bullmq/commit/0e33d9f12a289bdf378a446d4b4f6851fc91ae44)) + +* chore(deps): update dependency redis to v4.6.0 ([`cb8edd6`](https://github.com/taskforcesh/bullmq/commit/cb8edd644082dc90dac77bc231b22d13055ec147)) + +### Documentation + +* docs(bullmq-pro): update changelog ([`b71e1ca`](https://github.com/taskforcesh/bullmq/commit/b71e1ca6b3bd77557a6c1219802faaeff8768392)) + +* docs(changelogs): update changelogs (#2028) ([`667de07`](https://github.com/taskforcesh/bullmq/commit/667de075f4762ab72dbaa5567bbacfd5147d4770)) + +* docs: update README.md ([`dc63efe`](https://github.com/taskforcesh/bullmq/commit/dc63efe6596c61487f0f7a9fbe06466fbd42d835)) + +* docs: update broken patterns link in the readme (#2025) ([`0e6e836`](https://github.com/taskforcesh/bullmq/commit/0e6e836376dc89d432f384e5ada0c9356d57252a)) + +### Feature + +* feat(common): add option to change repeatable jobs redis key hash algorithm (#2023) ([`ca17364`](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) + +* feat(python): add getJobState queue method (#2040) ([`8ec9ed6`](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) + +* feat(python): add getFailedCount queue method (#2036) ([`92d7227`](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) + +* feat(python): add getCompleted queue method (#2033) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) + +* feat(python): add get job methods by state (#2012) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) + +* feat(python): add getJobs method in queue class (#2011) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) + +### Fix + +* fix(python): nuild egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) + +* fix(python): add recommended pyproject.toml configuration (#2029) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) + +### Unknown + +* GITBOOK-172: change request with no subject merged in GitBook ([`2c45558`](https://github.com/taskforcesh/bullmq/commit/2c4555802d72bccc9c34ee268c80476a20ef7b49)) + + +## v4.1.0 (2023-06-23) + +### Chore + +* chore(release): 4.1.0 [skip ci] + +# [4.1.0](https://github.com/taskforcesh/bullmq/compare/v4.0.0...v4.1.0) (2023-06-23) + +### Features + +* **queue:** add getPrioritized and getPrioritizedCount methods ([#2005](https://github.com/taskforcesh/bullmq/issues/2005)) ([7363abe](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) ([`65184e3`](https://github.com/taskforcesh/bullmq/commit/65184e3f1388083e63ff956dea4ad62a1addf710)) + +* chore(deps): update github/codeql-action digest to f6e388e (#2003) ([`ef2aab9`](https://github.com/taskforcesh/bullmq/commit/ef2aab97592dd55431e413f39b3d97b3db0e5ed4)) + +### Feature + +* feat(queue): add getPrioritized and getPrioritizedCount methods (#2005) ([`7363abe`](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) + +### Unknown + +* GITBOOK-170: delete old architecture images ([`2e7c90d`](https://github.com/taskforcesh/bullmq/commit/2e7c90d2a5d533d23ec6a9f525259211492097f1)) + +* GITBOOK-169: New state architecture considering prioritized state ([`df50b99`](https://github.com/taskforcesh/bullmq/commit/df50b99ac22ef92d816ed2cd195de986a0140c6d)) + + +## v4.0.0 (2023-06-21) + +### Chore + +* chore(release): 4.0.0 [skip ci] + +# [4.0.0](https://github.com/taskforcesh/bullmq/compare/v3.15.8...v4.0.0) (2023-06-21) + +### Bug Fixes + +* **python:** pass right params to xtrim method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([a55fd77](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) + +### Performance Improvements + +* **priority:** add prioritized as a new state ([#1984](https://github.com/taskforcesh/bullmq/issues/1984)) (python) ([42a890a](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) + +### BREAKING CHANGES + +* **priority:** priority is separeted in its own zset, no duplication needed + +* feat(queue): add removeDeprecatedPriorityKey method + +* refactor: change job method name update to updateData + +ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ([`e0ab7e6`](https://github.com/taskforcesh/bullmq/commit/e0ab7e6fd62487884096ed8fc6164a0be0c4d581)) + +* chore(deps): update dependency platformdirs to v3.6.0 ([`35e77bb`](https://github.com/taskforcesh/bullmq/commit/35e77bb93262191e379c2cf5c5937ff886b15c16)) + +* chore(deps): update github/codeql-action digest to 6c089f5 ([`132f2f7`](https://github.com/taskforcesh/bullmq/commit/132f2f7d011a2181d5eb05164ccb094f3e595b9d)) + +* chore(deps): update dependency pipenv to v2023.6.18 (#1997) ([`fc3f746`](https://github.com/taskforcesh/bullmq/commit/fc3f746441d43ebbc86256583f9b446e2ea874e5)) + +* chore(deps): update dependency virtualenv to v20.23.1 (#1993) ([`86f8aed`](https://github.com/taskforcesh/bullmq/commit/86f8aed9702baf3be6078c6b92e1f358c888adc6)) + +* chore(deps): update dependency semver to v7.5.2 (#1987) ([`93005e6`](https://github.com/taskforcesh/bullmq/commit/93005e6a6001b78b6c86e8cc4f463e3152621005)) + +### Documentation + +* docs(update): add job data section (#1999) ([`854b1ca`](https://github.com/taskforcesh/bullmq/commit/854b1cabd082c1df4d55e7973f0e0b0cd4aefb79)) + +### Fix + +* fix(python): pass right params to xtrim method (#2004) ([`a55fd77`](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) + +### Performance + +* perf(priority): add prioritized as a new state (#1984) (python) + +decouple priority to keep one zset + +BREAKING CHANGE: priority is separeted in its own zset, no duplication needed + +* feat(queue): add removeDeprecatedPriorityKey method + +* refactor: change job method name update to updateData + +ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) + +### Unknown + +* GITBOOK-168: change request with no subject merged in GitBook ([`361e8cf`](https://github.com/taskforcesh/bullmq/commit/361e8cf330c15c9c5c150bcdc59db0a12e713623)) + +* GITBOOK-167: change request with no subject merged in GitBook ([`5920445`](https://github.com/taskforcesh/bullmq/commit/59204456c98a1f23c1bc4e0626850a8aa496795c)) + +* GITBOOK-166: change request with no subject merged in GitBook ([`1b1db39`](https://github.com/taskforcesh/bullmq/commit/1b1db390b4482925852b96aabc8a6fae56cfc500)) + +* GITBOOK-165: change request with no subject merged in GitBook ([`758dd30`](https://github.com/taskforcesh/bullmq/commit/758dd30ab60777ae66b5590faab24922affdcd46)) + +* GITBOOK-164: change request with no subject merged in GitBook ([`0cf17de`](https://github.com/taskforcesh/bullmq/commit/0cf17de033f6337c261c7ecab7dadb54a2ba17de)) + + +## v3.15.8 (2023-06-16) + +### Chore + +* chore(release): 3.15.8 [skip ci] + +## [3.15.8](https://github.com/taskforcesh/bullmq/compare/v3.15.7...v3.15.8) (2023-06-16) + +### Bug Fixes + +* **rate-limit:** keep priority fifo order ([#1991](https://github.com/taskforcesh/bullmq/issues/1991)) fixes [#1929](https://github.com/taskforcesh/bullmq/issues/1929) (python) ([56bd7ad](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) ([`5c36ae3`](https://github.com/taskforcesh/bullmq/commit/5c36ae318766741a00a07af587255a5e951bd731)) + +* chore(deps): update dependency pre-commit to v3.3.3 ([`dadeef3`](https://github.com/taskforcesh/bullmq/commit/dadeef3d31fda8ca826ca6f8b742574d761fd220)) + +* chore(deps): update dependency pipenv to v2023.6.12 ([`1434f7e`](https://github.com/taskforcesh/bullmq/commit/1434f7eaa515e30f2a819d6af3bcefabf7643790)) + +### Fix + +* fix(rate-limit): keep priority fifo order (#1991) fixes #1929 (python) ([`56bd7ad`](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) + + +## v3.15.7 (2023-06-16) + +### Chore + +* chore(release): 3.15.7 [skip ci] + +## [3.15.7](https://github.com/taskforcesh/bullmq/compare/v3.15.6...v3.15.7) (2023-06-16) + +### Bug Fixes + +* **python:** add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([7c5ee20](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) +* **worker:** set redis version always in initialization ([#1989](https://github.com/taskforcesh/bullmq/issues/1989)) fixes [#1988](https://github.com/taskforcesh/bullmq/issues/1988) ([a1544a8](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) ([`90c34c3`](https://github.com/taskforcesh/bullmq/commit/90c34c37605134c72d560ed0fc6aa03a63b6cbca)) + +* chore(deps): update dependency msgpackr to v1.9.5 ([`c1c8eb0`](https://github.com/taskforcesh/bullmq/commit/c1c8eb03f60188e1328507c1565fb2826081c824)) + +* chore(deps): update dependency filelock to v3.12.2 ([`c6e7b8b`](https://github.com/taskforcesh/bullmq/commit/c6e7b8bbc6dfa57e9c2142bfda56d0f080f8c165)) + +* chore: fix python CHANGELOG ref ([`67e5df9`](https://github.com/taskforcesh/bullmq/commit/67e5df913f65ed94dc3500480bee785a7d01f57b)) + +* chore: update CHANGELOG.md ref ([`be20157`](https://github.com/taskforcesh/bullmq/commit/be20157b79b6359cc0b778d6952f716fa64e2feb)) + +* chore: update python changelog ([`fbedf2c`](https://github.com/taskforcesh/bullmq/commit/fbedf2c45ea0c0030eff26de6fb432c68e7697a9)) + +### Fix + +* fix(worker): set redis version always in initialization (#1989) fixes #1988 ([`a1544a8`](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) + +* fix(python): add retry strategy in connection (#1975) ([`7c5ee20`](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) + +### Unknown + +* GITBOOK-163: docs(removing-jobs): add code tabs for python ([`234e3ad`](https://github.com/taskforcesh/bullmq/commit/234e3ad7f9dfc68540fb6c118dc6ff12ac8f6c25)) + + +## v3.15.6 (2023-06-13) + +### Chore + +* chore(release): 3.15.6 [skip ci] + +## [3.15.6](https://github.com/taskforcesh/bullmq/compare/v3.15.5...v3.15.6) (2023-06-13) + +### Bug Fixes + +* **worker:** use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([0df6afa](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) ([`7f42665`](https://github.com/taskforcesh/bullmq/commit/7f42665640b0cec1eaf32b4fec15ff1955164f8b)) + +### Documentation + +* docs(python): add missing version sections (#1974) ([`77b4de7`](https://github.com/taskforcesh/bullmq/commit/77b4de7c3b41ae63e311a2c373e0d2fc787f2f53)) + +### Fix + +* fix(worker): use timeout as integer for redis lower than v6.0.0 (python) (#1981) ([`0df6afa`](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) + + +## v3.15.5 (2023-06-11) + +### Chore + +* chore(release): 3.15.5 [skip ci] + +## [3.15.5](https://github.com/taskforcesh/bullmq/compare/v3.15.4...v3.15.5) (2023-06-11) + +### Bug Fixes + +* **python:** include lua scripts when releasing ([bb4f3b2](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) +* **retry-job:** consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([e753855](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) + +### Features + +* **python:** add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([6a172e9](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) ([`69b94aa`](https://github.com/taskforcesh/bullmq/commit/69b94aae13033a385bccd93f82601a0c7c4f45a0)) + +* chore(deps): update actions/checkout digest to c85c95e (#1968) ([`85d8767`](https://github.com/taskforcesh/bullmq/commit/85d8767e96d17dc013c2553dd41e88e2c32c31f0)) + +### Ci + +* ci(python): add build execution before python release ([`fdaaff0`](https://github.com/taskforcesh/bullmq/commit/fdaaff0d51aaf8d1b585c88071aabf9749cceeb2)) + +* ci(python): check command files ([`1531db4`](https://github.com/taskforcesh/bullmq/commit/1531db4ed74b218b08f7379e0e97e5a3fe709e63)) + +### Feature + +* feat(python): add remove job method (#1965) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) + +### Fix + +* fix(retry-job): consider priority when moving job to wait (python) (#1969) ([`e753855`](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) + +* fix(python): include lua scripts when releasing ([`bb4f3b2`](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) + + +## v3.15.4 (2023-06-08) + +### Chore + +* chore(release): 3.15.4 [skip ci] + +## [3.15.4](https://github.com/taskforcesh/bullmq/compare/v3.15.3...v3.15.4) (2023-06-08) + +### Bug Fixes + +* **job:** import right reference of QueueEvents ([#1964](https://github.com/taskforcesh/bullmq/issues/1964)) ([689c845](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) ([`2ea7483`](https://github.com/taskforcesh/bullmq/commit/2ea74830cf0363ea39b077258d70f996f255a519)) + +### Ci + +* ci(python): install packaging module ([`ef0f7ed`](https://github.com/taskforcesh/bullmq/commit/ef0f7ed1d4e9e1b4f8bf7aecd79bc677c956ff67)) + +* ci(python): set user git information ([`38d23ae`](https://github.com/taskforcesh/bullmq/commit/38d23aed22ca0eb16171a013c37b51cdb403e8be)) + +* ci(python): downgrade python-semantic-release to avoid version issue ([`8a7cd62`](https://github.com/taskforcesh/bullmq/commit/8a7cd621d57aaceb1e432445fb86598dfb12cb55)) + +* ci(python): use version_source as commit ([`8002570`](https://github.com/taskforcesh/bullmq/commit/8002570555b1dfdfed3d3d331de23173d9cc67c8)) + +* ci(python): use version_source ([`973a9d3`](https://github.com/taskforcesh/bullmq/commit/973a9d357fc954ea6c44b2e14e18aef766208129)) + +### Fix + +* fix(job): import right reference of QueueEvents (#1964) ([`689c845`](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) + + +## v3.15.3 (2023-06-08) + +### Chore + +* chore(release): 3.15.3 [skip ci] + +## [3.15.3](https://github.com/taskforcesh/bullmq/compare/v3.15.2...v3.15.3) (2023-06-08) + +### Bug Fixes + +* **job:** use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([881848c](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) ([`0db3d46`](https://github.com/taskforcesh/bullmq/commit/0db3d46690acdf4b8b703427ba3fbed0893724e1)) + +* chore(deps): update dependency tslib to v2.5.3 ([`f1badc1`](https://github.com/taskforcesh/bullmq/commit/f1badc1d3ffbc0e5f70df4881a9e4586505083a7)) + +* chore(deps): update coverallsapp/github-action digest to c7885c0 ([`75e2803`](https://github.com/taskforcesh/bullmq/commit/75e280316a123c1620a408a0c91b3923f4408c83)) + +* chore(deps): update dependency pre-commit to v3 ([`49e078c`](https://github.com/taskforcesh/bullmq/commit/49e078c7e15d6548c9c71669cf15fd38f67da2cd)) + +* chore(deps): upgrade sinon ([`c884c35`](https://github.com/taskforcesh/bullmq/commit/c884c3550d48df11ddb1e50f0500aef37cb89a66)) + +* chore(python): bump to version 0.4.3 ([`8ad2e12`](https://github.com/taskforcesh/bullmq/commit/8ad2e124ea75a110981779b1fddb082f6210ac54)) + +### Ci + +* ci(python): move into python subfolder when releasing ([`d15581d`](https://github.com/taskforcesh/bullmq/commit/d15581d21bc9e5ed826c92b26cbe2f2b82c1c416)) + +* ci(python): use contains method instead of startsWith ([`646707b`](https://github.com/taskforcesh/bullmq/commit/646707bf5559ce5ee129527b8c5905922af4002d)) + +* ci(python): add python-semantic-release (#1957) ([`83cd060`](https://github.com/taskforcesh/bullmq/commit/83cd06049ead23a4a6ab4ac6dbb53371ca678ab5)) + +### Fix + +* fix(job): use QueueEvents type for waitUntilFinished (#1958) ([`881848c`](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) + + +## v3.15.2 (2023-06-06) + +### Chore + +* chore(release): 3.15.2 [skip ci] + +## [3.15.2](https://github.com/taskforcesh/bullmq/compare/v3.15.1...v3.15.2) (2023-06-06) + +### Bug Fixes + +* **worker:** better worker client naming ([c5f63af](https://github.com/taskforcesh/bullmq/commit/c5f63affe72f7b6616f4c5f3aafde858dcc0b200)) ([`492f686`](https://github.com/taskforcesh/bullmq/commit/492f686e685744511e3f817bf5f1d503e8094392)) + +### Fix + +* fix(worker): better worker client naming ([`c5f63af`](https://github.com/taskforcesh/bullmq/commit/c5f63affe72f7b6616f4c5f3aafde858dcc0b200)) + + +## v3.15.1 (2023-06-05) + +### Chore + +* chore(release): 3.15.1 [skip ci] + +## [3.15.1](https://github.com/taskforcesh/bullmq/compare/v3.15.0...v3.15.1) (2023-06-05) + +### Bug Fixes + +* **rate-limit:** consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) + +### Features + +* **python:** add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) ([`b1097c9`](https://github.com/taskforcesh/bullmq/commit/b1097c9d72dbe2cde7e2e5f6019d49e34d69b6b5)) + +* chore(deps): update actions/setup-python digest to bd6b4b6 (#1916) ([`bcc8030`](https://github.com/taskforcesh/bullmq/commit/bcc8030799907340f2f3db03edb2d83c77a52fb0)) + +### Feature + +* feat(python): add changePriority method (#1943) ([`945bcd3`](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) + +### Fix + +* fix(rate-limit): consider paused queue (#1931) ([`d97864a`](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) + +### Refactor + +* refactor(move-to-finished): return 4 values to prevent python errors when destructuring (#1936) ([`f391f2a`](https://github.com/taskforcesh/bullmq/commit/f391f2a27d5c2959c2a591d14578b9ae125c35f6)) + + +## v3.15.0 (2023-05-31) + +### Chore + +* chore(release): 3.15.0 [skip ci] + +# [3.15.0](https://github.com/taskforcesh/bullmq/compare/v3.14.2...v3.15.0) (2023-05-31) + +### Features + +* **job:** add changePriority method ([#1901](https://github.com/taskforcesh/bullmq/issues/1901)) ref [#1899](https://github.com/taskforcesh/bullmq/issues/1899) ([9485ad5](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) ([`1ccf486`](https://github.com/taskforcesh/bullmq/commit/1ccf4864c957b85f244e45673513cea239796ea4)) + +* chore(deps): lock file maintenance ([`8f4d86a`](https://github.com/taskforcesh/bullmq/commit/8f4d86a547b854ea844c5a13704874af90744c2c)) + +### Feature + +* feat(job): add changePriority method (#1901) ref #1899 ([`9485ad5`](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) + + +## v3.14.2 (2023-05-30) + +### Chore + +* chore(release): 3.14.2 [skip ci] + +## [3.14.2](https://github.com/taskforcesh/bullmq/compare/v3.14.1...v3.14.2) (2023-05-30) + +### Bug Fixes + +* **python:** fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) +* **rate-limit:** take in count priority ([#1919](https://github.com/taskforcesh/bullmq/issues/1919)) fixes [#1915](https://github.com/taskforcesh/bullmq/issues/1915) ([b8157a3](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) ([`6f4fb3c`](https://github.com/taskforcesh/bullmq/commit/6f4fb3cac980a06816660bbc7339b81db801f4d7)) + +* chore(python): bump to v0.4.1 ([`7509642`](https://github.com/taskforcesh/bullmq/commit/75096429d7a46d1f7babccdd4914f707eac32770)) + +* chore(python): add missing types to package + +Include types directory ([`7bc4f0b`](https://github.com/taskforcesh/bullmq/commit/7bc4f0bd02cf85be6e3ec9e363657d0260b826d6)) + +### Documentation + +* docs: add project homepage ([`adc5425`](https://github.com/taskforcesh/bullmq/commit/adc5425380b0e573dbf7a3b7423a631eff3ba351)) + +### Fix + +* fix(rate-limit): take in count priority (#1919) fixes #1915 ([`b8157a3`](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) + +* fix(python): fix 'install_requires' to include semver (#1927) ([`ce86ece`](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) + + +## v3.14.1 (2023-05-27) + +### Chore + +* chore(release): 3.14.1 [skip ci] + +## [3.14.1](https://github.com/taskforcesh/bullmq/compare/v3.14.0...v3.14.1) (2023-05-27) + +### Features + +* **python:** add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) + +### Performance Improvements + +* **retry-job:** get target queue list once ([#1921](https://github.com/taskforcesh/bullmq/issues/1921)) ([8a7a9dd](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) ([`5b1c5e9`](https://github.com/taskforcesh/bullmq/commit/5b1c5e9ccf2b01e2367582bd3214f9abdccea602)) + +* chore(deps): update dependency certifi to v2023 ([`8ab2353`](https://github.com/taskforcesh/bullmq/commit/8ab2353728a34c91f6b13cf697c10912158d2075)) + +* chore(deps): update dependency pipenv to v2023.5.19 ([`b59c2f8`](https://github.com/taskforcesh/bullmq/commit/b59c2f8bd79f43bcacbac0371710be0cdbc633b2)) + +### Documentation + +* docs(events): add listener api references (#1913) ([`864b5e5`](https://github.com/taskforcesh/bullmq/commit/864b5e56afb1fb1a92f41d06b155529f8f701838)) + +### Feature + +* feat(python): add getState method (#1906) ([`f0867a6`](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) + +### Performance + +* perf(retry-job): get target queue list once (#1921) ([`8a7a9dd`](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) + +### Test + +* test(job): do not save stacktrace when job key is missing (#1918) ref #1914 ([`b2d79cd`](https://github.com/taskforcesh/bullmq/commit/b2d79cdee63152b85228b5002f60c82127b9e630)) + +### Unknown + +* GITBOOK-162: change request with no subject merged in GitBook ([`84f03c4`](https://github.com/taskforcesh/bullmq/commit/84f03c43107af4cc1ee01da448662aa79c0ffdf8)) + +* GITBOOK-161: change request with no subject merged in GitBook ([`5671b8c`](https://github.com/taskforcesh/bullmq/commit/5671b8cf4587a9a254ac4e1c53ae27b13c7d10fe)) + +* GITBOOK-159: change request with no subject merged in GitBook ([`e83e284`](https://github.com/taskforcesh/bullmq/commit/e83e28459ac66851ef72a6cf402cd94459ead684)) + +* GITBOOK-158: change request with no subject merged in GitBook ([`9399384`](https://github.com/taskforcesh/bullmq/commit/93993844c6d60421a8e39d65875088c2367ca4f9)) + + +## v3.14.0 (2023-05-22) + +### Chore + +* chore(release): 3.14.0 [skip ci] + +# [3.14.0](https://github.com/taskforcesh/bullmq/compare/v3.13.4...v3.14.0) (2023-05-22) + +### Features + +* **worker:** make extendLocks overridable ([7b1386b](https://github.com/taskforcesh/bullmq/commit/7b1386bb823562d9666a1ad6e206e1deb63e57ec)) ([`5beaf52`](https://github.com/taskforcesh/bullmq/commit/5beaf5285bb06d457dceb7ae636ecefff80ed881)) + +* chore(deps): update dependency tslib to v2.5.2 (#1905) ([`02594d6`](https://github.com/taskforcesh/bullmq/commit/02594d67e73c0bfe43d0045e8f988beff27d5c0d)) + +* chore(python): bump to version 0.4.0 ([`5d8f57f`](https://github.com/taskforcesh/bullmq/commit/5d8f57fc1b967fe33f1cb561bb907c720bf4a286)) + +* chore(deps): update coverallsapp/github-action digest to 059e56d (#1907) ([`b600624`](https://github.com/taskforcesh/bullmq/commit/b60062445a5b1f918e5a62d04576c8cac96719dc)) + +* chore(bullmq-pro): update changelog (#1902) ([`d164fa8`](https://github.com/taskforcesh/bullmq/commit/d164fa8745514fe46bfb3feb02d24884e4ea4697)) + +* chore(deps): update dependency redis to v4.5.5 (#1883) ([`5b94b1c`](https://github.com/taskforcesh/bullmq/commit/5b94b1ca3d23e1cfa6d3efb73e042670d0421c39)) + +* chore(deps): lock file maintenance ([`80d39ac`](https://github.com/taskforcesh/bullmq/commit/80d39ace2cbaf61b325af8eaf3c3fe1b2bb212e6)) + +* chore(deps): update dependency platformdirs to v3.5.1 ([`4825098`](https://github.com/taskforcesh/bullmq/commit/4825098380066417ca1a9c3c96a750f8e8b6a81a)) + +### Ci + +* ci(python): fix commitmsg env reference ([`822f7a9`](https://github.com/taskforcesh/bullmq/commit/822f7a904e3f91c6b95f9faf40288427d7c20f43)) + +* ci(python): fix conditional step by startsWith ([`eb3d1d4`](https://github.com/taskforcesh/bullmq/commit/eb3d1d499b64c07f8385dc6db99370588977f9cf)) + +* ci(python): echo commit message ([`7510c22`](https://github.com/taskforcesh/bullmq/commit/7510c226a5094ae3042f3d15225708c1e1d83709)) + +* ci(python): retry lint with flake8 python ([`10191ef`](https://github.com/taskforcesh/bullmq/commit/10191ef0b2e6e578dbf3c5ab243bf1958c6a2383)) + +* ci(python): retry install dependencies python ([`1261fc4`](https://github.com/taskforcesh/bullmq/commit/1261fc487a88ee9df924f275c4eae45e7e8c62ee)) + +* ci(python): retry setup python ([`980796c`](https://github.com/taskforcesh/bullmq/commit/980796c9540e4603907e49b095bbd3b328aec29f)) + +* ci(python): remove setup python ([`23c6207`](https://github.com/taskforcesh/bullmq/commit/23c6207db9be71aef1827737a461b43c39eb05e8)) + +* ci(python): delete install dependencies python step ([`8d03ba1`](https://github.com/taskforcesh/bullmq/commit/8d03ba1daf5008fff8d6689ec5e335b25b9fbe2b)) + +* ci(python): delete flake8 step ([`e94bd83`](https://github.com/taskforcesh/bullmq/commit/e94bd835dc798ea60fcf4ce7942542f12cf42ed8)) + +* ci(python): delete commitmsg variable ([`2441eaf`](https://github.com/taskforcesh/bullmq/commit/2441eaf8ea52d12b1cf645051be5592e48a8e855)) + +* ci(python): delete Release Python step ([`3bf5e8d`](https://github.com/taskforcesh/bullmq/commit/3bf5e8dec40c40fd46a3f5fe551e7992804a51df)) + +* ci(python): try to save commit message for python action ([`d3673a1`](https://github.com/taskforcesh/bullmq/commit/d3673a1b79dbb1629d0b19f3fd9abcfdb32b32e0)) + +### Feature + +* feat(worker): make extendLocks overridable ([`7b1386b`](https://github.com/taskforcesh/bullmq/commit/7b1386bb823562d9666a1ad6e206e1deb63e57ec)) + +### Test + +* test(worker): fix flaky test ([`e08b91b`](https://github.com/taskforcesh/bullmq/commit/e08b91b6906e2a3924955f180d431fc18c0c9c18)) + +### Unknown + +* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`7970c60`](https://github.com/taskforcesh/bullmq/commit/7970c6066e3524363d649aa9d46faae57df6734c)) + + +## v3.13.4 (2023-05-11) + +### Chore + +* chore(release): 3.13.4 [skip ci] + +## [3.13.4](https://github.com/taskforcesh/bullmq/compare/v3.13.3...v3.13.4) (2023-05-11) + +### Performance Improvements + +* **rate-limit:** call pttl in script moveJobFromActiveToWait ([#1889](https://github.com/taskforcesh/bullmq/issues/1889)) ([e0d2992](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) ([`d7e640c`](https://github.com/taskforcesh/bullmq/commit/d7e640c6368a714f611920be849648348052de05)) + +### Performance + +* perf(rate-limit): call pttl in script moveJobFromActiveToWait (#1889) ([`e0d2992`](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) + + +## v3.13.3 (2023-05-10) + +### Chore + +* chore(release): 3.13.3 [skip ci] + +## [3.13.3](https://github.com/taskforcesh/bullmq/compare/v3.13.2...v3.13.3) (2023-05-10) + +### Bug Fixes + +* **child:** use named import for EventEmitter ([#1887](https://github.com/taskforcesh/bullmq/issues/1887)) ([1db396d](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) ([`64658c0`](https://github.com/taskforcesh/bullmq/commit/64658c024508fe91e85a291116ed899bbea0d564)) + +### Documentation + +* docs(bullmq-pro): update changelog (#1888) ([`0acfb79`](https://github.com/taskforcesh/bullmq/commit/0acfb79f779c6dcffca946f843290ae7bc4066e7)) + +### Fix + +* fix(child): use named import for EventEmitter (#1887) ([`1db396d`](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) + + +## v3.13.2 (2023-05-09) + +### Chore + +* chore(release): 3.13.2 [skip ci] + +## [3.13.2](https://github.com/taskforcesh/bullmq/compare/v3.13.1...v3.13.2) (2023-05-09) + +### Bug Fixes + +* **rate-limit:** consider paused queue when dynamic rate limit ([#1884](https://github.com/taskforcesh/bullmq/issues/1884)) ([a23f37e](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) ([`ce8059d`](https://github.com/taskforcesh/bullmq/commit/ce8059d5c6620acc9f8a090e447c610f80913af4)) + +### Fix + +* fix(rate-limit): consider paused queue when dynamic rate limit (#1884) ([`a23f37e`](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) + + +## v3.13.1 (2023-05-07) + +### Chore + +* chore(release): 3.13.1 [skip ci] + +## [3.13.1](https://github.com/taskforcesh/bullmq/compare/v3.13.0...v3.13.1) (2023-05-07) + +### Bug Fixes + +* **retry:** consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([01b621f](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) ([`a880069`](https://github.com/taskforcesh/bullmq/commit/a880069ca02c1b9eb64fb42a0d269b3e98aa91c3)) + +### Fix + +* fix(retry): consider when queue is paused (#1880) ([`01b621f`](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) + + +## v3.13.0 (2023-05-06) + +### Chore + +* chore(release): 3.13.0 [skip ci] + +# [3.13.0](https://github.com/taskforcesh/bullmq/compare/v3.12.1...v3.13.0) (2023-05-06) + +### Features + +* **worker:** add worker threads support ([0820985](https://github.com/taskforcesh/bullmq/commit/0820985e073582fdf841affad38ecc7ab64691ec)) ([`dd1803f`](https://github.com/taskforcesh/bullmq/commit/dd1803f866ff249f2c19691dc1c020a69125a88f)) + +* chore: add missing renaming of master to main ([`73ce10d`](https://github.com/taskforcesh/bullmq/commit/73ce10d31b1498e18dc352f4593444507036a6b4)) + +### Feature + +* feat(worker): add worker threads support ([`0820985`](https://github.com/taskforcesh/bullmq/commit/0820985e073582fdf841affad38ecc7ab64691ec)) + +### Test + +* test(child-pool): add another test ([`6ea5bbb`](https://github.com/taskforcesh/bullmq/commit/6ea5bbbd87129d447544d5223696f7cf1f7372d6)) + +* test: increase coverage for async fifo queue ([`7b8949c`](https://github.com/taskforcesh/bullmq/commit/7b8949cb4d2224f90da3c0d710393736960cc55c)) + + +## v3.12.1 (2023-05-05) + +### Chore + +* chore(release): 3.12.1 [skip ci] + +## [3.12.1](https://github.com/taskforcesh/bullmq/compare/v3.12.0...v3.12.1) (2023-05-05) + +### Bug Fixes + +* **python:** stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) +* **worker:** close open handles after closing ([#1861](https://github.com/taskforcesh/bullmq/issues/1861)) fixes [#1312](https://github.com/taskforcesh/bullmq/issues/1312) ([39286e8](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) + +### Features + +* **python:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) +* **python:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) +* **python:** add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([870da45](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) +* **python:** add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) +* **python:** add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) +* **python:** save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) +* **python:** support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) ([`8f02061`](https://github.com/taskforcesh/bullmq/commit/8f020618d364c5706aca63086effe993fd437bbc)) + +* chore(deps): update coverallsapp/github-action digest to 09b709c ([`7af4c78`](https://github.com/taskforcesh/bullmq/commit/7af4c78af61c93925e768da358fd1dcdbaad1165)) + +* chore(deps): update dependency virtualenv to v20.23.0 ([`31c475a`](https://github.com/taskforcesh/bullmq/commit/31c475aba94ce3ace5f3da67b759595097a8ca7e)) + +* chore(deps): update github/codeql-action digest to 29b1f65 (#1876) ([`e81e94a`](https://github.com/taskforcesh/bullmq/commit/e81e94aeef1a07a975235c1c330f297c2bf8c9f5)) + +* chore(worker): remove out-commented code ([`332672b`](https://github.com/taskforcesh/bullmq/commit/332672b5d589f624db7c7dbd4a130536a011cb83)) + +* chore(python): update python version ([`3ae441a`](https://github.com/taskforcesh/bullmq/commit/3ae441a904f1e5555754f116cb7f5f0ef38930f6)) + +* chore(deps): update dependency platformdirs to v3.5.0 ([`a0b8cd3`](https://github.com/taskforcesh/bullmq/commit/a0b8cd3ca96f7ad386d437355bfb630da058d233)) + +* chore(deps): update github/codeql-action digest to f3feb00 ([`450f449`](https://github.com/taskforcesh/bullmq/commit/450f4490988e01a1f1a5ea054eb1ac87c384c831)) + +* chore(deps): update dependency pipenv to v2023.4.29 ([`dd82136`](https://github.com/taskforcesh/bullmq/commit/dd821365ab00efe1bb8bd663815ce300c4693449)) + +* chore(deps): lock file maintenance (#1864) ([`f2f1f2c`](https://github.com/taskforcesh/bullmq/commit/f2f1f2ca9c53ea8dd7e7d44557d039d822ddb9b9)) + +* chore(deps): lock file maintenance (#1851) ([`083b4d5`](https://github.com/taskforcesh/bullmq/commit/083b4d55ea67c75ae2a40c0545157cecd8e50508)) + +* chore(python): replace staticmethod function with decorator (#1826) ([`475a188`](https://github.com/taskforcesh/bullmq/commit/475a18863b678e72f4d3ba65af70e9d15c199333)) + +* chore(deps): update actions/checkout digest to 8e5e7e5 ([`59cca88`](https://github.com/taskforcesh/bullmq/commit/59cca889afe2205821201e74616b3c3326cfa0fc)) + +* chore(deps): update actions/setup-python digest to 57ded4d ([`182b4bb`](https://github.com/taskforcesh/bullmq/commit/182b4bb06a398b3a61ea070a7256d68cb77b86e6)) + +* chore(deps): update github/codeql-action digest to 7df0ce3 ([`ef7d3e0`](https://github.com/taskforcesh/bullmq/commit/ef7d3e0b1357ba3c302c22792cc5a58ea7850889)) + +* chore(python): move types into a subfolder (#1828) ([`5428ecb`](https://github.com/taskforcesh/bullmq/commit/5428ecb6524ddcf880402108e7daa73ed4c4807a)) + +* chore(deps): update dependency filelock to v3.12.0 ([`7919a59`](https://github.com/taskforcesh/bullmq/commit/7919a59c1c6f29de00cbea8cf60105cb9d87ba76)) + +* chore(deps): update dependency virtualenv to v20.22.0 ([`9c2c76c`](https://github.com/taskforcesh/bullmq/commit/9c2c76c41b7ac5a8d77d2ee3e4e905cba9e07e0b)) + +* chore(deps): update dependency pipenv to v2023.4.20 ([`b4234c9`](https://github.com/taskforcesh/bullmq/commit/b4234c9ad74af0e671cd3477aba47ffcc5a548c3)) + +### Documentation + +* docs(python): add changelog (#1868) ([`e83f7d0`](https://github.com/taskforcesh/bullmq/commit/e83f7d0447471c24a753f0ad3e302a1eb85382d5)) + +* docs(repeatable): fix invalid cron expression in example (#1867) ([`4f31730`](https://github.com/taskforcesh/bullmq/commit/4f3173003464d3ef468271ad2394c1ca613f6077)) + +### Feature + +* feat(python): add retry method into job (#1877) ([`870da45`](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) + +* feat(python): add updateData method (#1871) ([`800b8c4`](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) + +* feat(python): support retryJob logic (#1869) ([`b044a03`](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) + +* feat(python): save stacktrace when job fails (#1859) ([`0b538ce`](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) + +* feat(python): add moveToDelayed job method (#1849) ([`5bebf8d`](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) + +* feat(python): add updateProgress method in job class(#1830) ([`e1e1aa2`](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) + +* feat(python): accept redis options as string ([`01f549e`](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) + +### Fix + +* fix(worker): close open handles after closing (#1861) fixes #1312 ([`39286e8`](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) + +* fix(python): stop processes when force stop (#1837) ([`514699c`](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) + +### Refactor + +* refactor(finished-on): save finishedOn on job methods (#1857) ([`5039369`](https://github.com/taskforcesh/bullmq/commit/503936909e004423536667720952e87fee90cff0)) + +### Test + +* test(events): try to fix flaky test ([`8358e28`](https://github.com/taskforcesh/bullmq/commit/8358e28680fe85a51935052082475fb8fa5f9c06)) + +### Unknown + +* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`13b26eb`](https://github.com/taskforcesh/bullmq/commit/13b26eb377632133a7280258687b9f95bdabd2f4)) + + +## v3.12.0 (2023-04-20) + +### Chore + +* chore(release): 3.12.0 [skip ci] + +# [3.12.0](https://github.com/taskforcesh/bullmq/compare/v3.11.0...v3.12.0) (2023-04-20) + +### Features + +* upgrade ioredis to 5.3.2 ([375b1be](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) ([`fc66096`](https://github.com/taskforcesh/bullmq/commit/fc66096d79734ad543562dfdbd6739c080f7102f)) + +* chore(deps): update coverallsapp/github-action digest to d2cf009 (#1842) ([`c72bc17`](https://github.com/taskforcesh/bullmq/commit/c72bc1756faec43b7b67528f0f0bdacef193e005)) + +* chore(deps): lock file maintenance ([`10135f2`](https://github.com/taskforcesh/bullmq/commit/10135f23fc7a1c38da96715b296a271b0eaffb58)) + +* chore(deps): update dependency ioredis to v5.3.2 ([`3eff8e6`](https://github.com/taskforcesh/bullmq/commit/3eff8e66d2582c024e71149c6621671af99e363c)) + +### Documentation + +* docs(bullmq-pro): update changelog (#1838) ([`13e838a`](https://github.com/taskforcesh/bullmq/commit/13e838a6cf3ccf2209cffdf09b9e2e53b8121e3e)) + +### Feature + +* feat: upgrade ioredis to 5.3.2 ([`375b1be`](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) + +### Unknown + +* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`95f3243`](https://github.com/taskforcesh/bullmq/commit/95f3243b17cf5cf10361785bc95653d4dc45a917)) + +* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`0514722`](https://github.com/taskforcesh/bullmq/commit/05147224c0f2e7df8a0298c999c8655d99ff011f)) + + +## v3.11.0 (2023-04-17) + +### Chore + +* chore(release): 3.11.0 [skip ci] + +# [3.11.0](https://github.com/taskforcesh/bullmq/compare/v3.10.4...v3.11.0) (2023-04-17) + +### Bug Fixes + +* **python:** correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([ef0c5d6](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) + +### Features + +* **python:** add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([46d6f94](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) +* **python:** improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([ec7c49e](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) +* **upstash:** don't throw an error when detecting an upstash host ([2e06bca](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) ([`1a3113b`](https://github.com/taskforcesh/bullmq/commit/1a3113b97106eebd63883dc8865b7c6a3f028765)) + +* chore: remove extra parentheses ([`8bb76ab`](https://github.com/taskforcesh/bullmq/commit/8bb76ab3a71a38f2e8df7977a0c08cce31f8a202)) + +* chore(deps): update dependency semver to v7.4.0 ([`79f8363`](https://github.com/taskforcesh/bullmq/commit/79f8363cad94e206b0f6416657407b5d649be0b4)) + +* chore(python): replace is operator (#1819) ([`cd15d7d`](https://github.com/taskforcesh/bullmq/commit/cd15d7d46626511231f50f86c11898c6fa551c5b)) + +* chore(deps): lock file maintenance ([`13dcd76`](https://github.com/taskforcesh/bullmq/commit/13dcd76c4a567b3750388806cf7923ac6d5e2cb2)) + +* chore(python): remove unnecessary semicolons (#1801) ([`b4729e9`](https://github.com/taskforcesh/bullmq/commit/b4729e99622a802a09db9f8007b1039b4001b8fb)) + +* chore(python): add JobOptions to add method (#1798) ([`8d0cbda`](https://github.com/taskforcesh/bullmq/commit/8d0cbdad4006394be080f8dc6ffdf5f193afc5aa)) + +* chore(deps): update github/codeql-action digest to d186a2a ([`99e5f6f`](https://github.com/taskforcesh/bullmq/commit/99e5f6fa9c5f2f4bcb1ab321b6221da7548055fe)) + +* chore(python): add QueueOptions (#1797) ([`7478049`](https://github.com/taskforcesh/bullmq/commit/74780498a76849b7157af7688ea5b9c37c1c09dd)) + +* chore(python): add JobOptions (#1796) ([`893f71a`](https://github.com/taskforcesh/bullmq/commit/893f71a9d0309aef924fba4ec605d9fb4f6c0f68)) + +* chore(deps): update dependency filelock to v3.11.0 ([`21d7e14`](https://github.com/taskforcesh/bullmq/commit/21d7e141fa30762369d2804b7901dfab24271120)) + +* chore(python): add WorkerOptions typed dict (#1795) ([`4843634`](https://github.com/taskforcesh/bullmq/commit/48436341230b495d9400948626c20db40761e2d1)) + +* chore(deps): pin actions/setup-python action to d27e3f3 ([`17ccf4f`](https://github.com/taskforcesh/bullmq/commit/17ccf4ff807179c9f65a9f4087fbb6671212f07c)) + +* chore(python): update python docs comments (#1790) ([`cb145ce`](https://github.com/taskforcesh/bullmq/commit/cb145cef8cc655deafbe10edef2f9540d1ca53cc)) + +### Documentation + +* docs: fix type error in scheduled job example code (closes taskforcesh/bullmq#1815) ([`11e62c9`](https://github.com/taskforcesh/bullmq/commit/11e62c9241a9c25e811bc5d8e99405c3871bc67f)) + +* docs: fix typo ([`806f758`](https://github.com/taskforcesh/bullmq/commit/806f758df9ea0c3d1e42f39e2fa00f76a5f5d6c4)) + +* docs(clean): fix typo/grammar (#1812) ([`65c12df`](https://github.com/taskforcesh/bullmq/commit/65c12df09c2364f5b722da532825af918e3e1a59)) + +* docs(flows): add warning about queues configurations (#1805) ([`3bdde0f`](https://github.com/taskforcesh/bullmq/commit/3bdde0fed601e335a2f0b3f814c394eeaecad85d)) + +### Feature + +* feat(upstash): don't throw an error when detecting an upstash host + +Upstash is currently rolling out redis streams to all regions and will be compatible with bullmq. ([`2e06bca`](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) + +* feat(python): add getJobCounts method (#1807) ([`46d6f94`](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) + +* feat(python): improve worker concurrency (#1809) ([`ec7c49e`](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) + +### Fix + +* fix(python): correct condition so that the worker keeps processing jobs indefinitely (#1800) ([`ef0c5d6`](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) + +### Refactor + +* refactor(python): update getCompleted return type (#1820) ([`ac8a96b`](https://github.com/taskforcesh/bullmq/commit/ac8a96bafa72542ffc2c632a1059a1403e282bc6)) + +* refactor(python): type hinting, remove white space, semicolon etc.. (#1818) ([`2dbb1ab`](https://github.com/taskforcesh/bullmq/commit/2dbb1ab74b11e2c894b96f44e64fe405a9126884)) + +### Unknown + +* GITBOOK-157: change request with no subject merged in GitBook ([`6e436ca`](https://github.com/taskforcesh/bullmq/commit/6e436caa7929d9e123d424165a7a46490b2da0af)) + + +## v3.10.4 (2023-04-05) + +### Chore + +* chore(release): 3.10.4 [skip ci] + +## [3.10.4](https://github.com/taskforcesh/bullmq/compare/v3.10.3...v3.10.4) (2023-04-05) + +### Bug Fixes + +* **flow:** do not remove completed children results ([#1788](https://github.com/taskforcesh/bullmq/issues/1788)) fixes [#1778](https://github.com/taskforcesh/bullmq/issues/1778) ([04b547a](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) +* **python:** fix scripts typing on array2obj function ([#1786](https://github.com/taskforcesh/bullmq/issues/1786)) ([134f6ab](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) ([`86f5774`](https://github.com/taskforcesh/bullmq/commit/86f57742e3233853b944ae8616c1cfa5a16706c3)) + +* chore(deps): update peaceiris/actions-gh-pages digest to 373f7f2 ([`ef7d0e2`](https://github.com/taskforcesh/bullmq/commit/ef7d0e26882f875e0942a464c8ca3afcabea5436)) + +* chore(deps): update dependency platformdirs to v3.2.0 ([`268dd38`](https://github.com/taskforcesh/bullmq/commit/268dd388b30568c6f474409b2424eee2df63fde8)) + +* chore(python): add missing typings in python (#1789) ([`9e22393`](https://github.com/taskforcesh/bullmq/commit/9e22393a66dee10d339225e453b4a52cdd9f2104)) + +* chore(deps): update actions/checkout digest to 8f4b7f8 ([`d081c9f`](https://github.com/taskforcesh/bullmq/commit/d081c9f3eb761143fdf5bd630c1dc5ee9bc02bd9)) + +* chore(deps): update dependency redis to v4.5.4 [security] ([`60c3c23`](https://github.com/taskforcesh/bullmq/commit/60c3c2323deb6a073760dbd8f07d9874a444fab0)) + +* chore(deps): update supercharge/redis-github-action action to v1.5.0 ([`663f961`](https://github.com/taskforcesh/bullmq/commit/663f9617b751e55b85e0226bc12cdd94ecb1d527)) + +* chore(deps): lock file maintenance ([`b65fa9b`](https://github.com/taskforcesh/bullmq/commit/b65fa9b51fa2b8813f63b153a25ac781fa9b72d0)) + +* chore(deps): update dependency cron-parser to v4.8.1 ([`33a91eb`](https://github.com/taskforcesh/bullmq/commit/33a91eb9447d55e14347d1dc90c48e43f912c082)) + +* chore(deps): update dependency msgpackr to v1.8.5 ([`1b0f4e0`](https://github.com/taskforcesh/bullmq/commit/1b0f4e0b0fe797e346fe9a66e50946aa1d45cbdf)) + +* chore(deps): update dependency filelock to v3.10.7 ([`35955b7`](https://github.com/taskforcesh/bullmq/commit/35955b7363bff083d4e3d933c52a5dd96326e277)) + +* chore(deps): update dependency msgpack to v1.0.5 (#1731) ([`7ca07dd`](https://github.com/taskforcesh/bullmq/commit/7ca07ddfd46383863fbcdb383dcc800e05bd000a)) + +### Documentation + +* docs(remove-jobs): add clean method description ([`85c3049`](https://github.com/taskforcesh/bullmq/commit/85c30493aa8f95277da07d1c12d9a4ab03648e5f)) + +* docs(pattern): add adding bulks section (#1782) ([`7785102`](https://github.com/taskforcesh/bullmq/commit/7785102c6905965c8e6bf39ee8c4992e6ed40ee7)) + +* docs(step-jobs): enhance documentation when throwing errors (#1774) ([`649aa6c`](https://github.com/taskforcesh/bullmq/commit/649aa6c7298083c808b73ce79ffa52351e9ec716)) + +* docs(flow-producer): add usage of addBulk method (#1773) ([`229c87e`](https://github.com/taskforcesh/bullmq/commit/229c87e9db144e26d23776b2e00ceb5467c0f0fb)) + +### Fix + +* fix(flow): do not remove completed children results (#1788) fixes #1778 ([`04b547a`](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) + +* fix(python): fix scripts typing on array2obj function (#1786) ([`134f6ab`](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) + +### Refactor + +* refactor(python): replace string concatenation with string formatting ([`ba26f64`](https://github.com/taskforcesh/bullmq/commit/ba26f64932d4b90861c001ee54bd60bcc158e6c9)) + +### Test + +* test(repeat): validate delayed records are deleted when removing repeatable (#1781) ([`3df8afb`](https://github.com/taskforcesh/bullmq/commit/3df8afb55725ac8e92a37ee132513fb5c7dc0051)) + + +## v3.10.3 (2023-03-30) + +### Chore + +* chore(release): 3.10.3 [skip ci] + +## [3.10.3](https://github.com/taskforcesh/bullmq/compare/v3.10.2...v3.10.3) (2023-03-30) + +### Bug Fixes + +* **flow:** consider removing dependency on removeOnFail true ([#1753](https://github.com/taskforcesh/bullmq/issues/1753)) ([de5a299](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) +* **python:** pass maxMetricsSize as empty string when it is not provided fixes [#1754](https://github.com/taskforcesh/bullmq/issues/1754) ([6bda2b2](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) ([`8c34cc7`](https://github.com/taskforcesh/bullmq/commit/8c34cc7dcb71413a77b1e9f5bdb157d5b6d7a0ac)) + +* chore(deps): update dependency pipenv to v2023.3.20 ([`65d9c97`](https://github.com/taskforcesh/bullmq/commit/65d9c97f6e1d253a08bc7111bbdebdd825e3d647)) + +* chore(deps): update actions/setup-node digest to 64ed1c7 ([`accfeff`](https://github.com/taskforcesh/bullmq/commit/accfeff2751e5879bb43d3018ba3150628fe0428)) + +* chore(deps): update github/codeql-action digest to 04df126 ([`d604078`](https://github.com/taskforcesh/bullmq/commit/d604078b560090e1310e48512e01655414687a6a)) + +* chore(deps): update dependency redis to v4.5.3 [security] ([`f6e7124`](https://github.com/taskforcesh/bullmq/commit/f6e712432b57372052db25ea77e0da15821b07d2)) + +* chore(python): update README ([`4ea9642`](https://github.com/taskforcesh/bullmq/commit/4ea9642193e3a9ac9852314a6e3f21558eaa267b)) + +* chore(asyncfifoqueue): add TODO comment ([`38e0708`](https://github.com/taskforcesh/bullmq/commit/38e0708d12e52373b9882707b2676ad7f06070a4)) + +* chore(deps): update dependency platformdirs to v3 ([`2654023`](https://github.com/taskforcesh/bullmq/commit/265402339268acb5152a04571c641adfff22d5c0)) + +* chore(deps): update coverallsapp/github-action digest to 6674157 ([`5e2df99`](https://github.com/taskforcesh/bullmq/commit/5e2df99d1c8bff83940a17be83ec4e006f9f75d4)) + +* chore(deps): update dependency virtualenv to v20.21.0 ([`33b9f7d`](https://github.com/taskforcesh/bullmq/commit/33b9f7d731a439e6773311f0b590738776576caf)) + +### Documentation + +* docs(step-jobs): add how to import errors (#1748) ([`d0cbb76`](https://github.com/taskforcesh/bullmq/commit/d0cbb7616853c2d9f5f87d4c61c39c02c7080855)) + +### Fix + +* fix(flow): consider removing dependency on removeOnFail true (#1753) ([`de5a299`](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) + +* fix(python): pass maxMetricsSize as empty string when it is not provided fixes #1754 ([`6bda2b2`](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) + +### Unknown + +* GITBOOK-156: change request with no subject merged in GitBook ([`f0b04af`](https://github.com/taskforcesh/bullmq/commit/f0b04af4c5268dc0df305c49c95be6b524e9dacc)) + +* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`72eb6eb`](https://github.com/taskforcesh/bullmq/commit/72eb6ebeff12261777b86f2bc74a9cbbba1609f0)) + + +## v3.10.2 (2023-03-22) + +### Chore + +* chore(release): 3.10.2 [skip ci] + +## [3.10.2](https://github.com/taskforcesh/bullmq/compare/v3.10.1...v3.10.2) (2023-03-22) + +### Bug Fixes + +* **job:** avoid error when job is moved when processing ([#1354](https://github.com/taskforcesh/bullmq/issues/1354)) fixes [#1343](https://github.com/taskforcesh/bullmq/issues/1343) [#1602](https://github.com/taskforcesh/bullmq/issues/1602) ([78085e4](https://github.com/taskforcesh/bullmq/commit/78085e4304357dd3695df61057f91e706c3a52bf)) ([`358ab2a`](https://github.com/taskforcesh/bullmq/commit/358ab2a9179155659800d48edee0f1f77309bff1)) + +* chore(deps): update dependency filelock to v3.9.1 ([`a695dd9`](https://github.com/taskforcesh/bullmq/commit/a695dd917446cd3b10b3ac8aa7cdd5a71b7dfd86)) + +* chore(deps): update github/codeql-action digest to 168b99b ([`20b8417`](https://github.com/taskforcesh/bullmq/commit/20b841717335df7d9bb6f01c0f5bba7a563070f9)) + +### Documentation + +* docs: expose async-fifo-queue (#1743) ([`922d118`](https://github.com/taskforcesh/bullmq/commit/922d118d4629e765e2f32e2bc5dae836a3e34f8b)) + +### Fix + +* fix(job): avoid error when job is moved when processing (#1354) fixes #1343 #1602 ([`78085e4`](https://github.com/taskforcesh/bullmq/commit/78085e4304357dd3695df61057f91e706c3a52bf)) + + +## v3.10.1 (2023-03-06) + +### Chore + +* chore(release): 3.10.1 [skip ci] + +## [3.10.1](https://github.com/taskforcesh/bullmq/compare/v3.10.0...v3.10.1) (2023-03-06) + +### Bug Fixes + +* **worker:** throw error with invalid concurrency fixes [#1723](https://github.com/taskforcesh/bullmq/issues/1723) ([2a1cdbe](https://github.com/taskforcesh/bullmq/commit/2a1cdbe3e871309f460aadc14b4d632238c32aa9)) ([`5849cf6`](https://github.com/taskforcesh/bullmq/commit/5849cf686064bfb5f28ccb735ec47fb44553c5a8)) + +### Fix + +* fix(worker): throw error with invalid concurrency fixes #1723 ([`2a1cdbe`](https://github.com/taskforcesh/bullmq/commit/2a1cdbe3e871309f460aadc14b4d632238c32aa9)) + +### Unknown + +* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`21c9de0`](https://github.com/taskforcesh/bullmq/commit/21c9de07001a6519fb12b32d87f760f8e481cb35)) + + +## v3.10.0 (2023-03-02) + +### Chore + +* chore(release): 3.10.0 [skip ci] + +# [3.10.0](https://github.com/taskforcesh/bullmq/compare/v3.9.0...v3.10.0) (2023-03-02) + +### Bug Fixes + +* **worker:** close lock extended timer ([7995f18](https://github.com/taskforcesh/bullmq/commit/7995f18bb7712bd50d0fa3d17c4ab565b16ab379)) +* **worker:** correct lock extender logic ([6aa3569](https://github.com/taskforcesh/bullmq/commit/6aa3569db0fe0137790e61a4b5982d2b35ee5646)) +* **worker:** start stalled check timer ([4763be0](https://github.com/taskforcesh/bullmq/commit/4763be028b0c7b0460fd0804d4569c446a06ef4a)) + +### Features + +* **worker:** replace Promise.race with efficient an async fifo ([0d94e35](https://github.com/taskforcesh/bullmq/commit/0d94e35e805b09c3b4c7404b8a2eeb71a1aff5c4)) +* **worker:** simplify lock extension to one call independent of concurrency ([ebf1aeb](https://github.com/taskforcesh/bullmq/commit/ebf1aeb2400383d0ae90ab68aeb4822aea03ba44)) + +### Performance Improvements + +* **scripts:** reuse keys array to avoid allocations ([feac7b4](https://github.com/taskforcesh/bullmq/commit/feac7b4070a6a3720597af36c43d095e9ea37173)) +* **worker:** improve worker memory consumption ([4846cf1](https://github.com/taskforcesh/bullmq/commit/4846cf1fe3f9ea35f58a679c11706e1a7101c898)) ([`4cb5250`](https://github.com/taskforcesh/bullmq/commit/4cb5250886f8f454a7ee4ee4d2b1754cd83df59b)) + +### Documentation + +* docs(auto-removal): add worker auto-removal examples (#1715) ([`4069344`](https://github.com/taskforcesh/bullmq/commit/40693440b473cd311da6a33ce591e8094fd9fc92)) + +### Feature + +* feat(worker): replace Promise.race with efficient an async fifo ([`0d94e35`](https://github.com/taskforcesh/bullmq/commit/0d94e35e805b09c3b4c7404b8a2eeb71a1aff5c4)) + +### Fix + +* fix(worker): correct lock extender logic ([`6aa3569`](https://github.com/taskforcesh/bullmq/commit/6aa3569db0fe0137790e61a4b5982d2b35ee5646)) + +* fix(worker): close lock extended timer ([`7995f18`](https://github.com/taskforcesh/bullmq/commit/7995f18bb7712bd50d0fa3d17c4ab565b16ab379)) + +* fix(worker): start stalled check timer ([`4763be0`](https://github.com/taskforcesh/bullmq/commit/4763be028b0c7b0460fd0804d4569c446a06ef4a)) + +### Performance + +* perf(scripts): reuse keys array to avoid allocations ([`feac7b4`](https://github.com/taskforcesh/bullmq/commit/feac7b4070a6a3720597af36c43d095e9ea37173)) + +* perf(worker): improve worker memory consumption ([`4846cf1`](https://github.com/taskforcesh/bullmq/commit/4846cf1fe3f9ea35f58a679c11706e1a7101c898)) + +### Test + +* test(getters): skip flaky test for now ([`d0d4bf2`](https://github.com/taskforcesh/bullmq/commit/d0d4bf25ed1bae69405492b4744b675c6882e777)) + +* test(getters): add timeout for wait to ready ([`bd18ef4`](https://github.com/taskforcesh/bullmq/commit/bd18ef43913aa956c61b399cea81640cbb11f14d)) + +* test(getters): fix getWorkers() test for shared connections ([`4cbc9ca`](https://github.com/taskforcesh/bullmq/commit/4cbc9cacd994931750aa93699408e4c6e0e27c6f)) + +### Unknown + +* Merge pull request #1706 from taskforcesh/feat/simplified-lock-extension + +feat/several-memory-optimizations ([`0881eb1`](https://github.com/taskforcesh/bullmq/commit/0881eb1345d7c50da181b1ba73162174da50db53)) + +* Merge branch 'feat/simplified-lock-extension' of https://github.com/taskforcesh/bullmq into feat/simplified-lock-extension ([`3a8293a`](https://github.com/taskforcesh/bullmq/commit/3a8293ab5948450ba027dea3c86ce98e5c97411c)) + +* Merge branch 'master' into feat/simplified-lock-extension ([`4284eb9`](https://github.com/taskforcesh/bullmq/commit/4284eb90342efe19e04f547cca6d7586eb646c7b)) + +* GITBOOK-154: No subject ([`bd233a9`](https://github.com/taskforcesh/bullmq/commit/bd233a96f4b47a7565eb908f742a3f1aa694b859)) + +* Merge branch 'master' into feat/simplified-lock-extension ([`b1d2dc8`](https://github.com/taskforcesh/bullmq/commit/b1d2dc8097ec83f8d56bf089ff7a6e0e4ceedcbc)) + +* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`573c6cb`](https://github.com/taskforcesh/bullmq/commit/573c6cbefa91fb0f236ace4d0aeb980640414376)) + + +## v3.9.0 (2023-02-25) + +### Chore + +* chore(release): 3.9.0 [skip ci] + +# [3.9.0](https://github.com/taskforcesh/bullmq/compare/v3.8.0...v3.9.0) (2023-02-25) + +### Features + +* **worker:** add remove on complete and fail options ([#1703](https://github.com/taskforcesh/bullmq/issues/1703)) ([cf13494](https://github.com/taskforcesh/bullmq/commit/cf1349471dcbf0e43feea9972eaa71d2299d619f)) ([`3dc3b55`](https://github.com/taskforcesh/bullmq/commit/3dc3b55b787b49701dcf7aa74e85a216c774c231)) + +* chore(deps): bump json5 from 1.0.1 to 1.0.2 (#1613) ([`b58c6f3`](https://github.com/taskforcesh/bullmq/commit/b58c6f302b363720c2004dd2c1f7a7dfecf6640b)) + +### Feature + +* feat(worker): add remove on complete and fail options (#1703) ([`cf13494`](https://github.com/taskforcesh/bullmq/commit/cf1349471dcbf0e43feea9972eaa71d2299d619f)) + + +## v3.8.0 (2023-02-23) + +### Chore + +* chore(release): 3.8.0 [skip ci] + +# [3.8.0](https://github.com/taskforcesh/bullmq/compare/v3.7.2...v3.8.0) (2023-02-23) + +### Bug Fixes + +* **worker:** run stalled check directly first time ([f71ec03](https://github.com/taskforcesh/bullmq/commit/f71ec03111a22897cbf2fad39073185e4aeac6d6)) + +### Features + +* **worker:** add a public method to run the stalled checker ([3159266](https://github.com/taskforcesh/bullmq/commit/3159266ccb002d4fc71b7ee7ac63c465c536dbd1)) +* **worker:** add support to disable stalled checks ([49e860c](https://github.com/taskforcesh/bullmq/commit/49e860c6675853971e992c2945b445660504e3b2)) ([`aa74246`](https://github.com/taskforcesh/bullmq/commit/aa742463f7dfbec433d166a42dfefd5b9248a544)) + +### Documentation + +* docs(worker): improve options documentation ([`47740b8`](https://github.com/taskforcesh/bullmq/commit/47740b86332036c7c9a4cc80473544618b0454aa)) + +### Feature + +* feat(worker): add a public method to run the stalled checker ([`3159266`](https://github.com/taskforcesh/bullmq/commit/3159266ccb002d4fc71b7ee7ac63c465c536dbd1)) + +* feat(worker): add support to disable stalled checks ([`49e860c`](https://github.com/taskforcesh/bullmq/commit/49e860c6675853971e992c2945b445660504e3b2)) + +### Fix + +* fix(worker): run stalled check directly first time ([`f71ec03`](https://github.com/taskforcesh/bullmq/commit/f71ec03111a22897cbf2fad39073185e4aeac6d6)) + +### Test + +* test(worker): renew lock high concurrency ([`5d25a37`](https://github.com/taskforcesh/bullmq/commit/5d25a37ecba93ace3114da95ca9cbc40145349bb)) + +### Unknown + +* GITBOOK-153: No subject ([`a185d5e`](https://github.com/taskforcesh/bullmq/commit/a185d5e551162302a1236d9c52e4681d5b5ae2f5)) + + +## v3.7.2 (2023-02-23) + +### Chore + +* chore(release): 3.7.2 [skip ci] + +## [3.7.2](https://github.com/taskforcesh/bullmq/compare/v3.7.1...v3.7.2) (2023-02-23) + +### Bug Fixes + +* **worker:** restore failed event job parameter typing ([#1707](https://github.com/taskforcesh/bullmq/issues/1707)) ([44c2203](https://github.com/taskforcesh/bullmq/commit/44c2203ab65d406be9a913254600fe07c83e62d5)) ([`3ecb8f7`](https://github.com/taskforcesh/bullmq/commit/3ecb8f7fbb736e223aa73bbbf8f07629892902fa)) + +* chore(deps): lock file maintenance ([`0c85108`](https://github.com/taskforcesh/bullmq/commit/0c85108997b706ff2c52643d5752b0ed2e9c76a3)) + +### Feature + +* feat(worker): simplify lock extension to one call independent of concurrency ([`ebf1aeb`](https://github.com/taskforcesh/bullmq/commit/ebf1aeb2400383d0ae90ab68aeb4822aea03ba44)) + +### Fix + +* fix(worker): restore failed event job parameter typing (#1707) ([`44c2203`](https://github.com/taskforcesh/bullmq/commit/44c2203ab65d406be9a913254600fe07c83e62d5)) + +### Unknown + +* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`cc35401`](https://github.com/taskforcesh/bullmq/commit/cc35401963532293dd222defcb20864bab12c5f9)) + + +## v3.7.1 (2023-02-22) + +### Chore + +* chore(release): 3.7.1 [skip ci] + +## [3.7.1](https://github.com/taskforcesh/bullmq/compare/v3.7.0...v3.7.1) (2023-02-22) + +### Bug Fixes + +* **worker:** failed event receives an optional job parameter ([#1702](https://github.com/taskforcesh/bullmq/issues/1702)) fixes [#1690](https://github.com/taskforcesh/bullmq/issues/1690) ([6009906](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) + +### Features + +* **python:** add retryJobs method ([#1688](https://github.com/taskforcesh/bullmq/issues/1688)) ([2745327](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) +* **python:** add trimEvents ([#1695](https://github.com/taskforcesh/bullmq/issues/1695)) ([ca48163](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) ([`e465b55`](https://github.com/taskforcesh/bullmq/commit/e465b5574a19013868250658740b0fdda1d2c6f6)) + +* chore(deps): update dependency virtualenv to v20.19.0 (#1686) ([`2397d00`](https://github.com/taskforcesh/bullmq/commit/2397d0068f9fdf4036abddb0aca205f9e5ca8d54)) + +### Feature + +* feat(python): add trimEvents (#1695) ([`ca48163`](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) + +* feat(python): add retryJobs method (#1688) ([`2745327`](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) + +### Fix + +* fix(worker): failed event receives an optional job parameter (#1702) fixes #1690 ([`6009906`](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) + + +## v3.7.0 (2023-02-16) + +### Chore + +* chore(release): 3.7.0 [skip ci] + +# [3.7.0](https://github.com/taskforcesh/bullmq/compare/v3.6.6...v3.7.0) (2023-02-16) + +### Features + +* initial python package ([#1673](https://github.com/taskforcesh/bullmq/issues/1673)) ([a97b22f](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) ([`3b63c3e`](https://github.com/taskforcesh/bullmq/commit/3b63c3e629c1d63b6692f823fd83888f60a3a834)) + +* chore: prevent npm releases from python changes ([`3c2dacb`](https://github.com/taskforcesh/bullmq/commit/3c2dacb0952190afdf9d7262502c7df6dd1376c4)) + +* chore: remove unneeded argument ([`cac6f02`](https://github.com/taskforcesh/bullmq/commit/cac6f026b906274cba02e601f7496bfcfb42b18d)) + +* chore: remove unneeded argument ([`49bb158`](https://github.com/taskforcesh/bullmq/commit/49bb158daac81c6a84101e2b10e92da275e89031)) + +### Feature + +* feat: initial python package (#1673) + +* feat: initial python package + +* chore: correct python actions + +* style: delete white spaces + +* feat(python): add isPaused method + +* chore: add missing async + +* feat(python): add more features to the python package + +* chore: avoid trigger npm releases for python changes + +* chore(python): better module handling + +* fix(python): some lint errors + +--------- + +Co-authored-by: rogger andrÊ valverde flores <rogger.valverde@uni.pe> ([`a97b22f`](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) + +### Unknown + +* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`6e1cb47`](https://github.com/taskforcesh/bullmq/commit/6e1cb4722414be7fee485d5bc0cbdbc703c8a821)) + +* GITBOOK-152: No subject ([`af77b92`](https://github.com/taskforcesh/bullmq/commit/af77b92fa903c36c72ad18df97b9a4a22eebe88e)) + + +## v3.6.6 (2023-02-15) + +### Chore + +* chore(release): 3.6.6 [skip ci] + +## [3.6.6](https://github.com/taskforcesh/bullmq/compare/v3.6.5...v3.6.6) (2023-02-15) + +### Bug Fixes + +* **job:** check jobKey when saving stacktrace ([#1681](https://github.com/taskforcesh/bullmq/issues/1681)) fixes [#1676](https://github.com/taskforcesh/bullmq/issues/1676) ([1856c76](https://github.com/taskforcesh/bullmq/commit/1856c7684c377ca4fd36294cca8e128404be27b8)) ([`488f943`](https://github.com/taskforcesh/bullmq/commit/488f9437977f9aeb5a03b96a41dbb664dbfe2775)) + +* chore(deps): lock file maintenance (#1657) ([`762fd28`](https://github.com/taskforcesh/bullmq/commit/762fd28e8a64448c7cd054fac3507cefeecebf40)) + +### Fix + +* fix(job): check jobKey when saving stacktrace (#1681) fixes #1676 ([`1856c76`](https://github.com/taskforcesh/bullmq/commit/1856c7684c377ca4fd36294cca8e128404be27b8)) + + +## v3.6.5 (2023-02-11) + +### Chore + +* chore(release): 3.6.5 [skip ci] + +## [3.6.5](https://github.com/taskforcesh/bullmq/compare/v3.6.4...v3.6.5) (2023-02-11) + +### Bug Fixes + +* infinite worker process spawned for invalid JS file ([a445ba8](https://github.com/taskforcesh/bullmq/commit/a445ba8b7a261b370dec7d88091ae5f5af8b2728)) ([`dfa431e`](https://github.com/taskforcesh/bullmq/commit/dfa431ebb22cebbf85247abcf8226946ad297ec5)) + +* chore: update bug template ([`f9e6ad3`](https://github.com/taskforcesh/bullmq/commit/f9e6ad3fac19c452ecab124a026244fe57b089e1)) + +* chore: add feature issue template ([`aca0371`](https://github.com/taskforcesh/bullmq/commit/aca03718275c2369bc0c36e5cfad093b82db4e52)) + +* chore: add issue template for bugs ([`327141c`](https://github.com/taskforcesh/bullmq/commit/327141ccae05b233bbb64f263fb9a34e50f8dfdc)) + +* chore(summary): remove duplicated nestjs section ([`3860d7c`](https://github.com/taskforcesh/bullmq/commit/3860d7cdf3c4dad5242b518ad57eaec5ec7981b3)) + +### Documentation + +* docs(COC): update contact email ([`798e9cc`](https://github.com/taskforcesh/bullmq/commit/798e9cc1df4dcfa9d825e293aa642542b805657c)) + +* docs: add code of conduct ([`3caec65`](https://github.com/taskforcesh/bullmq/commit/3caec65a86ca7c9e9ced92c379f85b9f5407d850)) + +* docs(connections): make keyPrefix warning more pronounced (#1679) ([`422e9fc`](https://github.com/taskforcesh/bullmq/commit/422e9fcbcdf014c14c65b1811b3a8000230c1a91)) + +* docs(nestjs): add flow producer documentation (#1674) ([`6dc75a3`](https://github.com/taskforcesh/bullmq/commit/6dc75a3233de5c702e5dec10a8d202259b5e8637)) + +* docs(stalled): fix typos (#1672) ([`31c6896`](https://github.com/taskforcesh/bullmq/commit/31c6896b816776404e160b4b2bbe45e03fcc220a)) + +### Fix + +* fix: infinite worker process spawned for invalid JS file ([`a445ba8`](https://github.com/taskforcesh/bullmq/commit/a445ba8b7a261b370dec7d88091ae5f5af8b2728)) + +### Test + +* test(stalled): close queueEvents at the end of test ([`42be85b`](https://github.com/taskforcesh/bullmq/commit/42be85bf339615c9cd6ec6a92e3d1cc11f030228)) + +* test(stalled): add test for maxStalledCount > 0 ([`6c10fae`](https://github.com/taskforcesh/bullmq/commit/6c10fae32a08bec016d895aab80576e262bae882)) + +* test(stalled): make sure Redis is clean of failed jobs ([`99ce98d`](https://github.com/taskforcesh/bullmq/commit/99ce98de8e384082aacaf6d2278c3f638eaa0146)) + + +## v3.6.4 (2023-02-09) + +### Chore + +* chore(release): 3.6.4 [skip ci] + +## [3.6.4](https://github.com/taskforcesh/bullmq/compare/v3.6.3...v3.6.4) (2023-02-09) + +### Bug Fixes + +* add a maximum block time ([1a2618b](https://github.com/taskforcesh/bullmq/commit/1a2618bc5473288a62dddb85e3cb78d6cdb4f39f)) ([`00ec4e8`](https://github.com/taskforcesh/bullmq/commit/00ec4e8d2d741df1246fb4e90ff876377fad7d16)) + +### Documentation + +* docs(nestjs-bullmq-pro): add registerFlowProducer example ([`77ca996`](https://github.com/taskforcesh/bullmq/commit/77ca996d34652e75b4fed5475c871c830a3d00f3)) + +* docs(nestjs-bullmq-pro): add producers section (#1661) ([`94f2fd7`](https://github.com/taskforcesh/bullmq/commit/94f2fd749c132b463816a04727269c9fca32498c)) + +### Fix + +* fix: add a maximum block time ([`1a2618b`](https://github.com/taskforcesh/bullmq/commit/1a2618bc5473288a62dddb85e3cb78d6cdb4f39f)) + +### Unknown + +* GITBOOK-150: No subject ([`6ac5d0a`](https://github.com/taskforcesh/bullmq/commit/6ac5d0a5103f262a0a273265b3a72981019973d0)) + +* GITBOOK-149: No subject ([`4e6c3bd`](https://github.com/taskforcesh/bullmq/commit/4e6c3bdab20f7d18a13ac486607cbf00b279722f)) + + +## v3.6.3 (2023-02-07) + +### Chore + +* chore(release): 3.6.3 [skip ci] + +## [3.6.3](https://github.com/taskforcesh/bullmq/compare/v3.6.2...v3.6.3) (2023-02-07) + +### Bug Fixes + +* **master:** copy type declaration ([23ade6e](https://github.com/taskforcesh/bullmq/commit/23ade6e3e45df14bd3fbc2c3e7be47307b642872)) ([`bf8589a`](https://github.com/taskforcesh/bullmq/commit/bf8589ae1b95b705e921f597644becdd1752b04f)) + +### Documentation + +* docs(nestjs): add nestjs-bullmq-pro changelog (#1655) ([`d681c22`](https://github.com/taskforcesh/bullmq/commit/d681c22982d1e5ca0d65fc2dd9e26de6f4370015)) + +### Fix + +* fix(master): copy type declaration ([`23ade6e`](https://github.com/taskforcesh/bullmq/commit/23ade6e3e45df14bd3fbc2c3e7be47307b642872)) + + +## v3.6.2 (2023-02-03) + +### Build + +* build(types): build types only once (#1652) ([`a104eb1`](https://github.com/taskforcesh/bullmq/commit/a104eb15adada64e3a2e79525baa335a6f2fa4d1)) + +### Chore + +* chore(release): 3.6.2 [skip ci] + +## [3.6.2](https://github.com/taskforcesh/bullmq/compare/v3.6.1...v3.6.2) (2023-02-03) + +### Bug Fixes + +* **redis:** increase minimum default retry time ([d521531](https://github.com/taskforcesh/bullmq/commit/d521531e22ba9eda8ad8d6e8eddf450fdc3f50f4)) ([`b08f95d`](https://github.com/taskforcesh/bullmq/commit/b08f95d9b87ec03b645af866ac869f771a42e1f1)) + +* chore: upgrade ioredis ([`e298c4e`](https://github.com/taskforcesh/bullmq/commit/e298c4e28f44f8c52ad4b85a1cf50870716ae479)) + +* chore(deps): update github/codeql-action digest to 3ebbd71 ([`f31ad20`](https://github.com/taskforcesh/bullmq/commit/f31ad20266cae66841074d6fb88309c4428108d7)) + +### Documentation + +* docs(readme): use foo as queueName in example (#1651) ([`e3ba746`](https://github.com/taskforcesh/bullmq/commit/e3ba7465fa887afff99281167663f69e861feefc)) + +### Fix + +* fix(redis): increase minimum default retry time ([`d521531`](https://github.com/taskforcesh/bullmq/commit/d521531e22ba9eda8ad8d6e8eddf450fdc3f50f4)) + +### Unknown + +* GitBook: [#148] No subject ([`26a88a3`](https://github.com/taskforcesh/bullmq/commit/26a88a34abab10af9ebd4f7f22aefe5704f15c2d)) + +* GitBook: [#147] No subject ([`e625fbc`](https://github.com/taskforcesh/bullmq/commit/e625fbce30171acf5b88a1ac762bee2862dfc2f2)) + +* GitBook: [#146] No subject ([`fdf04be`](https://github.com/taskforcesh/bullmq/commit/fdf04be20acd72491571155b0bc022b6925f2fc0)) + +* GitBook: [#144] No subject ([`09b4694`](https://github.com/taskforcesh/bullmq/commit/09b4694e718a81aeb9dfd6048e016f6d48ca9209)) + +* GitBook: [#143] No subject ([`9c1758e`](https://github.com/taskforcesh/bullmq/commit/9c1758ea8e3b1ba7e054694f930648f408416b11)) + +* GitBook: [#141] No subject ([`2f81b39`](https://github.com/taskforcesh/bullmq/commit/2f81b397c010bd7305f5369b82f90a32b32c4ea8)) + +* GitBook: [#140] No subject ([`35d0147`](https://github.com/taskforcesh/bullmq/commit/35d01471cb63f3261527d10eebada67f0e4dbf9f)) + +* GitBook: [#139] No subject ([`a485b55`](https://github.com/taskforcesh/bullmq/commit/a485b55b9e028df57cb3dd006d683e88338ae10e)) + + +## v3.6.1 (2023-01-31) + +### Chore + +* chore(release): 3.6.1 [skip ci] + +## [3.6.1](https://github.com/taskforcesh/bullmq/compare/v3.6.0...v3.6.1) (2023-01-31) + +### Bug Fixes + +* **connection:** apply console.warn in noeviction message ([95f171c](https://github.com/taskforcesh/bullmq/commit/95f171cbc8cdd7d04865618b715dd21229f36a4a)) ([`75092f5`](https://github.com/taskforcesh/bullmq/commit/75092f50169154bfbbc704d8a1971b2ac0a03187)) + +### Fix + +* fix(connection): apply console.warn in noeviction message ([`95f171c`](https://github.com/taskforcesh/bullmq/commit/95f171cbc8cdd7d04865618b715dd21229f36a4a)) + + +## v3.6.0 (2023-01-31) + +### Chore + +* chore(release): 3.6.0 [skip ci] + +# [3.6.0](https://github.com/taskforcesh/bullmq/compare/v3.5.11...v3.6.0) (2023-01-31) + +### Features + +* **job:** allow clearing job's log ([#1600](https://github.com/taskforcesh/bullmq/issues/1600)) ([0ded2d7](https://github.com/taskforcesh/bullmq/commit/0ded2d7709322bf105e0decac44d801ece5615f2)) ([`ce19e6d`](https://github.com/taskforcesh/bullmq/commit/ce19e6db253e03d5817b555abaa773a7bdf06171)) + +* chore(deps): lock file maintenance ([`35bd68b`](https://github.com/taskforcesh/bullmq/commit/35bd68b0214e27399e71d63db97a55d0f42936d0)) + +* chore(deps): update actions/checkout digest to ac59398 (#1582) ([`acebda8`](https://github.com/taskforcesh/bullmq/commit/acebda86b1e40e0a04dd3784b5fc3b7f1a662641)) + +* chore(deps): update peaceiris/actions-gh-pages digest to bd8c6b0 (#1632) ([`84e057e`](https://github.com/taskforcesh/bullmq/commit/84e057e3a84518be62607b8d8f9a7866aa3cd306)) + +### Documentation + +* docs(nestjs): add nestjs-bullmq-pro api reference (#1646) ([`3e8fb1a`](https://github.com/taskforcesh/bullmq/commit/3e8fb1a8fa7a35ec2418b7326b139d73baed23cd)) + +### Feature + +* feat(job): allow clearing job's log (#1600) ([`0ded2d7`](https://github.com/taskforcesh/bullmq/commit/0ded2d7709322bf105e0decac44d801ece5615f2)) + +### Unknown + +* GitBook: [#138] No subject ([`cb6bf20`](https://github.com/taskforcesh/bullmq/commit/cb6bf2005d86c138126d1fe85caa9db05fa68551)) + + +## v3.5.11 (2023-01-27) + +### Chore + +* chore(release): 3.5.11 [skip ci] + +## [3.5.11](https://github.com/taskforcesh/bullmq/compare/v3.5.10...v3.5.11) (2023-01-27) + +### Bug Fixes + +* **error:** remove global prototype toJSON ([#1642](https://github.com/taskforcesh/bullmq/issues/1642)) fixes [#1414](https://github.com/taskforcesh/bullmq/issues/1414) ([d4e7108](https://github.com/taskforcesh/bullmq/commit/d4e7108a37aeabdd3085a26c9daf09cea5976f3e)) ([`94b293e`](https://github.com/taskforcesh/bullmq/commit/94b293e6011bed3f8b6905b202f7a45d0d1d863b)) + +### Fix + +* fix(error): remove global prototype toJSON (#1642) fixes #1414 ([`d4e7108`](https://github.com/taskforcesh/bullmq/commit/d4e7108a37aeabdd3085a26c9daf09cea5976f3e)) + + +## v3.5.10 (2023-01-24) + +### Chore + +* chore(release): 3.5.10 [skip ci] + +## [3.5.10](https://github.com/taskforcesh/bullmq/compare/v3.5.9...v3.5.10) (2023-01-24) + +### Bug Fixes + +* **move-to-finished:** return correct delayUntil ([#1643](https://github.com/taskforcesh/bullmq/issues/1643)) ([c4bf9fa](https://github.com/taskforcesh/bullmq/commit/c4bf9fa6563eda1630d8eb2189b16e9324b01c7f)) ([`c66c03d`](https://github.com/taskforcesh/bullmq/commit/c66c03d377d6b5363231ec65117a8b045f136f86)) + +### Documentation + +* docs(nestjs): add example link in nestjs-bullmq-pro ([`a444934`](https://github.com/taskforcesh/bullmq/commit/a4449342166e0194e1a9010e1771d90fa5a02e35)) + +### Fix + +* fix(move-to-finished): return correct delayUntil (#1643) ([`c4bf9fa`](https://github.com/taskforcesh/bullmq/commit/c4bf9fa6563eda1630d8eb2189b16e9324b01c7f)) + + +## v3.5.9 (2023-01-19) + +### Chore + +* chore(release): 3.5.9 [skip ci] + +## [3.5.9](https://github.com/taskforcesh/bullmq/compare/v3.5.8...v3.5.9) (2023-01-19) + +### Bug Fixes + +* **worker:** fix delayed jobs with concurrency fixes [#1627](https://github.com/taskforcesh/bullmq/issues/1627) ([99a8e6d](https://github.com/taskforcesh/bullmq/commit/99a8e6d3a339be51fb46f69c8afac4ecdebff6d3)) ([`3714760`](https://github.com/taskforcesh/bullmq/commit/3714760ee4be056826e66baaec62bb97d60a53e3)) + +### Documentation + +* docs(bullmq-pro): add nestjs-bullmq-pro module documentation (#1636) ([`9a0a83e`](https://github.com/taskforcesh/bullmq/commit/9a0a83ed97b3093451c6487cd59d515a9c676713)) + +### Fix + +* fix(worker): fix delayed jobs with concurrency fixes #1627 ([`99a8e6d`](https://github.com/taskforcesh/bullmq/commit/99a8e6d3a339be51fb46f69c8afac4ecdebff6d3)) + +### Test + +* test: reuse queue instance from test suite ([`f50910b`](https://github.com/taskforcesh/bullmq/commit/f50910bdc9fa1f4bbcd328fb8ffab252d5d0a9aa)) + + +## v3.5.8 (2023-01-18) + +### Chore + +* chore(release): 3.5.8 [skip ci] + +## [3.5.8](https://github.com/taskforcesh/bullmq/compare/v3.5.7...v3.5.8) (2023-01-18) + +### Bug Fixes + +* **move-to-active:** delete marker when it is moved to active ([#1634](https://github.com/taskforcesh/bullmq/issues/1634)) ([ad1fcea](https://github.com/taskforcesh/bullmq/commit/ad1fcea4500d4ceed51d5d5b0a03dbb5e1735a42)) ([`5c761ae`](https://github.com/taskforcesh/bullmq/commit/5c761ae994c48402b27a6b3530a882b0720e4025)) + +### Fix + +* fix(move-to-active): delete marker when it is moved to active (#1634) ([`ad1fcea`](https://github.com/taskforcesh/bullmq/commit/ad1fcea4500d4ceed51d5d5b0a03dbb5e1735a42)) + + +## v3.5.7 (2023-01-17) + +### Chore + +* chore(release): 3.5.7 [skip ci] + +## [3.5.7](https://github.com/taskforcesh/bullmq/compare/v3.5.6...v3.5.7) (2023-01-17) + +### Bug Fixes + +* **move-to-active:** validate next marker and return delayUntil ([#1630](https://github.com/taskforcesh/bullmq/issues/1630)) ([3cd3305](https://github.com/taskforcesh/bullmq/commit/3cd33052fc711a9ba560c9a431630be5cdd02193)) ([`f2c1775`](https://github.com/taskforcesh/bullmq/commit/f2c1775dc150e3f1fd972beed39dcdd2b12e8ea1)) + +* chore(deps): bump luxon from 3.1.1 to 3.2.1 (#1621) ([`b203d0f`](https://github.com/taskforcesh/bullmq/commit/b203d0f80ff020242ee94e61899f7510e7d18b4d)) + +### Documentation + +* docs(bullmq-pro): add 5.1.11 changelog ([`d33baf8`](https://github.com/taskforcesh/bullmq/commit/d33baf8d7e37c7f535215400229f32a1f238ed0d)) + +### Fix + +* fix(move-to-active): validate next marker and return delayUntil (#1630) ([`3cd3305`](https://github.com/taskforcesh/bullmq/commit/3cd33052fc711a9ba560c9a431630be5cdd02193)) + + +## v3.5.6 (2023-01-13) + +### Chore + +* chore(release): 3.5.6 [skip ci] + +## [3.5.6](https://github.com/taskforcesh/bullmq/compare/v3.5.5...v3.5.6) (2023-01-13) + +### Bug Fixes + +* **worker:** add max concurrency from the beginning ([#1597](https://github.com/taskforcesh/bullmq/issues/1597)) fixes [#1589](https://github.com/taskforcesh/bullmq/issues/1589) ([6f49db3](https://github.com/taskforcesh/bullmq/commit/6f49db3fb15119d13f99cd83d49f2a7bdcb614cd)) ([`4de7f3c`](https://github.com/taskforcesh/bullmq/commit/4de7f3cf740ad1f96f07bdfcd50e372257df4514)) + +### Fix + +* fix(worker): add max concurrency from the beginning (#1597) fixes #1589 ([`6f49db3`](https://github.com/taskforcesh/bullmq/commit/6f49db3fb15119d13f99cd83d49f2a7bdcb614cd)) + +### Test + +* test(rate-limit): add flow case ([`cc631a6`](https://github.com/taskforcesh/bullmq/commit/cc631a681a501de16034b81389bd57b89169bf81)) + + +## v3.5.5 (2023-01-10) + +### Chore + +* chore(release): 3.5.5 [skip ci] + +## [3.5.5](https://github.com/taskforcesh/bullmq/compare/v3.5.4...v3.5.5) (2023-01-10) + +### Bug Fixes + +* circular references ([#1622](https://github.com/taskforcesh/bullmq/issues/1622)) ([f607ec7](https://github.com/taskforcesh/bullmq/commit/f607ec7530fb4430e8cab7ed325583bd9d171ccf)) ([`5a78f58`](https://github.com/taskforcesh/bullmq/commit/5a78f58ead461192069e78bf1ee34d84012e8077)) + +### Fix + +* fix: circular references (#1622) ([`f607ec7`](https://github.com/taskforcesh/bullmq/commit/f607ec7530fb4430e8cab7ed325583bd9d171ccf)) + + +## v3.5.4 (2023-01-09) + +### Chore + +* chore(release): 3.5.4 [skip ci] + +## [3.5.4](https://github.com/taskforcesh/bullmq/compare/v3.5.3...v3.5.4) (2023-01-09) + +### Bug Fixes + +* [#1603](https://github.com/taskforcesh/bullmq/issues/1603) performance issues in `remove()` ([#1607](https://github.com/taskforcesh/bullmq/issues/1607)) ([2541215](https://github.com/taskforcesh/bullmq/commit/2541215bcf81dcd52eaefa02530c3812a5135fbf)) ([`9fdac55`](https://github.com/taskforcesh/bullmq/commit/9fdac5578795900b85c99b4ef8c2e71583802417)) + +### Fix + +* fix: #1603 performance issues in `remove()` (#1607) ([`2541215`](https://github.com/taskforcesh/bullmq/commit/2541215bcf81dcd52eaefa02530c3812a5135fbf)) + + +## v3.5.3 (2023-01-07) + +### Chore + +* chore(release): 3.5.3 [skip ci] + +## [3.5.3](https://github.com/taskforcesh/bullmq/compare/v3.5.2...v3.5.3) (2023-01-07) + +### Bug Fixes + +* **delayed:** remove marker after being consumed ([#1620](https://github.com/taskforcesh/bullmq/issues/1620)) fixes [#1615](https://github.com/taskforcesh/bullmq/issues/1615) ([9fce0f0](https://github.com/taskforcesh/bullmq/commit/9fce0f05e5acc1918a276b03e8cb9c16083cb509)) ([`2061624`](https://github.com/taskforcesh/bullmq/commit/2061624f0baebd5e5018136934346b65750c0323)) + +* chore(deps): update peaceiris/actions-gh-pages digest to 64b46b4 (#1619) ([`4a6db4d`](https://github.com/taskforcesh/bullmq/commit/4a6db4db9bfcbe4a67b07b25b389f5bd1bee51ca)) + +### Documentation + +* docs(guide): nestjs section (#1610) ([`1276e2b`](https://github.com/taskforcesh/bullmq/commit/1276e2bc62e39db3b24e0ba3f0824904ca4b595e)) + +### Fix + +* fix(delayed): remove marker after being consumed (#1620) fixes #1615 ([`9fce0f0`](https://github.com/taskforcesh/bullmq/commit/9fce0f05e5acc1918a276b03e8cb9c16083cb509)) + + +## v3.5.2 (2023-01-04) + +### Chore + +* chore(release): 3.5.2 [skip ci] + +## [3.5.2](https://github.com/taskforcesh/bullmq/compare/v3.5.1...v3.5.2) (2023-01-04) + +### Performance Improvements + +* **get-dependencies:** replace slow object destructuring with single object ([#1612](https://github.com/taskforcesh/bullmq/issues/1612)) ([621748e](https://github.com/taskforcesh/bullmq/commit/621748ec7727b46ce57eb9d2b46ef981874cdf4c)) ([`5b34b8b`](https://github.com/taskforcesh/bullmq/commit/5b34b8ba09e14bc78aeed03824b4fbd419e0e18e)) + +### Documentation + +* docs(readme): add nestjs module ([`2dad0d4`](https://github.com/taskforcesh/bullmq/commit/2dad0d4708574704d7f59bb048334957bb2474fe)) + +* docs(bullmq-pro): update changelog to version 5.1.10 ([`6f995f7`](https://github.com/taskforcesh/bullmq/commit/6f995f7b11a918a91108d18cb58d151a428da370)) + +### Performance + +* perf(get-dependencies): replace slow object destructuring with single object (#1612) ([`621748e`](https://github.com/taskforcesh/bullmq/commit/621748ec7727b46ce57eb9d2b46ef981874cdf4c)) + +### Test + +* test(connection): expect ioredis prefix errors (#1601) ([`d1b6920`](https://github.com/taskforcesh/bullmq/commit/d1b69204ddede7c80c9e327228d39506c60a797d)) + + +## v3.5.1 (2022-12-23) + +### Chore + +* chore(release): 3.5.1 [skip ci] + +## [3.5.1](https://github.com/taskforcesh/bullmq/compare/v3.5.0...v3.5.1) (2022-12-23) + +### Bug Fixes + +* **connection:** throw exception if using keyPrefix in ioredis ([eb6a130](https://github.com/taskforcesh/bullmq/commit/eb6a1305541547725e1717eefe2b678bc445f4d0)) +* **connection:** use includes to check for upstash more reliably ([12efb5c](https://github.com/taskforcesh/bullmq/commit/12efb5c539cb6f031ea6f3a80e4128d2e556e627)) ([`1e8786a`](https://github.com/taskforcesh/bullmq/commit/1e8786a8dd2f08de6f84e08aeb252b304ebbca73)) + +### Fix + +* fix(connection): throw exception if using keyPrefix in ioredis ([`eb6a130`](https://github.com/taskforcesh/bullmq/commit/eb6a1305541547725e1717eefe2b678bc445f4d0)) + +* fix(connection): use includes to check for upstash more reliably ([`12efb5c`](https://github.com/taskforcesh/bullmq/commit/12efb5c539cb6f031ea6f3a80e4128d2e556e627)) + +### Test + +* test(connection): add test to verify cluster connection using dsn strings ([`a361a8e`](https://github.com/taskforcesh/bullmq/commit/a361a8e77766e1acb31151dc44b96eb4bff65386)) + + +## v3.5.0 (2022-12-20) + +### Chore + +* chore(release): 3.5.0 [skip ci] + +# [3.5.0](https://github.com/taskforcesh/bullmq/compare/v3.4.2...v3.5.0) (2022-12-20) + +### Bug Fixes + +* **job:** fetch parent before job moves to complete ([#1580](https://github.com/taskforcesh/bullmq/issues/1580)) ([6a6c0dc](https://github.com/taskforcesh/bullmq/commit/6a6c0dca30bb0a2417e0c62d4c80202c750322dd)) +* **sandbox:** throw error when no exported function ([#1588](https://github.com/taskforcesh/bullmq/issues/1588)) fixes [#1587](https://github.com/taskforcesh/bullmq/issues/1587) ([c031891](https://github.com/taskforcesh/bullmq/commit/c03189184c8eeeb324f005b86e93d114abbe2154)) + +### Features + +* **queue:** add getJobState method ([#1593](https://github.com/taskforcesh/bullmq/issues/1593)) ref [#1532](https://github.com/taskforcesh/bullmq/issues/1532) ([b741e84](https://github.com/taskforcesh/bullmq/commit/b741e8456f262b51aa7c68f571c76a3c54d02d37)) ([`ffb0851`](https://github.com/taskforcesh/bullmq/commit/ffb08512271be681204a803508cd4d5ece0bb71b)) + +* chore(deps): lock file maintenance (#1568) ([`a426e49`](https://github.com/taskforcesh/bullmq/commit/a426e499299f9782128106127285ddba2444ff58)) + +### Documentation + +* docs(bullmq): add manual rate-limit section (#1590) ([`3fa5d33`](https://github.com/taskforcesh/bullmq/commit/3fa5d33861e99c1405a576b5ef7171daae4c16bb)) + +### Feature + +* feat(queue): add getJobState method (#1593) ref #1532 ([`b741e84`](https://github.com/taskforcesh/bullmq/commit/b741e8456f262b51aa7c68f571c76a3c54d02d37)) + +### Fix + +* fix(sandbox): throw error when no exported function (#1588) fixes #1587 ([`c031891`](https://github.com/taskforcesh/bullmq/commit/c03189184c8eeeb324f005b86e93d114abbe2154)) + +* fix(job): fetch parent before job moves to complete (#1580) ([`6a6c0dc`](https://github.com/taskforcesh/bullmq/commit/6a6c0dca30bb0a2417e0c62d4c80202c750322dd)) + + +## v3.4.2 (2022-12-15) + +### Chore + +* chore(release): 3.4.2 [skip ci] + +## [3.4.2](https://github.com/taskforcesh/bullmq/compare/v3.4.1...v3.4.2) (2022-12-15) + +### Performance Improvements + +* **counts:** delete delayed marker when needed ([#1583](https://github.com/taskforcesh/bullmq/issues/1583)) ([cc26f1c](https://github.com/taskforcesh/bullmq/commit/cc26f1cd550de76c7588d3a98187b80ee78c40c4)) +* **get-children-values:** replace slow object destructuring with single object ([#1586](https://github.com/taskforcesh/bullmq/issues/1586)) ([857d403](https://github.com/taskforcesh/bullmq/commit/857d40377a6eb2c0101e6d16d9085ecd4b52b016)) ([`91bbde9`](https://github.com/taskforcesh/bullmq/commit/91bbde9472ea3b38e1b9ee94ef1ec56733eeb3fa)) + +### Documentation + +* docs: add api references (#1584) ([`a3df041`](https://github.com/taskforcesh/bullmq/commit/a3df04109d64bc2b5de30f7b4fb95d5a836df949)) + +### Performance + +* perf(counts): delete delayed marker when needed (#1583) ([`cc26f1c`](https://github.com/taskforcesh/bullmq/commit/cc26f1cd550de76c7588d3a98187b80ee78c40c4)) + +* perf(get-children-values): replace slow object destructuring with single object (#1586) ([`857d403`](https://github.com/taskforcesh/bullmq/commit/857d40377a6eb2c0101e6d16d9085ecd4b52b016)) + + +## v3.4.1 (2022-12-10) + +### Chore + +* chore(release): 3.4.1 [skip ci] + +## [3.4.1](https://github.com/taskforcesh/bullmq/compare/v3.4.0...v3.4.1) (2022-12-10) + +### Bug Fixes + +* **exponential:** respect exponential backoff delay ([#1581](https://github.com/taskforcesh/bullmq/issues/1581)) ([145dd32](https://github.com/taskforcesh/bullmq/commit/145dd329bb9f8254b404f4c5fbf7a50359202d37)) +* **get-jobs:** filter marker ([#1551](https://github.com/taskforcesh/bullmq/issues/1551)) ([4add0ef](https://github.com/taskforcesh/bullmq/commit/4add0efa7857cc2f7b6d3c0c78a7f82cb7a46933)) ([`df604c4`](https://github.com/taskforcesh/bullmq/commit/df604c48bfeec2b621fd9d52d97b316f477e79a2)) + +### Fix + +* fix(get-jobs): filter marker (#1551) ([`4add0ef`](https://github.com/taskforcesh/bullmq/commit/4add0efa7857cc2f7b6d3c0c78a7f82cb7a46933)) + +* fix(exponential): respect exponential backoff delay (#1581) ([`145dd32`](https://github.com/taskforcesh/bullmq/commit/145dd329bb9f8254b404f4c5fbf7a50359202d37)) + +### Test + +* test(repeat): fix flaky tests (#1578) ([`8f9eefd`](https://github.com/taskforcesh/bullmq/commit/8f9eefda9f932535de8e452c926029eb6fdae435)) + + +## v3.4.0 (2022-12-09) + +### Chore + +* chore(release): 3.4.0 [skip ci] + +# [3.4.0](https://github.com/taskforcesh/bullmq/compare/v3.3.5...v3.4.0) (2022-12-09) + +### Features + +* **worker:** add ready event for blockingConnection ([#1577](https://github.com/taskforcesh/bullmq/issues/1577)) ([992cc9e](https://github.com/taskforcesh/bullmq/commit/992cc9e9b3046185d3b67f2cc956f30337f458e1)) ([`6d9dada`](https://github.com/taskforcesh/bullmq/commit/6d9dadaedf016267255e2412ff4ca40d44001630)) + +### Feature + +* feat(worker): add ready event for blockingConnection (#1577) ([`992cc9e`](https://github.com/taskforcesh/bullmq/commit/992cc9e9b3046185d3b67f2cc956f30337f458e1)) + + +## v3.3.5 (2022-12-08) + +### Chore + +* chore(release): 3.3.5 [skip ci] + +## [3.3.5](https://github.com/taskforcesh/bullmq/compare/v3.3.4...v3.3.5) (2022-12-08) + +### Bug Fixes + +* **worker:** add token postfix ([#1575](https://github.com/taskforcesh/bullmq/issues/1575)) ([1d3e368](https://github.com/taskforcesh/bullmq/commit/1d3e368021041bb9861761c86fe3e04914b0c52f)) ([`865c9ca`](https://github.com/taskforcesh/bullmq/commit/865c9ca8ce99860a4a0c72b7a2ec4a5733395d10)) + +### Fix + +* fix(worker): add token postfix (#1575) ([`1d3e368`](https://github.com/taskforcesh/bullmq/commit/1d3e368021041bb9861761c86fe3e04914b0c52f)) + + +## v3.3.4 (2022-12-07) + +### Chore + +* chore(release): 3.3.4 [skip ci] + +## [3.3.4](https://github.com/taskforcesh/bullmq/compare/v3.3.3...v3.3.4) (2022-12-07) + +### Bug Fixes + +* **worker:** try catch setname call ([#1576](https://github.com/taskforcesh/bullmq/issues/1576)) fixes [#1574](https://github.com/taskforcesh/bullmq/issues/1574) ([0c42fd8](https://github.com/taskforcesh/bullmq/commit/0c42fd8c07dbac7ace81e97e45440af93fc622a5)) ([`bbe29ee`](https://github.com/taskforcesh/bullmq/commit/bbe29ee8546242a839b41ae0eccd5c9acc592e9a)) + +### Fix + +* fix(worker): try catch setname call (#1576) fixes #1574 ([`0c42fd8`](https://github.com/taskforcesh/bullmq/commit/0c42fd8c07dbac7ace81e97e45440af93fc622a5)) + + +## v3.3.3 (2022-12-07) + +### Chore + +* chore(release): 3.3.3 [skip ci] + +## [3.3.3](https://github.com/taskforcesh/bullmq/compare/v3.3.2...v3.3.3) (2022-12-07) + +### Bug Fixes + +* do not allow move from active to wait if not owner of the job ([dc1a307](https://github.com/taskforcesh/bullmq/commit/dc1a3077d1521c5dc99824a7fc05d17da03906bc)) ([`0f119cb`](https://github.com/taskforcesh/bullmq/commit/0f119cb7eac550ad6a5a08f6561b65a72d06ae91)) + +### Fix + +* fix: do not allow move from active to wait if not owner of the job ([`dc1a307`](https://github.com/taskforcesh/bullmq/commit/dc1a3077d1521c5dc99824a7fc05d17da03906bc)) + + +## v3.3.2 (2022-12-05) + +### Chore + +* chore(release): 3.3.2 [skip ci] + +## [3.3.2](https://github.com/taskforcesh/bullmq/compare/v3.3.1...v3.3.2) (2022-12-05) + +### Bug Fixes + +* floor pexpire to integer ([1d5de42](https://github.com/taskforcesh/bullmq/commit/1d5de425a19ebf879a8f9a7e0543d87a4d358be1)) ([`b469dcc`](https://github.com/taskforcesh/bullmq/commit/b469dcc4bafee0bc21a6fc51772ce958947ce516)) + +### Fix + +* fix: floor pexpire to integer ([`1d5de42`](https://github.com/taskforcesh/bullmq/commit/1d5de425a19ebf879a8f9a7e0543d87a4d358be1)) + + +## v3.3.1 (2022-12-05) + +### Chore + +* chore(release): 3.3.1 [skip ci] + +## [3.3.1](https://github.com/taskforcesh/bullmq/compare/v3.3.0...v3.3.1) (2022-12-05) + +### Bug Fixes + +* **get-workers:** set name when ready event in connection ([#1564](https://github.com/taskforcesh/bullmq/issues/1564)) ([de93c17](https://github.com/taskforcesh/bullmq/commit/de93c172901650e1666c48423a39076f2c7b9c7b)) +* **job:** console warn custom job ids when they represent integers ([#1569](https://github.com/taskforcesh/bullmq/issues/1569)) ([6e677d2](https://github.com/taskforcesh/bullmq/commit/6e677d2800957b368bef4247b8e4328c5758f262)) ([`1e0625e`](https://github.com/taskforcesh/bullmq/commit/1e0625eb72400891b126483e1201431bbb7fd161)) + +### Fix + +* fix(get-workers): set name when ready event in connection (#1564) ([`de93c17`](https://github.com/taskforcesh/bullmq/commit/de93c172901650e1666c48423a39076f2c7b9c7b)) + +* fix(job): console warn custom job ids when they represent integers (#1569) ([`6e677d2`](https://github.com/taskforcesh/bullmq/commit/6e677d2800957b368bef4247b8e4328c5758f262)) + + +## v3.3.0 (2022-12-04) + +### Chore + +* chore(release): 3.3.0 [skip ci] + +# [3.3.0](https://github.com/taskforcesh/bullmq/compare/v3.2.5...v3.3.0) (2022-12-04) + +### Features + +* **queue-events:** support duplicated event ([#1549](https://github.com/taskforcesh/bullmq/issues/1549)) ([18bc4eb](https://github.com/taskforcesh/bullmq/commit/18bc4eb50432f8aa27f2395750a7617317b66ca1)) ([`aa753dd`](https://github.com/taskforcesh/bullmq/commit/aa753dd3680964bf0fe7ab650734c12525020ef2)) + +### Feature + +* feat(queue-events): support duplicated event (#1549) ([`18bc4eb`](https://github.com/taskforcesh/bullmq/commit/18bc4eb50432f8aa27f2395750a7617317b66ca1)) + + +## v3.2.5 (2022-12-04) + +### Chore + +* chore(release): 3.2.5 [skip ci] + +## [3.2.5](https://github.com/taskforcesh/bullmq/compare/v3.2.4...v3.2.5) (2022-12-04) + +### Bug Fixes + +* **add-job:** throw error when jobId represents an integer ([#1556](https://github.com/taskforcesh/bullmq/issues/1556)) ([db617d7](https://github.com/taskforcesh/bullmq/commit/db617d79e8f55b5c9e0df4b6bfd4247612016da1)) ([`75ebd85`](https://github.com/taskforcesh/bullmq/commit/75ebd8558853969df094d8c37b12b66685108eb9)) + +### Fix + +* fix(add-job): throw error when jobId represents an integer (#1556) ([`db617d7`](https://github.com/taskforcesh/bullmq/commit/db617d79e8f55b5c9e0df4b6bfd4247612016da1)) + +### Refactor + +* refactor(lodash): replace flatten and fromPairs functions (#854) ([`34431f9`](https://github.com/taskforcesh/bullmq/commit/34431f90e025cc2d8f0eb88a04c21e4f41d43487)) + + +## v3.2.4 (2022-11-29) + +### Chore + +* chore(release): 3.2.4 [skip ci] + +## [3.2.4](https://github.com/taskforcesh/bullmq/compare/v3.2.3...v3.2.4) (2022-11-29) + +### Bug Fixes + +* **add-job:** do not update job that already exist ([#1550](https://github.com/taskforcesh/bullmq/issues/1550)) ([26f6311](https://github.com/taskforcesh/bullmq/commit/26f6311cd0d2b936e404d0abebca9637f314a209)) ([`4387d0c`](https://github.com/taskforcesh/bullmq/commit/4387d0c959d563eaaba2719d3f9566e992ba0914)) + +* chore(deps): update github/codeql-action digest to 312e093 ([`a64f8b3`](https://github.com/taskforcesh/bullmq/commit/a64f8b38d76a68b52b1a6b6783bdc3fd4593add8)) + +* chore(deps): lock file maintenance ([`b06abd9`](https://github.com/taskforcesh/bullmq/commit/b06abd9eef33fa0a319e03f71d504d9c458f0ad7)) + +### Ci + +* ci: harden release and test permissions (#1554) ([`cc37e76`](https://github.com/taskforcesh/bullmq/commit/cc37e7608cb44c0ee4dd975c48b423ad789fdb6e)) + +### Documentation + +* docs: update BullMQ Pro changelog ([`0dfc2c9`](https://github.com/taskforcesh/bullmq/commit/0dfc2c9b79f13dacc96b5fd9110c5da9c1985cc9)) + +### Fix + +* fix(add-job): do not update job that already exist (#1550) ([`26f6311`](https://github.com/taskforcesh/bullmq/commit/26f6311cd0d2b936e404d0abebca9637f314a209)) + +### Unknown + +* GitBook: [#134] No subject ([`b2841eb`](https://github.com/taskforcesh/bullmq/commit/b2841eb4b12aac0f1aff93746ff5b211d3a48a7e)) + + +## v3.2.3 (2022-11-29) + +### Chore + +* chore(release): 3.2.3 [skip ci] + +## [3.2.3](https://github.com/taskforcesh/bullmq/compare/v3.2.2...v3.2.3) (2022-11-29) + +### Bug Fixes + +* **rate-limit:** delete rateLimiterKey when 0 ([#1553](https://github.com/taskforcesh/bullmq/issues/1553)) ([0b88e5b](https://github.com/taskforcesh/bullmq/commit/0b88e5b94b4a0dc0d4000f7fd4b327f402248ad2)) ([`a6b7498`](https://github.com/taskforcesh/bullmq/commit/a6b74988e38ff74049df9b30215fb6ddab73e844)) + +* chore(deps): lock file maintenance (#1491) ([`e67c057`](https://github.com/taskforcesh/bullmq/commit/e67c0575f855202bad47eb6616c35c07513fa1a7)) + +### Documentation + +* docs: add missing - on param descriptions ([`84c0fe7`](https://github.com/taskforcesh/bullmq/commit/84c0fe7478983bc1d763da1936c5547772ef4d5f)) + +### Fix + +* fix(rate-limit): delete rateLimiterKey when 0 (#1553) ([`0b88e5b`](https://github.com/taskforcesh/bullmq/commit/0b88e5b94b4a0dc0d4000f7fd4b327f402248ad2)) + +### Test + +* test(repeat): fix flaky test ([`b09569b`](https://github.com/taskforcesh/bullmq/commit/b09569b562ae7aba3abdba06550e07f4a1c9dbe6)) + +### Unknown + +* GitBook: [#133] No subject ([`f0535a9`](https://github.com/taskforcesh/bullmq/commit/f0535a950ff350a947caea2b9be6973b3417e55b)) + +* GitBook: [#132] No subject ([`240ef6b`](https://github.com/taskforcesh/bullmq/commit/240ef6bacd91ecc40f69bba3a46294f3b9aad3ec)) + +* GitBook: [#131] No subject ([`fac0391`](https://github.com/taskforcesh/bullmq/commit/fac039125f71f247f56e58241b8370ea7db815c9)) + +* GitBook: [#130] No subject ([`2a59136`](https://github.com/taskforcesh/bullmq/commit/2a591360c98888187b8de37f2ff139c56d95d369)) + + +## v3.2.2 (2022-11-15) + +### Chore + +* chore(release): 3.2.2 [skip ci] + +## [3.2.2](https://github.com/taskforcesh/bullmq/compare/v3.2.1...v3.2.2) (2022-11-15) + +### Bug Fixes + +* **rate-limit:** check job is active before moving to wait ([9502167](https://github.com/taskforcesh/bullmq/commit/9502167bb0d9008fc8811ff7980dc8126fbc5ac2)) ([`4226070`](https://github.com/taskforcesh/bullmq/commit/4226070d9905fb052a2ec00f17ee4210bf931fbd)) + +* chore(moveLimitedBackToWait): make sure delay is an int ([`2a76ee2`](https://github.com/taskforcesh/bullmq/commit/2a76ee24a3b989685c78393d43fa43afc6eb3c2b)) + +### Fix + +* fix(rate-limit): check job is active before moving to wait ([`9502167`](https://github.com/taskforcesh/bullmq/commit/9502167bb0d9008fc8811ff7980dc8126fbc5ac2)) + + +## v3.2.1 (2022-11-15) + +### Chore + +* chore(release): 3.2.1 [skip ci] + +## [3.2.1](https://github.com/taskforcesh/bullmq/compare/v3.2.0...v3.2.1) (2022-11-15) + +### Bug Fixes + +* **worker:** consider removed jobs in failed event ([#1500](https://github.com/taskforcesh/bullmq/issues/1500)) ([8704b9a](https://github.com/taskforcesh/bullmq/commit/8704b9a10575fd7df738296f7156057123592b86)) ([`0301a7a`](https://github.com/taskforcesh/bullmq/commit/0301a7ab2b110670804de0dae63a04c7a314ee5a)) + +### Documentation + +* docs: add nocodedb as usedBy ([`7a8754f`](https://github.com/taskforcesh/bullmq/commit/7a8754fdf2138418283f2b991334f2076440e7ee)) + +### Fix + +* fix(worker): consider removed jobs in failed event (#1500) ([`8704b9a`](https://github.com/taskforcesh/bullmq/commit/8704b9a10575fd7df738296f7156057123592b86)) + +### Unknown + +* GitBook: [#129] clarify flow architecture for waiting-children state ([`75f04d7`](https://github.com/taskforcesh/bullmq/commit/75f04d7e0480997210ee442ebd4157553112aeca)) + +* GitBook: [#128] update architecture images ([`f890565`](https://github.com/taskforcesh/bullmq/commit/f890565d90948bed9d27e955cfba8acda18a696e)) + + +## v3.2.0 (2022-11-09) + +### Chore + +* chore(release): 3.2.0 [skip ci] + +# [3.2.0](https://github.com/taskforcesh/bullmq/compare/v3.1.3...v3.2.0) (2022-11-09) + +### Features + +* **flow:** move parent to delayed when delay option is provided ([#1501](https://github.com/taskforcesh/bullmq/issues/1501)) ([2f3e5d5](https://github.com/taskforcesh/bullmq/commit/2f3e5d54f0797bf0d1adf14dbb2b51ad9f9183ca)) ([`f05e098`](https://github.com/taskforcesh/bullmq/commit/f05e098a6dad2038c720d77d71a66b387b53bcb1)) + +* chore(move-to-finished): remove debug statement (#1524) ([`65189dc`](https://github.com/taskforcesh/bullmq/commit/65189dc45b9f96d8b56cf44a5e6debaa4344a746)) + +### Documentation + +* docs: update bullmq-pro changelog to 4.0.2 version ([`6892f3e`](https://github.com/taskforcesh/bullmq/commit/6892f3ef023b7c30150dd2192700d582f20feef2)) + +* docs(base-job-options): fix grammar + +Change grammar "an number" should be "a number" ([`3451b59`](https://github.com/taskforcesh/bullmq/commit/3451b591a2158b6e2ae57a369389e23f4d4376e7)) + +### Feature + +* feat(flow): move parent to delayed when delay option is provided (#1501) ([`2f3e5d5`](https://github.com/taskforcesh/bullmq/commit/2f3e5d54f0797bf0d1adf14dbb2b51ad9f9183ca)) + + +## v3.1.3 (2022-11-04) + +### Chore + +* chore(release): 3.1.3 [skip ci] + +## [3.1.3](https://github.com/taskforcesh/bullmq/compare/v3.1.2...v3.1.3) (2022-11-04) + +### Bug Fixes + +* **delayed:** better handling of marker id ([816376e](https://github.com/taskforcesh/bullmq/commit/816376e7880ae0eafe85a1f9a5aef9fdfe3031a9)) +* **delayed:** notify workers a delayed job is closer in time fixes [#1505](https://github.com/taskforcesh/bullmq/issues/1505) ([6ced4d0](https://github.com/taskforcesh/bullmq/commit/6ced4d06c5c9c8342c9e4f7920a21826871eac1b)) +* **job:** better error message in moveToFailed ([4e9f5bb](https://github.com/taskforcesh/bullmq/commit/4e9f5bb90f87c66eca959ffc9b7a09e05908c2d9)) +* **moveToFinish:** always promote delayed jobs ([7610cc3](https://github.com/taskforcesh/bullmq/commit/7610cc37d4695a885043c251990e153d4ce4440f)) +* **moveToFinished:** revert move promoteDelayedJobs ([7d780db](https://github.com/taskforcesh/bullmq/commit/7d780dbc1d7728ab7b762a5578871b31f27ff80c)) ([`f87858c`](https://github.com/taskforcesh/bullmq/commit/f87858caa382b56e34cc8015ad1a2706f2bcda8e)) + +### Fix + +* fix(job): better error message in moveToFailed ([`4e9f5bb`](https://github.com/taskforcesh/bullmq/commit/4e9f5bb90f87c66eca959ffc9b7a09e05908c2d9)) + +* fix(delayed): better handling of marker id ([`816376e`](https://github.com/taskforcesh/bullmq/commit/816376e7880ae0eafe85a1f9a5aef9fdfe3031a9)) + +* fix(moveToFinished): revert move promoteDelayedJobs ([`7d780db`](https://github.com/taskforcesh/bullmq/commit/7d780dbc1d7728ab7b762a5578871b31f27ff80c)) + +* fix(moveToFinish): always promote delayed jobs ([`7610cc3`](https://github.com/taskforcesh/bullmq/commit/7610cc37d4695a885043c251990e153d4ce4440f)) + +* fix(delayed): notify workers a delayed job is closer in time fixes #1505 ([`6ced4d0`](https://github.com/taskforcesh/bullmq/commit/6ced4d06c5c9c8342c9e4f7920a21826871eac1b)) + + +## v3.1.2 (2022-11-04) + +### Chore + +* chore(release): 3.1.2 [skip ci] + +## [3.1.2](https://github.com/taskforcesh/bullmq/compare/v3.1.1...v3.1.2) (2022-11-04) + +### Bug Fixes + +* **repeat:** allow easy migration from bullmq <3 to >=3 ([e17b886](https://github.com/taskforcesh/bullmq/commit/e17b886d3e2978e25f23f1a99b88562537a08576)) ([`be39c09`](https://github.com/taskforcesh/bullmq/commit/be39c090684ccf720bcc6adc3279d7bb1d0a5ed5)) + +### Fix + +* fix(repeat): allow easy migration from bullmq <3 to >=3 ([`e17b886`](https://github.com/taskforcesh/bullmq/commit/e17b886d3e2978e25f23f1a99b88562537a08576)) + + +## v3.1.1 (2022-11-03) + +### Chore + +* chore(release): 3.1.1 [skip ci] + +## [3.1.1](https://github.com/taskforcesh/bullmq/compare/v3.1.0...v3.1.1) (2022-11-03) + +### Bug Fixes + +* **change-delay:** remove delayed stream ([#1509](https://github.com/taskforcesh/bullmq/issues/1509)) ([6e4809e](https://github.com/taskforcesh/bullmq/commit/6e4809e5d8f7ef35bc0871d21bfcdcb0f1f316c6)) +* **worker:** restore dynamic concurrency change ([#1515](https://github.com/taskforcesh/bullmq/issues/1515)) ([fdac5c2](https://github.com/taskforcesh/bullmq/commit/fdac5c27607dfaaaad1c1256c47f2ae448efcd21)) ([`ad70396`](https://github.com/taskforcesh/bullmq/commit/ad7039625d3adb334f07bb015068d57982252615)) + +* chore(deps): update github/codeql-action digest to 18fe527 (#1499) ([`fca6640`](https://github.com/taskforcesh/bullmq/commit/fca66406f1890a268f1948b457eb4b9dbdc1f393)) + +### Fix + +* fix(change-delay): remove delayed stream (#1509) ([`6e4809e`](https://github.com/taskforcesh/bullmq/commit/6e4809e5d8f7ef35bc0871d21bfcdcb0f1f316c6)) + +* fix(worker): restore dynamic concurrency change (#1515) ([`fdac5c2`](https://github.com/taskforcesh/bullmq/commit/fdac5c27607dfaaaad1c1256c47f2ae448efcd21)) + + +## v3.1.0 (2022-11-02) + +### Chore + +* chore(release): 3.1.0 [skip ci] + +# [3.1.0](https://github.com/taskforcesh/bullmq/compare/v3.0.1...v3.1.0) (2022-11-02) + +### Features + +* **workers:** better error message for missing lock ([bf1d086](https://github.com/taskforcesh/bullmq/commit/bf1d0860c70bcc2b604d02ca47e5db64f962d71d)) ([`94c4862`](https://github.com/taskforcesh/bullmq/commit/94c4862fcb8de9676df20d3b002f8f13fddf658a)) + +### Feature + +* feat(workers): better error message for missing lock ([`bf1d086`](https://github.com/taskforcesh/bullmq/commit/bf1d0860c70bcc2b604d02ca47e5db64f962d71d)) + + +## v3.0.1 (2022-11-02) + +### Chore + +* chore(release): 3.0.1 [skip ci] + +## [3.0.1](https://github.com/taskforcesh/bullmq/compare/v3.0.0...v3.0.1) (2022-11-02) + +### Bug Fixes + +* **move-to-delayed:** consider promoting delayed jobs ([#1493](https://github.com/taskforcesh/bullmq/issues/1493)) ([909da2b](https://github.com/taskforcesh/bullmq/commit/909da2bc2718a588379b3fdd9791bc8e51ad1dad)) +* **retry-job:** consider promoting delayed jobs ([#1508](https://github.com/taskforcesh/bullmq/issues/1508)) ([d0b3412](https://github.com/taskforcesh/bullmq/commit/d0b3412d222449c24ab36068a791d08ea19ed922)) ([`c3c565d`](https://github.com/taskforcesh/bullmq/commit/c3c565dad2d7267e3bb1aa2a4d540f0c826def1a)) + +* chore(release): upgrade ubuntu version to latest ([`f2cb153`](https://github.com/taskforcesh/bullmq/commit/f2cb153abb4ba8f872efac56f1f514a3129b1cc7)) + +* chore(deps): update actions/setup-node digest to 8c91899 (#1473) ([`89bad09`](https://github.com/taskforcesh/bullmq/commit/89bad097edf1692dba19eec938da82b6f2be7430)) + +### Documentation + +* docs: update bullmq-pro changelog ([`e023112`](https://github.com/taskforcesh/bullmq/commit/e02311294b850f8dcf817a1bb479a52d72b58db5)) + +* docs(rate-limiting): update group keys information ([`a1ee543`](https://github.com/taskforcesh/bullmq/commit/a1ee543d6c07cd70a2f03cca1b682ac945be8e35)) + +* docs(retrying-failing-jobs): update backoffStrategy examples ([`125ca2f`](https://github.com/taskforcesh/bullmq/commit/125ca2f58d48177168a75d4625aea4582b8d6f6d)) + +* docs: update README ([`32ace36`](https://github.com/taskforcesh/bullmq/commit/32ace362d9687ce16d86fc72bf4990205fd3a076)) + +### Fix + +* fix(retry-job): consider promoting delayed jobs (#1508) ([`d0b3412`](https://github.com/taskforcesh/bullmq/commit/d0b3412d222449c24ab36068a791d08ea19ed922)) + +* fix(move-to-delayed): consider promoting delayed jobs (#1493) ([`909da2b`](https://github.com/taskforcesh/bullmq/commit/909da2bc2718a588379b3fdd9791bc8e51ad1dad)) + + +## v3.0.0 (2022-10-25) + +### Breaking + +* feat(rate-limit): remove group key support and improve global rate limit + +BREAKING CHANGE: limit by group keys has been removed in favor +of a much simpler and efficent rate-limit implementation. ([`81f780a`](https://github.com/taskforcesh/bullmq/commit/81f780aeed81e670107d01d01265d407a30e2a62)) + +* fix(backoff): handle backoff strategy as function (#1463) + +BREAKING CHANGE: object mapping is replaced by single function ([`3640269`](https://github.com/taskforcesh/bullmq/commit/36402691a3c7fa500f07e2e11a28318099bdb909)) + +### Chore + +* chore(release): 3.0.0 [skip ci] + +# [3.0.0](https://github.com/taskforcesh/bullmq/compare/v2.4.0...v3.0.0) (2022-10-25) + +### Bug Fixes + +* **backoff:** handle backoff strategy as function ([#1463](https://github.com/taskforcesh/bullmq/issues/1463)) ([3640269](https://github.com/taskforcesh/bullmq/commit/36402691a3c7fa500f07e2e11a28318099bdb909)) +* **repeat:** remove cron in favor of pattern option ([#1456](https://github.com/taskforcesh/bullmq/issues/1456)) ([3cc150e](https://github.com/taskforcesh/bullmq/commit/3cc150e32cb5971ad4ba6ff91246aaf75296c165)) + +### Features + +* add support for dynamic rate limiting ([2d51d2b](https://github.com/taskforcesh/bullmq/commit/2d51d2b33ef49059503e1bca7a582c71f6861ef4)) +* **rate-limit:** remove group key support and improve global rate limit ([81f780a](https://github.com/taskforcesh/bullmq/commit/81f780aeed81e670107d01d01265d407a30e2a62)) + +### BREAKING CHANGES + +* **rate-limit:** limit by group keys has been removed in favor +of a much simpler and efficent rate-limit implementation. +* **backoff:** object mapping is replaced by single function ([`a252282`](https://github.com/taskforcesh/bullmq/commit/a2522822210d200ff66576d3a71bf3cc7c1a7622)) + +### Feature + +* feat: add support for dynamic rate limiting ([`2d51d2b`](https://github.com/taskforcesh/bullmq/commit/2d51d2b33ef49059503e1bca7a582c71f6861ef4)) + +### Fix + +* fix(repeat): remove cron in favor of pattern option (#1456) ([`3cc150e`](https://github.com/taskforcesh/bullmq/commit/3cc150e32cb5971ad4ba6ff91246aaf75296c165)) + +### Test + +* test: add a bit of extra margin to rate-limit test ([`4f03545`](https://github.com/taskforcesh/bullmq/commit/4f035451aaaa1cbcec7e45b2b9a788383d889c40)) + +* test: remove irrelevant tests ([`285f1ba`](https://github.com/taskforcesh/bullmq/commit/285f1ba23ff17a2bfc01eb629d3f34c67700ee14)) + +### Unknown + +* GitBook: [#126] No subject ([`c04ea4d`](https://github.com/taskforcesh/bullmq/commit/c04ea4da3b233e71bbb019f5398b6a542167ee83)) + + +## v2.4.0 (2022-10-24) + +### Chore + +* chore(release): 2.4.0 [skip ci] + +# [2.4.0](https://github.com/taskforcesh/bullmq/compare/v2.3.2...v2.4.0) (2022-10-24) + +### Features + +* **flows:** allow parent on root jobs in addBulk method ([#1488](https://github.com/taskforcesh/bullmq/issues/1488)) ref [#1480](https://github.com/taskforcesh/bullmq/issues/1480) ([92308e5](https://github.com/taskforcesh/bullmq/commit/92308e53acf14e0ce108d94ecd616633ac93e35d)) ([`65ce37a`](https://github.com/taskforcesh/bullmq/commit/65ce37ac10648e48e55a102eb0f59fce104fbcb9)) + +* chore(deps): update peaceiris/actions-gh-pages digest to de7ea6f (#1490) ([`6191040`](https://github.com/taskforcesh/bullmq/commit/61910409b9c9250cd371e805ead7f876127744a9)) + +* chore(deps): update github/codeql-action digest to cc7986c (#1482) ([`14ed954`](https://github.com/taskforcesh/bullmq/commit/14ed9545418b23a82921f98f94facd78b56f588c)) + +* chore(deps): lock file maintenance ([`3b983f9`](https://github.com/taskforcesh/bullmq/commit/3b983f955248ec0bceef8f919b9a2ecc6ec6ccd2)) + +### Documentation + +* docs: update bullmq-pro changelog ([`94f020d`](https://github.com/taskforcesh/bullmq/commit/94f020d9617426c942582bf9c48b29c6ce0e38b9)) + +### Feature + +* feat(flows): allow parent on root jobs in addBulk method (#1488) ref #1480 ([`92308e5`](https://github.com/taskforcesh/bullmq/commit/92308e53acf14e0ce108d94ecd616633ac93e35d)) + +### Refactor + +* refactor(promote): reuse addJobWithPriority include (#1485) ([`899d3d0`](https://github.com/taskforcesh/bullmq/commit/899d3d05f5369d40d7ff22165c05fee412678a7a)) + + +## v2.3.2 (2022-10-18) + +### Chore + +* chore(release): 2.3.2 [skip ci] + +## [2.3.2](https://github.com/taskforcesh/bullmq/compare/v2.3.1...v2.3.2) (2022-10-18) + +### Bug Fixes + +* **job:** send failed event when failParentOnFailure ([#1481](https://github.com/taskforcesh/bullmq/issues/1481)) fixes [#1469](https://github.com/taskforcesh/bullmq/issues/1469) ([b20eb6f](https://github.com/taskforcesh/bullmq/commit/b20eb6f65c7e2c4593d5f9f4d4b940f780bf26d2)) ([`583bde4`](https://github.com/taskforcesh/bullmq/commit/583bde47ff0fa9366db968eca35e30b2fe89f4ad)) + +### Ci + +* ci(build): copy lua scripts (#1476) ([`b96991e`](https://github.com/taskforcesh/bullmq/commit/b96991e0828cceb062b40f4e68625d422d84e146)) + +### Fix + +* fix(job): send failed event when failParentOnFailure (#1481) fixes #1469 ([`b20eb6f`](https://github.com/taskforcesh/bullmq/commit/b20eb6f65c7e2c4593d5f9f4d4b940f780bf26d2)) + + +## v2.3.1 (2022-10-13) + +### Chore + +* chore(release): 2.3.1 [skip ci] + +## [2.3.1](https://github.com/taskforcesh/bullmq/compare/v2.3.0...v2.3.1) (2022-10-13) + +### Bug Fixes + +* **redis:** replace throw exception by console.error ([fafa2f8](https://github.com/taskforcesh/bullmq/commit/fafa2f89e796796f950e6c4abbdda4d3d71ad1b0)) ([`0fb2964`](https://github.com/taskforcesh/bullmq/commit/0fb2964151166f2aece0270c54c8cb4f4e2eb898)) + +### Fix + +* fix(redis): replace throw exception by console.error ([`fafa2f8`](https://github.com/taskforcesh/bullmq/commit/fafa2f89e796796f950e6c4abbdda4d3d71ad1b0)) + + +## v2.3.0 (2022-10-13) + +### Chore + +* chore(release): 2.3.0 [skip ci] + +# [2.3.0](https://github.com/taskforcesh/bullmq/compare/v2.2.1...v2.3.0) (2022-10-13) + +### Features + +* **redis-connection:** allow providing scripts for extension ([#1472](https://github.com/taskforcesh/bullmq/issues/1472)) ([f193cfb](https://github.com/taskforcesh/bullmq/commit/f193cfb1830e127f9fd47a969baad30011a0e3a4)) ([`005539f`](https://github.com/taskforcesh/bullmq/commit/005539f2c34eff7ee92aeba1b34801fc69a05018)) + +* chore(deps): update actions/checkout digest to 93ea575 ([`4c88b2c`](https://github.com/taskforcesh/bullmq/commit/4c88b2ca4ff61db0dac4405267328a10d5ce9e69)) + +### Ci + +* ci(docs): use pretest before docs script ([`2407bd9`](https://github.com/taskforcesh/bullmq/commit/2407bd9d4da03a414438dae285228635bf5cd681)) + +* ci(scripts): generate scripts before docs (#1470) ([`6947180`](https://github.com/taskforcesh/bullmq/commit/694718012788f1ddd207aa62d1e4dc857b716de2)) + +### Feature + +* feat(redis-connection): allow providing scripts for extension (#1472) ([`f193cfb`](https://github.com/taskforcesh/bullmq/commit/f193cfb1830e127f9fd47a969baad30011a0e3a4)) + + +## v2.2.1 (2022-10-11) + +### Chore + +* chore(release): 2.2.1 [skip ci] + +## [2.2.1](https://github.com/taskforcesh/bullmq/compare/v2.2.0...v2.2.1) (2022-10-11) + +### Performance Improvements + +* **scripts:** pre-build scripts ([#1441](https://github.com/taskforcesh/bullmq/issues/1441)) ([7f72603](https://github.com/taskforcesh/bullmq/commit/7f72603d463f705d0617898cb221f832c49a4aa3)) ([`547a20f`](https://github.com/taskforcesh/bullmq/commit/547a20f652960472500940c71363fe65b111737e)) + +* chore(deps): lock file maintenance (#1457) ([`c2bdeef`](https://github.com/taskforcesh/bullmq/commit/c2bdeefab4a1cae920e38bed25dd47238e6163de)) + +### Performance + +* perf(scripts): pre-build scripts (#1441) ([`7f72603`](https://github.com/taskforcesh/bullmq/commit/7f72603d463f705d0617898cb221f832c49a4aa3)) + + +## v2.2.0 (2022-10-10) + +### Chore + +* chore(release): 2.2.0 [skip ci] + +# [2.2.0](https://github.com/taskforcesh/bullmq/compare/v2.1.3...v2.2.0) (2022-10-10) + +### Bug Fixes + +* **connection:** validate array of strings in Cluster ([#1468](https://github.com/taskforcesh/bullmq/issues/1468)) fixes [#1467](https://github.com/taskforcesh/bullmq/issues/1467) ([8355182](https://github.com/taskforcesh/bullmq/commit/8355182a372b68ec62e9c3953bacbd69e0abfc74)) + +### Features + +* **flow-producer:** allow parent opts in root job when adding a flow ([#1110](https://github.com/taskforcesh/bullmq/issues/1110)) ref [#1097](https://github.com/taskforcesh/bullmq/issues/1097) ([3c3ac71](https://github.com/taskforcesh/bullmq/commit/3c3ac718ad84f6bd0cc1575013c948e767b46f38)) ([`68f5b6f`](https://github.com/taskforcesh/bullmq/commit/68f5b6fedb1012926bd121df8ee62ddd32285b08)) + +* chore(deps): update github/codeql-action digest to 8075783 (#1465) ([`b85c24d`](https://github.com/taskforcesh/bullmq/commit/b85c24d95750e912a1c1a1e1826e8abb6ff49de8)) + +* chore(deps): update github/codeql-action digest to e0e5ded (#1398) ([`6ec5dab`](https://github.com/taskforcesh/bullmq/commit/6ec5dab961b25cc1103010004880a198cf240cb3)) + +### Documentation + +* docs: fix Object.values usage in flows guide (#1466) ([`74cbcc2`](https://github.com/taskforcesh/bullmq/commit/74cbcc2514b18bb94e0067618ba7d83d57f00c87)) + +* docs(bullmq-pro): update changelog to version 2.4.12 ([`c4b9ee4`](https://github.com/taskforcesh/bullmq/commit/c4b9ee4961fd692741116727ffc03102c1f40afb)) + +### Feature + +* feat(flow-producer): allow parent opts in root job when adding a flow (#1110) ref #1097 ([`3c3ac71`](https://github.com/taskforcesh/bullmq/commit/3c3ac718ad84f6bd0cc1575013c948e767b46f38)) + +### Fix + +* fix(connection): validate array of strings in Cluster (#1468) fixes #1467 ([`8355182`](https://github.com/taskforcesh/bullmq/commit/8355182a372b68ec62e9c3953bacbd69e0abfc74)) + + +## v2.1.3 (2022-09-30) + +### Chore + +* chore(release): 2.1.3 [skip ci] + +## [2.1.3](https://github.com/taskforcesh/bullmq/compare/v2.1.2...v2.1.3) (2022-09-30) + +### Bug Fixes + +* **worker:** clear stalled jobs timer when closing worker ([1567a0d](https://github.com/taskforcesh/bullmq/commit/1567a0df0ca3c8d43a18990fe488888f4ff68040)) ([`ad3889c`](https://github.com/taskforcesh/bullmq/commit/ad3889c674da4eb8e772c47b7841d1c65fecb65e)) + +### Fix + +* fix(worker): clear stalled jobs timer when closing worker ([`1567a0d`](https://github.com/taskforcesh/bullmq/commit/1567a0df0ca3c8d43a18990fe488888f4ff68040)) + + +## v2.1.2 (2022-09-29) + +### Chore + +* chore(release): 2.1.2 [skip ci] + +## [2.1.2](https://github.com/taskforcesh/bullmq/compare/v2.1.1...v2.1.2) (2022-09-29) + +### Bug Fixes + +* **getters:** fix return type of getJobLogs ([d452927](https://github.com/taskforcesh/bullmq/commit/d4529278c59b2c94eee604c7d4455acc490679e9)) ([`18d91d1`](https://github.com/taskforcesh/bullmq/commit/18d91d1786955bae0921577dbd93a2bdbe6e4e68)) + +* chore(deps): update actions/setup-node digest to 969bd26 ([`8016027`](https://github.com/taskforcesh/bullmq/commit/80160272df53a4e90b0a43a57865d94ec915a25d)) + +* chore(deps): lock file maintenance (#1445) ([`0cd64a6`](https://github.com/taskforcesh/bullmq/commit/0cd64a673679f7b532fb2adb85c0364713bc6908)) + +### Fix + +* fix(getters): fix return type of getJobLogs ([`d452927`](https://github.com/taskforcesh/bullmq/commit/d4529278c59b2c94eee604c7d4455acc490679e9)) + + +## v2.1.1 (2022-09-28) + +### Chore + +* chore(release): 2.1.1 [skip ci] + +## [2.1.1](https://github.com/taskforcesh/bullmq/compare/v2.1.0...v2.1.1) (2022-09-28) + +### Bug Fixes + +* **sandbox:** get open port using built-in module instead of get-port ([#1446](https://github.com/taskforcesh/bullmq/issues/1446)) ([6db6288](https://github.com/taskforcesh/bullmq/commit/6db628868a9d64c5a3e47d1c9201017e6d05c1ae)) ([`4eb5a9a`](https://github.com/taskforcesh/bullmq/commit/4eb5a9a5c9cf9bf19de60cbef2ff90fde5a11a03)) + +### Documentation + +* docs: update Queue Scheduler API Reference + +The html page is no longer generated by typedoc since v2 ([`89bb53f`](https://github.com/taskforcesh/bullmq/commit/89bb53fb193e291f90b4be219507cdd7c7b04dba)) + +### Fix + +* fix(sandbox): get open port using built-in module instead of get-port (#1446) ([`6db6288`](https://github.com/taskforcesh/bullmq/commit/6db628868a9d64c5a3e47d1c9201017e6d05c1ae)) + + +## v2.1.0 (2022-09-23) + +### Chore + +* chore(release): 2.1.0 [skip ci] + +# [2.1.0](https://github.com/taskforcesh/bullmq/compare/v2.0.2...v2.1.0) (2022-09-23) + +### Features + +* **job-options:** add failParentOnFailure option ([#1339](https://github.com/taskforcesh/bullmq/issues/1339)) ([65e5c36](https://github.com/taskforcesh/bullmq/commit/65e5c3678771f26555c9128bdb908dd62e3584f9)) ([`af1a066`](https://github.com/taskforcesh/bullmq/commit/af1a0664168a183250b56759cfb19b58be672b62)) + +### Documentation + +* docs: fix typo on queue ([`4a977cb`](https://github.com/taskforcesh/bullmq/commit/4a977cba768fc2a36d9b34651bfa5e8eba336156)) + +### Feature + +* feat(job-options): add failParentOnFailure option (#1339) ([`65e5c36`](https://github.com/taskforcesh/bullmq/commit/65e5c3678771f26555c9128bdb908dd62e3584f9)) + + +## v2.0.2 (2022-09-22) + +### Chore + +* chore(release): 2.0.2 [skip ci] + +## [2.0.2](https://github.com/taskforcesh/bullmq/compare/v2.0.1...v2.0.2) (2022-09-22) + +### Bug Fixes + +* **job:** update delay value when moving to wait ([#1436](https://github.com/taskforcesh/bullmq/issues/1436)) ([9560915](https://github.com/taskforcesh/bullmq/commit/95609158c1800cf661f22ad7995541fb9474826a)) ([`2eeb081`](https://github.com/taskforcesh/bullmq/commit/2eeb0812c007fd67adc6f54be7fe94d47ea06219)) + +### Fix + +* fix(job): update delay value when moving to wait (#1436) ([`9560915`](https://github.com/taskforcesh/bullmq/commit/95609158c1800cf661f22ad7995541fb9474826a)) + +### Unknown + +* GitBook: [#123] No subject ([`8fdb42d`](https://github.com/taskforcesh/bullmq/commit/8fdb42de089120c7daedbb16b2589b07f12baafe)) + + +## v2.0.1 (2022-09-21) + +### Chore + +* chore(release): 2.0.1 [skip ci] + +## [2.0.1](https://github.com/taskforcesh/bullmq/compare/v2.0.0...v2.0.1) (2022-09-21) + +### Bug Fixes + +* **connection:** throw error when no noeviction policy ([3468390](https://github.com/taskforcesh/bullmq/commit/3468390dd6331291f4cf71a54c32028a06d1d99e)) + +### Performance Improvements + +* **events:** remove data and opts from added event ([e13d4b8](https://github.com/taskforcesh/bullmq/commit/e13d4b8e0c4f99203f4249ccc86e369d124ff483)) ([`0e26d88`](https://github.com/taskforcesh/bullmq/commit/0e26d88a6afee6becfa4f318a044f1177456b177)) + +### Documentation + +* docs: manually updated changelog ([`00a3b48`](https://github.com/taskforcesh/bullmq/commit/00a3b48b6f7e71f337eb76aab856464c94f12fe7)) + +### Fix + +* fix(connection): throw error when no noeviction policy ([`3468390`](https://github.com/taskforcesh/bullmq/commit/3468390dd6331291f4cf71a54c32028a06d1d99e)) + +### Performance + +* perf(events): remove data and opts from added event ([`e13d4b8`](https://github.com/taskforcesh/bullmq/commit/e13d4b8e0c4f99203f4249ccc86e369d124ff483)) + + +## v2.0.0 (2022-09-21) + +### Breaking + +* fix(compat): remove Queue3 class (#1421) + +BREAKING CHANGE: +The compatibility class for Bullv3 is no longer available. ([`fc797f7`](https://github.com/taskforcesh/bullmq/commit/fc797f7cd334c19a95cb1290ddb6611cd3417179)) + +### Chore + +* chore(release): 2.0.0 [skip ci] + +# [2.0.0](https://github.com/taskforcesh/bullmq/compare/v1.91.1...v2.0.0) (2022-09-21) + +### Bug Fixes + +* **compat:** remove Queue3 class ([#1421](https://github.com/taskforcesh/bullmq/issues/1421)) ([fc797f7](https://github.com/taskforcesh/bullmq/commit/fc797f7cd334c19a95cb1290ddb6611cd3417179)) +* **delayed:** promote delayed jobs instead of picking one by one ([1b938af](https://github.com/taskforcesh/bullmq/commit/1b938af75069d69772ddf2b03f95db7f53eada68)) +* **getters:** compensate for "mark" job id ([231b9aa](https://github.com/taskforcesh/bullmq/commit/231b9aa0f4781e4493d3ea272c33b27c0b7dc0ab)) +* **promote:** remove marker when promoting delayed job ([1aea0dc](https://github.com/taskforcesh/bullmq/commit/1aea0dcc5fb29086cef3d0c432c387d6f8261963)) +* **sandbox:** remove progress method ([b43267b](https://github.com/taskforcesh/bullmq/commit/b43267be50f9eade8233500d189d46940a01cc29)) +* **stalled-jobs:** handle job id 0 ([829e6e0](https://github.com/taskforcesh/bullmq/commit/829e6e0252e78bf2cbc55ab1d3bd153faa0cee4c)) +* **worker:** do not allow stalledInterval to be less than zero ([831ffc5](https://github.com/taskforcesh/bullmq/commit/831ffc520ccd3c6ea63af6b04ddddc9f7829c667)) +* **workers:** use connection closing to determine closing status ([fe1d173](https://github.com/taskforcesh/bullmq/commit/fe1d17321f1eb49bd872c52965392add22729941)) + +### Features + +* improve delayed jobs and remove QueueScheduler ([1f66e5a](https://github.com/taskforcesh/bullmq/commit/1f66e5a6c891d52e0671e58a685dbca511e45e7e)) +* move stalled jobs check and handling to Worker class from QueueScheduler ([13769cb](https://github.com/taskforcesh/bullmq/commit/13769cbe38ba22793cbc66e9706a6be28a7f1512)) + +### BREAKING CHANGES + +* **compat:** The compatibility class for Bullv3 is no longer available. +* The QueueScheduler class is removed since it is not necessary anymore. +Delayed jobs are now handled in a much simpler and +robust way, without the need of a separate process. +* failed and stalled events are now produced by the Worker class instead of by the QueueScheduler. ([`5f3c316`](https://github.com/taskforcesh/bullmq/commit/5f3c31609b60589ed9e78317bf212dd407fad55b)) + +* chore: merge devel-2.0 ([`e20fc34`](https://github.com/taskforcesh/bullmq/commit/e20fc34e90589596c98b51a8ad774a733fe423bd)) + +* chore(deps): lock file maintenance ([`6f35126`](https://github.com/taskforcesh/bullmq/commit/6f35126bef0ac3021e95c66c27eb0bf6a0751f96)) + +* chore: add minimum recommended version 6.2.0 ([`9c3742a`](https://github.com/taskforcesh/bullmq/commit/9c3742ad003bcc5027f1ca0771b877ebc95e0200)) + +### Fix + +* fix(sandbox): remove progress method ([`b43267b`](https://github.com/taskforcesh/bullmq/commit/b43267be50f9eade8233500d189d46940a01cc29)) + +* fix(stalled-jobs): handle job id 0 ([`829e6e0`](https://github.com/taskforcesh/bullmq/commit/829e6e0252e78bf2cbc55ab1d3bd153faa0cee4c)) + +* fix(delayed): promote delayed jobs instead of picking one by one ([`1b938af`](https://github.com/taskforcesh/bullmq/commit/1b938af75069d69772ddf2b03f95db7f53eada68)) + +### Unknown + +* Merge pull request #1423 from taskforcesh/feat/removed-queue-scheduler + +feat: eliminate the need of having a QueueScheduler ([`7b069ea`](https://github.com/taskforcesh/bullmq/commit/7b069ea9fbb5469c6f1e6ca2e339136170950e11)) + +* GitBook: [#122] No subject ([`f55e94c`](https://github.com/taskforcesh/bullmq/commit/f55e94c3887f5e1108aec5cbb6121d114ac63b46)) + + +## v1.91.1 (2022-09-18) + +### Chore + +* chore(release): 1.91.1 [skip ci] + +## [1.91.1](https://github.com/taskforcesh/bullmq/compare/v1.91.0...v1.91.1) (2022-09-18) + +### Bug Fixes + +* **drain:** consider empty active list ([#1412](https://github.com/taskforcesh/bullmq/issues/1412)) ([f919a50](https://github.com/taskforcesh/bullmq/commit/f919a50b2f4972dcb9ecd5848b0f7fd9a0e137ea)) ([`5f3338c`](https://github.com/taskforcesh/bullmq/commit/5f3338c1c125e08c3f2be86e51dc81ddce8daae5)) + +### Fix + +* fix(drain): consider empty active list (#1412) ([`f919a50`](https://github.com/taskforcesh/bullmq/commit/f919a50b2f4972dcb9ecd5848b0f7fd9a0e137ea)) + +* fix(promote): remove marker when promoting delayed job ([`1aea0dc`](https://github.com/taskforcesh/bullmq/commit/1aea0dcc5fb29086cef3d0c432c387d6f8261963)) + +* fix(worker): do not allow stalledInterval to be less than zero ([`831ffc5`](https://github.com/taskforcesh/bullmq/commit/831ffc520ccd3c6ea63af6b04ddddc9f7829c667)) + +* fix(workers): use connection closing to determine closing status ([`fe1d173`](https://github.com/taskforcesh/bullmq/commit/fe1d17321f1eb49bd872c52965392add22729941)) + +* fix(getters): compensate for "mark" job id ([`231b9aa`](https://github.com/taskforcesh/bullmq/commit/231b9aa0f4781e4493d3ea272c33b27c0b7dc0ab)) + +### Test + +* test(obliterate): make sure there are no active jobs when obliterating ([`4400b33`](https://github.com/taskforcesh/bullmq/commit/4400b33880835188f0805ab956a237945959dba8)) + +* test(job): skip delay priority test ([`dd304d3`](https://github.com/taskforcesh/bullmq/commit/dd304d3a0d63ec7bb4e3f40905b44f79f14b67bc)) + +* test(jobs): add an assertion ([`41343b4`](https://github.com/taskforcesh/bullmq/commit/41343b42a3ccbaeecf54585c03064f73b56df69f)) + +* test(clean): update some assertions ([`6b90d07`](https://github.com/taskforcesh/bullmq/commit/6b90d07e6803b0f2c5321e2677c96832cb7b237e)) + + +## v1.91.0 (2022-09-16) + +### Breaking + +* feat: improve delayed jobs and remove QueueScheduler + +BREAKING CHANGE: +The QueueScheduler class is removed since it is not necessary anymore. +Delayed jobs are now handled in a much simpler and +robust way, without the need of a separate process. ([`1f66e5a`](https://github.com/taskforcesh/bullmq/commit/1f66e5a6c891d52e0671e58a685dbca511e45e7e)) + +* feat: move stalled jobs check and handling to Worker class from QueueScheduler + +BREAKING CHANGE: +failed and stalled events are now produced by the Worker class instead of by the QueueScheduler. ([`13769cb`](https://github.com/taskforcesh/bullmq/commit/13769cbe38ba22793cbc66e9706a6be28a7f1512)) + +### Chore + +* chore(release): 1.91.0 [skip ci] + +# [1.91.0](https://github.com/taskforcesh/bullmq/compare/v1.90.2...v1.91.0) (2022-09-16) + +### Features + +* **sandbox:** support update method ([#1416](https://github.com/taskforcesh/bullmq/issues/1416)) ([606b75d](https://github.com/taskforcesh/bullmq/commit/606b75d53e12dfc109f01eda38736c07e829e9b7)) ([`ca33621`](https://github.com/taskforcesh/bullmq/commit/ca336213a0fdba07d9abbdae7fa42bc4c52fa8a1)) + +* chore(deps): lock file maintenance ([`7904fb1`](https://github.com/taskforcesh/bullmq/commit/7904fb155406471511403abd2592362d1a176c26)) + +### Feature + +* feat(sandbox): support update method (#1416) ([`606b75d`](https://github.com/taskforcesh/bullmq/commit/606b75d53e12dfc109f01eda38736c07e829e9b7)) + +### Test + +* test(worker): fix test case ([`43c0e72`](https://github.com/taskforcesh/bullmq/commit/43c0e723c8497639e7855e1f3a61865096fc03d4)) + +### Unknown + +* Merge branch 'feat/move-check-stalled-jobs-to-worker' of github.com:taskforcesh/bullmq into feat/move-check-stalled-jobs-to-worker ([`67d7cd6`](https://github.com/taskforcesh/bullmq/commit/67d7cd683e8183bd9a42e5cdcfa152db9c40112c)) + + +## v1.90.2 (2022-09-12) + +### Chore + +* chore(release): 1.90.2 [skip ci] + +## [1.90.2](https://github.com/taskforcesh/bullmq/compare/v1.90.1...v1.90.2) (2022-09-12) + +### Performance Improvements + +* **script-loader:** use cache to read script once ([#1410](https://github.com/taskforcesh/bullmq/issues/1410)) ([f956e93](https://github.com/taskforcesh/bullmq/commit/f956e937ae3488cdcd0e2eacbe3e096c8066ebd1)) ([`31c3297`](https://github.com/taskforcesh/bullmq/commit/31c3297592cf4fb550007e06cf8da8f99a4a2580)) + +* chore(deps): update dependency uuid to v9 ([`ca29c1a`](https://github.com/taskforcesh/bullmq/commit/ca29c1a5bb4e31a48ff84258d94f07961bb1f9a8)) + +* chore(deps): lock file maintenance ([`9d71495`](https://github.com/taskforcesh/bullmq/commit/9d714950965dfdcefc147c81f84f9b52c4e206b7)) + +### Documentation + +* docs: update RedisGreen sponsorship with new name ([`06be1eb`](https://github.com/taskforcesh/bullmq/commit/06be1ebab7c4e8e24cbe4508a6c3153a3e0edb21)) + +* docs(bullmq-pro): update changelog to version 2.4.7 ([`f7234a6`](https://github.com/taskforcesh/bullmq/commit/f7234a61ea8e8884ea90a044ba838fc7a99eb7ad)) + +### Performance + +* perf(script-loader): use cache to read script once (#1410) ([`f956e93`](https://github.com/taskforcesh/bullmq/commit/f956e937ae3488cdcd0e2eacbe3e096c8066ebd1)) + +### Test + +* test(rate-limit): split tests (#1400) ([`f2d00c3`](https://github.com/taskforcesh/bullmq/commit/f2d00c328ce0578dd5837fb37ce471d166d1e246)) + + +## v1.90.1 (2022-09-02) + +### Chore + +* chore(release): 1.90.1 [skip ci] + +## [1.90.1](https://github.com/taskforcesh/bullmq/compare/v1.90.0...v1.90.1) (2022-09-02) + +### Performance Improvements + +* **add-job:** handle parent split on js ([#1397](https://github.com/taskforcesh/bullmq/issues/1397)) ([566f074](https://github.com/taskforcesh/bullmq/commit/566f0747110679e5b07e7642fef793744565fffe)) ([`632d9b6`](https://github.com/taskforcesh/bullmq/commit/632d9b6b94b1d0fc6082d519defc70c8329c7f3f)) + +* chore(deps): lock file maintenance ([`45a8e4d`](https://github.com/taskforcesh/bullmq/commit/45a8e4dadbfc39ce387613e4fbce3867c8c80b95)) + +### Performance + +* perf(add-job): handle parent split on js (#1397) ([`566f074`](https://github.com/taskforcesh/bullmq/commit/566f0747110679e5b07e7642fef793744565fffe)) + + +## v1.90.0 (2022-08-30) + +### Chore + +* chore(release): 1.90.0 [skip ci] + +# [1.90.0](https://github.com/taskforcesh/bullmq/compare/v1.89.2...v1.90.0) (2022-08-30) + +### Features + +* **repeat:** allow passing a cron strategy ([#1248](https://github.com/taskforcesh/bullmq/issues/1248)) ref [#1245](https://github.com/taskforcesh/bullmq/issues/1245) ([7f0534f](https://github.com/taskforcesh/bullmq/commit/7f0534f72449ae14a7415fa17a2eb2a70136a8b0)) ([`0a18c0f`](https://github.com/taskforcesh/bullmq/commit/0a18c0f2f4368c5a716b7147556f545e340f7c12)) + +* chore(deps): update github/codeql-action digest to c7f292e ([`1925925`](https://github.com/taskforcesh/bullmq/commit/192592565a6adf5da7513ade46ca210904f229c3)) + +### Documentation + +* docs(bullmq-pro): update changelog to version 2.4.3 ([`0bf8428`](https://github.com/taskforcesh/bullmq/commit/0bf8428d9174ddcc861ae84f8a7b54df67a4d3ee)) + +### Feature + +* feat(repeat): allow passing a cron strategy (#1248) ref #1245 ([`7f0534f`](https://github.com/taskforcesh/bullmq/commit/7f0534f72449ae14a7415fa17a2eb2a70136a8b0)) + + +## v1.89.2 (2022-08-23) + +### Chore + +* chore(release): 1.89.2 [skip ci] + +## [1.89.2](https://github.com/taskforcesh/bullmq/compare/v1.89.1...v1.89.2) (2022-08-23) + +### Bug Fixes + +* **job:** update delay when changeDelay ([#1389](https://github.com/taskforcesh/bullmq/issues/1389)) fixes [#1160](https://github.com/taskforcesh/bullmq/issues/1160) ([d9b100d](https://github.com/taskforcesh/bullmq/commit/d9b100d04112c518ef2efbcf5586aa1226ccccab)) ([`9d2355a`](https://github.com/taskforcesh/bullmq/commit/9d2355a8f30838d4638f75568f9bb879ce4aac6d)) + +### Fix + +* fix(job): update delay when changeDelay (#1389) fixes #1160 ([`d9b100d`](https://github.com/taskforcesh/bullmq/commit/d9b100d04112c518ef2efbcf5586aa1226ccccab)) + +### Unknown + +* GitBook: [#121] No subject ([`b9fd5bb`](https://github.com/taskforcesh/bullmq/commit/b9fd5bbb15706cc1fef6d9cb00c25581258a10dd)) + + +## v1.89.1 (2022-08-19) + +### Chore + +* chore(release): 1.89.1 [skip ci] + +## [1.89.1](https://github.com/taskforcesh/bullmq/compare/v1.89.0...v1.89.1) (2022-08-19) + +### Bug Fixes + +* revert "chore: allow esm imports through exports field" ([#1388](https://github.com/taskforcesh/bullmq/issues/1388)) ([8e51272](https://github.com/taskforcesh/bullmq/commit/8e512724b1e8145bceb0152b70a934decf6d6864)) ([`db9d1ad`](https://github.com/taskforcesh/bullmq/commit/db9d1ad98628c6023fa05f2f86c09a528405aee7)) + +### Fix + +* fix: revert "chore: allow esm imports through exports field" (#1388) ([`8e51272`](https://github.com/taskforcesh/bullmq/commit/8e512724b1e8145bceb0152b70a934decf6d6864)) + + +## v1.89.0 (2022-08-18) + +### Chore + +* chore(release): 1.89.0 [skip ci] + +# [1.89.0](https://github.com/taskforcesh/bullmq/compare/v1.88.2...v1.89.0) (2022-08-18) + +### Features + +* **job:** expose delay in instance ([#1386](https://github.com/taskforcesh/bullmq/issues/1386)) ([d4d0d2e](https://github.com/taskforcesh/bullmq/commit/d4d0d2e737c7ceb5eb34a2c50d53bd1081e0ad4a)) ([`3ee4f5e`](https://github.com/taskforcesh/bullmq/commit/3ee4f5e0063077e40526b3d3315c2ca76e71657d)) + +### Feature + +* feat(job): expose delay in instance (#1386) ([`d4d0d2e`](https://github.com/taskforcesh/bullmq/commit/d4d0d2e737c7ceb5eb34a2c50d53bd1081e0ad4a)) + + +## v1.88.2 (2022-08-18) + +### Chore + +* chore(release): 1.88.2 [skip ci] + +## [1.88.2](https://github.com/taskforcesh/bullmq/compare/v1.88.1...v1.88.2) (2022-08-18) + +### Bug Fixes + +* revert "feat(sandbox): experimental support ESM" ([#1384](https://github.com/taskforcesh/bullmq/issues/1384)) ([7d180eb](https://github.com/taskforcesh/bullmq/commit/7d180eb18daa41062dcbca72213bc9d9f40153db)) ([`77cfec5`](https://github.com/taskforcesh/bullmq/commit/77cfec58bc2096df7e945b9a811d1341a3f85d65)) + +### Fix + +* fix: revert "feat(sandbox): experimental support ESM" (#1384) + +This reverts commit ed0faff3c67c436116eb625ffacb03e435caee3f. ([`7d180eb`](https://github.com/taskforcesh/bullmq/commit/7d180eb18daa41062dcbca72213bc9d9f40153db)) + +### Style + +* style: restore eslint deps (#1383) ([`5f813c3`](https://github.com/taskforcesh/bullmq/commit/5f813c32150122a596a0a44c527c26964189e0a0)) + + +## v1.88.1 (2022-08-17) + +### Chore + +* chore(release): 1.88.1 [skip ci] + +## [1.88.1](https://github.com/taskforcesh/bullmq/compare/v1.88.0...v1.88.1) (2022-08-17) + +### Bug Fixes + +* fix husky install ([edee918](https://github.com/taskforcesh/bullmq/commit/edee918e84ba895ed4ef63cabcc26b97d9c52d8d)) ([`d08566c`](https://github.com/taskforcesh/bullmq/commit/d08566c05dc6d036c689fd4164e15d20e1bfc74f)) + +### Fix + +* fix: fix husky install ([`edee918`](https://github.com/taskforcesh/bullmq/commit/edee918e84ba895ed4ef63cabcc26b97d9c52d8d)) + + +## v1.88.0 (2022-08-17) + +### Chore + +* chore(release): 1.88.0 [skip ci] + +# [1.88.0](https://github.com/taskforcesh/bullmq/compare/v1.87.2...v1.88.0) (2022-08-17) + +### Bug Fixes + +* **clean:** consider priority when cleaning waiting jobs ([#1357](https://github.com/taskforcesh/bullmq/issues/1357)) ([ced5be1](https://github.com/taskforcesh/bullmq/commit/ced5be1c9531953baa9cf87d6bda3faa5863270d)) +* **parent-priority-check:** use tonumber on priority ([#1370](https://github.com/taskforcesh/bullmq/issues/1370)) ([e2043c6](https://github.com/taskforcesh/bullmq/commit/e2043c6f4b8ad5faea8c13edde76aea60612fec6)) + +### Features + +* **sandbox:** experimental support ESM ([ed0faff](https://github.com/taskforcesh/bullmq/commit/ed0faff3c67c436116eb625ffacb03e435caee3f)) ([`e30b0c9`](https://github.com/taskforcesh/bullmq/commit/e30b0c974d2fc2eedeb434afaf17a80cc2eab5bf)) + +* chore: disable husky in semantic release (#1377) ([`c3cbea5`](https://github.com/taskforcesh/bullmq/commit/c3cbea554a2b507a1551ed960c16568d14cc1642)) + +* chore: upgrade get-port without deprecating node12 (#1374) ([`c9bd025`](https://github.com/taskforcesh/bullmq/commit/c9bd02540e4577b39f819673b80d82a0bd854894)) + +* chore(compat): use some unused types properly (#1360) ([`1916516`](https://github.com/taskforcesh/bullmq/commit/19165160c6184757fb160aac38bb6f22c80188f8)) + +* chore: allow esm imports through exports field ([`f7ae7c0`](https://github.com/taskforcesh/bullmq/commit/f7ae7c0c87bb1eeb7ef897bc77606ddfa667d688)) + +* chore(deps): update dependency tslib to v2 ([`889d7f5`](https://github.com/taskforcesh/bullmq/commit/889d7f5b9c87414ac2f3c898c5014dc192dee44c)) + +* chore(deps): add renovate.json ([`d8c3b0a`](https://github.com/taskforcesh/bullmq/commit/d8c3b0abe04248721c64c5dc3f4b26c47826db9f)) + +* chore: adapt to ioredis 5 ([`1b6cf41`](https://github.com/taskforcesh/bullmq/commit/1b6cf41395e9c2515d044363f9d976d8bdfd0ccc)) + +* chore: update dependencies ([`8063a78`](https://github.com/taskforcesh/bullmq/commit/8063a782d60a6daa326233f54d50ef587148652c)) + +* chore: streamline ci setup ([`3b060fa`](https://github.com/taskforcesh/bullmq/commit/3b060fa6daf803ee3a7510a4759693121a0d184e)) + +### Ci + +* ci: set up nyc coverage limits aligned with reality ([`a22430b`](https://github.com/taskforcesh/bullmq/commit/a22430b5c29ac6a87a889022285ee34f93a56f9e)) + +### Feature + +* feat(sandbox): experimental support ESM ([`ed0faff`](https://github.com/taskforcesh/bullmq/commit/ed0faff3c67c436116eb625ffacb03e435caee3f)) + +### Fix + +* fix(clean): consider priority when cleaning waiting jobs (#1357) ([`ced5be1`](https://github.com/taskforcesh/bullmq/commit/ced5be1c9531953baa9cf87d6bda3faa5863270d)) + +* fix(parent-priority-check): use tonumber on priority (#1370) ([`e2043c6`](https://github.com/taskforcesh/bullmq/commit/e2043c6f4b8ad5faea8c13edde76aea60612fec6)) + + +## v1.87.2 (2022-08-13) + +### Chore + +* chore(release): 1.87.2 [skip ci] + +## [1.87.2](https://github.com/taskforcesh/bullmq/compare/v1.87.1...v1.87.2) (2022-08-13) + +### Bug Fixes + +* **move-parent-to-wait:** emit waiting instead of active event ([#1356](https://github.com/taskforcesh/bullmq/issues/1356)) ([53578dd](https://github.com/taskforcesh/bullmq/commit/53578dd1cbe31b49361a833b1aca449486f3b925)) ([`19c0da8`](https://github.com/taskforcesh/bullmq/commit/19c0da8aa7cd2fe891364dc0cf1b6b26bd77adee)) + +### Fix + +* fix(move-parent-to-wait): emit waiting instead of active event (#1356) ([`53578dd`](https://github.com/taskforcesh/bullmq/commit/53578dd1cbe31b49361a833b1aca449486f3b925)) + + +## v1.87.1 (2022-08-09) + +### Chore + +* chore(release): 1.87.1 [skip ci] + +## [1.87.1](https://github.com/taskforcesh/bullmq/compare/v1.87.0...v1.87.1) (2022-08-09) + +### Bug Fixes + +* **job:** declare discarded as protected ([#1352](https://github.com/taskforcesh/bullmq/issues/1352)) ([870e01c](https://github.com/taskforcesh/bullmq/commit/870e01c4ab602c1e6e351cc369f3eac5f7afa083)) ([`380c56e`](https://github.com/taskforcesh/bullmq/commit/380c56e43bf59895ffc2ca0ed5a2ade79803a872)) + +### Documentation + +* docs(bullmq-pro): update changelog to version 2.3.10 ([`1d9dd6e`](https://github.com/taskforcesh/bullmq/commit/1d9dd6eb812cea211b17785f437ef07a78e90166)) + +### Fix + +* fix(job): declare discarded as protected (#1352) ([`870e01c`](https://github.com/taskforcesh/bullmq/commit/870e01c4ab602c1e6e351cc369f3eac5f7afa083)) + + +## v1.87.0 (2022-08-05) + +### Chore + +* chore(release): 1.87.0 [skip ci] + +# [1.87.0](https://github.com/taskforcesh/bullmq/compare/v1.86.10...v1.87.0) (2022-08-05) + +### Features + +* **flow:** consider priority when parent is moved ([#1286](https://github.com/taskforcesh/bullmq/issues/1286)) ([d49760d](https://github.com/taskforcesh/bullmq/commit/d49760d09420c5fcc99ab06c8fe36168755fd397)) ([`d19a712`](https://github.com/taskforcesh/bullmq/commit/d19a71229b6ddaf8b44b9ad41152f052ff1aeadd)) + +* chore(scripts): generate raw scripts (#1209) ([`d07deb1`](https://github.com/taskforcesh/bullmq/commit/d07deb1cb16180fea6a31922a92c658dc5ebb868)) + +### Documentation + +* docs(bullmq-pro): update changelog to version 2.3.9 ([`64ccdde`](https://github.com/taskforcesh/bullmq/commit/64ccdde2179d8709107f982ea6506804abbfd6f7)) + +### Feature + +* feat(flow): consider priority when parent is moved (#1286) ([`d49760d`](https://github.com/taskforcesh/bullmq/commit/d49760d09420c5fcc99ab06c8fe36168755fd397)) + +### Unknown + +* GitBook: [#120] No subject ([`7ca048a`](https://github.com/taskforcesh/bullmq/commit/7ca048a6b90a0bb13a7f404ff9e8afb8315b22ed)) + +* GitBook: [#119] No subject ([`168f1da`](https://github.com/taskforcesh/bullmq/commit/168f1da199841f50bf4943a3fadfc22db1214f33)) + +* GitBook: [#118] No subject ([`94071e8`](https://github.com/taskforcesh/bullmq/commit/94071e806c3d36c2da44214d0f04912001369b6a)) + + +## v1.86.10 (2022-07-29) + +### Chore + +* chore(release): 1.86.10 [skip ci] + +## [1.86.10](https://github.com/taskforcesh/bullmq/compare/v1.86.9...v1.86.10) (2022-07-29) + +### Performance Improvements + +* **clean-jobs-in-set:** use ZRANGEBYSCORE when limit > 0 ([#1338](https://github.com/taskforcesh/bullmq/issues/1338)) ([f0d9985](https://github.com/taskforcesh/bullmq/commit/f0d998541f03778ca2a092080a19e6bf7b7d0af1)) ([`7251dd7`](https://github.com/taskforcesh/bullmq/commit/7251dd7259ab0d2e1c6343e3fc491ad41195816f)) + +### Performance + +* perf(clean-jobs-in-set): use ZRANGEBYSCORE when limit > 0 (#1338) ([`f0d9985`](https://github.com/taskforcesh/bullmq/commit/f0d998541f03778ca2a092080a19e6bf7b7d0af1)) + + +## v1.86.9 (2022-07-27) + +### Chore + +* chore(release): 1.86.9 [skip ci] + +## [1.86.9](https://github.com/taskforcesh/bullmq/compare/v1.86.8...v1.86.9) (2022-07-27) + +### Bug Fixes + +* **get-flow:** consider groupKey ([#1336](https://github.com/taskforcesh/bullmq/issues/1336)) fixes [#1334](https://github.com/taskforcesh/bullmq/issues/1334) ([9f31272](https://github.com/taskforcesh/bullmq/commit/9f31272fa8b3f5b8ab26f15e21bd80537c5baef0)) ([`9c14458`](https://github.com/taskforcesh/bullmq/commit/9c14458ca130171c38af82d2d0bd51b8779f21cc)) + +### Fix + +* fix(get-flow): consider groupKey (#1336) fixes #1334 ([`9f31272`](https://github.com/taskforcesh/bullmq/commit/9f31272fa8b3f5b8ab26f15e21bd80537c5baef0)) + + +## v1.86.8 (2022-07-26) + +### Chore + +* chore(release): 1.86.8 [skip ci] + +## [1.86.8](https://github.com/taskforcesh/bullmq/compare/v1.86.7...v1.86.8) (2022-07-26) + +### Bug Fixes + +* **promote:** consider empty queue when paused ([#1335](https://github.com/taskforcesh/bullmq/issues/1335)) ([9f742e8](https://github.com/taskforcesh/bullmq/commit/9f742e88d6338ce9ac7e0413bdac411ab6cf675c)) ([`19b34bd`](https://github.com/taskforcesh/bullmq/commit/19b34bd3005e0dc21a6a181ac6771142bf8454eb)) + +### Documentation + +* docs(bullmq-pro): update changelog to version 2.3.5 ([`788faef`](https://github.com/taskforcesh/bullmq/commit/788faefbb0240964cedb35daadf296d258417965)) + +* docs(readme): fix incorrect typescript example (#1329) ([`4646f3b`](https://github.com/taskforcesh/bullmq/commit/4646f3b292788e824b15b1cb670fee9a341e6d24)) + +### Fix + +* fix(promote): consider empty queue when paused (#1335) ([`9f742e8`](https://github.com/taskforcesh/bullmq/commit/9f742e88d6338ce9ac7e0413bdac411ab6cf675c)) + +### Refactor + +* refactor(job): replace slow object destructuring with single object in getDependencies (#1324) fixes #1323 ([`ec8afcc`](https://github.com/taskforcesh/bullmq/commit/ec8afcc54a7fc6feeb9fcd124b5c69392909b8d3)) + +### Unknown + +* GitBook: [#117] No subject ([`cbe57d2`](https://github.com/taskforcesh/bullmq/commit/cbe57d29043acebf150525f5c4110eb12bde8de1)) + + +## v1.86.7 (2022-07-15) + +### Chore + +* chore(release): 1.86.7 [skip ci] + +## [1.86.7](https://github.com/taskforcesh/bullmq/compare/v1.86.6...v1.86.7) (2022-07-15) + +### Bug Fixes + +* **sandboxed-process:** consider UnrecoverableError ([#1320](https://github.com/taskforcesh/bullmq/issues/1320)) fixes [#1317](https://github.com/taskforcesh/bullmq/issues/1317) ([c1269cc](https://github.com/taskforcesh/bullmq/commit/c1269cc772c6cec84d82ff790b9a7c9cc4242dcb)) ([`306543a`](https://github.com/taskforcesh/bullmq/commit/306543a7e055c22faa6c34c1bb7190060691458f)) + +### Fix + +* fix(sandboxed-process): consider UnrecoverableError (#1320) fixes #1317 ([`c1269cc`](https://github.com/taskforcesh/bullmq/commit/c1269cc772c6cec84d82ff790b9a7c9cc4242dcb)) + + +## v1.86.6 (2022-07-14) + +### Chore + +* chore(release): 1.86.6 [skip ci] + +## [1.86.6](https://github.com/taskforcesh/bullmq/compare/v1.86.5...v1.86.6) (2022-07-14) + +### Bug Fixes + +* **retry-jobs:** consider paused queue ([#1321](https://github.com/taskforcesh/bullmq/issues/1321)) ([3e9703d](https://github.com/taskforcesh/bullmq/commit/3e9703d17fc9dc601d5d77e999f3e9a137f20843)) ([`970bb87`](https://github.com/taskforcesh/bullmq/commit/970bb87eff67fce0fb4d37609182ad47d3e9309e)) + +* chore(deps-dev): bump moment from 2.29.2 to 2.29.4 (#1315) ([`e50bd88`](https://github.com/taskforcesh/bullmq/commit/e50bd884707777d60f039e223572cdfb8be11c0d)) + +### Documentation + +* docs(bullmq-pro): update changelog ([`331f6fd`](https://github.com/taskforcesh/bullmq/commit/331f6fdae579e3f2810810d645ab61afdbe86272)) + +### Fix + +* fix(retry-jobs): consider paused queue (#1321) ([`3e9703d`](https://github.com/taskforcesh/bullmq/commit/3e9703d17fc9dc601d5d77e999f3e9a137f20843)) + + +## v1.86.5 (2022-07-09) + +### Chore + +* chore(release): 1.86.5 [skip ci] + +## [1.86.5](https://github.com/taskforcesh/bullmq/compare/v1.86.4...v1.86.5) (2022-07-09) + +### Bug Fixes + +* **retry-job:** consider paused queue ([#1314](https://github.com/taskforcesh/bullmq/issues/1314)) ([907ae1d](https://github.com/taskforcesh/bullmq/commit/907ae1d7e3504f31c625ec8a09e32785f08357ff)) ([`4c182df`](https://github.com/taskforcesh/bullmq/commit/4c182df13c2223b2d6615506844999c474adf1bd)) + +### Documentation + +* docs(bullmq-pro): update changelog ([`ff1f1ee`](https://github.com/taskforcesh/bullmq/commit/ff1f1ee5b5cdec0e9c669df99699cc4a4b9840e5)) + +* docs(bullmq-pro): update changelog ([`dba0b3b`](https://github.com/taskforcesh/bullmq/commit/dba0b3bd86850fe612f38c9a122cf9ccd8ab0194)) + +* docs: add new api references ([`bd64c46`](https://github.com/taskforcesh/bullmq/commit/bd64c4663ce956d24e4b2d37134416ba5f344899)) + +### Fix + +* fix(retry-job): consider paused queue (#1314) ([`907ae1d`](https://github.com/taskforcesh/bullmq/commit/907ae1d7e3504f31c625ec8a09e32785f08357ff)) + +### Unknown + +* GitBook: [#116] No subject ([`40ca91b`](https://github.com/taskforcesh/bullmq/commit/40ca91b823f4141de3ec59e44c821c4a5d2d1052)) + +* GitBook: [#114] No subject ([`29a1ba9`](https://github.com/taskforcesh/bullmq/commit/29a1ba95db0a2986468ebe8159a904b783bef8d8)) + + +## v1.86.4 (2022-06-29) + +### Chore + +* chore(release): 1.86.4 [skip ci] + +## [1.86.4](https://github.com/taskforcesh/bullmq/compare/v1.86.3...v1.86.4) (2022-06-29) + +### Bug Fixes + +* **parent:** emit waiting event when no pending children ([#1296](https://github.com/taskforcesh/bullmq/issues/1296)) ([aa8fa3f](https://github.com/taskforcesh/bullmq/commit/aa8fa3f8cd5ab6d7d309d87ae45c558249b1c29c)) ([`868bb00`](https://github.com/taskforcesh/bullmq/commit/868bb00213626fdfa3c8594c8f8dfea9b47cd7b1)) + +### Documentation + +* docs: add Novu in "used by" ([`b1de9bc`](https://github.com/taskforcesh/bullmq/commit/b1de9bc3378f6d0ef9a8f3f4bd20ea2216b902a0)) + +* docs(pausing-groups): update description and bullmq-pro changelog ([`fdc894b`](https://github.com/taskforcesh/bullmq/commit/fdc894b4cc39705cb73409db8ea37328999d0302)) + +### Fix + +* fix(parent): emit waiting event when no pending children (#1296) ([`aa8fa3f`](https://github.com/taskforcesh/bullmq/commit/aa8fa3f8cd5ab6d7d309d87ae45c558249b1c29c)) + + +## v1.86.3 (2022-06-26) + +### Chore + +* chore(release): 1.86.3 [skip ci] + +## [1.86.3](https://github.com/taskforcesh/bullmq/compare/v1.86.2...v1.86.3) (2022-06-26) + +### Bug Fixes + +* avoid calling delay() if queue is being closed ([#1295](https://github.com/taskforcesh/bullmq/issues/1295)) ([52a5045](https://github.com/taskforcesh/bullmq/commit/52a5045b903ed6e0e73dd747748787a6389f12f7)) ([`9dc1420`](https://github.com/taskforcesh/bullmq/commit/9dc1420f08e094df821085412e55a4e0dbac36ec)) + +### Documentation + +* docs(bullmq-pro): add pausing-groups section ([`b7b8741`](https://github.com/taskforcesh/bullmq/commit/b7b874134e01d8d3ff5078823037d897d8a5d5a1)) + +### Fix + +* fix: avoid calling delay() if queue is being closed (#1295) ([`52a5045`](https://github.com/taskforcesh/bullmq/commit/52a5045b903ed6e0e73dd747748787a6389f12f7)) + +### Unknown + +* GitBook: [#113] No subject ([`5b1a71a`](https://github.com/taskforcesh/bullmq/commit/5b1a71a6200b4b5c8e42f9dd618441c223ffe834)) + +* GitBook: [#112] No subject ([`897c4b3`](https://github.com/taskforcesh/bullmq/commit/897c4b3451ba373409dcd3c96b84b3c3c59bbf17)) + + +## v1.86.2 (2022-06-16) + +### Chore + +* chore(release): 1.86.2 [skip ci] + +## [1.86.2](https://github.com/taskforcesh/bullmq/compare/v1.86.1...v1.86.2) (2022-06-16) + +### Bug Fixes + +* **queue:** get rid of repeat options from defaultJobOptions ([#1284](https://github.com/taskforcesh/bullmq/issues/1284)) ([cdd2a20](https://github.com/taskforcesh/bullmq/commit/cdd2a20c2c4ca47042ecd1da525ecb72941e4910)) ([`88095f6`](https://github.com/taskforcesh/bullmq/commit/88095f6261ca57cf13eba5582cb71d7b69ab2339)) + +### Fix + +* fix(queue): get rid of repeat options from defaultJobOptions (#1284) ([`cdd2a20`](https://github.com/taskforcesh/bullmq/commit/cdd2a20c2c4ca47042ecd1da525ecb72941e4910)) + + +## v1.86.1 (2022-06-12) + +### Chore + +* chore(release): 1.86.1 [skip ci] + +## [1.86.1](https://github.com/taskforcesh/bullmq/compare/v1.86.0...v1.86.1) (2022-06-12) + +### Bug Fixes + +* unpack empty metrics in batches ([96829db](https://github.com/taskforcesh/bullmq/commit/96829db839fad4489415f7dbb047abdca5566e78)) ([`1769ce1`](https://github.com/taskforcesh/bullmq/commit/1769ce15d907269c34be1b26671ab5e71fae43d1)) + +### Fix + +* fix: unpack empty metrics in batches ([`96829db`](https://github.com/taskforcesh/bullmq/commit/96829db839fad4489415f7dbb047abdca5566e78)) + + +## v1.86.0 (2022-06-10) + +### Chore + +* chore(release): 1.86.0 [skip ci] + +# [1.86.0](https://github.com/taskforcesh/bullmq/compare/v1.85.4...v1.86.0) (2022-06-10) + +### Features + +* **repeat:** save repeatJobKey reference ([#1214](https://github.com/taskforcesh/bullmq/issues/1214)) ([4d5a8e3](https://github.com/taskforcesh/bullmq/commit/4d5a8e33b614cf099369c18298e5b2963b434b1b)) ([`363f6c0`](https://github.com/taskforcesh/bullmq/commit/363f6c05f0ca64db9fc7a028b57b9a301a9a8808)) + +### Documentation + +* docs: add some missing API documentation ([`8baaae6`](https://github.com/taskforcesh/bullmq/commit/8baaae6f3625ccb88d22e4bd1938447b8352d3f7)) + +* docs(bullmq-pro): add ttl per job name description (#1276) ([`2d59174`](https://github.com/taskforcesh/bullmq/commit/2d59174986c55fce334999fdb2905e06a948edb5)) + +### Feature + +* feat(repeat): save repeatJobKey reference (#1214) ([`4d5a8e3`](https://github.com/taskforcesh/bullmq/commit/4d5a8e33b614cf099369c18298e5b2963b434b1b)) + + +## v1.85.4 (2022-06-08) + +### Chore + +* chore(release): 1.85.4 [skip ci] + +## [1.85.4](https://github.com/taskforcesh/bullmq/compare/v1.85.3...v1.85.4) (2022-06-08) + +### Bug Fixes + +* **error-prototype:** define custom name for toJSON method ([#1272](https://github.com/taskforcesh/bullmq/issues/1272)) ([66d80da](https://github.com/taskforcesh/bullmq/commit/66d80da4a6043755c7d296addb31857816ea4da3)) ([`9dbec4a`](https://github.com/taskforcesh/bullmq/commit/9dbec4a7329f650931abd198940b5a8c926fd6c1)) + +* chore(deps): bump semver-regex from 3.1.3 to 3.1.4 (#1269) ([`90592a2`](https://github.com/taskforcesh/bullmq/commit/90592a2f2b123fd2565ffc679a0efeaff83bde0d)) + +### Fix + +* fix(error-prototype): define custom name for toJSON method (#1272) ([`66d80da`](https://github.com/taskforcesh/bullmq/commit/66d80da4a6043755c7d296addb31857816ea4da3)) + +### Refactor + +* refactor(clean-jobs-in-set): split script into include functions (#1271) ([`f3fc053`](https://github.com/taskforcesh/bullmq/commit/f3fc053b33df2deb2cfa1f89d0c774e94c6d61d2)) + + +## v1.85.3 (2022-06-03) + +### Chore + +* chore(release): 1.85.3 [skip ci] + +## [1.85.3](https://github.com/taskforcesh/bullmq/compare/v1.85.2...v1.85.3) (2022-06-03) + +### Bug Fixes + +* **queue:** fix addBulk signature ResultType ([#1268](https://github.com/taskforcesh/bullmq/issues/1268)) ([f6770cc](https://github.com/taskforcesh/bullmq/commit/f6770cc383b68bf7b2fa655cd9eda713a06835aa)) ([`7ad899b`](https://github.com/taskforcesh/bullmq/commit/7ad899b55d35cc911afbbdd67b68bd06b001e39c)) + +### Documentation + +* docs(concurrency): add concurrency update description (#1264) ([`7249012`](https://github.com/taskforcesh/bullmq/commit/7249012f189632957ee1ec62f563e1a7445f1cdb)) + +### Fix + +* fix(queue): fix addBulk signature ResultType (#1268) ([`f6770cc`](https://github.com/taskforcesh/bullmq/commit/f6770cc383b68bf7b2fa655cd9eda713a06835aa)) + + +## v1.85.2 (2022-06-01) + +### Chore + +* chore(release): 1.85.2 [skip ci] + +## [1.85.2](https://github.com/taskforcesh/bullmq/compare/v1.85.1...v1.85.2) (2022-06-01) + +### Bug Fixes + +* **job:** save finishedOn attribute on instance ([#1267](https://github.com/taskforcesh/bullmq/issues/1267)) ([4cf6a63](https://github.com/taskforcesh/bullmq/commit/4cf6a63d197e6095841bb87cef297a9533ac79c3)) ([`137cd8e`](https://github.com/taskforcesh/bullmq/commit/137cd8e755a255db1083424c47bad2c183a0b2cc)) + +### Fix + +* fix(job): save finishedOn attribute on instance (#1267) ([`4cf6a63`](https://github.com/taskforcesh/bullmq/commit/4cf6a63d197e6095841bb87cef297a9533ac79c3)) + + +## v1.85.1 (2022-05-31) + +### Chore + +* chore(release): 1.85.1 [skip ci] + +## [1.85.1](https://github.com/taskforcesh/bullmq/compare/v1.85.0...v1.85.1) (2022-05-31) + +### Performance Improvements + +* **remove-job:** send prefix key instead of jobKey ([#1252](https://github.com/taskforcesh/bullmq/issues/1252)) ([452856a](https://github.com/taskforcesh/bullmq/commit/452856a6c8c6e67ffda595c26c30988a15c1c1a4)) ([`d77bacc`](https://github.com/taskforcesh/bullmq/commit/d77baccd72ef904c415bf5d94b615d9d07770275)) + +### Performance + +* perf(remove-job): send prefix key instead of jobKey (#1252) ([`452856a`](https://github.com/taskforcesh/bullmq/commit/452856a6c8c6e67ffda595c26c30988a15c1c1a4)) + + +## v1.85.0 (2022-05-30) + +### Chore + +* chore(release): 1.85.0 [skip ci] + +# [1.85.0](https://github.com/taskforcesh/bullmq/compare/v1.84.1...v1.85.0) (2022-05-30) + +### Features + +* **worker:** change the number of concurrent processes ([#1256](https://github.com/taskforcesh/bullmq/issues/1256)) ref [#22](https://github.com/taskforcesh/bullmq/issues/22) ([940dc8f](https://github.com/taskforcesh/bullmq/commit/940dc8f34d9a46dc9c8384661461bf0558e97600)) ([`9cfda3d`](https://github.com/taskforcesh/bullmq/commit/9cfda3d2dd640350d7b41f2449cd89318a237610)) + +### Documentation + +* docs(step-jobs): fix waiting children step (#1261) ([`35b0283`](https://github.com/taskforcesh/bullmq/commit/35b028356e41ef3b646db44e1cfe7a1cf64d3f3e)) + +### Feature + +* feat(worker): change the number of concurrent processes (#1256) ref #22 ([`940dc8f`](https://github.com/taskforcesh/bullmq/commit/940dc8f34d9a46dc9c8384661461bf0558e97600)) + + +## v1.84.1 (2022-05-27) + +### Chore + +* chore(release): 1.84.1 [skip ci] + +## [1.84.1](https://github.com/taskforcesh/bullmq/compare/v1.84.0...v1.84.1) (2022-05-27) + +### Bug Fixes + +* **waiting-children:** pass right timestamp value in moveToWaitingChildren ([#1260](https://github.com/taskforcesh/bullmq/issues/1260)) ([0f993f7](https://github.com/taskforcesh/bullmq/commit/0f993f71ed481b02a3f859a2109177352336cb9a)) ([`5d68aef`](https://github.com/taskforcesh/bullmq/commit/5d68aef2715d2ba474893bd343a34753f1e0eccb)) + +### Fix + +* fix(waiting-children): pass right timestamp value in moveToWaitingChildren (#1260) ([`0f993f7`](https://github.com/taskforcesh/bullmq/commit/0f993f71ed481b02a3f859a2109177352336cb9a)) + + +## v1.84.0 (2022-05-26) + +### Chore + +* chore(release): 1.84.0 [skip ci] + +# [1.84.0](https://github.com/taskforcesh/bullmq/compare/v1.83.2...v1.84.0) (2022-05-26) + +### Features + +* **flow-producer:** add event listener types ([#1257](https://github.com/taskforcesh/bullmq/issues/1257)) ([19ed099](https://github.com/taskforcesh/bullmq/commit/19ed099905cbb4f071370b2b6d67d9a378e3a8f8)) ([`0dac923`](https://github.com/taskforcesh/bullmq/commit/0dac92327328838730cdee8ca33918611e05d5d9)) + +### Documentation + +* docs(bullmq-pro): update changelog ([`2c7639d`](https://github.com/taskforcesh/bullmq/commit/2c7639d389c82370889f5164460ea2ef746931ba)) + +### Feature + +* feat(flow-producer): add event listener types (#1257) ([`19ed099`](https://github.com/taskforcesh/bullmq/commit/19ed099905cbb4f071370b2b6d67d9a378e3a8f8)) + + +## v1.83.2 (2022-05-24) + +### Chore + +* chore(release): 1.83.2 [skip ci] + +## [1.83.2](https://github.com/taskforcesh/bullmq/compare/v1.83.1...v1.83.2) (2022-05-24) + +### Bug Fixes + +* **close:** emit ioredis:close event instead of error ([#1251](https://github.com/taskforcesh/bullmq/issues/1251)) fixes [#1231](https://github.com/taskforcesh/bullmq/issues/1231) ([74c1c38](https://github.com/taskforcesh/bullmq/commit/74c1c38f7ff468da1adc63aff160e31940d682a9)) ([`eb38636`](https://github.com/taskforcesh/bullmq/commit/eb38636346b5b679f6967671fbb3ca84fda68fd8)) + +### Fix + +* fix(close): emit ioredis:close event instead of error (#1251) fixes #1231 ([`74c1c38`](https://github.com/taskforcesh/bullmq/commit/74c1c38f7ff468da1adc63aff160e31940d682a9)) + + +## v1.83.1 (2022-05-24) + +### Chore + +* chore(release): 1.83.1 [skip ci] + +## [1.83.1](https://github.com/taskforcesh/bullmq/compare/v1.83.0...v1.83.1) (2022-05-24) + +### Bug Fixes + +* **get-workers:** use blockingConnection client to set clientName ([#1255](https://github.com/taskforcesh/bullmq/issues/1255)) fixes [#1254](https://github.com/taskforcesh/bullmq/issues/1254) ([df796bd](https://github.com/taskforcesh/bullmq/commit/df796bd0c085aff72cef001395809b3f1a8045e4)) ([`41cc7f1`](https://github.com/taskforcesh/bullmq/commit/41cc7f1cade5410664873ffacb8569f37f6a409f)) + +### Documentation + +* docs(bullmq-pro): update changelog ([`a705738`](https://github.com/taskforcesh/bullmq/commit/a70573854ca70310d80a761e940640083f8e311d)) + +### Fix + +* fix(get-workers): use blockingConnection client to set clientName (#1255) fixes #1254 ([`df796bd`](https://github.com/taskforcesh/bullmq/commit/df796bd0c085aff72cef001395809b3f1a8045e4)) + + +## v1.83.0 (2022-05-20) + +### Chore + +* chore(release): 1.83.0 [skip ci] + +# [1.83.0](https://github.com/taskforcesh/bullmq/compare/v1.82.3...v1.83.0) (2022-05-20) + +### Features + +* **flow-producer:** easier to build extension ([#1250](https://github.com/taskforcesh/bullmq/issues/1250)) ([aaf637e](https://github.com/taskforcesh/bullmq/commit/aaf637e74b9610651fd9e4efc5ff349971b7bb26)) ([`44ee7cf`](https://github.com/taskforcesh/bullmq/commit/44ee7cff2e3570acda6ded8836fca91a11db3d15)) + +### Feature + +* feat(flow-producer): easier to build extension (#1250) ([`aaf637e`](https://github.com/taskforcesh/bullmq/commit/aaf637e74b9610651fd9e4efc5ff349971b7bb26)) + + +## v1.82.3 (2022-05-19) + +### Chore + +* chore(release): 1.82.3 [skip ci] + +## [1.82.3](https://github.com/taskforcesh/bullmq/compare/v1.82.2...v1.82.3) (2022-05-19) + +### Bug Fixes + +* **redis-connection:** save cluster opts and coerse redis version ([#1247](https://github.com/taskforcesh/bullmq/issues/1247)) ref [#1246](https://github.com/taskforcesh/bullmq/issues/1246) fixes [#1243](https://github.com/taskforcesh/bullmq/issues/1243) ([acb69b5](https://github.com/taskforcesh/bullmq/commit/acb69b57d7a6417b8ca9fe1576a94d16e41f12d7)) ([`cd8ffa4`](https://github.com/taskforcesh/bullmq/commit/cd8ffa4958bba16b389114c8c37c847f8a6cf17a)) + +### Documentation + +* docs(bullmq-pro): update changelog (#1244) ([`1e4e1bc`](https://github.com/taskforcesh/bullmq/commit/1e4e1bc729208fb0d2c423694e9e686418ed5aab)) + +### Fix + +* fix(redis-connection): save cluster opts and coerse redis version (#1247) ref #1246 fixes #1243 ([`acb69b5`](https://github.com/taskforcesh/bullmq/commit/acb69b57d7a6417b8ca9fe1576a94d16e41f12d7)) + + +## v1.82.2 (2022-05-17) + +### Chore + +* chore(release): 1.82.2 [skip ci] + +## [1.82.2](https://github.com/taskforcesh/bullmq/compare/v1.82.1...v1.82.2) (2022-05-17) + +### Bug Fixes + +* **job:** add job helper attribute for extension ([#1242](https://github.com/taskforcesh/bullmq/issues/1242)) ([4d7ae9e](https://github.com/taskforcesh/bullmq/commit/4d7ae9e3fda23650e802ebac6b33ff3350f116f6)) ([`5d77e15`](https://github.com/taskforcesh/bullmq/commit/5d77e15a498e9d25349beabe55b4fa8e025f9c6d)) + +### Fix + +* fix(job): add job helper attribute for extension (#1242) ([`4d7ae9e`](https://github.com/taskforcesh/bullmq/commit/4d7ae9e3fda23650e802ebac6b33ff3350f116f6)) + + +## v1.82.1 (2022-05-16) + +### Chore + +* chore(release): 1.82.1 [skip ci] + +## [1.82.1](https://github.com/taskforcesh/bullmq/compare/v1.82.0...v1.82.1) (2022-05-16) + +### Bug Fixes + +* **remove-job:** pass right prev param in removed event ([#1237](https://github.com/taskforcesh/bullmq/issues/1237)) ([54df47e](https://github.com/taskforcesh/bullmq/commit/54df47edf715a0a2a42687bf827e0a62c03951a5)) ([`547a853`](https://github.com/taskforcesh/bullmq/commit/547a85368ffedab4f642dea70813945050e53cf4)) + +### Fix + +* fix(remove-job): pass right prev param in removed event (#1237) ([`54df47e`](https://github.com/taskforcesh/bullmq/commit/54df47edf715a0a2a42687bf827e0a62c03951a5)) + +### Refactor + +* refactor(scripts): create class instance to handle scripts call (#1240) ([`87a16f0`](https://github.com/taskforcesh/bullmq/commit/87a16f0570d17e4db33fc5deb0131d4c8209704a)) + + +## v1.82.0 (2022-05-11) + +### Chore + +* chore(release): 1.82.0 [skip ci] + +# [1.82.0](https://github.com/taskforcesh/bullmq/compare/v1.81.4...v1.82.0) (2022-05-11) + +### Features + +* **remove-repeatable:** return boolean depending on job existence ([#1239](https://github.com/taskforcesh/bullmq/issues/1239)) ref [#1235](https://github.com/taskforcesh/bullmq/issues/1235) ([59b0da7](https://github.com/taskforcesh/bullmq/commit/59b0da7d0e979e4f9e8a5b042acbdce433790611)) ([`a0b179c`](https://github.com/taskforcesh/bullmq/commit/a0b179cba0349f166dc20f2bac28e1ea7f715592)) + +### Documentation + +* docs(bullmq-pro): add version 2.0.3 changelog ([`a265398`](https://github.com/taskforcesh/bullmq/commit/a26539826479ff360e6313b3b9bad80a0c935caa)) + +* docs(bullmq-pro): add changelog (#1234) ([`fb1ece0`](https://github.com/taskforcesh/bullmq/commit/fb1ece0c534250b90452bcf021bc77779a7f35a3)) + +### Feature + +* feat(remove-repeatable): return boolean depending on job existence (#1239) ref #1235 ([`59b0da7`](https://github.com/taskforcesh/bullmq/commit/59b0da7d0e979e4f9e8a5b042acbdce433790611)) + +### Refactor + +* refactor(remove-jobs): remove timestamp param from removeJobsByMaxCount (#1233) ([`83465ff`](https://github.com/taskforcesh/bullmq/commit/83465ff391ea2ba050adc62bba5630d311f66fab)) + + +## v1.81.4 (2022-05-05) + +### Chore + +* chore(release): 1.81.4 [skip ci] + +## [1.81.4](https://github.com/taskforcesh/bullmq/compare/v1.81.3...v1.81.4) (2022-05-05) + +### Bug Fixes + +* **repeatable:** emit removed event when removing ([#1229](https://github.com/taskforcesh/bullmq/issues/1229)) ([7d2de8d](https://github.com/taskforcesh/bullmq/commit/7d2de8d075e5ee7774501429c5177b729c430c20)) ([`7edc886`](https://github.com/taskforcesh/bullmq/commit/7edc886fd2bc7ec18640e30e9eabaf1ea0ef6493)) + +### Fix + +* fix(repeatable): emit removed event when removing (#1229) ([`7d2de8d`](https://github.com/taskforcesh/bullmq/commit/7d2de8d075e5ee7774501429c5177b729c430c20)) + + +## v1.81.3 (2022-05-04) + +### Chore + +* chore(release): 1.81.3 [skip ci] + +## [1.81.3](https://github.com/taskforcesh/bullmq/compare/v1.81.2...v1.81.3) (2022-05-04) + +### Bug Fixes + +* **remove-parent:** check removed record from waiting-children ([#1227](https://github.com/taskforcesh/bullmq/issues/1227)) ([e7b25d0](https://github.com/taskforcesh/bullmq/commit/e7b25d00acb860ee3df36c6214a7162b2cf79635)) ([`6cc16d6`](https://github.com/taskforcesh/bullmq/commit/6cc16d66fe5afd79ca9d2e3af9a135c8f47ca758)) + +### Fix + +* fix(remove-parent): check removed record from waiting-children (#1227) ([`e7b25d0`](https://github.com/taskforcesh/bullmq/commit/e7b25d00acb860ee3df36c6214a7162b2cf79635)) + + +## v1.81.2 (2022-05-03) + +### Chore + +* chore(release): 1.81.2 [skip ci] + +## [1.81.2](https://github.com/taskforcesh/bullmq/compare/v1.81.1...v1.81.2) (2022-05-03) + +### Bug Fixes + +* **stalled:** consider removeOnFail when failing jobs ([#1225](https://github.com/taskforcesh/bullmq/issues/1225)) fixes [#1171](https://github.com/taskforcesh/bullmq/issues/1171) ([38486cb](https://github.com/taskforcesh/bullmq/commit/38486cb4d7cbfc78bd64d71f19d8bfbc908f3fc7)) ([`c175c13`](https://github.com/taskforcesh/bullmq/commit/c175c13c25f32987d65f2195fca6bba1840ed5c7)) + +### Fix + +* fix(stalled): consider removeOnFail when failing jobs (#1225) fixes #1171 ([`38486cb`](https://github.com/taskforcesh/bullmq/commit/38486cb4d7cbfc78bd64d71f19d8bfbc908f3fc7)) + + +## v1.81.1 (2022-04-29) + +### Chore + +* chore(release): 1.81.1 [skip ci] + +## [1.81.1](https://github.com/taskforcesh/bullmq/compare/v1.81.0...v1.81.1) (2022-04-29) + +### Bug Fixes + +* **add-bulk:** use for loop and throw if error is present ([#1223](https://github.com/taskforcesh/bullmq/issues/1223)) fixes [#1222](https://github.com/taskforcesh/bullmq/issues/1222) ([564de4f](https://github.com/taskforcesh/bullmq/commit/564de4f907648f5a5667a845c5366f73cff1d384)) ([`22fae96`](https://github.com/taskforcesh/bullmq/commit/22fae96f2b03ace7b9d00390ef451c12ea14e3b4)) + +### Fix + +* fix(add-bulk): use for loop and throw if error is present (#1223) fixes #1222 ([`564de4f`](https://github.com/taskforcesh/bullmq/commit/564de4f907648f5a5667a845c5366f73cff1d384)) + + +## v1.81.0 (2022-04-26) + +### Chore + +* chore(release): 1.81.0 [skip ci] + +# [1.81.0](https://github.com/taskforcesh/bullmq/compare/v1.80.6...v1.81.0) (2022-04-26) + +### Features + +* **move-to-delayed:** allow passing token ([#1213](https://github.com/taskforcesh/bullmq/issues/1213)) ([14f0e4a](https://github.com/taskforcesh/bullmq/commit/14f0e4a33d9ddfbaa1f86dbe7598e20a516a9d09)) ([`b01db23`](https://github.com/taskforcesh/bullmq/commit/b01db23ecf4947011d09870c5a2a7e76753cf3c4)) + +### Documentation + +* docs: add missing read more sections ([`3e995f6`](https://github.com/taskforcesh/bullmq/commit/3e995f6dd70813da2dfea7c547fc20cbf24836da)) + +### Feature + +* feat(move-to-delayed): allow passing token (#1213) + +fix(move-to-waiting-children): delete lock ([`14f0e4a`](https://github.com/taskforcesh/bullmq/commit/14f0e4a33d9ddfbaa1f86dbe7598e20a516a9d09)) + +### Unknown + +* GitBook: [#111] docs: add Curri in used by ([`60da723`](https://github.com/taskforcesh/bullmq/commit/60da723cc5f75b5e6bc4a1d55a3c0e31ba2bc6ad)) + +* GitBook: [#110] docs: update queues section links ([`73ac8c7`](https://github.com/taskforcesh/bullmq/commit/73ac8c75775083476e17a3e6ae62e4b4fe0fe6be)) + + +## v1.80.6 (2022-04-22) + +### Chore + +* chore(release): 1.80.6 [skip ci] + +## [1.80.6](https://github.com/taskforcesh/bullmq/compare/v1.80.5...v1.80.6) (2022-04-22) + +### Bug Fixes + +* **job:** delete token when moving to delayed ([#1208](https://github.com/taskforcesh/bullmq/issues/1208)) ([37acf41](https://github.com/taskforcesh/bullmq/commit/37acf4109d17090dfaef992267e48130d34f7187)) ([`86a1874`](https://github.com/taskforcesh/bullmq/commit/86a1874699bfe9bd9214344d6d4c451e148582b2)) + +### Fix + +* fix(job): delete token when moving to delayed (#1208) ([`37acf41`](https://github.com/taskforcesh/bullmq/commit/37acf4109d17090dfaef992267e48130d34f7187)) + + +## v1.80.5 (2022-04-21) + +### Chore + +* chore(release): 1.80.5 [skip ci] + +## [1.80.5](https://github.com/taskforcesh/bullmq/compare/v1.80.4...v1.80.5) (2022-04-21) + +### Bug Fixes + +* **queue-base:** emit close error when no closing ([#1203](https://github.com/taskforcesh/bullmq/issues/1203)) fixes [#1205](https://github.com/taskforcesh/bullmq/issues/1205) ([4d76582](https://github.com/taskforcesh/bullmq/commit/4d7658272af94b57a09486e1141b0e15a7bac3ba)) ([`6cd3a19`](https://github.com/taskforcesh/bullmq/commit/6cd3a19a68ee308ad2d8e1c79b34ffee55efdf30)) + +### Documentation + +* docs: change order of summary ([`7a3206f`](https://github.com/taskforcesh/bullmq/commit/7a3206fe97cf801db4042cfe96a912c695037916)) + +* docs: fix README.md heading ([`dda13cf`](https://github.com/taskforcesh/bullmq/commit/dda13cfa898f24f0b31de58e2f24d55f097e1476)) + +### Fix + +* fix(queue-base): emit close error when no closing (#1203) fixes #1205 ([`4d76582`](https://github.com/taskforcesh/bullmq/commit/4d7658272af94b57a09486e1141b0e15a7bac3ba)) + + +## v1.80.4 (2022-04-19) + +### Chore + +* chore(release): 1.80.4 [skip ci] + +## [1.80.4](https://github.com/taskforcesh/bullmq/compare/v1.80.3...v1.80.4) (2022-04-19) + +### Bug Fixes + +* **queue-scheduler:** apply isNotConnectionError ([#1189](https://github.com/taskforcesh/bullmq/issues/1189)) fixes [#1181](https://github.com/taskforcesh/bullmq/issues/1181) ([605d685](https://github.com/taskforcesh/bullmq/commit/605d68595d8fa1d9d47348a3fa9e0d7a4e28c706)) ([`d48fe2a`](https://github.com/taskforcesh/bullmq/commit/d48fe2a35b20cdbcd4d84861bc3fb607f64631b7)) + +### Fix + +* fix(queue-scheduler): apply isNotConnectionError (#1189) fixes #1181 ([`605d685`](https://github.com/taskforcesh/bullmq/commit/605d68595d8fa1d9d47348a3fa9e0d7a4e28c706)) + + +## v1.80.3 (2022-04-15) + +### Chore + +* chore(release): 1.80.3 [skip ci] + +## [1.80.3](https://github.com/taskforcesh/bullmq/compare/v1.80.2...v1.80.3) (2022-04-15) + +### Bug Fixes + +* **cluster:** check correct Upstash host ([#1195](https://github.com/taskforcesh/bullmq/issues/1195)) fixes [#1193](https://github.com/taskforcesh/bullmq/issues/1193) ([69f2863](https://github.com/taskforcesh/bullmq/commit/69f28632408c741219c1ba49304d36f49cf5cb83)) ([`e347cdb`](https://github.com/taskforcesh/bullmq/commit/e347cdbabcb142060592e541f35aa94730196700)) + +* chore: upgrade typescript to version 4.6.x ([`445a031`](https://github.com/taskforcesh/bullmq/commit/445a0310219c6cd3dfebc6ca82cca985e3d84912)) + +### Documentation + +* docs: add link to bullmq-pro api reference ([`52fdc61`](https://github.com/taskforcesh/bullmq/commit/52fdc61a100090a236b2c990df8e826701ad697b)) + +* docs: fix link to api reference ([`7e3df91`](https://github.com/taskforcesh/bullmq/commit/7e3df91a068421851ad8ae10a87d6c86235ffcdc)) + +* docs: remove readme from api docs ([`da8a310`](https://github.com/taskforcesh/bullmq/commit/da8a310f2e90be480ba4541c105d2d25e39c1240)) + +* docs: add missing typedoc dependency ([`ab7f1b5`](https://github.com/taskforcesh/bullmq/commit/ab7f1b54b2e22a76e0640f6fe7bc4e54417fbda1)) + +* docs: add new api based on typedoc ([`8e56db5`](https://github.com/taskforcesh/bullmq/commit/8e56db551e1f0f187c2ae56c22b70342f9106822)) + +### Fix + +* fix(cluster): check correct Upstash host (#1195) fixes #1193 ([`69f2863`](https://github.com/taskforcesh/bullmq/commit/69f28632408c741219c1ba49304d36f49cf5cb83)) + +### Unknown + +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`892e80b`](https://github.com/taskforcesh/bullmq/commit/892e80b097b808e81e8091d3696ab64ee1a534a9)) + + +## v1.80.2 (2022-04-15) + +### Chore + +* chore(release): 1.80.2 [skip ci] + +## [1.80.2](https://github.com/taskforcesh/bullmq/compare/v1.80.1...v1.80.2) (2022-04-15) + +### Bug Fixes + +* **job:** remove Error from Promise return in moveToWaitingChildren ([#1197](https://github.com/taskforcesh/bullmq/issues/1197)) ([180a8bf](https://github.com/taskforcesh/bullmq/commit/180a8bf8fb2fe62b9929765a6dfd084574c77936)) ([`d83842d`](https://github.com/taskforcesh/bullmq/commit/d83842dc346f9308f52cf7dfda5ad2fc050eef4e)) + +### Fix + +* fix(job): remove Error from Promise return in moveToWaitingChildren (#1197) ([`180a8bf`](https://github.com/taskforcesh/bullmq/commit/180a8bf8fb2fe62b9929765a6dfd084574c77936)) + +### Unknown + +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`99ae4c0`](https://github.com/taskforcesh/bullmq/commit/99ae4c0c6e80a51b9220acb9b74c8202d2d3a830)) + + +## v1.80.1 (2022-04-14) + +### Chore + +* chore(release): 1.80.1 [skip ci] + +## [1.80.1](https://github.com/taskforcesh/bullmq/compare/v1.80.0...v1.80.1) (2022-04-14) + +### Bug Fixes + +* **worker:** restore worker suffix to empty string ([#1194](https://github.com/taskforcesh/bullmq/issues/1194)) fixes [#1185](https://github.com/taskforcesh/bullmq/issues/1185) ([2666ea5](https://github.com/taskforcesh/bullmq/commit/2666ea5b8532645da24482cf01c5692da5f2ceda)) ([`3901472`](https://github.com/taskforcesh/bullmq/commit/3901472f30c090d8c26a34ccc1fb666193a91ca0)) + +### Fix + +* fix(worker): restore worker suffix to empty string (#1194) fixes #1185 ([`2666ea5`](https://github.com/taskforcesh/bullmq/commit/2666ea5b8532645da24482cf01c5692da5f2ceda)) + + +## v1.80.0 (2022-04-12) + +### Chore + +* chore(release): 1.80.0 [skip ci] + +# [1.80.0](https://github.com/taskforcesh/bullmq/compare/v1.79.1...v1.80.0) (2022-04-12) + +### Features + +* **worker-listener:** use generics in events ([#1190](https://github.com/taskforcesh/bullmq/issues/1190)) ref [#1188](https://github.com/taskforcesh/bullmq/issues/1188) ([2821193](https://github.com/taskforcesh/bullmq/commit/28211937d9ed405330eede5ad7d4b0b817accf39)) ([`3ac9dd0`](https://github.com/taskforcesh/bullmq/commit/3ac9dd002f0dcedf83312708222c39041d23c2c0)) + +### Feature + +* feat(worker-listener): use generics in events (#1190) ref #1188 ([`2821193`](https://github.com/taskforcesh/bullmq/commit/28211937d9ed405330eede5ad7d4b0b817accf39)) + + +## v1.79.1 (2022-04-12) + +### Chore + +* chore(release): 1.79.1 [skip ci] + +## [1.79.1](https://github.com/taskforcesh/bullmq/compare/v1.79.0...v1.79.1) (2022-04-12) + +### Bug Fixes + +* **connection:** remove Queue reconnect overrides ([#1119](https://github.com/taskforcesh/bullmq/issues/1119)) ([83f1c79](https://github.com/taskforcesh/bullmq/commit/83f1c797b8a5272028c8d78d5ce464236e90909e)) ([`56ffa3c`](https://github.com/taskforcesh/bullmq/commit/56ffa3c918c1c642f0ffeae4952fc57cfbd13abd)) + +* chore(deps-dev): bump moment from 2.29.1 to 2.29.2 (#1184) ([`e27986e`](https://github.com/taskforcesh/bullmq/commit/e27986e06dc39c1ee983733deb8188fa78c797d1)) + +### Fix + +* fix(connection): remove Queue reconnect overrides (#1119) ([`83f1c79`](https://github.com/taskforcesh/bullmq/commit/83f1c797b8a5272028c8d78d5ce464236e90909e)) + +### Unknown + +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`8f0bbda`](https://github.com/taskforcesh/bullmq/commit/8f0bbda3332ce3dd3712e9812963733c117d2b74)) + + +## v1.79.0 (2022-04-08) + +### Chore + +* chore(release): 1.79.0 [skip ci] + +# [1.79.0](https://github.com/taskforcesh/bullmq/compare/v1.78.2...v1.79.0) (2022-04-08) + +### Features + +* **queue-getters:** add getQueueEvents ([#1085](https://github.com/taskforcesh/bullmq/issues/1085)) ([f10a20a](https://github.com/taskforcesh/bullmq/commit/f10a20a90ab6dbf2d9f3f75ba99dacbdc797c329)) ([`cb46ff7`](https://github.com/taskforcesh/bullmq/commit/cb46ff78e1f22b7ae94e37adfcc91f2ed4041355)) + +* chore(redis-connection): coerce redis version to standard semver format ([`3828767`](https://github.com/taskforcesh/bullmq/commit/382876791c9d2a8cb8f3550f7c6eab97bb30d899)) + +### Documentation + +* docs(readme): better layout in "used by" ([`094ec8f`](https://github.com/taskforcesh/bullmq/commit/094ec8fb8f2655b9b4fd0752dcde36e5526fe333)) + +* docs(readme): add curri in "used by" ([`931a932`](https://github.com/taskforcesh/bullmq/commit/931a932e25cee430cbe5a126fd8dd6f7e704756a)) + +### Feature + +* feat(queue-getters): add getQueueEvents (#1085) ([`f10a20a`](https://github.com/taskforcesh/bullmq/commit/f10a20a90ab6dbf2d9f3f75ba99dacbdc797c329)) + +### Refactor + +* refactor(get-workers): add worker suffix (#1176) ([`8376f4c`](https://github.com/taskforcesh/bullmq/commit/8376f4c055fc134bb51d6605a4ddffbffdf5130e)) + +* refactor(backoff-options): improve IntelliSense for backoff types (#1168) ([`1633c5b`](https://github.com/taskforcesh/bullmq/commit/1633c5b85555a3c7f90e535dd8dcfce2e2127b86)) + +### Test + +* test(events): fix flaky test ([`ee7fb35`](https://github.com/taskforcesh/bullmq/commit/ee7fb35bd622297f20ee83079715aec5ab9e30ab)) + + +## v1.78.2 (2022-03-31) + +### Chore + +* chore(release): 1.78.2 [skip ci] + +## [1.78.2](https://github.com/taskforcesh/bullmq/compare/v1.78.1...v1.78.2) (2022-03-31) + +### Bug Fixes + +* **clean:** consider processedOn and finishedOn attributes ([#1158](https://github.com/taskforcesh/bullmq/issues/1158)) ([8c3cb72](https://github.com/taskforcesh/bullmq/commit/8c3cb72235ec6123da389553f37433c2943e0f57)) ([`3c75df5`](https://github.com/taskforcesh/bullmq/commit/3c75df5c9bc8f7ba5db9638b0aaeefb00903105d)) + +### Documentation + +* docs: misspelled rate limited (#1165) ([`f33d0a9`](https://github.com/taskforcesh/bullmq/commit/f33d0a957525ec1bc3986e4bb57624d5ac0a4bc1)) + +* docs(worker): add autorun example (#1161) ([`ad159ad`](https://github.com/taskforcesh/bullmq/commit/ad159ad6a4bda3703ce1686b4989e1fae7dcaef8)) + +* docs(metrics): fix typo ([`7ff86b2`](https://github.com/taskforcesh/bullmq/commit/7ff86b23525392937914c2336f22c7d2ae89f6e9)) + +### Fix + +* fix(clean): consider processedOn and finishedOn attributes (#1158) ([`8c3cb72`](https://github.com/taskforcesh/bullmq/commit/8c3cb72235ec6123da389553f37433c2943e0f57)) + +### Unknown + +* GitBook: [#106] No subject ([`8271109`](https://github.com/taskforcesh/bullmq/commit/8271109a2a11af46ac23cf8b1e3a4d63ef1c27c7)) + +* GitBook: [#105] No subject ([`a27a9a3`](https://github.com/taskforcesh/bullmq/commit/a27a9a3b82362330de29e174a8353bfc264bd516)) + + +## v1.78.1 (2022-03-24) + +### Chore + +* chore(release): 1.78.1 [skip ci] + +## [1.78.1](https://github.com/taskforcesh/bullmq/compare/v1.78.0...v1.78.1) (2022-03-24) + +### Bug Fixes + +* **queue:** close repeat connection when calling close ([#1154](https://github.com/taskforcesh/bullmq/issues/1154)) ([7d79616](https://github.com/taskforcesh/bullmq/commit/7d796167229048ec79660ca5d3ac8a7c85d125e7)) ([`04d0992`](https://github.com/taskforcesh/bullmq/commit/04d09929a8cd2a79d335e27f97543b62ca105191)) + +### Fix + +* fix(queue): close repeat connection when calling close (#1154) ([`7d79616`](https://github.com/taskforcesh/bullmq/commit/7d796167229048ec79660ca5d3ac8a7c85d125e7)) + + +## v1.78.0 (2022-03-23) + +### Chore + +* chore(release): 1.78.0 [skip ci] + +# [1.78.0](https://github.com/taskforcesh/bullmq/compare/v1.77.3...v1.78.0) (2022-03-23) + +### Features + +* **cron-parser:** upgrades version to 4.2.1 ([#1149](https://github.com/taskforcesh/bullmq/issues/1149)) fixes [#1147](https://github.com/taskforcesh/bullmq/issues/1147) ([88a6c9c](https://github.com/taskforcesh/bullmq/commit/88a6c9c437172035173628842909f5170eb481f7)) ([`cc5c695`](https://github.com/taskforcesh/bullmq/commit/cc5c695b689df2e319c519aae316e4df2bf194b5)) + +### Feature + +* feat(cron-parser): upgrades version to 4.2.1 (#1149) fixes #1147 ([`88a6c9c`](https://github.com/taskforcesh/bullmq/commit/88a6c9c437172035173628842909f5170eb481f7)) + +### Test + +* test(events): fix flaky test ([`1788833`](https://github.com/taskforcesh/bullmq/commit/17888335138fafd888689a894372ee059ca714ec)) + + +## v1.77.3 (2022-03-22) + +### Chore + +* chore(release): 1.77.3 [skip ci] + +## [1.77.3](https://github.com/taskforcesh/bullmq/compare/v1.77.2...v1.77.3) (2022-03-22) + +### Bug Fixes + +* **async-send:** check proc.send type ([#1150](https://github.com/taskforcesh/bullmq/issues/1150)) ([4f44173](https://github.com/taskforcesh/bullmq/commit/4f44173f0a3cc54705ca9a7e1730aeff26ea1c5a)) ([`fd8742b`](https://github.com/taskforcesh/bullmq/commit/fd8742b1746443a670789b5dbf668e84425f5897)) + +### Fix + +* fix(async-send): check proc.send type (#1150) ([`4f44173`](https://github.com/taskforcesh/bullmq/commit/4f44173f0a3cc54705ca9a7e1730aeff26ea1c5a)) + +### Test + +* test(rate-limiter): fix flaky test ([`a9c11c9`](https://github.com/taskforcesh/bullmq/commit/a9c11c9751bf8be6e6b263ffc95960b1c1ab7ce4)) + +### Unknown + +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`24b4026`](https://github.com/taskforcesh/bullmq/commit/24b4026be2bd831a8e7609f5a9611ac0ed4c6d89)) + + +## v1.77.2 (2022-03-20) + +### Chore + +* chore(release): 1.77.2 [skip ci] + +## [1.77.2](https://github.com/taskforcesh/bullmq/compare/v1.77.1...v1.77.2) (2022-03-20) + +### Bug Fixes + +* **trim-events:** consider maxLenEvents as 0 ([#1137](https://github.com/taskforcesh/bullmq/issues/1137)) ([bc58a49](https://github.com/taskforcesh/bullmq/commit/bc58a49fba1b6f4e3595a0371ecf8410000a9021)) + +### Performance Improvements + +* **clean:** speed up clean operation using deletion marker ([#1144](https://github.com/taskforcesh/bullmq/issues/1144)) ([5fb32ef](https://github.com/taskforcesh/bullmq/commit/5fb32ef2c60843d8d1f2cbc000aacf4df3388b7e)) ([`41ba863`](https://github.com/taskforcesh/bullmq/commit/41ba8631c76477a46af4a23cfad5365d78d77409)) + +### Fix + +* fix(trim-events): consider maxLenEvents as 0 (#1137) ([`bc58a49`](https://github.com/taskforcesh/bullmq/commit/bc58a49fba1b6f4e3595a0371ecf8410000a9021)) + +### Performance + +* perf(clean): speed up clean operation using deletion marker (#1144) ([`5fb32ef`](https://github.com/taskforcesh/bullmq/commit/5fb32ef2c60843d8d1f2cbc000aacf4df3388b7e)) + + +## v1.77.1 (2022-03-17) + +### Chore + +* chore(release): 1.77.1 [skip ci] + +## [1.77.1](https://github.com/taskforcesh/bullmq/compare/v1.77.0...v1.77.1) (2022-03-17) + +### Bug Fixes + +* **flow:** remove processed children ([#1060](https://github.com/taskforcesh/bullmq/issues/1060)) fixes [#1056](https://github.com/taskforcesh/bullmq/issues/1056) ([6b54e86](https://github.com/taskforcesh/bullmq/commit/6b54e86c12f287a13da036f3ec7801b8656f0434)) ([`ed9dd80`](https://github.com/taskforcesh/bullmq/commit/ed9dd801533d714baacc64c469b8b94564a22b98)) + +### Fix + +* fix(flow): remove processed children (#1060) fixes #1056 ([`6b54e86`](https://github.com/taskforcesh/bullmq/commit/6b54e86c12f287a13da036f3ec7801b8656f0434)) + + +## v1.77.0 (2022-03-16) + +### Chore + +* chore(release): 1.77.0 [skip ci] + +# [1.77.0](https://github.com/taskforcesh/bullmq/compare/v1.76.6...v1.77.0) (2022-03-16) + +### Features + +* allow QueueScheduler to be extended ([289beb8](https://github.com/taskforcesh/bullmq/commit/289beb87d2ef3e3dd7583159f7be2b5450f7de3c)) ([`a178ae4`](https://github.com/taskforcesh/bullmq/commit/a178ae4c2fa6d7ece5ebda79c11164be761968a5)) + +### Feature + +* feat: allow QueueScheduler to be extended ([`289beb8`](https://github.com/taskforcesh/bullmq/commit/289beb87d2ef3e3dd7583159f7be2b5450f7de3c)) + +### Unknown + +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`10fdcd3`](https://github.com/taskforcesh/bullmq/commit/10fdcd37fb3c1d115b878f7ca489d711cca3ff6a)) + + +## v1.76.6 (2022-03-15) + +### Chore + +* chore(release): 1.76.6 [skip ci] + +## [1.76.6](https://github.com/taskforcesh/bullmq/compare/v1.76.5...v1.76.6) (2022-03-15) + +### Bug Fixes + +* **master:** do not export master file ([#1136](https://github.com/taskforcesh/bullmq/issues/1136)) fixes [#1125](https://github.com/taskforcesh/bullmq/issues/1125) ref [#1129](https://github.com/taskforcesh/bullmq/issues/1129) ([6aa2f96](https://github.com/taskforcesh/bullmq/commit/6aa2f9657b8787aa791ab5af7267a6d27d7d7869)) ([`96de7b4`](https://github.com/taskforcesh/bullmq/commit/96de7b43fd01a94b28991f9af24b4e6b2a6c0fc2)) + +### Fix + +* fix(master): do not export master file (#1136) fixes #1125 ref #1129 ([`6aa2f96`](https://github.com/taskforcesh/bullmq/commit/6aa2f9657b8787aa791ab5af7267a6d27d7d7869)) + + +## v1.76.5 (2022-03-15) + +### Chore + +* chore(release): 1.76.5 [skip ci] + +## [1.76.5](https://github.com/taskforcesh/bullmq/compare/v1.76.4...v1.76.5) (2022-03-15) + +### Bug Fixes + +* **queue:** sanitize job types in getJobs and getJobsCount ([#1113](https://github.com/taskforcesh/bullmq/issues/1113)) fixes [#1112](https://github.com/taskforcesh/bullmq/issues/1112) ([d452b29](https://github.com/taskforcesh/bullmq/commit/d452b29773cead153a73b8322adda3164fb610d8)) ([`0e74cfa`](https://github.com/taskforcesh/bullmq/commit/0e74cfac4efe7a2d62460ed8e646593f8b48a850)) + +### Fix + +* fix(queue): sanitize job types in getJobs and getJobsCount (#1113) fixes #1112 ([`d452b29`](https://github.com/taskforcesh/bullmq/commit/d452b29773cead153a73b8322adda3164fb610d8)) + +### Test + +* test(rate-limit): add cases when promoting jobs (#1135) fixes #1083 ([`51343c9`](https://github.com/taskforcesh/bullmq/commit/51343c95f4823fedd7d7295d59ad5a092ae8dcbf)) + + +## v1.76.4 (2022-03-13) + +### Chore + +* chore(release): 1.76.4 [skip ci] + +## [1.76.4](https://github.com/taskforcesh/bullmq/compare/v1.76.3...v1.76.4) (2022-03-13) + +### Performance Improvements + +* **move-to-finished:** avoid an extra roundtrip when using rate limit ([#1131](https://github.com/taskforcesh/bullmq/issues/1131)) ([1711547](https://github.com/taskforcesh/bullmq/commit/171154707bf5cbcb750ea9d2a9957128c1abc044)) ([`f713474`](https://github.com/taskforcesh/bullmq/commit/f71347415f4fd04c9a59a94a24ceac11ab320e01)) + +### Documentation + +* docs: clarify jobs priority order (#1124) ([`7721ac3`](https://github.com/taskforcesh/bullmq/commit/7721ac3a01ca5071bcf4b51df3ca0ad0a896659b)) + +### Performance + +* perf(move-to-finished): avoid an extra roundtrip when using rate limit (#1131) ([`1711547`](https://github.com/taskforcesh/bullmq/commit/171154707bf5cbcb750ea9d2a9957128c1abc044)) + +### Refactor + +* refactor(move-to-finished): pass some args using pack (#1128) ([`b60ac86`](https://github.com/taskforcesh/bullmq/commit/b60ac86b4684ee6cc3b931238b59d3aecf1af44f)) + +### Unknown + +* GitBook: [#104] No subject ([`f718340`](https://github.com/taskforcesh/bullmq/commit/f7183404f04a83ba559f915b38a81316ae2fe0ff)) + +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`0870974`](https://github.com/taskforcesh/bullmq/commit/087097422aa9e0d5efbccb1e858d1692e4e22c88)) + + +## v1.76.3 (2022-03-10) + +### Chore + +* chore(release): 1.76.3 [skip ci] + +## [1.76.3](https://github.com/taskforcesh/bullmq/compare/v1.76.2...v1.76.3) (2022-03-10) + +### Bug Fixes + +* **drained:** emit event only once when queue has drained the waiting list ([#1123](https://github.com/taskforcesh/bullmq/issues/1123)) fixes [#1121](https://github.com/taskforcesh/bullmq/issues/1121) ref [#1070](https://github.com/taskforcesh/bullmq/issues/1070) ([b89b4e8](https://github.com/taskforcesh/bullmq/commit/b89b4e8a83fe4c9349ac5a9c439fc07374ff1e63)) ([`e37f6f8`](https://github.com/taskforcesh/bullmq/commit/e37f6f8eed5589b69ed7a2ed27e951846fbfbb0c)) + +### Fix + +* fix(drained): emit event only once when queue has drained the waiting list (#1123) fixes #1121 ref #1070 ([`b89b4e8`](https://github.com/taskforcesh/bullmq/commit/b89b4e8a83fe4c9349ac5a9c439fc07374ff1e63)) + +### Unknown + +* GitBook: [#103] No subject ([`bab62d1`](https://github.com/taskforcesh/bullmq/commit/bab62d1f49748de254ca7cfeaab4b7cf2009ff96)) + + +## v1.76.2 (2022-03-09) + +### Chore + +* chore(release): 1.76.2 [skip ci] + +## [1.76.2](https://github.com/taskforcesh/bullmq/compare/v1.76.1...v1.76.2) (2022-03-09) + +### Bug Fixes + +* **utils:** fix proc.send type ([#1122](https://github.com/taskforcesh/bullmq/issues/1122)) fixes [#1120](https://github.com/taskforcesh/bullmq/issues/1120) ([da23977](https://github.com/taskforcesh/bullmq/commit/da239774379825d9f0a51c118740bc0fefa568bd)) ([`88ac8e5`](https://github.com/taskforcesh/bullmq/commit/88ac8e551574bdd00cbd644aa1ea5bf75f03fa5e)) + +* chore(deps): upgrade gitbook-plugin-mermaid-compat ([`14a4099`](https://github.com/taskforcesh/bullmq/commit/14a40999c0a120480bccd7567e61d61b31779867)) + +### Documentation + +* docs: add mermaid diagrams as comments(#1116) ([`1d69619`](https://github.com/taskforcesh/bullmq/commit/1d69619fcc70c24cca8a5d30451886b6cb487e5c)) + +* docs(architecture): restore diagram ([`b0a3315`](https://github.com/taskforcesh/bullmq/commit/b0a3315db650ee88a7d6dc61c16d764e06803537)) + +* docs: try mermaid-gitbook example ([`dc5c396`](https://github.com/taskforcesh/bullmq/commit/dc5c3962a99e557ae8b8800ea2112485658c2b35)) + +* docs(package): add mermaid-compat plugin ([`1978fdf`](https://github.com/taskforcesh/bullmq/commit/1978fdf121f4ee2988d767c5655249f040d6be65)) + +* docs(architecture): replace state diagram ([`71a95c7`](https://github.com/taskforcesh/bullmq/commit/71a95c784f3add49d1a3e273f0a4771fc7275234)) + +* docs(architecture): use mermaid in state diagram ([`5d5e9d4`](https://github.com/taskforcesh/bullmq/commit/5d5e9d4418e286a2fda73468c13a8d5ff58c36f6)) + +### Fix + +* fix(utils): fix proc.send type (#1122) fixes #1120 ([`da23977`](https://github.com/taskforcesh/bullmq/commit/da239774379825d9f0a51c118740bc0fefa568bd)) + +### Unknown + +* GitBook: [#102] No subject ([`35a7349`](https://github.com/taskforcesh/bullmq/commit/35a734964ebea256708e4583f1514245a4bcf6da)) + +* GitBook: [#100] No subject ([`edfbf62`](https://github.com/taskforcesh/bullmq/commit/edfbf623c39b510163dc2024eb4808d3dcefc6ff)) + +* GitBook: [#99] No subject ([`b710285`](https://github.com/taskforcesh/bullmq/commit/b710285a67271c0b2c1be6d602d858b6025166b5)) + +* GitBook: [#98] No subject ([`8e908dd`](https://github.com/taskforcesh/bullmq/commit/8e908ddc74bc6886b58ac9297844a648cf0808ad)) + +* GitBook: [#97] No subject ([`d196217`](https://github.com/taskforcesh/bullmq/commit/d1962177c2c684c70389b946e614ada883bf6a54)) + +* GitBook: [#96] No subject ([`3f46a47`](https://github.com/taskforcesh/bullmq/commit/3f46a470ccd65b07df66b0004a49294dabaae73a)) + + +## v1.76.1 (2022-03-04) + +### Chore + +* chore(release): 1.76.1 [skip ci] + +## [1.76.1](https://github.com/taskforcesh/bullmq/compare/v1.76.0...v1.76.1) (2022-03-04) + +### Bug Fixes + +* **get-waiting-children-count:** consider waiting-children status only ([#1117](https://github.com/taskforcesh/bullmq/issues/1117)) ([1820df7](https://github.com/taskforcesh/bullmq/commit/1820df73c17ce119d2fdb0f526fc95f99845a5ec)) ([`485def0`](https://github.com/taskforcesh/bullmq/commit/485def0cbb9970e5b85775a549a132016ddef6f4)) + +### Documentation + +* docs: add read more section (#1114) ([`3ba05f7`](https://github.com/taskforcesh/bullmq/commit/3ba05f7ff80b152cd99167b13546d6d76654d3ed)) + +* docs(guide): add link references to classes (#1111) ([`350234e`](https://github.com/taskforcesh/bullmq/commit/350234e816783ff7a4e91d4839d81ac4fe2b2a1d)) + +### Fix + +* fix(get-waiting-children-count): consider waiting-children status only (#1117) ([`1820df7`](https://github.com/taskforcesh/bullmq/commit/1820df73c17ce119d2fdb0f526fc95f99845a5ec)) + + +## v1.76.0 (2022-03-02) + +### Chore + +* chore(release): 1.76.0 [skip ci] + +# [1.76.0](https://github.com/taskforcesh/bullmq/compare/v1.75.1...v1.76.0) (2022-03-02) + +### Features + +* **metrics:** add metrics support ([ab51326](https://github.com/taskforcesh/bullmq/commit/ab51326cf318b4b48e37a1a77f5609e405eecb45)) ([`359e4e5`](https://github.com/taskforcesh/bullmq/commit/359e4e54b633237ec01107e862c109e8712824dc)) + +### Feature + +* feat(metrics): add metrics support ([`ab51326`](https://github.com/taskforcesh/bullmq/commit/ab51326cf318b4b48e37a1a77f5609e405eecb45)) + + +## v1.75.1 (2022-02-26) + +### Chore + +* chore(release): 1.75.1 [skip ci] + +## [1.75.1](https://github.com/taskforcesh/bullmq/compare/v1.75.0...v1.75.1) (2022-02-26) + +### Bug Fixes + +* **rate-limiter:** move job to wait after retry when groupKey is missed ([#1103](https://github.com/taskforcesh/bullmq/issues/1103)) fixes [#1084](https://github.com/taskforcesh/bullmq/issues/1084) ([8aeab37](https://github.com/taskforcesh/bullmq/commit/8aeab37ac5a5c1c760be21bff2ba8752a485577c)) ([`779f6db`](https://github.com/taskforcesh/bullmq/commit/779f6db7b5b0da0324a187f4b735ec6762abc9ad)) + +### Fix + +* fix(rate-limiter): move job to wait after retry when groupKey is missed (#1103) fixes #1084 ([`8aeab37`](https://github.com/taskforcesh/bullmq/commit/8aeab37ac5a5c1c760be21bff2ba8752a485577c)) + +### Unknown + +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`73b9950`](https://github.com/taskforcesh/bullmq/commit/73b995091439727a9a85e3eee1cb8fdfcab9a090)) + + +## v1.75.0 (2022-02-24) + +### Chore + +* chore(release): 1.75.0 [skip ci] + +# [1.75.0](https://github.com/taskforcesh/bullmq/compare/v1.74.3...v1.75.0) (2022-02-24) + +### Bug Fixes + +* **cluster:** check for host presence in Upstash validation ([#1102](https://github.com/taskforcesh/bullmq/issues/1102)) fixes [#1101](https://github.com/taskforcesh/bullmq/issues/1101) ([54d4eac](https://github.com/taskforcesh/bullmq/commit/54d4eac52cfe13d4be99410932c0226c8d06d5d5)) + +### Features + +* **retry-jobs:** allow to retry completed jobs ([#1082](https://github.com/taskforcesh/bullmq/issues/1082)) ([e17b3f2](https://github.com/taskforcesh/bullmq/commit/e17b3f21606757a16630988a69c9607e8c843bd2)) ([`7f11b7d`](https://github.com/taskforcesh/bullmq/commit/7f11b7d741f32101e1dc895ca931647fe9d4c81f)) + +### Feature + +* feat(retry-jobs): allow to retry completed jobs (#1082) ([`e17b3f2`](https://github.com/taskforcesh/bullmq/commit/e17b3f21606757a16630988a69c9607e8c843bd2)) + +### Fix + +* fix(cluster): check for host presence in Upstash validation (#1102) fixes #1101 ([`54d4eac`](https://github.com/taskforcesh/bullmq/commit/54d4eac52cfe13d4be99410932c0226c8d06d5d5)) + + +## v1.74.3 (2022-02-24) + +### Chore + +* chore(release): 1.74.3 [skip ci] + +## [1.74.3](https://github.com/taskforcesh/bullmq/compare/v1.74.2...v1.74.3) (2022-02-24) + +### Bug Fixes + +* **connection:** throw error when Upstash host is provided ([#1098](https://github.com/taskforcesh/bullmq/issues/1098)) fixes [#1087](https://github.com/taskforcesh/bullmq/issues/1087) ([5156d0a](https://github.com/taskforcesh/bullmq/commit/5156d0a4812d8c649a3b41bd98e3e0efb41d0491)) ([`df2fa62`](https://github.com/taskforcesh/bullmq/commit/df2fa62064c9bc1a21b9410e48042257e0a1c57b)) + +### Documentation + +* docs(procesador): add pattern for named processor (#1096) ([`dd1e63c`](https://github.com/taskforcesh/bullmq/commit/dd1e63c623a6a1958ff8de983adc668e452aed52)) + +### Fix + +* fix(connection): throw error when Upstash host is provided (#1098) fixes #1087 ([`5156d0a`](https://github.com/taskforcesh/bullmq/commit/5156d0a4812d8c649a3b41bd98e3e0efb41d0491)) + + +## v1.74.2 (2022-02-23) + +### Chore + +* chore(release): 1.74.2 [skip ci] + +## [1.74.2](https://github.com/taskforcesh/bullmq/compare/v1.74.1...v1.74.2) (2022-02-23) + +### Bug Fixes + +* **move-to-finished:** increment attemptsMade when moving job to active ([#1095](https://github.com/taskforcesh/bullmq/issues/1095)) fixes [#1094](https://github.com/taskforcesh/bullmq/issues/1094) ([321b0e1](https://github.com/taskforcesh/bullmq/commit/321b0e1d515d01c5b3f1ca9f404cd571e3f753b7)) ([`023cf74`](https://github.com/taskforcesh/bullmq/commit/023cf745e92c318b21251e4cedbedf3949c57abe)) + +### Fix + +* fix(move-to-finished): increment attemptsMade when moving job to active (#1095) fixes #1094 ([`321b0e1`](https://github.com/taskforcesh/bullmq/commit/321b0e1d515d01c5b3f1ca9f404cd571e3f753b7)) + +### Unknown + +* GitBook: [#95] No subject ([`edf8bf6`](https://github.com/taskforcesh/bullmq/commit/edf8bf6981eeaf3756ce7ae0f2d0000ca3a8ff7d)) + +* GitBook: [#94] No subject ([`bbdb07b`](https://github.com/taskforcesh/bullmq/commit/bbdb07b947d5a0569719d89339b94237b35292f8)) + +* GitBook: [#93] No subject ([`b9d040a`](https://github.com/taskforcesh/bullmq/commit/b9d040a83d8892bb99760075eec784a707c0cfda)) + +* GitBook: [#92] No subject ([`d19f1f0`](https://github.com/taskforcesh/bullmq/commit/d19f1f05a9757006ada6ea5ad6d2b6058cda0b01)) + + +## v1.74.1 (2022-02-20) + +### Chore + +* chore(release): 1.74.1 [skip ci] + +## [1.74.1](https://github.com/taskforcesh/bullmq/compare/v1.74.0...v1.74.1) (2022-02-20) + +### Bug Fixes + +* **flow:** respect defaultJobOptions from queue opts ([#1080](https://github.com/taskforcesh/bullmq/issues/1080)) fixes [#1034](https://github.com/taskforcesh/bullmq/issues/1034) ([0aca072](https://github.com/taskforcesh/bullmq/commit/0aca072f805302e660b6675fd4097ba893c91eb0)) ([`cf0710c`](https://github.com/taskforcesh/bullmq/commit/cf0710cfe322eb2147f439364b425763b4d5c592)) + +### Documentation + +* docs: add queueName doc ([`e52ca41`](https://github.com/taskforcesh/bullmq/commit/e52ca4109eacfec6eb0cddae01952051222ca8eb)) + +* docs: add queueName doc ([`9c6b331`](https://github.com/taskforcesh/bullmq/commit/9c6b331a84827dc5bdc5a4fd45e89653dfa92079)) + +### Fix + +* fix(flow): respect defaultJobOptions from queue opts (#1080) fixes #1034 + + + +* docs(flow): add descriptions of opts param ([`0aca072`](https://github.com/taskforcesh/bullmq/commit/0aca072f805302e660b6675fd4097ba893c91eb0)) + +### Refactor + +* refactor(utils): asyncSend ([`3b3ff30`](https://github.com/taskforcesh/bullmq/commit/3b3ff300f7fa732ea831fe81440c7456518486a4)) + +### Unknown + +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`6c2dbb1`](https://github.com/taskforcesh/bullmq/commit/6c2dbb12ebb666bea3de5aed45c413471eee4f4f)) + + +## v1.74.0 (2022-02-19) + +### Chore + +* chore(release): 1.74.0 [skip ci] + +# [1.74.0](https://github.com/taskforcesh/bullmq/compare/v1.73.0...v1.74.0) (2022-02-19) + +### Features + +* **retry-jobs:** pass timestamp as option ([#1054](https://github.com/taskforcesh/bullmq/issues/1054)) ([1522359](https://github.com/taskforcesh/bullmq/commit/15223590b235f749af9cb229fc784760d4b3add2)) ([`2bf08ef`](https://github.com/taskforcesh/bullmq/commit/2bf08efda8a938e86be2d09ae2dbbdd81b8181b7)) + +### Documentation + +* docs: add obliterateOpts description (#1086) ([`7f7dc34`](https://github.com/taskforcesh/bullmq/commit/7f7dc34789abc8a7fb59dd79a3170c4fb94c202d)) + +* docs: remove remix from used-by as requested ([`e295ba2`](https://github.com/taskforcesh/bullmq/commit/e295ba2b92e56df8b2bd8e8404b4247dae820673)) + +### Feature + +* feat(retry-jobs): pass timestamp as option (#1054) ([`1522359`](https://github.com/taskforcesh/bullmq/commit/15223590b235f749af9cb229fc784760d4b3add2)) + + +## v1.73.0 (2022-02-16) + +### Chore + +* chore(release): 1.73.0 [skip ci] + +# [1.73.0](https://github.com/taskforcesh/bullmq/compare/v1.72.0...v1.73.0) (2022-02-16) + +### Features + +* **job:** add prefix getter ([#1077](https://github.com/taskforcesh/bullmq/issues/1077)) ([db9ef10](https://github.com/taskforcesh/bullmq/commit/db9ef105a7a524d7502664d52bd9f9c7dfa9477f)) +* **queue-getters:** add getQueueSchedulers ([#1078](https://github.com/taskforcesh/bullmq/issues/1078)) ref [#1075](https://github.com/taskforcesh/bullmq/issues/1075) ([0b3b1c4](https://github.com/taskforcesh/bullmq/commit/0b3b1c4382de34bd68733d162c2fa2ba9417f79c)) ([`19845bd`](https://github.com/taskforcesh/bullmq/commit/19845bd017c3b508aeaa59a50abdf4df0e4dae0f)) + +### Documentation + +* docs(flow): update README.md example description (#1076) ([`ca38bfb`](https://github.com/taskforcesh/bullmq/commit/ca38bfb797ccd37db511d1e02b9a72a42ad4e894)) + +* docs: add logos for some BullMQ users ([`03949b7`](https://github.com/taskforcesh/bullmq/commit/03949b70b17dc767c113b0fe9ffcbe927553e105)) + +### Feature + +* feat(queue-getters): add getQueueSchedulers (#1078) ref #1075 ([`0b3b1c4`](https://github.com/taskforcesh/bullmq/commit/0b3b1c4382de34bd68733d162c2fa2ba9417f79c)) + +* feat(job): add prefix getter (#1077) ([`db9ef10`](https://github.com/taskforcesh/bullmq/commit/db9ef105a7a524d7502664d52bd9f9c7dfa9477f)) + +### Unknown + +* GitBook: [#91] No subject ([`12944e6`](https://github.com/taskforcesh/bullmq/commit/12944e615fcf29a4c25f217d55e2d870b7923c73)) + +* GitBook: [#90] No subject ([`27c9883`](https://github.com/taskforcesh/bullmq/commit/27c9883e7b06252e2903006a9c3efca68e0a3738)) + +* GitBook: [#89] No subject ([`99d21d1`](https://github.com/taskforcesh/bullmq/commit/99d21d19f37924294c941b1959be46379d6fd6e1)) + + +## v1.72.0 (2022-02-15) + +### Chore + +* chore(release): 1.72.0 [skip ci] + +# [1.72.0](https://github.com/taskforcesh/bullmq/compare/v1.71.0...v1.72.0) (2022-02-15) + +### Features + +* **backoff:** validate UnrecoverableError presence ([#1074](https://github.com/taskforcesh/bullmq/issues/1074)) ([1defeac](https://github.com/taskforcesh/bullmq/commit/1defeac3f251a13aad57f3027d8eb8f857e40acb)) ([`efe9bb7`](https://github.com/taskforcesh/bullmq/commit/efe9bb7239d9554407e8d0cf40fe74cae83abea5)) + +### Documentation + +* docs(step-jobs): pattern to wait children when adding children at runtime (#1069) ([`d53a800`](https://github.com/taskforcesh/bullmq/commit/d53a800473ac5556211408d526df92aba686fff1)) + +### Feature + +* feat(backoff): validate UnrecoverableError presence (#1074) ([`1defeac`](https://github.com/taskforcesh/bullmq/commit/1defeac3f251a13aad57f3027d8eb8f857e40acb)) + + +## v1.71.0 (2022-02-14) + +### Chore + +* chore(release): 1.71.0 [skip ci] + +# [1.71.0](https://github.com/taskforcesh/bullmq/compare/v1.70.0...v1.71.0) (2022-02-14) + +### Features + +* **get-job-counts:** add default values ([#1068](https://github.com/taskforcesh/bullmq/issues/1068)) ([1c7f841](https://github.com/taskforcesh/bullmq/commit/1c7f841a52b3ea18fa7878f10986b362ccc6c4fe)) ([`cdb1de2`](https://github.com/taskforcesh/bullmq/commit/cdb1de2fca81df5b18fb3312d821bc1cdae19066)) + +### Feature + +* feat(get-job-counts): add default values (#1068) ([`1c7f841`](https://github.com/taskforcesh/bullmq/commit/1c7f841a52b3ea18fa7878f10986b362ccc6c4fe)) + +### Refactor + +* refactor: extract trimEvents as include (#1071) ([`6ded7ba`](https://github.com/taskforcesh/bullmq/commit/6ded7bae22b0f369ebb68960d48780f547d43346)) + + +## v1.70.0 (2022-02-11) + +### Chore + +* chore(release): 1.70.0 [skip ci] + +# [1.70.0](https://github.com/taskforcesh/bullmq/compare/v1.69.1...v1.70.0) (2022-02-11) + +### Features + +* **sandbox:** pass parent property ([#1065](https://github.com/taskforcesh/bullmq/issues/1065)) ([1fd33f6](https://github.com/taskforcesh/bullmq/commit/1fd33f6fd3a3af17753de8c4d48e14ef86c7409c)) ([`9cd593f`](https://github.com/taskforcesh/bullmq/commit/9cd593fefc5b08fa13de7d4119327db7202fdd4b)) + +### Feature + +* feat(sandbox): pass parent property (#1065) ([`1fd33f6`](https://github.com/taskforcesh/bullmq/commit/1fd33f6fd3a3af17753de8c4d48e14ef86c7409c)) + + +## v1.69.1 (2022-02-10) + +### Chore + +* chore(release): 1.69.1 [skip ci] + +## [1.69.1](https://github.com/taskforcesh/bullmq/compare/v1.69.0...v1.69.1) (2022-02-10) + +### Bug Fixes + +* **move-to-finished:** validate lock first ([#1064](https://github.com/taskforcesh/bullmq/issues/1064)) ([9da1b29](https://github.com/taskforcesh/bullmq/commit/9da1b29486c6c6e2b097ec2f6107494a36525495)) ([`8216ce2`](https://github.com/taskforcesh/bullmq/commit/8216ce26c28e79307dc0c4eb3f79c0eb582260b8)) + +### Fix + +* fix(move-to-finished): validate lock first (#1064) ([`9da1b29`](https://github.com/taskforcesh/bullmq/commit/9da1b29486c6c6e2b097ec2f6107494a36525495)) + +### Refactor + +* refactor(move-to-finished): reuse removeJob include (#1061) ([`e48aec6`](https://github.com/taskforcesh/bullmq/commit/e48aec6ced3989995a78c581222c9798a50087eb)) + + +## v1.69.0 (2022-02-08) + +### Chore + +* chore(release): 1.69.0 [skip ci] + +# [1.69.0](https://github.com/taskforcesh/bullmq/compare/v1.68.4...v1.69.0) (2022-02-08) + +### Features + +* **job:** pass queueName into sandbox ([#1053](https://github.com/taskforcesh/bullmq/issues/1053)) fixes [#1050](https://github.com/taskforcesh/bullmq/issues/1050) ref [#1051](https://github.com/taskforcesh/bullmq/issues/1051) ([12bb19c](https://github.com/taskforcesh/bullmq/commit/12bb19c1586d8755b973a80be97f407630827d4f)) ([`64e01fb`](https://github.com/taskforcesh/bullmq/commit/64e01fbbe9e76c663477ef18e84a37dfd90e667a)) + +### Feature + +* feat(job): pass queueName into sandbox (#1053) fixes #1050 ref #1051 ([`12bb19c`](https://github.com/taskforcesh/bullmq/commit/12bb19c1586d8755b973a80be97f407630827d4f)) + + +## v1.68.4 (2022-02-05) + +### Chore + +* chore(release): 1.68.4 [skip ci] + +## [1.68.4](https://github.com/taskforcesh/bullmq/compare/v1.68.3...v1.68.4) (2022-02-05) + +### Bug Fixes + +* **clean:** consider checking parent jobs when cleaning ([#1048](https://github.com/taskforcesh/bullmq/issues/1048)) ([0708a24](https://github.com/taskforcesh/bullmq/commit/0708a24c7f4cb6d1cda776ed983d3f20fc3261f1)) ([`8fc4b7e`](https://github.com/taskforcesh/bullmq/commit/8fc4b7e358d8188983eb7c4a714c57d80be2b9b4)) + +### Fix + +* fix(clean): consider checking parent jobs when cleaning (#1048) ([`0708a24`](https://github.com/taskforcesh/bullmq/commit/0708a24c7f4cb6d1cda776ed983d3f20fc3261f1)) + +### Refactor + +* refactor(retry-jobs): create getZSetItems include script (#1052) ([`5ab8525`](https://github.com/taskforcesh/bullmq/commit/5ab85256d1b4e1fad75c86626f03864be0f3cd30)) + + +## v1.68.3 (2022-02-04) + +### Chore + +* chore(release): 1.68.3 [skip ci] + +## [1.68.3](https://github.com/taskforcesh/bullmq/compare/v1.68.2...v1.68.3) (2022-02-04) + +### Bug Fixes + +* **drain:** delete priority queueKey ([#1049](https://github.com/taskforcesh/bullmq/issues/1049)) ([2e6129a](https://github.com/taskforcesh/bullmq/commit/2e6129a4a08783eeafa2f0b69c10ac810f53d085)) ([`7685091`](https://github.com/taskforcesh/bullmq/commit/76850916ceb3c693b2c7e32549ccd9dde6d374d9)) + +### Fix + +* fix(drain): delete priority queueKey (#1049) ([`2e6129a`](https://github.com/taskforcesh/bullmq/commit/2e6129a4a08783eeafa2f0b69c10ac810f53d085)) + + +## v1.68.2 (2022-02-03) + +### Chore + +* chore(release): 1.68.2 [skip ci] + +## [1.68.2](https://github.com/taskforcesh/bullmq/compare/v1.68.1...v1.68.2) (2022-02-03) + +### Performance Improvements + +* **remove-parent-dependency:** do not emit wait event in hard deletions ([#1045](https://github.com/taskforcesh/bullmq/issues/1045)) ([4069821](https://github.com/taskforcesh/bullmq/commit/40698218d13a880615f832a9926f0f057b1c33f9)) ([`dfc01bb`](https://github.com/taskforcesh/bullmq/commit/dfc01bb3bedbcc676ffa2f40381477c51b2fd956)) + +### Documentation + +* docs(process-step-jobs): add new pattern (#1044) ([`e988cf5`](https://github.com/taskforcesh/bullmq/commit/e988cf5589783cf3ba7b4785d8b63df632c0fe37)) + +* docs(flow-job): add description into FlowOpts (#1047) ([`734f5fe`](https://github.com/taskforcesh/bullmq/commit/734f5fe8257a29b7790fa848173f2a1a35cbe605)) + +* docs(worker): specify error parameter in failed event (#1043) fixes #1038 ([`42114f5`](https://github.com/taskforcesh/bullmq/commit/42114f53058229e24127e0b649f4a7ec5a847b01)) + +* docs(wait-until-finished): update docs to match behavior (#1033) ref #1031 ([`d3e0d09`](https://github.com/taskforcesh/bullmq/commit/d3e0d09b6147940eb9074c9ee0f53bc3e76670a6)) + +### Performance + +* perf(remove-parent-dependency): do not emit wait event in hard deletions (#1045) ([`4069821`](https://github.com/taskforcesh/bullmq/commit/40698218d13a880615f832a9926f0f057b1c33f9)) + + +## v1.68.1 (2022-02-01) + +### Chore + +* chore(release): 1.68.1 [skip ci] + +## [1.68.1](https://github.com/taskforcesh/bullmq/compare/v1.68.0...v1.68.1) (2022-02-01) + +### Bug Fixes + +* **update:** throw error when missing job key ([#1042](https://github.com/taskforcesh/bullmq/issues/1042)) ([a00ae5c](https://github.com/taskforcesh/bullmq/commit/a00ae5c9b3f6d51cb0229adca29d13d932fc5601)) ([`2c2da6f`](https://github.com/taskforcesh/bullmq/commit/2c2da6ffa0744447f7cad9760cc0ff7f7d13c0e7)) + +### Fix + +* fix(update): throw error when missing job key (#1042) ([`a00ae5c`](https://github.com/taskforcesh/bullmq/commit/a00ae5c9b3f6d51cb0229adca29d13d932fc5601)) + + +## v1.68.0 (2022-01-29) + +### Chore + +* chore(release): 1.68.0 [skip ci] + +# [1.68.0](https://github.com/taskforcesh/bullmq/compare/v1.67.3...v1.68.0) (2022-01-29) + +### Features + +* **queue:** add retryJobs method for failed jobs ([#1024](https://github.com/taskforcesh/bullmq/issues/1024)) ([310a730](https://github.com/taskforcesh/bullmq/commit/310a730ed322501cc19cdd5cf5244bc8eee6fee2)) + +### Performance Improvements + +* **lua:** call del command with multiple keys ([#1035](https://github.com/taskforcesh/bullmq/issues/1035)) ([9cfaab8](https://github.com/taskforcesh/bullmq/commit/9cfaab8965d0c9f92460d31d6c3083839c36447f)) ([`317c095`](https://github.com/taskforcesh/bullmq/commit/317c0953043e3eb2242eb330d8e8e2071c131c37)) + +### Feature + +* feat(queue): add retryJobs method for failed jobs (#1024) ([`310a730`](https://github.com/taskforcesh/bullmq/commit/310a730ed322501cc19cdd5cf5244bc8eee6fee2)) + +### Performance + +* perf(lua): call del command with multiple keys (#1035) ([`9cfaab8`](https://github.com/taskforcesh/bullmq/commit/9cfaab8965d0c9f92460d31d6c3083839c36447f)) + + +## v1.67.3 (2022-01-28) + +### Chore + +* chore(release): 1.67.3 [skip ci] + +## [1.67.3](https://github.com/taskforcesh/bullmq/compare/v1.67.2...v1.67.3) (2022-01-28) + +### Bug Fixes + +* **drain:** consider checking parent jobs when draining ([#992](https://github.com/taskforcesh/bullmq/issues/992)) ([81b7221](https://github.com/taskforcesh/bullmq/commit/81b72213a9ff31d6b297825391de77557598ebd1)) ([`e45a0f7`](https://github.com/taskforcesh/bullmq/commit/e45a0f7e18b28385022eaafd678fbe5edb82eb4f)) + +### Fix + +* fix(drain): consider checking parent jobs when draining (#992) ([`81b7221`](https://github.com/taskforcesh/bullmq/commit/81b72213a9ff31d6b297825391de77557598ebd1)) + + +## v1.67.2 (2022-01-28) + +### Chore + +* chore(release): 1.67.2 [skip ci] + +## [1.67.2](https://github.com/taskforcesh/bullmq/compare/v1.67.1...v1.67.2) (2022-01-28) + +### Bug Fixes + +* **repeat:** consider immediately option with cron ([#1030](https://github.com/taskforcesh/bullmq/issues/1030)) fixes [#1020](https://github.com/taskforcesh/bullmq/issues/1020) ([b9e7488](https://github.com/taskforcesh/bullmq/commit/b9e748870385a88b2384df40f50df3144c11d7e0)) ([`e55ff35`](https://github.com/taskforcesh/bullmq/commit/e55ff358ca23bb4ea3d70bfb136feb27be3fe79c)) + +### Fix + +* fix(repeat): consider immediately option with cron (#1030) fixes #1020 ([`b9e7488`](https://github.com/taskforcesh/bullmq/commit/b9e748870385a88b2384df40f50df3144c11d7e0)) + +### Test + +* test: pass shared connection into Queue in test case (#1029) ([`da587c2`](https://github.com/taskforcesh/bullmq/commit/da587c2844763a5e7035f799541ce0d6e09aa296)) + + +## v1.67.1 (2022-01-27) + +### Chore + +* chore(release): 1.67.1 [skip ci] + +## [1.67.1](https://github.com/taskforcesh/bullmq/compare/v1.67.0...v1.67.1) (2022-01-27) + +### Bug Fixes + +* **retry:** pass state in error message ([#1027](https://github.com/taskforcesh/bullmq/issues/1027)) ([c646a45](https://github.com/taskforcesh/bullmq/commit/c646a45377fdfaff340185d1f7bedceb80c214c2)) + +### Performance Improvements + +* **retry:** delete props in retryJob lua script ([#1016](https://github.com/taskforcesh/bullmq/issues/1016)) ([547cedd](https://github.com/taskforcesh/bullmq/commit/547cedd5ecd30c9a73d37e4053b9e518cb3fbe53)) ([`a440be9`](https://github.com/taskforcesh/bullmq/commit/a440be95518ebf037a5879decad282249e651180)) + +### Fix + +* fix(retry): pass state in error message (#1027) ([`c646a45`](https://github.com/taskforcesh/bullmq/commit/c646a45377fdfaff340185d1f7bedceb80c214c2)) + +### Performance + +* perf(retry): delete props in retryJob lua script (#1016) ([`547cedd`](https://github.com/taskforcesh/bullmq/commit/547cedd5ecd30c9a73d37e4053b9e518cb3fbe53)) + + +## v1.67.0 (2022-01-26) + +### Chore + +* chore(release): 1.67.0 [skip ci] + +# [1.67.0](https://github.com/taskforcesh/bullmq/compare/v1.66.1...v1.67.0) (2022-01-26) + +### Features + +* add support for removeOn based on time ([6c4ac75](https://github.com/taskforcesh/bullmq/commit/6c4ac75bb3ac239cc83ef6144d69c04b2bba1311)) ([`8c5fcea`](https://github.com/taskforcesh/bullmq/commit/8c5fcea765682e7d3d3e189a89217ed5d7838da8)) + +* chore: move helper close to tests ([`4dca8ed`](https://github.com/taskforcesh/bullmq/commit/4dca8ed5f3dd0e8f3ac79c80f32cbc1628c04f79)) + +### Feature + +* feat: add support for removeOn based on time ([`6c4ac75`](https://github.com/taskforcesh/bullmq/commit/6c4ac75bb3ac239cc83ef6144d69c04b2bba1311)) + +### Test + +* test: skip compat tests as they are deprecated ([`17fee4e`](https://github.com/taskforcesh/bullmq/commit/17fee4e3a16535ea7556fdb2e242c6cb36a56843)) + + +## v1.66.1 (2022-01-25) + +### Chore + +* chore(release): 1.66.1 [skip ci] + +## [1.66.1](https://github.com/taskforcesh/bullmq/compare/v1.66.0...v1.66.1) (2022-01-25) + +### Bug Fixes + +* **job:** increase attemptsMade when moving job to active ([#1009](https://github.com/taskforcesh/bullmq/issues/1009)) fixes [#1002](https://github.com/taskforcesh/bullmq/issues/1002) ([0974ae0](https://github.com/taskforcesh/bullmq/commit/0974ae0ff6db73c223be4b18fb2aab53b6a23c88)) ([`30a9bc6`](https://github.com/taskforcesh/bullmq/commit/30a9bc6c3b719c469396c80f14e8249d7e7ce85b)) + +* chore(deps): bump node-fetch from 2.6.1 to 2.6.7 (#1014) ([`07735a0`](https://github.com/taskforcesh/bullmq/commit/07735a01b090c435e3e9ed27a3c41957632545ba)) + +### Fix + +* fix(job): increase attemptsMade when moving job to active (#1009) fixes #1002 ([`0974ae0`](https://github.com/taskforcesh/bullmq/commit/0974ae0ff6db73c223be4b18fb2aab53b6a23c88)) + + +## v1.66.0 (2022-01-23) + +### Chore + +* chore(release): 1.66.0 [skip ci] + +# [1.66.0](https://github.com/taskforcesh/bullmq/compare/v1.65.1...v1.66.0) (2022-01-23) + +### Features + +* **queue-events:** add retries-exhausted event ([#1010](https://github.com/taskforcesh/bullmq/issues/1010)) ([e476f35](https://github.com/taskforcesh/bullmq/commit/e476f35f5c3f9b1baf2bbc3d46712b8ba597f73c)) ([`9945a03`](https://github.com/taskforcesh/bullmq/commit/9945a03b0b3673c1cf981573b2b8669f0e4026c5)) + +### Feature + +* feat(queue-events): add retries-exhausted event (#1010) ([`e476f35`](https://github.com/taskforcesh/bullmq/commit/e476f35f5c3f9b1baf2bbc3d46712b8ba597f73c)) + + +## v1.65.1 (2022-01-21) + +### Chore + +* chore(release): 1.65.1 [skip ci] + +## [1.65.1](https://github.com/taskforcesh/bullmq/compare/v1.65.0...v1.65.1) (2022-01-21) + +### Bug Fixes + +* dont loop through empty modules paths ([#1013](https://github.com/taskforcesh/bullmq/issues/1013)) fixes [#1012](https://github.com/taskforcesh/bullmq/issues/1012) ([86e84df](https://github.com/taskforcesh/bullmq/commit/86e84df933c2662380b00a11b5f4000f2618d218)) ([`3677295`](https://github.com/taskforcesh/bullmq/commit/36772957fcf865e8fd7dba92d594f8800c4b1e6f)) + +### Fix + +* fix: dont loop through empty modules paths (#1013) fixes #1012 ([`86e84df`](https://github.com/taskforcesh/bullmq/commit/86e84df933c2662380b00a11b5f4000f2618d218)) + + +## v1.65.0 (2022-01-21) + +### Chore + +* chore(release): 1.65.0 [skip ci] + +# [1.65.0](https://github.com/taskforcesh/bullmq/compare/v1.64.4...v1.65.0) (2022-01-21) + +### Features + +* **queue:** add JobType and JobState unions for better typing ([#1011](https://github.com/taskforcesh/bullmq/issues/1011)) ([3b9b79d](https://github.com/taskforcesh/bullmq/commit/3b9b79dbdd754ab66c3948e7e16380f2d5513262)) ([`7f0245d`](https://github.com/taskforcesh/bullmq/commit/7f0245dce512e30e33559df219af3c227a6228e4)) + +* chore(deps): bump trim-off-newlines from 1.0.1 to 1.0.3 (#1008) ([`2dfb7ae`](https://github.com/taskforcesh/bullmq/commit/2dfb7aef39c0f7699a030298a377658bb9acda6b)) + +### Feature + +* feat(queue): add JobType and JobState unions for better typing (#1011) ([`3b9b79d`](https://github.com/taskforcesh/bullmq/commit/3b9b79dbdd754ab66c3948e7e16380f2d5513262)) + + +## v1.64.4 (2022-01-19) + +### Chore + +* chore(release): 1.64.4 [skip ci] + +## [1.64.4](https://github.com/taskforcesh/bullmq/compare/v1.64.3...v1.64.4) (2022-01-19) + +### Bug Fixes + +* **queue:** use 0 as initial value for getJobCountByTypes reducer ([#1005](https://github.com/taskforcesh/bullmq/issues/1005)) ([f0e23ef](https://github.com/taskforcesh/bullmq/commit/f0e23ef01b97d36c775db0bf8c9dd2f63f6cb194)) ([`43ea8c5`](https://github.com/taskforcesh/bullmq/commit/43ea8c5a6a1cff364c00e3a0a1bc9dae92ab469f)) + +### Ci + +* ci(redis): run tests in different redis versions (#999) ([`8c22da5`](https://github.com/taskforcesh/bullmq/commit/8c22da5c1225ba090ab0f7af063b05b1f69c69ce)) + +### Documentation + +* docs(job): add params docs in waitUntilFinished (#1000) ref #996 ([`32e7948`](https://github.com/taskforcesh/bullmq/commit/32e7948408f6e12bfe913db1d7c3be7cabb0a5ef)) + +### Fix + +* fix(queue): use 0 as initial value for getJobCountByTypes reducer (#1005) ([`f0e23ef`](https://github.com/taskforcesh/bullmq/commit/f0e23ef01b97d36c775db0bf8c9dd2f63f6cb194)) + +### Unknown + +* GitBook: [#88] No subject ([`a565666`](https://github.com/taskforcesh/bullmq/commit/a565666f199b47dfb92216334646e8ea68f590ee)) + +* GitBook: [#87] No subject ([`92f9681`](https://github.com/taskforcesh/bullmq/commit/92f968198274f97406eaa4324f65dc945ba8fb12)) + +* GitBook: [#86] No subject ([`8ce484a`](https://github.com/taskforcesh/bullmq/commit/8ce484a58000d1ba5036806b0f6968f96ffa1170)) + + +## v1.64.3 (2022-01-17) + +### Chore + +* chore(release): 1.64.3 [skip ci] + +## [1.64.3](https://github.com/taskforcesh/bullmq/compare/v1.64.2...v1.64.3) (2022-01-17) + +### Bug Fixes + +* **worker:** blockTime must be integer on older Redis ([6fedc0a](https://github.com/taskforcesh/bullmq/commit/6fedc0a03bdb217ef0dbae60d49fccb0f2a5dbdb)) ([`70001de`](https://github.com/taskforcesh/bullmq/commit/70001de2c4c039bf9448a5cc25037f517fd25915)) + +### Documentation + +* docs(readme): add Bullmq-Pro in comparison table (#993) ([`9d35cb4`](https://github.com/taskforcesh/bullmq/commit/9d35cb49ac6f4172f13832e136fc68cd22426491)) + +### Fix + +* fix(worker): blockTime must be integer on older Redis ([`6fedc0a`](https://github.com/taskforcesh/bullmq/commit/6fedc0a03bdb217ef0dbae60d49fccb0f2a5dbdb)) + + +## v1.64.2 (2022-01-14) + +### Chore + +* chore(release): 1.64.2 [skip ci] + +## [1.64.2](https://github.com/taskforcesh/bullmq/compare/v1.64.1...v1.64.2) (2022-01-14) + +### Bug Fixes + +* **remove-job:** consider removing parent dependency key in lua scripts ([#990](https://github.com/taskforcesh/bullmq/issues/990)) ([661abf0](https://github.com/taskforcesh/bullmq/commit/661abf0921e663c9ea2fa7d59c12da35950637dc)) ([`1791390`](https://github.com/taskforcesh/bullmq/commit/17913908c816cfa480a34a80bb13eb16db455168)) + +### Fix + +* fix(remove-job): consider removing parent dependency key in lua scripts (#990) ([`661abf0`](https://github.com/taskforcesh/bullmq/commit/661abf0921e663c9ea2fa7d59c12da35950637dc)) + + +## v1.64.1 (2022-01-14) + +### Chore + +* chore(release): 1.64.1 [skip ci] + +## [1.64.1](https://github.com/taskforcesh/bullmq/compare/v1.64.0...v1.64.1) (2022-01-14) + +### Bug Fixes + +* **sandbox:** exit uncaughtException instead of throwing error ([013d6a5](https://github.com/taskforcesh/bullmq/commit/013d6a5ee0c70266ae740abfa596ca9e506de71b)) ([`aea20b4`](https://github.com/taskforcesh/bullmq/commit/aea20b48af275a2ab3fb9b3f3234af8ca4ce76bc)) + +* chore: update docker-compose config (#986) ([`21c5a51`](https://github.com/taskforcesh/bullmq/commit/21c5a51680527fea0845f87151bca34054ce29af)) + +### Fix + +* fix(sandbox): exit uncaughtException instead of throwing error ([`013d6a5`](https://github.com/taskforcesh/bullmq/commit/013d6a5ee0c70266ae740abfa596ca9e506de71b)) + +### Unknown + +* GitBook: [#85] No subject ([`3cae7c3`](https://github.com/taskforcesh/bullmq/commit/3cae7c3e44be2ca075d0aa6363be79636e607786)) + + +## v1.64.0 (2022-01-07) + +### Chore + +* chore(release): 1.64.0 [skip ci] + +# [1.64.0](https://github.com/taskforcesh/bullmq/compare/v1.63.3...v1.64.0) (2022-01-07) + +### Features + +* **sanboxed-process:** support .cjs files ([#984](https://github.com/taskforcesh/bullmq/issues/984)) ([531e4de](https://github.com/taskforcesh/bullmq/commit/531e4de1525f2cf322e0b97f5537ed43276ff72b)) ([`b918676`](https://github.com/taskforcesh/bullmq/commit/b91867653564a97a5ced04f36dac1a4e1c96e21b)) + +### Feature + +* feat(sanboxed-process): support .cjs files (#984) ([`531e4de`](https://github.com/taskforcesh/bullmq/commit/531e4de1525f2cf322e0b97f5537ed43276ff72b)) + + +## v1.63.3 (2022-01-06) + +### Chore + +* chore(release): 1.63.3 [skip ci] + +## [1.63.3](https://github.com/taskforcesh/bullmq/compare/v1.63.2...v1.63.3) (2022-01-06) + +### Bug Fixes + +* **job:** throw error when delay and repeat are provided together ([#983](https://github.com/taskforcesh/bullmq/issues/983)) ([07b0082](https://github.com/taskforcesh/bullmq/commit/07b008273ead9360fc43564fa9ff1a7503616ceb)) ([`282a402`](https://github.com/taskforcesh/bullmq/commit/282a4029bc9985056508f83deb5040b830dc3c82)) + +* chore(scripts): add generics in methods (#981) ([`8807b5e`](https://github.com/taskforcesh/bullmq/commit/8807b5eef1114dd866060b1f9571675fc3e1a36d)) + +### Fix + +* fix(job): throw error when delay and repeat are provided together (#983) ([`07b0082`](https://github.com/taskforcesh/bullmq/commit/07b008273ead9360fc43564fa9ff1a7503616ceb)) + + +## v1.63.2 (2022-01-04) + +### Chore + +* chore(release): 1.63.2 [skip ci] + +## [1.63.2](https://github.com/taskforcesh/bullmq/compare/v1.63.1...v1.63.2) (2022-01-04) + +### Bug Fixes + +* **queue:** add missing error event typing ([#979](https://github.com/taskforcesh/bullmq/issues/979)) ([afdaac6](https://github.com/taskforcesh/bullmq/commit/afdaac6b072c7af5973222cc7fb69f3f138f3b0b)) ([`1f3b1cb`](https://github.com/taskforcesh/bullmq/commit/1f3b1cb0fe1857a6cc4581611f8aeda371d04f2e)) + +### Documentation + +* docs: delete duplicated parent-child explanation (#980) ([`9fb8b72`](https://github.com/taskforcesh/bullmq/commit/9fb8b72885bab40e3980418a6367859435397733)) + +### Fix + +* fix(queue): add missing error event typing (#979) ([`afdaac6`](https://github.com/taskforcesh/bullmq/commit/afdaac6b072c7af5973222cc7fb69f3f138f3b0b)) + + +## v1.63.1 (2022-01-04) + +### Chore + +* chore(release): 1.63.1 [skip ci] + +## [1.63.1](https://github.com/taskforcesh/bullmq/compare/v1.63.0...v1.63.1) (2022-01-04) + +### Bug Fixes + +* **update-progress:** throw error if job key is missing ([#978](https://github.com/taskforcesh/bullmq/issues/978)) ref [#977](https://github.com/taskforcesh/bullmq/issues/977) ([b03aaf1](https://github.com/taskforcesh/bullmq/commit/b03aaf10ca694745d143def2129f952b9bac18a6)) ([`1763af8`](https://github.com/taskforcesh/bullmq/commit/1763af8eb35fe5b48cbe1a6a1a066524edb59232)) + +### Fix + +* fix(update-progress): throw error if job key is missing (#978) ref #977 ([`b03aaf1`](https://github.com/taskforcesh/bullmq/commit/b03aaf10ca694745d143def2129f952b9bac18a6)) + + +## v1.63.0 (2021-12-31) + +### Chore + +* chore(release): 1.63.0 [skip ci] + +# [1.63.0](https://github.com/taskforcesh/bullmq/compare/v1.62.0...v1.63.0) (2021-12-31) + +### Features + +* **job:** use generic types for static methods ([#975](https://github.com/taskforcesh/bullmq/issues/975)) ([f78f4d0](https://github.com/taskforcesh/bullmq/commit/f78f4d0f75adb5c73558b3e8cf511db22f972791)) ([`4cfa4f9`](https://github.com/taskforcesh/bullmq/commit/4cfa4f9c0d97a29b89ab342a5f41de5e4e3ecbd2)) + +### Documentation + +* docs(flow): add getFlow into guide structure (#976) ([`db1224a`](https://github.com/taskforcesh/bullmq/commit/db1224a6aa674288b7ad879f53c9e1e063b7e9f7)) + +### Feature + +* feat(job): use generic types for static methods (#975) ([`f78f4d0`](https://github.com/taskforcesh/bullmq/commit/f78f4d0f75adb5c73558b3e8cf511db22f972791)) + +### Refactor + +* refactor: clean some interfaces references (#974) ([`92da59e`](https://github.com/taskforcesh/bullmq/commit/92da59ec7e9932377cb1b6a2ba1422ec50e24158)) + + +## v1.62.0 (2021-12-31) + +### Chore + +* chore(release): 1.62.0 [skip ci] + +# [1.62.0](https://github.com/taskforcesh/bullmq/compare/v1.61.0...v1.62.0) (2021-12-31) + +### Bug Fixes + +* add deprecated tag in progress and Queue3 class ([#973](https://github.com/taskforcesh/bullmq/issues/973)) ([6abdf5b](https://github.com/taskforcesh/bullmq/commit/6abdf5b66717cc8bc8ddb048029f7d9b92509942)) + +### Features + +* **queue:** add better event typing ([#971](https://github.com/taskforcesh/bullmq/issues/971)) ([596fd7b](https://github.com/taskforcesh/bullmq/commit/596fd7b260f2e95607f0eb4ff9553fb35137ec54)) ([`abe3f59`](https://github.com/taskforcesh/bullmq/commit/abe3f594b412c924ae9eb42e450bd2a356df7654)) + +### Feature + +* feat(queue): add better event typing (#971) ([`596fd7b`](https://github.com/taskforcesh/bullmq/commit/596fd7b260f2e95607f0eb4ff9553fb35137ec54)) + +### Fix + +* fix: add deprecated tag in progress and Queue3 class (#973) ([`6abdf5b`](https://github.com/taskforcesh/bullmq/commit/6abdf5b66717cc8bc8ddb048029f7d9b92509942)) + + +## v1.61.0 (2021-12-29) + +### Chore + +* chore(release): 1.61.0 [skip ci] + +# [1.61.0](https://github.com/taskforcesh/bullmq/compare/v1.60.0...v1.61.0) (2021-12-29) + +### Features + +* **queue:** reuse generic typing for jobs ([5c10818](https://github.com/taskforcesh/bullmq/commit/5c10818d90724cccdf510f0358c01233aeac77e4)) +* **worker:** reuse generic typing for jobs ([9adcdb7](https://github.com/taskforcesh/bullmq/commit/9adcdb798b4ee55835123a9f3d04c1397b176dc1)) ([`06176e3`](https://github.com/taskforcesh/bullmq/commit/06176e32579611f06569a9e05a26832c02a0e6f4)) + +### Feature + +* feat(queue): reuse generic typing for jobs ([`5c10818`](https://github.com/taskforcesh/bullmq/commit/5c10818d90724cccdf510f0358c01233aeac77e4)) + +* feat(worker): reuse generic typing for jobs ([`9adcdb7`](https://github.com/taskforcesh/bullmq/commit/9adcdb798b4ee55835123a9f3d04c1397b176dc1)) + + +## v1.60.0 (2021-12-29) + +### Chore + +* chore(release): 1.60.0 [skip ci] + +# [1.60.0](https://github.com/taskforcesh/bullmq/compare/v1.59.4...v1.60.0) (2021-12-29) + +### Features + +* **queue-scheduler:** add better event typing ([#963](https://github.com/taskforcesh/bullmq/issues/963)) ([b23c006](https://github.com/taskforcesh/bullmq/commit/b23c006e2bfce8a0709f0eb8e8739261b68c2f48)) ([`0caa042`](https://github.com/taskforcesh/bullmq/commit/0caa042725325a5b682d9ce53a5346a1131486a2)) + +### Documentation + +* docs(throttle-jobs): fix definition in patterns (#961) fixes #689 ([`e184d4d`](https://github.com/taskforcesh/bullmq/commit/e184d4d88c37f1e9b2d3c4fddf00130556a9f8df)) + +### Feature + +* feat(queue-scheduler): add better event typing (#963) ([`b23c006`](https://github.com/taskforcesh/bullmq/commit/b23c006e2bfce8a0709f0eb8e8739261b68c2f48)) + +### Refactor + +* refactor(get-state): add checkItemInList include (#964) ([`9df25c1`](https://github.com/taskforcesh/bullmq/commit/9df25c1f1310186e0516e0bb02abba527a819480)) + +### Test + +* test(worker): add case when sharing connection (#955) ([`2325ff7`](https://github.com/taskforcesh/bullmq/commit/2325ff791aae19cd98f8d27b645afade07b4c4fc)) + +* test: add next tick into processor (#967) ([`c636528`](https://github.com/taskforcesh/bullmq/commit/c636528d07161ed68ad017a65867aa1c9172c5d5)) + +* test(repeat): call nextTick in processor (#966) ([`2aaae88`](https://github.com/taskforcesh/bullmq/commit/2aaae88b58def78718e13ceea1a3ec9ab069b69b)) + + +## v1.59.4 (2021-12-21) + +### Chore + +* chore(release): 1.59.4 [skip ci] + +## [1.59.4](https://github.com/taskforcesh/bullmq/compare/v1.59.3...v1.59.4) (2021-12-21) + +### Bug Fixes + +* downgrade typescript to 3.9.10 fixes [#917](https://github.com/taskforcesh/bullmq/issues/917) ([#960](https://github.com/taskforcesh/bullmq/issues/960)) ([4e51fe0](https://github.com/taskforcesh/bullmq/commit/4e51fe00751092ee8f521039a3f2b41d881b71ae)) ([`fbecbef`](https://github.com/taskforcesh/bullmq/commit/fbecbef96a2f8b7d037d8ffaca7c0f710be9b518)) + +### Fix + +* fix: downgrade typescript to 3.9.10 fixes #917 (#960) ([`4e51fe0`](https://github.com/taskforcesh/bullmq/commit/4e51fe00751092ee8f521039a3f2b41d881b71ae)) + + +## v1.59.3 (2021-12-21) + +### Chore + +* chore(release): 1.59.3 [skip ci] + +## [1.59.3](https://github.com/taskforcesh/bullmq/compare/v1.59.2...v1.59.3) (2021-12-21) + +### Bug Fixes + +* **worker:** fix undefined moveToActive ([87e8cab](https://github.com/taskforcesh/bullmq/commit/87e8cab16dad6f8bd9e9ec369ef7e79f471180be)) ([`28ccfa9`](https://github.com/taskforcesh/bullmq/commit/28ccfa91f9fac99abd6f2d448d7f2e8d10b78806)) + +### Fix + +* fix(worker): fix undefined moveToActive ([`87e8cab`](https://github.com/taskforcesh/bullmq/commit/87e8cab16dad6f8bd9e9ec369ef7e79f471180be)) + + +## v1.59.2 (2021-12-17) + +### Chore + +* chore(release): 1.59.2 [skip ci] + +## [1.59.2](https://github.com/taskforcesh/bullmq/compare/v1.59.1...v1.59.2) (2021-12-17) + +### Bug Fixes + +* **package:** add jsnext:main prop ([#953](https://github.com/taskforcesh/bullmq/issues/953)) ([1a92bf7](https://github.com/taskforcesh/bullmq/commit/1a92bf7d41860f758841c5a833c1192d9a84a25f)) ([`7a950f5`](https://github.com/taskforcesh/bullmq/commit/7a950f5b336702f79058952c14bb2bf573818158)) + +### Documentation + +* docs: update debounce-jobs.md (#950) ([`424b54a`](https://github.com/taskforcesh/bullmq/commit/424b54af7c549150197a647fe898c67ff9d87aa4)) + +### Fix + +* fix(package): add jsnext:main prop (#953) ([`1a92bf7`](https://github.com/taskforcesh/bullmq/commit/1a92bf7d41860f758841c5a833c1192d9a84a25f)) + + +## v1.59.1 (2021-12-17) + +### Chore + +* chore(release): 1.59.1 [skip ci] + +## [1.59.1](https://github.com/taskforcesh/bullmq/compare/v1.59.0...v1.59.1) (2021-12-17) + +### Bug Fixes + +* copy lua files to correct location ([2be1120](https://github.com/taskforcesh/bullmq/commit/2be1120974692ee57ec00e30d6dbbef670d88a1e)) ([`192f093`](https://github.com/taskforcesh/bullmq/commit/192f093af11f0faf6ae946c4a464059d6e48c015)) + +### Fix + +* fix: copy lua files to correct location ([`2be1120`](https://github.com/taskforcesh/bullmq/commit/2be1120974692ee57ec00e30d6dbbef670d88a1e)) + + +## v1.59.0 (2021-12-17) + +### Chore + +* chore(release): 1.59.0 [skip ci] + +# [1.59.0](https://github.com/taskforcesh/bullmq/compare/v1.58.0...v1.59.0) (2021-12-17) + +### Bug Fixes + +* correct dist path ([067d4c2](https://github.com/taskforcesh/bullmq/commit/067d4c2009b877f8bf6e6145507a41a53e5f7af3)) + +### Features + +* also export bullmq as an ESM ([e97e5b5](https://github.com/taskforcesh/bullmq/commit/e97e5b52b079adf2ed79f7cb61699e40a91e34e8)) ([`0d3a222`](https://github.com/taskforcesh/bullmq/commit/0d3a222859b8b66dbe0aad8c8475b31c4fac93d2)) + +### Feature + +* feat: also export bullmq as an ESM ([`e97e5b5`](https://github.com/taskforcesh/bullmq/commit/e97e5b52b079adf2ed79f7cb61699e40a91e34e8)) + +### Fix + +* fix: correct dist path ([`067d4c2`](https://github.com/taskforcesh/bullmq/commit/067d4c2009b877f8bf6e6145507a41a53e5f7af3)) + + +## v1.58.0 (2021-12-15) + +### Chore + +* chore(release): 1.58.0 [skip ci] + +# [1.58.0](https://github.com/taskforcesh/bullmq/compare/v1.57.4...v1.58.0) (2021-12-15) + +### Features + +* **worker:** add better event typing ([#940](https://github.com/taskforcesh/bullmq/issues/940)) ([a326d4f](https://github.com/taskforcesh/bullmq/commit/a326d4f27e96ffa462a908ac14356d29839ff073)) ([`e2ffaaf`](https://github.com/taskforcesh/bullmq/commit/e2ffaafc54df02e9a9d7d0cd7e110407753c1ba9)) + +### Feature + +* feat(worker): add better event typing (#940) ([`a326d4f`](https://github.com/taskforcesh/bullmq/commit/a326d4f27e96ffa462a908ac14356d29839ff073)) + +### Refactor + +* refactor(repeat): move removeRepeatable to Script (#939) ([`60ed941`](https://github.com/taskforcesh/bullmq/commit/60ed941a69b6de3d29f29214133c542268d41984)) + + +## v1.57.4 (2021-12-14) + +### Chore + +* chore(release): 1.57.4 [skip ci] + +## [1.57.4](https://github.com/taskforcesh/bullmq/compare/v1.57.3...v1.57.4) (2021-12-14) + +### Bug Fixes + +* **move-to-active:** add try catch in moveToActive call ([#933](https://github.com/taskforcesh/bullmq/issues/933)) ([bab45b0](https://github.com/taskforcesh/bullmq/commit/bab45b05d08c625557e2df65921e12f48081d39c)) +* **redis-connection:** consider cluster redisOptions config ([#934](https://github.com/taskforcesh/bullmq/issues/934)) ([5130f63](https://github.com/taskforcesh/bullmq/commit/5130f63ad969efa9649ab8f9abf36a72e8f553f4)) ([`9d2d62c`](https://github.com/taskforcesh/bullmq/commit/9d2d62c2c33b981ac5071d7122cd50da1d272d5c)) + +* chore: delete extra test directory (#931) ([`9ccc200`](https://github.com/taskforcesh/bullmq/commit/9ccc200bf26a60523cda85871cf1743fc288cb66)) + +### Fix + +* fix(redis-connection): consider cluster redisOptions config (#934) ([`5130f63`](https://github.com/taskforcesh/bullmq/commit/5130f63ad969efa9649ab8f9abf36a72e8f553f4)) + +* fix(move-to-active): add try catch in moveToActive call (#933) ([`bab45b0`](https://github.com/taskforcesh/bullmq/commit/bab45b05d08c625557e2df65921e12f48081d39c)) + + +## v1.57.3 (2021-12-14) + +### Chore + +* chore(release): 1.57.3 [skip ci] + +## [1.57.3](https://github.com/taskforcesh/bullmq/compare/v1.57.2...v1.57.3) (2021-12-14) + +### Bug Fixes + +* remove debug console.error ([#932](https://github.com/taskforcesh/bullmq/issues/932)) ([271aac3](https://github.com/taskforcesh/bullmq/commit/271aac3417bc7f76ac02435b456552677b2847db)) ([`cf57730`](https://github.com/taskforcesh/bullmq/commit/cf57730ae41fb9d6185a78ec47f4ae95aa8dcd88)) + +### Fix + +* fix: remove debug console.error (#932) ([`271aac3`](https://github.com/taskforcesh/bullmq/commit/271aac3417bc7f76ac02435b456552677b2847db)) + +### Unknown + +* GitBook: [#83] docs: add initial documentation for groups rate limiting ([`4b59d05`](https://github.com/taskforcesh/bullmq/commit/4b59d05276a6c1933097542b22fd028b1a7c8a40)) + + +## v1.57.2 (2021-12-11) + +### Chore + +* chore(release): 1.57.2 [skip ci] + +## [1.57.2](https://github.com/taskforcesh/bullmq/compare/v1.57.1...v1.57.2) (2021-12-11) + +### Bug Fixes + +* **connection:** check instance options to console log deprecation message ([#927](https://github.com/taskforcesh/bullmq/issues/927)) ([fc1e2b9](https://github.com/taskforcesh/bullmq/commit/fc1e2b9f3f20db53f9dc7ecdfa4644f02acc9f83)) + +### Performance Improvements + +* **add-job:** save parent data as json ([#859](https://github.com/taskforcesh/bullmq/issues/859)) ([556d4ee](https://github.com/taskforcesh/bullmq/commit/556d4ee427090f60270945a7fd438e2595bb43e9)) ([`d9fd74f`](https://github.com/taskforcesh/bullmq/commit/d9fd74f8eae499ce2aeb02c7a0e5fcae5e4795bd)) + +### Fix + +* fix(connection): check instance options to console log deprecation message (#927) ([`fc1e2b9`](https://github.com/taskforcesh/bullmq/commit/fc1e2b9f3f20db53f9dc7ecdfa4644f02acc9f83)) + +### Performance + +* perf(add-job): save parent data as json (#859) ([`556d4ee`](https://github.com/taskforcesh/bullmq/commit/556d4ee427090f60270945a7fd438e2595bb43e9)) + + +## v1.57.1 (2021-12-11) + +### Chore + +* chore(release): 1.57.1 [skip ci] + +## [1.57.1](https://github.com/taskforcesh/bullmq/compare/v1.57.0...v1.57.1) (2021-12-11) + +### Bug Fixes + +* **worker:** better handling of block timeout ([be4c933](https://github.com/taskforcesh/bullmq/commit/be4c933ae0a7a790d24a081b2ed4e7e1c0216e47)) ([`8aa6e36`](https://github.com/taskforcesh/bullmq/commit/8aa6e36a806f51903620d397f821ef55763c6ff4)) + +### Fix + +* fix(worker): better handling of block timeout ([`be4c933`](https://github.com/taskforcesh/bullmq/commit/be4c933ae0a7a790d24a081b2ed4e7e1c0216e47)) + + +## v1.57.0 (2021-12-08) + +### Chore + +* chore(release): 1.57.0 [skip ci] + +# [1.57.0](https://github.com/taskforcesh/bullmq/compare/v1.56.0...v1.57.0) (2021-12-08) + +### Features + +* **queue-events:** add better event typing ([#919](https://github.com/taskforcesh/bullmq/issues/919)) ([e980080](https://github.com/taskforcesh/bullmq/commit/e980080767bc56ae09a5c5cf33728a85a023bb42)) ([`7ea381b`](https://github.com/taskforcesh/bullmq/commit/7ea381b2936b93d86752e5f4b773fa04b3d8a7cd)) + +### Feature + +* feat(queue-events): add better event typing (#919) ([`e980080`](https://github.com/taskforcesh/bullmq/commit/e980080767bc56ae09a5c5cf33728a85a023bb42)) + +### Unknown + +* GitBook: [#82] docs: fixe import for bullmq-pro ([`efb627b`](https://github.com/taskforcesh/bullmq/commit/efb627b4061b386cbfddecdf638a6e73d3a2820a)) + + +## v1.56.0 (2021-12-06) + +### Chore + +* chore(release): 1.56.0 [skip ci] + +# [1.56.0](https://github.com/taskforcesh/bullmq/compare/v1.55.1...v1.56.0) (2021-12-06) + +### Bug Fixes + +* emit drain event if no jobs left when completing ([9ad78a9](https://github.com/taskforcesh/bullmq/commit/9ad78a91c0a4a74cf84bd77d351d98195104f0b6)) +* **worker:** use client for setting worker name ([af65c2c](https://github.com/taskforcesh/bullmq/commit/af65c2cd0d3fb232c617b018d4991f3276db11ea)) + +### Features + +* **worker:** make moveToActive protected ([d2897ee](https://github.com/taskforcesh/bullmq/commit/d2897ee7bbf4aee5251ac4fb28705f2bebbe7bfe)) ([`bf37a32`](https://github.com/taskforcesh/bullmq/commit/bf37a324273dd1a2f606ff2dcb08c6166cc86ae9)) + +* chore: refactor moveToActive ([`e74648f`](https://github.com/taskforcesh/bullmq/commit/e74648f22e3768474546f201050273f77bc5ea68)) + +* chore: move initMapping to constructor ([`4f35cee`](https://github.com/taskforcesh/bullmq/commit/4f35cee25e1767aa2134a0309558a09223d2c818)) + +* chore: add tests ([`dd8332a`](https://github.com/taskforcesh/bullmq/commit/dd8332a894915c2421f289fc7e851455c75cccdb)) + +* chore: remove bullmq-tests submodule ([`7ac95d2`](https://github.com/taskforcesh/bullmq/commit/7ac95d2d189157a8bc74889a9c6edc814ca69879)) + +### Feature + +* feat(worker): make moveToActive protected ([`d2897ee`](https://github.com/taskforcesh/bullmq/commit/d2897ee7bbf4aee5251ac4fb28705f2bebbe7bfe)) + +### Fix + +* fix(worker): use client for setting worker name ([`af65c2c`](https://github.com/taskforcesh/bullmq/commit/af65c2cd0d3fb232c617b018d4991f3276db11ea)) + +* fix: emit drain event if no jobs left when completing ([`9ad78a9`](https://github.com/taskforcesh/bullmq/commit/9ad78a91c0a4a74cf84bd77d351d98195104f0b6)) + +### Test + +* test: fix deprecation warnings ([`ed16ac3`](https://github.com/taskforcesh/bullmq/commit/ed16ac3bfc5f78a1d5b4fdabccf6ec2c8db31d7e)) + + +## v1.55.1 (2021-12-03) + +### Chore + +* chore(release): 1.55.1 [skip ci] + +## [1.55.1](https://github.com/taskforcesh/bullmq/compare/v1.55.0...v1.55.1) (2021-12-03) + +### Bug Fixes + +* **worker:** always try to move to active after waiting for job ([#914](https://github.com/taskforcesh/bullmq/issues/914)) ([97b7084](https://github.com/taskforcesh/bullmq/commit/97b708451bf4ce14a461a50f8a24d14b0e40dd4b)) ([`5327a96`](https://github.com/taskforcesh/bullmq/commit/5327a9618932ffe5ffc632c13c73b8c26302074c)) + +* chore: add codeql-analysis ([`f6721dc`](https://github.com/taskforcesh/bullmq/commit/f6721dc34ccfc75d773cceaadc3c65e4c75eb6ad)) + +### Fix + +* fix(worker): always try to move to active after waiting for job (#914) ([`97b7084`](https://github.com/taskforcesh/bullmq/commit/97b708451bf4ce14a461a50f8a24d14b0e40dd4b)) + +### Test + +* test: fix test reference (#913) ([`c67aa6c`](https://github.com/taskforcesh/bullmq/commit/c67aa6c235ff7830c643e2fb291d1145b11b9de2)) + +### Unknown + +* GitBook: [#81] docs: add pricing information for bullmq-pro ([`27a69f9`](https://github.com/taskforcesh/bullmq/commit/27a69f9b9540baadf692e62eb0c6857f0b86aa96)) + + +## v1.55.0 (2021-12-02) + +### Chore + +* chore(release): 1.55.0 [skip ci] + +# [1.55.0](https://github.com/taskforcesh/bullmq/compare/v1.54.6...v1.55.0) (2021-12-02) + +### Features + +* **script-loader:** lua script loader with include support ([#897](https://github.com/taskforcesh/bullmq/issues/897)) ([64b6ccf](https://github.com/taskforcesh/bullmq/commit/64b6ccf2a373b40d7ea763b3d35cf34f36ba11da)) ([`ae90c44`](https://github.com/taskforcesh/bullmq/commit/ae90c44e2ef79661440abbb9aae29345ca4e40ad)) + +### Documentation + +* docs(bullmq-pro): add missing line in install instructions (#905) ([`53ba7b7`](https://github.com/taskforcesh/bullmq/commit/53ba7b798d75ead036b417c4644a7eab59b81cb4)) + +* docs(job): use defaultValue tag (#903) ([`3133599`](https://github.com/taskforcesh/bullmq/commit/3133599e982071fd1dfe7871f20b87eb6461cbf2)) + +### Feature + +* feat(script-loader): lua script loader with include support (#897) ([`64b6ccf`](https://github.com/taskforcesh/bullmq/commit/64b6ccf2a373b40d7ea763b3d35cf34f36ba11da)) + +### Style + +* style: fix styled github warnings (#904) ([`a008c2b`](https://github.com/taskforcesh/bullmq/commit/a008c2be6bc8fe73360ac97a6deabced04382ab4)) + + +## v1.54.6 (2021-11-30) + +### Chore + +* chore(release): 1.54.6 [skip ci] + +## [1.54.6](https://github.com/taskforcesh/bullmq/compare/v1.54.5...v1.54.6) (2021-11-30) + +### Bug Fixes + +* **stalled:** save finidhedOn when job stalled more than allowable limit ([#900](https://github.com/taskforcesh/bullmq/issues/900)) ([eb89edf](https://github.com/taskforcesh/bullmq/commit/eb89edf2f4eb85dedb1485de32e79331940a654f)) ([`0c0be5e`](https://github.com/taskforcesh/bullmq/commit/0c0be5e2c4b1192c45dcea16f3f0fdd725aa40fc)) + +* chore(deps): upgrade dev dependencies ([`9d108e3`](https://github.com/taskforcesh/bullmq/commit/9d108e30fbd47de3f4b32d2217bce8a1d0c9400c)) + +* chore(redis-connection): delete unused variables ([`437d9b3`](https://github.com/taskforcesh/bullmq/commit/437d9b35251fca132f56f1e075b84f5cdccebbde)) + +* chore: fix coverage action ([`72db663`](https://github.com/taskforcesh/bullmq/commit/72db663a52fd73ab62568ba06b2952dc57791f3b)) + +### Documentation + +* docs: update logo ([`5ae0ec4`](https://github.com/taskforcesh/bullmq/commit/5ae0ec4ce63e6fe184b8edd4dfb462a5804cba02)) + +### Fix + +* fix(stalled): save finidhedOn when job stalled more than allowable limit (#900) ([`eb89edf`](https://github.com/taskforcesh/bullmq/commit/eb89edf2f4eb85dedb1485de32e79331940a654f)) + +### Style + +* style(eslint): warn ts ban types ([`1d8aaf2`](https://github.com/taskforcesh/bullmq/commit/1d8aaf2346c851846c4807cea1580f3360498f49)) + +### Unknown + +* GitBook: [#80] docs: update install bullmq-pro ([`3805ce7`](https://github.com/taskforcesh/bullmq/commit/3805ce76d7db1b52dc8b3e32bae8221bb3ef9f96)) + + +## v1.54.5 (2021-11-26) + +### Chore + +* chore(release): 1.54.5 [skip ci] + +## [1.54.5](https://github.com/taskforcesh/bullmq/compare/v1.54.4...v1.54.5) (2021-11-26) + +### Bug Fixes + +* **tsconfig:** only include node types ([#895](https://github.com/taskforcesh/bullmq/issues/895)) ([5f4fdca](https://github.com/taskforcesh/bullmq/commit/5f4fdca5f416f2cd9d83eb0fba84e56c24320b63)) ([`f178fa9`](https://github.com/taskforcesh/bullmq/commit/f178fa984a7d53c8f92ea123ad476d92d153ab0f)) + +### Fix + +* fix(tsconfig): only include node types (#895) ([`5f4fdca`](https://github.com/taskforcesh/bullmq/commit/5f4fdca5f416f2cd9d83eb0fba84e56c24320b63)) + +### Test + +* test: fix test checkout ([`e9859fc`](https://github.com/taskforcesh/bullmq/commit/e9859fcf826ded5e2efedeba753a99d4f9ff9145)) + +* test: correct test paths ([`4bc5e75`](https://github.com/taskforcesh/bullmq/commit/4bc5e7512c0982989289aacb685b35fbb3bc5a82)) + +* test: add tests as an external module ([`19d3de4`](https://github.com/taskforcesh/bullmq/commit/19d3de4f9a6ed65b211e8cb903f20e5a47e0bbe2)) + + +## v1.54.4 (2021-11-24) + +### Chore + +* chore(release): 1.54.4 [skip ci] + +## [1.54.4](https://github.com/taskforcesh/bullmq/compare/v1.54.3...v1.54.4) (2021-11-24) + +### Bug Fixes + +* **child-processor:** add deprecation warning for progress method ([#890](https://github.com/taskforcesh/bullmq/issues/890)) ([f80b19a](https://github.com/taskforcesh/bullmq/commit/f80b19a5aa85413b8906aa0fac1bfd09bec990cb)) ([`9469c36`](https://github.com/taskforcesh/bullmq/commit/9469c36cdbeb67491534f580f05f704d7c325d4b)) + +* chore: move pre-commit to husky hooks ([`a83c822`](https://github.com/taskforcesh/bullmq/commit/a83c822b6706432b604329e2da47d5f3ec1837a9)) + +### Documentation + +* docs: add missing returned types (#889) ([`3c76dc4`](https://github.com/taskforcesh/bullmq/commit/3c76dc4fa3558fa83161537751bc68eeb65e9d4a)) + +### Fix + +* fix(child-processor): add deprecation warning for progress method (#890) ([`f80b19a`](https://github.com/taskforcesh/bullmq/commit/f80b19a5aa85413b8906aa0fac1bfd09bec990cb)) + +### Refactor + +* refactor(sandbox): use utilty functions instead of send ([`7619e23`](https://github.com/taskforcesh/bullmq/commit/7619e232faf759c0456e83bef7b35064278f2453)) + +* refactor: refactor sandoxes related code ([`bd0131d`](https://github.com/taskforcesh/bullmq/commit/bd0131dabfe3c6983d6b2c68cdd974c60d947314)) + +* refactor: provide a protected method for calling process job ([`b6c9166`](https://github.com/taskforcesh/bullmq/commit/b6c9166e7cc74e5deb17cbf8ec3ad495bd0b7720)) + + +## v1.54.3 (2021-11-22) + +### Chore + +* chore(release): 1.54.3 [skip ci] + +## [1.54.3](https://github.com/taskforcesh/bullmq/compare/v1.54.2...v1.54.3) (2021-11-22) + +### Bug Fixes + +* **clean:** use range values in lua script ([#885](https://github.com/taskforcesh/bullmq/issues/885)) ([02ef63a](https://github.com/taskforcesh/bullmq/commit/02ef63a8163e627a270a1c1bd74989a67c3f15f7)) ([`22eabe5`](https://github.com/taskforcesh/bullmq/commit/22eabe5e7d515a501f427b4dca05b2b398f60412)) + +### Fix + +* fix(clean): use range values in lua script (#885) ([`02ef63a`](https://github.com/taskforcesh/bullmq/commit/02ef63a8163e627a270a1c1bd74989a67c3f15f7)) + + +## v1.54.2 (2021-11-20) + +### Chore + +* chore(release): 1.54.2 [skip ci] + +## [1.54.2](https://github.com/taskforcesh/bullmq/compare/v1.54.1...v1.54.2) (2021-11-20) + +### Bug Fixes + +* **job:** use this when use new operators ([#884](https://github.com/taskforcesh/bullmq/issues/884)) ([7b84283](https://github.com/taskforcesh/bullmq/commit/7b842839e1d30967ebf15b901033e3b31e929df8)) ([`03f6eb3`](https://github.com/taskforcesh/bullmq/commit/03f6eb3d536dc4dd00c0d75338eb72678f397a69)) + +### Fix + +* fix(job): use this when use new operators (#884) ([`7b84283`](https://github.com/taskforcesh/bullmq/commit/7b842839e1d30967ebf15b901033e3b31e929df8)) + + +## v1.54.1 (2021-11-19) + +### Chore + +* chore(release): 1.54.1 [skip ci] + +## [1.54.1](https://github.com/taskforcesh/bullmq/compare/v1.54.0...v1.54.1) (2021-11-19) + +### Bug Fixes + +* **job:** change private attributes to protected for extensions ([#882](https://github.com/taskforcesh/bullmq/issues/882)) ([ffcc3f0](https://github.com/taskforcesh/bullmq/commit/ffcc3f083c23e6de3587c38fb7aacb2e19085351)) ([`5024c18`](https://github.com/taskforcesh/bullmq/commit/5024c186b4bafaa6c416799c782331934fa19eb1)) + +### Fix + +* fix(job): change private attributes to protected for extensions (#882) ([`ffcc3f0`](https://github.com/taskforcesh/bullmq/commit/ffcc3f083c23e6de3587c38fb7aacb2e19085351)) + + +## v1.54.0 (2021-11-17) + +### Chore + +* chore(release): 1.54.0 [skip ci] + +# [1.54.0](https://github.com/taskforcesh/bullmq/compare/v1.53.0...v1.54.0) (2021-11-17) + +### Features + +* **load-includes:** export includes to be reused in extensions ([#877](https://github.com/taskforcesh/bullmq/issues/877)) ([b56c4a9](https://github.com/taskforcesh/bullmq/commit/b56c4a9cf2ecebb44481618026589162be61680a)) ([`d6519f1`](https://github.com/taskforcesh/bullmq/commit/d6519f1a185decdd544667115657e00239c9d6ee)) + +### Feature + +* feat(load-includes): export includes to be reused in extensions (#877) ([`b56c4a9`](https://github.com/taskforcesh/bullmq/commit/b56c4a9cf2ecebb44481618026589162be61680a)) + + +## v1.53.0 (2021-11-16) + +### Chore + +* chore(release): 1.53.0 [skip ci] + +# [1.53.0](https://github.com/taskforcesh/bullmq/compare/v1.52.2...v1.53.0) (2021-11-16) + +### Features + +* **queue-events:** add cleaned event ([#865](https://github.com/taskforcesh/bullmq/issues/865)) ([b3aebad](https://github.com/taskforcesh/bullmq/commit/b3aebad8a62311e135d53be2e7c5e47740547465)) ([`14e4f31`](https://github.com/taskforcesh/bullmq/commit/14e4f318e3c4ca2eb3fd065d79f1813c6ed7f8eb)) + +### Feature + +* feat(queue-events): add cleaned event (#865) ([`b3aebad`](https://github.com/taskforcesh/bullmq/commit/b3aebad8a62311e135d53be2e7c5e47740547465)) + + +## v1.52.2 (2021-11-14) + +### Chore + +* chore(release): 1.52.2 [skip ci] + +## [1.52.2](https://github.com/taskforcesh/bullmq/compare/v1.52.1...v1.52.2) (2021-11-14) + +### Bug Fixes + +* **worker:** change private attributes to protected for pro extension ([#874](https://github.com/taskforcesh/bullmq/issues/874)) ([1c73881](https://github.com/taskforcesh/bullmq/commit/1c738819b49f206688ed7b3b9d103077045e1b05)) ([`e73580b`](https://github.com/taskforcesh/bullmq/commit/e73580ba747b304924643ba9c710449e9b254716)) + +### Fix + +* fix(worker): change private attributes to protected for pro extension (#874) ([`1c73881`](https://github.com/taskforcesh/bullmq/commit/1c738819b49f206688ed7b3b9d103077045e1b05)) + + +## v1.52.1 (2021-11-12) + +### Chore + +* chore(release): 1.52.1 [skip ci] + +## [1.52.1](https://github.com/taskforcesh/bullmq/compare/v1.52.0...v1.52.1) (2021-11-12) + +### Performance Improvements + +* **clean:** speed up clean method when called with limit param ([#864](https://github.com/taskforcesh/bullmq/issues/864)) ([09b5cb4](https://github.com/taskforcesh/bullmq/commit/09b5cb45a79c4bc53a52d540918c22477a066e16)) ([`d59475c`](https://github.com/taskforcesh/bullmq/commit/d59475ce4d3ad1181dde613e47e7318812f23110)) + +* chore(deps): apply rimraf to delete extra published files (#873) ([`e84620c`](https://github.com/taskforcesh/bullmq/commit/e84620c785f388ed14742c86d78dd78fb05218de)) + +### Performance + +* perf(clean): speed up clean method when called with limit param (#864) ([`09b5cb4`](https://github.com/taskforcesh/bullmq/commit/09b5cb45a79c4bc53a52d540918c22477a066e16)) + + +## v1.52.0 (2021-11-11) + +### Chore + +* chore(release): 1.52.0 [skip ci] + +# [1.52.0](https://github.com/taskforcesh/bullmq/compare/v1.51.3...v1.52.0) (2021-11-11) + +### Features + +* **queue:** add waiting event type declaration ([#872](https://github.com/taskforcesh/bullmq/issues/872)) ([f29925d](https://github.com/taskforcesh/bullmq/commit/f29925da3b12f573582ea188ec386e86023cefc9)) ([`2048a9b`](https://github.com/taskforcesh/bullmq/commit/2048a9b47f69166805858fdc3a18c940deb42049)) + +* chore(deps): upgrade @semantic-release/github (#867) to 8.0.2 ([`9621383`](https://github.com/taskforcesh/bullmq/commit/96213838121f4a52d71ce07928f2c5f9cb46fa9c)) + +### Ci + +* ci(node-workflow): allow run tests in next branch (#852) ([`6009054`](https://github.com/taskforcesh/bullmq/commit/6009054c53ef447d02173f6a7a88fe6a7eb03581)) + +### Feature + +* feat(queue): add waiting event type declaration (#872) ([`f29925d`](https://github.com/taskforcesh/bullmq/commit/f29925da3b12f573582ea188ec386e86023cefc9)) + +### Test + +* test(worker): check finishedOn value passed in completed event (#866) ref #863 ([`ef47aa9`](https://github.com/taskforcesh/bullmq/commit/ef47aa93b0808f3027c85e17aee3be12e716ff8c)) + + +## v1.51.3 (2021-11-04) + +### Chore + +* chore(release): 1.51.3 [skip ci] + +## [1.51.3](https://github.com/taskforcesh/bullmq/compare/v1.51.2...v1.51.3) (2021-11-04) + +### Bug Fixes + +* **move-to-failed:** delete closing check that prevents script execution ([#858](https://github.com/taskforcesh/bullmq/issues/858)) fixes [#834](https://github.com/taskforcesh/bullmq/issues/834) ([d50814f](https://github.com/taskforcesh/bullmq/commit/d50814f864448c10fec8e93651a2095fa4ef3f4e)) ([`be186d9`](https://github.com/taskforcesh/bullmq/commit/be186d9e6f3c3bf1d4afb0e1423935190681de34)) + +### Fix + +* fix(move-to-failed): delete closing check that prevents script execution (#858) fixes #834 ([`d50814f`](https://github.com/taskforcesh/bullmq/commit/d50814f864448c10fec8e93651a2095fa4ef3f4e)) + + +## v1.51.2 (2021-11-03) + +### Chore + +* chore(release): 1.51.2 [skip ci] + +## [1.51.2](https://github.com/taskforcesh/bullmq/compare/v1.51.1...v1.51.2) (2021-11-03) + +### Bug Fixes + +* **flow:** remove repeat option from FlowJob opts ([#853](https://github.com/taskforcesh/bullmq/issues/853)) fixes [#851](https://github.com/taskforcesh/bullmq/issues/851) ([c9ee2f1](https://github.com/taskforcesh/bullmq/commit/c9ee2f100a23aa24034598b7d452c69720d7aabd)) ([`8c8a5df`](https://github.com/taskforcesh/bullmq/commit/8c8a5df4121560a7325bbbadb8ec77b59fad3505)) + +* chore(deps): add npm-run-all into dev-dependencies (#847) ([`315d5dd`](https://github.com/taskforcesh/bullmq/commit/315d5dda39bcfb3223976d1a6da8e11d0a4902a5)) + +### Documentation + +* docs: use implements for declaration types (#845) ([`2446cea`](https://github.com/taskforcesh/bullmq/commit/2446cea3d99d9b1bd738e7a8480c395984f8f17c)) + +### Fix + +* fix(flow): remove repeat option from FlowJob opts (#853) fixes #851 ([`c9ee2f1`](https://github.com/taskforcesh/bullmq/commit/c9ee2f100a23aa24034598b7d452c69720d7aabd)) + +### Unknown + +* GitBook: [#79] correct groups paragraph ([`0460246`](https://github.com/taskforcesh/bullmq/commit/0460246ea4d9c79264b601671ce4794603fa1bdc)) + +* GitBook: [#78] docs: update custom job ids ([`b157171`](https://github.com/taskforcesh/bullmq/commit/b1571712311856f72c2eea4315bb2e5ca06015f7)) + +* GitBook: [#77] docs: add job ids page ([`cea2742`](https://github.com/taskforcesh/bullmq/commit/cea274258858517f648e2d6cacdb73ca0659cf25)) + + +## v1.51.1 (2021-10-29) + +### Chore + +* chore(release): 1.51.1 [skip ci] + +## [1.51.1](https://github.com/taskforcesh/bullmq/compare/v1.51.0...v1.51.1) (2021-10-29) + +### Bug Fixes + +* **commands:** copy includes lua scripts ([#843](https://github.com/taskforcesh/bullmq/issues/843)) fixes [#837](https://github.com/taskforcesh/bullmq/issues/837) ([cab33e0](https://github.com/taskforcesh/bullmq/commit/cab33e08bc78bd3c45b86158a818100beeb06d81)) ([`1c99cc7`](https://github.com/taskforcesh/bullmq/commit/1c99cc7f00097ee77669378c6e1c291677b330df)) + +### Fix + +* fix(commands): copy includes lua scripts (#843) fixes #837 ([`cab33e0`](https://github.com/taskforcesh/bullmq/commit/cab33e08bc78bd3c45b86158a818100beeb06d81)) + + +## v1.51.0 (2021-10-28) + +### Chore + +* chore(release): 1.51.0 [skip ci] + +# [1.51.0](https://github.com/taskforcesh/bullmq/compare/v1.50.7...v1.51.0) (2021-10-28) + +### Features + +* **flow:** consider continually adding jobs ([#828](https://github.com/taskforcesh/bullmq/issues/828)) fixes [#826](https://github.com/taskforcesh/bullmq/issues/826) ([b0fde69](https://github.com/taskforcesh/bullmq/commit/b0fde69f4370160a891e4654485c09745066b80b)) ([`8231052`](https://github.com/taskforcesh/bullmq/commit/82310524849b8aaae0ab8e427f4a0637fadaa2de)) + +### Feature + +* feat(flow): consider continually adding jobs (#828) fixes #826 ([`b0fde69`](https://github.com/taskforcesh/bullmq/commit/b0fde69f4370160a891e4654485c09745066b80b)) + + +## v1.50.7 (2021-10-28) + +### Chore + +* chore(release): 1.50.7 [skip ci] + +## [1.50.7](https://github.com/taskforcesh/bullmq/compare/v1.50.6...v1.50.7) (2021-10-28) + +### Bug Fixes + +* override enableReadyCheck, maxRetriesPerRequest fixes reconnection ([09ba358](https://github.com/taskforcesh/bullmq/commit/09ba358b6f761bdc52b0f5b2aa315cc6c2a9db6e)) +* **queue-base:** deprecation warning on missing connection ([2f79802](https://github.com/taskforcesh/bullmq/commit/2f79802378d7e015b5d0702945a71c1c2073251e)) ([`da1add8`](https://github.com/taskforcesh/bullmq/commit/da1add8d2970216b953406d1c1109b36bfa05c5c)) + +* chore: remove some lodash functions (#835) ([`fcc48e3`](https://github.com/taskforcesh/bullmq/commit/fcc48e3fb4263950f355e9fd9a233a20fe18f380)) + +### Fix + +* fix: override enableReadyCheck, maxRetriesPerRequest fixes reconnection ([`09ba358`](https://github.com/taskforcesh/bullmq/commit/09ba358b6f761bdc52b0f5b2aa315cc6c2a9db6e)) + +* fix(queue-base): deprecation warning on missing connection ([`2f79802`](https://github.com/taskforcesh/bullmq/commit/2f79802378d7e015b5d0702945a71c1c2073251e)) + + +## v1.50.6 (2021-10-28) + +### Chore + +* chore(release): 1.50.6 [skip ci] + +## [1.50.6](https://github.com/taskforcesh/bullmq/compare/v1.50.5...v1.50.6) (2021-10-28) + +### Bug Fixes + +* **queue-base:** show connection deprecation warning ([#832](https://github.com/taskforcesh/bullmq/issues/832)) fixes [#829](https://github.com/taskforcesh/bullmq/issues/829) ([5d023fe](https://github.com/taskforcesh/bullmq/commit/5d023fe7b671a2547398fd68995ccd85216cc7a5)) ([`2c191b0`](https://github.com/taskforcesh/bullmq/commit/2c191b0e079bf412f292617c88917eec3c9b00de)) + +### Ci + +* ci(github): set test job and cache (#820) ([`d810465`](https://github.com/taskforcesh/bullmq/commit/d810465a4549da871e53d8bed496118afda61fb0)) + +### Fix + +* fix(queue-base): show connection deprecation warning (#832) fixes #829 ([`5d023fe`](https://github.com/taskforcesh/bullmq/commit/5d023fe7b671a2547398fd68995ccd85216cc7a5)) + +### Test + +* test(flow): add backoff strategy case (#827) ([`a0cae58`](https://github.com/taskforcesh/bullmq/commit/a0cae58ca0c3c489309c6ad626fb5d6147bdf92d)) + + +## v1.50.5 (2021-10-21) + +### Chore + +* chore(release): 1.50.5 [skip ci] + +## [1.50.5](https://github.com/taskforcesh/bullmq/compare/v1.50.4...v1.50.5) (2021-10-21) + +### Bug Fixes + +* **child-pool:** pipe process stdout and stderr([#822](https://github.com/taskforcesh/bullmq/issues/822)) fixes [#821](https://github.com/taskforcesh/bullmq/issues/821) ([13f5c62](https://github.com/taskforcesh/bullmq/commit/13f5c62174925e4638acda6a9de379668048189d)) ([`7dcbe43`](https://github.com/taskforcesh/bullmq/commit/7dcbe43ccc3c69625e6fba72f80d71dd755690b3)) + +### Fix + +* fix(child-pool): pipe process stdout and stderr(#822) fixes #821 ([`13f5c62`](https://github.com/taskforcesh/bullmq/commit/13f5c62174925e4638acda6a9de379668048189d)) + +### Test + +* test: add test case for shared connections ([`3c8906e`](https://github.com/taskforcesh/bullmq/commit/3c8906e910c8aa399b9b591f87c19427d685b69d)) + + +## v1.50.4 (2021-10-20) + +### Chore + +* chore(release): 1.50.4 [skip ci] + +## [1.50.4](https://github.com/taskforcesh/bullmq/compare/v1.50.3...v1.50.4) (2021-10-20) + +### Bug Fixes + +* properly pass sharedConnection option to worker base class ([56557f1](https://github.com/taskforcesh/bullmq/commit/56557f1c0c3fb04bc3dd8824819c2d4367324c3b)) ([`fdc76ff`](https://github.com/taskforcesh/bullmq/commit/fdc76ff9b8781a1735933514a8b2b5eac510b789)) + +### Fix + +* fix: properly pass sharedConnection option to worker base class ([`56557f1`](https://github.com/taskforcesh/bullmq/commit/56557f1c0c3fb04bc3dd8824819c2d4367324c3b)) + +### Unknown + +* GitBook: [#74] update bullmq-pro docs ([`b61b9a8`](https://github.com/taskforcesh/bullmq/commit/b61b9a8ccca16554d4a0c03eb14ed3e6fe5a7543)) + +* GitBook: [#73] update bullmq-pro docs ([`fce0070`](https://github.com/taskforcesh/bullmq/commit/fce00701930e188844218453f2aeb68087cf111d)) + +* GitBook: [#72] update groups ([`c99069a`](https://github.com/taskforcesh/bullmq/commit/c99069a481102e57889872aac1ad7d9f4fee58e4)) + +* GitBook: [#71] update groups ([`8dc7f36`](https://github.com/taskforcesh/bullmq/commit/8dc7f36fa9e91f1d9f876db82dccbdbd2b8e3bbd)) + +* GitBook: [#70] add groups diagram ([`00be74a`](https://github.com/taskforcesh/bullmq/commit/00be74afc99f255999a0a7aaf1c971d68f67e382)) + +* GitBook: [#69] update bullmq-pro install instructions ([`b47d5ef`](https://github.com/taskforcesh/bullmq/commit/b47d5ef32ebcdf7363c059481491b8c22aec041b)) + + +## v1.50.3 (2021-10-18) + +### Chore + +* chore(release): 1.50.3 [skip ci] + +## [1.50.3](https://github.com/taskforcesh/bullmq/compare/v1.50.2...v1.50.3) (2021-10-18) + +### Bug Fixes + +* **msgpackr:** upgrade version to 1.4.6 to support esm bundlers ([#818](https://github.com/taskforcesh/bullmq/issues/818)) fixes [#813](https://github.com/taskforcesh/bullmq/issues/813) ([913d7a9](https://github.com/taskforcesh/bullmq/commit/913d7a9a892d2c7e2fa5822367355c2dee888583)) ([`19da60a`](https://github.com/taskforcesh/bullmq/commit/19da60a6006d0df9e0cb81ea810d3c2673e46350)) + +### Documentation + +* docs(remove): fix id typo (#805) ([`51eebc4`](https://github.com/taskforcesh/bullmq/commit/51eebc4ca25f3cada743f5e0a3e7e8878b82bc7e)) + +### Fix + +* fix(msgpackr): upgrade version to 1.4.6 to support esm bundlers (#818) fixes #813 ([`913d7a9`](https://github.com/taskforcesh/bullmq/commit/913d7a9a892d2c7e2fa5822367355c2dee888583)) + +### Unknown + +* GitBook: [#68] docs: more updates to bull documentation ([`478e90a`](https://github.com/taskforcesh/bullmq/commit/478e90ac39005198be07d731c50c9df4cae2f674)) + +* GitBook: [#67] add initial bullmq-pro and groups documentation ([`123e784`](https://github.com/taskforcesh/bullmq/commit/123e7846b65b43c1f19540aaa2de41b3dd94fb0e)) + + +## v1.50.2 (2021-10-12) + +### Chore + +* chore(release): 1.50.2 [skip ci] + +## [1.50.2](https://github.com/taskforcesh/bullmq/compare/v1.50.1...v1.50.2) (2021-10-12) + +### Bug Fixes + +* **msgpack:** replace msgpack by msgpackr ([dc13a75](https://github.com/taskforcesh/bullmq/commit/dc13a75374bbd29fefbf3e56f822e763df3712d9)) ([`23c02b2`](https://github.com/taskforcesh/bullmq/commit/23c02b2eee3c4e27e0370317779b1620b195e2f5)) + +### Fix + +* fix(msgpack): replace msgpack by msgpackr ([`dc13a75`](https://github.com/taskforcesh/bullmq/commit/dc13a75374bbd29fefbf3e56f822e763df3712d9)) + +### Test + +* test(events): fix broken text ([`67ab17d`](https://github.com/taskforcesh/bullmq/commit/67ab17d0093edcba4f784531c0e601b32cff5e1f)) + + +## v1.50.1 (2021-10-12) + +### Chore + +* chore(release): 1.50.1 [skip ci] + +## [1.50.1](https://github.com/taskforcesh/bullmq/compare/v1.50.0...v1.50.1) (2021-10-12) + +### Bug Fixes + +* **queue-getters:** only getting the first 2 jobs ([653873a](https://github.com/taskforcesh/bullmq/commit/653873a6a86dd6c3e1afc3142efbe11014d80557)) ([`4768d7b`](https://github.com/taskforcesh/bullmq/commit/4768d7b1f843dcac14bef62edbfab3d1242dec64)) + +* chore(test_getters): check order for completed jobs ([`7b3e718`](https://github.com/taskforcesh/bullmq/commit/7b3e7189dc30947427ce94a1bd39cc481077a117)) + +* chore(test_getters): add tests for waiting and failed getters ([`426a2a7`](https://github.com/taskforcesh/bullmq/commit/426a2a753d5b5e6a561937c4ad34ab5cc028c65c)) + +### Fix + +* fix(queue-getters): only getting the first 2 jobs ([`653873a`](https://github.com/taskforcesh/bullmq/commit/653873a6a86dd6c3e1afc3142efbe11014d80557)) + + +## v1.50.0 (2021-10-12) + +### Chore + +* chore(release): 1.50.0 [skip ci] + +# [1.50.0](https://github.com/taskforcesh/bullmq/compare/v1.49.0...v1.50.0) (2021-10-12) + +### Features + +* easier to build extensions on top of BullMQ ([b1a9e64](https://github.com/taskforcesh/bullmq/commit/b1a9e64a9184addc0b8245a04013e1c896e9c2bc)) ([`2d646d1`](https://github.com/taskforcesh/bullmq/commit/2d646d169f9ad084b6fc8c47316aaa77821126ea)) + +### Documentation + +* docs(child-pool): add link to process exit codes (#799) ([`1f12295`](https://github.com/taskforcesh/bullmq/commit/1f122952a0f161c754b5ddbba75db2880a4554c8)) + +### Feature + +* feat: easier to build extensions on top of BullMQ ([`b1a9e64`](https://github.com/taskforcesh/bullmq/commit/b1a9e64a9184addc0b8245a04013e1c896e9c2bc)) + + +## v1.49.0 (2021-10-08) + +### Chore + +* chore(release): 1.49.0 [skip ci] + +# [1.49.0](https://github.com/taskforcesh/bullmq/compare/v1.48.3...v1.49.0) (2021-10-08) + +### Features + +* **sandboxed-process:** handle init-failed error ([#797](https://github.com/taskforcesh/bullmq/issues/797)) ([5d2f553](https://github.com/taskforcesh/bullmq/commit/5d2f55342b19ee99d34f8d8003f09359cfe17d4f)) ([`daaa73e`](https://github.com/taskforcesh/bullmq/commit/daaa73e2016948e715f11e67fac1bf261dadb33a)) + +### Documentation + +* docs(change-delay): add param in docs (#792) ([`58a803f`](https://github.com/taskforcesh/bullmq/commit/58a803ff2e6a1815b4000dc16584663e33dace09)) + +* docs(readme): add semantic-release badge (#795) ([`2f1b141`](https://github.com/taskforcesh/bullmq/commit/2f1b14197786282292ce5150c008a61a7f44f19e)) + +### Feature + +* feat(sandboxed-process): handle init-failed error (#797) ([`5d2f553`](https://github.com/taskforcesh/bullmq/commit/5d2f55342b19ee99d34f8d8003f09359cfe17d4f)) + +### Test + +* test(sandboxed-process): add test case where process.env is shared (#793) ([`479c425`](https://github.com/taskforcesh/bullmq/commit/479c425aeac01e218de661f6ba357d0ed2f116aa)) + + +## v1.48.3 (2021-10-05) + +### Chore + +* chore(release): 1.48.3 [skip ci] + +## [1.48.3](https://github.com/taskforcesh/bullmq/compare/v1.48.2...v1.48.3) (2021-10-05) + +### Bug Fixes + +* **change-delay:** add current time to delay ([#789](https://github.com/taskforcesh/bullmq/issues/789)) fixes [#787](https://github.com/taskforcesh/bullmq/issues/787) ([4a70def](https://github.com/taskforcesh/bullmq/commit/4a70def6e85cf9ea384ec5f38c3c4f83e4eb523c)) ([`4e09a2a`](https://github.com/taskforcesh/bullmq/commit/4e09a2a97bb9eab6c5c3db1294aa1aa4fd3730b0)) + +* chore(@microsoft/api-extractor): upgrade to 7.18.9 ([`366a113`](https://github.com/taskforcesh/bullmq/commit/366a113507e22d696b9822868889881195c05fb1)) + +* chore(@microsoft/api-documenter): upgrade to 7.13.50 ([`5581642`](https://github.com/taskforcesh/bullmq/commit/5581642ddcc33bfd0581c13e6f7cff0142076ff7)) + +* chore(coveralls): upgrade to 3.1.1 ([`812da7e`](https://github.com/taskforcesh/bullmq/commit/812da7e832644e3abf60726be00df43302bd2d87)) + +* chore(copyfiles): upgrade to 2.4.1 ([`d8510a1`](https://github.com/taskforcesh/bullmq/commit/d8510a19159062d10c482938eaf3f5187c123887)) + +* chore(semantic-release): upgrade to 17.4.7 (#778) ([`477bdae`](https://github.com/taskforcesh/bullmq/commit/477bdae9d037a92f9d94457c9476b2b3aba6c671)) + +* chore(@semantic-release/git): upgrade to 9.0.1 ([`f57fea0`](https://github.com/taskforcesh/bullmq/commit/f57fea0750a3421a14bd056ba511eac5b6475ad1)) + +* chore(sinon): upgrade to 7.5.0 ([`cb60a5f`](https://github.com/taskforcesh/bullmq/commit/cb60a5f1b62116f056c9a16836a5f05d68bb39ee)) + +* chore(pretty-quick): upgrade to 3.1.1 ([`b711907`](https://github.com/taskforcesh/bullmq/commit/b711907d682e2de4219f35bc3c05c90d545d18b3)) + +* chore(prettier): upgrade to 2.4.1 ([`3d603b7`](https://github.com/taskforcesh/bullmq/commit/3d603b778697cb71b2dbe690574598acb524de5b)) + +* chore(@semantic-release/release-notes-generator): upgrade to 9.0.3 ([`3c01ad4`](https://github.com/taskforcesh/bullmq/commit/3c01ad4fd66231987d6a6be3a73c4c61052bf84a)) + +* chore(@types/chai): upgrade to 4.2.22 ([`982aa08`](https://github.com/taskforcesh/bullmq/commit/982aa0854aaedde685309fb15e9d495e9fbaa000)) + +* chore(@types/chai-as-promised): upgrade to 7.1.4 ([`4e8fef3`](https://github.com/taskforcesh/bullmq/commit/4e8fef35e1bddcf55e51b27705d60c9e9ad55d0c)) + +* chore(@commitlint/config-conventional): upgrade to 8.3.4 ([`c754bc4`](https://github.com/taskforcesh/bullmq/commit/c754bc4d591bcc7377c5c1e0f2aa467f6261e8bc)) + +* chore(@commitlint/cli): upgrade to 8.3.5 ([`969cc58`](https://github.com/taskforcesh/bullmq/commit/969cc581aea069ba881a4a2cd3f97472a5c95990)) + +* chore(@types/lodash): upgrade to 4.14.173 ([`753417a`](https://github.com/taskforcesh/bullmq/commit/753417aee792f59da8cf7c92c9fa3309770144ea)) + +* chore(eslint-plugin-mocha): upgrade to 8.2.0 ([`0e7dc9a`](https://github.com/taskforcesh/bullmq/commit/0e7dc9a3eaaf248abfee425672b939d83ba79774)) + +* chore(husky): upgrade to 3.1.0 ([`c89de04`](https://github.com/taskforcesh/bullmq/commit/c89de0453c78b470d3c1495391185386cec4ae51)) + +* chore(mocha): upgrade to 6.2.3 ([`c489734`](https://github.com/taskforcesh/bullmq/commit/c4897344f7ef802587ce1847833af37566ffe4ea)) + +* chore(ts-mocha): upgrade to 8.0.0 ([`a4d8f7f`](https://github.com/taskforcesh/bullmq/commit/a4d8f7f5e06e7a0d0d1cf1e5d27864a661df139c)) + +* chore(ts-node): upgrade to 8.10.2 ([`32909ba`](https://github.com/taskforcesh/bullmq/commit/32909babd11eda160158aed900282bbb4c504ea8)) + +* chore(typescript): upgrade to 3.9.10 ([`9a5e860`](https://github.com/taskforcesh/bullmq/commit/9a5e8602a37a4ab05199a1d32635853a9a717390)) + +* chore(@types/mocha): upgrade to 5.2.7 ([`c6de08e`](https://github.com/taskforcesh/bullmq/commit/c6de08efd148c91d313c50ebc1b98f100c965008)) + +* chore(@types/node): upgrade to 12.20.25 ([`04a6cee`](https://github.com/taskforcesh/bullmq/commit/04a6cee6ec81a083259919a5db091b2360da3a10)) + +* chore(@types/semver): upgrade to 6.2.3 ([`6d46d9c`](https://github.com/taskforcesh/bullmq/commit/6d46d9cfdf054a5b358ac42c8cd3e587cd13f6d0)) + +* chore(@types/sinon): upgrade to 7.5.2 ([`2bfe5df`](https://github.com/taskforcesh/bullmq/commit/2bfe5df7b4c841c3daec8beab405a05a6a8d0391)) + +* chore(@types/uuid): upgrade to 3.4.10 ([`71727bd`](https://github.com/taskforcesh/bullmq/commit/71727bd6610e991ec715adc769568dd15fde8ae1)) + +* chore(tslib): upgrade to 1.14.1 ([`b4d87b5`](https://github.com/taskforcesh/bullmq/commit/b4d87b5bf94d67bef1edfcdd0bfdf677fc4e0c39)) + +* chore(ioredis): upgrade to 4.27.9 ([`1d95209`](https://github.com/taskforcesh/bullmq/commit/1d95209671ac0b7d4fd1cc60927580f900a68556)) + +* chore(get-port): upgrade to 5.1.1 ([`3bb79d0`](https://github.com/taskforcesh/bullmq/commit/3bb79d038fb9f3fabec62ef3fa72bdf3a704ae39)) + +* chore(cron-parser): upgrade to 2.18.0 ([`1ab8716`](https://github.com/taskforcesh/bullmq/commit/1ab8716f8833c2a1b730d530f06e96330b1e0ec1)) + +### Documentation + +* docs(events): update completed and failed events docs (#785) ([`3712537`](https://github.com/taskforcesh/bullmq/commit/371253744ec89f8edcc868ee9236681deab62dbf)) + +* docs: correct bird's name & comparative adjective for repeatable frequency ([`cb4292c`](https://github.com/taskforcesh/bullmq/commit/cb4292ca13af145140eedb5960ccbff87644953f)) + +* docs(autorun): add documentation (#769) ref #263 ([`b016344`](https://github.com/taskforcesh/bullmq/commit/b016344caedc8915052cea43948901f3b77b6ece)) + +### Fix + +* fix(change-delay): add current time to delay (#789) fixes #787 ([`4a70def`](https://github.com/taskforcesh/bullmq/commit/4a70def6e85cf9ea384ec5f38c3c4f83e4eb523c)) + +### Refactor + +* refactor(reprocess-job): change error messages (#768) ([`5cbd3b6`](https://github.com/taskforcesh/bullmq/commit/5cbd3b6aea64fb1eeee6a8d5c51797eb02b63d73)) + +### Style + +* style: remove unused variables (#771) ([`044250b`](https://github.com/taskforcesh/bullmq/commit/044250b370565cfbcd6f9628e3c4e289dd5937e9)) + + +## v1.48.2 (2021-09-24) + +### Chore + +* chore(release): 1.48.2 [skip ci] + +## [1.48.2](https://github.com/taskforcesh/bullmq/compare/v1.48.1...v1.48.2) (2021-09-24) + +### Performance Improvements + +* **obliterate:** do not pass unused variables ([#766](https://github.com/taskforcesh/bullmq/issues/766)) ([e9abfa6](https://github.com/taskforcesh/bullmq/commit/e9abfa6f821064901770a9b72adfb00cac96154c)) ([`1b5317a`](https://github.com/taskforcesh/bullmq/commit/1b5317a5f5488fefe367550c518e5c2584ced300)) + +### Performance + +* perf(obliterate): do not pass unused variables (#766) ([`e9abfa6`](https://github.com/taskforcesh/bullmq/commit/e9abfa6f821064901770a9b72adfb00cac96154c)) + + +## v1.48.1 (2021-09-23) + +### Chore + +* chore(release): 1.48.1 [skip ci] + +## [1.48.1](https://github.com/taskforcesh/bullmq/compare/v1.48.0...v1.48.1) (2021-09-23) + +### Bug Fixes + +* **obliterate:** consider dependencies and processed keys ([#765](https://github.com/taskforcesh/bullmq/issues/765)) ([fd6bad8](https://github.com/taskforcesh/bullmq/commit/fd6bad8c7444c21e6f1d67611a28f8e4aace293d)) ([`1fbb80d`](https://github.com/taskforcesh/bullmq/commit/1fbb80ded6dd22b755757b4699667351eda0b106)) + +### Fix + +* fix(obliterate): consider dependencies and processed keys (#765) ([`fd6bad8`](https://github.com/taskforcesh/bullmq/commit/fd6bad8c7444c21e6f1d67611a28f8e4aace293d)) + + +## v1.48.0 (2021-09-23) + +### Chore + +* chore(release): 1.48.0 [skip ci] + +# [1.48.0](https://github.com/taskforcesh/bullmq/compare/v1.47.2...v1.48.0) (2021-09-23) + +### Features + +* **queue:** add drain lua script ([#764](https://github.com/taskforcesh/bullmq/issues/764)) ([2daa698](https://github.com/taskforcesh/bullmq/commit/2daa698a7cc5dc8a6cd087b2d29356bc02fb4944)) ([`4c91ad5`](https://github.com/taskforcesh/bullmq/commit/4c91ad549830ccf10d0dc599aabbeaf3466fdb26)) + +### Feature + +* feat(queue): add drain lua script (#764) ([`2daa698`](https://github.com/taskforcesh/bullmq/commit/2daa698a7cc5dc8a6cd087b2d29356bc02fb4944)) + + +## v1.47.2 (2021-09-22) + +### Chore + +* chore(release): 1.47.2 [skip ci] + +## [1.47.2](https://github.com/taskforcesh/bullmq/compare/v1.47.1...v1.47.2) (2021-09-22) + +### Bug Fixes + +* **flow-producer:** use default prefix in add method ([#763](https://github.com/taskforcesh/bullmq/issues/763)) fixes [#762](https://github.com/taskforcesh/bullmq/issues/762) ([fffdb55](https://github.com/taskforcesh/bullmq/commit/fffdb55f37917776494a4471673ef4564e0faab5)) ([`375f7c1`](https://github.com/taskforcesh/bullmq/commit/375f7c18432b36802bc521bfa78855278a834963)) + +* chore(deps): bump semver-regex from 3.1.2 to 3.1.3 (#761) ([`4586cda`](https://github.com/taskforcesh/bullmq/commit/4586cdab0ca52f28e12449ff6f82f7c6124a2c12)) + +### Documentation + +* docs(feature-comparison): fix parent-child checks (#759) ([`b2c6bcc`](https://github.com/taskforcesh/bullmq/commit/b2c6bccfabc265c3ed2beb1d677933c67177e90f)) + +* docs(readme): add feature comparison (#758) ([`60b608d`](https://github.com/taskforcesh/bullmq/commit/60b608db589da0fa82f8edce388525c3d4bca9a8)) + +### Fix + +* fix(flow-producer): use default prefix in add method (#763) fixes #762 ([`fffdb55`](https://github.com/taskforcesh/bullmq/commit/fffdb55f37917776494a4471673ef4564e0faab5)) + +### Test + +* test(compat): fix flaky test when global drained event is emitted (#760) ([`fb25aee`](https://github.com/taskforcesh/bullmq/commit/fb25aee5c17a139d54b7b99549a853d422d6a078)) + + +## v1.47.1 (2021-09-17) + +### Chore + +* chore(release): 1.47.1 [skip ci] + +## [1.47.1](https://github.com/taskforcesh/bullmq/compare/v1.47.0...v1.47.1) (2021-09-17) + +### Bug Fixes + +* **running:** move running attribute before first async call ([#756](https://github.com/taskforcesh/bullmq/issues/756)) ([f7f0660](https://github.com/taskforcesh/bullmq/commit/f7f066076bbe6cbcbf716ae622d55c6c1ae9b270)) ([`9c2dfab`](https://github.com/taskforcesh/bullmq/commit/9c2dfab132eb3366af69a5c2f1585d4b7150eadb)) + +### Documentation + +* docs(prioritized): rename file (#757) ([`31ba505`](https://github.com/taskforcesh/bullmq/commit/31ba5055983c085019f96c8223fbffe22b88df1c)) + +### Fix + +* fix(running): move running attribute before first async call (#756) ([`f7f0660`](https://github.com/taskforcesh/bullmq/commit/f7f066076bbe6cbcbf716ae622d55c6c1ae9b270)) + + +## v1.47.0 (2021-09-16) + +### Chore + +* chore(release): 1.47.0 [skip ci] + +# [1.47.0](https://github.com/taskforcesh/bullmq/compare/v1.46.7...v1.47.0) (2021-09-16) + +### Features + +* **queue-events:** launch without launching process ([#750](https://github.com/taskforcesh/bullmq/issues/750)) ([23a2360](https://github.com/taskforcesh/bullmq/commit/23a23606e727ca13b24924a1e867c6b557d6a09d)) ([`7600f1b`](https://github.com/taskforcesh/bullmq/commit/7600f1b4f9c78e0933ab25f6d285381443c07c91)) + +### Feature + +* feat(queue-events): launch without launching process (#750) ([`23a2360`](https://github.com/taskforcesh/bullmq/commit/23a23606e727ca13b24924a1e867c6b557d6a09d)) + + +## v1.46.7 (2021-09-16) + +### Chore + +* chore(release): 1.46.7 [skip ci] + +## [1.46.7](https://github.com/taskforcesh/bullmq/compare/v1.46.6...v1.46.7) (2021-09-16) + +### Bug Fixes + +* **wait-for-job:** add catch block and emit error ([#749](https://github.com/taskforcesh/bullmq/issues/749)) ([b407f9a](https://github.com/taskforcesh/bullmq/commit/b407f9ac429c825984856eebca58bbfd16feb9d3)) ([`e1cd8bb`](https://github.com/taskforcesh/bullmq/commit/e1cd8bb2b69cb3efff9e6f379462bbefe4e0cf1d)) + +### Documentation + +* docs(retry): increase awareness of needing QueueScheduler instance (#747) ([`99f2efb`](https://github.com/taskforcesh/bullmq/commit/99f2efbca906cb0de4b7673a2886e02423c084c6)) + +### Fix + +* fix(wait-for-job): add catch block and emit error (#749) ([`b407f9a`](https://github.com/taskforcesh/bullmq/commit/b407f9ac429c825984856eebca58bbfd16feb9d3)) + +### Refactor + +* refactor(utils): add handleError (#752) ([`e07afb3`](https://github.com/taskforcesh/bullmq/commit/e07afb3f3873e5d517b4db8737b5af2a9a7f22ad)) + + +## v1.46.6 (2021-09-15) + +### Chore + +* chore(release): 1.46.6 [skip ci] + +## [1.46.6](https://github.com/taskforcesh/bullmq/compare/v1.46.5...v1.46.6) (2021-09-15) + +### Bug Fixes + +* **connection:** fail only if redis connection does not recover ([#751](https://github.com/taskforcesh/bullmq/issues/751)) ([8d59ced](https://github.com/taskforcesh/bullmq/commit/8d59ced27831a636f40ed4233eba3d4ac0654534)) ([`8dc5463`](https://github.com/taskforcesh/bullmq/commit/8dc54632c55db21231a359f53c43bd89d8db18f3)) + +### Fix + +* fix(connection): fail only if redis connection does not recover (#751) ([`8d59ced`](https://github.com/taskforcesh/bullmq/commit/8d59ced27831a636f40ed4233eba3d4ac0654534)) + + +## v1.46.5 (2021-09-12) + +### Chore + +* chore(release): 1.46.5 [skip ci] + +## [1.46.5](https://github.com/taskforcesh/bullmq/compare/v1.46.4...v1.46.5) (2021-09-12) + +### Bug Fixes + +* **is-finished:** reject when missing job key ([#746](https://github.com/taskforcesh/bullmq/issues/746)) fixes [#85](https://github.com/taskforcesh/bullmq/issues/85) ([bd49bd2](https://github.com/taskforcesh/bullmq/commit/bd49bd20492676559072e5e16adb6d4e47afb22b)) ([`4b80319`](https://github.com/taskforcesh/bullmq/commit/4b8031963b745334e53e492ae9b028173bb3d0be)) + +### Fix + +* fix(is-finished): reject when missing job key (#746) fixes #85 ([`bd49bd2`](https://github.com/taskforcesh/bullmq/commit/bd49bd20492676559072e5e16adb6d4e47afb22b)) + + +## v1.46.4 (2021-09-10) + +### Chore + +* chore(release): 1.46.4 [skip ci] + +## [1.46.4](https://github.com/taskforcesh/bullmq/compare/v1.46.3...v1.46.4) (2021-09-10) + +### Bug Fixes + +* **wait-until-finished:** isFinished return failedReason or returnValue ([#743](https://github.com/taskforcesh/bullmq/issues/743)) fixes [#555](https://github.com/taskforcesh/bullmq/issues/555) ([63acae9](https://github.com/taskforcesh/bullmq/commit/63acae98cb083ec978ea17833819d1a21086be33)) ([`1c92551`](https://github.com/taskforcesh/bullmq/commit/1c92551fb6d7dcbca2d12fb8576cd8988cdccb55)) + +### Fix + +* fix(wait-until-finished): isFinished return failedReason or returnValue (#743) fixes #555 ([`63acae9`](https://github.com/taskforcesh/bullmq/commit/63acae98cb083ec978ea17833819d1a21086be33)) + + +## v1.46.3 (2021-09-08) + +### Chore + +* chore(release): 1.46.3 [skip ci] + +## [1.46.3](https://github.com/taskforcesh/bullmq/compare/v1.46.2...v1.46.3) (2021-09-08) + +### Bug Fixes + +* **add-job:** throw error when missing parent key ([#739](https://github.com/taskforcesh/bullmq/issues/739)) ([d751070](https://github.com/taskforcesh/bullmq/commit/d751070f4ab6553c782341270574ccd253d309b8)) ([`1fab5c2`](https://github.com/taskforcesh/bullmq/commit/1fab5c28c6eace6505b271bb00133f8c59be08ce)) + +### Fix + +* fix(add-job): throw error when missing parent key (#739) ([`d751070`](https://github.com/taskforcesh/bullmq/commit/d751070f4ab6553c782341270574ccd253d309b8)) + +### Test + +* test: cover more lines for coverage (#741) ([`8383b14`](https://github.com/taskforcesh/bullmq/commit/8383b14c6185fb498a110bf61079bdb630345f6d)) + +* test(nyc): watch src files only (#740) ([`d439631`](https://github.com/taskforcesh/bullmq/commit/d4396318bddac6521cbafed8d7cc87671c92827d)) + + +## v1.46.2 (2021-09-07) + +### Chore + +* chore(release): 1.46.2 [skip ci] + +## [1.46.2](https://github.com/taskforcesh/bullmq/compare/v1.46.1...v1.46.2) (2021-09-07) + +### Bug Fixes + +* **queue-events:** duplicate connection ([#733](https://github.com/taskforcesh/bullmq/issues/733)) fixes [#726](https://github.com/taskforcesh/bullmq/issues/726) ([e2531ed](https://github.com/taskforcesh/bullmq/commit/e2531ed0c1dc195f210f8cf996e9ffe04c9e4b7d)) ([`8a677ef`](https://github.com/taskforcesh/bullmq/commit/8a677ef958950ca392d97fa4904ea37023605eab)) + +### Fix + +* fix(queue-events): duplicate connection (#733) fixes #726 ([`e2531ed`](https://github.com/taskforcesh/bullmq/commit/e2531ed0c1dc195f210f8cf996e9ffe04c9e4b7d)) + +### Test + +* test: improve some types (#736) ([`ce0646c`](https://github.com/taskforcesh/bullmq/commit/ce0646c578e58003959c2a2a4b2f98d88bed3ebf)) + + +## v1.46.1 (2021-09-06) + +### Chore + +* chore(release): 1.46.1 [skip ci] + +## [1.46.1](https://github.com/taskforcesh/bullmq/compare/v1.46.0...v1.46.1) (2021-09-06) + +### Bug Fixes + +* **redis-connection:** improve closing fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([9d8eb03](https://github.com/taskforcesh/bullmq/commit/9d8eb0306ef5e63c9d34ffd5c96fc15491da639d)) ([`ef9bcc3`](https://github.com/taskforcesh/bullmq/commit/ef9bcc3c80dc3c8705b63d9457397b368d5c611b)) + +### Fix + +* fix(redis-connection): improve closing fixes #721 ([`9d8eb03`](https://github.com/taskforcesh/bullmq/commit/9d8eb0306ef5e63c9d34ffd5c96fc15491da639d)) + +### Test + +* test(flow-producer): add test case using priority option (#735) ([`88c374a`](https://github.com/taskforcesh/bullmq/commit/88c374a10f6eb5cba7d7aa215a3397491f8be697)) + + +## v1.46.0 (2021-09-02) + +### Chore + +* chore(release): 1.46.0 [skip ci] + +# [1.46.0](https://github.com/taskforcesh/bullmq/compare/v1.45.0...v1.46.0) (2021-09-02) + +### Features + +* **worker:** launch without launching process ([#724](https://github.com/taskforcesh/bullmq/issues/724)) ([af689e4](https://github.com/taskforcesh/bullmq/commit/af689e4e3945b9bc68bfc08c8f0ad57644206c5b)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) ([`543cae0`](https://github.com/taskforcesh/bullmq/commit/543cae02b5a98a166a942f1f977e02aa0b75058e)) + +### Feature + +* feat(worker): launch without launching process (#724) + +re #436 ([`af689e4`](https://github.com/taskforcesh/bullmq/commit/af689e4e3945b9bc68bfc08c8f0ad57644206c5b)) + + +## v1.45.0 (2021-09-02) + +### Chore + +* chore(release): 1.45.0 [skip ci] + +# [1.45.0](https://github.com/taskforcesh/bullmq/compare/v1.44.3...v1.45.0) (2021-09-02) + +### Features + +* **queue-scheduler:** launch without launching process ([#729](https://github.com/taskforcesh/bullmq/issues/729)) ([f1932a7](https://github.com/taskforcesh/bullmq/commit/f1932a789af13da9b705a72d6f633f984a218862)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) ([`f13757c`](https://github.com/taskforcesh/bullmq/commit/f13757ca06daa52402371fb2a458a990503c0bff)) + +### Documentation + +* docs(changelog): fix format (#732) ([`45aaa39`](https://github.com/taskforcesh/bullmq/commit/45aaa39241be269fcd68fd59632f47b0b072e80b)) + +### Feature + +* feat(queue-scheduler): launch without launching process (#729) + +re #436 ([`f1932a7`](https://github.com/taskforcesh/bullmq/commit/f1932a789af13da9b705a72d6f633f984a218862)) + + +## v1.44.3 (2021-09-02) + +### Chore + +* chore(release): 1.44.3 [skip ci] + +## [1.44.3](https://github.com/taskforcesh/bullmq/compare/v1.44.2...v1.44.3) (2021-09-02) + +### Bug Fixes + +* **queuescheduler:** handle shared connections fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([32a2b2e](https://github.com/taskforcesh/bullmq/commit/32a2b2eccfa3ba1516eacd71e334cae6c787ce4c)) ([`4b551fa`](https://github.com/taskforcesh/bullmq/commit/4b551faaa5b02c572e4f6d36c5d2c2b8c79ff954)) + +* chore(deps): bump tar from 6.1.3 to 6.1.11 (#728) ([`e4c37fe`](https://github.com/taskforcesh/bullmq/commit/e4c37fec13e85ea69cd2051ed56f03942e4e10e8)) + +* chore(deps): bump path-parse from 1.0.6 to 1.0.7 (#680) ([`a1845fc`](https://github.com/taskforcesh/bullmq/commit/a1845fcc393ef607401ff72a98916e571c5e33df)) + +### Fix + +* fix(queuescheduler): handle shared connections fixes #721 ([`32a2b2e`](https://github.com/taskforcesh/bullmq/commit/32a2b2eccfa3ba1516eacd71e334cae6c787ce4c)) + +### Refactor + +* refactor(error-codes): add error-codes enum (#716) ([`3070102`](https://github.com/taskforcesh/bullmq/commit/30701023b05d8cd11a1c40dc4098dee882c341d6)) + +### Test + +* test: close instances (#730) ([`f5ff4a7`](https://github.com/taskforcesh/bullmq/commit/f5ff4a756f438676471f06878bcc9c12bf33ba02)) + +* test: add missing close calls(#725) ([`df27ae9`](https://github.com/taskforcesh/bullmq/commit/df27ae9d11630c4e817c098e5bff70cffcdf5b67)) + +* test(repeat): restore test (#723) ([`ceaa7de`](https://github.com/taskforcesh/bullmq/commit/ceaa7dece47bbef99c6e289bbfed41860991b4c9)) + + +## v1.44.2 (2021-08-29) + +### Chore + +* chore(release): 1.44.2 [skip ci] + +## [1.44.2](https://github.com/taskforcesh/bullmq/compare/v1.44.1...v1.44.2) (2021-08-29) + +### Bug Fixes + +* **worker:** use spread operator in processing map keys ([#720](https://github.com/taskforcesh/bullmq/issues/720)) ([32f1e57](https://github.com/taskforcesh/bullmq/commit/32f1e570a9a3369174a228f729f1d1330dcb6965)) ([`c27b97f`](https://github.com/taskforcesh/bullmq/commit/c27b97f5200481b70a6c05131d2fc34db2425d45)) + +### Fix + +* fix(worker): use spread operator in processing map keys (#720) ([`32f1e57`](https://github.com/taskforcesh/bullmq/commit/32f1e570a9a3369174a228f729f1d1330dcb6965)) + +### Test + +* test(repeat): restore skipped test case (#719) ([`d8b1063`](https://github.com/taskforcesh/bullmq/commit/d8b106350ed51a0bb36bb568557a16132aa9e841)) + +* test: use rejectedWith (#718) ([`3c170f3`](https://github.com/taskforcesh/bullmq/commit/3c170f3cc46ba33ea27c9c308929314d19c4fa9d)) + + +## v1.44.1 (2021-08-29) + +### Chore + +* chore(release): 1.44.1 [skip ci] + +## [1.44.1](https://github.com/taskforcesh/bullmq/compare/v1.44.0...v1.44.1) (2021-08-29) + +### Bug Fixes + +* **retry:** throw error when retry non failed job ([#717](https://github.com/taskforcesh/bullmq/issues/717)) ([bb9b192](https://github.com/taskforcesh/bullmq/commit/bb9b192e9a1a4f3c25374fcb8c0fb2159eb3f779)) ([`2a8c476`](https://github.com/taskforcesh/bullmq/commit/2a8c4766c674dd132f7592cc9b0b4213b9f33611)) + +* chore(deps): bump normalize-url from 6.0.0 to 6.0.1 (#587) ([`1e7cef3`](https://github.com/taskforcesh/bullmq/commit/1e7cef36c5ae7d93c86b49e0aa9484dfc470247a)) + +* chore(deps): upgrade dependencies (#713) ([`ae5cafd`](https://github.com/taskforcesh/bullmq/commit/ae5cafd987d1d494944c850c6317db46292f5a05)) + +### Documentation + +* docs(prioritized): fix typo (#715) ([`919994c`](https://github.com/taskforcesh/bullmq/commit/919994cd4d200e83d77950ca94a44303e634a81a)) + +### Fix + +* fix(retry): throw error when retry non failed job (#717) ([`bb9b192`](https://github.com/taskforcesh/bullmq/commit/bb9b192e9a1a4f3c25374fcb8c0fb2159eb3f779)) + +### Test + +* test: clean redis db after finishing test cases (#714) ([`54f2f2c`](https://github.com/taskforcesh/bullmq/commit/54f2f2c8517ae5484cbcbb472a6ab9ad9ffa4d61)) + + +## v1.44.0 (2021-08-27) + +### Chore + +* chore(release): 1.44.0 [skip ci] + +# [1.44.0](https://github.com/taskforcesh/bullmq/compare/v1.43.0...v1.44.0) (2021-08-27) + +### Features + +* **queue-events:** add waiting-children event ([#704](https://github.com/taskforcesh/bullmq/issues/704)) ([18b0b79](https://github.com/taskforcesh/bullmq/commit/18b0b7954313274a61fcc058380bfb9d682c059d)) ([`a41952f`](https://github.com/taskforcesh/bullmq/commit/a41952fa8a17441275dd4bf1c675e8a81b4f54a0)) + +### Documentation + +* docs(changelog): fix format (#712) ([`a1c8e00`](https://github.com/taskforcesh/bullmq/commit/a1c8e001431dc516ab74c1c8b054f15dd77634fc)) + +* docs(queue-events): update progress event typing (#618) ([`8c2f253`](https://github.com/taskforcesh/bullmq/commit/8c2f25382c3673a280210eca487517128279b950)) + +### Feature + +* feat(queue-events): add waiting-children event (#704) ([`18b0b79`](https://github.com/taskforcesh/bullmq/commit/18b0b7954313274a61fcc058380bfb9d682c059d)) + +### Style + +* style(tsdoc): add eslint-plugin-tsdoc ([`25bca3c`](https://github.com/taskforcesh/bullmq/commit/25bca3c6dda8c17ef7172ad1045a4f4de18ce7ab)) + +### Test + +* test(queue-events): add test case when progress receive object ([`c18563f`](https://github.com/taskforcesh/bullmq/commit/c18563f8b670347f0b890f190ab74cabd7dd78cc)) + +* test(repeat): add test when removeOnComplete is true + +re #515 ([`265ff3f`](https://github.com/taskforcesh/bullmq/commit/265ff3fbc5811f2911a1ebafae1825869f9e9283)) + +### Unknown + +* GitBook: [master] one page modified ([`031a3ff`](https://github.com/taskforcesh/bullmq/commit/031a3ff0a4a709733320b6eddd3e26cc2c4c18bc)) + +* GitBook: [master] 3 pages modified ([`074e7a7`](https://github.com/taskforcesh/bullmq/commit/074e7a7ab7c58a994293e73c6faaf2c37d21efc9)) + + +## v1.43.0 (2021-08-25) + +### Chore + +* chore(release): 1.43.0 [skip ci] + +# [1.43.0](https://github.com/taskforcesh/bullmq/compare/v1.42.1...v1.43.0) (2021-08-25) + +### Features + +* **events:** add added event when job is created ([#699](https://github.com/taskforcesh/bullmq/issues/699)) ([f533cc5](https://github.com/taskforcesh/bullmq/commit/f533cc55a43cf6ea78a60e85102f15b1c1ff69a0)) ([`dd7efc3`](https://github.com/taskforcesh/bullmq/commit/dd7efc3390e4a9a90f1b3ee0c3e3c74deb1f0369)) + +* chore: delete comment ([`7df0461`](https://github.com/taskforcesh/bullmq/commit/7df0461b8de3e761b51321ca6de29a26b19e13d2)) + +### Documentation + +* docs(queue): improved queue docs ([`8cdd116`](https://github.com/taskforcesh/bullmq/commit/8cdd1162fdae8c94dead9f2abfbbfb2cf79d416f)) + +* docs(queue-events): improved queue-events docs ([`bca894a`](https://github.com/taskforcesh/bullmq/commit/bca894acdda6c58a0ba0b00ec4ad97fc7c24de1f)) + +### Feature + +* feat(events): add added event when job is created (#699) ([`f533cc5`](https://github.com/taskforcesh/bullmq/commit/f533cc55a43cf6ea78a60e85102f15b1c1ff69a0)) + +### Test + +* test(mocha): add setup file ([`1324848`](https://github.com/taskforcesh/bullmq/commit/1324848afbfaf7d3fed47ea23da3b519da222b9a)) + + +## v1.42.1 (2021-08-23) + +### Chore + +* chore(release): 1.42.1 [skip ci] + +## [1.42.1](https://github.com/taskforcesh/bullmq/compare/v1.42.0...v1.42.1) (2021-08-23) + +### Bug Fixes + +* protect emit calls with throw/catch ([79f879b](https://github.com/taskforcesh/bullmq/commit/79f879bf1bca1acea19485def361cc36f1d13b7e)) ([`55606f7`](https://github.com/taskforcesh/bullmq/commit/55606f79cc6accf07d45fe2c4ffa81817108d7bc)) + +* chore: use spread operator on error emit ([`d911a49`](https://github.com/taskforcesh/bullmq/commit/d911a49f8d160a9ada926aafe101b13a4f61b2b4)) + +* chore: throw error if missing lua files ([`0ef1671`](https://github.com/taskforcesh/bullmq/commit/0ef16719d02cacdb2bf6834f7cdd9f901bb568c2)) + +### Documentation + +* docs(flow-producer): add NodeOpts documentation ([`b2bcac6`](https://github.com/taskforcesh/bullmq/commit/b2bcac6a49f1e480c0055025a09aecdcff1923df)) + +* docs(job): apply jsdoc ([`43e0764`](https://github.com/taskforcesh/bullmq/commit/43e076468c6abb2149361344bef8b2b345f3b471)) + +### Fix + +* fix: protect emit calls with throw/catch ([`79f879b`](https://github.com/taskforcesh/bullmq/commit/79f879bf1bca1acea19485def361cc36f1d13b7e)) + +### Test + +* test(events): error event when throwing an error from another event ([`1b59884`](https://github.com/taskforcesh/bullmq/commit/1b598847f8f65dacff6c6cf7239a01eb6253a6b2)) + + +## v1.42.0 (2021-08-20) + +### Chore + +* chore(release): 1.42.0 [skip ci] + +# [1.42.0](https://github.com/taskforcesh/bullmq/compare/v1.41.0...v1.42.0) (2021-08-20) + +### Features + +* **flows:** add queuesOptions for rate limit ([#692](https://github.com/taskforcesh/bullmq/issues/692)) ([6689ec3](https://github.com/taskforcesh/bullmq/commit/6689ec3fadd21904d9935f932c047f540ed8caf0)), closes [#621](https://github.com/taskforcesh/bullmq/issues/621) ([`f1472da`](https://github.com/taskforcesh/bullmq/commit/f1472dab64c04a7db694a4af3d78f45a96d8922f)) + +### Feature + +* feat(flows): add queuesOptions for rate limit (#692) + +re #621 ([`6689ec3`](https://github.com/taskforcesh/bullmq/commit/6689ec3fadd21904d9935f932c047f540ed8caf0)) + + +## v1.41.0 (2021-08-20) + +### Chore + +* chore(release): 1.41.0 [skip ci] + +# [1.41.0](https://github.com/taskforcesh/bullmq/compare/v1.40.4...v1.41.0) (2021-08-20) + +### Features + +* **flow:** add bulk ([dc59fe6](https://github.com/taskforcesh/bullmq/commit/dc59fe62e57b6e761fe4d2ab6179a69dc4792399)) ([`874b1a4`](https://github.com/taskforcesh/bullmq/commit/874b1a48d1480ee19e57c362f978e13e9f34b1bd)) + +* chore: delete comment ([`1f6e77e`](https://github.com/taskforcesh/bullmq/commit/1f6e77e4e9c26cfa4f007fa79a3c59fce1e9bbaa)) + +* chore(flow): remove unneeded updateIds (#684) ([`1b44359`](https://github.com/taskforcesh/bullmq/commit/1b44359ca298dc5195be7046bb5a5c939c91f3cd)) + +* chore(redis): add docker-compose to support windows development ([`39d42ae`](https://github.com/taskforcesh/bullmq/commit/39d42aefd0ab940006eda05805b9039244ee685a)) + +### Documentation + +* docs: fix typo in bullmq.ratelimiteroptions.md (#683) ([`0190699`](https://github.com/taskforcesh/bullmq/commit/0190699f482705e664b9697223fca6c9fb875484)) + +* docs(redis): add redis docker-compose instructions for development ([`bee6b75`](https://github.com/taskforcesh/bullmq/commit/bee6b75e982a9b0d3857623cb8e8e3e67662b02c)) + +### Feature + +* feat(flow): add bulk ([`dc59fe6`](https://github.com/taskforcesh/bullmq/commit/dc59fe62e57b6e761fe4d2ab6179a69dc4792399)) + +### Style + +* style(lint): exclude changelog ([`995f281`](https://github.com/taskforcesh/bullmq/commit/995f28138cb9b30dd4d5fee1236230c88aed59ab)) + +### Test + +* test(rate-limit): fix another flaky test ([`24f6a8b`](https://github.com/taskforcesh/bullmq/commit/24f6a8b91f26b571b6983c099f736a3a647909b1)) + +* test(rate-limit): fix flaky test ([`bb08318`](https://github.com/taskforcesh/bullmq/commit/bb08318fa39efc3ce384828e00a84e9725e2f4af)) + +### Unknown + +* GitBook: [master] one page modified ([`443de32`](https://github.com/taskforcesh/bullmq/commit/443de325afa0cfc35f4ae3e0b0fa718dbd18f13c)) + +* GitBook: [master] 4 pages modified ([`d441c5e`](https://github.com/taskforcesh/bullmq/commit/d441c5ec2169c606141f4d80fa2d9d13fe30fca5)) + +* GitBook: [master] 39 pages modified ([`0475e6d`](https://github.com/taskforcesh/bullmq/commit/0475e6d921916385a3e8335c9fcc80cc90796e04)) + + +## v1.40.4 (2021-08-06) + +### Chore + +* chore(release): 1.40.4 [skip ci] + +## [1.40.4](https://github.com/taskforcesh/bullmq/compare/v1.40.3...v1.40.4) (2021-08-06) + +### Bug Fixes + +* **rate-limiter:** check groupKey is not undefined ([999b918](https://github.com/taskforcesh/bullmq/commit/999b91868814caf4c5c1ddee40798178b71e0ea8)) ([`76dff91`](https://github.com/taskforcesh/bullmq/commit/76dff919c89b6eef13bd3109d5b84c89436f427a)) + +### Fix + +* fix(rate-limiter): check groupKey is not undefined ([`999b918`](https://github.com/taskforcesh/bullmq/commit/999b91868814caf4c5c1ddee40798178b71e0ea8)) + +### Test + +* test(rate-limiter): add test case when missing groupKey ([`1cf58d1`](https://github.com/taskforcesh/bullmq/commit/1cf58d188f48b76f531ccc7f96736a5ce6084d7f)) + + +## v1.40.3 (2021-08-06) + +### Chore + +* chore(release): 1.40.3 [skip ci] + +## [1.40.3](https://github.com/taskforcesh/bullmq/compare/v1.40.2...v1.40.3) (2021-08-06) + +### Bug Fixes + +* **redis-connection:** add error event in waitUntilReady ([ac4101e](https://github.com/taskforcesh/bullmq/commit/ac4101e3e798110c022d6c9f10f3b98f5e86b151)) ([`40f9d14`](https://github.com/taskforcesh/bullmq/commit/40f9d14f6ff6d64664748eb723d3a827bd2de337)) + +* chore(deps): bump tar from 6.1.0 to 6.1.3 + +Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.3. +- [Release notes](https://github.com/npm/node-tar/releases) +- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md) +- [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.3) + +--- +updated-dependencies: +- dependency-name: tar + dependency-type: indirect +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`242ed66`](https://github.com/taskforcesh/bullmq/commit/242ed664fdbd3dab58a363d886b63a56bc024170)) + +### Fix + +* fix(redis-connection): add error event in waitUntilReady ([`ac4101e`](https://github.com/taskforcesh/bullmq/commit/ac4101e3e798110c022d6c9f10f3b98f5e86b151)) + +### Style + +* style: use string template ([`9872ce1`](https://github.com/taskforcesh/bullmq/commit/9872ce1c3a52bd9ff0325d9c929f5554ed260c96)) + + +## v1.40.2 (2021-08-06) + +### Chore + +* chore(release): 1.40.2 [skip ci] + +## [1.40.2](https://github.com/taskforcesh/bullmq/compare/v1.40.1...v1.40.2) (2021-08-06) + +### Bug Fixes + +* move clientCommandMessageReg to utils ([dd5d555](https://github.com/taskforcesh/bullmq/commit/dd5d5553fe768eb18b17b53c7f75e7066024e382)) ([`5a83df7`](https://github.com/taskforcesh/bullmq/commit/5a83df7fac77ee5dac4e97813f5feaaf0b3246b8)) + +### Documentation + +* docs(changelog): fix formatting ([`7a41a1c`](https://github.com/taskforcesh/bullmq/commit/7a41a1ced66dbcf3ac3c71f95d446214a51647ff)) + +### Fix + +* fix: move clientCommandMessageReg to utils ([`dd5d555`](https://github.com/taskforcesh/bullmq/commit/dd5d5553fe768eb18b17b53c7f75e7066024e382)) + +### Refactor + +* refactor: move getParentKey into utils ([`2c5baf0`](https://github.com/taskforcesh/bullmq/commit/2c5baf0cd2842ac37284fb387a78b9fe2942d2f4)) + + +## v1.40.1 (2021-07-24) + +### Chore + +* chore(release): 1.40.1 [skip ci] + +## [1.40.1](https://github.com/taskforcesh/bullmq/compare/v1.40.0...v1.40.1) (2021-07-24) + +### Bug Fixes + +* connection hangs with failed connection fixes [#656](https://github.com/taskforcesh/bullmq/issues/656) ([c465611](https://github.com/taskforcesh/bullmq/commit/c465611ed76afd2adfd0e05a8babd6e369f5c310)) ([`e2502ca`](https://github.com/taskforcesh/bullmq/commit/e2502ca390aff42d8580474376492b80a273bae3)) + +### Fix + +* fix: connection hangs with failed connection fixes #656 ([`c465611`](https://github.com/taskforcesh/bullmq/commit/c465611ed76afd2adfd0e05a8babd6e369f5c310)) + +### Refactor + +* refactor: import CONNECTION_CLOSED_ERROR_MSG from ioredis + +It's possible to import `CONNECTION_CLOSED_ERROR_MSG` from `ioredis`, but it isn't available on the main export and isn't defined in the library type declarations. ([`f217219`](https://github.com/taskforcesh/bullmq/commit/f217219bc3b37de375bf44511acdf94f85b31e32)) + + +## v1.40.0 (2021-07-22) + +### Chore + +* chore(release): 1.40.0 [skip ci] + +# [1.40.0](https://github.com/taskforcesh/bullmq/compare/v1.39.5...v1.40.0) (2021-07-22) + +### Features + +* **worker:** retry with delay errors in run loop ([409fe7f](https://github.com/taskforcesh/bullmq/commit/409fe7fc09b87b7916a3362a463bb9e0f17ecea8)) ([`a4984ee`](https://github.com/taskforcesh/bullmq/commit/a4984ee9b3afb5c999fcef6f60b07279e85770a6)) + +* chore: simplify retryIfFailed ([`3eff55b`](https://github.com/taskforcesh/bullmq/commit/3eff55b8e847db6134f7bbe5045922e59a27647a)) + +### Documentation + +* docs(worker): add more documentation to Worker methods ([`3dbe652`](https://github.com/taskforcesh/bullmq/commit/3dbe6526ad1314264f0dc722f0297c3aba38fc4e)) + +* docs: add missing changelog items ([`6e96c25`](https://github.com/taskforcesh/bullmq/commit/6e96c2566da0c9c2072aee5cbcc49b9c67907c2c)) + +* docs(changelog): change symbolic link ([`01ac146`](https://github.com/taskforcesh/bullmq/commit/01ac1462ef4cd7504b0c37e3366c8bc5c3070a2b)) + +* docs(changelog): fix config ([`a60a530`](https://github.com/taskforcesh/bullmq/commit/a60a530971cf3a810a3430ce8cd837e621ea5e47)) + +* docs: deleted uppercased CHANGELOG ([`6c7ec18`](https://github.com/taskforcesh/bullmq/commit/6c7ec18b562abb2e9646b21b05a722f2d849beb3)) + +### Feature + +* feat(worker): retry with delay errors in run loop ([`409fe7f`](https://github.com/taskforcesh/bullmq/commit/409fe7fc09b87b7916a3362a463bb9e0f17ecea8)) + + +## v1.39.5 (2021-07-21) + +### Chore + +* chore(release): 1.39.5 [skip ci] + +## [1.39.5](https://github.com/taskforcesh/bullmq/compare/v1.39.4...v1.39.5) (2021-07-21) + +### Bug Fixes + +* **move-to-finished:** remove stalled jobs when finishing ([3867126](https://github.com/taskforcesh/bullmq/commit/38671261ccc00ca7fefa677663e45a40a92df555)) ([`4000c34`](https://github.com/taskforcesh/bullmq/commit/4000c34716609ca60c324635c4850bbe5c363b90)) + +* chore: use string templates ([`01b9d45`](https://github.com/taskforcesh/bullmq/commit/01b9d45e6096c065e34415765375f81cf0d06fe6)) + +### Fix + +* fix(move-to-finished): remove stalled jobs when finishing ([`3867126`](https://github.com/taskforcesh/bullmq/commit/38671261ccc00ca7fefa677663e45a40a92df555)) + + +## v1.39.4 (2021-07-21) + +### Chore + +* chore(release): 1.39.4 [skip ci] + +## [1.39.4](https://github.com/taskforcesh/bullmq/compare/v1.39.3...v1.39.4) (2021-07-21) + +### Bug Fixes + +* **repeatable:** validate endDate when adding next repeatable job ([1324cbb](https://github.com/taskforcesh/bullmq/commit/1324cbb4effd55e98c29d95a21afca7cd045b46c)) ([`a6eefeb`](https://github.com/taskforcesh/bullmq/commit/a6eefebfb33aaa376e241c27ff242adb6a78e44b)) + +### Fix + +* fix(repeatable): validate endDate when adding next repeatable job ([`1324cbb`](https://github.com/taskforcesh/bullmq/commit/1324cbb4effd55e98c29d95a21afca7cd045b46c)) + + +## v1.39.3 (2021-07-16) + +### Chore + +* chore(release): 1.39.3 [skip ci] + +## [1.39.3](https://github.com/taskforcesh/bullmq/compare/v1.39.2...v1.39.3) (2021-07-16) + +### Bug Fixes + +* connect if redis client has status "wait" ([f711717](https://github.com/taskforcesh/bullmq/commit/f711717f56822aef43c9fd0440e30fad0876ba62)) ([`6774a2a`](https://github.com/taskforcesh/bullmq/commit/6774a2a6dd061055ef470229e43e896754e06c64)) + +### Fix + +* fix: connect if redis client has status "wait" + +Summary: When supplying your own IORedis instance and `lazyConnect` is true, the RedisConnection instance will not connect on its own because it does not check if it's `status` is "wait". While this may be intended behavior, there is no direct way to call `connect` on the duplicated Redis instance causing it to never connect and indefinitely wait until ready. ([`f711717`](https://github.com/taskforcesh/bullmq/commit/f711717f56822aef43c9fd0440e30fad0876ba62)) + + +## v1.39.2 (2021-07-15) + +### Chore + +* chore(release): 1.39.2 [skip ci] + +## [1.39.2](https://github.com/taskforcesh/bullmq/compare/v1.39.1...v1.39.2) (2021-07-15) + +### Bug Fixes + +* **queue:** ensure the Queue constructor doesn't try to set queue options if the client is closed ([b40c6eb](https://github.com/taskforcesh/bullmq/commit/b40c6eb931a71d0ae9f6454eb70d84259a6981b7)) ([`451365c`](https://github.com/taskforcesh/bullmq/commit/451365ce939e43e71fd45c3614103ad409c8a90d)) + +### Fix + +* fix(queue): ensure the Queue constructor doesn't try to set queue options if the client is closed + +In my app we disconnect queues sometimes quite quickly after constructing them, and see this error every so often in our CI logs: + +``` +/app/node_modules/bullmq/node_modules/ioredis/built/redis/index.js:620 + command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG)); + ^ +Error: Connection is closed. + at Redis.sendCommand (/app/node_modules/bullmq/node_modules/ioredis/built/redis/index.js:620:24) + at Redis.hset (/app/node_modules/bullmq/node_modules/ioredis/built/commander.js:111:25) + at /app/node_modules/bullmq/src/classes/queue.ts:29:14 +``` + +I am not exactly sure why it only happens sometimes but not others, but regardless, I think it's a good idea not to try to run the floating `hset` in the queue constructor if the client has been closed. This prevents that by first checking if the client has been closed before doing this floating work. ([`b40c6eb`](https://github.com/taskforcesh/bullmq/commit/b40c6eb931a71d0ae9f6454eb70d84259a6981b7)) + + +## v1.39.1 (2021-07-15) + +### Chore + +* chore(release): 1.39.1 [skip ci] + +## [1.39.1](https://github.com/taskforcesh/bullmq/compare/v1.39.0...v1.39.1) (2021-07-15) + +### Bug Fixes + +* **sandbox:** use updateProgress method name ([27d62c3](https://github.com/taskforcesh/bullmq/commit/27d62c32b2fac091b2700d6077de593c9fda4c22)) ([`a3bdce2`](https://github.com/taskforcesh/bullmq/commit/a3bdce292486b983305e6e324427adee9d4199ef)) + +### Fix + +* fix(sandbox): use updateProgress method name ([`27d62c3`](https://github.com/taskforcesh/bullmq/commit/27d62c32b2fac091b2700d6077de593c9fda4c22)) + +### Unknown + +* GitBook: [master] one page modified ([`7299935`](https://github.com/taskforcesh/bullmq/commit/72999351fedb5edb0ea6742e1cb7610e9cfff406)) + +* GitBook: [master] 8 pages modified ([`c37b009`](https://github.com/taskforcesh/bullmq/commit/c37b0092cd2842a4479fc0726e79eadea39f6ce2)) + + +## v1.39.0 (2021-07-13) + +### Chore + +* chore(release): 1.39.0 [skip ci] + +# [1.39.0](https://github.com/taskforcesh/bullmq/compare/v1.38.1...v1.39.0) (2021-07-13) + +### Features + +* **worker+scheduler:** add a "running" attribute for healthchecking ([aae358e](https://github.com/taskforcesh/bullmq/commit/aae358e067a0b6f20124751cffcdeaebac6eb7fd)) ([`c718d36`](https://github.com/taskforcesh/bullmq/commit/c718d365d0a1882154130d096988f3294fe8c66f)) + +### Feature + +* feat(worker+scheduler): add a "running" attribute for healthchecking ([`aae358e`](https://github.com/taskforcesh/bullmq/commit/aae358e067a0b6f20124751cffcdeaebac6eb7fd)) + + +## v1.38.1 (2021-07-12) + +### Chore + +* chore(release): 1.38.1 [skip ci] + +## [1.38.1](https://github.com/taskforcesh/bullmq/compare/v1.38.0...v1.38.1) (2021-07-12) + +### Bug Fixes + +* **reprocess:** do not store job.id in added list ([9c0605e](https://github.com/taskforcesh/bullmq/commit/9c0605e10f0bbdce94153d3f318d56c23bfd3269)) ([`9a4e496`](https://github.com/taskforcesh/bullmq/commit/9a4e496489b292821c746d14f413aff25f134bfd)) + +### Fix + +* fix(reprocess): do not store job.id in added list ([`9c0605e`](https://github.com/taskforcesh/bullmq/commit/9c0605e10f0bbdce94153d3f318d56c23bfd3269)) + + +## v1.38.0 (2021-07-12) + +### Chore + +* chore(release): 1.38.0 [skip ci] + +# [1.38.0](https://github.com/taskforcesh/bullmq/compare/v1.37.1...v1.38.0) (2021-07-12) + +### Features + +* **queue:** add missing events typings ([b42e78c](https://github.com/taskforcesh/bullmq/commit/b42e78c36cb6a6579a4c7cce1d7e969b230ff5b6)) ([`c234af2`](https://github.com/taskforcesh/bullmq/commit/c234af2ae548c4bed6ed6553a368c555d65b249e)) + +### Feature + +* feat(queue): add missing events typings ([`b42e78c`](https://github.com/taskforcesh/bullmq/commit/b42e78c36cb6a6579a4c7cce1d7e969b230ff5b6)) + + +## v1.37.1 (2021-07-02) + +### Chore + +* chore(release): 1.37.1 [skip ci] + +## [1.37.1](https://github.com/taskforcesh/bullmq/compare/v1.37.0...v1.37.1) (2021-07-02) + +### Bug Fixes + +* **stalled-jobs:** move stalled jobs to wait in batches ([a23fcb8](https://github.com/taskforcesh/bullmq/commit/a23fcb82d4ca20cbc4b8cd8b544b2d2eaddd86c3)), closes [#422](https://github.com/taskforcesh/bullmq/issues/422) ([`ff8cde6`](https://github.com/taskforcesh/bullmq/commit/ff8cde6cb8ed13d6bca19802348979caa3669ee6)) + +### Fix + +* fix(stalled-jobs): move stalled jobs to wait in batches + +re #422 ([`a23fcb8`](https://github.com/taskforcesh/bullmq/commit/a23fcb82d4ca20cbc4b8cd8b544b2d2eaddd86c3)) + + +## v1.37.0 (2021-06-30) + +### Chore + +* chore(release): 1.37.0 [skip ci] + +# [1.37.0](https://github.com/taskforcesh/bullmq/compare/v1.36.1...v1.37.0) (2021-06-30) + +### Features + +* **job:** add changeDelay method for delayed jobs ([f0a9f9c](https://github.com/taskforcesh/bullmq/commit/f0a9f9c6479062413abc0ac9a6f744329571a618)) ([`57f95e0`](https://github.com/taskforcesh/bullmq/commit/57f95e078eb8176973eea0670c56c9f2e3ec524c)) + +* chore(deps): add commitizen + +this is a helper for semantic-release commit messages ([`eacd59b`](https://github.com/taskforcesh/bullmq/commit/eacd59bd67b7c356614d9acd2cc59a8b92f9b396)) + +### Documentation + +* docs: remove poll ([`990497a`](https://github.com/taskforcesh/bullmq/commit/990497a8c427b4804c8c1fcccf23f213ee4bb047)) + +* docs(contributing): rephrase some sections ([`16529c2`](https://github.com/taskforcesh/bullmq/commit/16529c2a9fb5df5cffa02106ccc631ac16e43ae4)) + +* docs(readme): add contributing reference ([`c7bc38b`](https://github.com/taskforcesh/bullmq/commit/c7bc38b47f8e8a74a3c5348dd987baa3effbd048)) + +### Feature + +* feat(job): add changeDelay method for delayed jobs ([`f0a9f9c`](https://github.com/taskforcesh/bullmq/commit/f0a9f9c6479062413abc0ac9a6f744329571a618)) + + +## v1.36.1 (2021-06-22) + +### Chore + +* chore(release): 1.36.1 [skip ci] + +## [1.36.1](https://github.com/taskforcesh/bullmq/compare/v1.36.0...v1.36.1) (2021-06-22) + +### Bug Fixes + +* **worker:** change active event typing ([220b4f6](https://github.com/taskforcesh/bullmq/commit/220b4f619b30a8f04979e9abd0139e46d89b424d)) ([`5bed98a`](https://github.com/taskforcesh/bullmq/commit/5bed98aa4204d6e6cf7d17233b6ea2d4ab9fcb3c)) + +### Fix + +* fix(worker): change active event typing ([`220b4f6`](https://github.com/taskforcesh/bullmq/commit/220b4f619b30a8f04979e9abd0139e46d89b424d)) + + +## v1.36.0 (2021-06-20) + +### Chore + +* chore(release): 1.36.0 [skip ci] + +# [1.36.0](https://github.com/taskforcesh/bullmq/compare/v1.35.0...v1.36.0) (2021-06-20) + +### Bug Fixes + +* **queue-events:** fix drained typing ([9cf711d](https://github.com/taskforcesh/bullmq/commit/9cf711d4d4e7d8214dfd93a243c35d0bf135cdaf)) + +### Features + +* **worker:** add active event typing ([5508cdf](https://github.com/taskforcesh/bullmq/commit/5508cdf7cf372ae2f4af0ef576016eb901580671)) +* **worker:** add progress event typing ([119cb7c](https://github.com/taskforcesh/bullmq/commit/119cb7cd7a91c0f1866f5957faf2850afadbe709)) ([`8d40ddb`](https://github.com/taskforcesh/bullmq/commit/8d40ddbaf1f48dc08e459e085fbe196361bba9a3)) + +### Documentation + +* docs: add keywords ([`071fec2`](https://github.com/taskforcesh/bullmq/commit/071fec2eae89fbb347dc9f51eac0a357ae509f49)) + +### Feature + +* feat(worker): add active event typing ([`5508cdf`](https://github.com/taskforcesh/bullmq/commit/5508cdf7cf372ae2f4af0ef576016eb901580671)) + +* feat(worker): add progress event typing ([`119cb7c`](https://github.com/taskforcesh/bullmq/commit/119cb7cd7a91c0f1866f5957faf2850afadbe709)) + +### Fix + +* fix(queue-events): fix drained typing ([`9cf711d`](https://github.com/taskforcesh/bullmq/commit/9cf711d4d4e7d8214dfd93a243c35d0bf135cdaf)) + + +## v1.35.0 (2021-06-19) + +### Chore + +* chore(release): 1.35.0 [skip ci] + +# [1.35.0](https://github.com/taskforcesh/bullmq/compare/v1.34.2...v1.35.0) (2021-06-19) + +### Features + +* **worker:** add drained event typing ([ed5f315](https://github.com/taskforcesh/bullmq/commit/ed5f3155415693d2a6dbfb779397d53d74b704e2)) ([`499fe50`](https://github.com/taskforcesh/bullmq/commit/499fe5088aba2f265213b730fd79f3ad6f63b1b9)) + +### Feature + +* feat(worker): add drained event typing ([`ed5f315`](https://github.com/taskforcesh/bullmq/commit/ed5f3155415693d2a6dbfb779397d53d74b704e2)) + + +## v1.34.2 (2021-06-18) + +### Chore + +* chore(release): 1.34.2 [skip ci] + +## [1.34.2](https://github.com/taskforcesh/bullmq/compare/v1.34.1...v1.34.2) (2021-06-18) + +### Bug Fixes + +* **worker:** await for processing functions ([0566804](https://github.com/taskforcesh/bullmq/commit/056680470283f134b447a8ba39afa29e1e113585)) ([`4882e01`](https://github.com/taskforcesh/bullmq/commit/4882e01379efad9b3fe7bff48bb7fbe70f115873)) + +### Fix + +* fix(worker): await for processing functions ([`0566804`](https://github.com/taskforcesh/bullmq/commit/056680470283f134b447a8ba39afa29e1e113585)) + + +## v1.34.1 (2021-06-18) + +### Chore + +* chore(release): 1.34.1 [skip ci] + +## [1.34.1](https://github.com/taskforcesh/bullmq/compare/v1.34.0...v1.34.1) (2021-06-18) + +### Bug Fixes + +* **redis-connection:** remove error event listener from client ([2d70fe7](https://github.com/taskforcesh/bullmq/commit/2d70fe7cc7d43673674ec2ba0204c10661b34e95)) ([`2b21440`](https://github.com/taskforcesh/bullmq/commit/2b21440f5befd4b95d6be3d8e8235b31279ce0c6)) + +### Documentation + +* docs(flow-producer): fix typo on getFlow ([`f6e163e`](https://github.com/taskforcesh/bullmq/commit/f6e163e3430a0e38d671730313ba9157ef93f85b)) + +* docs: add example of adding retry rules to queue's default options ([`1f53172`](https://github.com/taskforcesh/bullmq/commit/1f53172351b81dff9b3d4dc6daa83de6d8249dec)) + +### Fix + +* fix(redis-connection): remove error event listener from client ([`2d70fe7`](https://github.com/taskforcesh/bullmq/commit/2d70fe7cc7d43673674ec2ba0204c10661b34e95)) + +### Test + +* test(mocha): no exclusive tests ([`2e9af30`](https://github.com/taskforcesh/bullmq/commit/2e9af3071f445a7118823dfeb79d8eb355ba5def)) + + +## v1.34.0 (2021-06-11) + +### Chore + +* chore(release): 1.34.0 [skip ci] + +# [1.34.0](https://github.com/taskforcesh/bullmq/compare/v1.33.1...v1.34.0) (2021-06-11) + +### Features + +* **job:** expose queueName ([8683bd4](https://github.com/taskforcesh/bullmq/commit/8683bd470cc7304f087d646fd40c5bc3acc1263c)) ([`a3342b2`](https://github.com/taskforcesh/bullmq/commit/a3342b2aa23ed0606fe97f4aeadad5263038a703)) + +### Documentation + +* docs: define exponential and fixed backoffs ([`d621359`](https://github.com/taskforcesh/bullmq/commit/d62135967e1d9a8c001faddde42238e4e96e5212)) + +### Feature + +* feat(job): expose queueName ([`8683bd4`](https://github.com/taskforcesh/bullmq/commit/8683bd470cc7304f087d646fd40c5bc3acc1263c)) + + +## v1.33.1 (2021-06-10) + +### Chore + +* chore(release): 1.33.1 [skip ci] + +## [1.33.1](https://github.com/taskforcesh/bullmq/compare/v1.33.0...v1.33.1) (2021-06-10) + +### Bug Fixes + +* **job:** destructure default opts for pagination ([73363a5](https://github.com/taskforcesh/bullmq/commit/73363a551f56608f8936ad1f730d0a9c778aafd2)) ([`7dfb343`](https://github.com/taskforcesh/bullmq/commit/7dfb343219737c1a3bef72c5121803b4e7e4fdd6)) + +### Fix + +* fix(job): destructure default opts for pagination ([`73363a5`](https://github.com/taskforcesh/bullmq/commit/73363a551f56608f8936ad1f730d0a9c778aafd2)) + +### Test + +* test: add missing test case for processed pagination ([`2631c21`](https://github.com/taskforcesh/bullmq/commit/2631c214b843b60224557418f1d69a2ea8dc87d5)) + + +## v1.33.0 (2021-06-10) + +### Chore + +* chore(release): 1.33.0 [skip ci] + +# [1.33.0](https://github.com/taskforcesh/bullmq/compare/v1.32.0...v1.33.0) (2021-06-10) + +### Features + +* **job:** add getDependenciesCount method ([ae39a4c](https://github.com/taskforcesh/bullmq/commit/ae39a4c77a958242cb445dbb32ae27b15a953653)) ([`a4efbb5`](https://github.com/taskforcesh/bullmq/commit/a4efbb57e29315b7255780569ef2c6c11b4dad6d)) + +* chore: delete .only ([`4a3b789`](https://github.com/taskforcesh/bullmq/commit/4a3b78920514b707ddbdab20293d656284d91735)) + +### Documentation + +* docs(queue-options): fix typo ([`8db639b`](https://github.com/taskforcesh/bullmq/commit/8db639b9e62706ea70ba847c6c49b1244c260e54)) + +### Test + +* test(worker): fix flaky test related to getDependencies ([`f512823`](https://github.com/taskforcesh/bullmq/commit/f512823a847d7a464cf7253fed3fad2563945fbc)) + +### Unknown + +* feat(job): add getDependenciesCount method ([`ae39a4c`](https://github.com/taskforcesh/bullmq/commit/ae39a4c77a958242cb445dbb32ae27b15a953653)) + + +## v1.32.0 (2021-06-07) + +### Chore + +* chore(release): 1.32.0 [skip ci] + +# [1.32.0](https://github.com/taskforcesh/bullmq/compare/v1.31.1...v1.32.0) (2021-06-07) + +### Features + +* **flow-producer:** add getFlow method ([ce93d04](https://github.com/taskforcesh/bullmq/commit/ce93d04c962686aff34f670f2decadadbf1cf4ca)) ([`87b3603`](https://github.com/taskforcesh/bullmq/commit/87b360323ed3ab4d43ccd3e278413137479cdf3b)) + +### Feature + +* feat(flow-producer): add getFlow method ([`ce93d04`](https://github.com/taskforcesh/bullmq/commit/ce93d04c962686aff34f670f2decadadbf1cf4ca)) + + +## v1.31.1 (2021-06-07) + +### Chore + +* chore(release): 1.31.1 [skip ci] + +## [1.31.1](https://github.com/taskforcesh/bullmq/compare/v1.31.0...v1.31.1) (2021-06-07) + +### Bug Fixes + +* **worker:** remove processed key when removeOnComplete ([4ec1b73](https://github.com/taskforcesh/bullmq/commit/4ec1b739d6aeeb2fc21887b58f5978027ddcdb50)) ([`7068d4c`](https://github.com/taskforcesh/bullmq/commit/7068d4c2297468714ce1034b16bc9a32e9571d70)) + +* chore(deps): upgrade ioredis to 4.27.5 ([`f538f5b`](https://github.com/taskforcesh/bullmq/commit/f538f5bd760570b6cc3078083b685988d6e42bc4)) + +### Documentation + +* docs(compat): fix typos ([`f9c5c3c`](https://github.com/taskforcesh/bullmq/commit/f9c5c3c54338eedf1385864f0580cc8d83cea388)) + +### Fix + +* fix(worker): remove processed key when removeOnComplete ([`4ec1b73`](https://github.com/taskforcesh/bullmq/commit/4ec1b739d6aeeb2fc21887b58f5978027ddcdb50)) + + +## v1.31.0 (2021-06-04) + +### Chore + +* chore(release): 1.31.0 [skip ci] + +# [1.31.0](https://github.com/taskforcesh/bullmq/compare/v1.30.2...v1.31.0) (2021-06-04) + +### Features + +* **job:** extend getDependencies to support pagination ([9b61bbb](https://github.com/taskforcesh/bullmq/commit/9b61bbb9160358f629cd458fa8dc4c9b6ebcd9f5)) ([`d8c67c2`](https://github.com/taskforcesh/bullmq/commit/d8c67c26483c1e38554abdbde240a29b90f1766a)) + +### Feature + +* feat(job): extend getDependencies to support pagination ([`9b61bbb`](https://github.com/taskforcesh/bullmq/commit/9b61bbb9160358f629cd458fa8dc4c9b6ebcd9f5)) + + +## v1.30.2 (2021-06-03) + +### Chore + +* chore(release): 1.30.2 [skip ci] + +## [1.30.2](https://github.com/taskforcesh/bullmq/compare/v1.30.1...v1.30.2) (2021-06-03) + +### Bug Fixes + +* **job:** parse results in getDependencies for processed jobs ([6fdc701](https://github.com/taskforcesh/bullmq/commit/6fdc7011ba910e5ca9c6d87926cc523ef38ef3ca)) ([`d3335ce`](https://github.com/taskforcesh/bullmq/commit/d3335cee83c3ad93a36066b06111a350b34d0621)) + +### Unknown + +* fix(job): parse results in getDependencies for processed jobs ([`6fdc701`](https://github.com/taskforcesh/bullmq/commit/6fdc7011ba910e5ca9c6d87926cc523ef38ef3ca)) + + +## v1.30.1 (2021-06-02) + +### Chore + +* chore(release): 1.30.1 [skip ci] + +## [1.30.1](https://github.com/taskforcesh/bullmq/compare/v1.30.0...v1.30.1) (2021-06-02) ### Bug Fixes -* **python:** respect concurrency in worker ([#2062](https://github.com/taskforcesh/bullmq/issues/2062)) fixes [#2063](https://github.com/taskforcesh/bullmq/issues/2063) ([1b95185](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) +* **move-to-waiting-children:** make opts optional ([33bd76a](https://github.com/taskforcesh/bullmq/commit/33bd76a2cac9be450b5d76c6cfe16751c7569ceb)) ([`46e35c3`](https://github.com/taskforcesh/bullmq/commit/46e35c39141573daf0401c8ab79957c84424f1a7)) +### Fix -### Features +* fix(move-to-waiting-children): make opts optional ([`33bd76a`](https://github.com/taskforcesh/bullmq/commit/33bd76a2cac9be450b5d76c6cfe16751c7569ceb)) -* **job:** add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([841dc87](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) -# [4.4.0](https://github.com/taskforcesh/bullmq/compare/v4.3.0...v4.4.0) (2023-07-17) +## v1.30.0 (2021-06-02) + +### Chore +* chore(release): 1.30.0 [skip ci] + +# [1.30.0](https://github.com/taskforcesh/bullmq/compare/v1.29.1...v1.30.0) (2021-06-02) ### Features -* **job:** add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([ffd49e2](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) -* **python:** add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([808ee72](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) +* add some event typing ([934c004](https://github.com/taskforcesh/bullmq/commit/934c0040b0802bb67f44a979584405d795a8ab5e)) ([`bf17c7b`](https://github.com/taskforcesh/bullmq/commit/bf17c7bf5b30e6c9c566e565400aa0c8f32220ab)) -# [4.3.0](https://github.com/taskforcesh/bullmq/compare/v4.2.1...v4.3.0) (2023-07-14) +### Feature +* feat: add some event typing ([`934c004`](https://github.com/taskforcesh/bullmq/commit/934c0040b0802bb67f44a979584405d795a8ab5e)) -### Features -* **worker:** add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([e255356](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) +## v1.29.1 (2021-05-31) -## [4.2.1](https://github.com/taskforcesh/bullmq/compare/v4.2.0...v4.2.1) (2023-07-10) +### Chore + +* chore(release): 1.29.1 [skip ci] +## [1.29.1](https://github.com/taskforcesh/bullmq/compare/v1.29.0...v1.29.1) (2021-05-31) ### Bug Fixes -* **flow:** emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([f419ff1](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) +* **move-stalled-jobs-to-wait:** send failedReason to queueEvents ([7c510b5](https://github.com/taskforcesh/bullmq/commit/7c510b542558bd4b1330371b73331f37b97a818d)) ([`2b43133`](https://github.com/taskforcesh/bullmq/commit/2b43133875ed67189ca9f6cf1222bf726a941a85)) -# [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) +### Fix +* fix(move-stalled-jobs-to-wait): send failedReason to queueEvents ([`7c510b5`](https://github.com/taskforcesh/bullmq/commit/7c510b542558bd4b1330371b73331f37b97a818d)) -### Features -* **common:** add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([ca17364](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) +## v1.29.0 (2021-05-31) -# [4.1.0](https://github.com/taskforcesh/bullmq/compare/v4.0.0...v4.1.0) (2023-06-23) +### Chore + +* chore(release): 1.29.0 [skip ci] +# [1.29.0](https://github.com/taskforcesh/bullmq/compare/v1.28.2...v1.29.0) (2021-05-31) ### Features -* **queue:** add getPrioritized and getPrioritizedCount methods ([#2005](https://github.com/taskforcesh/bullmq/issues/2005)) ([7363abe](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) +* add move to waiting children for manual processing ([#477](https://github.com/taskforcesh/bullmq/issues/477)) ([f312f29](https://github.com/taskforcesh/bullmq/commit/f312f293b8cac79af9c14848ffd1b11b65a806c3)) ([`00a8352`](https://github.com/taskforcesh/bullmq/commit/00a8352c7e772df7f0a42812a330b98e50f45de3)) -# [4.0.0](https://github.com/taskforcesh/bullmq/compare/v3.15.8...v4.0.0) (2023-06-21) +### Feature +* feat: add move to waiting children for manual processing (#477) ([`f312f29`](https://github.com/taskforcesh/bullmq/commit/f312f293b8cac79af9c14848ffd1b11b65a806c3)) -### Features -* **queue:** add removeDeprecatedPriorityKey method +## v1.28.2 (2021-05-31) +### Chore -### Performance Improvements +* chore(release): 1.28.2 [skip ci] -* **priority:** add prioritized as a new state ([#1984](https://github.com/taskforcesh/bullmq/issues/1984)) (python) ([42a890a](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) +## [1.28.2](https://github.com/taskforcesh/bullmq/compare/v1.28.1...v1.28.2) (2021-05-31) +### Bug Fixes -### BREAKING CHANGES +* **obliterate:** remove job logs ([ea91895](https://github.com/taskforcesh/bullmq/commit/ea918950d7696241047a23773cc13cd675209c4b)) ([`499bb93`](https://github.com/taskforcesh/bullmq/commit/499bb93c303052af0a2629dbaddd8916dc020fc4)) -* **priority:** priority is separeted in its own zset, no duplication needed +### Fix -* **job:** change job method name update to updateData +* fix(obliterate): remove job logs ([`ea91895`](https://github.com/taskforcesh/bullmq/commit/ea918950d7696241047a23773cc13cd675209c4b)) -ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) -## [3.15.8](https://github.com/taskforcesh/bullmq/compare/v3.15.7...v3.15.8) (2023-06-16) +## v1.28.1 (2021-05-31) +### Chore -### Bug Fixes +* chore(release): 1.28.1 [skip ci] -* **rate-limit:** keep priority fifo order ([#1991](https://github.com/taskforcesh/bullmq/issues/1991)) fixes [#1929](https://github.com/taskforcesh/bullmq/issues/1929) (python) ([56bd7ad](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) +## [1.28.1](https://github.com/taskforcesh/bullmq/compare/v1.28.0...v1.28.1) (2021-05-31) -## [3.15.7](https://github.com/taskforcesh/bullmq/compare/v3.15.6...v3.15.7) (2023-06-16) +### Bug Fixes +* **get-workers:** use strict equality on name fixes [#564](https://github.com/taskforcesh/bullmq/issues/564) ([4becfa6](https://github.com/taskforcesh/bullmq/commit/4becfa66e09dacf9830804898c45cb3317dcf438)) ([`f8c3a37`](https://github.com/taskforcesh/bullmq/commit/f8c3a3793d25696fd472ad963441836529f356e7)) -### Bug Fixes +### Documentation -* **worker:** set redis version always in initialization ([#1989](https://github.com/taskforcesh/bullmq/issues/1989)) fixes [#1988](https://github.com/taskforcesh/bullmq/issues/1988) ([a1544a8](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) +* docs(job): fix timestamp typo ([`de37977`](https://github.com/taskforcesh/bullmq/commit/de37977e517b7f6b9aa2efe642169a840aeb4e1a)) -## [3.15.6](https://github.com/taskforcesh/bullmq/compare/v3.15.5...v3.15.6) (2023-06-13) +* docs: update readme ([`6442798`](https://github.com/taskforcesh/bullmq/commit/644279813fc6a5e1838ac18cc1f16aae5fee2723)) +### Unknown -### Bug Fixes +* fix(get-workers): use strict equality on name fixes #564 ([`4becfa6`](https://github.com/taskforcesh/bullmq/commit/4becfa66e09dacf9830804898c45cb3317dcf438)) -* **worker:** use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([0df6afa](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) -## [3.15.5](https://github.com/taskforcesh/bullmq/compare/v3.15.4...v3.15.5) (2023-06-11) +## v1.28.0 (2021-05-24) +### Chore -### Bug Fixes +* chore(release): 1.28.0 [skip ci] -* **retry-job:** consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([e753855](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) +# [1.28.0](https://github.com/taskforcesh/bullmq/compare/v1.27.0...v1.28.0) (2021-05-24) -## [3.15.4](https://github.com/taskforcesh/bullmq/compare/v3.15.3...v3.15.4) (2023-06-08) +### Features +* **flow-producer:** expose client connection ([17d4263](https://github.com/taskforcesh/bullmq/commit/17d4263abfa57797535cd8773c4cc316ff5149d2)) ([`a3aa689`](https://github.com/taskforcesh/bullmq/commit/a3aa6892fde7fd81e3ad78d664ffd29bca6be249)) -### Bug Fixes +### Documentation -* **job:** import right reference of QueueEvents ([#1964](https://github.com/taskforcesh/bullmq/issues/1964)) ([689c845](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) +* docs: document some job methods ([`fd203ea`](https://github.com/taskforcesh/bullmq/commit/fd203ea696cc72e1df823b3ee033617bd6cfff87)) -## [3.15.3](https://github.com/taskforcesh/bullmq/compare/v3.15.2...v3.15.3) (2023-06-08) +### Feature +* feat(flow-producer): expose client connection ([`17d4263`](https://github.com/taskforcesh/bullmq/commit/17d4263abfa57797535cd8773c4cc316ff5149d2)) -### Bug Fixes -* **job:** use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([881848c](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) +## v1.27.0 (2021-05-24) -## [3.15.2](https://github.com/taskforcesh/bullmq/compare/v3.15.1...v3.15.2) (2023-06-06) +### Chore +* chore(release): 1.27.0 [skip ci] -### Bug Fixes +# [1.27.0](https://github.com/taskforcesh/bullmq/compare/v1.26.5...v1.27.0) (2021-05-24) -* **worker:** better worker client naming ([c5f63af](https://github.com/taskforcesh/bullmq/commit/c5f63affe72f7b6616f4c5f3aafde858dcc0b200)) +### Features -## [3.15.1](https://github.com/taskforcesh/bullmq/compare/v3.15.0...v3.15.1) (2023-06-05) +* **repeat:** add immediately opt for repeat ([d095573](https://github.com/taskforcesh/bullmq/commit/d095573f8e7ce5911f777df48368382eceb99d6a)) ([`9bad41e`](https://github.com/taskforcesh/bullmq/commit/9bad41e6947f1b16e33839742f055b6c5c2c5bc5)) +### Documentation -### Bug Fixes +* docs: replace survey link ([`a4a2f46`](https://github.com/taskforcesh/bullmq/commit/a4a2f468dc2bdbc1108a95ed67a19295036056f5)) -* **rate-limit:** consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) +### Unknown -# [3.15.0](https://github.com/taskforcesh/bullmq/compare/v3.14.2...v3.15.0) (2023-05-31) +* feat(repeat): add immediately opt for repeat ([`d095573`](https://github.com/taskforcesh/bullmq/commit/d095573f8e7ce5911f777df48368382eceb99d6a)) -### Features +## v1.26.5 (2021-05-21) -* **job:** add changePriority method ([#1901](https://github.com/taskforcesh/bullmq/issues/1901)) ref [#1899](https://github.com/taskforcesh/bullmq/issues/1899) ([9485ad5](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) +### Chore -## [3.14.2](https://github.com/taskforcesh/bullmq/compare/v3.14.1...v3.14.2) (2023-05-30) +* chore(release): 1.26.5 [skip ci] +## [1.26.5](https://github.com/taskforcesh/bullmq/compare/v1.26.4...v1.26.5) (2021-05-21) ### Bug Fixes -* **rate-limit:** take in count priority ([#1919](https://github.com/taskforcesh/bullmq/issues/1919)) fixes [#1915](https://github.com/taskforcesh/bullmq/issues/1915) ([b8157a3](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) +* **movetofinished:** use parent queue for events ([1b17b62](https://github.com/taskforcesh/bullmq/commit/1b17b62a794728a318f1079e73d07e33fe65c9c7)) ([`a283a2b`](https://github.com/taskforcesh/bullmq/commit/a283a2b78a325eb8e7a0531bfe50f726326741c8)) -## [3.14.1](https://github.com/taskforcesh/bullmq/compare/v3.14.0...v3.14.1) (2023-05-27) +### Documentation +* docs(job): fix typo ([`afb1d5c`](https://github.com/taskforcesh/bullmq/commit/afb1d5cd203b8985be4c0482ac5595de7238f0db)) -### Performance Improvements +### Fix -* **retry-job:** get target queue list once ([#1921](https://github.com/taskforcesh/bullmq/issues/1921)) ([8a7a9dd](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) +* fix(movetofinished): use parent queue for events ([`1b17b62`](https://github.com/taskforcesh/bullmq/commit/1b17b62a794728a318f1079e73d07e33fe65c9c7)) -# [3.14.0](https://github.com/taskforcesh/bullmq/compare/v3.13.4...v3.14.0) (2023-05-22) +## v1.26.4 (2021-05-20) -### Features +### Chore -* **worker:** make extendLocks overridable ([7b1386b](https://github.com/taskforcesh/bullmq/commit/7b1386bb823562d9666a1ad6e206e1deb63e57ec)) +* chore(release): 1.26.4 [skip ci] -## [3.13.4](https://github.com/taskforcesh/bullmq/compare/v3.13.3...v3.13.4) (2023-05-11) +## [1.26.4](https://github.com/taskforcesh/bullmq/compare/v1.26.3...v1.26.4) (2021-05-20) +### Bug Fixes -### Performance Improvements +* **removejob:** delete processed hash ([a2a5058](https://github.com/taskforcesh/bullmq/commit/a2a5058f18ab77ed4d0114d48f47e6144d632cbf)) ([`c3887d6`](https://github.com/taskforcesh/bullmq/commit/c3887d6ced3035f9a8c2221bd2403427db816fb3)) -* **rate-limit:** call pttl in script moveJobFromActiveToWait ([#1889](https://github.com/taskforcesh/bullmq/issues/1889)) ([e0d2992](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) +### Documentation -## [3.13.3](https://github.com/taskforcesh/bullmq/compare/v3.13.2...v3.13.3) (2023-05-10) +* docs: update README ([`3a771d1`](https://github.com/taskforcesh/bullmq/commit/3a771d1547ecd34e71cad624e42872037d248d79)) +### Fix -### Bug Fixes +* fix(removejob): delete processed hash ([`a2a5058`](https://github.com/taskforcesh/bullmq/commit/a2a5058f18ab77ed4d0114d48f47e6144d632cbf)) -* **child:** use named import for EventEmitter ([#1887](https://github.com/taskforcesh/bullmq/issues/1887)) ([1db396d](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) -## [3.13.2](https://github.com/taskforcesh/bullmq/compare/v3.13.1...v3.13.2) (2023-05-09) +## v1.26.3 (2021-05-19) + +### Chore +* chore(release): 1.26.3 [skip ci] + +## [1.26.3](https://github.com/taskforcesh/bullmq/compare/v1.26.2...v1.26.3) (2021-05-19) ### Bug Fixes -* **rate-limit:** consider paused queue when dynamic rate limit ([#1884](https://github.com/taskforcesh/bullmq/issues/1884)) ([a23f37e](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) +* ensure connection reconnects when pausing fixes [#160](https://github.com/taskforcesh/bullmq/issues/160) ([f38fee8](https://github.com/taskforcesh/bullmq/commit/f38fee84def75dd8a38cbb8bfb5aa662485ddf91)) ([`0eb67d5`](https://github.com/taskforcesh/bullmq/commit/0eb67d5b7b41ca92de35ea24b49e05870fd863b1)) -## [3.13.1](https://github.com/taskforcesh/bullmq/compare/v3.13.0...v3.13.1) (2023-05-07) +### Documentation +* docs(changelog): adding missing version messages ([`41ab373`](https://github.com/taskforcesh/bullmq/commit/41ab373e8e411ec6279c3fa8468cdf3c49d578e2)) -### Bug Fixes +### Fix -* **retry:** consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([01b621f](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) +* fix: ensure connection reconnects when pausing fixes #160 ([`f38fee8`](https://github.com/taskforcesh/bullmq/commit/f38fee84def75dd8a38cbb8bfb5aa662485ddf91)) -# [3.13.0](https://github.com/taskforcesh/bullmq/compare/v3.12.1...v3.13.0) (2023-05-06) +### Style +* style(changelog): more formatting ([`35c90e8`](https://github.com/taskforcesh/bullmq/commit/35c90e84701d5412a7c76ddf406aaea1a7b674ba)) -### Features +* style(changelog): formatting old messages ([`0197382`](https://github.com/taskforcesh/bullmq/commit/01973826e6213fc3a4519e2efa04b2b9f4e64c99)) -* **worker:** add worker threads support ([0820985](https://github.com/taskforcesh/bullmq/commit/0820985e073582fdf841affad38ecc7ab64691ec)) -## [3.12.1](https://github.com/taskforcesh/bullmq/compare/v3.12.0...v3.12.1) (2023-05-05) +## v1.26.2 (2021-05-18) +### Chore + +* chore(release): 1.26.2 [skip ci] + +## [1.26.2](https://github.com/taskforcesh/bullmq/compare/v1.26.1...v1.26.2) (2021-05-18) ### Bug Fixes -* **worker:** close open handles after closing ([#1861](https://github.com/taskforcesh/bullmq/issues/1861)) fixes [#1312](https://github.com/taskforcesh/bullmq/issues/1312) ([39286e8](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) +* **getjoblogs:** no reversed pagination ([fb0c3a5](https://github.com/taskforcesh/bullmq/commit/fb0c3a50f0d37851a8f35cb4c478259a63d93461)) ([`09bf324`](https://github.com/taskforcesh/bullmq/commit/09bf324ef30d8f6b11ff2e6cb547da467d612d74)) -# [3.12.0](https://github.com/taskforcesh/bullmq/compare/v3.11.0...v3.12.0) (2023-04-20) +* chore: rename CHANGELOG ([`018f10b`](https://github.com/taskforcesh/bullmq/commit/018f10b00d229b0c7fc218a4546670ee9b47e40d)) +### Fix -### Features +* fix(getjoblogs): no reversed pagination ([`fb0c3a5`](https://github.com/taskforcesh/bullmq/commit/fb0c3a50f0d37851a8f35cb4c478259a63d93461)) -* upgrade ioredis to 5.3.2 ([375b1be](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) +### Unknown -# [3.11.0](https://github.com/taskforcesh/bullmq/compare/v3.10.4...v3.11.0) (2023-04-17) +* Update SUMMARY.md ([`cba5d26`](https://github.com/taskforcesh/bullmq/commit/cba5d26dd226fc6fc0fc5cf6c121fa8ff4dfdb12)) -### Features +## v1.26.1 (2021-05-17) -* **upstash:** don't throw an error when detecting an upstash host ([2e06bca](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) +### Chore -## [3.10.4](https://github.com/taskforcesh/bullmq/compare/v3.10.3...v3.10.4) (2023-04-05) +* chore(release): 1.26.1 [skip ci] +## [1.26.1](https://github.com/taskforcesh/bullmq/compare/v1.26.0...v1.26.1) (2021-05-17) ### Bug Fixes -* **flow:** do not remove completed children results ([#1788](https://github.com/taskforcesh/bullmq/issues/1788)) fixes [#1778](https://github.com/taskforcesh/bullmq/issues/1778) ([04b547a](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) +* **flow-producer:** use custom jobId as parentId for children, fixes [#552](https://github.com/taskforcesh/bullmq/issues/552) ([645b576](https://github.com/taskforcesh/bullmq/commit/645b576c1aabd8426ab77a68c199a594867cd729)) ([`a907c6e`](https://github.com/taskforcesh/bullmq/commit/a907c6e56c76b601e0f7ae3db64db7e08355d717)) -## [3.10.3](https://github.com/taskforcesh/bullmq/compare/v3.10.2...v3.10.3) (2023-03-30) +### Fix +* fix(flow-producer): use custom jobId as parentId for children, fixes #552 ([`645b576`](https://github.com/taskforcesh/bullmq/commit/645b576c1aabd8426ab77a68c199a594867cd729)) -### Bug Fixes -* **flow:** consider removing dependency on removeOnFail true ([#1753](https://github.com/taskforcesh/bullmq/issues/1753)) ([de5a299](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) +## v1.26.0 (2021-05-17) -## [3.10.2](https://github.com/taskforcesh/bullmq/compare/v3.10.1...v3.10.2) (2023-03-22) +### Chore +* chore(release): 1.26.0 [skip ci] -### Bug Fixes +# [1.26.0](https://github.com/taskforcesh/bullmq/compare/v1.25.2...v1.26.0) (2021-05-17) -* **job:** avoid error when job is moved when processing ([#1354](https://github.com/taskforcesh/bullmq/issues/1354)) fixes [#1343](https://github.com/taskforcesh/bullmq/issues/1343) [#1602](https://github.com/taskforcesh/bullmq/issues/1602) ([78085e4](https://github.com/taskforcesh/bullmq/commit/78085e4304357dd3695df61057f91e706c3a52bf)) +### Features -## [3.10.1](https://github.com/taskforcesh/bullmq/compare/v3.10.0...v3.10.1) (2023-03-06) +* **custombackoff:** provide job as third parameter ([ddaf8dc](https://github.com/taskforcesh/bullmq/commit/ddaf8dc2f95ca336cb117a540edd4640d5d579e4)) ([`2656566`](https://github.com/taskforcesh/bullmq/commit/26565660b410c9c38adee13ecbe274b934d2cd64)) +### Feature -### Bug Fixes +* feat(custombackoff): provide job as third parameter ([`ddaf8dc`](https://github.com/taskforcesh/bullmq/commit/ddaf8dc2f95ca336cb117a540edd4640d5d579e4)) -* **worker:** throw error with invalid concurrency fixes [#1723](https://github.com/taskforcesh/bullmq/issues/1723) ([2a1cdbe](https://github.com/taskforcesh/bullmq/commit/2a1cdbe3e871309f460aadc14b4d632238c32aa9)) -# [3.10.0](https://github.com/taskforcesh/bullmq/compare/v3.9.0...v3.10.0) (2023-03-02) +## v1.25.2 (2021-05-17) + +### Chore + +* chore(release): 1.25.2 [skip ci] +## [1.25.2](https://github.com/taskforcesh/bullmq/compare/v1.25.1...v1.25.2) (2021-05-17) ### Bug Fixes -* **worker:** close lock extended timer ([7995f18](https://github.com/taskforcesh/bullmq/commit/7995f18bb7712bd50d0fa3d17c4ab565b16ab379)) -* **worker:** correct lock extender logic ([6aa3569](https://github.com/taskforcesh/bullmq/commit/6aa3569db0fe0137790e61a4b5982d2b35ee5646)) -* **worker:** start stalled check timer ([4763be0](https://github.com/taskforcesh/bullmq/commit/4763be028b0c7b0460fd0804d4569c446a06ef4a)) +* **flow-producer:** process parent with children as empty array, fixes [#547](https://github.com/taskforcesh/bullmq/issues/547) ([48168f0](https://github.com/taskforcesh/bullmq/commit/48168f07cbaed7ed522c68d127a0c7d5e4cb380e)) ([`f7601d7`](https://github.com/taskforcesh/bullmq/commit/f7601d7edb36398cf7070c927709c191cabbaebe)) +* chore: fix changelog file ([`5a9d530`](https://github.com/taskforcesh/bullmq/commit/5a9d530b027bbb8d44af82b2e4f954e8a013d6da)) -### Features +### Documentation -* **worker:** replace Promise.race with efficient an async fifo ([0d94e35](https://github.com/taskforcesh/bullmq/commit/0d94e35e805b09c3b4c7404b8a2eeb71a1aff5c4)) -* **worker:** simplify lock extension to one call independent of concurrency ([ebf1aeb](https://github.com/taskforcesh/bullmq/commit/ebf1aeb2400383d0ae90ab68aeb4822aea03ba44)) +* docs: reword sentences in stalled.md ([`b679dd6`](https://github.com/taskforcesh/bullmq/commit/b679dd6904ca82432887f5ccd6636afc2ae43428)) +### Fix -### Performance Improvements +* fix(flow-producer): process parent with children as empty array, fixes #547 ([`48168f0`](https://github.com/taskforcesh/bullmq/commit/48168f07cbaed7ed522c68d127a0c7d5e4cb380e)) -* **scripts:** reuse keys array to avoid allocations ([feac7b4](https://github.com/taskforcesh/bullmq/commit/feac7b4070a6a3720597af36c43d095e9ea37173)) -* **worker:** improve worker memory consumption ([4846cf1](https://github.com/taskforcesh/bullmq/commit/4846cf1fe3f9ea35f58a679c11706e1a7101c898)) +### Unknown -# [3.9.0](https://github.com/taskforcesh/bullmq/compare/v3.8.0...v3.9.0) (2023-02-25) +* remove lowercase changelog ([`daad876`](https://github.com/taskforcesh/bullmq/commit/daad876a973bc2771b000b150e939de77d24cc4e)) -### Features +## v1.25.1 (2021-05-13) -* **worker:** add remove on complete and fail options ([#1703](https://github.com/taskforcesh/bullmq/issues/1703)) ([cf13494](https://github.com/taskforcesh/bullmq/commit/cf1349471dcbf0e43feea9972eaa71d2299d619f)) +### Chore -# [3.8.0](https://github.com/taskforcesh/bullmq/compare/v3.7.2...v3.8.0) (2023-02-23) +* chore(release): 1.25.1 [skip ci] +## [1.25.1](https://github.com/taskforcesh/bullmq/compare/v1.25.0...v1.25.1) (2021-05-13) ### Bug Fixes -* **worker:** run stalled check directly first time ([f71ec03](https://github.com/taskforcesh/bullmq/commit/f71ec03111a22897cbf2fad39073185e4aeac6d6)) +* **addbulk:** should not consider repeat option ([c85357e](https://github.com/taskforcesh/bullmq/commit/c85357e415b9ea66f845f751a4943b5c48c2bb18)) ([`0c50dbf`](https://github.com/taskforcesh/bullmq/commit/0c50dbf958d5778293bfdde5dc2a22c60f6658c3)) +### Fix -### Features +* fix(addbulk): should not consider repeat option ([`c85357e`](https://github.com/taskforcesh/bullmq/commit/c85357e415b9ea66f845f751a4943b5c48c2bb18)) -* **worker:** add a public method to run the stalled checker ([3159266](https://github.com/taskforcesh/bullmq/commit/3159266ccb002d4fc71b7ee7ac63c465c536dbd1)) -* **worker:** add support to disable stalled checks ([49e860c](https://github.com/taskforcesh/bullmq/commit/49e860c6675853971e992c2945b445660504e3b2)) +### Unknown -## [3.7.2](https://github.com/taskforcesh/bullmq/compare/v3.7.1...v3.7.2) (2023-02-23) +* Update README.md ([`1b220b6`](https://github.com/taskforcesh/bullmq/commit/1b220b64b212aa9cc952795d6bb60e9454acca86)) -### Bug Fixes +## v1.25.0 (2021-05-11) -* **worker:** restore failed event job parameter typing ([#1707](https://github.com/taskforcesh/bullmq/issues/1707)) ([44c2203](https://github.com/taskforcesh/bullmq/commit/44c2203ab65d406be9a913254600fe07c83e62d5)) +### Chore -## [3.7.1](https://github.com/taskforcesh/bullmq/compare/v3.7.0...v3.7.1) (2023-02-22) +* chore(release): 1.25.0 [skip ci] +# [1.25.0](https://github.com/taskforcesh/bullmq/compare/v1.24.5...v1.25.0) (2021-05-11) -### Bug Fixes +### Features -* **worker:** failed event receives an optional job parameter ([#1702](https://github.com/taskforcesh/bullmq/issues/1702)) fixes [#1690](https://github.com/taskforcesh/bullmq/issues/1690) ([6009906](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) +* **job:** add sizeLimit option when creating a job ([f10aeeb](https://github.com/taskforcesh/bullmq/commit/f10aeeb62520d20b31d35440524d147ac4adcc9c)) ([`c687877`](https://github.com/taskforcesh/bullmq/commit/c687877156b49feb5228e472750ad8274a454630)) -# [3.7.0](https://github.com/taskforcesh/bullmq/compare/v3.6.6...v3.7.0) (2023-02-16) +### Documentation +* docs: fix job type in sandbox-processors guide fixes #539 ([`81bbf4a`](https://github.com/taskforcesh/bullmq/commit/81bbf4a7b7d929936ad9c27ead7fc25fb570654a)) -### Features +* docs: fix typo in flows.md ([`3d8f042`](https://github.com/taskforcesh/bullmq/commit/3d8f042f3906b38c4f1ee29e88c0414a1a5641ca)) -* initial python package ([#1673](https://github.com/taskforcesh/bullmq/issues/1673)) ([a97b22f](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) +* docs(job): add descriptions to public properties ([`86e663b`](https://github.com/taskforcesh/bullmq/commit/86e663beb23e6a5530fa69c076553996708bbfb5)) -## [3.6.6](https://github.com/taskforcesh/bullmq/compare/v3.6.5...v3.6.6) (2023-02-15) +* docs(joboptions): more documentation on timestamp ([`ee9fb5b`](https://github.com/taskforcesh/bullmq/commit/ee9fb5b1f61a18e06dd7ad37e6dcbdf1d1998169)) +### Feature -### Bug Fixes +* feat(job): add sizeLimit option when creating a job ([`f10aeeb`](https://github.com/taskforcesh/bullmq/commit/f10aeeb62520d20b31d35440524d147ac4adcc9c)) -* **job:** check jobKey when saving stacktrace ([#1681](https://github.com/taskforcesh/bullmq/issues/1681)) fixes [#1676](https://github.com/taskforcesh/bullmq/issues/1676) ([1856c76](https://github.com/taskforcesh/bullmq/commit/1856c7684c377ca4fd36294cca8e128404be27b8)) +### Unknown -## [3.6.5](https://github.com/taskforcesh/bullmq/compare/v3.6.4...v3.6.5) (2023-02-11) +* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`a544d68`](https://github.com/taskforcesh/bullmq/commit/a544d68446d918957aa5a30a44bc6de79d162ae2)) -### Bug Fixes +## v1.24.5 (2021-05-08) -* infinite worker process spawned for invalid JS file ([a445ba8](https://github.com/taskforcesh/bullmq/commit/a445ba8b7a261b370dec7d88091ae5f5af8b2728)) +### Chore -## [3.6.4](https://github.com/taskforcesh/bullmq/compare/v3.6.3...v3.6.4) (2023-02-09) +* chore(release): 1.24.5 [skip ci] +## [1.24.5](https://github.com/taskforcesh/bullmq/compare/v1.24.4...v1.24.5) (2021-05-08) ### Bug Fixes -* add a maximum block time ([1a2618b](https://github.com/taskforcesh/bullmq/commit/1a2618bc5473288a62dddb85e3cb78d6cdb4f39f)) +* **deps:** upgrading lodash to 4.17.21 ([6e90c3f](https://github.com/taskforcesh/bullmq/commit/6e90c3f0a3d2735875ebf44457b342629aa14572)) ([`d7f8e47`](https://github.com/taskforcesh/bullmq/commit/d7f8e4704feff803399be8a4771967fdc0dd8f3c)) -## [3.6.3](https://github.com/taskforcesh/bullmq/compare/v3.6.2...v3.6.3) (2023-02-07) +* chore: apply lint ([`2b7aea5`](https://github.com/taskforcesh/bullmq/commit/2b7aea5186e3ab3fabc5e56850f5b8a5898940ff)) +### Documentation -### Bug Fixes +* docs(gitook): fix typo in queuescheduler.md ([`f942364`](https://github.com/taskforcesh/bullmq/commit/f94236431aba016a2dbe957bf9e01573eb2e0cdd)) -* **master:** copy type declaration ([23ade6e](https://github.com/taskforcesh/bullmq/commit/23ade6e3e45df14bd3fbc2c3e7be47307b642872)) +### Fix -## [3.6.2](https://github.com/taskforcesh/bullmq/compare/v3.6.1...v3.6.2) (2023-02-03) +* fix(deps): upgrading lodash to 4.17.21 ([`6e90c3f`](https://github.com/taskforcesh/bullmq/commit/6e90c3f0a3d2735875ebf44457b342629aa14572)) +### Unknown -### Bug Fixes +* Update README.md ([`8b5cf34`](https://github.com/taskforcesh/bullmq/commit/8b5cf349fe47e72c613fe1f46ea7c5275044f240)) -* **redis:** increase minimum default retry time ([d521531](https://github.com/taskforcesh/bullmq/commit/d521531e22ba9eda8ad8d6e8eddf450fdc3f50f4)) -## [3.6.1](https://github.com/taskforcesh/bullmq/compare/v3.6.0...v3.6.1) (2023-01-31) +## v1.24.4 (2021-05-07) +### Chore -### Bug Fixes +* chore(release): 1.24.4 [skip ci] -* **connection:** apply console.warn in noeviction message ([95f171c](https://github.com/taskforcesh/bullmq/commit/95f171cbc8cdd7d04865618b715dd21229f36a4a)) +## [1.24.4](https://github.com/taskforcesh/bullmq/compare/v1.24.3...v1.24.4) (2021-05-07) -# [3.6.0](https://github.com/taskforcesh/bullmq/compare/v3.5.11...v3.6.0) (2023-01-31) +### Bug Fixes +* **cluster:** add redis cluster support ([5a7dd14](https://github.com/taskforcesh/bullmq/commit/5a7dd145bd3ae11850cac6d1b4fb9b01af0e6766)) +* **redisclient:** not reference types from import ([022fc04](https://github.com/taskforcesh/bullmq/commit/022fc042a17c1754af7d74acabb7dd5c397576ab)) ([`4c55cfd`](https://github.com/taskforcesh/bullmq/commit/4c55cfdc011101ec2a9598bf470d0113949f1281)) -### Features +### Fix -* **job:** allow clearing job's log ([#1600](https://github.com/taskforcesh/bullmq/issues/1600)) ([0ded2d7](https://github.com/taskforcesh/bullmq/commit/0ded2d7709322bf105e0decac44d801ece5615f2)) +* fix(redisclient): not reference types from import ([`022fc04`](https://github.com/taskforcesh/bullmq/commit/022fc042a17c1754af7d74acabb7dd5c397576ab)) -## [3.5.11](https://github.com/taskforcesh/bullmq/compare/v3.5.10...v3.5.11) (2023-01-27) +* fix(cluster): add redis cluster support ([`5a7dd14`](https://github.com/taskforcesh/bullmq/commit/5a7dd145bd3ae11850cac6d1b4fb9b01af0e6766)) -### Bug Fixes +## v1.24.3 (2021-05-05) -* **error:** remove global prototype toJSON ([#1642](https://github.com/taskforcesh/bullmq/issues/1642)) fixes [#1414](https://github.com/taskforcesh/bullmq/issues/1414) ([d4e7108](https://github.com/taskforcesh/bullmq/commit/d4e7108a37aeabdd3085a26c9daf09cea5976f3e)) +### Chore -## [3.5.10](https://github.com/taskforcesh/bullmq/compare/v3.5.9...v3.5.10) (2023-01-24) +* chore(release): 1.24.3 [skip ci] +## [1.24.3](https://github.com/taskforcesh/bullmq/compare/v1.24.2...v1.24.3) (2021-05-05) ### Bug Fixes -* **move-to-finished:** return correct delayUntil ([#1643](https://github.com/taskforcesh/bullmq/issues/1643)) ([c4bf9fa](https://github.com/taskforcesh/bullmq/commit/c4bf9fa6563eda1630d8eb2189b16e9324b01c7f)) +* **sandbox:** properly redirect stdout ([#525](https://github.com/taskforcesh/bullmq/issues/525)) ([c8642a0](https://github.com/taskforcesh/bullmq/commit/c8642a0724dc3d2f77abc4b5d6d24efa67c1e592)) ([`caacaee`](https://github.com/taskforcesh/bullmq/commit/caacaeef3147871f9dc1e9849dbffbfd6e8101b4)) -## [3.5.9](https://github.com/taskforcesh/bullmq/compare/v3.5.8...v3.5.9) (2023-01-19) +### Fix +* fix(sandbox): properly redirect stdout (#525) ([`c8642a0`](https://github.com/taskforcesh/bullmq/commit/c8642a0724dc3d2f77abc4b5d6d24efa67c1e592)) -### Bug Fixes -* **worker:** fix delayed jobs with concurrency fixes [#1627](https://github.com/taskforcesh/bullmq/issues/1627) ([99a8e6d](https://github.com/taskforcesh/bullmq/commit/99a8e6d3a339be51fb46f69c8afac4ecdebff6d3)) +## v1.24.2 (2021-05-05) -## [3.5.8](https://github.com/taskforcesh/bullmq/compare/v3.5.7...v3.5.8) (2023-01-18) +### Chore +* chore(release): 1.24.2 [skip ci] + +## [1.24.2](https://github.com/taskforcesh/bullmq/compare/v1.24.1...v1.24.2) (2021-05-05) ### Bug Fixes -* **move-to-active:** delete marker when it is moved to active ([#1634](https://github.com/taskforcesh/bullmq/issues/1634)) ([ad1fcea](https://github.com/taskforcesh/bullmq/commit/ad1fcea4500d4ceed51d5d5b0a03dbb5e1735a42)) +* **sandbox:** handle broken processor files ([2326983](https://github.com/taskforcesh/bullmq/commit/23269839af0be2f7cf2a4f6062563d30904bc259)) ([`6bdacb8`](https://github.com/taskforcesh/bullmq/commit/6bdacb8a37b85c0d98fdbf501b044aab97f90e28)) -## [3.5.7](https://github.com/taskforcesh/bullmq/compare/v3.5.6...v3.5.7) (2023-01-17) +### Fix +* fix(sandbox): handle broken processor files ([`2326983`](https://github.com/taskforcesh/bullmq/commit/23269839af0be2f7cf2a4f6062563d30904bc259)) -### Bug Fixes -* **move-to-active:** validate next marker and return delayUntil ([#1630](https://github.com/taskforcesh/bullmq/issues/1630)) ([3cd3305](https://github.com/taskforcesh/bullmq/commit/3cd33052fc711a9ba560c9a431630be5cdd02193)) +## v1.24.1 (2021-05-05) -## [3.5.6](https://github.com/taskforcesh/bullmq/compare/v3.5.5...v3.5.6) (2023-01-13) +### Chore +* chore(release): 1.24.1 [skip ci] -### Bug Fixes +## [1.24.1](https://github.com/taskforcesh/bullmq/compare/v1.24.0...v1.24.1) (2021-05-05) -* **worker:** add max concurrency from the beginning ([#1597](https://github.com/taskforcesh/bullmq/issues/1597)) fixes [#1589](https://github.com/taskforcesh/bullmq/issues/1589) ([6f49db3](https://github.com/taskforcesh/bullmq/commit/6f49db3fb15119d13f99cd83d49f2a7bdcb614cd)) +### Bug Fixes -## [3.5.5](https://github.com/taskforcesh/bullmq/compare/v3.5.4...v3.5.5) (2023-01-10) +* **queueevents:** add active type fixes [#519](https://github.com/taskforcesh/bullmq/issues/519) ([10af883](https://github.com/taskforcesh/bullmq/commit/10af883db849cf9392b26724903f88752d9be92c)) ([`7679ada`](https://github.com/taskforcesh/bullmq/commit/7679ada2038ae6c3a3bc66a0f46604e1e47e4950)) +* chore: replace tslint with eslint ([`5770aef`](https://github.com/taskforcesh/bullmq/commit/5770aef2cc8fd450b619f154236b77b1a0181605)) -### Bug Fixes +### Fix -* circular references ([#1622](https://github.com/taskforcesh/bullmq/issues/1622)) ([f607ec7](https://github.com/taskforcesh/bullmq/commit/f607ec7530fb4430e8cab7ed325583bd9d171ccf)) +* fix(queueevents): add active type fixes #519 ([`10af883`](https://github.com/taskforcesh/bullmq/commit/10af883db849cf9392b26724903f88752d9be92c)) -## [3.5.4](https://github.com/taskforcesh/bullmq/compare/v3.5.3...v3.5.4) (2023-01-09) +## v1.24.0 (2021-05-03) -### Bug Fixes +### Chore -* [#1603](https://github.com/taskforcesh/bullmq/issues/1603) performance issues in `remove()` ([#1607](https://github.com/taskforcesh/bullmq/issues/1607)) ([2541215](https://github.com/taskforcesh/bullmq/commit/2541215bcf81dcd52eaefa02530c3812a5135fbf)) +* chore(release): 1.24.0 [skip ci] -## [3.5.3](https://github.com/taskforcesh/bullmq/compare/v3.5.2...v3.5.3) (2023-01-07) +# [1.24.0](https://github.com/taskforcesh/bullmq/compare/v1.23.1...v1.24.0) (2021-05-03) +### Features -### Bug Fixes +* add option for non-blocking getNextJob ([13ce2cf](https://github.com/taskforcesh/bullmq/commit/13ce2cfd4ccd64f45567df31de11af95b0fe67d9)) ([`b75b4f1`](https://github.com/taskforcesh/bullmq/commit/b75b4f1b0d63a83f93870c539201aae486782756)) -* **delayed:** remove marker after being consumed ([#1620](https://github.com/taskforcesh/bullmq/issues/1620)) fixes [#1615](https://github.com/taskforcesh/bullmq/issues/1615) ([9fce0f0](https://github.com/taskforcesh/bullmq/commit/9fce0f05e5acc1918a276b03e8cb9c16083cb509)) +### Feature -## [3.5.2](https://github.com/taskforcesh/bullmq/compare/v3.5.1...v3.5.2) (2023-01-04) +* feat: add option for non-blocking getNextJob ([`13ce2cf`](https://github.com/taskforcesh/bullmq/commit/13ce2cfd4ccd64f45567df31de11af95b0fe67d9)) -### Performance Improvements +## v1.23.1 (2021-05-03) -* **get-dependencies:** replace slow object destructuring with single object ([#1612](https://github.com/taskforcesh/bullmq/issues/1612)) ([621748e](https://github.com/taskforcesh/bullmq/commit/621748ec7727b46ce57eb9d2b46ef981874cdf4c)) +### Chore -## [3.5.1](https://github.com/taskforcesh/bullmq/compare/v3.5.0...v3.5.1) (2022-12-23) +* chore(release): 1.23.1 [skip ci] +## [1.23.1](https://github.com/taskforcesh/bullmq/compare/v1.23.0...v1.23.1) (2021-05-03) ### Bug Fixes -* **connection:** throw exception if using keyPrefix in ioredis ([eb6a130](https://github.com/taskforcesh/bullmq/commit/eb6a1305541547725e1717eefe2b678bc445f4d0)) -* **connection:** use includes to check for upstash more reliably ([12efb5c](https://github.com/taskforcesh/bullmq/commit/12efb5c539cb6f031ea6f3a80e4128d2e556e627)) +* add return type for job.waitUntilFinished() ([59ede97](https://github.com/taskforcesh/bullmq/commit/59ede976061a738503f70d9eb0c92a4b1d6ae4a3)) ([`ed35d24`](https://github.com/taskforcesh/bullmq/commit/ed35d24d1f1e8f810a0a4825c6d7e3732772d7c8)) -# [3.5.0](https://github.com/taskforcesh/bullmq/compare/v3.4.2...v3.5.0) (2022-12-20) +### Fix +* fix: add return type for job.waitUntilFinished() ([`59ede97`](https://github.com/taskforcesh/bullmq/commit/59ede976061a738503f70d9eb0c92a4b1d6ae4a3)) -### Bug Fixes -* **job:** fetch parent before job moves to complete ([#1580](https://github.com/taskforcesh/bullmq/issues/1580)) ([6a6c0dc](https://github.com/taskforcesh/bullmq/commit/6a6c0dca30bb0a2417e0c62d4c80202c750322dd)) -* **sandbox:** throw error when no exported function ([#1588](https://github.com/taskforcesh/bullmq/issues/1588)) fixes [#1587](https://github.com/taskforcesh/bullmq/issues/1587) ([c031891](https://github.com/taskforcesh/bullmq/commit/c03189184c8eeeb324f005b86e93d114abbe2154)) +## v1.23.0 (2021-04-30) + +### Chore +* chore(release): 1.23.0 [skip ci] + +# [1.23.0](https://github.com/taskforcesh/bullmq/compare/v1.22.2...v1.23.0) (2021-04-30) ### Features -* **queue:** add getJobState method ([#1593](https://github.com/taskforcesh/bullmq/issues/1593)) ref [#1532](https://github.com/taskforcesh/bullmq/issues/1532) ([b741e84](https://github.com/taskforcesh/bullmq/commit/b741e8456f262b51aa7c68f571c76a3c54d02d37)) +* **job:** pass parent opts to addBulk ([7f21615](https://github.com/taskforcesh/bullmq/commit/7f216153293e45c4f33f2592561c925ca4464d44)) ([`3283af2`](https://github.com/taskforcesh/bullmq/commit/3283af26c1fead3c3395bf2fc82790cb0772380f)) -## [3.4.2](https://github.com/taskforcesh/bullmq/compare/v3.4.1...v3.4.2) (2022-12-15) +### Feature +* feat(job): pass parent opts to addBulk ([`7f21615`](https://github.com/taskforcesh/bullmq/commit/7f216153293e45c4f33f2592561c925ca4464d44)) -### Performance Improvements -* **counts:** delete delayed marker when needed ([#1583](https://github.com/taskforcesh/bullmq/issues/1583)) ([cc26f1c](https://github.com/taskforcesh/bullmq/commit/cc26f1cd550de76c7588d3a98187b80ee78c40c4)) -* **get-children-values:** replace slow object destructuring with single object ([#1586](https://github.com/taskforcesh/bullmq/issues/1586)) ([857d403](https://github.com/taskforcesh/bullmq/commit/857d40377a6eb2c0101e6d16d9085ecd4b52b016)) +## v1.22.2 (2021-04-29) -## [3.4.1](https://github.com/taskforcesh/bullmq/compare/v3.4.0...v3.4.1) (2022-12-10) +### Chore + +* chore(release): 1.22.2 [skip ci] +## [1.22.2](https://github.com/taskforcesh/bullmq/compare/v1.22.1...v1.22.2) (2021-04-29) ### Bug Fixes -* **exponential:** respect exponential backoff delay ([#1581](https://github.com/taskforcesh/bullmq/issues/1581)) ([145dd32](https://github.com/taskforcesh/bullmq/commit/145dd329bb9f8254b404f4c5fbf7a50359202d37)) -* **get-jobs:** filter marker ([#1551](https://github.com/taskforcesh/bullmq/issues/1551)) ([4add0ef](https://github.com/taskforcesh/bullmq/commit/4add0efa7857cc2f7b6d3c0c78a7f82cb7a46933)) +* add missing Redis Cluster types fixes [#406](https://github.com/taskforcesh/bullmq/issues/406) ([07743ff](https://github.com/taskforcesh/bullmq/commit/07743ff310ad716802afdd5bdc6844eb5296318e)) ([`277997d`](https://github.com/taskforcesh/bullmq/commit/277997d0162761921870828e6bf0073d177dc1a4)) -# [3.4.0](https://github.com/taskforcesh/bullmq/compare/v3.3.5...v3.4.0) (2022-12-09) +### Fix +* fix: add missing Redis Cluster types fixes #406 ([`07743ff`](https://github.com/taskforcesh/bullmq/commit/07743ff310ad716802afdd5bdc6844eb5296318e)) -### Features -* **worker:** add ready event for blockingConnection ([#1577](https://github.com/taskforcesh/bullmq/issues/1577)) ([992cc9e](https://github.com/taskforcesh/bullmq/commit/992cc9e9b3046185d3b67f2cc956f30337f458e1)) +## v1.22.1 (2021-04-28) -## [3.3.5](https://github.com/taskforcesh/bullmq/compare/v3.3.4...v3.3.5) (2022-12-08) +### Chore +* chore(release): 1.22.1 [skip ci] -### Bug Fixes +## [1.22.1](https://github.com/taskforcesh/bullmq/compare/v1.22.0...v1.22.1) (2021-04-28) -* **worker:** add token postfix ([#1575](https://github.com/taskforcesh/bullmq/issues/1575)) ([1d3e368](https://github.com/taskforcesh/bullmq/commit/1d3e368021041bb9861761c86fe3e04914b0c52f)) +### Bug Fixes -## [3.3.4](https://github.com/taskforcesh/bullmq/compare/v3.3.3...v3.3.4) (2022-12-07) +* **addjob:** fix redis cluster CROSSSLOT ([a5fd1d7](https://github.com/taskforcesh/bullmq/commit/a5fd1d7a0713585d11bd862bfe2d426d5242bd3c)) ([`b34ccd1`](https://github.com/taskforcesh/bullmq/commit/b34ccd1a91f20354ec7a517c54ba4b0ea708f3d3)) +* chore: barrel export of FlowJob interface ([`c13da36`](https://github.com/taskforcesh/bullmq/commit/c13da36f939f42b8e72a499c5d0b495d7fde8a14)) -### Bug Fixes +### Fix -* **worker:** try catch setname call ([#1576](https://github.com/taskforcesh/bullmq/issues/1576)) fixes [#1574](https://github.com/taskforcesh/bullmq/issues/1574) ([0c42fd8](https://github.com/taskforcesh/bullmq/commit/0c42fd8c07dbac7ace81e97e45440af93fc622a5)) +* fix(addjob): fix redis cluster CROSSSLOT ([`a5fd1d7`](https://github.com/taskforcesh/bullmq/commit/a5fd1d7a0713585d11bd862bfe2d426d5242bd3c)) -## [3.3.3](https://github.com/taskforcesh/bullmq/compare/v3.3.2...v3.3.3) (2022-12-07) +## v1.22.0 (2021-04-28) -### Bug Fixes +### Chore -* do not allow move from active to wait if not owner of the job ([dc1a307](https://github.com/taskforcesh/bullmq/commit/dc1a3077d1521c5dc99824a7fc05d17da03906bc)) +* chore(release): 1.22.0 [skip ci] -## [3.3.2](https://github.com/taskforcesh/bullmq/compare/v3.3.1...v3.3.2) (2022-12-05) +# [1.22.0](https://github.com/taskforcesh/bullmq/compare/v1.21.0...v1.22.0) (2021-04-28) +### Features -### Bug Fixes +* **jobcreate:** allow passing parent in job.create ([ede3626](https://github.com/taskforcesh/bullmq/commit/ede3626b65fb5d3f4cebc55c813e9fa4b482b887)) ([`a7cb577`](https://github.com/taskforcesh/bullmq/commit/a7cb57704e4662b15a49228bbee56b346ee56d06)) -* floor pexpire to integer ([1d5de42](https://github.com/taskforcesh/bullmq/commit/1d5de425a19ebf879a8f9a7e0543d87a4d358be1)) +* chore(deps): add chai-as-promised dev dependency ([`51457cf`](https://github.com/taskforcesh/bullmq/commit/51457cfd38ec05f32aaef7f5bac0aaf32518827a)) -## [3.3.1](https://github.com/taskforcesh/bullmq/compare/v3.3.0...v3.3.1) (2022-12-05) +### Feature +* feat(jobcreate): allow passing parent in job.create ([`ede3626`](https://github.com/taskforcesh/bullmq/commit/ede3626b65fb5d3f4cebc55c813e9fa4b482b887)) -### Bug Fixes +### Test -* **get-workers:** set name when ready event in connection ([#1564](https://github.com/taskforcesh/bullmq/issues/1564)) ([de93c17](https://github.com/taskforcesh/bullmq/commit/de93c172901650e1666c48423a39076f2c7b9c7b)) -* **job:** console warn custom job ids when they represent integers ([#1569](https://github.com/taskforcesh/bullmq/issues/1569)) ([6e677d2](https://github.com/taskforcesh/bullmq/commit/6e677d2800957b368bef4247b8e4328c5758f262)) +* test: using rejectedWith in expect ([`c3ae5dc`](https://github.com/taskforcesh/bullmq/commit/c3ae5dc7afa43c80d3dc1017a132fd078bfaa08f)) -# [3.3.0](https://github.com/taskforcesh/bullmq/compare/v3.2.5...v3.3.0) (2022-12-04) +## v1.21.0 (2021-04-26) -### Features +### Chore -* **queue-events:** support duplicated event ([#1549](https://github.com/taskforcesh/bullmq/issues/1549)) ([18bc4eb](https://github.com/taskforcesh/bullmq/commit/18bc4eb50432f8aa27f2395750a7617317b66ca1)) +* chore(release): 1.21.0 [skip ci] -## [3.2.5](https://github.com/taskforcesh/bullmq/compare/v3.2.4...v3.2.5) (2022-12-04) +# [1.21.0](https://github.com/taskforcesh/bullmq/compare/v1.20.6...v1.21.0) (2021-04-26) +### Features -### Bug Fixes +* add typing for addNextRepeatableJob ([a3be937](https://github.com/taskforcesh/bullmq/commit/a3be9379e29ae3e01264e2269e8b03aa614fd42c)) ([`f4d89f0`](https://github.com/taskforcesh/bullmq/commit/f4d89f0d6b8b5461e3738a71f4554f12d68db4e9)) -* **add-job:** throw error when jobId represents an integer ([#1556](https://github.com/taskforcesh/bullmq/issues/1556)) ([db617d7](https://github.com/taskforcesh/bullmq/commit/db617d79e8f55b5c9e0df4b6bfd4247612016da1)) +### Feature -## [3.2.4](https://github.com/taskforcesh/bullmq/compare/v3.2.3...v3.2.4) (2022-11-29) +* feat: add typing for addNextRepeatableJob ([`a3be937`](https://github.com/taskforcesh/bullmq/commit/a3be9379e29ae3e01264e2269e8b03aa614fd42c)) -### Bug Fixes +## v1.20.6 (2021-04-25) -* **add-job:** do not update job that already exist ([#1550](https://github.com/taskforcesh/bullmq/issues/1550)) ([26f6311](https://github.com/taskforcesh/bullmq/commit/26f6311cd0d2b936e404d0abebca9637f314a209)) +### Chore -## [3.2.3](https://github.com/taskforcesh/bullmq/compare/v3.2.2...v3.2.3) (2022-11-29) +* chore(release): 1.20.6 [skip ci] +## [1.20.6](https://github.com/taskforcesh/bullmq/compare/v1.20.5...v1.20.6) (2021-04-25) ### Bug Fixes -* **rate-limit:** delete rateLimiterKey when 0 ([#1553](https://github.com/taskforcesh/bullmq/issues/1553)) ([0b88e5b](https://github.com/taskforcesh/bullmq/commit/0b88e5b94b4a0dc0d4000f7fd4b327f402248ad2)) +* **movetocompleted:** should not complete before children ([812ff66](https://github.com/taskforcesh/bullmq/commit/812ff664b3e162dd87831ca04ebfdb783cc7ae5b)) ([`7320304`](https://github.com/taskforcesh/bullmq/commit/73203048a5ff085a5d6fe006a1173ca179b8fd5a)) -## [3.2.2](https://github.com/taskforcesh/bullmq/compare/v3.2.1...v3.2.2) (2022-11-15) +### Fix +* fix(movetocompleted): should not complete before children ([`812ff66`](https://github.com/taskforcesh/bullmq/commit/812ff664b3e162dd87831ca04ebfdb783cc7ae5b)) -### Bug Fixes -* **rate-limit:** check job is active before moving to wait ([9502167](https://github.com/taskforcesh/bullmq/commit/9502167bb0d9008fc8811ff7980dc8126fbc5ac2)) +## v1.20.5 (2021-04-23) -## [3.2.1](https://github.com/taskforcesh/bullmq/compare/v3.2.0...v3.2.1) (2022-11-15) +### Chore + +* chore(release): 1.20.5 [skip ci] +## [1.20.5](https://github.com/taskforcesh/bullmq/compare/v1.20.4...v1.20.5) (2021-04-23) ### Bug Fixes -* **worker:** consider removed jobs in failed event ([#1500](https://github.com/taskforcesh/bullmq/issues/1500)) ([8704b9a](https://github.com/taskforcesh/bullmq/commit/8704b9a10575fd7df738296f7156057123592b86)) +* **obliterate:** correctly remove many jobs ([b5ae4ce](https://github.com/taskforcesh/bullmq/commit/b5ae4ce92aeaf000408ffbbcd22d829cee20f2f8)) ([`dacd0c6`](https://github.com/taskforcesh/bullmq/commit/dacd0c66efdba779875239fcab3d18dd6a45e052)) -# [3.2.0](https://github.com/taskforcesh/bullmq/compare/v3.1.3...v3.2.0) (2022-11-09) +### Fix +* fix(obliterate): correctly remove many jobs ([`b5ae4ce`](https://github.com/taskforcesh/bullmq/commit/b5ae4ce92aeaf000408ffbbcd22d829cee20f2f8)) -### Features -* **flow:** move parent to delayed when delay option is provided ([#1501](https://github.com/taskforcesh/bullmq/issues/1501)) ([2f3e5d5](https://github.com/taskforcesh/bullmq/commit/2f3e5d54f0797bf0d1adf14dbb2b51ad9f9183ca)) +## v1.20.4 (2021-04-23) -## [3.1.3](https://github.com/taskforcesh/bullmq/compare/v3.1.2...v3.1.3) (2022-11-04) +### Chore + +* chore(release): 1.20.4 [skip ci] +## [1.20.4](https://github.com/taskforcesh/bullmq/compare/v1.20.3...v1.20.4) (2021-04-23) ### Bug Fixes -* **delayed:** better handling of marker id ([816376e](https://github.com/taskforcesh/bullmq/commit/816376e7880ae0eafe85a1f9a5aef9fdfe3031a9)) -* **delayed:** notify workers a delayed job is closer in time fixes [#1505](https://github.com/taskforcesh/bullmq/issues/1505) ([6ced4d0](https://github.com/taskforcesh/bullmq/commit/6ced4d06c5c9c8342c9e4f7920a21826871eac1b)) -* **job:** better error message in moveToFailed ([4e9f5bb](https://github.com/taskforcesh/bullmq/commit/4e9f5bb90f87c66eca959ffc9b7a09e05908c2d9)) -* **moveToFinish:** always promote delayed jobs ([7610cc3](https://github.com/taskforcesh/bullmq/commit/7610cc37d4695a885043c251990e153d4ce4440f)) -* **moveToFinished:** revert move promoteDelayedJobs ([7d780db](https://github.com/taskforcesh/bullmq/commit/7d780dbc1d7728ab7b762a5578871b31f27ff80c)) +* remove internal deps on barrel fixes [#469](https://github.com/taskforcesh/bullmq/issues/469) ([#495](https://github.com/taskforcesh/bullmq/issues/495)) ([60dbeed](https://github.com/taskforcesh/bullmq/commit/60dbeed7ff1d9b6cb0e35590713fee8a7be09477)) ([`9cf71f6`](https://github.com/taskforcesh/bullmq/commit/9cf71f66b965a7cd4d92faf239a0750065b53e1d)) -## [3.1.2](https://github.com/taskforcesh/bullmq/compare/v3.1.1...v3.1.2) (2022-11-04) +### Fix +* fix: remove internal deps on barrel fixes #469 (#495) ([`60dbeed`](https://github.com/taskforcesh/bullmq/commit/60dbeed7ff1d9b6cb0e35590713fee8a7be09477)) -### Bug Fixes -* **repeat:** allow easy migration from bullmq <3 to >=3 ([e17b886](https://github.com/taskforcesh/bullmq/commit/e17b886d3e2978e25f23f1a99b88562537a08576)) +## v1.20.3 (2021-04-23) -## [3.1.1](https://github.com/taskforcesh/bullmq/compare/v3.1.0...v3.1.1) (2022-11-03) +### Chore + +* chore(release): 1.20.3 [skip ci] +## [1.20.3](https://github.com/taskforcesh/bullmq/compare/v1.20.2...v1.20.3) (2021-04-23) ### Bug Fixes -* **change-delay:** remove delayed stream ([#1509](https://github.com/taskforcesh/bullmq/issues/1509)) ([6e4809e](https://github.com/taskforcesh/bullmq/commit/6e4809e5d8f7ef35bc0871d21bfcdcb0f1f316c6)) -* **worker:** restore dynamic concurrency change ([#1515](https://github.com/taskforcesh/bullmq/issues/1515)) ([fdac5c2](https://github.com/taskforcesh/bullmq/commit/fdac5c27607dfaaaad1c1256c47f2ae448efcd21)) +* **flows:** correct typings fixes [#492](https://github.com/taskforcesh/bullmq/issues/492) ([a77f80b](https://github.com/taskforcesh/bullmq/commit/a77f80bc07e7627f512323f0dcc9141fe408809e)) ([`3b7c038`](https://github.com/taskforcesh/bullmq/commit/3b7c038a7db24f63b48cbd1d231a6740fef4ea70)) -# [3.1.0](https://github.com/taskforcesh/bullmq/compare/v3.0.1...v3.1.0) (2022-11-02) +### Fix +* fix(flows): correct typings fixes #492 ([`a77f80b`](https://github.com/taskforcesh/bullmq/commit/a77f80bc07e7627f512323f0dcc9141fe408809e)) -### Features -* **workers:** better error message for missing lock ([bf1d086](https://github.com/taskforcesh/bullmq/commit/bf1d0860c70bcc2b604d02ca47e5db64f962d71d)) +## v1.20.2 (2021-04-22) -## [3.0.1](https://github.com/taskforcesh/bullmq/compare/v3.0.0...v3.0.1) (2022-11-02) +### Chore +* chore(release): 1.20.2 [skip ci] + +## [1.20.2](https://github.com/taskforcesh/bullmq/compare/v1.20.1...v1.20.2) (2021-04-22) ### Bug Fixes -* **move-to-delayed:** consider promoting delayed jobs ([#1493](https://github.com/taskforcesh/bullmq/issues/1493)) ([909da2b](https://github.com/taskforcesh/bullmq/commit/909da2bc2718a588379b3fdd9791bc8e51ad1dad)) -* **retry-job:** consider promoting delayed jobs ([#1508](https://github.com/taskforcesh/bullmq/issues/1508)) ([d0b3412](https://github.com/taskforcesh/bullmq/commit/d0b3412d222449c24ab36068a791d08ea19ed922)) +* **movetodelayed:** check if job is in active state ([4e63f70](https://github.com/taskforcesh/bullmq/commit/4e63f70aac367d4dd695bbe07c72a08a82a65d97)) ([`582ae51`](https://github.com/taskforcesh/bullmq/commit/582ae517b979d9d07a9c7937c6ff6d3f449c74e9)) -# [3.0.0](https://github.com/taskforcesh/bullmq/compare/v2.4.0...v3.0.0) (2022-10-25) +### Fix + +* fix(movetodelayed): check if job is in active state ([`4e63f70`](https://github.com/taskforcesh/bullmq/commit/4e63f70aac367d4dd695bbe07c72a08a82a65d97)) + + +## v1.20.1 (2021-04-22) +### Chore + +* chore(release): 1.20.1 [skip ci] + +## [1.20.1](https://github.com/taskforcesh/bullmq/compare/v1.20.0...v1.20.1) (2021-04-22) ### Bug Fixes -* **backoff:** handle backoff strategy as function ([#1463](https://github.com/taskforcesh/bullmq/issues/1463)) ([3640269](https://github.com/taskforcesh/bullmq/commit/36402691a3c7fa500f07e2e11a28318099bdb909)) -* **repeat:** remove cron in favor of pattern option ([#1456](https://github.com/taskforcesh/bullmq/issues/1456)) ([3cc150e](https://github.com/taskforcesh/bullmq/commit/3cc150e32cb5971ad4ba6ff91246aaf75296c165)) +* **worker:** make token optional in processor function fixes [#490](https://github.com/taskforcesh/bullmq/issues/490) ([3940bd7](https://github.com/taskforcesh/bullmq/commit/3940bd71c6faf3bd5fce572b9c1f11cb5b5d2123)) ([`77cc94b`](https://github.com/taskforcesh/bullmq/commit/77cc94b528f1efb35639eef4a2960c8703f9120b)) +* chore(npm): just publish dist files (#486) ([`1b06de3`](https://github.com/taskforcesh/bullmq/commit/1b06de395d36a86a9d8e4227e822eb014dafad2c)) -### Features +### Fix -* add support for dynamic rate limiting ([2d51d2b](https://github.com/taskforcesh/bullmq/commit/2d51d2b33ef49059503e1bca7a582c71f6861ef4)) -* **rate-limit:** remove group key support and improve global rate limit ([81f780a](https://github.com/taskforcesh/bullmq/commit/81f780aeed81e670107d01d01265d407a30e2a62)) +* fix(worker): make token optional in processor function fixes #490 ([`3940bd7`](https://github.com/taskforcesh/bullmq/commit/3940bd71c6faf3bd5fce572b9c1f11cb5b5d2123)) -### BREAKING CHANGES +## v1.20.0 (2021-04-21) -* **rate-limit:** limit by group keys has been removed in favor -of a much simpler and efficent rate-limit implementation. -* **backoff:** object mapping is replaced by single function +### Chore -# [2.4.0](https://github.com/taskforcesh/bullmq/compare/v2.3.2...v2.4.0) (2022-10-24) +* chore(release): 1.20.0 [skip ci] +# [1.20.0](https://github.com/taskforcesh/bullmq/compare/v1.19.3...v1.20.0) (2021-04-21) ### Features -* **flows:** allow parent on root jobs in addBulk method ([#1488](https://github.com/taskforcesh/bullmq/issues/1488)) ref [#1480](https://github.com/taskforcesh/bullmq/issues/1480) ([92308e5](https://github.com/taskforcesh/bullmq/commit/92308e53acf14e0ce108d94ecd616633ac93e35d)) +* **worker:** passing token in processor function ([2249724](https://github.com/taskforcesh/bullmq/commit/2249724b1bc6fbf40b0291400011f201fd02dab3)) ([`c96032a`](https://github.com/taskforcesh/bullmq/commit/c96032a425a155a8a94c9532d61c70617e4a62d5)) -## [2.3.2](https://github.com/taskforcesh/bullmq/compare/v2.3.1...v2.3.2) (2022-10-18) +### Feature +* feat(worker): passing token in processor function ([`2249724`](https://github.com/taskforcesh/bullmq/commit/2249724b1bc6fbf40b0291400011f201fd02dab3)) -### Bug Fixes -* **job:** send failed event when failParentOnFailure ([#1481](https://github.com/taskforcesh/bullmq/issues/1481)) fixes [#1469](https://github.com/taskforcesh/bullmq/issues/1469) ([b20eb6f](https://github.com/taskforcesh/bullmq/commit/b20eb6f65c7e2c4593d5f9f4d4b940f780bf26d2)) +## v1.19.3 (2021-04-20) -## [2.3.1](https://github.com/taskforcesh/bullmq/compare/v2.3.0...v2.3.1) (2022-10-13) +### Chore +* chore(release): 1.19.3 [skip ci] -### Bug Fixes +## [1.19.3](https://github.com/taskforcesh/bullmq/compare/v1.19.2...v1.19.3) (2021-04-20) -* **redis:** replace throw exception by console.error ([fafa2f8](https://github.com/taskforcesh/bullmq/commit/fafa2f89e796796f950e6c4abbdda4d3d71ad1b0)) +### Bug Fixes -# [2.3.0](https://github.com/taskforcesh/bullmq/compare/v2.2.1...v2.3.0) (2022-10-13) +* **movetocompleted:** throw an error if job is not in active state ([c2fe5d2](https://github.com/taskforcesh/bullmq/commit/c2fe5d292fcf8ac2e53906c30282df69d43321b1)) ([`0faf083`](https://github.com/taskforcesh/bullmq/commit/0faf08379d6604973686ea1e3643a9603661823c)) +### Fix -### Features +* fix(movetocompleted): throw an error if job is not in active state ([`c2fe5d2`](https://github.com/taskforcesh/bullmq/commit/c2fe5d292fcf8ac2e53906c30282df69d43321b1)) -* **redis-connection:** allow providing scripts for extension ([#1472](https://github.com/taskforcesh/bullmq/issues/1472)) ([f193cfb](https://github.com/taskforcesh/bullmq/commit/f193cfb1830e127f9fd47a969baad30011a0e3a4)) +### Unknown -## [2.2.1](https://github.com/taskforcesh/bullmq/compare/v2.2.0...v2.2.1) (2022-10-11) +* GitBook: [master] one page modified ([`4f6e8c9`](https://github.com/taskforcesh/bullmq/commit/4f6e8c9ed6127a420f5d9fa817d243d0912038e6)) -### Performance Improvements +## v1.19.2 (2021-04-19) -* **scripts:** pre-build scripts ([#1441](https://github.com/taskforcesh/bullmq/issues/1441)) ([7f72603](https://github.com/taskforcesh/bullmq/commit/7f72603d463f705d0617898cb221f832c49a4aa3)) +### Chore -# [2.2.0](https://github.com/taskforcesh/bullmq/compare/v2.1.3...v2.2.0) (2022-10-10) +* chore(release): 1.19.2 [skip ci] +## [1.19.2](https://github.com/taskforcesh/bullmq/compare/v1.19.1...v1.19.2) (2021-04-19) ### Bug Fixes -* **connection:** validate array of strings in Cluster ([#1468](https://github.com/taskforcesh/bullmq/issues/1468)) fixes [#1467](https://github.com/taskforcesh/bullmq/issues/1467) ([8355182](https://github.com/taskforcesh/bullmq/commit/8355182a372b68ec62e9c3953bacbd69e0abfc74)) +* **worker:** close base class connection [#451](https://github.com/taskforcesh/bullmq/issues/451) ([0875306](https://github.com/taskforcesh/bullmq/commit/0875306ae801a7cbfe04758dc2481cb86ca2ef69)) ([`7521543`](https://github.com/taskforcesh/bullmq/commit/75215430ab1eb1ac11d447621e42579e026a26b5)) +### Fix -### Features +* fix(worker): close base class connection #451 ([`0875306`](https://github.com/taskforcesh/bullmq/commit/0875306ae801a7cbfe04758dc2481cb86ca2ef69)) -* **flow-producer:** allow parent opts in root job when adding a flow ([#1110](https://github.com/taskforcesh/bullmq/issues/1110)) ref [#1097](https://github.com/taskforcesh/bullmq/issues/1097) ([3c3ac71](https://github.com/taskforcesh/bullmq/commit/3c3ac718ad84f6bd0cc1575013c948e767b46f38)) -## [2.1.3](https://github.com/taskforcesh/bullmq/compare/v2.1.2...v2.1.3) (2022-09-30) +## v1.19.1 (2021-04-19) +### Chore + +* chore(release): 1.19.1 [skip ci] + +## [1.19.1](https://github.com/taskforcesh/bullmq/compare/v1.19.0...v1.19.1) (2021-04-19) ### Bug Fixes -* **worker:** clear stalled jobs timer when closing worker ([1567a0d](https://github.com/taskforcesh/bullmq/commit/1567a0df0ca3c8d43a18990fe488888f4ff68040)) +* remove repeatable with obliterate ([1c5e581](https://github.com/taskforcesh/bullmq/commit/1c5e581a619ba707863c2a6e9f3e5f6eadfbe64f)) ([`8bccbc3`](https://github.com/taskforcesh/bullmq/commit/8bccbc39412da0c6ff9a2279df7031a3b40763f8)) -## [2.1.2](https://github.com/taskforcesh/bullmq/compare/v2.1.1...v2.1.2) (2022-09-29) +* chore(deps): bump ssri from 6.0.1 to 6.0.2 +Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2. +- [Release notes](https://github.com/npm/ssri/releases) +- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md) +- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2) -### Bug Fixes +Signed-off-by: dependabot[bot] <support@github.com> ([`14b2d5e`](https://github.com/taskforcesh/bullmq/commit/14b2d5e2a882f38158b5037eae8ab0e55494bcdb)) -* **getters:** fix return type of getJobLogs ([d452927](https://github.com/taskforcesh/bullmq/commit/d4529278c59b2c94eee604c7d4455acc490679e9)) +### Fix -## [2.1.1](https://github.com/taskforcesh/bullmq/compare/v2.1.0...v2.1.1) (2022-09-28) +* fix: remove repeatable with obliterate ([`1c5e581`](https://github.com/taskforcesh/bullmq/commit/1c5e581a619ba707863c2a6e9f3e5f6eadfbe64f)) -### Bug Fixes +## v1.19.0 (2021-04-19) -* **sandbox:** get open port using built-in module instead of get-port ([#1446](https://github.com/taskforcesh/bullmq/issues/1446)) ([6db6288](https://github.com/taskforcesh/bullmq/commit/6db628868a9d64c5a3e47d1c9201017e6d05c1ae)) +### Chore -# [2.1.0](https://github.com/taskforcesh/bullmq/compare/v2.0.2...v2.1.0) (2022-09-23) +* chore(release): 1.19.0 [skip ci] +# [1.19.0](https://github.com/taskforcesh/bullmq/compare/v1.18.2...v1.19.0) (2021-04-19) ### Features -* **job-options:** add failParentOnFailure option ([#1339](https://github.com/taskforcesh/bullmq/issues/1339)) ([65e5c36](https://github.com/taskforcesh/bullmq/commit/65e5c3678771f26555c9128bdb908dd62e3584f9)) +* add workerDelay option to limiter ([9b6ab8a](https://github.com/taskforcesh/bullmq/commit/9b6ab8ad4bc0a94068f3bc707ad9c0ed01596068)) ([`cee7a02`](https://github.com/taskforcesh/bullmq/commit/cee7a02d8b08fea11bdff26c896fd2afcc82468d)) -## [2.0.2](https://github.com/taskforcesh/bullmq/compare/v2.0.1...v2.0.2) (2022-09-22) +### Feature +* feat: add workerDelay option to limiter ([`9b6ab8a`](https://github.com/taskforcesh/bullmq/commit/9b6ab8ad4bc0a94068f3bc707ad9c0ed01596068)) -### Bug Fixes +### Unknown -* **job:** update delay value when moving to wait ([#1436](https://github.com/taskforcesh/bullmq/issues/1436)) ([9560915](https://github.com/taskforcesh/bullmq/commit/95609158c1800cf661f22ad7995541fb9474826a)) +* GitBook: [master] 39 pages modified ([`3becac3`](https://github.com/taskforcesh/bullmq/commit/3becac377a13eaa0c66d8f8547a206763b1605cf)) -## [2.0.1](https://github.com/taskforcesh/bullmq/compare/v2.0.0...v2.0.1) (2022-09-21) +## v1.18.2 (2021-04-16) + +### Chore + +* chore(release): 1.18.2 [skip ci] + +## [1.18.2](https://github.com/taskforcesh/bullmq/compare/v1.18.1...v1.18.2) (2021-04-16) ### Bug Fixes -* **connection:** throw error when no noeviction policy ([3468390](https://github.com/taskforcesh/bullmq/commit/3468390dd6331291f4cf71a54c32028a06d1d99e)) +* add parentKey property to Job ([febc60d](https://github.com/taskforcesh/bullmq/commit/febc60dba94c29b85be3e1bc2547fa83ed932806)) ([`bc66de0`](https://github.com/taskforcesh/bullmq/commit/bc66de0678ccf93ff8add2e20e4b70870e7b641a)) +### Fix -### Performance Improvements +* fix: add parentKey property to Job ([`febc60d`](https://github.com/taskforcesh/bullmq/commit/febc60dba94c29b85be3e1bc2547fa83ed932806)) -* **events:** remove data and opts from added event ([e13d4b8](https://github.com/taskforcesh/bullmq/commit/e13d4b8e0c4f99203f4249ccc86e369d124ff483)) +### Unknown -# [2.0.0](https://github.com/taskforcesh/bullmq/compare/v1.91.1...v2.0.0) (2022-09-21) +* GitBook: [master] one page modified ([`b0d33c5`](https://github.com/taskforcesh/bullmq/commit/b0d33c51e80dd3706596af57f553b4086bcdee6d)) +* GitBook: [master] 40 pages modified ([`498073d`](https://github.com/taskforcesh/bullmq/commit/498073dabb106153d374f41fdac2f10d3dd9fd21)) -### Bug Fixes +* GitBook: [master] 2 pages modified ([`d27e3eb`](https://github.com/taskforcesh/bullmq/commit/d27e3ebf120dae16f74a02bec833b50d01477a16)) -* **compat:** remove Queue3 class ([#1421](https://github.com/taskforcesh/bullmq/issues/1421)) ([fc797f7](https://github.com/taskforcesh/bullmq/commit/fc797f7cd334c19a95cb1290ddb6611cd3417179)) -* **delayed:** promote delayed jobs instead of picking one by one ([1b938af](https://github.com/taskforcesh/bullmq/commit/1b938af75069d69772ddf2b03f95db7f53eada68)) -* **delayed:** remove marker when promoting delayed job ([1aea0dc](https://github.com/taskforcesh/bullmq/commit/1aea0dcc5fb29086cef3d0c432c387d6f8261963)) -* **getters:** compensate for "mark" job id ([231b9aa](https://github.com/taskforcesh/bullmq/commit/231b9aa0f4781e4493d3ea272c33b27c0b7dc0ab)) -* **sandbox:** remove progress method ([b43267b](https://github.com/taskforcesh/bullmq/commit/b43267be50f9eade8233500d189d46940a01cc29)) -* **stalled-jobs:** handle job id 0 ([829e6e0](https://github.com/taskforcesh/bullmq/commit/829e6e0252e78bf2cbc55ab1d3bd153faa0cee4c)) -* **worker:** do not allow stalledInterval to be less than zero ([831ffc5](https://github.com/taskforcesh/bullmq/commit/831ffc520ccd3c6ea63af6b04ddddc9f7829c667)) -* **workers:** use connection closing to determine closing status ([fe1d173](https://github.com/taskforcesh/bullmq/commit/fe1d17321f1eb49bd872c52965392add22729941)) +## v1.18.1 (2021-04-16) -### Features +### Chore -* improve delayed jobs and remove QueueScheduler ([1f66e5a](https://github.com/taskforcesh/bullmq/commit/1f66e5a6c891d52e0671e58a685dbca511e45e7e)) -* move stalled jobs check and handling to Worker class from QueueScheduler ([13769cb](https://github.com/taskforcesh/bullmq/commit/13769cbe38ba22793cbc66e9706a6be28a7f1512)) +* chore(release): 1.18.1 [skip ci] +## [1.18.1](https://github.com/taskforcesh/bullmq/compare/v1.18.0...v1.18.1) (2021-04-16) + +### Bug Fixes -### BREAKING CHANGES +* rename Flow to FlowProducer class ([c64321d](https://github.com/taskforcesh/bullmq/commit/c64321d03e2af7cee88eaf6df6cd2e5b7840ae64)) ([`b43431c`](https://github.com/taskforcesh/bullmq/commit/b43431c47defe0b9a68d64fab8c9e09c953281c3)) -* **compat:** The compatibility class for Bullv3 is no longer available. -* The QueueScheduler class is removed since it is not necessary anymore. -Delayed jobs are now handled in a much simpler and -robust way, without the need of a separate process. -* Failed and stalled events are now produced by the Worker class instead of by the QueueScheduler. -* The minimum Redis recommended version is 6.2.0. +### Fix -## [1.91.1](https://github.com/taskforcesh/bullmq/compare/v1.91.0...v1.91.1) (2022-09-18) +* fix: rename Flow to FlowProducer class ([`c64321d`](https://github.com/taskforcesh/bullmq/commit/c64321d03e2af7cee88eaf6df6cd2e5b7840ae64)) -### Bug Fixes +## v1.18.0 (2021-04-16) -* **drain:** consider empty active list ([#1412](https://github.com/taskforcesh/bullmq/issues/1412)) ([f919a50](https://github.com/taskforcesh/bullmq/commit/f919a50b2f4972dcb9ecd5848b0f7fd9a0e137ea)) +### Chore -# [1.91.0](https://github.com/taskforcesh/bullmq/compare/v1.90.2...v1.91.0) (2022-09-16) +* chore(release): 1.18.0 [skip ci] +# [1.18.0](https://github.com/taskforcesh/bullmq/compare/v1.17.0...v1.18.0) (2021-04-16) ### Features -* **sandbox:** support update method ([#1416](https://github.com/taskforcesh/bullmq/issues/1416)) ([606b75d](https://github.com/taskforcesh/bullmq/commit/606b75d53e12dfc109f01eda38736c07e829e9b7)) +* add remove support for flows ([4e8a7ef](https://github.com/taskforcesh/bullmq/commit/4e8a7efd53f918937478ae13f5da7dee9ea9d8b3)) ([`301e0fb`](https://github.com/taskforcesh/bullmq/commit/301e0fb9acc1c21ae129bc7e574ad88a4c53b577)) -## [1.90.2](https://github.com/taskforcesh/bullmq/compare/v1.90.1...v1.90.2) (2022-09-12) +### Feature +* feat: add remove support for flows ([`4e8a7ef`](https://github.com/taskforcesh/bullmq/commit/4e8a7efd53f918937478ae13f5da7dee9ea9d8b3)) -### Performance Improvements -* **script-loader:** use cache to read script once ([#1410](https://github.com/taskforcesh/bullmq/issues/1410)) ([f956e93](https://github.com/taskforcesh/bullmq/commit/f956e937ae3488cdcd0e2eacbe3e096c8066ebd1)) +## v1.17.0 (2021-04-16) -## [1.90.1](https://github.com/taskforcesh/bullmq/compare/v1.90.0...v1.90.1) (2022-09-02) +### Chore +* chore(release): 1.17.0 [skip ci] -### Performance Improvements +# [1.17.0](https://github.com/taskforcesh/bullmq/compare/v1.16.2...v1.17.0) (2021-04-16) -* **add-job:** handle parent split on js ([#1397](https://github.com/taskforcesh/bullmq/issues/1397)) ([566f074](https://github.com/taskforcesh/bullmq/commit/566f0747110679e5b07e7642fef793744565fffe)) +### Features -# [1.90.0](https://github.com/taskforcesh/bullmq/compare/v1.89.2...v1.90.0) (2022-08-30) +* **job:** consider waiting-children state ([2916dd5](https://github.com/taskforcesh/bullmq/commit/2916dd5d7ba9438d2eae66436899d32ec8ac0e91)) ([`dcb5f5b`](https://github.com/taskforcesh/bullmq/commit/dcb5f5b12b133a60b4ed09cc083915187c84ed2d)) +### Feature -### Features +* feat(job): consider waiting-children state ([`2916dd5`](https://github.com/taskforcesh/bullmq/commit/2916dd5d7ba9438d2eae66436899d32ec8ac0e91)) -* **repeat:** allow passing a cron strategy ([#1248](https://github.com/taskforcesh/bullmq/issues/1248)) ref [#1245](https://github.com/taskforcesh/bullmq/issues/1245) ([7f0534f](https://github.com/taskforcesh/bullmq/commit/7f0534f72449ae14a7415fa17a2eb2a70136a8b0)) +### Style -## [1.89.2](https://github.com/taskforcesh/bullmq/compare/v1.89.1...v1.89.2) (2022-08-23) +* style: fixing comments ([`9d5767b`](https://github.com/taskforcesh/bullmq/commit/9d5767b649b4049e276439549d3ab07d7fa7dc4b)) -### Bug Fixes +## v1.16.2 (2021-04-14) -* **job:** update delay when changeDelay ([#1389](https://github.com/taskforcesh/bullmq/issues/1389)) fixes [#1160](https://github.com/taskforcesh/bullmq/issues/1160) ([d9b100d](https://github.com/taskforcesh/bullmq/commit/d9b100d04112c518ef2efbcf5586aa1226ccccab)) +### Chore -## [1.89.1](https://github.com/taskforcesh/bullmq/compare/v1.89.0...v1.89.1) (2022-08-19) +* chore(release): 1.16.2 [skip ci] +## [1.16.2](https://github.com/taskforcesh/bullmq/compare/v1.16.1...v1.16.2) (2021-04-14) ### Bug Fixes -* revert "chore: allow esm imports through exports field" ([#1388](https://github.com/taskforcesh/bullmq/issues/1388)) ([8e51272](https://github.com/taskforcesh/bullmq/commit/8e512724b1e8145bceb0152b70a934decf6d6864)) +* read lua scripts serially ([69e73b8](https://github.com/taskforcesh/bullmq/commit/69e73b87bc6855623240a7b1a45368a7914b23b7)) ([`ca5db26`](https://github.com/taskforcesh/bullmq/commit/ca5db266d7f2407e16c5edb8d068d5d374a902f8)) -# [1.89.0](https://github.com/taskforcesh/bullmq/compare/v1.88.2...v1.89.0) (2022-08-18) +### Fix +* fix: read lua scripts serially ([`69e73b8`](https://github.com/taskforcesh/bullmq/commit/69e73b87bc6855623240a7b1a45368a7914b23b7)) -### Features -* **job:** expose delay in instance ([#1386](https://github.com/taskforcesh/bullmq/issues/1386)) ([d4d0d2e](https://github.com/taskforcesh/bullmq/commit/d4d0d2e737c7ceb5eb34a2c50d53bd1081e0ad4a)) +## v1.16.1 (2021-04-12) -## [1.88.2](https://github.com/taskforcesh/bullmq/compare/v1.88.1...v1.88.2) (2022-08-18) +### Chore + +* chore(release): 1.16.1 [skip ci] +## [1.16.1](https://github.com/taskforcesh/bullmq/compare/v1.16.0...v1.16.1) (2021-04-12) ### Bug Fixes -* revert "feat(sandbox): experimental support ESM" ([#1384](https://github.com/taskforcesh/bullmq/issues/1384)) ([7d180eb](https://github.com/taskforcesh/bullmq/commit/7d180eb18daa41062dcbca72213bc9d9f40153db)) +* **flow:** relative dependency path fixes [#466](https://github.com/taskforcesh/bullmq/issues/466) ([d104bf8](https://github.com/taskforcesh/bullmq/commit/d104bf802d6d1000ac1ccd781fa7a07bce2fe140)) ([`c1b5211`](https://github.com/taskforcesh/bullmq/commit/c1b5211fc6455c2b256094b87bffa3f84ff03c12)) -## [1.88.1](https://github.com/taskforcesh/bullmq/compare/v1.88.0...v1.88.1) (2022-08-17) +### Fix +* fix(flow): relative dependency path fixes #466 ([`d104bf8`](https://github.com/taskforcesh/bullmq/commit/d104bf802d6d1000ac1ccd781fa7a07bce2fe140)) -### Bug Fixes +### Unknown -* fix husky install ([edee918](https://github.com/taskforcesh/bullmq/commit/edee918e84ba895ed4ef63cabcc26b97d9c52d8d)) +* GitBook: [master] 39 pages modified ([`59bc9ad`](https://github.com/taskforcesh/bullmq/commit/59bc9ad4216cebb4d8cc670da3f745e83acc4ac1)) -# [1.88.0](https://github.com/taskforcesh/bullmq/compare/v1.87.2...v1.88.0) (2022-08-17) +## v1.16.0 (2021-04-12) -### Bug Fixes +### Chore -* **clean:** consider priority when cleaning waiting jobs ([#1357](https://github.com/taskforcesh/bullmq/issues/1357)) ([ced5be1](https://github.com/taskforcesh/bullmq/commit/ced5be1c9531953baa9cf87d6bda3faa5863270d)) -* **parent-priority-check:** use tonumber on priority ([#1370](https://github.com/taskforcesh/bullmq/issues/1370)) ([e2043c6](https://github.com/taskforcesh/bullmq/commit/e2043c6f4b8ad5faea8c13edde76aea60612fec6)) +* chore(release): 1.16.0 [skip ci] +# [1.16.0](https://github.com/taskforcesh/bullmq/compare/v1.15.1...v1.16.0) (2021-04-12) ### Features -* **sandbox:** experimental support ESM ([ed0faff](https://github.com/taskforcesh/bullmq/commit/ed0faff3c67c436116eb625ffacb03e435caee3f)) +* add support for flows (parent-child dependencies) ([#454](https://github.com/taskforcesh/bullmq/issues/454)) ([362212c](https://github.com/taskforcesh/bullmq/commit/362212c58c4be36b5435df862503699deb8bb79c)) ([`d1254fa`](https://github.com/taskforcesh/bullmq/commit/d1254fadc1060260f82490de9aa4d874d6ddcd52)) -## [1.87.2](https://github.com/taskforcesh/bullmq/compare/v1.87.1...v1.87.2) (2022-08-13) - - -### Bug Fixes +* chore: add proper return type to getChildrenValues ([`331462c`](https://github.com/taskforcesh/bullmq/commit/331462c96313ecb79618258c0aa2416a6f22e953)) -* **move-parent-to-wait:** emit waiting instead of active event ([#1356](https://github.com/taskforcesh/bullmq/issues/1356)) ([53578dd](https://github.com/taskforcesh/bullmq/commit/53578dd1cbe31b49361a833b1aca449486f3b925)) +* chore(deps): upgrade ioredis to 4.25.0 ([`bc533ca`](https://github.com/taskforcesh/bullmq/commit/bc533ca119600f92caca020dd280c1011e849417)) -## [1.87.1](https://github.com/taskforcesh/bullmq/compare/v1.87.0...v1.87.1) (2022-08-09) +### Documentation +* docs: fix typo ([`baa90b2`](https://github.com/taskforcesh/bullmq/commit/baa90b2090bcc7d86ed3dedd4d9d6202af6c8606)) -### Bug Fixes +* docs: update README.md ([`927cc0c`](https://github.com/taskforcesh/bullmq/commit/927cc0c1abc647ad105ac56f5443ec3c675f04d5)) -* **job:** declare discarded as protected ([#1352](https://github.com/taskforcesh/bullmq/issues/1352)) ([870e01c](https://github.com/taskforcesh/bullmq/commit/870e01c4ab602c1e6e351cc369f3eac5f7afa083)) +### Feature -# [1.87.0](https://github.com/taskforcesh/bullmq/compare/v1.86.10...v1.87.0) (2022-08-05) +* feat: add support for flows (parent-child dependencies) (#454) ([`362212c`](https://github.com/taskforcesh/bullmq/commit/362212c58c4be36b5435df862503699deb8bb79c)) +### Refactor -### Features +* refactor(getstate): adding getState script ([`a044124`](https://github.com/taskforcesh/bullmq/commit/a044124a88c23ab43746026486eac41432d37ff7)) -* **flow:** consider priority when parent is moved ([#1286](https://github.com/taskforcesh/bullmq/issues/1286)) ([d49760d](https://github.com/taskforcesh/bullmq/commit/d49760d09420c5fcc99ab06c8fe36168755fd397)) +### Unknown -## [1.86.10](https://github.com/taskforcesh/bullmq/compare/v1.86.9...v1.86.10) (2022-07-29) +* GitBook: [master] one page modified ([`5c6e5d2`](https://github.com/taskforcesh/bullmq/commit/5c6e5d230df52bd9055ebecf5f5cb4f65764a15d)) +* GitBook: [master] 3 pages modified ([`1450fea`](https://github.com/taskforcesh/bullmq/commit/1450feab58e0ab13737e465dbb5d8bcabf52b5d4)) -### Performance Improvements +* GitBook: [master] 3 pages modified ([`2a903c2`](https://github.com/taskforcesh/bullmq/commit/2a903c2f0c1100dd64b3b0852fea8b171da329ec)) -* **clean-jobs-in-set:** use ZRANGEBYSCORE when limit > 0 ([#1338](https://github.com/taskforcesh/bullmq/issues/1338)) ([f0d9985](https://github.com/taskforcesh/bullmq/commit/f0d998541f03778ca2a092080a19e6bf7b7d0af1)) +* GitBook: [master] one page modified ([`e2b6479`](https://github.com/taskforcesh/bullmq/commit/e2b64792e84b1983d5bdeab8e630c02a9275cca1)) -## [1.86.9](https://github.com/taskforcesh/bullmq/compare/v1.86.8...v1.86.9) (2022-07-27) +* GitBook: [master] one page modified ([`c2cfc96`](https://github.com/taskforcesh/bullmq/commit/c2cfc965a05d1f2292e81b3819426059a7d5795f)) -### Bug Fixes +## v1.15.1 (2021-03-19) -* **get-flow:** consider groupKey ([#1336](https://github.com/taskforcesh/bullmq/issues/1336)) fixes [#1334](https://github.com/taskforcesh/bullmq/issues/1334) ([9f31272](https://github.com/taskforcesh/bullmq/commit/9f31272fa8b3f5b8ab26f15e21bd80537c5baef0)) +### Chore -## [1.86.8](https://github.com/taskforcesh/bullmq/compare/v1.86.7...v1.86.8) (2022-07-26) +* chore(release): 1.15.1 [skip ci] +## [1.15.1](https://github.com/taskforcesh/bullmq/compare/v1.15.0...v1.15.1) (2021-03-19) ### Bug Fixes -* **promote:** consider empty queue when paused ([#1335](https://github.com/taskforcesh/bullmq/issues/1335)) ([9f742e8](https://github.com/taskforcesh/bullmq/commit/9f742e88d6338ce9ac7e0413bdac411ab6cf675c)) +* **obliterate:** safer implementation ([82f571f](https://github.com/taskforcesh/bullmq/commit/82f571f2548c61c776b897fd1c5050bb09c8afca)) ([`0e0540e`](https://github.com/taskforcesh/bullmq/commit/0e0540e311abcc366f377f70abf68ede78a279ba)) -## [1.86.7](https://github.com/taskforcesh/bullmq/compare/v1.86.6...v1.86.7) (2022-07-15) +### Fix +* fix(obliterate): safer implementation ([`82f571f`](https://github.com/taskforcesh/bullmq/commit/82f571f2548c61c776b897fd1c5050bb09c8afca)) -### Bug Fixes -* **sandboxed-process:** consider UnrecoverableError ([#1320](https://github.com/taskforcesh/bullmq/issues/1320)) fixes [#1317](https://github.com/taskforcesh/bullmq/issues/1317) ([c1269cc](https://github.com/taskforcesh/bullmq/commit/c1269cc772c6cec84d82ff790b9a7c9cc4242dcb)) +## v1.15.0 (2021-03-18) -## [1.86.6](https://github.com/taskforcesh/bullmq/compare/v1.86.5...v1.86.6) (2022-07-14) +### Chore +* chore(release): 1.15.0 [skip ci] -### Bug Fixes +# [1.15.0](https://github.com/taskforcesh/bullmq/compare/v1.14.8...v1.15.0) (2021-03-18) -* **retry-jobs:** consider paused queue ([#1321](https://github.com/taskforcesh/bullmq/issues/1321)) ([3e9703d](https://github.com/taskforcesh/bullmq/commit/3e9703d17fc9dc601d5d77e999f3e9a137f20843)) +### Features -## [1.86.5](https://github.com/taskforcesh/bullmq/compare/v1.86.4...v1.86.5) (2022-07-09) +* add method to "obliterate" a queue, fixes [#430](https://github.com/taskforcesh/bullmq/issues/430) ([624be0e](https://github.com/taskforcesh/bullmq/commit/624be0ed48159c2aa405025938925a723330e0c2)) ([`61d39d5`](https://github.com/taskforcesh/bullmq/commit/61d39d55967037378710c811a2cbb837950e220c)) +### Feature -### Bug Fixes +* feat: add method to "obliterate" a queue, fixes #430 ([`624be0e`](https://github.com/taskforcesh/bullmq/commit/624be0ed48159c2aa405025938925a723330e0c2)) -* **retry-job:** consider paused queue ([#1314](https://github.com/taskforcesh/bullmq/issues/1314)) ([907ae1d](https://github.com/taskforcesh/bullmq/commit/907ae1d7e3504f31c625ec8a09e32785f08357ff)) +### Unknown -## [1.86.4](https://github.com/taskforcesh/bullmq/compare/v1.86.3...v1.86.4) (2022-06-29) +* GitBook: [master] 38 pages modified ([`300cedc`](https://github.com/taskforcesh/bullmq/commit/300cedcde02c44acda8dbbd5777d89ca9cfba2e5)) +* GitBook: [master] one page modified ([`28dea5f`](https://github.com/taskforcesh/bullmq/commit/28dea5f465fbfdea57f1767791836e0ebf82e104)) -### Bug Fixes +* GitBook: [master] 36 pages and one asset modified ([`321d4a0`](https://github.com/taskforcesh/bullmq/commit/321d4a03929bc1433e99d00f7f1c0a961aa20ca6)) -* **parent:** emit waiting event when no pending children ([#1296](https://github.com/taskforcesh/bullmq/issues/1296)) ([aa8fa3f](https://github.com/taskforcesh/bullmq/commit/aa8fa3f8cd5ab6d7d309d87ae45c558249b1c29c)) -## [1.86.3](https://github.com/taskforcesh/bullmq/compare/v1.86.2...v1.86.3) (2022-06-26) +## v1.14.8 (2021-03-06) +### Chore -### Bug Fixes +* chore(release): 1.14.8 [skip ci] -* avoid calling delay() if queue is being closed ([#1295](https://github.com/taskforcesh/bullmq/issues/1295)) ([52a5045](https://github.com/taskforcesh/bullmq/commit/52a5045b903ed6e0e73dd747748787a6389f12f7)) +## [1.14.8](https://github.com/taskforcesh/bullmq/compare/v1.14.7...v1.14.8) (2021-03-06) -## [1.86.2](https://github.com/taskforcesh/bullmq/compare/v1.86.1...v1.86.2) (2022-06-16) +### Bug Fixes +* specify promise type to make TS 4.1 and 4.2 happy. ([#418](https://github.com/taskforcesh/bullmq/issues/418)) ([702f609](https://github.com/taskforcesh/bullmq/commit/702f609b410d8b0652c2d0504a8a67526966fdc3)) ([`cd4d02b`](https://github.com/taskforcesh/bullmq/commit/cd4d02bd8b44366ac3060ebbd00bafcf1c2cea3a)) -### Bug Fixes +### Fix -* **queue:** get rid of repeat options from defaultJobOptions ([#1284](https://github.com/taskforcesh/bullmq/issues/1284)) ([cdd2a20](https://github.com/taskforcesh/bullmq/commit/cdd2a20c2c4ca47042ecd1da525ecb72941e4910)) +* fix: specify promise type to make TS 4.1 and 4.2 happy. (#418) ([`702f609`](https://github.com/taskforcesh/bullmq/commit/702f609b410d8b0652c2d0504a8a67526966fdc3)) -## [1.86.1](https://github.com/taskforcesh/bullmq/compare/v1.86.0...v1.86.1) (2022-06-12) +### Unknown +* Update README.md ([`c0fb48e`](https://github.com/taskforcesh/bullmq/commit/c0fb48ecc127088006463b806772688be83cd405)) -### Bug Fixes +* Update README.md ([`ac29d08`](https://github.com/taskforcesh/bullmq/commit/ac29d0857a4e31d93ae1782aa3e0838cf125d4ce)) -* unpack empty metrics in batches ([96829db](https://github.com/taskforcesh/bullmq/commit/96829db839fad4489415f7dbb047abdca5566e78)) +* GitBook: [master] one page modified ([`742fe5b`](https://github.com/taskforcesh/bullmq/commit/742fe5bb42e1223d70e0d5046c5d21ef52c026bb)) -# [1.86.0](https://github.com/taskforcesh/bullmq/compare/v1.85.4...v1.86.0) (2022-06-10) +* GitBook: [master] one page modified ([`2ace43d`](https://github.com/taskforcesh/bullmq/commit/2ace43dc0e6103592188d64ac4eda0a8597c3103)) -### Features +## v1.14.7 (2021-02-16) -* **repeat:** save repeatJobKey reference ([#1214](https://github.com/taskforcesh/bullmq/issues/1214)) ([4d5a8e3](https://github.com/taskforcesh/bullmq/commit/4d5a8e33b614cf099369c18298e5b2963b434b1b)) +### Chore -## [1.85.4](https://github.com/taskforcesh/bullmq/compare/v1.85.3...v1.85.4) (2022-06-08) +* chore(release): 1.14.7 [skip ci] +## [1.14.7](https://github.com/taskforcesh/bullmq/compare/v1.14.6...v1.14.7) (2021-02-16) ### Bug Fixes -* **error-prototype:** define custom name for toJSON method ([#1272](https://github.com/taskforcesh/bullmq/issues/1272)) ([66d80da](https://github.com/taskforcesh/bullmq/commit/66d80da4a6043755c7d296addb31857816ea4da3)) +* remove "client" property of QueueBaseOptions ([#324](https://github.com/taskforcesh/bullmq/issues/324)) ([e0b9e71](https://github.com/taskforcesh/bullmq/commit/e0b9e71c4da4a93af54c4386af461c61ab5f146c)) ([`9d0f6e7`](https://github.com/taskforcesh/bullmq/commit/9d0f6e76dfc4f918e039986d9666d5ed485f4904)) -## [1.85.3](https://github.com/taskforcesh/bullmq/compare/v1.85.2...v1.85.3) (2022-06-03) +### Fix +* fix: remove "client" property of QueueBaseOptions (#324) ([`e0b9e71`](https://github.com/taskforcesh/bullmq/commit/e0b9e71c4da4a93af54c4386af461c61ab5f146c)) -### Bug Fixes -* **queue:** fix addBulk signature ResultType ([#1268](https://github.com/taskforcesh/bullmq/issues/1268)) ([f6770cc](https://github.com/taskforcesh/bullmq/commit/f6770cc383b68bf7b2fa655cd9eda713a06835aa)) +## v1.14.6 (2021-02-16) -## [1.85.2](https://github.com/taskforcesh/bullmq/compare/v1.85.1...v1.85.2) (2022-06-01) +### Chore + +* chore(release): 1.14.6 [skip ci] +## [1.14.6](https://github.com/taskforcesh/bullmq/compare/v1.14.5...v1.14.6) (2021-02-16) ### Bug Fixes -* **job:** save finishedOn attribute on instance ([#1267](https://github.com/taskforcesh/bullmq/issues/1267)) ([4cf6a63](https://github.com/taskforcesh/bullmq/commit/4cf6a63d197e6095841bb87cef297a9533ac79c3)) +* remove next job in removeRepeatableByKey fixes [#165](https://github.com/taskforcesh/bullmq/issues/165) ([fb3a7c2](https://github.com/taskforcesh/bullmq/commit/fb3a7c2f429d535dd9f038687d7230d61201defc)) ([`5e6631e`](https://github.com/taskforcesh/bullmq/commit/5e6631e7c3f40b7857d2f73b48abfd3f9d072b35)) -## [1.85.1](https://github.com/taskforcesh/bullmq/compare/v1.85.0...v1.85.1) (2022-05-31) +### Fix +* fix: remove next job in removeRepeatableByKey fixes #165 ([`fb3a7c2`](https://github.com/taskforcesh/bullmq/commit/fb3a7c2f429d535dd9f038687d7230d61201defc)) -### Performance Improvements +### Unknown -* **remove-job:** send prefix key instead of jobKey ([#1252](https://github.com/taskforcesh/bullmq/issues/1252)) ([452856a](https://github.com/taskforcesh/bullmq/commit/452856a6c8c6e67ffda595c26c30988a15c1c1a4)) +* GitBook: [master] one page modified ([`6e61c56`](https://github.com/taskforcesh/bullmq/commit/6e61c5629af24ac9b374786eab4580e6cb3ea2cb)) -# [1.85.0](https://github.com/taskforcesh/bullmq/compare/v1.84.1...v1.85.0) (2022-05-30) +* GitBook: [master] 34 pages modified ([`a006bc0`](https://github.com/taskforcesh/bullmq/commit/a006bc028e9178c0cccf335e9fd25db87120f326)) -### Features +## v1.14.5 (2021-02-16) -* **worker:** change the number of concurrent processes ([#1256](https://github.com/taskforcesh/bullmq/issues/1256)) ref [#22](https://github.com/taskforcesh/bullmq/issues/22) ([940dc8f](https://github.com/taskforcesh/bullmq/commit/940dc8f34d9a46dc9c8384661461bf0558e97600)) +### Chore -## [1.84.1](https://github.com/taskforcesh/bullmq/compare/v1.84.0...v1.84.1) (2022-05-27) +* chore(release): 1.14.5 [skip ci] +## [1.14.5](https://github.com/taskforcesh/bullmq/compare/v1.14.4...v1.14.5) (2021-02-16) ### Bug Fixes -* **waiting-children:** pass right timestamp value in moveToWaitingChildren ([#1260](https://github.com/taskforcesh/bullmq/issues/1260)) ([0f993f7](https://github.com/taskforcesh/bullmq/commit/0f993f71ed481b02a3f859a2109177352336cb9a)) - -# [1.84.0](https://github.com/taskforcesh/bullmq/compare/v1.83.2...v1.84.0) (2022-05-26) +* add jobId support to repeatable jobs fixes [#396](https://github.com/taskforcesh/bullmq/issues/396) ([c2dc669](https://github.com/taskforcesh/bullmq/commit/c2dc6693a4546e547245bc7ec1e71b4841829619)) ([`c5e3a2a`](https://github.com/taskforcesh/bullmq/commit/c5e3a2a73e0714649a3d975d15a45cbcb255db45)) +### Documentation -### Features +* docs: fix typo (#395) ([`e5a29bf`](https://github.com/taskforcesh/bullmq/commit/e5a29bf17dad2d9f75fbeb0db33353ddf49f1643)) -* **flow-producer:** add event listener types ([#1257](https://github.com/taskforcesh/bullmq/issues/1257)) ([19ed099](https://github.com/taskforcesh/bullmq/commit/19ed099905cbb4f071370b2b6d67d9a378e3a8f8)) +### Fix -## [1.83.2](https://github.com/taskforcesh/bullmq/compare/v1.83.1...v1.83.2) (2022-05-24) +* fix: add jobId support to repeatable jobs fixes #396 ([`c2dc669`](https://github.com/taskforcesh/bullmq/commit/c2dc6693a4546e547245bc7ec1e71b4841829619)) -### Bug Fixes +## v1.14.4 (2021-02-08) -* **close:** emit ioredis:close event instead of error ([#1251](https://github.com/taskforcesh/bullmq/issues/1251)) fixes [#1231](https://github.com/taskforcesh/bullmq/issues/1231) ([74c1c38](https://github.com/taskforcesh/bullmq/commit/74c1c38f7ff468da1adc63aff160e31940d682a9)) +### Chore -## [1.83.1](https://github.com/taskforcesh/bullmq/compare/v1.83.0...v1.83.1) (2022-05-24) +* chore(release): 1.14.4 [skip ci] +## [1.14.4](https://github.com/taskforcesh/bullmq/compare/v1.14.3...v1.14.4) (2021-02-08) ### Bug Fixes -* **get-workers:** use blockingConnection client to set clientName ([#1255](https://github.com/taskforcesh/bullmq/issues/1255)) fixes [#1254](https://github.com/taskforcesh/bullmq/issues/1254) ([df796bd](https://github.com/taskforcesh/bullmq/commit/df796bd0c085aff72cef001395809b3f1a8045e4)) +* reconnect at start fixes [#337](https://github.com/taskforcesh/bullmq/issues/337) ([fb33772](https://github.com/taskforcesh/bullmq/commit/fb3377280b3bda04a15a62d2901bdd78b869e08c)) ([`e0f56b3`](https://github.com/taskforcesh/bullmq/commit/e0f56b3ce656cf5b609996905b14caf4d1fcb3ab)) -# [1.83.0](https://github.com/taskforcesh/bullmq/compare/v1.82.3...v1.83.0) (2022-05-20) +### Fix +* fix: reconnect at start fixes #337 ([`fb33772`](https://github.com/taskforcesh/bullmq/commit/fb3377280b3bda04a15a62d2901bdd78b869e08c)) -### Features +### Test -* **flow-producer:** easier to build extension ([#1250](https://github.com/taskforcesh/bullmq/issues/1250)) ([aaf637e](https://github.com/taskforcesh/bullmq/commit/aaf637e74b9610651fd9e4efc5ff349971b7bb26)) +* test: skip test for invalid connection ([`19dfd78`](https://github.com/taskforcesh/bullmq/commit/19dfd78ecf034df06032bbf6b805d8114ac7c182)) -## [1.82.3](https://github.com/taskforcesh/bullmq/compare/v1.82.2...v1.82.3) (2022-05-19) +## v1.14.3 (2021-02-07) + +### Chore + +* chore(release): 1.14.3 [skip ci] + +## [1.14.3](https://github.com/taskforcesh/bullmq/compare/v1.14.2...v1.14.3) (2021-02-07) ### Bug Fixes -* **redis-connection:** save cluster opts and coerse redis version ([#1247](https://github.com/taskforcesh/bullmq/issues/1247)) ref [#1246](https://github.com/taskforcesh/bullmq/issues/1246) fixes [#1243](https://github.com/taskforcesh/bullmq/issues/1243) ([acb69b5](https://github.com/taskforcesh/bullmq/commit/acb69b57d7a6417b8ca9fe1576a94d16e41f12d7)) +* **worker:** avoid possible infinite loop fixes [#389](https://github.com/taskforcesh/bullmq/issues/389) ([d05566e](https://github.com/taskforcesh/bullmq/commit/d05566ec0153f31a1257f7338399fdb55c959487)) ([`8266fcc`](https://github.com/taskforcesh/bullmq/commit/8266fccc4bbac63a2a0509e4df749a2b07fc72d9)) -## [1.82.2](https://github.com/taskforcesh/bullmq/compare/v1.82.1...v1.82.2) (2022-05-17) +### Fix +* fix(worker): avoid possible infinite loop fixes #389 ([`d05566e`](https://github.com/taskforcesh/bullmq/commit/d05566ec0153f31a1257f7338399fdb55c959487)) -### Bug Fixes -* **job:** add job helper attribute for extension ([#1242](https://github.com/taskforcesh/bullmq/issues/1242)) ([4d7ae9e](https://github.com/taskforcesh/bullmq/commit/4d7ae9e3fda23650e802ebac6b33ff3350f116f6)) +## v1.14.2 (2021-02-02) -## [1.82.1](https://github.com/taskforcesh/bullmq/compare/v1.82.0...v1.82.1) (2022-05-16) +### Chore +* chore(release): 1.14.2 [skip ci] + +## [1.14.2](https://github.com/taskforcesh/bullmq/compare/v1.14.1...v1.14.2) (2021-02-02) ### Bug Fixes -* **remove-job:** pass right prev param in removed event ([#1237](https://github.com/taskforcesh/bullmq/issues/1237)) ([54df47e](https://github.com/taskforcesh/bullmq/commit/54df47edf715a0a2a42687bf827e0a62c03951a5)) +* improve job timeout notification by giving the job name and id in the error message ([#387](https://github.com/taskforcesh/bullmq/issues/387)) ([ca886b1](https://github.com/taskforcesh/bullmq/commit/ca886b1f854051aed0888f5b872a64b052b2383e)) ([`c76d3f9`](https://github.com/taskforcesh/bullmq/commit/c76d3f9547fc88c286b171982ff07ce4e6c0ff33)) -# [1.82.0](https://github.com/taskforcesh/bullmq/compare/v1.81.4...v1.82.0) (2022-05-11) +### Fix +* fix: improve job timeout notification by giving the job name and id in the error message (#387) ([`ca886b1`](https://github.com/taskforcesh/bullmq/commit/ca886b1f854051aed0888f5b872a64b052b2383e)) -### Features -* **remove-repeatable:** return boolean depending on job existence ([#1239](https://github.com/taskforcesh/bullmq/issues/1239)) ref [#1235](https://github.com/taskforcesh/bullmq/issues/1235) ([59b0da7](https://github.com/taskforcesh/bullmq/commit/59b0da7d0e979e4f9e8a5b042acbdce433790611)) +## v1.14.1 (2021-02-01) -## [1.81.4](https://github.com/taskforcesh/bullmq/compare/v1.81.3...v1.81.4) (2022-05-05) +### Chore +* chore(release): 1.14.1 [skip ci] + +## [1.14.1](https://github.com/taskforcesh/bullmq/compare/v1.14.0...v1.14.1) (2021-02-01) ### Bug Fixes -* **repeatable:** emit removed event when removing ([#1229](https://github.com/taskforcesh/bullmq/issues/1229)) ([7d2de8d](https://github.com/taskforcesh/bullmq/commit/7d2de8d075e5ee7774501429c5177b729c430c20)) +* job finish queue events race condition ([355bca5](https://github.com/taskforcesh/bullmq/commit/355bca5ee128bf4ff37608746f9c6f7cca580eb0)) ([`a14e1ad`](https://github.com/taskforcesh/bullmq/commit/a14e1ada63c884d2a7a4e4f8539ef68230f83bea)) -## [1.81.3](https://github.com/taskforcesh/bullmq/compare/v1.81.2...v1.81.3) (2022-05-04) +* chore(redis-connection): add explicit promise type +Silences a typescript warning when viewing the file. ([`12441ca`](https://github.com/taskforcesh/bullmq/commit/12441caee941226a6b60b8a8763a7b7edd7d6cc3)) -### Bug Fixes +* chore: fix api generation step ([`4664a02`](https://github.com/taskforcesh/bullmq/commit/4664a02f952ae235e21f6ea9794c3d55b337e7c5)) -* **remove-parent:** check removed record from waiting-children ([#1227](https://github.com/taskforcesh/bullmq/issues/1227)) ([e7b25d0](https://github.com/taskforcesh/bullmq/commit/e7b25d00acb860ee3df36c6214a7162b2cf79635)) +### Documentation -## [1.81.2](https://github.com/taskforcesh/bullmq/compare/v1.81.1...v1.81.2) (2022-05-03) +* docs: add doc for debounce usecase (#335) ([`067e32a`](https://github.com/taskforcesh/bullmq/commit/067e32aff24955b6d5bfe9c4196820f60fe21888)) +* docs(timer-manager): describe setTimer() args ([`25e8cd7`](https://github.com/taskforcesh/bullmq/commit/25e8cd7ce1e444c7e7e0061ad0307e40f4156fe1)) -### Bug Fixes +* docs(interfaces): use block comments; add references and descriptions -* **stalled:** consider removeOnFail when failing jobs ([#1225](https://github.com/taskforcesh/bullmq/issues/1225)) fixes [#1171](https://github.com/taskforcesh/bullmq/issues/1171) ([38486cb](https://github.com/taskforcesh/bullmq/commit/38486cb4d7cbfc78bd64d71f19d8bfbc908f3fc7)) +- Block comments for IDE support / "intellisense" +- Add links to the docs for further reading +- For links, I used the format described at https://tsdoc.org/pages/tags/see/ ([`87297b8`](https://github.com/taskforcesh/bullmq/commit/87297b8b0aef281636e174b6e925eedb440df841)) -## [1.81.1](https://github.com/taskforcesh/bullmq/compare/v1.81.0...v1.81.1) (2022-04-29) +* docs(queue-scheduler): fix typo ([`c63fec0`](https://github.com/taskforcesh/bullmq/commit/c63fec00c91b3811757a9a5fe4f295e6e4057f93)) +* docs: add idempotence pattern ([`c28520a`](https://github.com/taskforcesh/bullmq/commit/c28520aee6600e0273adf85e64b0b9e8757e2c2a)) -### Bug Fixes +### Fix -* **add-bulk:** use for loop and throw if error is present ([#1223](https://github.com/taskforcesh/bullmq/issues/1223)) fixes [#1222](https://github.com/taskforcesh/bullmq/issues/1222) ([564de4f](https://github.com/taskforcesh/bullmq/commit/564de4f907648f5a5667a845c5366f73cff1d384)) +* fix: job finish queue events race condition ([`355bca5`](https://github.com/taskforcesh/bullmq/commit/355bca5ee128bf4ff37608746f9c6f7cca580eb0)) -# [1.81.0](https://github.com/taskforcesh/bullmq/compare/v1.80.6...v1.81.0) (2022-04-26) +### Refactor +* refactor(timer-manager): use Map to store timers -### Features +Typed map of timers instead of a plain object and type "any". ([`fb9e959`](https://github.com/taskforcesh/bullmq/commit/fb9e959cc789a708a0c9ccd6036c57a3ff33311a)) -* **move-to-delayed:** allow passing token ([#1213](https://github.com/taskforcesh/bullmq/issues/1213)) ([14f0e4a](https://github.com/taskforcesh/bullmq/commit/14f0e4a33d9ddfbaa1f86dbe7598e20a516a9d09)) +### Unknown -## [1.80.6](https://github.com/taskforcesh/bullmq/compare/v1.80.5...v1.80.6) (2022-04-22) +* GitBook: [master] 5 pages modified ([`78a16a1`](https://github.com/taskforcesh/bullmq/commit/78a16a19de9264d7a5bef2c8d39a0976cbeabc18)) +* GitBook: [master] 3 pages modified ([`6c10db5`](https://github.com/taskforcesh/bullmq/commit/6c10db5e2751162f39820864bae89d299d1c2d2c)) -### Bug Fixes +* GitBook: [master] 3 pages modified ([`ac4c9f6`](https://github.com/taskforcesh/bullmq/commit/ac4c9f62a0c4ef28ea06543c84bbefa156a9e210)) -* **job:** delete token when moving to delayed ([#1208](https://github.com/taskforcesh/bullmq/issues/1208)) ([37acf41](https://github.com/taskforcesh/bullmq/commit/37acf4109d17090dfaef992267e48130d34f7187)) +* GitBook: [master] one page modified ([`3efbff6`](https://github.com/taskforcesh/bullmq/commit/3efbff69b425969177cb08e004757ff0ff027bdb)) -## [1.80.5](https://github.com/taskforcesh/bullmq/compare/v1.80.4...v1.80.5) (2022-04-21) +* GitBook: [master] one page modified ([`87db39c`](https://github.com/taskforcesh/bullmq/commit/87db39cb6f90d70e8fef05311b0698de06dfd3ff)) +* GitBook: [master] one page modified ([`c166e17`](https://github.com/taskforcesh/bullmq/commit/c166e17017fa1d60ca246054a31a401633964128)) -### Bug Fixes +* GitBook: [master] 7 pages modified ([`ae82cd7`](https://github.com/taskforcesh/bullmq/commit/ae82cd7defcd1501a8a9e0095bf32f02e747b87b)) -* **queue-base:** emit close error when no closing ([#1203](https://github.com/taskforcesh/bullmq/issues/1203)) fixes [#1205](https://github.com/taskforcesh/bullmq/issues/1205) ([4d76582](https://github.com/taskforcesh/bullmq/commit/4d7658272af94b57a09486e1141b0e15a7bac3ba)) -## [1.80.4](https://github.com/taskforcesh/bullmq/compare/v1.80.3...v1.80.4) (2022-04-19) +## v1.14.0 (2021-01-06) +### Chore -### Bug Fixes +* chore(release): 1.14.0 [skip ci] -* **queue-scheduler:** apply isNotConnectionError ([#1189](https://github.com/taskforcesh/bullmq/issues/1189)) fixes [#1181](https://github.com/taskforcesh/bullmq/issues/1181) ([605d685](https://github.com/taskforcesh/bullmq/commit/605d68595d8fa1d9d47348a3fa9e0d7a4e28c706)) +# [1.14.0](https://github.com/taskforcesh/bullmq/compare/v1.13.0...v1.14.0) (2021-01-06) -## [1.80.3](https://github.com/taskforcesh/bullmq/compare/v1.80.2...v1.80.3) (2022-04-15) +### Features +* **job:** expose extendLock as a public method ([17e8431](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)) -### Bug Fixes +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api -* **cluster:** check correct Upstash host ([#1195](https://github.com/taskforcesh/bullmq/issues/1195)) fixes [#1193](https://github.com/taskforcesh/bullmq/issues/1193) ([69f2863](https://github.com/taskforcesh/bullmq/commit/69f28632408c741219c1ba49304d36f49cf5cb83)) +api-extractor 7.12.1 - https://api-extractor.com/ -## [1.80.2](https://github.com/taskforcesh/bullmq/compare/v1.80.1...v1.80.2) (2022-04-15) +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 +API Extractor completed with warnings -### Bug Fixes +api-documenter 7.12.1 - https://api-extractor.com/ -* **job:** remove Error from Promise return in moveToWaitingChildren ([#1197](https://github.com/taskforcesh/bullmq/issues/1197)) ([180a8bf](https://github.com/taskforcesh/bullmq/commit/180a8bf8fb2fe62b9929765a6dfd084574c77936)) +Reading bullmq.api.json -## [1.80.1](https://github.com/taskforcesh/bullmq/compare/v1.80.0...v1.80.1) (2022-04-14) +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 5.00s. ([`8a2a748`](https://github.com/taskforcesh/bullmq/commit/8a2a748a86ca799fcd72d4b00fc9a10048e46d4c)) +* chore: sanitize changelog ([`fa3ea5b`](https://github.com/taskforcesh/bullmq/commit/fa3ea5bffbf4ea3d2a4a91810842e5949a84b3ec)) -### Bug Fixes +* chore(release): 1.13.0 [skip ci] -* **worker:** restore worker suffix to empty string ([#1194](https://github.com/taskforcesh/bullmq/issues/1194)) fixes [#1185](https://github.com/taskforcesh/bullmq/issues/1185) ([2666ea5](https://github.com/taskforcesh/bullmq/commit/2666ea5b8532645da24482cf01c5692da5f2ceda)) +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) -# [1.80.0](https://github.com/taskforcesh/bullmq/compare/v1.79.1...v1.80.0) (2022-04-12) +### Features +* **job:** expose extendLock as a public method ([17e8431](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)) +* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) -### Features +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api -* **worker-listener:** use generics in events ([#1190](https://github.com/taskforcesh/bullmq/issues/1190)) ref [#1188](https://github.com/taskforcesh/bullmq/issues/1188) ([2821193](https://github.com/taskforcesh/bullmq/commit/28211937d9ed405330eede5ad7d4b0b817accf39)) +api-extractor 7.12.1 - https://api-extractor.com/ -## [1.79.1](https://github.com/taskforcesh/bullmq/compare/v1.79.0...v1.79.1) (2022-04-12) +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 +API Extractor completed with warnings -### Bug Fixes +api-documenter 7.12.1 - https://api-extractor.com/ -* **connection:** remove Queue reconnect overrides ([#1119](https://github.com/taskforcesh/bullmq/issues/1119)) ([83f1c79](https://github.com/taskforcesh/bullmq/commit/83f1c797b8a5272028c8d78d5ce464236e90909e)) +Reading bullmq.api.json -# [1.79.0](https://github.com/taskforcesh/bullmq/compare/v1.78.2...v1.79.0) (2022-04-08) +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 4.76s. ([`a75f4d5`](https://github.com/taskforcesh/bullmq/commit/a75f4d5fc1fa30ea0d537f0a07fbbbbd6f838275)) +* chore(release): 1.13.0 [skip ci] + +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) ### Features -* **queue-getters:** add getQueueEvents ([#1085](https://github.com/taskforcesh/bullmq/issues/1085)) ([f10a20a](https://github.com/taskforcesh/bullmq/commit/f10a20a90ab6dbf2d9f3f75ba99dacbdc797c329)) +* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) -## [1.78.2](https://github.com/taskforcesh/bullmq/compare/v1.78.1...v1.78.2) (2022-03-31) +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api +api-extractor 7.12.1 - https://api-extractor.com/ -### Bug Fixes +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 -* **clean:** consider processedOn and finishedOn attributes ([#1158](https://github.com/taskforcesh/bullmq/issues/1158)) ([8c3cb72](https://github.com/taskforcesh/bullmq/commit/8c3cb72235ec6123da389553f37433c2943e0f57)) +API Extractor completed with warnings -## [1.78.1](https://github.com/taskforcesh/bullmq/compare/v1.78.0...v1.78.1) (2022-03-24) +api-documenter 7.12.1 - https://api-extractor.com/ +Reading bullmq.api.json -### Bug Fixes +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 5.09s. ([`6e9a359`](https://github.com/taskforcesh/bullmq/commit/6e9a359a729a7deefa0a7a9a636ae9b8bd2dcf8e)) -* **queue:** close repeat connection when calling close ([#1154](https://github.com/taskforcesh/bullmq/issues/1154)) ([7d79616](https://github.com/taskforcesh/bullmq/commit/7d796167229048ec79660ca5d3ac8a7c85d125e7)) +* chore: delete changelog.md ([`79bb38f`](https://github.com/taskforcesh/bullmq/commit/79bb38f8d39504672d1ff103d69595da1f2df473)) -# [1.78.0](https://github.com/taskforcesh/bullmq/compare/v1.77.3...v1.78.0) (2022-03-23) +* chore(release): 1.13.0 [skip ci] +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) ### Features -* **cron-parser:** upgrades version to 4.2.1 ([#1149](https://github.com/taskforcesh/bullmq/issues/1149)) fixes [#1147](https://github.com/taskforcesh/bullmq/issues/1147) ([88a6c9c](https://github.com/taskforcesh/bullmq/commit/88a6c9c437172035173628842909f5170eb481f7)) +* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) -## [1.77.3](https://github.com/taskforcesh/bullmq/compare/v1.77.2...v1.77.3) (2022-03-22) +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api +api-extractor 7.12.1 - https://api-extractor.com/ -### Bug Fixes +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 -* **async-send:** check proc.send type ([#1150](https://github.com/taskforcesh/bullmq/issues/1150)) ([4f44173](https://github.com/taskforcesh/bullmq/commit/4f44173f0a3cc54705ca9a7e1730aeff26ea1c5a)) +API Extractor completed with warnings -## [1.77.2](https://github.com/taskforcesh/bullmq/compare/v1.77.1...v1.77.2) (2022-03-20) +api-documenter 7.12.1 - https://api-extractor.com/ +Reading bullmq.api.json -### Bug Fixes +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 4.75s. ([`8504d5b`](https://github.com/taskforcesh/bullmq/commit/8504d5b9d76bac9f3962e2362df32591b366fdcf)) -* **trim-events:** consider maxLenEvents as 0 ([#1137](https://github.com/taskforcesh/bullmq/issues/1137)) ([bc58a49](https://github.com/taskforcesh/bullmq/commit/bc58a49fba1b6f4e3595a0371ecf8410000a9021)) +* chore(release): 1.13.0 [skip ci] +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) -### Performance Improvements +### Features -* **clean:** speed up clean operation using deletion marker ([#1144](https://github.com/taskforcesh/bullmq/issues/1144)) ([5fb32ef](https://github.com/taskforcesh/bullmq/commit/5fb32ef2c60843d8d1f2cbc000aacf4df3388b7e)) +* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) -## [1.77.1](https://github.com/taskforcesh/bullmq/compare/v1.77.0...v1.77.1) (2022-03-17) +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api +api-extractor 7.12.1 - https://api-extractor.com/ -### Bug Fixes +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 -* **flow:** remove processed children ([#1060](https://github.com/taskforcesh/bullmq/issues/1060)) fixes [#1056](https://github.com/taskforcesh/bullmq/issues/1056) ([6b54e86](https://github.com/taskforcesh/bullmq/commit/6b54e86c12f287a13da036f3ec7801b8656f0434)) +API Extractor completed with warnings -# [1.77.0](https://github.com/taskforcesh/bullmq/compare/v1.76.6...v1.77.0) (2022-03-16) +api-documenter 7.12.1 - https://api-extractor.com/ +Reading bullmq.api.json + +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 5.06s. ([`1d83485`](https://github.com/taskforcesh/bullmq/commit/1d83485e284033d702ef3364e5436880966fb95a)) + +* chore(release): 1.13.0 [skip ci] + +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2020-12-30) ### Features -* allow QueueScheduler to be extended ([289beb8](https://github.com/taskforcesh/bullmq/commit/289beb87d2ef3e3dd7583159f7be2b5450f7de3c)) +* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) -## [1.76.6](https://github.com/taskforcesh/bullmq/compare/v1.76.5...v1.76.6) (2022-03-15) +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api +api-extractor 7.12.1 - https://api-extractor.com/ -### Bug Fixes +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 -* **master:** do not export master file ([#1136](https://github.com/taskforcesh/bullmq/issues/1136)) fixes [#1125](https://github.com/taskforcesh/bullmq/issues/1125) ref [#1129](https://github.com/taskforcesh/bullmq/issues/1129) ([6aa2f96](https://github.com/taskforcesh/bullmq/commit/6aa2f9657b8787aa791ab5af7267a6d27d7d7869)) +API Extractor completed with warnings -## [1.76.5](https://github.com/taskforcesh/bullmq/compare/v1.76.4...v1.76.5) (2022-03-15) +api-documenter 7.12.1 - https://api-extractor.com/ +Reading bullmq.api.json -### Bug Fixes +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 4.57s. ([`57b37ea`](https://github.com/taskforcesh/bullmq/commit/57b37ea886c9d86912f49d2d8d77cf3f97eda265)) -* **queue:** sanitize job types in getJobs and getJobsCount ([#1113](https://github.com/taskforcesh/bullmq/issues/1113)) fixes [#1112](https://github.com/taskforcesh/bullmq/issues/1112) ([d452b29](https://github.com/taskforcesh/bullmq/commit/d452b29773cead153a73b8322adda3164fb610d8)) +* chore: remove api symlink ([`6731f8a`](https://github.com/taskforcesh/bullmq/commit/6731f8a36e2ea88f448034194347ffbeb857d17c)) -## [1.76.4](https://github.com/taskforcesh/bullmq/compare/v1.76.3...v1.76.4) (2022-03-13) +* chore: add api-extractor config ([`6850f87`](https://github.com/taskforcesh/bullmq/commit/6850f874d4b1bcac6fad5df3bc6f5b6f427c2370)) +* chore: improvements in semantic release ([`bdb53a3`](https://github.com/taskforcesh/bullmq/commit/bdb53a3b5f895d242a17ee878eda2b1f50f5d45f)) -### Performance Improvements +### Documentation -* **move-to-finished:** avoid an extra roundtrip when using rate limit ([#1131](https://github.com/taskforcesh/bullmq/issues/1131)) ([1711547](https://github.com/taskforcesh/bullmq/commit/171154707bf5cbcb750ea9d2a9957128c1abc044)) +* docs: fix summary ([`3a8873b`](https://github.com/taskforcesh/bullmq/commit/3a8873b6453405e6f8e57331f6cee30977406670)) -## [1.76.3](https://github.com/taskforcesh/bullmq/compare/v1.76.2...v1.76.3) (2022-03-10) +* docs: fix api reference ([`b06cb1b`](https://github.com/taskforcesh/bullmq/commit/b06cb1be01701050d6cf9a0195872bc6ea0019b1)) +### Feature -### Bug Fixes +* feat(job): expose extendLock as a public method ([`17e8431`](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)) -* **drained:** emit event only once when queue has drained the waiting list ([#1123](https://github.com/taskforcesh/bullmq/issues/1123)) fixes [#1121](https://github.com/taskforcesh/bullmq/issues/1121) ref [#1070](https://github.com/taskforcesh/bullmq/issues/1070) ([b89b4e8](https://github.com/taskforcesh/bullmq/commit/b89b4e8a83fe4c9349ac5a9c439fc07374ff1e63)) +### Unknown -## [1.76.2](https://github.com/taskforcesh/bullmq/compare/v1.76.1...v1.76.2) (2022-03-09) +* GitBook: [master] 34 pages modified ([`ea1459d`](https://github.com/taskforcesh/bullmq/commit/ea1459d7332846d920c2040c830c67b86c60225b)) -### Bug Fixes +## v1.13.0 (2020-12-30) -* **utils:** fix proc.send type ([#1122](https://github.com/taskforcesh/bullmq/issues/1122)) fixes [#1120](https://github.com/taskforcesh/bullmq/issues/1120) ([da23977](https://github.com/taskforcesh/bullmq/commit/da239774379825d9f0a51c118740bc0fefa568bd)) +### Chore -## [1.76.1](https://github.com/taskforcesh/bullmq/compare/v1.76.0...v1.76.1) (2022-03-04) +* chore(deps-dev): bump semantic-release from 15.14.0 to 17.2.3 +Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 15.14.0 to 17.2.3. +- [Release notes](https://github.com/semantic-release/semantic-release/releases) +- [Commits](https://github.com/semantic-release/semantic-release/compare/v15.14.0...v17.2.3) -### Bug Fixes +Signed-off-by: dependabot[bot] <support@github.com> ([`d0b23c7`](https://github.com/taskforcesh/bullmq/commit/d0b23c7f408a8a7b99eaa1215847f4addef9f635)) -* **get-waiting-children-count:** consider waiting-children status only ([#1117](https://github.com/taskforcesh/bullmq/issues/1117)) ([1820df7](https://github.com/taskforcesh/bullmq/commit/1820df73c17ce119d2fdb0f526fc95f99845a5ec)) +* chore: re-added changelog ([`4030dab`](https://github.com/taskforcesh/bullmq/commit/4030dab9a7bdcaa85408a5df1136374bcd0b9198)) -# [1.76.0](https://github.com/taskforcesh/bullmq/compare/v1.75.1...v1.76.0) (2022-03-02) +* chore: moved CHANGELOG ([`d50e14a`](https://github.com/taskforcesh/bullmq/commit/d50e14a6277f903cdac44d71da196f392652e5d6)) +* chore: add CHANGELOG.md as a symbolic link in gitbook ([`008e343`](https://github.com/taskforcesh/bullmq/commit/008e34306267194e418c546aee5967f60c875df0)) -### Features +* chore: remove changelog from gitbook root ([`e19f270`](https://github.com/taskforcesh/bullmq/commit/e19f270985e131058f86c0b2eae0bb26c87e5e8b)) -* **metrics:** add metrics support ([ab51326](https://github.com/taskforcesh/bullmq/commit/ab51326cf318b4b48e37a1a77f5609e405eecb45)) +* chore: remove changelog link ([`20f15a6`](https://github.com/taskforcesh/bullmq/commit/20f15a600b3cada3092d42e01044f6b8caec97f8)) -## [1.75.1](https://github.com/taskforcesh/bullmq/compare/v1.75.0...v1.75.1) (2022-02-26) +### Documentation +* docs: generate api documentation ([`ec6634f`](https://github.com/taskforcesh/bullmq/commit/ec6634ff96877c2629ace25827f4462f6894751d)) -### Bug Fixes +* docs: replace link to crontab generator, which used the wrong format. (#307) ([`de99a07`](https://github.com/taskforcesh/bullmq/commit/de99a07c33b2c893466e81b0ed724b3e3e5ffbcd)) -* **rate-limiter:** move job to wait after retry when groupKey is missed ([#1103](https://github.com/taskforcesh/bullmq/issues/1103)) fixes [#1084](https://github.com/taskforcesh/bullmq/issues/1084) ([8aeab37](https://github.com/taskforcesh/bullmq/commit/8aeab37ac5a5c1c760be21bff2ba8752a485577c)) +* docs: add CHANGELOG.md to the summary ([`75888bd`](https://github.com/taskforcesh/bullmq/commit/75888bdc779020bb8b5034572f8e222b78f407ca)) -# [1.75.0](https://github.com/taskforcesh/bullmq/compare/v1.74.3...v1.75.0) (2022-02-24) +* docs: remove api redirect ([`dcadb10`](https://github.com/taskforcesh/bullmq/commit/dcadb10b8fdcb85af343d6a129ccd182cb7051a5)) +* docs: add changelog to gitbook ([`7b9ab79`](https://github.com/taskforcesh/bullmq/commit/7b9ab7975d755181780629c641a340ca4c478b81)) -### Bug Fixes +* docs: fix paths to changelog and api ([`d3a951f`](https://github.com/taskforcesh/bullmq/commit/d3a951fdbd41d2bce7fd17b362971042e8280dc9)) -* **cluster:** check for host presence in Upstash validation ([#1102](https://github.com/taskforcesh/bullmq/issues/1102)) fixes [#1101](https://github.com/taskforcesh/bullmq/issues/1101) ([54d4eac](https://github.com/taskforcesh/bullmq/commit/54d4eac52cfe13d4be99410932c0226c8d06d5d5)) +### Feature +* feat: add support for manually processing jobs fixes #327 ([`e42bfd2`](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) -### Features +### Unknown -* **retry-jobs:** allow to retry completed jobs ([#1082](https://github.com/taskforcesh/bullmq/issues/1082)) ([e17b3f2](https://github.com/taskforcesh/bullmq/commit/e17b3f21606757a16630988a69c9607e8c843bd2)) +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`d72c40c`](https://github.com/taskforcesh/bullmq/commit/d72c40c638e85febd0b532753af7a6abed9fe3d6)) -## [1.74.3](https://github.com/taskforcesh/bullmq/compare/v1.74.2...v1.74.3) (2022-02-24) +* GitBook: [master] 2 pages modified ([`39e8f4d`](https://github.com/taskforcesh/bullmq/commit/39e8f4d498b004564e413458a910952ff1013748)) +* GitBook: [master] 3 pages modified ([`ab94522`](https://github.com/taskforcesh/bullmq/commit/ab94522d1ede8976ad4662e76aae404ac947bb00)) -### Bug Fixes -* **connection:** throw error when Upstash host is provided ([#1098](https://github.com/taskforcesh/bullmq/issues/1098)) fixes [#1087](https://github.com/taskforcesh/bullmq/issues/1087) ([5156d0a](https://github.com/taskforcesh/bullmq/commit/5156d0a4812d8c649a3b41bd98e3e0efb41d0491)) +## v1.12.3 (2020-12-28) -## [1.74.2](https://github.com/taskforcesh/bullmq/compare/v1.74.1...v1.74.2) (2022-02-23) +### Chore +* chore(release): 1.12.3 [skip ci]nn## [1.12.3](https://github.com/taskforcesh/bullmq/compare/v1.12.2...v1.12.3) (2020-12-28) ### Bug Fixes -* **move-to-finished:** increment attemptsMade when moving job to active ([#1095](https://github.com/taskforcesh/bullmq/issues/1095)) fixes [#1094](https://github.com/taskforcesh/bullmq/issues/1094) ([321b0e1](https://github.com/taskforcesh/bullmq/commit/321b0e1d515d01c5b3f1ca9f404cd571e3f753b7)) +* correctly handle "falsy" data values fixes [#264](https://github.com/taskforcesh/bullmq/issues/264) ([becad91](https://github.com/taskforcesh/bullmq/commit/becad91350fd4ac01037e5b0d4a8a93724dd8dbd)) +* **worker:** setname on worker blocking connection ([645b633](https://github.com/taskforcesh/bullmq/commit/645b6338f5883b0c21ae78007777d86b45422615)) ([`7e84155`](https://github.com/taskforcesh/bullmq/commit/7e841558d9406d4acd6210b4c7e9181fc2b5835b)) -## [1.74.1](https://github.com/taskforcesh/bullmq/compare/v1.74.0...v1.74.1) (2022-02-20) +* chore: update gitbook redirects ([`c635261`](https://github.com/taskforcesh/bullmq/commit/c63526164ba8ce3d6d1b36ccf99c967b0181a1e2)) +### Documentation -### Bug Fixes +* docs: fix typo (#350) ([`3f3cd11`](https://github.com/taskforcesh/bullmq/commit/3f3cd1181817dcaa45d2f81798f5b6a965e2bbbd)) -* **flow:** respect defaultJobOptions from queue opts ([#1080](https://github.com/taskforcesh/bullmq/issues/1080)) fixes [#1034](https://github.com/taskforcesh/bullmq/issues/1034) ([0aca072](https://github.com/taskforcesh/bullmq/commit/0aca072f805302e660b6675fd4097ba893c91eb0)) +### Unknown -# [1.74.0](https://github.com/taskforcesh/bullmq/compare/v1.73.0...v1.74.0) (2022-02-19) +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`9b51319`](https://github.com/taskforcesh/bullmq/commit/9b513197e0b4551157718aedf0aae89d783cdd0d)) -### Features +## v1.12.2 (2020-12-23) -* **retry-jobs:** pass timestamp as option ([#1054](https://github.com/taskforcesh/bullmq/issues/1054)) ([1522359](https://github.com/taskforcesh/bullmq/commit/15223590b235f749af9cb229fc784760d4b3add2)) +### Chore -# [1.73.0](https://github.com/taskforcesh/bullmq/compare/v1.72.0...v1.73.0) (2022-02-16) +* chore(release): 1.12.2 [skip ci]nn## [1.12.2](https://github.com/taskforcesh/bullmq/compare/v1.12.1...v1.12.2) (2020-12-23) +### Bug Fixes -### Features +* catch errors from Repeat ([#348](https://github.com/taskforcesh/bullmq/issues/348)) ([09a1a98](https://github.com/taskforcesh/bullmq/commit/09a1a98fc42dc1a9ae98bfb29c0cca3fac02013f)) ([`971a079`](https://github.com/taskforcesh/bullmq/commit/971a079b1b9e3c1b962821bf759dc8c7c9792a94)) -* **job:** add prefix getter ([#1077](https://github.com/taskforcesh/bullmq/issues/1077)) ([db9ef10](https://github.com/taskforcesh/bullmq/commit/db9ef105a7a524d7502664d52bd9f9c7dfa9477f)) -* **queue-getters:** add getQueueSchedulers ([#1078](https://github.com/taskforcesh/bullmq/issues/1078)) ref [#1075](https://github.com/taskforcesh/bullmq/issues/1075) ([0b3b1c4](https://github.com/taskforcesh/bullmq/commit/0b3b1c4382de34bd68733d162c2fa2ba9417f79c)) +### Fix -# [1.72.0](https://github.com/taskforcesh/bullmq/compare/v1.71.0...v1.72.0) (2022-02-15) +* fix: catch errors from Repeat (#348) ([`09a1a98`](https://github.com/taskforcesh/bullmq/commit/09a1a98fc42dc1a9ae98bfb29c0cca3fac02013f)) +### Unknown -### Features +* GitBook: [master] 32 pages modified ([`eef4488`](https://github.com/taskforcesh/bullmq/commit/eef4488891bd19b46dff42d821b17292ff957ce2)) -* **backoff:** validate UnrecoverableError presence ([#1074](https://github.com/taskforcesh/bullmq/issues/1074)) ([1defeac](https://github.com/taskforcesh/bullmq/commit/1defeac3f251a13aad57f3027d8eb8f857e40acb)) +* GitBook: [master] 2 pages and 2 assets modified ([`11c5e60`](https://github.com/taskforcesh/bullmq/commit/11c5e6058ab533daa714a27f02d411c3ed63c338)) -# [1.71.0](https://github.com/taskforcesh/bullmq/compare/v1.70.0...v1.71.0) (2022-02-14) +## v1.12.1 (2020-12-21) -### Features +### Chore -* **get-job-counts:** add default values ([#1068](https://github.com/taskforcesh/bullmq/issues/1068)) ([1c7f841](https://github.com/taskforcesh/bullmq/commit/1c7f841a52b3ea18fa7878f10986b362ccc6c4fe)) +* chore(release): 1.12.1 [skip ci]nn## [1.12.1](https://github.com/taskforcesh/bullmq/compare/v1.12.0...v1.12.1) (2020-12-21) -# [1.70.0](https://github.com/taskforcesh/bullmq/compare/v1.69.1...v1.70.0) (2022-02-11) +### Bug Fixes +* correctly handle "falsy" data values fixes [#264](https://github.com/taskforcesh/bullmq/issues/264) ([cf1dbaf](https://github.com/taskforcesh/bullmq/commit/cf1dbaf7e60d74fc8443a5f8a537455f28a8dba3)) ([`cc1471e`](https://github.com/taskforcesh/bullmq/commit/cc1471ed703b80da8324b7f29404a1120f27d826)) -### Features +### Fix -* **sandbox:** pass parent property ([#1065](https://github.com/taskforcesh/bullmq/issues/1065)) ([1fd33f6](https://github.com/taskforcesh/bullmq/commit/1fd33f6fd3a3af17753de8c4d48e14ef86c7409c)) +* fix: correctly handle "falsy" data values fixes #264 ([`cf1dbaf`](https://github.com/taskforcesh/bullmq/commit/cf1dbaf7e60d74fc8443a5f8a537455f28a8dba3)) -## [1.69.1](https://github.com/taskforcesh/bullmq/compare/v1.69.0...v1.69.1) (2022-02-10) +* fix: correctly handle "falsy" data values fixes #264 ([`becad91`](https://github.com/taskforcesh/bullmq/commit/becad91350fd4ac01037e5b0d4a8a93724dd8dbd)) +### Unknown -### Bug Fixes +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`64985aa`](https://github.com/taskforcesh/bullmq/commit/64985aa6b5d86d9a15304bab7e732b15b720fec4)) -* **move-to-finished:** validate lock first ([#1064](https://github.com/taskforcesh/bullmq/issues/1064)) ([9da1b29](https://github.com/taskforcesh/bullmq/commit/9da1b29486c6c6e2b097ec2f6107494a36525495)) +* GitBook: [master] one page modified ([`ff318de`](https://github.com/taskforcesh/bullmq/commit/ff318dea01b14896ad2f47981973c707d744aa1f)) -# [1.69.0](https://github.com/taskforcesh/bullmq/compare/v1.68.4...v1.69.0) (2022-02-08) +* GitBook: [master] 32 pages modified ([`db84a0b`](https://github.com/taskforcesh/bullmq/commit/db84a0b0b80fd3641494d4ae7fd66c880d1bac7e)) +* GitBook: [master] 2 pages modified ([`cca32ec`](https://github.com/taskforcesh/bullmq/commit/cca32ec90fbe6225241e2867198b5c981341c4ec)) + +* GitBook: [master] one page modified ([`e2bcb1e`](https://github.com/taskforcesh/bullmq/commit/e2bcb1eba830e0687cd2ac1a9eb6208bec2ac6e2)) + +* GitBook: [master] 32 pages and 2 assets modified ([`92f257e`](https://github.com/taskforcesh/bullmq/commit/92f257eff137778f8932e76194f993245360a78f)) + + +## v1.12.0 (2020-12-16) + +### Chore + +* chore(release): 1.12.0 [skip ci]nn# [1.12.0](https://github.com/taskforcesh/bullmq/compare/v1.11.2...v1.12.0) (2020-12-16) ### Features -* **job:** pass queueName into sandbox ([#1053](https://github.com/taskforcesh/bullmq/issues/1053)) fixes [#1050](https://github.com/taskforcesh/bullmq/issues/1050) ref [#1051](https://github.com/taskforcesh/bullmq/issues/1051) ([12bb19c](https://github.com/taskforcesh/bullmq/commit/12bb19c1586d8755b973a80be97f407630827d4f)) +* add ability to get if queue is paused or not ([e98b7d8](https://github.com/taskforcesh/bullmq/commit/e98b7d8973df830cc29e0afc5d86e82c9a7ce76f)) ([`c853787`](https://github.com/taskforcesh/bullmq/commit/c85378794f58574d4b382001f457388e5af8f90b)) -## [1.68.4](https://github.com/taskforcesh/bullmq/compare/v1.68.3...v1.68.4) (2022-02-05) +### Feature +* feat: add ability to get if queue is paused or not ([`e98b7d8`](https://github.com/taskforcesh/bullmq/commit/e98b7d8973df830cc29e0afc5d86e82c9a7ce76f)) -### Bug Fixes -* **clean:** consider checking parent jobs when cleaning ([#1048](https://github.com/taskforcesh/bullmq/issues/1048)) ([0708a24](https://github.com/taskforcesh/bullmq/commit/0708a24c7f4cb6d1cda776ed983d3f20fc3261f1)) +## v1.11.2 (2020-12-15) -## [1.68.3](https://github.com/taskforcesh/bullmq/compare/v1.68.2...v1.68.3) (2022-02-04) +### Chore +* chore(release): 1.11.2 [skip ci]nn## [1.11.2](https://github.com/taskforcesh/bullmq/compare/v1.11.1...v1.11.2) (2020-12-15) ### Bug Fixes -* **drain:** delete priority queueKey ([#1049](https://github.com/taskforcesh/bullmq/issues/1049)) ([2e6129a](https://github.com/taskforcesh/bullmq/commit/2e6129a4a08783eeafa2f0b69c10ac810f53d085)) +* promote jobs to the right "list" when paused ([d3df615](https://github.com/taskforcesh/bullmq/commit/d3df615d37b1114c02eacb45f23643ee2f05374d)) ([`49fe957`](https://github.com/taskforcesh/bullmq/commit/49fe95787794e5778bbffd04afe9ba23dc9c9db8)) -## [1.68.2](https://github.com/taskforcesh/bullmq/compare/v1.68.1...v1.68.2) (2022-02-03) +### Fix +* fix: promote jobs to the right "list" when paused ([`d3df615`](https://github.com/taskforcesh/bullmq/commit/d3df615d37b1114c02eacb45f23643ee2f05374d)) -### Performance Improvements -* **remove-parent-dependency:** do not emit wait event in hard deletions ([#1045](https://github.com/taskforcesh/bullmq/issues/1045)) ([4069821](https://github.com/taskforcesh/bullmq/commit/40698218d13a880615f832a9926f0f057b1c33f9)) +## v1.11.1 (2020-12-15) -## [1.68.1](https://github.com/taskforcesh/bullmq/compare/v1.68.0...v1.68.1) (2022-02-01) +### Chore +* chore(release): 1.11.1 [skip ci]nn## [1.11.1](https://github.com/taskforcesh/bullmq/compare/v1.11.0...v1.11.1) (2020-12-15) ### Bug Fixes -* **update:** throw error when missing job key ([#1042](https://github.com/taskforcesh/bullmq/issues/1042)) ([a00ae5c](https://github.com/taskforcesh/bullmq/commit/a00ae5c9b3f6d51cb0229adca29d13d932fc5601)) - -# [1.68.0](https://github.com/taskforcesh/bullmq/compare/v1.67.3...v1.68.0) (2022-01-29) +* clientCommandMessageReg to support GCP memorystore v5 ([8408dda](https://github.com/taskforcesh/bullmq/commit/8408dda9fa64fc0b968e88fb2726e0a30f717ed7)) ([`9aba722`](https://github.com/taskforcesh/bullmq/commit/9aba722f41b390b5a5eeeeeba7c51b4f87cd87c7)) +* chore(deps): bump ini from 1.3.5 to 1.3.7 -### Features +Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. +- [Release notes](https://github.com/isaacs/ini/releases) +- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) -* **queue:** add retryJobs method for failed jobs ([#1024](https://github.com/taskforcesh/bullmq/issues/1024)) ([310a730](https://github.com/taskforcesh/bullmq/commit/310a730ed322501cc19cdd5cf5244bc8eee6fee2)) +Signed-off-by: dependabot[bot] <support@github.com> ([`b0121b2`](https://github.com/taskforcesh/bullmq/commit/b0121b216a5853acd88c7948541d2f8678a4a91f)) +### Documentation -### Performance Improvements +* docs: add instructions for npm install ([`f1203ff`](https://github.com/taskforcesh/bullmq/commit/f1203ffda233e6b3dbe5dea52f8f8c073760f86f)) -* **lua:** call del command with multiple keys ([#1035](https://github.com/taskforcesh/bullmq/issues/1035)) ([9cfaab8](https://github.com/taskforcesh/bullmq/commit/9cfaab8965d0c9f92460d31d6c3083839c36447f)) +* docs: fix a typo in guide/workers.md (#328) ([`1c17c02`](https://github.com/taskforcesh/bullmq/commit/1c17c02de0036e434f2900142eb87a92daac36d9)) -## [1.67.3](https://github.com/taskforcesh/bullmq/compare/v1.67.2...v1.67.3) (2022-01-28) +* docs: fix redis default port ([`7372ef1`](https://github.com/taskforcesh/bullmq/commit/7372ef16465fdf7d3c803a9cd9c1a25422d53373)) +### Fix -### Bug Fixes +* fix: clientCommandMessageReg to support GCP memorystore v5 ([`8408dda`](https://github.com/taskforcesh/bullmq/commit/8408dda9fa64fc0b968e88fb2726e0a30f717ed7)) -* **drain:** consider checking parent jobs when draining ([#992](https://github.com/taskforcesh/bullmq/issues/992)) ([81b7221](https://github.com/taskforcesh/bullmq/commit/81b72213a9ff31d6b297825391de77557598ebd1)) +### Unknown -## [1.67.2](https://github.com/taskforcesh/bullmq/compare/v1.67.1...v1.67.2) (2022-01-28) +* GitBook: [master] 4 pages and 2 assets modified ([`6570def`](https://github.com/taskforcesh/bullmq/commit/6570def1b073a19a68073754ff18fe38d3254060)) +* GitBook: [master] 30 pages modified ([`56f89bf`](https://github.com/taskforcesh/bullmq/commit/56f89bfc6862947f787ec7ec7e86eea4eff9e121)) -### Bug Fixes -* **repeat:** consider immediately option with cron ([#1030](https://github.com/taskforcesh/bullmq/issues/1030)) fixes [#1020](https://github.com/taskforcesh/bullmq/issues/1020) ([b9e7488](https://github.com/taskforcesh/bullmq/commit/b9e748870385a88b2384df40f50df3144c11d7e0)) +## v1.11.0 (2020-11-24) -## [1.67.1](https://github.com/taskforcesh/bullmq/compare/v1.67.0...v1.67.1) (2022-01-27) +### Chore +* chore(release): 1.11.0 [skip ci]nn# [1.11.0](https://github.com/taskforcesh/bullmq/compare/v1.10.0...v1.11.0) (2020-11-24) ### Bug Fixes -* **retry:** pass state in error message ([#1027](https://github.com/taskforcesh/bullmq/issues/1027)) ([c646a45](https://github.com/taskforcesh/bullmq/commit/c646a45377fdfaff340185d1f7bedceb80c214c2)) +* add generic type to processor ([d4f6501](https://github.com/taskforcesh/bullmq/commit/d4f650120804bd6161f0eeda5162ad5a96811a05)) +### Features -### Performance Improvements +* add name and return types to queue, worker and processor ([4879715](https://github.com/taskforcesh/bullmq/commit/4879715ec7c917f11e3a0ac3c5f5126029340ed3)) ([`4495e1d`](https://github.com/taskforcesh/bullmq/commit/4495e1d301e2c16310afabc42ebd284b9ad20363)) -* **retry:** delete props in retryJob lua script ([#1016](https://github.com/taskforcesh/bullmq/issues/1016)) ([547cedd](https://github.com/taskforcesh/bullmq/commit/547cedd5ecd30c9a73d37e4053b9e518cb3fbe53)) +### Documentation -# [1.67.0](https://github.com/taskforcesh/bullmq/compare/v1.66.1...v1.67.0) (2022-01-26) +* docs: add a remark about scheduler for retries to work (#316) ([`6e29fcd`](https://github.com/taskforcesh/bullmq/commit/6e29fcd2d79aff5e400d9bee83a597b8cf57d39c)) +### Feature -### Features +* feat: add name and return types to queue, worker and processor ([`4879715`](https://github.com/taskforcesh/bullmq/commit/4879715ec7c917f11e3a0ac3c5f5126029340ed3)) -* add support for removeOn based on time ([6c4ac75](https://github.com/taskforcesh/bullmq/commit/6c4ac75bb3ac239cc83ef6144d69c04b2bba1311)) +### Fix -## [1.66.1](https://github.com/taskforcesh/bullmq/compare/v1.66.0...v1.66.1) (2022-01-25) +* fix: add generic type to processor ([`d4f6501`](https://github.com/taskforcesh/bullmq/commit/d4f650120804bd6161f0eeda5162ad5a96811a05)) +### Unknown -### Bug Fixes +* GitBook: [master] one page modified ([`3b6681b`](https://github.com/taskforcesh/bullmq/commit/3b6681b911d0eab332f6e65d4997e54cce255d7a)) -* **job:** increase attemptsMade when moving job to active ([#1009](https://github.com/taskforcesh/bullmq/issues/1009)) fixes [#1002](https://github.com/taskforcesh/bullmq/issues/1002) ([0974ae0](https://github.com/taskforcesh/bullmq/commit/0974ae0ff6db73c223be4b18fb2aab53b6a23c88)) +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`34c803f`](https://github.com/taskforcesh/bullmq/commit/34c803fcaa4fe96e0ac8515287c8b9c49f139d89)) -# [1.66.0](https://github.com/taskforcesh/bullmq/compare/v1.65.1...v1.66.0) (2022-01-23) +* GitBook: [master] 28 pages modified ([`bf54c65`](https://github.com/taskforcesh/bullmq/commit/bf54c6504ac45633d91b431272f5ad1c1e343264)) +* GitBook: [master] one page modified ([`b564337`](https://github.com/taskforcesh/bullmq/commit/b564337cccc1b5e8d7f0734938616674d54fd6da)) -### Features +* Update README.md ([`d61db4a`](https://github.com/taskforcesh/bullmq/commit/d61db4a4d9bab3a6b33100a362359376fabe6eba)) -* **queue-events:** add retries-exhausted event ([#1010](https://github.com/taskforcesh/bullmq/issues/1010)) ([e476f35](https://github.com/taskforcesh/bullmq/commit/e476f35f5c3f9b1baf2bbc3d46712b8ba597f73c)) -## [1.65.1](https://github.com/taskforcesh/bullmq/compare/v1.65.0...v1.65.1) (2022-01-21) +## v1.10.0 (2020-10-20) +### Build -### Bug Fixes +* build: sort script targets, rename prepublish target to prepare ([`f52a33a`](https://github.com/taskforcesh/bullmq/commit/f52a33a3f4dddc83c5146018b645d5873f63b87a)) -* dont loop through empty modules paths ([#1013](https://github.com/taskforcesh/bullmq/issues/1013)) fixes [#1012](https://github.com/taskforcesh/bullmq/issues/1012) ([86e84df](https://github.com/taskforcesh/bullmq/commit/86e84df933c2662380b00a11b5f4000f2618d218)) +### Chore -# [1.65.0](https://github.com/taskforcesh/bullmq/compare/v1.64.4...v1.65.0) (2022-01-21) +* chore(release): 1.10.0 [skip ci]nn# [1.10.0](https://github.com/taskforcesh/bullmq/compare/v1.9.0...v1.10.0) (2020-10-20) + +### Bug Fixes +* **job:** remove listeners before resolving promise ([563ce92](https://github.com/taskforcesh/bullmq/commit/563ce9218f5dd81f2bc836f9e8ccdedc549f09dd)) +* **worker:** continue processing if handleFailed fails. fixes [#286](https://github.com/taskforcesh/bullmq/issues/286) ([4ef1cbc](https://github.com/taskforcesh/bullmq/commit/4ef1cbc13d53897b57ae3d271afbaa1b213824aa)) +* **worker:** fix memory leak on Promise.race ([#282](https://github.com/taskforcesh/bullmq/issues/282)) ([a78ab2b](https://github.com/taskforcesh/bullmq/commit/a78ab2b362e54f897eec6c8b16f16ecccf7875c2)) +* **worker:** setname on worker blocking connection ([#291](https://github.com/taskforcesh/bullmq/issues/291)) ([50a87fc](https://github.com/taskforcesh/bullmq/commit/50a87fcb1dab976a6a0273d2b0cc4b31b63c015f)) +* remove async for loop in child pool fixes [#229](https://github.com/taskforcesh/bullmq/issues/229) ([d77505e](https://github.com/taskforcesh/bullmq/commit/d77505e989cd1395465c5222613555f79e4d9720)) ### Features -* **queue:** add JobType and JobState unions for better typing ([#1011](https://github.com/taskforcesh/bullmq/issues/1011)) ([3b9b79d](https://github.com/taskforcesh/bullmq/commit/3b9b79dbdd754ab66c3948e7e16380f2d5513262)) +* **sandbox:** kill child workers gracefully ([#243](https://github.com/taskforcesh/bullmq/issues/243)) ([4262837](https://github.com/taskforcesh/bullmq/commit/4262837bc67e007fe44606670dce48ee7fec65cd)) ([`c03219c`](https://github.com/taskforcesh/bullmq/commit/c03219c38fcf42957b705384dd1fb4bfaa86b075)) -## [1.64.4](https://github.com/taskforcesh/bullmq/compare/v1.64.3...v1.64.4) (2022-01-19) +* chore: use yarn not npm ([`428504a`](https://github.com/taskforcesh/bullmq/commit/428504a132b52626be39901d0b1cf22a010c877c)) +* chore: correct release steps ([`01570f1`](https://github.com/taskforcesh/bullmq/commit/01570f196733e3ab0f1472361fa86b88e96efbc3)) -### Bug Fixes +* chore: move from travis to github workflows ([`5e278b6`](https://github.com/taskforcesh/bullmq/commit/5e278b6bbf3397316826b082bce08192aa789017)) -* **queue:** use 0 as initial value for getJobCountByTypes reducer ([#1005](https://github.com/taskforcesh/bullmq/issues/1005)) ([f0e23ef](https://github.com/taskforcesh/bullmq/commit/f0e23ef01b97d36c775db0bf8c9dd2f63f6cb194)) +### Documentation -## [1.64.3](https://github.com/taskforcesh/bullmq/compare/v1.64.2...v1.64.3) (2022-01-17) +* docs: update README ([`1d9940b`](https://github.com/taskforcesh/bullmq/commit/1d9940b23c713cc9bbf8b2ebc767890ee17e8073)) +* docs: update README ([`3a1a8e5`](https://github.com/taskforcesh/bullmq/commit/3a1a8e50dedbea545de3786fd1c41b53a300b0a1)) -### Bug Fixes +### Feature -* **worker:** blockTime must be integer on older Redis ([6fedc0a](https://github.com/taskforcesh/bullmq/commit/6fedc0a03bdb217ef0dbae60d49fccb0f2a5dbdb)) +* feat(sandbox): kill child workers gracefully (#243) ([`4262837`](https://github.com/taskforcesh/bullmq/commit/4262837bc67e007fe44606670dce48ee7fec65cd)) -## [1.64.2](https://github.com/taskforcesh/bullmq/compare/v1.64.1...v1.64.2) (2022-01-14) +### Fix +* fix(worker): setname on worker blocking connection (#291) ([`50a87fc`](https://github.com/taskforcesh/bullmq/commit/50a87fcb1dab976a6a0273d2b0cc4b31b63c015f)) -### Bug Fixes +* fix(worker): continue processing if handleFailed fails. fixes #286 ([`4ef1cbc`](https://github.com/taskforcesh/bullmq/commit/4ef1cbc13d53897b57ae3d271afbaa1b213824aa)) -* **remove-job:** consider removing parent dependency key in lua scripts ([#990](https://github.com/taskforcesh/bullmq/issues/990)) ([661abf0](https://github.com/taskforcesh/bullmq/commit/661abf0921e663c9ea2fa7d59c12da35950637dc)) +* fix(worker): setname on worker blocking connection ([`645b633`](https://github.com/taskforcesh/bullmq/commit/645b6338f5883b0c21ae78007777d86b45422615)) -## [1.64.1](https://github.com/taskforcesh/bullmq/compare/v1.64.0...v1.64.1) (2022-01-14) +* fix(job): remove listeners before resolving promise ([`563ce92`](https://github.com/taskforcesh/bullmq/commit/563ce9218f5dd81f2bc836f9e8ccdedc549f09dd)) +* fix(worker): fix memory leak on Promise.race (#282) ([`a78ab2b`](https://github.com/taskforcesh/bullmq/commit/a78ab2b362e54f897eec6c8b16f16ecccf7875c2)) -### Bug Fixes +* fix: remove async for loop in child pool fixes #229 ([`d77505e`](https://github.com/taskforcesh/bullmq/commit/d77505e989cd1395465c5222613555f79e4d9720)) -* **sandbox:** exit uncaughtException instead of throwing error ([013d6a5](https://github.com/taskforcesh/bullmq/commit/013d6a5ee0c70266ae740abfa596ca9e506de71b)) +### Test -# [1.64.0](https://github.com/taskforcesh/bullmq/compare/v1.63.3...v1.64.0) (2022-01-07) +* test: increase timeout on child retain tests (#293) ([`0c72e08`](https://github.com/taskforcesh/bullmq/commit/0c72e0884b3e0b66d86a2fb94ff98b1def240b3e)) +### Unknown -### Features +* Update README.md ([`3a3a66f`](https://github.com/taskforcesh/bullmq/commit/3a3a66f31dbd11c69034aee3b9afa3c1e83200b8)) -* **sanboxed-process:** support .cjs files ([#984](https://github.com/taskforcesh/bullmq/issues/984)) ([531e4de](https://github.com/taskforcesh/bullmq/commit/531e4de1525f2cf322e0b97f5537ed43276ff72b)) +* Update README.md ([`461f441`](https://github.com/taskforcesh/bullmq/commit/461f4414c4fbc7439b64e08677d1a935d6a97a1a)) -## [1.63.3](https://github.com/taskforcesh/bullmq/compare/v1.63.2...v1.63.3) (2022-01-06) +* Update README.md ([`5eae7e6`](https://github.com/taskforcesh/bullmq/commit/5eae7e6054da612e64eefde58598d568814c0969)) +* Update README.md ([`902a038`](https://github.com/taskforcesh/bullmq/commit/902a038dd158bfdab2166e7e2aa62c9109f62843)) -### Bug Fixes +* Update README.md ([`9de5cfa`](https://github.com/taskforcesh/bullmq/commit/9de5cfa1123f0b3284488d0ae078d38b3d0b1513)) -* **job:** throw error when delay and repeat are provided together ([#983](https://github.com/taskforcesh/bullmq/issues/983)) ([07b0082](https://github.com/taskforcesh/bullmq/commit/07b008273ead9360fc43564fa9ff1a7503616ceb)) +* GitBook: [master] 29 pages modified ([`297ec30`](https://github.com/taskforcesh/bullmq/commit/297ec30086bd0d95b10718c128409e535414180f)) -## [1.63.2](https://github.com/taskforcesh/bullmq/compare/v1.63.1...v1.63.2) (2022-01-04) +* GitBook: [master] one page modified ([`abaa7f7`](https://github.com/taskforcesh/bullmq/commit/abaa7f725c1cf4efb124115fdca10f194c52f805)) +* GitBook: [master] one page modified ([`0866c8c`](https://github.com/taskforcesh/bullmq/commit/0866c8c0f8de74b80fac29a30a146c5af8a0ddf9)) -### Bug Fixes +* GitBook: [master] 3 pages modified ([`5e30929`](https://github.com/taskforcesh/bullmq/commit/5e30929b747609caa7ce9c13087b6f04a3b42d2d)) -* **queue:** add missing error event typing ([#979](https://github.com/taskforcesh/bullmq/issues/979)) ([afdaac6](https://github.com/taskforcesh/bullmq/commit/afdaac6b072c7af5973222cc7fb69f3f138f3b0b)) +* GitBook: [master] one page modified ([`3fcb0ac`](https://github.com/taskforcesh/bullmq/commit/3fcb0acaa2fd32f5a2acbbb50dfd077545eb6cb8)) -## [1.63.1](https://github.com/taskforcesh/bullmq/compare/v1.63.0...v1.63.1) (2022-01-04) +* GitBook: [master] one page modified ([`89243b5`](https://github.com/taskforcesh/bullmq/commit/89243b52c4beb23e7be4e6cfe283d7eb01663a21)) +* GitBook: [master] 10 pages and one asset modified ([`3121a00`](https://github.com/taskforcesh/bullmq/commit/3121a000dca00364b881dbdd02ddd42cec4b7865)) -### Bug Fixes -* **update-progress:** throw error if job key is missing ([#978](https://github.com/taskforcesh/bullmq/issues/978)) ref [#977](https://github.com/taskforcesh/bullmq/issues/977) ([b03aaf1](https://github.com/taskforcesh/bullmq/commit/b03aaf10ca694745d143def2129f952b9bac18a6)) +## v1.9.0 (2020-07-19) -# [1.63.0](https://github.com/taskforcesh/bullmq/compare/v1.62.0...v1.63.0) (2021-12-31) +### Chore +* chore(release): 1.9.0 [skip ci]nn# [1.9.0](https://github.com/taskforcesh/bullmq/compare/v1.8.14...v1.9.0) (2020-07-19) ### Features -* **job:** use generic types for static methods ([#975](https://github.com/taskforcesh/bullmq/issues/975)) ([f78f4d0](https://github.com/taskforcesh/bullmq/commit/f78f4d0f75adb5c73558b3e8cf511db22f972791)) +* add grouped rate limiting ([3a958dd](https://github.com/taskforcesh/bullmq/commit/3a958dd30d09a049b0d761679d3b8d92709e815e)) ([`30aa033`](https://github.com/taskforcesh/bullmq/commit/30aa0330dd2a8fbe3f692b3e3fc6091a4f0593af)) -# [1.62.0](https://github.com/taskforcesh/bullmq/compare/v1.61.0...v1.62.0) (2021-12-31) +* chore(deps): bump lodash from 4.17.15 to 4.17.19 +Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. +- [Release notes](https://github.com/lodash/lodash/releases) +- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) -### Bug Fixes +Signed-off-by: dependabot[bot] <support@github.com> ([`7f986fc`](https://github.com/taskforcesh/bullmq/commit/7f986fc17c067263238fbe1e285ff0ef08570445)) -* add deprecated tag in progress and Queue3 class ([#973](https://github.com/taskforcesh/bullmq/issues/973)) ([6abdf5b](https://github.com/taskforcesh/bullmq/commit/6abdf5b66717cc8bc8ddb048029f7d9b92509942)) +### Feature +* feat: add grouped rate limiting ([`3a958dd`](https://github.com/taskforcesh/bullmq/commit/3a958dd30d09a049b0d761679d3b8d92709e815e)) -### Features -* **queue:** add better event typing ([#971](https://github.com/taskforcesh/bullmq/issues/971)) ([596fd7b](https://github.com/taskforcesh/bullmq/commit/596fd7b260f2e95607f0eb4ff9553fb35137ec54)) +## v1.8.14 (2020-07-03) -# [1.61.0](https://github.com/taskforcesh/bullmq/compare/v1.60.0...v1.61.0) (2021-12-29) +### Chore +* chore(release): 1.8.14 [skip ci]nn## [1.8.14](https://github.com/taskforcesh/bullmq/compare/v1.8.13...v1.8.14) (2020-07-03) -### Features +### Bug Fixes -* **queue:** reuse generic typing for jobs ([5c10818](https://github.com/taskforcesh/bullmq/commit/5c10818d90724cccdf510f0358c01233aeac77e4)) -* **worker:** reuse generic typing for jobs ([9adcdb7](https://github.com/taskforcesh/bullmq/commit/9adcdb798b4ee55835123a9f3d04c1397b176dc1)) +* **typescript:** fix typings, upgrade ioredis dependencies ([#220](https://github.com/taskforcesh/bullmq/issues/220)) ([7059f20](https://github.com/taskforcesh/bullmq/commit/7059f2089553a206ab3937f7fd0d0b9de96aa7b7)) +* **worker:** return this.closing when calling close ([b68c845](https://github.com/taskforcesh/bullmq/commit/b68c845c77de6b2973ec31d2f22958ab60ad87aa)) ([`3f3f2a9`](https://github.com/taskforcesh/bullmq/commit/3f3f2a9563387312e7dd14a0efaa5f87ff3b71c3)) -# [1.60.0](https://github.com/taskforcesh/bullmq/compare/v1.59.4...v1.60.0) (2021-12-29) +### Fix +* fix(typescript): fix typings, upgrade ioredis dependencies (#220) ([`7059f20`](https://github.com/taskforcesh/bullmq/commit/7059f2089553a206ab3937f7fd0d0b9de96aa7b7)) -### Features +### Test -* **queue-scheduler:** add better event typing ([#963](https://github.com/taskforcesh/bullmq/issues/963)) ([b23c006](https://github.com/taskforcesh/bullmq/commit/b23c006e2bfce8a0709f0eb8e8739261b68c2f48)) +* test(getters): check length of get failed jobs ([`9296516`](https://github.com/taskforcesh/bullmq/commit/9296516cbb212d6a24422cc9a76109e89c12915e)) -## [1.59.4](https://github.com/taskforcesh/bullmq/compare/v1.59.3...v1.59.4) (2021-12-21) +### Unknown +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`d280be9`](https://github.com/taskforcesh/bullmq/commit/d280be98f491ca074cf63a3324ad6d09046babcf)) -### Bug Fixes +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`c6e0188`](https://github.com/taskforcesh/bullmq/commit/c6e018808254ed8011adc8bd11822f34797f77e5)) -* downgrade typescript to 3.9.10 fixes [#917](https://github.com/taskforcesh/bullmq/issues/917) ([#960](https://github.com/taskforcesh/bullmq/issues/960)) ([4e51fe0](https://github.com/taskforcesh/bullmq/commit/4e51fe00751092ee8f521039a3f2b41d881b71ae)) +* Update queue.ts ([`2da059d`](https://github.com/taskforcesh/bullmq/commit/2da059df47c55074036fdbf347cd5ee38971487c)) -## [1.59.3](https://github.com/taskforcesh/bullmq/compare/v1.59.2...v1.59.3) (2021-12-21) +## v1.8.13 (2020-06-05) + +### Chore + +* chore(release): 1.8.13 [skip ci]nn## [1.8.13](https://github.com/taskforcesh/bullmq/compare/v1.8.12...v1.8.13) (2020-06-05) ### Bug Fixes -* **worker:** fix undefined moveToActive ([87e8cab](https://github.com/taskforcesh/bullmq/commit/87e8cab16dad6f8bd9e9ec369ef7e79f471180be)) +* **redis-connection:** run the load command for reused redis client ([fab9bba](https://github.com/taskforcesh/bullmq/commit/fab9bba4caee8fd44523febb3bde588b151e8514)) ([`47d0827`](https://github.com/taskforcesh/bullmq/commit/47d0827b225bab4420647bfcd5eb551db0175269)) -## [1.59.2](https://github.com/taskforcesh/bullmq/compare/v1.59.1...v1.59.2) (2021-12-17) +### Fix +* fix(redis-connection): run the load command for reused redis client ([`fab9bba`](https://github.com/taskforcesh/bullmq/commit/fab9bba4caee8fd44523febb3bde588b151e8514)) -### Bug Fixes -* **package:** add jsnext:main prop ([#953](https://github.com/taskforcesh/bullmq/issues/953)) ([1a92bf7](https://github.com/taskforcesh/bullmq/commit/1a92bf7d41860f758841c5a833c1192d9a84a25f)) +## v1.8.12 (2020-06-04) -## [1.59.1](https://github.com/taskforcesh/bullmq/compare/v1.59.0...v1.59.1) (2021-12-17) +### Chore +* chore(release): 1.8.12 [skip ci]nn## [1.8.12](https://github.com/taskforcesh/bullmq/compare/v1.8.11...v1.8.12) (2020-06-04) ### Bug Fixes -* copy lua files to correct location ([2be1120](https://github.com/taskforcesh/bullmq/commit/2be1120974692ee57ec00e30d6dbbef670d88a1e)) +* remove unused options ([23aadc3](https://github.com/taskforcesh/bullmq/commit/23aadc300b947693f4afb22296d236a924bd11ca)) ([`5e808ad`](https://github.com/taskforcesh/bullmq/commit/5e808ad92ab510400b4f5f223db3e0b4ed6af09c)) -# [1.59.0](https://github.com/taskforcesh/bullmq/compare/v1.58.0...v1.59.0) (2021-12-17) +### Documentation +* docs: update README.md (#217) ([`55fff7f`](https://github.com/taskforcesh/bullmq/commit/55fff7f7c370186752710e20534ded3e17962cf8)) -### Bug Fixes +* docs: improve QueueScheduler docs -* correct dist path ([067d4c2](https://github.com/taskforcesh/bullmq/commit/067d4c2009b877f8bf6e6145507a41a53e5f7af3)) +I know that this looks obvious but it was not so direct to find it on the docs ([`873ec2f`](https://github.com/taskforcesh/bullmq/commit/873ec2f44eaf522c645241af3fed071ded5a2c43)) +### Fix -### Features +* fix: remove unused options ([`23aadc3`](https://github.com/taskforcesh/bullmq/commit/23aadc300b947693f4afb22296d236a924bd11ca)) -* also export bullmq as an ESM ([e97e5b5](https://github.com/taskforcesh/bullmq/commit/e97e5b52b079adf2ed79f7cb61699e40a91e34e8)) +### Unknown -# [1.58.0](https://github.com/taskforcesh/bullmq/compare/v1.57.4...v1.58.0) (2021-12-15) +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`46291ce`](https://github.com/taskforcesh/bullmq/commit/46291ce5b16eebb28da1c82dec2d62d4ca2a6351)) -### Features +## v1.8.11 (2020-05-29) -* **worker:** add better event typing ([#940](https://github.com/taskforcesh/bullmq/issues/940)) ([a326d4f](https://github.com/taskforcesh/bullmq/commit/a326d4f27e96ffa462a908ac14356d29839ff073)) +### Chore -## [1.57.4](https://github.com/taskforcesh/bullmq/compare/v1.57.3...v1.57.4) (2021-12-14) +* chore(release): 1.8.11 [skip ci]nn## [1.8.11](https://github.com/taskforcesh/bullmq/compare/v1.8.10...v1.8.11) (2020-05-29) + +### Bug Fixes +* **scheduler:** remove unnecessary division by 4096 ([4d25e95](https://github.com/taskforcesh/bullmq/commit/4d25e95f9522388bd85e932e04b6668e3da57686)) ([`c608a3f`](https://github.com/taskforcesh/bullmq/commit/c608a3fdf7e7c9031998a5695d387eb2a7797b6f)) -### Bug Fixes +### Fix -* **move-to-active:** add try catch in moveToActive call ([#933](https://github.com/taskforcesh/bullmq/issues/933)) ([bab45b0](https://github.com/taskforcesh/bullmq/commit/bab45b05d08c625557e2df65921e12f48081d39c)) -* **redis-connection:** consider cluster redisOptions config ([#934](https://github.com/taskforcesh/bullmq/issues/934)) ([5130f63](https://github.com/taskforcesh/bullmq/commit/5130f63ad969efa9649ab8f9abf36a72e8f553f4)) +* fix(scheduler): remove unnecessary division by 4096 ([`4d25e95`](https://github.com/taskforcesh/bullmq/commit/4d25e95f9522388bd85e932e04b6668e3da57686)) -## [1.57.3](https://github.com/taskforcesh/bullmq/compare/v1.57.2...v1.57.3) (2021-12-14) +### Unknown +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`fc9d13f`](https://github.com/taskforcesh/bullmq/commit/fc9d13f7d8ce9cacefea516be9ad73b43ba9079d)) -### Bug Fixes -* remove debug console.error ([#932](https://github.com/taskforcesh/bullmq/issues/932)) ([271aac3](https://github.com/taskforcesh/bullmq/commit/271aac3417bc7f76ac02435b456552677b2847db)) +## v1.8.10 (2020-05-28) -## [1.57.2](https://github.com/taskforcesh/bullmq/compare/v1.57.1...v1.57.2) (2021-12-11) +### Chore +* chore(release): 1.8.10 [skip ci]nn## [1.8.10](https://github.com/taskforcesh/bullmq/compare/v1.8.9...v1.8.10) (2020-05-28) ### Bug Fixes -* **connection:** check instance options to console log deprecation message ([#927](https://github.com/taskforcesh/bullmq/issues/927)) ([fc1e2b9](https://github.com/taskforcesh/bullmq/commit/fc1e2b9f3f20db53f9dc7ecdfa4644f02acc9f83)) +* **scheduler:** divide timestamp by 4096 in update set fixes [#168](https://github.com/taskforcesh/bullmq/issues/168) ([0c5db83](https://github.com/taskforcesh/bullmq/commit/0c5db8391bb8994bee19f25a33efb9dfee792d7b)) ([`183137a`](https://github.com/taskforcesh/bullmq/commit/183137a8f4c9dafada20096ee07aba4bd1ecb35a)) +### Fix -### Performance Improvements +* fix(scheduler): divide timestamp by 4096 in update set fixes #168 ([`0c5db83`](https://github.com/taskforcesh/bullmq/commit/0c5db8391bb8994bee19f25a33efb9dfee792d7b)) -* **add-job:** save parent data as json ([#859](https://github.com/taskforcesh/bullmq/issues/859)) ([556d4ee](https://github.com/taskforcesh/bullmq/commit/556d4ee427090f60270945a7fd438e2595bb43e9)) -## [1.57.1](https://github.com/taskforcesh/bullmq/compare/v1.57.0...v1.57.1) (2021-12-11) +## v1.8.9 (2020-05-25) +### Chore + +* chore(release): 1.8.9 [skip ci]nn## [1.8.9](https://github.com/taskforcesh/bullmq/compare/v1.8.8...v1.8.9) (2020-05-25) ### Bug Fixes -* **worker:** better handling of block timeout ([be4c933](https://github.com/taskforcesh/bullmq/commit/be4c933ae0a7a790d24a081b2ed4e7e1c0216e47)) +* **scheduler:** divide next timestamp by 4096 ([#204](https://github.com/taskforcesh/bullmq/issues/204)) ([9562d74](https://github.com/taskforcesh/bullmq/commit/9562d74625e20b7b6de8750339c85345ba027357)) ([`e126c25`](https://github.com/taskforcesh/bullmq/commit/e126c25e61b36f484a7b4b753be4789001b8dcf8)) -# [1.57.0](https://github.com/taskforcesh/bullmq/compare/v1.56.0...v1.57.0) (2021-12-08) +* chore(deps): bump jquery from 3.4.1 to 3.5.1 +Bumps [jquery](https://github.com/jquery/jquery) from 3.4.1 to 3.5.1. +- [Release notes](https://github.com/jquery/jquery/releases) +- [Commits](https://github.com/jquery/jquery/compare/3.4.1...3.5.1) -### Features +Signed-off-by: dependabot[bot] <support@github.com> ([`6ec5517`](https://github.com/taskforcesh/bullmq/commit/6ec5517d5de6a55482f0fb598367b64c1c65cdef)) -* **queue-events:** add better event typing ([#919](https://github.com/taskforcesh/bullmq/issues/919)) ([e980080](https://github.com/taskforcesh/bullmq/commit/e980080767bc56ae09a5c5cf33728a85a023bb42)) +### Fix -# [1.56.0](https://github.com/taskforcesh/bullmq/compare/v1.55.1...v1.56.0) (2021-12-06) +* fix(scheduler): divide next timestamp by 4096 (#204) +authored-by: Boris Dorofeev <bdorofeev@bdorofeev-laptop.corp.ps.kz> ([`9562d74`](https://github.com/taskforcesh/bullmq/commit/9562d74625e20b7b6de8750339c85345ba027357)) -### Bug Fixes -* emit drain event if no jobs left when completing ([9ad78a9](https://github.com/taskforcesh/bullmq/commit/9ad78a91c0a4a74cf84bd77d351d98195104f0b6)) -* **worker:** use client for setting worker name ([af65c2c](https://github.com/taskforcesh/bullmq/commit/af65c2cd0d3fb232c617b018d4991f3276db11ea)) +## v1.8.8 (2020-05-25) +### Chore -### Features +* chore(release): 1.8.8 [skip ci]nn## [1.8.8](https://github.com/taskforcesh/bullmq/compare/v1.8.7...v1.8.8) (2020-05-25) -* **worker:** make moveToActive protected ([d2897ee](https://github.com/taskforcesh/bullmq/commit/d2897ee7bbf4aee5251ac4fb28705f2bebbe7bfe)) +### Bug Fixes -## [1.55.1](https://github.com/taskforcesh/bullmq/compare/v1.55.0...v1.55.1) (2021-12-03) +* **queue-base:** error event is passed through ([ad14e77](https://github.com/taskforcesh/bullmq/commit/ad14e777171c0c44b7e50752d9847dec23f46158)) +* **redis-connection:** error event is passed through ([a15b1a1](https://github.com/taskforcesh/bullmq/commit/a15b1a1824c6863ecf3e5132e22924fc3ff161f6)) +* **worker:** error event is passed through ([d7f0374](https://github.com/taskforcesh/bullmq/commit/d7f03749ce300e917399a435a3f426e66145dd8c)) ([`75eeef2`](https://github.com/taskforcesh/bullmq/commit/75eeef2031fb862fd35b769cf81d12642bad811c)) +### Fix -### Bug Fixes +* fix(redis-connection): error event is passed through ([`a15b1a1`](https://github.com/taskforcesh/bullmq/commit/a15b1a1824c6863ecf3e5132e22924fc3ff161f6)) -* **worker:** always try to move to active after waiting for job ([#914](https://github.com/taskforcesh/bullmq/issues/914)) ([97b7084](https://github.com/taskforcesh/bullmq/commit/97b708451bf4ce14a461a50f8a24d14b0e40dd4b)) +* fix(worker): error event is passed through ([`d7f0374`](https://github.com/taskforcesh/bullmq/commit/d7f03749ce300e917399a435a3f426e66145dd8c)) -# [1.55.0](https://github.com/taskforcesh/bullmq/compare/v1.54.6...v1.55.0) (2021-12-02) +* fix(queue-base): error event is passed through +Existing code doesn't seem to pass 'error' event through in a right way. ([`ad14e77`](https://github.com/taskforcesh/bullmq/commit/ad14e777171c0c44b7e50752d9847dec23f46158)) -### Features +### Test -* **script-loader:** lua script loader with include support ([#897](https://github.com/taskforcesh/bullmq/issues/897)) ([64b6ccf](https://github.com/taskforcesh/bullmq/commit/64b6ccf2a373b40d7ea763b3d35cf34f36ba11da)) +* test: fix broken connection test ([`230664c`](https://github.com/taskforcesh/bullmq/commit/230664cf0565e2d5351299d64d3a8bef70289b0f)) -## [1.54.6](https://github.com/taskforcesh/bullmq/compare/v1.54.5...v1.54.6) (2021-11-30) +### Unknown +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`5d4e983`](https://github.com/taskforcesh/bullmq/commit/5d4e9835bd74500699bbe7300e17cb094911e4f6)) -### Bug Fixes +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`96201b3`](https://github.com/taskforcesh/bullmq/commit/96201b392c590dfdbbd8001a94d124a2567165bf)) -* **stalled:** save finishedOn when job stalled more than allowable limit ([#900](https://github.com/taskforcesh/bullmq/issues/900)) ([eb89edf](https://github.com/taskforcesh/bullmq/commit/eb89edf2f4eb85dedb1485de32e79331940a654f)) +* update events.md -## [1.54.5](https://github.com/taskforcesh/bullmq/compare/v1.54.4...v1.54.5) (2021-11-26) +Correctly instantiate the `Worker` class, ([`2a439fb`](https://github.com/taskforcesh/bullmq/commit/2a439fbe44e0e08544d1d34d78dd8999cd4ca83b)) +* Second Argument for worker is missing -### Bug Fixes +I am not sure exactly the options here, but definitely this will work. It also appears that some sort of resolution might occur if a string is passed, but I can't figure that one out. ([`8ee4d68`](https://github.com/taskforcesh/bullmq/commit/8ee4d685dec7a92f050d752f29375b5f58cc6c72)) -* **tsconfig:** only include node types ([#895](https://github.com/taskforcesh/bullmq/issues/895)) ([5f4fdca](https://github.com/taskforcesh/bullmq/commit/5f4fdca5f416f2cd9d83eb0fba84e56c24320b63)) +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`2971254`](https://github.com/taskforcesh/bullmq/commit/2971254dcabada77b815affb377639abb5d6f990)) -## [1.54.4](https://github.com/taskforcesh/bullmq/compare/v1.54.3...v1.54.4) (2021-11-24) +## v1.8.7 (2020-04-10) -### Bug Fixes +### Chore -* **child-processor:** add deprecation warning for progress method ([#890](https://github.com/taskforcesh/bullmq/issues/890)) ([f80b19a](https://github.com/taskforcesh/bullmq/commit/f80b19a5aa85413b8906aa0fac1bfd09bec990cb)) +* chore(release): 1.8.7 [skip ci]nn## [1.8.7](https://github.com/taskforcesh/bullmq/compare/v1.8.6...v1.8.7) (2020-04-10) -## [1.54.3](https://github.com/taskforcesh/bullmq/compare/v1.54.2...v1.54.3) (2021-11-22) +### Bug Fixes +* **worker:** do not use global child pool fixes [#172](https://github.com/taskforcesh/bullmq/issues/172) ([bc65f26](https://github.com/taskforcesh/bullmq/commit/bc65f26dd47c59d0a7277ac947140405557be9a5)) ([`5ef3e12`](https://github.com/taskforcesh/bullmq/commit/5ef3e12afc936b0db23de6787cf62ec9bd262f42)) -### Bug Fixes +### Fix -* **clean:** use range values in lua script ([#885](https://github.com/taskforcesh/bullmq/issues/885)) ([02ef63a](https://github.com/taskforcesh/bullmq/commit/02ef63a8163e627a270a1c1bd74989a67c3f15f7)) +* fix(worker): do not use global child pool fixes #172 ([`bc65f26`](https://github.com/taskforcesh/bullmq/commit/bc65f26dd47c59d0a7277ac947140405557be9a5)) -## [1.54.2](https://github.com/taskforcesh/bullmq/compare/v1.54.1...v1.54.2) (2021-11-20) +### Unknown +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`b80678d`](https://github.com/taskforcesh/bullmq/commit/b80678d22f12b79b5f7fabce9e445a929ec2f289)) -### Bug Fixes -* **job:** use this when use new operators ([#884](https://github.com/taskforcesh/bullmq/issues/884)) ([7b84283](https://github.com/taskforcesh/bullmq/commit/7b842839e1d30967ebf15b901033e3b31e929df8)) +## v1.8.6 (2020-04-10) -## [1.54.1](https://github.com/taskforcesh/bullmq/compare/v1.54.0...v1.54.1) (2021-11-19) +### Chore +* chore(release): 1.8.6 [skip ci]nn## [1.8.6](https://github.com/taskforcesh/bullmq/compare/v1.8.5...v1.8.6) (2020-04-10) ### Bug Fixes -* **job:** change private attributes to protected for extensions ([#882](https://github.com/taskforcesh/bullmq/issues/882)) ([ffcc3f0](https://github.com/taskforcesh/bullmq/commit/ffcc3f083c23e6de3587c38fb7aacb2e19085351)) +* **workers:** do not call super.close() ([ebd2ae1](https://github.com/taskforcesh/bullmq/commit/ebd2ae1a5613d71643c5a7ba3f685d77585de68e)) +* make sure closing is returned in every close call ([88c5948](https://github.com/taskforcesh/bullmq/commit/88c5948d33a9a7b7a4f4f64f3183727b87d80207)) +* **scheduler:** duplicate connections fixes [#174](https://github.com/taskforcesh/bullmq/issues/174) ([011b8ac](https://github.com/taskforcesh/bullmq/commit/011b8acfdec54737d94a9fead2423e060e3364db)) +* **worker:** return this.closing when calling close ([06d3d4f](https://github.com/taskforcesh/bullmq/commit/06d3d4f476444a2d2af8538d60cb2561a1915868)) ([`4654721`](https://github.com/taskforcesh/bullmq/commit/46547217fe04853b50d29b83d95c1e6f29a184de)) -# [1.54.0](https://github.com/taskforcesh/bullmq/compare/v1.53.0...v1.54.0) (2021-11-17) +### Fix +* fix(workers): do not call super.close() ([`ebd2ae1`](https://github.com/taskforcesh/bullmq/commit/ebd2ae1a5613d71643c5a7ba3f685d77585de68e)) -### Features +* fix: make sure closing is returned in every close call ([`88c5948`](https://github.com/taskforcesh/bullmq/commit/88c5948d33a9a7b7a4f4f64f3183727b87d80207)) -* **load-includes:** export includes to be reused in extensions ([#877](https://github.com/taskforcesh/bullmq/issues/877)) ([b56c4a9](https://github.com/taskforcesh/bullmq/commit/b56c4a9cf2ecebb44481618026589162be61680a)) +* fix(worker): return this.closing when calling close ([`06d3d4f`](https://github.com/taskforcesh/bullmq/commit/06d3d4f476444a2d2af8538d60cb2561a1915868)) -# [1.53.0](https://github.com/taskforcesh/bullmq/compare/v1.52.2...v1.53.0) (2021-11-16) +### Test +* test(stalled_jobs): finetune params ([`d7888ae`](https://github.com/taskforcesh/bullmq/commit/d7888ae8efe9ff3427605e0937862bce930cd27b)) -### Features +* test(stalled_jobs): increase timeout ([`8f654f9`](https://github.com/taskforcesh/bullmq/commit/8f654f95ba2e7f08c3f780c94d69e8c15adec641)) -* **queue-events:** add cleaned event ([#865](https://github.com/taskforcesh/bullmq/issues/865)) ([b3aebad](https://github.com/taskforcesh/bullmq/commit/b3aebad8a62311e135d53be2e7c5e47740547465)) +### Unknown -## [1.52.2](https://github.com/taskforcesh/bullmq/compare/v1.52.1...v1.52.2) (2021-11-14) +* fix(scheduler): duplicate connections fixes #174 ([`011b8ac`](https://github.com/taskforcesh/bullmq/commit/011b8acfdec54737d94a9fead2423e060e3364db)) +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`fff60bf`](https://github.com/taskforcesh/bullmq/commit/fff60bf2962a6a4708081ed57772c413adb3a43c)) -### Bug Fixes -* **worker:** change private attributes to protected for pro extension ([#874](https://github.com/taskforcesh/bullmq/issues/874)) ([1c73881](https://github.com/taskforcesh/bullmq/commit/1c738819b49f206688ed7b3b9d103077045e1b05)) +## v1.8.5 (2020-04-05) -## [1.52.1](https://github.com/taskforcesh/bullmq/compare/v1.52.0...v1.52.1) (2021-11-12) +### Chore +* chore(release): 1.8.5 [skip ci]nn## [1.8.5](https://github.com/taskforcesh/bullmq/compare/v1.8.4...v1.8.5) (2020-04-05) -### Performance Improvements +### Bug Fixes -* **clean:** speed up clean method when called with limit param ([#864](https://github.com/taskforcesh/bullmq/issues/864)) ([09b5cb4](https://github.com/taskforcesh/bullmq/commit/09b5cb45a79c4bc53a52d540918c22477a066e16)) +* removed deprecated and unused node-uuid ([c810579](https://github.com/taskforcesh/bullmq/commit/c810579029d33ef47d5a7563e63126a69c62fd87)) ([`88ef30b`](https://github.com/taskforcesh/bullmq/commit/88ef30b1ff2ec0a037bf2cd69e8558687bbeb70e)) -# [1.52.0](https://github.com/taskforcesh/bullmq/compare/v1.51.3...v1.52.0) (2021-11-11) +### Fix +* fix: removed deprecated and unused node-uuid ([`c810579`](https://github.com/taskforcesh/bullmq/commit/c810579029d33ef47d5a7563e63126a69c62fd87)) -### Features -* **queue:** add waiting event type declaration ([#872](https://github.com/taskforcesh/bullmq/issues/872)) ([f29925d](https://github.com/taskforcesh/bullmq/commit/f29925da3b12f573582ea188ec386e86023cefc9)) +## v1.8.4 (2020-03-17) -## [1.51.3](https://github.com/taskforcesh/bullmq/compare/v1.51.2...v1.51.3) (2021-11-04) +### Chore +* chore(release): 1.8.4 [skip ci]nn## [1.8.4](https://github.com/taskforcesh/bullmq/compare/v1.8.3...v1.8.4) (2020-03-17) ### Bug Fixes -* **move-to-failed:** delete closing check that prevents script execution ([#858](https://github.com/taskforcesh/bullmq/issues/858)) fixes [#834](https://github.com/taskforcesh/bullmq/issues/834) ([d50814f](https://github.com/taskforcesh/bullmq/commit/d50814f864448c10fec8e93651a2095fa4ef3f4e)) +* **job:** added nullable/optional properties ([cef134f](https://github.com/taskforcesh/bullmq/commit/cef134f7c4d87e1b80ba42a5e06c3877956ff4cc)) ([`5c656cb`](https://github.com/taskforcesh/bullmq/commit/5c656cb231e0d001f3c18937cfb6b11b1f4f480d)) -## [1.51.2](https://github.com/taskforcesh/bullmq/compare/v1.51.1...v1.51.2) (2021-11-03) +### Fix +* fix(job): added nullable/optional properties -### Bug Fixes +Marked finishedOn and processedOn as nullable/optional ([`cef134f`](https://github.com/taskforcesh/bullmq/commit/cef134f7c4d87e1b80ba42a5e06c3877956ff4cc)) -* **flow:** remove repeat option from FlowJob opts ([#853](https://github.com/taskforcesh/bullmq/issues/853)) fixes [#851](https://github.com/taskforcesh/bullmq/issues/851) ([c9ee2f1](https://github.com/taskforcesh/bullmq/commit/c9ee2f100a23aa24034598b7d452c69720d7aabd)) -## [1.51.1](https://github.com/taskforcesh/bullmq/compare/v1.51.0...v1.51.1) (2021-10-29) +## v1.8.3 (2020-03-13) +### Chore + +* chore(release): 1.8.3 [skip ci]nn## [1.8.3](https://github.com/taskforcesh/bullmq/compare/v1.8.2...v1.8.3) (2020-03-13) ### Bug Fixes -* **commands:** copy includes lua scripts ([#843](https://github.com/taskforcesh/bullmq/issues/843)) fixes [#837](https://github.com/taskforcesh/bullmq/issues/837) ([cab33e0](https://github.com/taskforcesh/bullmq/commit/cab33e08bc78bd3c45b86158a818100beeb06d81)) +* **sandbox:** If the child process is killed, remove it from the pool. ([8fb0fb5](https://github.com/taskforcesh/bullmq/commit/8fb0fb569a0236b37d3bae06bf58a2a1da3221c6)) ([`acf3159`](https://github.com/taskforcesh/bullmq/commit/acf3159650b9afabc23db4db6d8a445e3ec02b72)) -# [1.51.0](https://github.com/taskforcesh/bullmq/compare/v1.50.7...v1.51.0) (2021-10-28) +### Fix +* fix(sandbox): If the child process is killed, remove it from the pool. ([`8fb0fb5`](https://github.com/taskforcesh/bullmq/commit/8fb0fb569a0236b37d3bae06bf58a2a1da3221c6)) -### Features -* **flow:** consider continually adding jobs ([#828](https://github.com/taskforcesh/bullmq/issues/828)) fixes [#826](https://github.com/taskforcesh/bullmq/issues/826) ([b0fde69](https://github.com/taskforcesh/bullmq/commit/b0fde69f4370160a891e4654485c09745066b80b)) +## v1.8.2 (2020-03-03) -## [1.50.7](https://github.com/taskforcesh/bullmq/compare/v1.50.6...v1.50.7) (2021-10-28) +### Chore +* chore(release): 1.8.2 [skip ci]nn## [1.8.2](https://github.com/taskforcesh/bullmq/compare/v1.8.1...v1.8.2) (2020-03-03) ### Bug Fixes -* override enableReadyCheck, maxRetriesPerRequest fixes reconnection ([09ba358](https://github.com/taskforcesh/bullmq/commit/09ba358b6f761bdc52b0f5b2aa315cc6c2a9db6e)) -* **queue-base:** deprecation warning on missing connection ([2f79802](https://github.com/taskforcesh/bullmq/commit/2f79802378d7e015b5d0702945a71c1c2073251e)) +* restore the Job timestamp when deserializing JSON data ([#138](https://github.com/taskforcesh/bullmq/issues/138)) ([#152](https://github.com/taskforcesh/bullmq/issues/152)) ([c171bd4](https://github.com/taskforcesh/bullmq/commit/c171bd47f7b75378e75307a1decdc0f630ac1cd6)) ([`b96f5ba`](https://github.com/taskforcesh/bullmq/commit/b96f5ba3e9c36182174300af629b34fe43c62ecd)) -## [1.50.6](https://github.com/taskforcesh/bullmq/compare/v1.50.5...v1.50.6) (2021-10-28) +### Fix +* fix: restore the Job timestamp when deserializing JSON data (#138) (#152) ([`c171bd4`](https://github.com/taskforcesh/bullmq/commit/c171bd47f7b75378e75307a1decdc0f630ac1cd6)) -### Bug Fixes +* fix(worker): return this.closing when calling close ([`b68c845`](https://github.com/taskforcesh/bullmq/commit/b68c845c77de6b2973ec31d2f22958ab60ad87aa)) -* **queue-base:** show connection deprecation warning ([#832](https://github.com/taskforcesh/bullmq/issues/832)) fixes [#829](https://github.com/taskforcesh/bullmq/issues/829) ([5d023fe](https://github.com/taskforcesh/bullmq/commit/5d023fe7b671a2547398fd68995ccd85216cc7a5)) -## [1.50.5](https://github.com/taskforcesh/bullmq/compare/v1.50.4...v1.50.5) (2021-10-21) +## v1.8.1 (2020-03-02) +### Chore + +* chore(release): 1.8.1 [skip ci]nn## [1.8.1](https://github.com/taskforcesh/bullmq/compare/v1.8.0...v1.8.1) (2020-03-02) ### Bug Fixes -* **child-pool:** pipe process stdout and stderr([#822](https://github.com/taskforcesh/bullmq/issues/822)) fixes [#821](https://github.com/taskforcesh/bullmq/issues/821) ([13f5c62](https://github.com/taskforcesh/bullmq/commit/13f5c62174925e4638acda6a9de379668048189d)) +* modified imports to work when esModuleInterop is disabled ([#132](https://github.com/taskforcesh/bullmq/issues/132)) ([01681f2](https://github.com/taskforcesh/bullmq/commit/01681f282bafac2df2c602edb51d6bde3483896c)) ([`fccacee`](https://github.com/taskforcesh/bullmq/commit/fccacee7164155ea1fdf5bee163dd56103cfb223)) -## [1.50.4](https://github.com/taskforcesh/bullmq/compare/v1.50.3...v1.50.4) (2021-10-20) +### Fix +* fix: modified imports to work when esModuleInterop is disabled (#132) -### Bug Fixes +fixes https://github.com/taskforcesh/bullmq/issues/129 ([`01681f2`](https://github.com/taskforcesh/bullmq/commit/01681f282bafac2df2c602edb51d6bde3483896c)) -* properly pass sharedConnection option to worker base class ([56557f1](https://github.com/taskforcesh/bullmq/commit/56557f1c0c3fb04bc3dd8824819c2d4367324c3b)) -## [1.50.3](https://github.com/taskforcesh/bullmq/compare/v1.50.2...v1.50.3) (2021-10-18) +## v1.8.0 (2020-03-02) +### Chore + +* chore(release): 1.8.0 [skip ci]nn# [1.8.0](https://github.com/taskforcesh/bullmq/compare/v1.7.0...v1.8.0) (2020-03-02) ### Bug Fixes -* **msgpackr:** upgrade version to 1.4.6 to support esm bundlers ([#818](https://github.com/taskforcesh/bullmq/issues/818)) fixes [#813](https://github.com/taskforcesh/bullmq/issues/813) ([913d7a9](https://github.com/taskforcesh/bullmq/commit/913d7a9a892d2c7e2fa5822367355c2dee888583)) +* cleanup signatures for queue add and addBulk ([#127](https://github.com/taskforcesh/bullmq/issues/127)) ([48e221b](https://github.com/taskforcesh/bullmq/commit/48e221b53909079a4def9c48c1b69cebabd0ed74)) +* exit code 12 when using inspect with child process ([#137](https://github.com/taskforcesh/bullmq/issues/137)) ([43ebc67](https://github.com/taskforcesh/bullmq/commit/43ebc67cec3e8f283f9a555b4466cf918226687b)) -## [1.50.2](https://github.com/taskforcesh/bullmq/compare/v1.50.1...v1.50.2) (2021-10-12) +### Features +* **types:** add sandboxed job processor types ([#114](https://github.com/taskforcesh/bullmq/issues/114)) ([a50a88c](https://github.com/taskforcesh/bullmq/commit/a50a88cd1658fa9d568235283a4c23a74eb8ed2a)) ([`5cde2fa`](https://github.com/taskforcesh/bullmq/commit/5cde2faa699344ffa3c948aea2214723eeda37d1)) -### Bug Fixes +### Feature -* **msgpack:** replace msgpack by msgpackr ([dc13a75](https://github.com/taskforcesh/bullmq/commit/dc13a75374bbd29fefbf3e56f822e763df3712d9)) +* feat(types): add sandboxed job processor types (#114) ([`a50a88c`](https://github.com/taskforcesh/bullmq/commit/a50a88cd1658fa9d568235283a4c23a74eb8ed2a)) -## [1.50.1](https://github.com/taskforcesh/bullmq/compare/v1.50.0...v1.50.1) (2021-10-12) +### Fix +* fix: exit code 12 when using inspect with child process (#137) ([`43ebc67`](https://github.com/taskforcesh/bullmq/commit/43ebc67cec3e8f283f9a555b4466cf918226687b)) -### Bug Fixes +* fix: cleanup signatures for queue add and addBulk (#127) -* **queue-getters:** only getting the first 2 jobs ([653873a](https://github.com/taskforcesh/bullmq/commit/653873a6a86dd6c3e1afc3142efbe11014d80557)) +The addBulk signature was missing the data type and the name parameter +did not match between the two functions. ([`48e221b`](https://github.com/taskforcesh/bullmq/commit/48e221b53909079a4def9c48c1b69cebabd0ed74)) -# [1.50.0](https://github.com/taskforcesh/bullmq/compare/v1.49.0...v1.50.0) (2021-10-12) +## v1.7.0 (2020-03-02) -### Features +### Chore -* easier to build extensions on top of BullMQ ([b1a9e64](https://github.com/taskforcesh/bullmq/commit/b1a9e64a9184addc0b8245a04013e1c896e9c2bc)) +* chore(release): 1.7.0 [skip ci]nn# [1.7.0](https://github.com/taskforcesh/bullmq/compare/v1.6.8...v1.7.0) (2020-03-02) -# [1.49.0](https://github.com/taskforcesh/bullmq/compare/v1.48.3...v1.49.0) (2021-10-08) +### Features +* made queue name publicly readable for [#140](https://github.com/taskforcesh/bullmq/issues/140) ([f2bba2e](https://github.com/taskforcesh/bullmq/commit/f2bba2efd9d85986b01bb35c847a232b5c42ae57)) ([`dbf19de`](https://github.com/taskforcesh/bullmq/commit/dbf19de422b889574aa055ad08f677050bffb762)) -### Features +### Unknown -* **sandboxed-process:** handle init-failed error ([#797](https://github.com/taskforcesh/bullmq/issues/797)) ([5d2f553](https://github.com/taskforcesh/bullmq/commit/5d2f55342b19ee99d34f8d8003f09359cfe17d4f)) +* Merge pull request #141 from bobdercole/queue-name -## [1.48.3](https://github.com/taskforcesh/bullmq/compare/v1.48.2...v1.48.3) (2021-10-05) +feat: made queue name publicly readable for #140 ([`def0eb6`](https://github.com/taskforcesh/bullmq/commit/def0eb658821d3eb44e3b69d71cb58e05d251f70)) +* Merge branch 'master' into queue-name ([`5c202cf`](https://github.com/taskforcesh/bullmq/commit/5c202cf0e62de796b0f3ce6cfec4018042d7744e)) -### Bug Fixes -* **change-delay:** add current time to delay ([#789](https://github.com/taskforcesh/bullmq/issues/789)) fixes [#787](https://github.com/taskforcesh/bullmq/issues/787) ([4a70def](https://github.com/taskforcesh/bullmq/commit/4a70def6e85cf9ea384ec5f38c3c4f83e4eb523c)) +## v1.6.8 (2020-02-22) -## [1.48.2](https://github.com/taskforcesh/bullmq/compare/v1.48.1...v1.48.2) (2021-09-24) +### Chore +* chore(release): 1.6.8 [skip ci]nn## [1.6.8](https://github.com/taskforcesh/bullmq/compare/v1.6.7...v1.6.8) (2020-02-22) -### Performance Improvements +### Bug Fixes -* **obliterate:** do not pass unused variables ([#766](https://github.com/taskforcesh/bullmq/issues/766)) ([e9abfa6](https://github.com/taskforcesh/bullmq/commit/e9abfa6f821064901770a9b72adfb00cac96154c)) +* modified QueueGetters.getJob and Job.fromId to also return null to ([65183fc](https://github.com/taskforcesh/bullmq/commit/65183fcf542d0227ec1d4d6637b46b5381331787)) +* modified QueueGetters.getJob and Job.fromId to return undefined ([ede352b](https://github.com/taskforcesh/bullmq/commit/ede352be75ffe05bf633516db9eda88467c562bf)) ([`293ef56`](https://github.com/taskforcesh/bullmq/commit/293ef569460d076bdedc62f60e3d520fa6ccab33)) -## [1.48.1](https://github.com/taskforcesh/bullmq/compare/v1.48.0...v1.48.1) (2021-09-23) +### Documentation +* docs: minor improvements ([`a882a4a`](https://github.com/taskforcesh/bullmq/commit/a882a4ad6b60b5b0fd3dec838f9c35b7e582310d)) -### Bug Fixes +* docs: fix QueueEvents examples in quick start guide ([`83c8e28`](https://github.com/taskforcesh/bullmq/commit/83c8e281f7c30caf82fa9c3e21775a507b560378)) -* **obliterate:** consider dependencies and processed keys ([#765](https://github.com/taskforcesh/bullmq/issues/765)) ([fd6bad8](https://github.com/taskforcesh/bullmq/commit/fd6bad8c7444c21e6f1d67611a28f8e4aace293d)) +### Feature -# [1.48.0](https://github.com/taskforcesh/bullmq/compare/v1.47.2...v1.48.0) (2021-09-23) +* feat: made queue name publicly readable for #140 ([`f2bba2e`](https://github.com/taskforcesh/bullmq/commit/f2bba2efd9d85986b01bb35c847a232b5c42ae57)) +### Fix -### Features +* fix: modified QueueGetters.getJob and Job.fromId to return undefined +instead of null ([`ede352b`](https://github.com/taskforcesh/bullmq/commit/ede352be75ffe05bf633516db9eda88467c562bf)) -* **queue:** add drain lua script ([#764](https://github.com/taskforcesh/bullmq/issues/764)) ([2daa698](https://github.com/taskforcesh/bullmq/commit/2daa698a7cc5dc8a6cd087b2d29356bc02fb4944)) +* fix: modified QueueGetters.getJob and Job.fromId to also return null to +maintain consistency with v3 API. ([`65183fc`](https://github.com/taskforcesh/bullmq/commit/65183fcf542d0227ec1d4d6637b46b5381331787)) -## [1.47.2](https://github.com/taskforcesh/bullmq/compare/v1.47.1...v1.47.2) (2021-09-22) +### Test +* test: added test for undefined getJob ([`102d7f7`](https://github.com/taskforcesh/bullmq/commit/102d7f705dc28ce0dd467bed46d2e5c4e3523ee8)) -### Bug Fixes +* test: re-added getJob test ([`5716279`](https://github.com/taskforcesh/bullmq/commit/57162796a089d76635edf017798190d38b7a9702)) -* **flow-producer:** use default prefix in add method ([#763](https://github.com/taskforcesh/bullmq/issues/763)) fixes [#762](https://github.com/taskforcesh/bullmq/issues/762) ([fffdb55](https://github.com/taskforcesh/bullmq/commit/fffdb55f37917776494a4471673ef4564e0faab5)) +* test: updated tests for ede352b ([`2de620b`](https://github.com/taskforcesh/bullmq/commit/2de620b3eb9f292fc25f88bd1bff55805f832d03)) -## [1.47.1](https://github.com/taskforcesh/bullmq/compare/v1.47.0...v1.47.1) (2021-09-17) +### Unknown +* Merge pull request #133 from bobdercole/get-job-type -### Bug Fixes +fix: modified QueueGetters.getJob and Job.fromId to also return null ([`10f493e`](https://github.com/taskforcesh/bullmq/commit/10f493e8dfdd4fbf13a288482d8578ba895a1323)) -* **running:** move running attribute before first async call ([#756](https://github.com/taskforcesh/bullmq/issues/756)) ([f7f0660](https://github.com/taskforcesh/bullmq/commit/f7f066076bbe6cbcbf716ae622d55c6c1ae9b270)) +* Merge pull request #125 from snacqs/docs-improvements -# [1.47.0](https://github.com/taskforcesh/bullmq/compare/v1.46.7...v1.47.0) (2021-09-16) +docs: minor improvements ([`36726bf`](https://github.com/taskforcesh/bullmq/commit/36726bfb01430af8ec606f36423fc187e4a06fb4)) +* Merge pull request #123 from rhinodavid/queue_events_doc -### Features +docs: fix QueueEvents examples in quick start guide ([`195e877`](https://github.com/taskforcesh/bullmq/commit/195e8777f35032f106732adc7e5e74dc952f3aa8)) -* **queue-events:** launch without launching process ([#750](https://github.com/taskforcesh/bullmq/issues/750)) ([23a2360](https://github.com/taskforcesh/bullmq/commit/23a23606e727ca13b24924a1e867c6b557d6a09d)) -## [1.46.7](https://github.com/taskforcesh/bullmq/compare/v1.46.6...v1.46.7) (2021-09-16) +## v1.6.7 (2020-01-16) + +### Chore +* chore(release): 1.6.7 [skip ci]nn## [1.6.7](https://github.com/taskforcesh/bullmq/compare/v1.6.6...v1.6.7) (2020-01-16) ### Bug Fixes -* **wait-for-job:** add catch block and emit error ([#749](https://github.com/taskforcesh/bullmq/issues/749)) ([b407f9a](https://github.com/taskforcesh/bullmq/commit/b407f9ac429c825984856eebca58bbfd16feb9d3)) +* don't fail a job when the worker already lost the lock ([23c0bf7](https://github.com/taskforcesh/bullmq/commit/23c0bf70eab6d166b0483336f103323d1bf2ca64)) ([`9d796a1`](https://github.com/taskforcesh/bullmq/commit/9d796a14258061e4b52063150e1d307799ce9019)) -## [1.46.6](https://github.com/taskforcesh/bullmq/compare/v1.46.5...v1.46.6) (2021-09-15) +### Fix +* fix: don't fail a job when the worker already lost the lock ([`23c0bf7`](https://github.com/taskforcesh/bullmq/commit/23c0bf70eab6d166b0483336f103323d1bf2ca64)) -### Bug Fixes +### Unknown -* **connection:** fail only if redis connection does not recover ([#751](https://github.com/taskforcesh/bullmq/issues/751)) ([8d59ced](https://github.com/taskforcesh/bullmq/commit/8d59ced27831a636f40ed4233eba3d4ac0654534)) +* Merge pull request #107 from wavyapp/fix-71 -## [1.46.5](https://github.com/taskforcesh/bullmq/compare/v1.46.4...v1.46.5) (2021-09-12) +fix: don't fail a job when the worker already lost the lock ([`da8cdb4`](https://github.com/taskforcesh/bullmq/commit/da8cdb42827c22fea12b9c2f4c0c80fbad786b98)) +* GitBook: [master] 7 pages modified ([`b4a7dfd`](https://github.com/taskforcesh/bullmq/commit/b4a7dfd5691f35b67ce0474169bc02e31431e262)) -### Bug Fixes -* **is-finished:** reject when missing job key ([#746](https://github.com/taskforcesh/bullmq/issues/746)) fixes [#85](https://github.com/taskforcesh/bullmq/issues/85) ([bd49bd2](https://github.com/taskforcesh/bullmq/commit/bd49bd20492676559072e5e16adb6d4e47afb22b)) +## v1.6.6 (2020-01-05) -## [1.46.4](https://github.com/taskforcesh/bullmq/compare/v1.46.3...v1.46.4) (2021-09-10) +### Chore +* chore(release): 1.6.6 [skip ci]nn## [1.6.6](https://github.com/taskforcesh/bullmq/compare/v1.6.5...v1.6.6) (2020-01-05) ### Bug Fixes -* **wait-until-finished:** isFinished return failedReason or returnValue ([#743](https://github.com/taskforcesh/bullmq/issues/743)) fixes [#555](https://github.com/taskforcesh/bullmq/issues/555) ([63acae9](https://github.com/taskforcesh/bullmq/commit/63acae98cb083ec978ea17833819d1a21086be33)) +* remove duplicate active entry ([1d2cca3](https://github.com/taskforcesh/bullmq/commit/1d2cca38ee61289adcee4899a91f7dcbc93a7c05)) ([`6553a20`](https://github.com/taskforcesh/bullmq/commit/6553a204dbd9c08e84fc4e173b5363610a789ad5)) -## [1.46.3](https://github.com/taskforcesh/bullmq/compare/v1.46.2...v1.46.3) (2021-09-08) +### Unknown +* Merge pull request #99 from chrisabrams/fix-dup-entry -### Bug Fixes +[fix] Remove duplicate active entry ([`bddaf44`](https://github.com/taskforcesh/bullmq/commit/bddaf4467dea4ff8583cd6e9cbbb83a6e5330893)) -* **add-job:** throw error when missing parent key ([#739](https://github.com/taskforcesh/bullmq/issues/739)) ([d751070](https://github.com/taskforcesh/bullmq/commit/d751070f4ab6553c782341270574ccd253d309b8)) +* Merge branch 'master' into fix-dup-entry ([`f7712d8`](https://github.com/taskforcesh/bullmq/commit/f7712d8d2a614d5db077eaef19c807e3b550a020)) -## [1.46.2](https://github.com/taskforcesh/bullmq/compare/v1.46.1...v1.46.2) (2021-09-07) +## v1.6.5 (2020-01-05) + +### Chore + +* chore(release): 1.6.5 [skip ci]nn## [1.6.5](https://github.com/taskforcesh/bullmq/compare/v1.6.4...v1.6.5) (2020-01-05) ### Bug Fixes -* **queue-events:** duplicate connection ([#733](https://github.com/taskforcesh/bullmq/issues/733)) fixes [#726](https://github.com/taskforcesh/bullmq/issues/726) ([e2531ed](https://github.com/taskforcesh/bullmq/commit/e2531ed0c1dc195f210f8cf996e9ffe04c9e4b7d)) +* get rid of flushdb/flushall in tests ([550c67b](https://github.com/taskforcesh/bullmq/commit/550c67b25de5f6d800e5e317398044cd16b85924)) ([`0097592`](https://github.com/taskforcesh/bullmq/commit/00975929ec559594bafb8fa1c4c7e75f87db912a)) -## [1.46.1](https://github.com/taskforcesh/bullmq/compare/v1.46.0...v1.46.1) (2021-09-06) +### Unknown +* Merge pull request #103 from taskforcesh/fix-102-get-rid-of-flushdb-in-tests -### Bug Fixes +fix: get rid of flushdb/flushall in tests ([`725ad01`](https://github.com/taskforcesh/bullmq/commit/725ad0179f615b9d53d939619210d26d8a5ec4a0)) -* **redis-connection:** improve closing fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([9d8eb03](https://github.com/taskforcesh/bullmq/commit/9d8eb0306ef5e63c9d34ffd5c96fc15491da639d)) +* Merge branch 'master' into fix-102-get-rid-of-flushdb-in-tests ([`d82748a`](https://github.com/taskforcesh/bullmq/commit/d82748a79f65c68b7427863a074b05cbce79a000)) -# [1.46.0](https://github.com/taskforcesh/bullmq/compare/v1.45.0...v1.46.0) (2021-09-02) +## v1.6.4 (2020-01-05) -### Features +### Chore -* **worker:** launch without launching process ([#724](https://github.com/taskforcesh/bullmq/issues/724)) ([af689e4](https://github.com/taskforcesh/bullmq/commit/af689e4e3945b9bc68bfc08c8f0ad57644206c5b)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) +* chore(release): 1.6.4 [skip ci]nn## [1.6.4](https://github.com/taskforcesh/bullmq/compare/v1.6.3...v1.6.4) (2020-01-05) -# [1.45.0](https://github.com/taskforcesh/bullmq/compare/v1.44.3...v1.45.0) (2021-09-02) +### Bug Fixes +* delete logs when cleaning jobs in set ([b11c6c7](https://github.com/taskforcesh/bullmq/commit/b11c6c7c9f4f1c49eac93b98fdc93ac8f861c8b2)) ([`d3b0ab0`](https://github.com/taskforcesh/bullmq/commit/d3b0ab09b5aeb3bc88b42f9e38efab0724dfa08f)) -### Features +### Fix -* **queue-scheduler:** launch without launching process ([#729](https://github.com/taskforcesh/bullmq/issues/729)) ([f1932a7](https://github.com/taskforcesh/bullmq/commit/f1932a789af13da9b705a72d6f633f984a218862)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) +* fix: get rid of flushdb/flushall in tests ([`550c67b`](https://github.com/taskforcesh/bullmq/commit/550c67b25de5f6d800e5e317398044cd16b85924)) -## [1.44.3](https://github.com/taskforcesh/bullmq/compare/v1.44.2...v1.44.3) (2021-09-02) +* fix: remove duplicate active entry ([`1d2cca3`](https://github.com/taskforcesh/bullmq/commit/1d2cca38ee61289adcee4899a91f7dcbc93a7c05)) +* fix: delete logs when cleaning jobs in set ([`b11c6c7`](https://github.com/taskforcesh/bullmq/commit/b11c6c7c9f4f1c49eac93b98fdc93ac8f861c8b2)) -### Bug Fixes +### Unknown -* **queuescheduler:** handle shared connections fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([32a2b2e](https://github.com/taskforcesh/bullmq/commit/32a2b2eccfa3ba1516eacd71e334cae6c787ce4c)) +* Merge pull request #98 from taskforcesh/fix/delete-jobs-when-cleaning-in-set -## [1.44.2](https://github.com/taskforcesh/bullmq/compare/v1.44.1...v1.44.2) (2021-08-29) +Fix/delete jobs when cleaning in set ([`ab8d860`](https://github.com/taskforcesh/bullmq/commit/ab8d860c8f16867a2a46c620da742db43944d0a7)) +* Merge branch 'master' of github.com:taskforcesh/bullmq into fix/fix-tslib-dep ([`ba2db3a`](https://github.com/taskforcesh/bullmq/commit/ba2db3a0817de1cca54384531ba41e2616ff463d)) -### Bug Fixes -* **worker:** use spread operator in processing map keys ([#720](https://github.com/taskforcesh/bullmq/issues/720)) ([32f1e57](https://github.com/taskforcesh/bullmq/commit/32f1e570a9a3369174a228f729f1d1330dcb6965)) +## v1.6.3 (2020-01-01) -## [1.44.1](https://github.com/taskforcesh/bullmq/compare/v1.44.0...v1.44.1) (2021-08-29) +### Chore +* chore(release): 1.6.3 [skip ci]nn## [1.6.3](https://github.com/taskforcesh/bullmq/compare/v1.6.2...v1.6.3) (2020-01-01) ### Bug Fixes -* **retry:** throw error when retry non failed job ([#717](https://github.com/taskforcesh/bullmq/issues/717)) ([bb9b192](https://github.com/taskforcesh/bullmq/commit/bb9b192e9a1a4f3c25374fcb8c0fb2159eb3f779)) +* add tslib dependency fixes [#65](https://github.com/taskforcesh/bullmq/issues/65) ([7ad7995](https://github.com/taskforcesh/bullmq/commit/7ad799544a9c30b30aa96df8864119159c9a1185)) ([`e4c47ae`](https://github.com/taskforcesh/bullmq/commit/e4c47aefb16df401e0a8a84981e2cce233a550ec)) -# [1.44.0](https://github.com/taskforcesh/bullmq/compare/v1.43.0...v1.44.0) (2021-08-27) +* chore: import lodash es6 style ([`17c7378`](https://github.com/taskforcesh/bullmq/commit/17c73782420dc36e7b1108f596d2ac233ba97dd5)) +### Fix -### Features +* fix: add tslib dependency fixes #65 ([`7ad7995`](https://github.com/taskforcesh/bullmq/commit/7ad799544a9c30b30aa96df8864119159c9a1185)) -* **queue-events:** add waiting-children event ([#704](https://github.com/taskforcesh/bullmq/issues/704)) ([18b0b79](https://github.com/taskforcesh/bullmq/commit/18b0b7954313274a61fcc058380bfb9d682c059d)) +### Unknown +* Merge pull request #96 from taskforcesh/fix/fix-tslib-dep -# [1.43.0](https://github.com/taskforcesh/bullmq/compare/v1.42.1...v1.43.0) \(2021-08-25\) +Fix/fix tslib dep ([`f84cd9b`](https://github.com/taskforcesh/bullmq/commit/f84cd9bc875fedad25bd387e382ebb2ab4751e57)) +* Merge branch 'master' into fix/fix-tslib-dep ([`01818b9`](https://github.com/taskforcesh/bullmq/commit/01818b90ebd00cb9695b5d763a21cc1c76c445a3)) -### Features +* Merge pull request #93 from ericcarboni/patch-1 -* **events:** add added event when job is created \([\#699](https://github.com/taskforcesh/bullmq/issues/699)\) \([f533cc5](https://github.com/taskforcesh/bullmq/commit/f533cc55a43cf6ea78a60e85102f15b1c1ff69a0)\) +docs: fix typo ([`d8bf244`](https://github.com/taskforcesh/bullmq/commit/d8bf244fbbb43b1975e89434c546e7bdabf91702)) -## [1.42.1](https://github.com/taskforcesh/bullmq/compare/v1.42.0...v1.42.1) \(2021-08-23\) +* Merge branch 'master' into patch-1 ([`5fcf40b`](https://github.com/taskforcesh/bullmq/commit/5fcf40b2aa91bbee022d727919d3cbdf75d3a118)) -### Bug Fixes +## v1.6.2 (2019-12-16) -* protect emit calls with throw/catch \([79f879b](https://github.com/taskforcesh/bullmq/commit/79f879bf1bca1acea19485def361cc36f1d13b7e)\) +### Chore -# [1.42.0](https://github.com/taskforcesh/bullmq/compare/v1.41.0...v1.42.0) \(2021-08-20\) +* chore(release): 1.6.2 [skip ci]nn## [1.6.2](https://github.com/taskforcesh/bullmq/compare/v1.6.1...v1.6.2) (2019-12-16) +### Bug Fixes -### Features +* change default QueueEvents lastEventId to $ ([3c5b01d](https://github.com/taskforcesh/bullmq/commit/3c5b01d16ee1442f5802a0fe4e7675c14f7a7f1f)) +* ensure QE ready before adding test events ([fd190f4](https://github.com/taskforcesh/bullmq/commit/fd190f4be792b03273481c8aaf73be5ca42663d1)) +* explicitly test the behavior of .on and .once ([ea11087](https://github.com/taskforcesh/bullmq/commit/ea11087b292d9325105707b53f92ac61c334a147)) ([`9b4042d`](https://github.com/taskforcesh/bullmq/commit/9b4042da2977178d007cb4f07686be897172792b)) -* **flows:** add queuesOptions for rate limit \([\#692](https://github.com/taskforcesh/bullmq/issues/692)\) \([6689ec3](https://github.com/taskforcesh/bullmq/commit/6689ec3fadd21904d9935f932c047f540ed8caf0)\), closes [\#621](https://github.com/taskforcesh/bullmq/issues/621) +### Unknown -# [1.41.0](https://github.com/taskforcesh/bullmq/compare/v1.40.4...v1.41.0) \(2021-08-20\) +* Merge pull request #82 from jbr/dollarsign-as-default-queue-event-id +$ as default queue event id #76 ([`7a6b2ee`](https://github.com/taskforcesh/bullmq/commit/7a6b2ee593d76718f45075556e6e7eb53251ca52)) -### Features +* Merge branch 'master' into patch-1 ([`176bd9d`](https://github.com/taskforcesh/bullmq/commit/176bd9d9a3d07fb8c2b74d055fcb36c541602590)) -* **flow:** add bulk \([dc59fe6](https://github.com/taskforcesh/bullmq/commit/dc59fe62e57b6e761fe4d2ab6179a69dc4792399)\) +* Merge branch 'master' into dollarsign-as-default-queue-event-id ([`878fc0d`](https://github.com/taskforcesh/bullmq/commit/878fc0d191a1d0ad16f41dad7d09ebbf26f6b493)) -## [1.40.4](https://github.com/taskforcesh/bullmq/compare/v1.40.3...v1.40.4) \(2021-08-06\) -### Bug Fixes +## v1.6.1 (2019-12-16) -* **rate-limiter:** check groupKey is not undefined \([999b918](https://github.com/taskforcesh/bullmq/commit/999b91868814caf4c5c1ddee40798178b71e0ea8)\) +### Chore -## [1.40.3](https://github.com/taskforcesh/bullmq/compare/v1.40.2...v1.40.3) \(2021-08-06\) +* chore(release): 1.6.1 [skip ci]nn## [1.6.1](https://github.com/taskforcesh/bullmq/compare/v1.6.0...v1.6.1) (2019-12-16) ### Bug Fixes -* **redis-connection:** add error event in waitUntilReady \([ac4101e](https://github.com/taskforcesh/bullmq/commit/ac4101e3e798110c022d6c9f10f3b98f5e86b151)\) +* check of existing redis instance ([dd466b3](https://github.com/taskforcesh/bullmq/commit/dd466b332b03b430108126531d59ff9e66ce9521)) ([`5410d23`](https://github.com/taskforcesh/bullmq/commit/5410d23b2cf7d19bf14c4c089874b9630237fa42)) -## [1.40.2](https://github.com/taskforcesh/bullmq/compare/v1.40.1...v1.40.2) \(2021-08-06\) +* chore(deps): bump npm from 6.12.0 to 6.13.4 -### Bug Fixes +Bumps [npm](https://github.com/npm/cli) from 6.12.0 to 6.13.4. +- [Release notes](https://github.com/npm/cli/releases) +- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md) +- [Commits](https://github.com/npm/cli/compare/v6.12.0...v6.13.4) -* move clientCommandMessageReg to utils \([dd5d555](https://github.com/taskforcesh/bullmq/commit/dd5d5553fe768eb18b17b53c7f75e7066024e382)\) +Signed-off-by: dependabot[bot] <support@github.com> ([`4780be2`](https://github.com/taskforcesh/bullmq/commit/4780be24fe8233f778fbb871bef2cafe9a0c37fe)) -## [1.40.1](https://github.com/taskforcesh/bullmq/compare/v1.40.0...v1.40.1) \(2021-07-24\) +### Documentation -### Bug Fixes +* docs: fix typo ([`307bb69`](https://github.com/taskforcesh/bullmq/commit/307bb695b98ea6094f1e2361d9019d298773c724)) -* connection hangs with failed connection fixes [\#656](https://github.com/taskforcesh/bullmq/issues/656) \([c465611](https://github.com/taskforcesh/bullmq/commit/c465611ed76afd2adfd0e05a8babd6e369f5c310)\) +### Fix -# [1.40.0](https://github.com/taskforcesh/bullmq/compare/v1.39.5...v1.40.0) \(2021-07-22\) +* fix: check of existing redis instance ([`dd466b3`](https://github.com/taskforcesh/bullmq/commit/dd466b332b03b430108126531d59ff9e66ce9521)) -### Features +### Unknown -* **worker:** retry with delay errors in run loop \([409fe7f](https://github.com/taskforcesh/bullmq/commit/409fe7fc09b87b7916a3362a463bb9e0f17ecea8)\) +* Merge branch 'master' into dollarsign-as-default-queue-event-id ([`3930d5a`](https://github.com/taskforcesh/bullmq/commit/3930d5a1c24396463afaefadb09e8292038c093c)) -## [1.39.5](https://github.com/taskforcesh/bullmq/compare/v1.39.4...v1.39.5) \(2021-07-21\) +* Merge pull request #91 from Embraser01/fix-#90 -### Bug Fixes +fix: check of existing redis instance ([`6ebae9e`](https://github.com/taskforcesh/bullmq/commit/6ebae9e111d27f423e7736776735c750ed475c20)) -* **move-to-finished:** remove stalled jobs when finishing \([3867126](https://github.com/taskforcesh/bullmq/commit/38671261ccc00ca7fefa677663e45a40a92df555)\) +* Merge branch 'master' into dollarsign-as-default-queue-event-id ([`2727cb9`](https://github.com/taskforcesh/bullmq/commit/2727cb964d843f2a8533807f527518e8cecf2f70)) -## [1.39.4](https://github.com/taskforcesh/bullmq/compare/v1.39.3...v1.39.4) \(2021-07-21\) +* Merge branch 'master' into patch-1 ([`182087b`](https://github.com/taskforcesh/bullmq/commit/182087ba393caca72df9a0300d4195531079444f)) -### Bug Fixes +* Merge branch 'master' into fix-#90 ([`b3b89b6`](https://github.com/taskforcesh/bullmq/commit/b3b89b6e74a86e1dfb6dd710a5fd8ae5ec77b044)) -* **repeatable:** validate endDate when adding next repeatable job \([1324cbb](https://github.com/taskforcesh/bullmq/commit/1324cbb4effd55e98c29d95a21afca7cd045b46c)\) +* Merge pull request #92 from taskforcesh/dependabot/npm_and_yarn/npm-6.13.4 -## [1.39.3](https://github.com/taskforcesh/bullmq/compare/v1.39.2...v1.39.3) \(2021-07-16\) +chore(deps): bump npm from 6.12.0 to 6.13.4 ([`763ca72`](https://github.com/taskforcesh/bullmq/commit/763ca72f0a9ca866deea99648a5161b1aedd7998)) -### Bug Fixes +* Merge branch 'master' into dollarsign-as-default-queue-event-id ([`e862de3`](https://github.com/taskforcesh/bullmq/commit/e862de317ecf4a04fbb10c0aeeda8afdd6b4903a)) -* connect if redis client has status "wait" \([f711717](https://github.com/taskforcesh/bullmq/commit/f711717f56822aef43c9fd0440e30fad0876ba62)\) -## [1.39.2](https://github.com/taskforcesh/bullmq/compare/v1.39.1...v1.39.2) \(2021-07-15\) +## v1.6.0 (2019-12-12) -### Bug Fixes +### Chore -* **queue:** ensure the Queue constructor doesn't try to set queue options if the client is closed \([b40c6eb](https://github.com/taskforcesh/bullmq/commit/b40c6eb931a71d0ae9f6454eb70d84259a6981b7)\) +* chore(release): 1.6.0 [skip ci]nn# [1.6.0](https://github.com/taskforcesh/bullmq/compare/v1.5.0...v1.6.0) (2019-12-12) -## [1.39.1](https://github.com/taskforcesh/bullmq/compare/v1.39.0...v1.39.1) \(2021-07-15\) +### Features -### Bug Fixes +* add generic type to job data and return value ([87c0531](https://github.com/taskforcesh/bullmq/commit/87c0531efc2716db37f8a0886848cdb786709554)) ([`fd5e524`](https://github.com/taskforcesh/bullmq/commit/fd5e524d7435df6ad0c1c805b9ed56293fc39101)) -* **sandbox:** use updateProgress method name \([27d62c3](https://github.com/taskforcesh/bullmq/commit/27d62c32b2fac091b2700d6077de593c9fda4c22)\) +* chore: fix typo ([`e73355a`](https://github.com/taskforcesh/bullmq/commit/e73355ac80d45bdc635e2d7965b29a102be0c976)) -# [1.39.0](https://github.com/taskforcesh/bullmq/compare/v1.38.1...v1.39.0) \(2021-07-13\) +### Documentation -### Features +* docs: add github link to what-is-bullmq.md (#80) ([`4adf856`](https://github.com/taskforcesh/bullmq/commit/4adf85680028bafe2f7f1ac7a350f2d83a3fb58f)) -* **worker+scheduler:** add a "running" attribute for healthchecking \([aae358e](https://github.com/taskforcesh/bullmq/commit/aae358e067a0b6f20124751cffcdeaebac6eb7fd)\) +### Feature -## [1.38.1](https://github.com/taskforcesh/bullmq/compare/v1.38.0...v1.38.1) \(2021-07-12\) +* feat: add generic type to job data and return value ([`87c0531`](https://github.com/taskforcesh/bullmq/commit/87c0531efc2716db37f8a0886848cdb786709554)) -### Bug Fixes +### Fix -* **reprocess:** do not store job.id in added list \([9c0605e](https://github.com/taskforcesh/bullmq/commit/9c0605e10f0bbdce94153d3f318d56c23bfd3269)\) +* fix: explicitly test the behavior of .on and .once ([`ea11087`](https://github.com/taskforcesh/bullmq/commit/ea11087b292d9325105707b53f92ac61c334a147)) -# [1.38.0](https://github.com/taskforcesh/bullmq/compare/v1.37.1...v1.38.0) \(2021-07-12\) +* fix: ensure QE ready before adding test events ([`fd190f4`](https://github.com/taskforcesh/bullmq/commit/fd190f4be792b03273481c8aaf73be5ca42663d1)) -### Features +* fix: change default QueueEvents lastEventId to $ ([`3c5b01d`](https://github.com/taskforcesh/bullmq/commit/3c5b01d16ee1442f5802a0fe4e7675c14f7a7f1f)) -* **queue:** add missing events typings \([b42e78c](https://github.com/taskforcesh/bullmq/commit/b42e78c36cb6a6579a4c7cce1d7e969b230ff5b6)\) +### Test -## [1.37.1](https://github.com/taskforcesh/bullmq/compare/v1.37.0...v1.37.1) \(2021-07-02\) +* test: fix broken test ([`5a4acd7`](https://github.com/taskforcesh/bullmq/commit/5a4acd72442dc4d58a6da1bb2bc9fa673a62816a)) -### Bug Fixes +### Unknown -* **stalled-jobs:** move stalled jobs to wait in batches \([a23fcb8](https://github.com/taskforcesh/bullmq/commit/a23fcb82d4ca20cbc4b8cd8b544b2d2eaddd86c3)\), closes [\#422](https://github.com/taskforcesh/bullmq/issues/422) +* Merge pull request #88 from taskforcesh/feat/add-generic-type-to-job-data -# [1.37.0](https://github.com/taskforcesh/bullmq/compare/v1.36.1...v1.37.0) \(2021-06-30\) +feat: add generic type to job data and return value ([`3f9eaec`](https://github.com/taskforcesh/bullmq/commit/3f9eaeceef002e13bf9d995256282c0bb0863cd1)) -### Features +* Merge branch 'master' into feat/add-generic-type-to-job-data ([`d31ab9b`](https://github.com/taskforcesh/bullmq/commit/d31ab9b9204c8f20447c4392518481653b017149)) -* **job:** add changeDelay method for delayed jobs \([f0a9f9c](https://github.com/taskforcesh/bullmq/commit/f0a9f9c6479062413abc0ac9a6f744329571a618)\) +* Merge pull request #78 from ericcarboni/patch-1 -## [1.36.1](https://github.com/taskforcesh/bullmq/compare/v1.36.0...v1.36.1) \(2021-06-22\) +Docs: update quick start page ([`36604f5`](https://github.com/taskforcesh/bullmq/commit/36604f5c53d5984e48170ebb937dd9d2fc7c1875)) -### Bug Fixes +* Update README.md ([`762f7e6`](https://github.com/taskforcesh/bullmq/commit/762f7e60f0577560b6e1ce1545b88e01d96d62b3)) -* **worker:** change active event typing \([220b4f6](https://github.com/taskforcesh/bullmq/commit/220b4f619b30a8f04979e9abd0139e46d89b424d)\) -# [1.36.0](https://github.com/taskforcesh/bullmq/compare/v1.35.0...v1.36.0) \(2021-06-20\) +## v1.5.0 (2019-11-22) -### Bug Fixes +### Chore -* **queue-events:** fix drained typing \([9cf711d](https://github.com/taskforcesh/bullmq/commit/9cf711d4d4e7d8214dfd93a243c35d0bf135cdaf)\) +* chore(release): 1.5.0 [skip ci]nn# [1.5.0](https://github.com/taskforcesh/bullmq/compare/v1.4.3...v1.5.0) (2019-11-22) ### Features -* **worker:** add active event typing \([5508cdf](https://github.com/taskforcesh/bullmq/commit/5508cdf7cf372ae2f4af0ef576016eb901580671)\) -* **worker:** add progress event typing \([119cb7c](https://github.com/taskforcesh/bullmq/commit/119cb7cd7a91c0f1866f5957faf2850afadbe709)\) +* remove delay dependency ([97e1a30](https://github.com/taskforcesh/bullmq/commit/97e1a3015d853e615ddd623af07f12a194ccab2c)) +* remove dependence on Bluebird.delay [#67](https://github.com/taskforcesh/bullmq/issues/67) ([bedbaf2](https://github.com/taskforcesh/bullmq/commit/bedbaf25af6479e387cd7548e246dca7c72fc140)) ([`e8e37cf`](https://github.com/taskforcesh/bullmq/commit/e8e37cf2da26d1f67f21e3bd94da65025e7bde8f)) -# [1.35.0](https://github.com/taskforcesh/bullmq/compare/v1.34.2...v1.35.0) \(2021-06-19\) +### Feature -### Features +* feat: remove delay dependency -* **worker:** add drained event typing \([ed5f315](https://github.com/taskforcesh/bullmq/commit/ed5f3155415693d2a6dbfb779397d53d74b704e2)\) +this commit uses delay from utils in typescript and adds a simple +test/fixtures/delay.js for use in javascript fixtures. this change also +allowed the ts compiler to identify a promise that was not `await`ed in +src/test/test_worker.ts ([`97e1a30`](https://github.com/taskforcesh/bullmq/commit/97e1a3015d853e615ddd623af07f12a194ccab2c)) -## [1.34.2](https://github.com/taskforcesh/bullmq/compare/v1.34.1...v1.34.2) \(2021-06-18\) +* feat: remove dependence on Bluebird.delay #67 -### Bug Fixes +This approach uses a simple setTimeout-based delay in the only production +usage (src/classes/queue-events.ts), defined in src/util.ts, and since +there was already a devDependency on a library called +[delay](https://www.npmjs.com/package/delay), this commit uses that in +test contexts. It should be easy to replace that dep with a +`(ms:number) => new Promise(r => setTimeout(r, ms))` as well. -* **worker:** await for processing functions \([0566804](https://github.com/taskforcesh/bullmq/commit/056680470283f134b447a8ba39afa29e1e113585)\) +Closes #67 ([`bedbaf2`](https://github.com/taskforcesh/bullmq/commit/bedbaf25af6479e387cd7548e246dca7c72fc140)) -## [1.34.1](https://github.com/taskforcesh/bullmq/compare/v1.34.0...v1.34.1) \(2021-06-18\) +### Unknown -### Bug Fixes +* Merge pull request #75 from jbr/feat-67-remove-bluebird-dependency -* **redis-connection:** remove error event listener from client \([2d70fe7](https://github.com/taskforcesh/bullmq/commit/2d70fe7cc7d43673674ec2ba0204c10661b34e95)\) +feat: remove dependence on Bluebird and delay #67 ([`8d38bfa`](https://github.com/taskforcesh/bullmq/commit/8d38bfa77d1c1249ec9f95a754327491ef001e28)) -# [1.34.0](https://github.com/taskforcesh/bullmq/compare/v1.33.1...v1.34.0) \(2021-06-11\) -### Features +## v1.4.3 (2019-11-21) -* **job:** expose queueName \([8683bd4](https://github.com/taskforcesh/bullmq/commit/8683bd470cc7304f087d646fd40c5bc3acc1263c)\) +### Chore -## [1.33.1](https://github.com/taskforcesh/bullmq/compare/v1.33.0...v1.33.1) \(2021-06-10\) +* chore(release): 1.4.3 [skip ci]nn## [1.4.3](https://github.com/taskforcesh/bullmq/compare/v1.4.2...v1.4.3) (2019-11-21) ### Bug Fixes -* **job:** destructure default opts for pagination \([73363a5](https://github.com/taskforcesh/bullmq/commit/73363a551f56608f8936ad1f730d0a9c778aafd2)\) +* check in moveToFinished to use default val for opts.maxLenEvents ([d1118aa](https://github.com/taskforcesh/bullmq/commit/d1118aab77f755b4a65e3dd8ea2e195baf3d2602)) ([`136f087`](https://github.com/taskforcesh/bullmq/commit/136f0879bb28d4b6c2e860f11fc6d65446ac6900)) -# [1.33.0](https://github.com/taskforcesh/bullmq/compare/v1.32.0...v1.33.0) \(2021-06-10\) +### Unknown -### Features +* Merge pull request #73 from taskforcesh/fix-72-default-maxLenEvents-in-move-to-finished-lua -* **job:** add getDependenciesCount method \([ae39a4c](https://github.com/taskforcesh/bullmq/commit/ae39a4c77a958242cb445dbb32ae27b15a953653)\) +fix: check in moveToFinished to use default val for opts.maxLenEvents ([`f79e5ad`](https://github.com/taskforcesh/bullmq/commit/f79e5ad83398bd858dd082f7b12639a9f38e7f49)) -# [1.32.0](https://github.com/taskforcesh/bullmq/compare/v1.31.1...v1.32.0) \(2021-06-07\) +* Merge branch 'master' into fix-72-default-maxLenEvents-in-move-to-finished-lua ([`5cbc742`](https://github.com/taskforcesh/bullmq/commit/5cbc742f9ee8420a4bf06d22080ba58572752a13)) -### Features -* **flow-producer:** add getFlow method \([ce93d04](https://github.com/taskforcesh/bullmq/commit/ce93d04c962686aff34f670f2decadadbf1cf4ca)\) +## v1.4.2 (2019-11-21) -## [1.31.1](https://github.com/taskforcesh/bullmq/compare/v1.31.0...v1.31.1) \(2021-06-07\) +### Chore -### Bug Fixes +* chore(release): 1.4.2 [skip ci]nn## [1.4.2](https://github.com/taskforcesh/bullmq/compare/v1.4.1...v1.4.2) (2019-11-21) -* **worker:** remove processed key when removeOnComplete \([4ec1b73](https://github.com/taskforcesh/bullmq/commit/4ec1b739d6aeeb2fc21887b58f5978027ddcdb50)\) +### Bug Fixes -# [1.31.0](https://github.com/taskforcesh/bullmq/compare/v1.30.2...v1.31.0) \(2021-06-04\) +* avoid Job<->Queue circular json error ([5752727](https://github.com/taskforcesh/bullmq/commit/5752727a6294e1b8d35f6a49e4953375510e10e6)) +* avoid the .toJSON serializer interface [#70](https://github.com/taskforcesh/bullmq/issues/70) ([5941b82](https://github.com/taskforcesh/bullmq/commit/5941b82b646e46d53970197a404e5ea54f09d008)) ([`371ef07`](https://github.com/taskforcesh/bullmq/commit/371ef07fbb61c5ad490061c9571dbd8df9f6ab47)) -### Features +### Fix -* **job:** extend getDependencies to support pagination \([9b61bbb](https://github.com/taskforcesh/bullmq/commit/9b61bbb9160358f629cd458fa8dc4c9b6ebcd9f5)\) +* fix: avoid Job<->Queue circular json error ([`5752727`](https://github.com/taskforcesh/bullmq/commit/5752727a6294e1b8d35f6a49e4953375510e10e6)) -## [1.30.2](https://github.com/taskforcesh/bullmq/compare/v1.30.1...v1.30.2) \(2021-06-03\) +* fix: avoid the .toJSON serializer interface #70 -### Bug Fixes +renames Job#toJSON to Job#asJSON and adds a test ([`5941b82`](https://github.com/taskforcesh/bullmq/commit/5941b82b646e46d53970197a404e5ea54f09d008)) -* **job:** parse results in getDependencies for processed jobs \([6fdc701](https://github.com/taskforcesh/bullmq/commit/6fdc7011ba910e5ca9c6d87926cc523ef38ef3ca)\) +* fix: check in moveToFinished to use default val for opts.maxLenEvents ([`d1118aa`](https://github.com/taskforcesh/bullmq/commit/d1118aab77f755b4a65e3dd8ea2e195baf3d2602)) -## [1.30.1](https://github.com/taskforcesh/bullmq/compare/v1.30.0...v1.30.1) \(2021-06-02\) +### Unknown -### Bug Fixes +* Merge pull request #74 from jbr/fix-70-job-tojson -* **move-to-waiting-children:** make opts optional \([33bd76a](https://github.com/taskforcesh/bullmq/commit/33bd76a2cac9be450b5d76c6cfe16751c7569ceb)\) +fix: avoid changing Job property types through JSON serialization/deserialization #70 ([`344a887`](https://github.com/taskforcesh/bullmq/commit/344a887e924048d7a2ab2036b6adfcdd99a6f466)) -# [1.30.0](https://github.com/taskforcesh/bullmq/compare/v1.29.1...v1.30.0) \(2021-06-02\) -### Features +## v1.4.1 (2019-11-08) -* add some event typing \([934c004](https://github.com/taskforcesh/bullmq/commit/934c0040b0802bb67f44a979584405d795a8ab5e)\) +### Chore -## [1.29.1](https://github.com/taskforcesh/bullmq/compare/v1.29.0...v1.29.1) \(2021-05-31\) +* chore(release): 1.4.1 [skip ci]nn## [1.4.1](https://github.com/taskforcesh/bullmq/compare/v1.4.0...v1.4.1) (2019-11-08) ### Bug Fixes -* **move-stalled-jobs-to-wait:** send failedReason to queueEvents \([7c510b5](https://github.com/taskforcesh/bullmq/commit/7c510b542558bd4b1330371b73331f37b97a818d)\) +* default job settings [#58](https://github.com/taskforcesh/bullmq/issues/58) ([667fc6e](https://github.com/taskforcesh/bullmq/commit/667fc6e00ae4d6da639d285a104fb67e01c95bbd)) ([`ad1fc3c`](https://github.com/taskforcesh/bullmq/commit/ad1fc3c19d5c02382989a7e1cb72b807b743465c)) -# [1.29.0](https://github.com/taskforcesh/bullmq/compare/v1.28.2...v1.29.0) \(2021-05-31\) +### Unknown -### Features +* Merge pull request #58 from HNicolas/patch-1 -* add move to waiting children for manual processing \([\#477](https://github.com/taskforcesh/bullmq/issues/477)\) \([f312f29](https://github.com/taskforcesh/bullmq/commit/f312f293b8cac79af9c14848ffd1b11b65a806c3)\) +Fix #57 ([`f67d306`](https://github.com/taskforcesh/bullmq/commit/f67d3063f2296325e2d753600dbf633960034195)) -## [1.28.2](https://github.com/taskforcesh/bullmq/compare/v1.28.1...v1.28.2) \(2021-05-31\) +* Merge branch 'master' into patch-1 ([`c41b4f3`](https://github.com/taskforcesh/bullmq/commit/c41b4f329dd21874c6a2bf7b2a649c956fd0a3da)) -### Bug Fixes +* GitBook: [master] 4 pages modified ([`fde089d`](https://github.com/taskforcesh/bullmq/commit/fde089d85397ad48a382e3c1eb0fac835a9f49ad)) -* **obliterate:** remove job logs \([ea91895](https://github.com/taskforcesh/bullmq/commit/ea918950d7696241047a23773cc13cd675209c4b)\) +* Merge branch 'master' into patch-1 ([`cabed12`](https://github.com/taskforcesh/bullmq/commit/cabed126f7d699e1335be78007221987000146cd)) -## [1.28.1](https://github.com/taskforcesh/bullmq/compare/v1.28.0...v1.28.1) \(2021-05-31\) -### Bug Fixes +## v1.4.0 (2019-11-06) -* **get-workers:** use strict equality on name fixes [\#564](https://github.com/taskforcesh/bullmq/issues/564) \([4becfa6](https://github.com/taskforcesh/bullmq/commit/4becfa66e09dacf9830804898c45cb3317dcf438)\) +### Chore -# [1.28.0](https://github.com/taskforcesh/bullmq/compare/v1.27.0...v1.28.0) \(2021-05-24\) +* chore(release): 1.4.0 [skip ci]nn# [1.4.0](https://github.com/taskforcesh/bullmq/compare/v1.3.0...v1.4.0) (2019-11-06) ### Features -* **flow-producer:** expose client connection \([17d4263](https://github.com/taskforcesh/bullmq/commit/17d4263abfa57797535cd8773c4cc316ff5149d2)\) +* job.progress() return last progress for sandboxed processors ([5c4b146](https://github.com/taskforcesh/bullmq/commit/5c4b146ca8e42c8a29f9db87326a17deac30e10e)) ([`5e9e0b3`](https://github.com/taskforcesh/bullmq/commit/5e9e0b33cd548952a6968151db94325f299ae3c4)) -# [1.27.0](https://github.com/taskforcesh/bullmq/compare/v1.26.5...v1.27.0) \(2021-05-24\) +### Unknown -### Features +* Merge branch 'master' into patch-1 ([`f964575`](https://github.com/taskforcesh/bullmq/commit/f964575510ed246bee14d2edb5c1aa61423d0e10)) -* **repeat:** add immediately opt for repeat \([d095573](https://github.com/taskforcesh/bullmq/commit/d095573f8e7ce5911f777df48368382eceb99d6a)\) +* Merge pull request #60 from taskforcesh/feat-job-progress-getter-for-sanboxed-processors -## [1.26.5](https://github.com/taskforcesh/bullmq/compare/v1.26.4...v1.26.5) \(2021-05-21\) +job.progress() return last progress for sandboxed processors ([`11bfae6`](https://github.com/taskforcesh/bullmq/commit/11bfae63ac64bfa24df1e51ff5343447863e0095)) -### Bug Fixes +* Merge branch 'master' into feat-job-progress-getter-for-sanboxed-processors ([`302bf9c`](https://github.com/taskforcesh/bullmq/commit/302bf9cb30aafb8f3e3d8abe9bbd2904661c3340)) -* **movetofinished:** use parent queue for events \([1b17b62](https://github.com/taskforcesh/bullmq/commit/1b17b62a794728a318f1079e73d07e33fe65c9c7)\) -## [1.26.4](https://github.com/taskforcesh/bullmq/compare/v1.26.3...v1.26.4) \(2021-05-20\) +## v1.3.0 (2019-11-05) -### Bug Fixes +### Chore -* **removejob:** delete processed hash \([a2a5058](https://github.com/taskforcesh/bullmq/commit/a2a5058f18ab77ed4d0114d48f47e6144d632cbf)\) +* chore(release): 1.3.0 [skip ci]nn# [1.3.0](https://github.com/taskforcesh/bullmq/compare/v1.2.0...v1.3.0) (2019-11-05) -## [1.26.3](https://github.com/taskforcesh/bullmq/compare/v1.26.2...v1.26.3) \(2021-05-19\) +### Features -### Bug Fixes +* test worker extends job lock while job is active ([577efdf](https://github.com/taskforcesh/bullmq/commit/577efdfb1d2d3140be78dee3bd658b5ce969b16d)) ([`c6b1e65`](https://github.com/taskforcesh/bullmq/commit/c6b1e65b424f0feb700468564276786895acec70)) -* ensure connection reconnects when pausing fixes [\#160](https://github.com/taskforcesh/bullmq/issues/160) \([f38fee8](https://github.com/taskforcesh/bullmq/commit/f38fee84def75dd8a38cbb8bfb5aa662485ddf91)\) +### Feature -## [1.26.2](https://github.com/taskforcesh/bullmq/compare/v1.26.1...v1.26.2) \(2021-05-18\) +* feat: test worker extends job lock while job is active ([`577efdf`](https://github.com/taskforcesh/bullmq/commit/577efdfb1d2d3140be78dee3bd658b5ce969b16d)) -### Bug Fixes +* feat: job.progress() return last progress for sandboxed processors -* **getjoblogs:** no reversed pagination \([fb0c3a5](https://github.com/taskforcesh/bullmq/commit/fb0c3a50f0d37851a8f35cb4c478259a63d93461)\) +ported from Bull3 (https://github.com/OptimalBits/bull/pull/1536) ([`5c4b146`](https://github.com/taskforcesh/bullmq/commit/5c4b146ca8e42c8a29f9db87326a17deac30e10e)) -## [1.26.1](https://github.com/taskforcesh/bullmq/compare/v1.26.0...v1.26.1) \(2021-05-17\) +### Fix -### Bug Fixes +* fix: default job settings #58 -* **flow-producer:** use custom jobId as parentId for children fixes [\#552](https://github.com/taskforcesh/bullmq/issues/552) \([645b576](https://github.com/taskforcesh/bullmq/commit/645b576c1aabd8426ab77a68c199a594867cd729)\) +I updated job options merging in order to override default job options when options are provided at job level. +Maybe a deep merge between the two objects could be even better. ([`667fc6e`](https://github.com/taskforcesh/bullmq/commit/667fc6e00ae4d6da639d285a104fb67e01c95bbd)) -# [1.26.0](https://github.com/taskforcesh/bullmq/compare/v1.25.1...v1.26.0) \(2021-05-16\) +### Unknown -### Features +* Merge branch 'master' into feat-job-progress-getter-for-sanboxed-processors ([`5211dd7`](https://github.com/taskforcesh/bullmq/commit/5211dd7258396266bc41bd6ecb530e4c3042f5c8)) -* **custombackoff:** provide job as third parameter \([ddaf8dc](https://github.com/taskforcesh/bullmq/commit/ddaf8dc2f95ca336cb117a540edd4640d5d579e4)\) +* Merge pull request #61 from taskforcesh/feat-test-worker-extends-job-lock -## [1.25.2](https://github.com/taskforcesh/bullmq/compare/v1.25.1...v1.25.2) \(2021-05-16\) +Test worker extends job lock while job is active ([`0cf504f`](https://github.com/taskforcesh/bullmq/commit/0cf504f5fca2240e5e27eb95475d2f221bf3bfc9)) -### Bug Fixes -* **flow-producer:** process parent with children as empty array fixes [\#547](https://github.com/taskforcesh/bullmq/issues/547) \([48168f0](https://github.com/taskforcesh/bullmq/commit/48168f07cbaed7ed522c68d127a0c7d5e4cb380e)\) +## v1.2.0 (2019-11-03) -## [1.25.1](https://github.com/taskforcesh/bullmq/compare/v1.25.0...v1.25.1) \(2021-05-13\) +### Chore -### Bug Fixes +* chore(release): 1.2.0 [skip ci]nn# [1.2.0](https://github.com/taskforcesh/bullmq/compare/v1.1.0...v1.2.0) (2019-11-03) -* **addbulk:** should not consider repeat option \([c85357e](https://github.com/taskforcesh/bullmq/commit/c85357e415b9ea66f845f751a4943b5c48c2bb18)\) +### Bug Fixes -# [1.25.0](https://github.com/taskforcesh/bullmq/compare/v1.24.5...v1.25.0) \(2021-05-11\) +* only run coveralls after success ([bd51893](https://github.com/taskforcesh/bullmq/commit/bd51893c35793657b65246a2f5a06469488c8a06)) ### Features -* **job:** add sizeLimit option when creating a job \([f10aeeb](https://github.com/taskforcesh/bullmq/commit/f10aeeb62520d20b31d35440524d147ac4adcc9c)\) +* added code coverage and coveralls ([298cfc4](https://github.com/taskforcesh/bullmq/commit/298cfc48e35e648e6a22ac0d1633ac16c7b6e3de)) +* added missing deps for coverage ([6f3ab8d](https://github.com/taskforcesh/bullmq/commit/6f3ab8d78ba8503a76447f0db5abf0c1c4f8e185)) +* ignore commitlint file in coverage ([f874441](https://github.com/taskforcesh/bullmq/commit/f8744411a1b20b95e568502be15ec50cf8520926)) +* only upload coverage once after all tests pass ([a7f73ec](https://github.com/taskforcesh/bullmq/commit/a7f73ecc2f51544f1d810de046ba073cb7aa5663)) ([`89bb554`](https://github.com/taskforcesh/bullmq/commit/89bb554b3e8dcc7f8e2376f1a4557ef3d8e0c96f)) -## [1.24.5](https://github.com/taskforcesh/bullmq/compare/v1.24.4...v1.24.5) \(2021-05-08\) +### Feature -### Bug Fixes +* feat: only upload coverage once after all tests pass ([`a7f73ec`](https://github.com/taskforcesh/bullmq/commit/a7f73ecc2f51544f1d810de046ba073cb7aa5663)) -* **deps:** upgrading lodash to 4.17.21 \([6e90c3f](https://github.com/taskforcesh/bullmq/commit/6e90c3f0a3d2735875ebf44457b342629aa14572)\) +* feat: ignore commitlint file in coverage ([`f874441`](https://github.com/taskforcesh/bullmq/commit/f8744411a1b20b95e568502be15ec50cf8520926)) -## [1.24.4](https://github.com/taskforcesh/bullmq/compare/v1.24.3...v1.24.4) \(2021-05-07\) +* feat: added missing deps for coverage ([`6f3ab8d`](https://github.com/taskforcesh/bullmq/commit/6f3ab8d78ba8503a76447f0db5abf0c1c4f8e185)) -### Bug Fixes +* feat: added code coverage and coveralls ([`298cfc4`](https://github.com/taskforcesh/bullmq/commit/298cfc48e35e648e6a22ac0d1633ac16c7b6e3de)) -* **cluster:** add redis cluster support \([5a7dd14](https://github.com/taskforcesh/bullmq/commit/5a7dd145bd3ae11850cac6d1b4fb9b01af0e6766)\) -* **redisclient:** not reference types from import \([022fc04](https://github.com/taskforcesh/bullmq/commit/022fc042a17c1754af7d74acabb7dd5c397576ab)\) +### Fix -## [1.24.3](https://github.com/taskforcesh/bullmq/compare/v1.24.2...v1.24.3) \(2021-05-05\) +* fix: only run coveralls after success ([`bd51893`](https://github.com/taskforcesh/bullmq/commit/bd51893c35793657b65246a2f5a06469488c8a06)) -### Bug Fixes +### Unknown -* **sandbox:** properly redirect stdout \([\#525](https://github.com/taskforcesh/bullmq/issues/525)\) \([c8642a0](https://github.com/taskforcesh/bullmq/commit/c8642a0724dc3d2f77abc4b5d6d24efa67c1e592)\) +* Merge pull request #55 from MichielDeMey/feature/coveralls -## [1.24.2](https://github.com/taskforcesh/bullmq/compare/v1.24.1...v1.24.2) \(2021-05-05\) +Feat/coveralls Adds code coverage with Coveralls integration ([`4deb7d4`](https://github.com/taskforcesh/bullmq/commit/4deb7d43db5ee459cb8536e5202d2e4bb3811af3)) -### Bug Fixes -* **sandbox:** handle broken processor files \([2326983](https://github.com/taskforcesh/bullmq/commit/23269839af0be2f7cf2a4f6062563d30904bc259)\) +## v1.1.0 (2019-11-01) -## [1.24.1](https://github.com/taskforcesh/bullmq/compare/v1.24.0...v1.24.1) \(2021-05-05\) +### Chore -### Bug Fixes +* chore(release): 1.1.0 [skip ci]nn# [1.1.0](https://github.com/taskforcesh/bullmq/compare/v1.0.1...v1.1.0) (2019-11-01) -* **queueevents:** add active type fixes [\#519](https://github.com/taskforcesh/bullmq/issues/519) \([10af883](https://github.com/taskforcesh/bullmq/commit/10af883db849cf9392b26724903f88752d9be92c)\) +### Bug Fixes -# [1.24.0](https://github.com/taskforcesh/bullmq/compare/v1.23.1...v1.24.0) \(2021-05-03\) +* failing build ([bb21d53](https://github.com/taskforcesh/bullmq/commit/bb21d53b199885dcc97e7fe20f60caf65e55e782)) +* fix failing tests ([824eb6b](https://github.com/taskforcesh/bullmq/commit/824eb6bfb2b750b823d057c894797ccb336245d8)) ### Features -* add option for non-blocking getNextJob \([13ce2cf](https://github.com/taskforcesh/bullmq/commit/13ce2cfd4ccd64f45567df31de11af95b0fe67d9)\) +* initial version of job locking mechanism ([1d4fa38](https://github.com/taskforcesh/bullmq/commit/1d4fa383e39f4f5dcb69a71a1359dd5dea75544c)) ([`1f55fa2`](https://github.com/taskforcesh/bullmq/commit/1f55fa26be8834ac970a219485e3c5c681390b75)) -## [1.23.1](https://github.com/taskforcesh/bullmq/compare/v1.23.0...v1.23.1) \(2021-05-03\) +### Fix -### Bug Fixes +* fix: failing build ([`bb21d53`](https://github.com/taskforcesh/bullmq/commit/bb21d53b199885dcc97e7fe20f60caf65e55e782)) -* add return type for job.waitUntilFinished\(\) \([59ede97](https://github.com/taskforcesh/bullmq/commit/59ede976061a738503f70d9eb0c92a4b1d6ae4a3)\) +* fix: fix failing tests ([`824eb6b`](https://github.com/taskforcesh/bullmq/commit/824eb6bfb2b750b823d057c894797ccb336245d8)) -# [1.23.0](https://github.com/taskforcesh/bullmq/compare/v1.22.2...v1.23.0) \(2021-04-30\) +### Unknown -### Features +* Merge pull request #52 from taskforcesh/feat-47-job-locking -* **job:** pass parent opts to addBulk \([7f21615](https://github.com/taskforcesh/bullmq/commit/7f216153293e45c4f33f2592561c925ca4464d44)\) +Job locking mechanism ([`dd502b2`](https://github.com/taskforcesh/bullmq/commit/dd502b21952cba180f419a542c319414372177b1)) -## [1.22.2](https://github.com/taskforcesh/bullmq/compare/v1.22.1...v1.22.2) \(2021-04-29\) +* Merge branch 'feat-47-job-locking' of https://github.com/taskforcesh/bullmq into feat-47-job-locking ([`5e0d4f7`](https://github.com/taskforcesh/bullmq/commit/5e0d4f77cef174fcbac8ecf1423d4fbf3938ad2a)) -### Bug Fixes +* Merge branch 'master' into feat-47-job-locking ([`8464697`](https://github.com/taskforcesh/bullmq/commit/8464697d1d1ccfd40d851ebe12226a8eb75c28b8)) -* add missing Redis Cluster types fixes [\#406](https://github.com/taskforcesh/bullmq/issues/406) \([07743ff](https://github.com/taskforcesh/bullmq/commit/07743ff310ad716802afdd5bdc6844eb5296318e)\) +* Merge pull request #54 from root-io/patch-1 -## [1.22.1](https://github.com/taskforcesh/bullmq/compare/v1.22.0...v1.22.1) \(2021-04-28\) +doc: use correct connection property ([`f3336de`](https://github.com/taskforcesh/bullmq/commit/f3336de43567e859905795517e5bf1aa4936e60d)) -### Bug Fixes +* Merge branch 'master' into patch-1 ([`d311fc4`](https://github.com/taskforcesh/bullmq/commit/d311fc420a85718cf77fe4103d923a34efadbc63)) -* **addjob:** fix redis cluster CROSSSLOT \([a5fd1d7](https://github.com/taskforcesh/bullmq/commit/a5fd1d7a0713585d11bd862bfe2d426d5242bd3c)\) +* Merge branch 'master' into feat-47-job-locking ([`d4509b9`](https://github.com/taskforcesh/bullmq/commit/d4509b95498be24d32f815e08b2aabc4cea14ed2)) -# [1.22.0](https://github.com/taskforcesh/bullmq/compare/v1.21.0...v1.22.0) \(2021-04-28\) +* GitBook: [master] one page modified ([`93bfbd0`](https://github.com/taskforcesh/bullmq/commit/93bfbd0395f2c69193476b93ff5ad26f1933a7ca)) -### Features +* doc: use correct connection property ([`3a1ef5e`](https://github.com/taskforcesh/bullmq/commit/3a1ef5e2aafe169b212a13d63cc2f7687ace89d9)) -* **jobcreate:** allow passing parent in job.create \([ede3626](https://github.com/taskforcesh/bullmq/commit/ede3626b65fb5d3f4cebc55c813e9fa4b482b887)\) +* Merge branch 'master' into feat-47-job-locking ([`4bab512`](https://github.com/taskforcesh/bullmq/commit/4bab512fda82fccdbda5d7896560e3b163e154c5)) -# [1.21.0](https://github.com/taskforcesh/bullmq/compare/v1.20.6...v1.21.0) \(2021-04-26\) -### Features +## v1.0.1 (2019-10-27) -* add typing for addNextRepeatableJob \([a3be937](https://github.com/taskforcesh/bullmq/commit/a3be9379e29ae3e01264e2269e8b03aa614fd42c)\) +### Chore -## [1.20.6](https://github.com/taskforcesh/bullmq/compare/v1.20.5...v1.20.6) \(2021-04-25\) +* chore(release): 1.0.1 [skip ci]nn## [1.0.1](https://github.com/taskforcesh/bullmq/compare/v1.0.0...v1.0.1) (2019-10-27) ### Bug Fixes -* **movetocompleted:** should not complete before children \([812ff66](https://github.com/taskforcesh/bullmq/commit/812ff664b3e162dd87831ca04ebfdb783cc7ae5b)\) +* save job stacktrace on failure ([85dfe52](https://github.com/taskforcesh/bullmq/commit/85dfe525079a5f89c1901dbf35c7ddc6663afc24)) +* simplify logic for stackTraceLimit ([296bd89](https://github.com/taskforcesh/bullmq/commit/296bd89514d430a499afee934dcae2aec41cffa2)) ([`72f3669`](https://github.com/taskforcesh/bullmq/commit/72f36694139163009bc237a9ee25ea0070946dfb)) -## [1.20.5](https://github.com/taskforcesh/bullmq/compare/v1.20.4...v1.20.5) \(2021-04-23\) +* chore: enabled npm publish ([`cd3dc46`](https://github.com/taskforcesh/bullmq/commit/cd3dc46b6cfc5a403a5bbe36519f471fb4128fe5)) -### Bug Fixes +### Feature -* **obliterate:** correctly remove many jobs \([b5ae4ce](https://github.com/taskforcesh/bullmq/commit/b5ae4ce92aeaf000408ffbbcd22d829cee20f2f8)\) +* feat: initial version of job locking mechanism ([`1d4fa38`](https://github.com/taskforcesh/bullmq/commit/1d4fa383e39f4f5dcb69a71a1359dd5dea75544c)) -## [1.20.4](https://github.com/taskforcesh/bullmq/compare/v1.20.3...v1.20.4) \(2021-04-23\) +### Fix -### Bug Fixes +* fix: simplify logic for stackTraceLimit ([`296bd89`](https://github.com/taskforcesh/bullmq/commit/296bd89514d430a499afee934dcae2aec41cffa2)) -* remove internal deps on barrel fixes [\#469](https://github.com/taskforcesh/bullmq/issues/469) \([\#495](https://github.com/taskforcesh/bullmq/issues/495)\) \([60dbeed](https://github.com/taskforcesh/bullmq/commit/60dbeed7ff1d9b6cb0e35590713fee8a7be09477)\) +* fix: save job stacktrace on failure ([`85dfe52`](https://github.com/taskforcesh/bullmq/commit/85dfe525079a5f89c1901dbf35c7ddc6663afc24)) -## [1.20.3](https://github.com/taskforcesh/bullmq/compare/v1.20.2...v1.20.3) \(2021-04-23\) +### Unknown -### Bug Fixes +* Merge pull request #51 from taskforcesh/fix-31-stacktrace-missing-after-job-failure -* **flows:** correct typings fixes [\#492](https://github.com/taskforcesh/bullmq/issues/492) \([a77f80b](https://github.com/taskforcesh/bullmq/commit/a77f80bc07e7627f512323f0dcc9141fe408809e)\) +Save job stacktrace on failure ([`855560a`](https://github.com/taskforcesh/bullmq/commit/855560a675dd40cc9d51bcc2bcad70bc3c44373d)) -## [1.20.2](https://github.com/taskforcesh/bullmq/compare/v1.20.1...v1.20.2) \(2021-04-22\) +* Merge branch 'master' into fix-31-stacktrace-missing-after-job-failure ([`42f671a`](https://github.com/taskforcesh/bullmq/commit/42f671af17a4680b1168100ec60fb9921b624acf)) -### Bug Fixes +* Merge branch 'master' into feat-47-job-locking ([`e0444e3`](https://github.com/taskforcesh/bullmq/commit/e0444e396fb73fa911cfd02d5689b4dad41c807e)) -* **movetodelayed:** check if job is in active state \([4e63f70](https://github.com/taskforcesh/bullmq/commit/4e63f70aac367d4dd695bbe07c72a08a82a65d97)\) +* Merge pull request #39 from taskforcesh/fix-cleanup-dependencies -## [1.20.1](https://github.com/taskforcesh/bullmq/compare/v1.20.0...v1.20.1) \(2021-04-22\) +Replace deprecated node-uuid with uuid, move lodash to runtime dependencies ([`3a3a21b`](https://github.com/taskforcesh/bullmq/commit/3a3a21b3da21485c7ff73ee7e297b14ec9f01bab)) -### Bug Fixes +* Merge branch 'master' into fix-cleanup-dependencies ([`13a8aff`](https://github.com/taskforcesh/bullmq/commit/13a8affa7435a4e7132d7e44394633e62350b935)) + + +## v1.0.0 (2019-10-20) + +### Chore -* **worker:** make token optional in processor function fixes [\#490](https://github.com/taskforcesh/bullmq/issues/490) \([3940bd7](https://github.com/taskforcesh/bullmq/commit/3940bd71c6faf3bd5fce572b9c1f11cb5b5d2123)\) +* chore(release): 1.0.0 [skip ci]nn# 1.0.0 (2019-10-20) -# [1.20.0](https://github.com/taskforcesh/bullmq/compare/v1.19.3...v1.20.0) \(2021-04-21\) +### Bug Fixes + +* add compilation step before running tests ([64abc13](https://github.com/taskforcesh/bullmq/commit/64abc13681f8735fb3ee5add5b271bb4da618047)) +* add extra client to worker fixes [#34](https://github.com/taskforcesh/bullmq/issues/34) ([90bd891](https://github.com/taskforcesh/bullmq/commit/90bd891c7514f5e9e397d7aad15069ee55bebacd)) +* add missing dependency ([b92e330](https://github.com/taskforcesh/bullmq/commit/b92e330aad35ae54f43376f92ad1b41209012b76)) +* check closing after resuming from pause ([7b2cef3](https://github.com/taskforcesh/bullmq/commit/7b2cef3677e2b3af0370e0023aec4b971ad313fe)) +* default opts ([333c73b](https://github.com/taskforcesh/bullmq/commit/333c73b5819a263ae92bdb54f0406c19db5cb64f)) +* do not block if blockTime is zero ([13b2df2](https://github.com/taskforcesh/bullmq/commit/13b2df20cf045c069b8b581751e117722681dcd4)) +* do not exec if closing ([b1d1c08](https://github.com/taskforcesh/bullmq/commit/b1d1c08a2948088eeb3dd65de78085329bac671b)) +* do not trim if maxEvents is undefined ([7edd8f4](https://github.com/taskforcesh/bullmq/commit/7edd8f47b392c8b3a7369196befdafa4b29421d1)) +* emit wait event in add job ([39cba31](https://github.com/taskforcesh/bullmq/commit/39cba31a30b7ef762a8d55d4bc34efec636207bf)) +* fix a couple of job tests ([e66b97b](https://github.com/taskforcesh/bullmq/commit/e66b97be4577d5ab373fff0f3f45d73de7842a37)) +* fix compiling error ([3cf2617](https://github.com/taskforcesh/bullmq/commit/3cf261703292d263d1e2017ae30eb490121dab4e)) +* fix more tests ([6a07b35](https://github.com/taskforcesh/bullmq/commit/6a07b3518f856e8f7158be032110c925ed5c924f)) +* fix progress script ([4228e27](https://github.com/taskforcesh/bullmq/commit/4228e2768c0cf404e09642ebb4053147d0badb56)) +* fix retry functionality ([ec41ea4](https://github.com/taskforcesh/bullmq/commit/ec41ea4e0bd88b10b1ba434ef5ceb0952bb59f7b)) +* fix several floating promises ([590a4a9](https://github.com/taskforcesh/bullmq/commit/590a4a925167a7c7d6c0d9764bbb5ab69235beb7)) +* fixed reprocess lua script ([b78296f](https://github.com/taskforcesh/bullmq/commit/b78296f33517b8c5d79b300fef920edd03149d2f)) +* improve concurrency mechanism ([a3f6148](https://github.com/taskforcesh/bullmq/commit/a3f61489e3c9891f42749ff85bd41064943c62dc)) +* improve disconnection for queue events ([56b53a1](https://github.com/taskforcesh/bullmq/commit/56b53a1aca1e527b50f04d906653060fe8ca644e)) +* initialize events comsumption in constructor ([dbb66cd](https://github.com/taskforcesh/bullmq/commit/dbb66cda9722d44eca806fa6ad1cabdaabac846a)) +* make ioredis typings a normal dependency ([fb80b90](https://github.com/taskforcesh/bullmq/commit/fb80b90b12931a12a1a93c5e204dbf90eed4f48f)) +* minor fixes ([7791cda](https://github.com/taskforcesh/bullmq/commit/7791cdac2bfb6a7fbbab9c95c5d89b1eae226a4c)) +* parse progres and return value in events ([9e43d0e](https://github.com/taskforcesh/bullmq/commit/9e43d0e30ab90a290942418718cde1f5bfbdcf56)) +* properly emit event for progress ([3f70175](https://github.com/taskforcesh/bullmq/commit/3f701750b1c957027825ee90b58141cd2556694f)) +* reduce drain delay to 5 seconds ([c6cfe7c](https://github.com/taskforcesh/bullmq/commit/c6cfe7c0b50cabe5e5eb31f4b631a8b1d3706611)) +* remove buggy close() on redis-connection (fixes 5 failing tests) ([64c2ede](https://github.com/taskforcesh/bullmq/commit/64c2edec5e738f43676d0f4ca61bdea8609203fc)) +* remove unused dependencies ([34293c8](https://github.com/taskforcesh/bullmq/commit/34293c84bb0ed54f18d70c86821c3ac627d376a5)) +* replace init by waitUntilReady ([4336161](https://github.com/taskforcesh/bullmq/commit/43361610de5b1a993a1c65f3f21ac745b8face21)) +* reworked initialization of redis clients ([c17d4be](https://github.com/taskforcesh/bullmq/commit/c17d4be5a2ecdda3efcdc6b9d7aecdfaccd06d83)) +* several fixes to make the lib work on other ts projects ([3cac1b0](https://github.com/taskforcesh/bullmq/commit/3cac1b0715613d9df51cb1ed6fe0859bcfbb8e9b)) +* throw error messages instead of codes ([9267541](https://github.com/taskforcesh/bullmq/commit/92675413f1c3b9564574dc264ffcab0d6089e70e)) +* update tests after merge ([51f75a4](https://github.com/taskforcesh/bullmq/commit/51f75a4929e7ae2704e42fa9035e335fe60d8dc0)) +* wait until ready before trying to get jobs ([f3b768f](https://github.com/taskforcesh/bullmq/commit/f3b768f251ddafa207466af552376065b35bec8f)) +* **connections:** reused connections ([1e808d2](https://github.com/taskforcesh/bullmq/commit/1e808d24018a29f6611f4fccd2f5754de0fa3e39)) +* waitUntilFinished improvements ([18d4afe](https://github.com/taskforcesh/bullmq/commit/18d4afef08f04d19cb8d931e02fff8f962d07ee7)) ### Features -* **worker:** passing token in processor function \([2249724](https://github.com/taskforcesh/bullmq/commit/2249724b1bc6fbf40b0291400011f201fd02dab3)\) +* add cleaned event ([c544775](https://github.com/taskforcesh/bullmq/commit/c544775803626b5f03cf6f7c3cf18ed1d92debab)) +* add empty method ([4376112](https://github.com/taskforcesh/bullmq/commit/4376112369d869c0a5c7ab4a543cfc50200e1414)) +* add retry errors ([f6a7990](https://github.com/taskforcesh/bullmq/commit/f6a7990fb74585985729c5d95e2238acde6cf74a)) +* add script to generate typedocs ([d0a8cb3](https://github.com/taskforcesh/bullmq/commit/d0a8cb32ef9090652017f8fbf2ca42f0960687f7)) +* add some new tests for compat class, more minor fixes ([bc0f653](https://github.com/taskforcesh/bullmq/commit/bc0f653ecf7aedd5a46eee6f912ecd6849395dca)) +* add support for adding jobs in bulk ([b62bddc](https://github.com/taskforcesh/bullmq/commit/b62bddc054b266a809b4b1646558a095a276d6d1)) +* add trimEvents method to queue client ([b7da7c4](https://github.com/taskforcesh/bullmq/commit/b7da7c4de2de81282aa41f8b7624b9030edf7d15)) +* automatically trim events ([279bbba](https://github.com/taskforcesh/bullmq/commit/279bbbab7e96ad8676ed3bd68663cb199067ea67)) +* emit global stalled event fixes [#10](https://github.com/taskforcesh/bullmq/issues/10) ([241f229](https://github.com/taskforcesh/bullmq/commit/241f229761691b9ac17124da005f91594a78273d)) +* get rid of Job3 in favor of bullmq Job class ([7590cea](https://github.com/taskforcesh/bullmq/commit/7590ceae7abe32a8824e4a265f95fef2f9a6665f)) +* implement close in redis connection fixes [#8](https://github.com/taskforcesh/bullmq/issues/8) ([6de8b48](https://github.com/taskforcesh/bullmq/commit/6de8b48c9612ea39bb28db5f4130cb2a2bb5ee90)) +* make delay in backoffs optional ([30d59e5](https://github.com/taskforcesh/bullmq/commit/30d59e519794780a8198222d0bbd88779c623275)) +* move async initialization to constructors ([3fbacd0](https://github.com/taskforcesh/bullmq/commit/3fbacd088bc3bfbd61ed8ff173e4401193ce48ec)) +* port a lot of functionality from bull 3.x ([ec9f3d2](https://github.com/taskforcesh/bullmq/commit/ec9f3d266c1aca0c27cb600f056d813c81259b4c)) +* port more features from bull 3.x ([75bd261](https://github.com/taskforcesh/bullmq/commit/75bd26158678ee45a14e04fd7c3a1f96219979a2)) +* ported tests and functionality from bull 3 ([1b6b192](https://github.com/taskforcesh/bullmq/commit/1b6b1927c7e8e6b6f1bf0bbd6c74eb59cc17deb6)) +* **workers:** support for async backoffs ([c555837](https://github.com/taskforcesh/bullmq/commit/c55583701e5bdd4e6436a61c833e506bc05749de)) +* remove support of bull3 config format in compat class ([d909486](https://github.com/taskforcesh/bullmq/commit/d9094868e34c2af21f810aaef4542951a509ccf8)) +* support global:progress event ([60f4d85](https://github.com/taskforcesh/bullmq/commit/60f4d85d332b3be4a80db7aa179f3a9ceeb1d6f8)) +* trim option to event stream [#21](https://github.com/taskforcesh/bullmq/issues/21) & fix [#17](https://github.com/taskforcesh/bullmq/issues/17) ([7eae653](https://github.com/taskforcesh/bullmq/commit/7eae65340820043101fadf1f87802f506020d553)) ([`e2e2d8d`](https://github.com/taskforcesh/bullmq/commit/e2e2d8d186c97a4762ce146887b7c3db6841a23e)) -## [1.19.3](https://github.com/taskforcesh/bullmq/compare/v1.19.2...v1.19.3) \(2021-04-20\) +* chore: add missing dependency ([`10fd6f5`](https://github.com/taskforcesh/bullmq/commit/10fd6f5608140131000f0001c7ba7501ac56ade8)) -### Bug Fixes +* chore: add missing dependencies ([`b71ef0e`](https://github.com/taskforcesh/bullmq/commit/b71ef0e6bf9852253c1fb5fef51835dec7ba3a0b)) -* **movetocompleted:** throw an error if job is not in active state \([c2fe5d2](https://github.com/taskforcesh/bullmq/commit/c2fe5d292fcf8ac2e53906c30282df69d43321b1)\) +* chore: add semantic release plugins ([`58477ad`](https://github.com/taskforcesh/bullmq/commit/58477ad6c70dcb0772a89482ad52576899fac031)) -## [1.19.2](https://github.com/taskforcesh/bullmq/compare/v1.19.1...v1.19.2) \(2021-04-19\) +* chore: replace deprecated node-uuid with uuid, move lodash to deps ([`4c13565`](https://github.com/taskforcesh/bullmq/commit/4c135653429188dac568ac4c749514e06f82562e)) -### Bug Fixes +* chore: cleanups ([`c682abd`](https://github.com/taskforcesh/bullmq/commit/c682abd5c7a1ff7bdc1df29bbc47782e15af2a52)) -* **worker:** close base class connection [\#451](https://github.com/taskforcesh/bullmq/issues/451) \([0875306](https://github.com/taskforcesh/bullmq/commit/0875306ae801a7cbfe04758dc2481cb86ca2ef69)\) +* chore: add prepublish script ([`29e37c5`](https://github.com/taskforcesh/bullmq/commit/29e37c5ed6741a39d193eaf18170caac68ab7251)) -## [1.19.1](https://github.com/taskforcesh/bullmq/compare/v1.19.0...v1.19.1) \(2021-04-19\) +* chore: bump to 4.0.0-beta.1 ([`f644cb0`](https://github.com/taskforcesh/bullmq/commit/f644cb0ba3158fe672e1371369f42de70a546224)) -### Bug Fixes +* chore: update gitignore ([`83e8982`](https://github.com/taskforcesh/bullmq/commit/83e8982e132660c7a30cc63f5d93c7bd8638a13d)) -* remove repeatable with obliterate \([1c5e581](https://github.com/taskforcesh/bullmq/commit/1c5e581a619ba707863c2a6e9f3e5f6eadfbe64f)\) +* chore: ordered dependencies ([`c72226b`](https://github.com/taskforcesh/bullmq/commit/c72226bfda7cf736432f7c5f840065d87346702e)) -# [1.19.0](https://github.com/taskforcesh/bullmq/compare/v1.18.2...v1.19.0) \(2021-04-19\) +* chore: merge upstream ([`e3564a7`](https://github.com/taskforcesh/bullmq/commit/e3564a7eb07a217015521ef31f2a1951305f1c0a)) -### Features +* chore: refactor options fix #17 ([`c0016db`](https://github.com/taskforcesh/bullmq/commit/c0016db4f6a459d96c1362f75390a1c8f0d71f5c)) -* add workerDelay option to limiter \([9b6ab8a](https://github.com/taskforcesh/bullmq/commit/9b6ab8ad4bc0a94068f3bc707ad9c0ed01596068)\) +* chore: moved opts to local variable ([`ec07491`](https://github.com/taskforcesh/bullmq/commit/ec0749163f86d41374756c7c7e0673bf98e4bd48)) -## [1.18.2](https://github.com/taskforcesh/bullmq/compare/v1.18.1...v1.18.2) \(2021-04-16\) +* chore: refactor opts ([`b060bf7`](https://github.com/taskforcesh/bullmq/commit/b060bf73ec9947050f131b4271339197ab74b9c8)) -### Bug Fixes +* chore: merge upstream ([`69bd8d1`](https://github.com/taskforcesh/bullmq/commit/69bd8d1f1baf45bd64cb23eec4913088407da110)) -* add parentKey property to Job \([febc60d](https://github.com/taskforcesh/bullmq/commit/febc60dba94c29b85be3e1bc2547fa83ed932806)\) +* chore: merge development-4.0 into feat-bull3-compat-api-v2 ([`e47cc87`](https://github.com/taskforcesh/bullmq/commit/e47cc87583aadbad11c01fee7384c0628add49b8)) -## [1.18.1](https://github.com/taskforcesh/bullmq/compare/v1.18.0...v1.18.1) \(2021-04-16\) +* chore: rename append to add ([`6bbbdd2`](https://github.com/taskforcesh/bullmq/commit/6bbbdd281e733eccabf8262c0661daeb51f8afad)) -### Bug Fixes +* chore: remove empty method since it is a duplicate ([`bb518ae`](https://github.com/taskforcesh/bullmq/commit/bb518ae06ffcf025eb48416a5f8b3849bb2dcb24)) -* rename Flow to FlowProducer class \([c64321d](https://github.com/taskforcesh/bullmq/commit/c64321d03e2af7cee88eaf6df6cd2e5b7840ae64)\) +* chore: rename queue keeper to scheduler ([`b7a35a4`](https://github.com/taskforcesh/bullmq/commit/b7a35a452033262f887ffe713ae8f461978719f7)) -# [1.18.0](https://github.com/taskforcesh/bullmq/compare/v1.17.0...v1.18.0) \(2021-04-16\) +* chore: rename to scheduler opts ([`91c1697`](https://github.com/taskforcesh/bullmq/commit/91c1697eb5d35dff223dcd8624be407bb4897bd4)) -### Features +* chore: cleanup, rm unnecessary changes, apply changes requested in #3 ([`82d4c4e`](https://github.com/taskforcesh/bullmq/commit/82d4c4eae592a6921a3f8bb6251085404cc29491)) -* add remove support for flows \([4e8a7ef](https://github.com/taskforcesh/bullmq/commit/4e8a7efd53f918937478ae13f5da7dee9ea9d8b3)\) +* chore: use await instead of then ([`85302c4`](https://github.com/taskforcesh/bullmq/commit/85302c467a42552573fcbe5cfc802459a001cf4e)) -# [1.17.0](https://github.com/taskforcesh/bullmq/compare/v1.16.2...v1.17.0) \(2021-04-16\) +* chore: remove several logs and minor cosmetic fixes ([`bc022d5`](https://github.com/taskforcesh/bullmq/commit/bc022d57030de447bc98088808577050a8b89d21)) -### Features +* chore: rename queue-keeper to queue-scheduler ([`ac76bb1`](https://github.com/taskforcesh/bullmq/commit/ac76bb19abe264993ba35501488240f4c22c570f)) -* **job:** consider waiting-children state \([2916dd5](https://github.com/taskforcesh/bullmq/commit/2916dd5d7ba9438d2eae66436899d32ec8ac0e91)\) +* chore: remove outcommented code ([`23d8dcc`](https://github.com/taskforcesh/bullmq/commit/23d8dcce148ee05c57bda44e8c187f693239b777)) -## [1.16.2](https://github.com/taskforcesh/bullmq/compare/v1.16.1...v1.16.2) \(2021-04-14\) +* chore: merge master ([`d8e6b1f`](https://github.com/taskforcesh/bullmq/commit/d8e6b1f5d2f3367afcc859f35f3790ac08dd1a82)) -### Bug Fixes +* chore: add scafolding ([`b0b2863`](https://github.com/taskforcesh/bullmq/commit/b0b286352f0f91348c4e1e892f5a75d79ca17aff)) -* read lua scripts serially \([69e73b8](https://github.com/taskforcesh/bullmq/commit/69e73b87bc6855623240a7b1a45368a7914b23b7)\) +### Ci -## [1.16.1](https://github.com/taskforcesh/bullmq/compare/v1.16.0...v1.16.1) \(2021-04-12\) +* ci: upgrade dependencies ([`5c0eb6f`](https://github.com/taskforcesh/bullmq/commit/5c0eb6f0970c92b5bc629bf2b13c08acbbdc7198)) -### Bug Fixes +* ci: upgrade dependencies ([`96d82ef`](https://github.com/taskforcesh/bullmq/commit/96d82ef45ab4c7cf9c821f8e39d0a1ff316cde91)) -* **flow:** relative dependency path fixes [\#466](https://github.com/taskforcesh/bullmq/issues/466) \([d104bf8](https://github.com/taskforcesh/bullmq/commit/d104bf802d6d1000ac1ccd781fa7a07bce2fe140)\) +* ci: upgrade dependencies ([`34370df`](https://github.com/taskforcesh/bullmq/commit/34370df19c41edad96c1f39fc57462df8f75343b)) -# [1.16.0](https://github.com/taskforcesh/bullmq/compare/v1.15.1...v1.16.0) \(2021-04-12\) +* ci: add test watch mode ([`7ff72a7`](https://github.com/taskforcesh/bullmq/commit/7ff72a7b5751d14fd43a31c747c8310413fe2ef7)) -### Features +* ci: upgrade semver ([`e9ad1e4`](https://github.com/taskforcesh/bullmq/commit/e9ad1e4dfb590ea4a4d5ae94afb034bff7a76d3b)) -* add support for flows \(parent-child dependencies\) \([\#454](https://github.com/taskforcesh/bullmq/issues/454)\) \([362212c](https://github.com/taskforcesh/bullmq/commit/362212c58c4be36b5435df862503699deb8bb79c)\) +* ci: remove package-lock.json ([`bb628b9`](https://github.com/taskforcesh/bullmq/commit/bb628b9f38077b89e73a0629cb2a5d893cf3486c)) -## [1.15.1](https://github.com/taskforcesh/bullmq/compare/v1.15.0...v1.15.1) \(2021-03-19\) +* ci: add yarn.lock ([`2aab767`](https://github.com/taskforcesh/bullmq/commit/2aab7670405c6fe87a4c503e1381ca3dd12ef711)) -### Bug Fixes +* ci: add husky ([`a4b4eb8`](https://github.com/taskforcesh/bullmq/commit/a4b4eb84a5b12a8db6536c2999293419bf9000ed)) -* **obliterate:** safer implementation \([82f571f](https://github.com/taskforcesh/bullmq/commit/82f571f2548c61c776b897fd1c5050bb09c8afca)\) +* ci: add commitling config ([`13025b4`](https://github.com/taskforcesh/bullmq/commit/13025b452e2e7b708d5453706e0ef2dd84469931)) -# [1.15.0](https://github.com/taskforcesh/bullmq/compare/v1.14.8...v1.15.0) \(2021-03-18\) +* ci: ignore yarn.lock ([`e67a911`](https://github.com/taskforcesh/bullmq/commit/e67a911acd20023b6b3355987d0469302858e0cc)) -### Features +* ci: deprecated node 6 & added node 12 ([`75deb60`](https://github.com/taskforcesh/bullmq/commit/75deb60f491d454c99deddd0a6414069e10bdfcc)) -* add method to "obliterate" a queue, fixes [\#430](https://github.com/taskforcesh/bullmq/issues/430) \([624be0e](https://github.com/taskforcesh/bullmq/commit/624be0ed48159c2aa405025938925a723330e0c2)\) +* ci: add linter step to travis ([`33774fb`](https://github.com/taskforcesh/bullmq/commit/33774fb81fea305b5a23a4101b6ad03554582e07)) -## [1.14.8](https://github.com/taskforcesh/bullmq/compare/v1.14.7...v1.14.8) \(2021-03-06\) +* ci: remove unnecessary "--" ([`30287d7`](https://github.com/taskforcesh/bullmq/commit/30287d7314976a4733957896aaffe90f1003b1cf)) -### Bug Fixes +* ci: remove yarn lock ([`9129a56`](https://github.com/taskforcesh/bullmq/commit/9129a56a1fc12ae1d06f9b9a1d357362bf505aac)) -* specify promise type to make TS 4.1 and 4.2 happy. \([\#418](https://github.com/taskforcesh/bullmq/issues/418)\) \([702f609](https://github.com/taskforcesh/bullmq/commit/702f609b410d8b0652c2d0504a8a67526966fdc3)\) +* ci: upgrade dependencies ([`5f07618`](https://github.com/taskforcesh/bullmq/commit/5f07618d5a4c7462a01f9bb4818e57b4a9340ee8)) -## [1.14.7](https://github.com/taskforcesh/bullmq/compare/v1.14.6...v1.14.7) \(2021-02-16\) +### Documentation -### Bug Fixes +* docs: add missing colon ([`c3a71f9`](https://github.com/taskforcesh/bullmq/commit/c3a71f993d3c1e8177b64f884910fb7c167ec9c4)) -* remove "client" property of QueueBaseOptions \([\#324](https://github.com/taskforcesh/bullmq/issues/324)\) \([e0b9e71](https://github.com/taskforcesh/bullmq/commit/e0b9e71c4da4a93af54c4386af461c61ab5f146c)\) +* docs: redirect changelog correctly ([`efb05ca`](https://github.com/taskforcesh/bullmq/commit/efb05ca431f79058297bad4ca994bf12d681b8fa)) -## [1.14.6](https://github.com/taskforcesh/bullmq/compare/v1.14.5...v1.14.6) \(2021-02-16\) +* docs: move gitbook documentation ([`2d2d98f`](https://github.com/taskforcesh/bullmq/commit/2d2d98f2eba2bdf4cbe789a03ac18fa8893672f5)) -### Bug Fixes +* docs: updated README ([`06ae5cc`](https://github.com/taskforcesh/bullmq/commit/06ae5cc4fa654ba436fefed6aeaf533d498a004c)) -* remove next job in removeRepeatableByKey fixes [\#165](https://github.com/taskforcesh/bullmq/issues/165) \([fb3a7c2](https://github.com/taskforcesh/bullmq/commit/fb3a7c2f429d535dd9f038687d7230d61201defc)\) +### Feature -## [1.14.5](https://github.com/taskforcesh/bullmq/compare/v1.14.4...v1.14.5) \(2021-02-16\) +* feat: implement close in redis connection fixes #8 ([`6de8b48`](https://github.com/taskforcesh/bullmq/commit/6de8b48c9612ea39bb28db5f4130cb2a2bb5ee90)) -### Bug Fixes +* feat(workers): support for async backoffs ([`c555837`](https://github.com/taskforcesh/bullmq/commit/c55583701e5bdd4e6436a61c833e506bc05749de)) -* add jobId support to repeatable jobs fixes [\#396](https://github.com/taskforcesh/bullmq/issues/396) \([c2dc669](https://github.com/taskforcesh/bullmq/commit/c2dc6693a4546e547245bc7ec1e71b4841829619)\) +* feat: move async initialization to constructors ([`3fbacd0`](https://github.com/taskforcesh/bullmq/commit/3fbacd088bc3bfbd61ed8ff173e4401193ce48ec)) -## [1.14.4](https://github.com/taskforcesh/bullmq/compare/v1.14.3...v1.14.4) \(2021-02-08\) +* feat: automatically trim events ([`279bbba`](https://github.com/taskforcesh/bullmq/commit/279bbbab7e96ad8676ed3bd68663cb199067ea67)) -### Bug Fixes +* feat: add trimEvents method to queue client ([`b7da7c4`](https://github.com/taskforcesh/bullmq/commit/b7da7c4de2de81282aa41f8b7624b9030edf7d15)) -* reconnect at start fixes [\#337](https://github.com/taskforcesh/bullmq/issues/337) \([fb33772](https://github.com/taskforcesh/bullmq/commit/fb3377280b3bda04a15a62d2901bdd78b869e08c)\) +* feat: add script to generate typedocs ([`d0a8cb3`](https://github.com/taskforcesh/bullmq/commit/d0a8cb32ef9090652017f8fbf2ca42f0960687f7)) -## [1.14.3](https://github.com/taskforcesh/bullmq/compare/v1.14.2...v1.14.3) \(2021-02-07\) +* feat: emit global stalled event fixes #10 ([`241f229`](https://github.com/taskforcesh/bullmq/commit/241f229761691b9ac17124da005f91594a78273d)) -### Bug Fixes +* feat: trim option to event stream #21 & fix #17 ([`7eae653`](https://github.com/taskforcesh/bullmq/commit/7eae65340820043101fadf1f87802f506020d553)) -* **worker:** avoid possible infinite loop fixes [\#389](https://github.com/taskforcesh/bullmq/issues/389) \([d05566e](https://github.com/taskforcesh/bullmq/commit/d05566ec0153f31a1257f7338399fdb55c959487)\) +* feat: add support for adding jobs in bulk ([`b62bddc`](https://github.com/taskforcesh/bullmq/commit/b62bddc054b266a809b4b1646558a095a276d6d1)) -## [1.14.2](https://github.com/taskforcesh/bullmq/compare/v1.14.1...v1.14.2) \(2021-02-02\) +* feat: add cleaned event ([`c544775`](https://github.com/taskforcesh/bullmq/commit/c544775803626b5f03cf6f7c3cf18ed1d92debab)) -### Bug Fixes +* feat: support global:progress event ([`60f4d85`](https://github.com/taskforcesh/bullmq/commit/60f4d85d332b3be4a80db7aa179f3a9ceeb1d6f8)) -* improve job timeout notification by giving the job name and id in the error message \([\#387](https://github.com/taskforcesh/bullmq/issues/387)\) \([ca886b1](https://github.com/taskforcesh/bullmq/commit/ca886b1f854051aed0888f5b872a64b052b2383e)\) +* feat: make delay in backoffs optional ([`30d59e5`](https://github.com/taskforcesh/bullmq/commit/30d59e519794780a8198222d0bbd88779c623275)) -## [1.14.1](https://github.com/taskforcesh/bullmq/compare/v1.14.0...v1.14.1) \(2021-02-01\) +* feat: add retry errors ([`f6a7990`](https://github.com/taskforcesh/bullmq/commit/f6a7990fb74585985729c5d95e2238acde6cf74a)) -### Bug Fixes +* feat: add empty method ([`4376112`](https://github.com/taskforcesh/bullmq/commit/4376112369d869c0a5c7ab4a543cfc50200e1414)) -* job finish queue events race condition \([355bca5](https://github.com/taskforcesh/bullmq/commit/355bca5ee128bf4ff37608746f9c6f7cca580eb0)\) +* feat: remove support of bull3 config format in compat class ([`d909486`](https://github.com/taskforcesh/bullmq/commit/d9094868e34c2af21f810aaef4542951a509ccf8)) -# [1.14.0](https://github.com/taskforcesh/bullmq/compare/v1.13.0...v1.14.0) \(2021-01-06\) +* feat: add some new tests for compat class, more minor fixes ([`bc0f653`](https://github.com/taskforcesh/bullmq/commit/bc0f653ecf7aedd5a46eee6f912ecd6849395dca)) -### Features +* feat: get rid of Job3 in favor of bullmq Job class ([`7590cea`](https://github.com/taskforcesh/bullmq/commit/7590ceae7abe32a8824e4a265f95fef2f9a6665f)) -* **job:** expose extendLock as a public method \([17e8431](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)\) +* feat: port more features from bull 3.x ([`75bd261`](https://github.com/taskforcesh/bullmq/commit/75bd26158678ee45a14e04fd7c3a1f96219979a2)) -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) \(2020-12-30\) +* feat: ported tests and functionality from bull 3 ([`1b6b192`](https://github.com/taskforcesh/bullmq/commit/1b6b1927c7e8e6b6f1bf0bbd6c74eb59cc17deb6)) -### Features +* feat: port a lot of functionality from bull 3.x ([`ec9f3d2`](https://github.com/taskforcesh/bullmq/commit/ec9f3d266c1aca0c27cb600f056d813c81259b4c)) -* add support for manually processing jobs fixes [\#327](https://github.com/taskforcesh/bullmq/issues/327) \([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)\) +### Fix -## [1.12.3](https://github.com/taskforcesh/bullmq/compare/v1.12.2...v1.12.3) \(2020-12-28\) +* fix(connections): reused connections ([`1e808d2`](https://github.com/taskforcesh/bullmq/commit/1e808d24018a29f6611f4fccd2f5754de0fa3e39)) -### Bug Fixes +* fix: do not trim if maxEvents is undefined ([`7edd8f4`](https://github.com/taskforcesh/bullmq/commit/7edd8f47b392c8b3a7369196befdafa4b29421d1)) -* correctly handle "falsy" data values fixes [\#264](https://github.com/taskforcesh/bullmq/issues/264) \([becad91](https://github.com/taskforcesh/bullmq/commit/becad91350fd4ac01037e5b0d4a8a93724dd8dbd)\) -* **worker:** setname on worker blocking connection \([645b633](https://github.com/taskforcesh/bullmq/commit/645b6338f5883b0c21ae78007777d86b45422615)\) +* fix: reworked initialization of redis clients ([`c17d4be`](https://github.com/taskforcesh/bullmq/commit/c17d4be5a2ecdda3efcdc6b9d7aecdfaccd06d83)) -## [1.12.2](https://github.com/taskforcesh/bullmq/compare/v1.12.1...v1.12.2) \(2020-12-23\) +* fix: add extra client to worker fixes #34 ([`90bd891`](https://github.com/taskforcesh/bullmq/commit/90bd891c7514f5e9e397d7aad15069ee55bebacd)) -### Bug Fixes +* fix: make ioredis typings a normal dependency ([`fb80b90`](https://github.com/taskforcesh/bullmq/commit/fb80b90b12931a12a1a93c5e204dbf90eed4f48f)) -* catch errors from Repeat \([\#348](https://github.com/taskforcesh/bullmq/issues/348)\) \([09a1a98](https://github.com/taskforcesh/bullmq/commit/09a1a98fc42dc1a9ae98bfb29c0cca3fac02013f)\) +* fix: fix compiling error ([`3cf2617`](https://github.com/taskforcesh/bullmq/commit/3cf261703292d263d1e2017ae30eb490121dab4e)) -## [1.12.1](https://github.com/taskforcesh/bullmq/compare/v1.12.0...v1.12.1) \(2020-12-21\) +* fix: fix several floating promises ([`590a4a9`](https://github.com/taskforcesh/bullmq/commit/590a4a925167a7c7d6c0d9764bbb5ab69235beb7)) -### Bug Fixes +* fix: initialize events comsumption in constructor ([`dbb66cd`](https://github.com/taskforcesh/bullmq/commit/dbb66cda9722d44eca806fa6ad1cabdaabac846a)) -* correctly handle "falsy" data values fixes [\#264](https://github.com/taskforcesh/bullmq/issues/264) \([cf1dbaf](https://github.com/taskforcesh/bullmq/commit/cf1dbaf7e60d74fc8443a5f8a537455f28a8dba3)\) +* fix: replace init by waitUntilReady ([`4336161`](https://github.com/taskforcesh/bullmq/commit/43361610de5b1a993a1c65f3f21ac745b8face21)) -# [1.12.0](https://github.com/taskforcesh/bullmq/compare/v1.11.2...v1.12.0) \(2020-12-16\) +* fix: several fixes to make the lib work on other ts projects ([`3cac1b0`](https://github.com/taskforcesh/bullmq/commit/3cac1b0715613d9df51cb1ed6fe0859bcfbb8e9b)) -### Features +* fix: improve disconnection for queue events ([`56b53a1`](https://github.com/taskforcesh/bullmq/commit/56b53a1aca1e527b50f04d906653060fe8ca644e)) -* add ability to get if queue is paused or not \([e98b7d8](https://github.com/taskforcesh/bullmq/commit/e98b7d8973df830cc29e0afc5d86e82c9a7ce76f)\) +* fix: do not exec if closing ([`b1d1c08`](https://github.com/taskforcesh/bullmq/commit/b1d1c08a2948088eeb3dd65de78085329bac671b)) -## [1.11.2](https://github.com/taskforcesh/bullmq/compare/v1.11.1...v1.11.2) \(2020-12-15\) +* fix: default opts ([`333c73b`](https://github.com/taskforcesh/bullmq/commit/333c73b5819a263ae92bdb54f0406c19db5cb64f)) -### Bug Fixes +* fix: check closing after resuming from pause ([`7b2cef3`](https://github.com/taskforcesh/bullmq/commit/7b2cef3677e2b3af0370e0023aec4b971ad313fe)) -* promote jobs to the right "list" when paused \([d3df615](https://github.com/taskforcesh/bullmq/commit/d3df615d37b1114c02eacb45f23643ee2f05374d)\) +* fix: do not block if blockTime is zero ([`13b2df2`](https://github.com/taskforcesh/bullmq/commit/13b2df20cf045c069b8b581751e117722681dcd4)) -## [1.11.1](https://github.com/taskforcesh/bullmq/compare/v1.11.0...v1.11.1) \(2020-12-15\) +* fix: throw error messages instead of codes ([`9267541`](https://github.com/taskforcesh/bullmq/commit/92675413f1c3b9564574dc264ffcab0d6089e70e)) -### Bug Fixes +* fix: remove unused dependencies ([`34293c8`](https://github.com/taskforcesh/bullmq/commit/34293c84bb0ed54f18d70c86821c3ac627d376a5)) -* clientCommandMessageReg to support GCP memorystore v5 \([8408dda](https://github.com/taskforcesh/bullmq/commit/8408dda9fa64fc0b968e88fb2726e0a30f717ed7)\) +* fix: add missing dependency ([`b92e330`](https://github.com/taskforcesh/bullmq/commit/b92e330aad35ae54f43376f92ad1b41209012b76)) -# [1.11.0](https://github.com/taskforcesh/bullmq/compare/v1.10.0...v1.11.0) \(2020-11-24\) +* fix: remove buggy close() on redis-connection (fixes 5 failing tests) ([`64c2ede`](https://github.com/taskforcesh/bullmq/commit/64c2edec5e738f43676d0f4ca61bdea8609203fc)) -### Bug Fixes +* fix: fix retry functionality ([`ec41ea4`](https://github.com/taskforcesh/bullmq/commit/ec41ea4e0bd88b10b1ba434ef5ceb0952bb59f7b)) -* add generic type to processor \([d4f6501](https://github.com/taskforcesh/bullmq/commit/d4f650120804bd6161f0eeda5162ad5a96811a05)\) +* fix: add compilation step before running tests ([`64abc13`](https://github.com/taskforcesh/bullmq/commit/64abc13681f8735fb3ee5add5b271bb4da618047)) -### Features +* fix: fixed reprocess lua script ([`b78296f`](https://github.com/taskforcesh/bullmq/commit/b78296f33517b8c5d79b300fef920edd03149d2f)) -* add name and return types to queue, worker and processor \([4879715](https://github.com/taskforcesh/bullmq/commit/4879715ec7c917f11e3a0ac3c5f5126029340ed3)\) +* fix: improve concurrency mechanism ([`a3f6148`](https://github.com/taskforcesh/bullmq/commit/a3f61489e3c9891f42749ff85bd41064943c62dc)) -# [1.10.0](https://github.com/taskforcesh/bullmq/compare/v1.9.0...v1.10.0) \(2020-10-20\) +* fix: fix progress script ([`4228e27`](https://github.com/taskforcesh/bullmq/commit/4228e2768c0cf404e09642ebb4053147d0badb56)) -### Bug Fixes +* fix: properly emit event for progress ([`3f70175`](https://github.com/taskforcesh/bullmq/commit/3f701750b1c957027825ee90b58141cd2556694f)) -* **job:** remove listeners before resolving promise \([563ce92](https://github.com/taskforcesh/bullmq/commit/563ce9218f5dd81f2bc836f9e8ccdedc549f09dd)\) -* **worker:** continue processing if handleFailed fails. fixes [\#286](https://github.com/taskforcesh/bullmq/issues/286) \([4ef1cbc](https://github.com/taskforcesh/bullmq/commit/4ef1cbc13d53897b57ae3d271afbaa1b213824aa)\) -* **worker:** fix memory leak on Promise.race \([\#282](https://github.com/taskforcesh/bullmq/issues/282)\) \([a78ab2b](https://github.com/taskforcesh/bullmq/commit/a78ab2b362e54f897eec6c8b16f16ecccf7875c2)\) -* **worker:** setname on worker blocking connection \([\#291](https://github.com/taskforcesh/bullmq/issues/291)\) \([50a87fc](https://github.com/taskforcesh/bullmq/commit/50a87fcb1dab976a6a0273d2b0cc4b31b63c015f)\) -* remove async for loop in child pool fixes [\#229](https://github.com/taskforcesh/bullmq/issues/229) \([d77505e](https://github.com/taskforcesh/bullmq/commit/d77505e989cd1395465c5222613555f79e4d9720)\) +* fix: parse progres and return value in events ([`9e43d0e`](https://github.com/taskforcesh/bullmq/commit/9e43d0e30ab90a290942418718cde1f5bfbdcf56)) -### Features +* fix: waitUntilFinished improvements ([`18d4afe`](https://github.com/taskforcesh/bullmq/commit/18d4afef08f04d19cb8d931e02fff8f962d07ee7)) -* **sandbox:** kill child workers gracefully \([\#243](https://github.com/taskforcesh/bullmq/issues/243)\) \([4262837](https://github.com/taskforcesh/bullmq/commit/4262837bc67e007fe44606670dce48ee7fec65cd)\) +* fix: minor fixes ([`7791cda`](https://github.com/taskforcesh/bullmq/commit/7791cdac2bfb6a7fbbab9c95c5d89b1eae226a4c)) -# [1.9.0](https://github.com/taskforcesh/bullmq/compare/v1.8.14...v1.9.0) \(2020-07-19\) +* fix: update tests after merge ([`51f75a4`](https://github.com/taskforcesh/bullmq/commit/51f75a4929e7ae2704e42fa9035e335fe60d8dc0)) -### Features +* fix: fix a couple of job tests ([`e66b97b`](https://github.com/taskforcesh/bullmq/commit/e66b97be4577d5ab373fff0f3f45d73de7842a37)) -* add grouped rate limiting \([3a958dd](https://github.com/taskforcesh/bullmq/commit/3a958dd30d09a049b0d761679d3b8d92709e815e)\) +* fix: reduce drain delay to 5 seconds ([`c6cfe7c`](https://github.com/taskforcesh/bullmq/commit/c6cfe7c0b50cabe5e5eb31f4b631a8b1d3706611)) -## [1.8.14](https://github.com/taskforcesh/bullmq/compare/v1.8.13...v1.8.14) \(2020-07-03\) +* fix: fix more tests ([`6a07b35`](https://github.com/taskforcesh/bullmq/commit/6a07b3518f856e8f7158be032110c925ed5c924f)) -### Bug Fixes +* fix: emit wait event in add job ([`39cba31`](https://github.com/taskforcesh/bullmq/commit/39cba31a30b7ef762a8d55d4bc34efec636207bf)) -* **typescript:** fix typings, upgrade ioredis dependencies \([\#220](https://github.com/taskforcesh/bullmq/issues/220)\) \([7059f20](https://github.com/taskforcesh/bullmq/commit/7059f2089553a206ab3937f7fd0d0b9de96aa7b7)\) -* **worker:** return this.closing when calling close \([b68c845](https://github.com/taskforcesh/bullmq/commit/b68c845c77de6b2973ec31d2f22958ab60ad87aa)\) +* fix: wait until ready before trying to get jobs ([`f3b768f`](https://github.com/taskforcesh/bullmq/commit/f3b768f251ddafa207466af552376065b35bec8f)) -## [1.8.13](https://github.com/taskforcesh/bullmq/compare/v1.8.12...v1.8.13) \(2020-06-05\) +### Test -### Bug Fixes +* test: fix tests for node 12 ([`edefbbf`](https://github.com/taskforcesh/bullmq/commit/edefbbf9d2fdbf54f5c869016f18333736a5cf75)) -* **redis-connection:** run the load command for reused redis client \([fab9bba](https://github.com/taskforcesh/bullmq/commit/fab9bba4caee8fd44523febb3bde588b151e8514)\) +* test: listen before adding in pause test ([`df8f86f`](https://github.com/taskforcesh/bullmq/commit/df8f86f2a49ac4a0073a1c68ccdaa1332e6d9089)) -## [1.8.12](https://github.com/taskforcesh/bullmq/compare/v1.8.11...v1.8.12) \(2020-06-04\) +* test: add small delay for failing test ([`b30e00b`](https://github.com/taskforcesh/bullmq/commit/b30e00b7637605f27b7f9039775227a75b72d29a)) -### Bug Fixes +* test: fix drain event tests ([`95b842f`](https://github.com/taskforcesh/bullmq/commit/95b842f20a73bd67d0178b27f1146de5196a6caa)) -* remove unused options \([23aadc3](https://github.com/taskforcesh/bullmq/commit/23aadc300b947693f4afb22296d236a924bd11ca)\) +* test: minor test fixes ([`2b0d8f3`](https://github.com/taskforcesh/bullmq/commit/2b0d8f3bc2aa153003001bb54fd59f3fcba9ed99)) -## [1.8.11](https://github.com/taskforcesh/bullmq/compare/v1.8.10...v1.8.11) \(2020-05-29\) +* test: some minor test fixes ([`d41fd97`](https://github.com/taskforcesh/bullmq/commit/d41fd9796947a25cf2b870d6470c9caa03ff9b5f)) -### Bug Fixes +* test: multiple clean ups ([`7b49aa7`](https://github.com/taskforcesh/bullmq/commit/7b49aa74e47f0b2aa789e49d7aee50e32ec49a0c)) -* **scheduler:** remove unnecessary division by 4096 \([4d25e95](https://github.com/taskforcesh/bullmq/commit/4d25e95f9522388bd85e932e04b6668e3da57686)\) +* test: add workers test ([`74cf2d2`](https://github.com/taskforcesh/bullmq/commit/74cf2d2fa931658761df7a721adba581bd2f9b23)) -## [1.8.10](https://github.com/taskforcesh/bullmq/compare/v1.8.9...v1.8.10) \(2020-05-28\) +* test: add stalled jobs tests ([`ba1e4a4`](https://github.com/taskforcesh/bullmq/commit/ba1e4a4bca5ed5f3ff21419b040137c8cbd2d5c7)) -### Bug Fixes +* test: fix broken tests related to worker closing connection ([`a4e1cae`](https://github.com/taskforcesh/bullmq/commit/a4e1cae8a2c686243a8bc0ea432d7030ad469255)) -* **scheduler:** divide timestamp by 4096 in update set fixes [\#168](https://github.com/taskforcesh/bullmq/issues/168) \([0c5db83](https://github.com/taskforcesh/bullmq/commit/0c5db8391bb8994bee19f25a33efb9dfee792d7b)\) +* test: fix test title ([`ea01775`](https://github.com/taskforcesh/bullmq/commit/ea0177504193c544510b991df7e755b1d7073d77)) -## [1.8.9](https://github.com/taskforcesh/bullmq/compare/v1.8.8...v1.8.9) \(2020-05-25\) +* test: reorder test code ([`1425df0`](https://github.com/taskforcesh/bullmq/commit/1425df0dd611791590f3823ee8ba5333f9d0b723)) -### Bug Fixes +* test: add queue clean tests ([`4bba23a`](https://github.com/taskforcesh/bullmq/commit/4bba23a5ce5d8171c6dc5640effd8a9efa0393bf)) -* **scheduler:** divide next timestamp by 4096 \([\#204](https://github.com/taskforcesh/bullmq/issues/204)\) \([9562d74](https://github.com/taskforcesh/bullmq/commit/9562d74625e20b7b6de8750339c85345ba027357)\) +* test: fix style ([`45be9f3`](https://github.com/taskforcesh/bullmq/commit/45be9f37d2590646deac46592bdaa8af2ecabd33)) -## [1.8.8](https://github.com/taskforcesh/bullmq/compare/v1.8.7...v1.8.8) \(2020-05-25\) +* test: add several tests for workers ([`f8125a6`](https://github.com/taskforcesh/bullmq/commit/f8125a690752e284480fdf0fe5cce66cf53564d3)) -### Bug Fixes +* test: fix failing test ([`9b78d4b`](https://github.com/taskforcesh/bullmq/commit/9b78d4bba401b1138af2849611f03191985bb3bb)) -* **queue-base:** error event is passed through \([ad14e77](https://github.com/taskforcesh/bullmq/commit/ad14e777171c0c44b7e50752d9847dec23f46158)\) -* **redis-connection:** error event is passed through \([a15b1a1](https://github.com/taskforcesh/bullmq/commit/a15b1a1824c6863ecf3e5132e22924fc3ff161f6)\) -* **worker:** error event is passed through \([d7f0374](https://github.com/taskforcesh/bullmq/commit/d7f03749ce300e917399a435a3f426e66145dd8c)\) +* test: fix repeat related tests ([`0dbbde8`](https://github.com/taskforcesh/bullmq/commit/0dbbde8593e64d6ce2e2158eff809de8ce29d30b)) -## [1.8.7](https://github.com/taskforcesh/bullmq/compare/v1.8.6...v1.8.7) \(2020-04-10\) +* test: skip failing test ([`f7c8b60`](https://github.com/taskforcesh/bullmq/commit/f7c8b604af13b999aab217a91a040fa9bbf0ee99)) -### Bug Fixes +* test: minor fixes ([`3aaf069`](https://github.com/taskforcesh/bullmq/commit/3aaf0694f7766fb89843025b7085a4cfa65525b1)) -* **worker:** do not use global child pool fixes [\#172](https://github.com/taskforcesh/bullmq/issues/172) \([bc65f26](https://github.com/taskforcesh/bullmq/commit/bc65f26dd47c59d0a7277ac947140405557be9a5)\) +### Unknown -## [1.8.6](https://github.com/taskforcesh/bullmq/compare/v1.8.5...v1.8.6) \(2020-04-10\) +* Merge pull request #46 from taskforcesh/chore/add-semantic-release-plugins -### Bug Fixes +chore: add missing dependency ([`d30413a`](https://github.com/taskforcesh/bullmq/commit/d30413a655605ef351f03ce1d5f69fba52d5e91d)) -* **workers:** do not call super.close\(\) \([ebd2ae1](https://github.com/taskforcesh/bullmq/commit/ebd2ae1a5613d71643c5a7ba3f685d77585de68e)\) -* make sure closing is returned in every close call \([88c5948](https://github.com/taskforcesh/bullmq/commit/88c5948d33a9a7b7a4f4f64f3183727b87d80207)\) -* **scheduler:** duplicate connections fixes [\#174](https://github.com/taskforcesh/bullmq/issues/174) \([011b8ac](https://github.com/taskforcesh/bullmq/commit/011b8acfdec54737d94a9fead2423e060e3364db)\) -* **worker:** return this.closing when calling close \([06d3d4f](https://github.com/taskforcesh/bullmq/commit/06d3d4f476444a2d2af8538d60cb2561a1915868)\) +* Merge branch 'master' into chore/add-semantic-release-plugins ([`dedf5ae`](https://github.com/taskforcesh/bullmq/commit/dedf5aebabdadb31379874741704b88d5fa10154)) -## [1.8.5](https://github.com/taskforcesh/bullmq/compare/v1.8.4...v1.8.5) \(2020-04-05\) +* Merge branch 'master' into fix-cleanup-dependencies ([`ff2fbd2`](https://github.com/taskforcesh/bullmq/commit/ff2fbd2c353f1d3580697082599504bca769556d)) -### Bug Fixes +* Merge pull request #45 from taskforcesh/chore/add-semantic-release-plugins -* removed deprecated and unused node-uuid \([c810579](https://github.com/taskforcesh/bullmq/commit/c810579029d33ef47d5a7563e63126a69c62fd87)\) +chore: add missing dependencies ([`5e06e66`](https://github.com/taskforcesh/bullmq/commit/5e06e66f74d4bb334e6354b6a1840c5844a20472)) -## [1.8.4](https://github.com/taskforcesh/bullmq/compare/v1.8.3...v1.8.4) \(2020-03-17\) +* Merge branch 'master' into chore/add-semantic-release-plugins ([`b81f6fd`](https://github.com/taskforcesh/bullmq/commit/b81f6fd7366f9de943615f99298189f791ab43fa)) -### Bug Fixes +* Merge pull request #44 from taskforcesh/chore/add-semantic-release-plugins -* **job:** added nullable/optional properties \([cef134f](https://github.com/taskforcesh/bullmq/commit/cef134f7c4d87e1b80ba42a5e06c3877956ff4cc)\) +chore: add semantic release plugins ([`0466161`](https://github.com/taskforcesh/bullmq/commit/0466161c2e66a17ad8b64e3c4165eb231629cfd9)) -## [1.8.3](https://github.com/taskforcesh/bullmq/compare/v1.8.2...v1.8.3) \(2020-03-13\) +* Merge branch 'master' into chore/add-semantic-release-plugins ([`695f595`](https://github.com/taskforcesh/bullmq/commit/695f5954fdd971c32ca644701bdf59c795884dea)) -### Bug Fixes +* Merge branch 'master' into fix-cleanup-dependencies ([`81bbf55`](https://github.com/taskforcesh/bullmq/commit/81bbf55aee9f75d188a23702e29ff55064bba285)) -* **sandbox:** If the child process is killed, remove it from the pool. \([8fb0fb5](https://github.com/taskforcesh/bullmq/commit/8fb0fb569a0236b37d3bae06bf58a2a1da3221c6)\) +* Merge pull request #41 from taskforcesh/feat/support-async-backoffs -## [1.8.2](https://github.com/taskforcesh/bullmq/compare/v1.8.1...v1.8.2) \(2020-03-03\) +Feat/support async backoffs ([`c0b4618`](https://github.com/taskforcesh/bullmq/commit/c0b46181366be8e0a9d52fa5503b49ac33a4aa9d)) -### Bug Fixes +* Merge branch 'master' into fix-cleanup-dependencies ([`4bfc011`](https://github.com/taskforcesh/bullmq/commit/4bfc011fb64e76f5a93a2ca59bfe883efd52d2d6)) -* restore the Job timestamp when deserializing JSON data \([\#138](https://github.com/taskforcesh/bullmq/issues/138)\) \([\#152](https://github.com/taskforcesh/bullmq/issues/152)\) \([c171bd4](https://github.com/taskforcesh/bullmq/commit/c171bd47f7b75378e75307a1decdc0f630ac1cd6)\) +* Merge branch 'master' into feat/support-async-backoffs ([`1f009d5`](https://github.com/taskforcesh/bullmq/commit/1f009d508d81e2c038b509bac1cb480a540e28c6)) -## [1.8.1](https://github.com/taskforcesh/bullmq/compare/v1.8.0...v1.8.1) \(2020-03-02\) +* Merge pull request #42 from taskforcesh/feat/implement-connection-close -### Bug Fixes +feat: implement close in redis connection fixes #8 ([`84c7ba9`](https://github.com/taskforcesh/bullmq/commit/84c7ba9f7ec079c22f27e50983656f267ea92983)) -* modified imports to work when esModuleInterop is disabled \([\#132](https://github.com/taskforcesh/bullmq/issues/132)\) \([01681f2](https://github.com/taskforcesh/bullmq/commit/01681f282bafac2df2c602edb51d6bde3483896c)\) +* Merge branch 'master' into feat/support-async-backoffs ([`74ae600`](https://github.com/taskforcesh/bullmq/commit/74ae60079abeb97eef794816a99bbaf417c8d11b)) -# [1.8.0](https://github.com/taskforcesh/bullmq/compare/v1.7.0...v1.8.0) \(2020-03-02\) +* Merge pull request #40 from taskforcesh/fix/fix-handling-reused-connections -### Bug Fixes +fix(connections): reused connections ([`cc8d38e`](https://github.com/taskforcesh/bullmq/commit/cc8d38e74fbe4b95b836c66a70f421e40bdc3775)) -* cleanup signatures for queue add and addBulk \([\#127](https://github.com/taskforcesh/bullmq/issues/127)\) \([48e221b](https://github.com/taskforcesh/bullmq/commit/48e221b53909079a4def9c48c1b69cebabd0ed74)\) -* exit code 12 when using inspect with child process \([\#137](https://github.com/taskforcesh/bullmq/issues/137)\) \([43ebc67](https://github.com/taskforcesh/bullmq/commit/43ebc67cec3e8f283f9a555b4466cf918226687b)\) +* Merge branch 'master' into fix/fix-handling-reused-connections ([`8bece44`](https://github.com/taskforcesh/bullmq/commit/8bece44a218978df8447c5af0931df18eac9a45d)) -### Features +* GitBook: [master] one page modified ([`69545e1`](https://github.com/taskforcesh/bullmq/commit/69545e1d1914e1b25d826b7eb1d785425dc79ad2)) -* **types:** add sandboxed job processor types \([\#114](https://github.com/taskforcesh/bullmq/issues/114)\) \([a50a88c](https://github.com/taskforcesh/bullmq/commit/a50a88cd1658fa9d568235283a4c23a74eb8ed2a)\) +* GitBook: [master] 9 pages modified ([`45b91c5`](https://github.com/taskforcesh/bullmq/commit/45b91c56346ffafc4e46c2e1275c1ed236f88318)) -# [1.7.0](https://github.com/taskforcesh/bullmq/compare/v1.6.8...v1.7.0) \(2020-03-02\) +* GitBook: [master] 2 pages modified ([`5c396a4`](https://github.com/taskforcesh/bullmq/commit/5c396a4e1bbc7c8ee4d73ee68675190ad0a1813b)) -### Features +* Merge branch 'master' into fix-cleanup-dependencies ([`36fc8fb`](https://github.com/taskforcesh/bullmq/commit/36fc8fb2ad9fc9b9fe0a04d3908386f97cf5e8a6)) -* made queue name publicly readable for [\#140](https://github.com/taskforcesh/bullmq/issues/140) \([f2bba2e](https://github.com/taskforcesh/bullmq/commit/f2bba2efd9d85986b01bb35c847a232b5c42ae57)\) +* GitBook: [master] 9 pages modified ([`7af1ecf`](https://github.com/taskforcesh/bullmq/commit/7af1ecf8cb303e8e5eeccd24b7fe50327d95c35a)) -## [1.6.8](https://github.com/taskforcesh/bullmq/compare/v1.6.7...v1.6.8) \(2020-02-22\) +* GitBook: [master] 6 pages and one asset modified ([`85b331b`](https://github.com/taskforcesh/bullmq/commit/85b331bd565b507d47c3e4e929474de477404d8b)) -### Bug Fixes +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`6a99814`](https://github.com/taskforcesh/bullmq/commit/6a99814f30702414e28044f66588c3a9f8d8a293)) -* modified QueueGetters.getJob and Job.fromId to also return null to \([65183fc](https://github.com/taskforcesh/bullmq/commit/65183fcf542d0227ec1d4d6637b46b5381331787)\) -* modified QueueGetters.getJob and Job.fromId to return undefined \([ede352b](https://github.com/taskforcesh/bullmq/commit/ede352be75ffe05bf633516db9eda88467c562bf)\) +* Rename changelog.md to CHANGELOG.md ([`d6845f8`](https://github.com/taskforcesh/bullmq/commit/d6845f82b2052f9f3983de503b6680b2c6d27872)) -## [1.6.7](https://github.com/taskforcesh/bullmq/compare/v1.6.6...v1.6.7) \(2020-01-16\) +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`4e6f8ed`](https://github.com/taskforcesh/bullmq/commit/4e6f8ed2e798ced02f7b9ff9b6bed5e243aa17d4)) -### Bug Fixes +* Update changelog.md ([`2b9d863`](https://github.com/taskforcesh/bullmq/commit/2b9d8637ca663dbb734421c7511195fe09a09bd7)) -* don't fail a job when the worker already lost the lock \([23c0bf7](https://github.com/taskforcesh/bullmq/commit/23c0bf70eab6d166b0483336f103323d1bf2ca64)\) +* GitBook: [master] 22 pages and one asset modified ([`00a3490`](https://github.com/taskforcesh/bullmq/commit/00a34903b0961a5f34f5bcaa25bc2406c000748f)) -## [1.6.6](https://github.com/taskforcesh/bullmq/compare/v1.6.5...v1.6.6) \(2020-01-05\) +* Create changelog.md ([`4738be2`](https://github.com/taskforcesh/bullmq/commit/4738be2bdb1a8612ac5f1097505770d31e3e1988)) -### Bug Fixes +* Merge branch 'master' of github.com:taskforcesh/bullmq ([`1caec42`](https://github.com/taskforcesh/bullmq/commit/1caec42910a808b5b38166e96852ce59c3546bd2)) -* remove duplicate active entry \([1d2cca3](https://github.com/taskforcesh/bullmq/commit/1d2cca38ee61289adcee4899a91f7dcbc93a7c05)\) +* 4.0.0-beta.2 ([`0cf1b2c`](https://github.com/taskforcesh/bullmq/commit/0cf1b2c3a9179c94804d49fb7c49a9cc5d0bbc6e)) -## [1.6.5](https://github.com/taskforcesh/bullmq/compare/v1.6.4...v1.6.5) \(2020-01-05\) +* Merge pull request #35 from taskforcesh/fix/34-extra-connection-for-workers -### Bug Fixes +Fix/#34 extra connection for workers ([`2604753`](https://github.com/taskforcesh/bullmq/commit/2604753984a03d079ece28db0686d734ee10ba52)) -* get rid of flushdb/flushall in tests \([550c67b](https://github.com/taskforcesh/bullmq/commit/550c67b25de5f6d800e5e317398044cd16b85924)\) +* Merge branch 'fix/34-extra-connection-for-workers' of github.com:taskforcesh/bullmq into fix/34-extra-connection-for-workers ([`91cd22a`](https://github.com/taskforcesh/bullmq/commit/91cd22a8b7f821cb0c7f7734dc6456e743668f3e)) -## [1.6.4](https://github.com/taskforcesh/bullmq/compare/v1.6.3...v1.6.4) \(2020-01-05\) +* Merge branch 'master' into fix/34-extra-connection-for-workers ([`f201f8b`](https://github.com/taskforcesh/bullmq/commit/f201f8b2c07e597810763671e53f4fa47538cc08)) -### Bug Fixes +* Update README.md ([`968f276`](https://github.com/taskforcesh/bullmq/commit/968f27696e860617dc8978f3b2c11323a99ce8a4)) -* delete logs when cleaning jobs in set \([b11c6c7](https://github.com/taskforcesh/bullmq/commit/b11c6c7c9f4f1c49eac93b98fdc93ac8f861c8b2)\) +* Merge pull request #33 from taskforcesh/chore/move-ioredis-typings-as-dependency -## [1.6.3](https://github.com/taskforcesh/bullmq/compare/v1.6.2...v1.6.3) \(2020-01-01\) +fix: make ioredis typings a normal dependency ([`5d35db5`](https://github.com/taskforcesh/bullmq/commit/5d35db5a8238dccb0f7e09a0e4d2bdd63ab7e837)) -### Bug Fixes +* Update README.md ([`1e960c0`](https://github.com/taskforcesh/bullmq/commit/1e960c029de75c29d6b2389d66a121dd37f52e7d)) -* add tslib dependency fixes [\#65](https://github.com/taskforcesh/bullmq/issues/65) \([7ad7995](https://github.com/taskforcesh/bullmq/commit/7ad799544a9c30b30aa96df8864119159c9a1185)\) +* Merge pull request #27 from taskforcesh/feat/add-trim-option-#21 -## [1.6.2](https://github.com/taskforcesh/bullmq/compare/v1.6.1...v1.6.2) \(2019-12-16\) +Feat/add trim option #21 ([`47fd1ea`](https://github.com/taskforcesh/bullmq/commit/47fd1ea5eec49dcb9d74293b8f99ed5aecc01239)) -### Bug Fixes +* Merge branch 'feat/add-trim-option-#21' of github.com:taskforcesh/bullmq into feat/add-trim-option-#21 ([`d0c24cf`](https://github.com/taskforcesh/bullmq/commit/d0c24cf6c235e2a845a8a63a3cf9b8ee2aa8357d)) -* change default QueueEvents lastEventId to $ \([3c5b01d](https://github.com/taskforcesh/bullmq/commit/3c5b01d16ee1442f5802a0fe4e7675c14f7a7f1f)\) -* ensure QE ready before adding test events \([fd190f4](https://github.com/taskforcesh/bullmq/commit/fd190f4be792b03273481c8aaf73be5ca42663d1)\) -* explicitly test the behavior of .on and .once \([ea11087](https://github.com/taskforcesh/bullmq/commit/ea11087b292d9325105707b53f92ac61c334a147)\) +* Merge branch 'master' into feat/add-trim-option-#21 ([`dd53469`](https://github.com/taskforcesh/bullmq/commit/dd53469ad41ef1b4e1e8c8bcb91327f7f29b34e0)) -## [1.6.1](https://github.com/taskforcesh/bullmq/compare/v1.6.0...v1.6.1) \(2019-12-16\) +* Update README.md ([`b695e36`](https://github.com/taskforcesh/bullmq/commit/b695e36f66095edc50a06874247e383e522dad85)) -### Bug Fixes +* Merge branch 'master' into feat/add-trim-option-#21 ([`63d344f`](https://github.com/taskforcesh/bullmq/commit/63d344f33cad87ddb3a60d8887c9ef1bfec81740)) -* check of existing redis instance \([dd466b3](https://github.com/taskforcesh/bullmq/commit/dd466b332b03b430108126531d59ff9e66ce9521)\) +* Update README.md ([`3f15dde`](https://github.com/taskforcesh/bullmq/commit/3f15dde1c8764090c33c382f059db2f6c181506e)) -# [1.6.0](https://github.com/taskforcesh/bullmq/compare/v1.5.0...v1.6.0) \(2019-12-12\) +* Update README.md ([`4f3311d`](https://github.com/taskforcesh/bullmq/commit/4f3311d6664f476ea8109bcfd838f9aae1571ca3)) -### Features +* Update README.md ([`6e50b31`](https://github.com/taskforcesh/bullmq/commit/6e50b31fa4c152d4b5fba552bfb5fdfa400f2c8e)) -* add generic type to job data and return value \([87c0531](https://github.com/taskforcesh/bullmq/commit/87c0531efc2716db37f8a0886848cdb786709554)\) +* Merge branch 'master' into feat/add-trim-option-#21 ([`90277f4`](https://github.com/taskforcesh/bullmq/commit/90277f47eafa140b2bba0476fbddd79a2421bafe)) -# [1.5.0](https://github.com/taskforcesh/bullmq/compare/v1.4.3...v1.5.0) \(2019-11-22\) +* Merge pull request #26 from taskforcesh/manast-patch-1 -### Features +Update README.md ([`99c9513`](https://github.com/taskforcesh/bullmq/commit/99c9513772efc78be0ecdd811e8e136cc9aaeffd)) -* remove delay dependency \([97e1a30](https://github.com/taskforcesh/bullmq/commit/97e1a3015d853e615ddd623af07f12a194ccab2c)\) -* remove dependence on Bluebird.delay [\#67](https://github.com/taskforcesh/bullmq/issues/67) \([bedbaf2](https://github.com/taskforcesh/bullmq/commit/bedbaf25af6479e387cd7548e246dca7c72fc140)\) +* Merge branch 'master' into feat/add-trim-option-#21 ([`9c13107`](https://github.com/taskforcesh/bullmq/commit/9c131075fc83ccdc0a0c6d3f1211d4b7226f8ee5)) -## [1.4.3](https://github.com/taskforcesh/bullmq/compare/v1.4.2...v1.4.3) \(2019-11-21\) +* Update README.md ([`d742889`](https://github.com/taskforcesh/bullmq/commit/d742889f90176f32d7768352a9d77f3e558b0cee)) -### Bug Fixes +* Merge pull request #25 from taskforcesh/manast-patch-1 -* check in moveToFinished to use default val for opts.maxLenEvents \([d1118aa](https://github.com/taskforcesh/bullmq/commit/d1118aab77f755b4a65e3dd8ea2e195baf3d2602)\) +Update README.md ([`e21a98a`](https://github.com/taskforcesh/bullmq/commit/e21a98a1e95016f72ad0109150f56a6fe8e00a17)) -## [1.4.2](https://github.com/taskforcesh/bullmq/compare/v1.4.1...v1.4.2) \(2019-11-21\) +* Merge branch 'manast-patch-1' of github.com:taskforcesh/bullmq into manast-patch-1 ([`d0a533e`](https://github.com/taskforcesh/bullmq/commit/d0a533eab0136784de9c0285232d6129a37e140a)) -### Bug Fixes +* Update README.md ([`007c3d5`](https://github.com/taskforcesh/bullmq/commit/007c3d5c3a6449a864b4c1292f8f7203d99c573f)) -* avoid Job<->Queue circular json error \([5752727](https://github.com/taskforcesh/bullmq/commit/5752727a6294e1b8d35f6a49e4953375510e10e6)\) -* avoid the .toJSON serializer interface [\#70](https://github.com/taskforcesh/bullmq/issues/70) \([5941b82](https://github.com/taskforcesh/bullmq/commit/5941b82b646e46d53970197a404e5ea54f09d008)\) +* Merge pull request #20 from taskforcesh/feat/development-4.0 -## [1.4.1](https://github.com/taskforcesh/bullmq/compare/v1.4.0...v1.4.1) \(2019-11-08\) +Feat/development 4.0 ([`e4a9614`](https://github.com/taskforcesh/bullmq/commit/e4a9614b843caacd4dc01e7266daaae036cc12e9)) -### Bug Fixes +* Merge pull request #7 from taskforcesh/feat-bull3-compat-api-v2 -* default job settings [\#58](https://github.com/taskforcesh/bullmq/issues/58) \([667fc6e](https://github.com/taskforcesh/bullmq/commit/667fc6e00ae4d6da639d285a104fb67e01c95bbd)\) +Compatibility class implementing bull3 api in bullmq ([`da7af7a`](https://github.com/taskforcesh/bullmq/commit/da7af7a319dd3f12acad7794f8fc27a251838d87)) -# [1.4.0](https://github.com/taskforcesh/bullmq/compare/v1.3.0...v1.4.0) \(2019-11-06\) +* Merge branch 'development-4.0' into feat-bull3-compat-api-v2 ([`70e00ec`](https://github.com/taskforcesh/bullmq/commit/70e00ec1f347ab24a06bfaea25f31305e36667a0)) -### Features +* Merge branch 'development-4.0' into feat-bull3-compat-api-v2 ([`33b19bd`](https://github.com/taskforcesh/bullmq/commit/33b19bd8cee85af0efef743c62098a64ce0b8bf7)) -* job.progress\(\) return last progress for sandboxed processors \([5c4b146](https://github.com/taskforcesh/bullmq/commit/5c4b146ca8e42c8a29f9db87326a17deac30e10e)\) +* Merge branch 'development-4.0' of github.com:taskforcesh/bullmq into development-4.0 ([`65ea27b`](https://github.com/taskforcesh/bullmq/commit/65ea27b551af70508a8262a9774c38035863382f)) -# [1.3.0](https://github.com/taskforcesh/bullmq/compare/v1.2.0...v1.3.0) \(2019-11-05\) +* Merge pull request #3 from taskforcesh/feat-port-sandbox-processing -### Features +port sandbox processors implementation and tests from bull 3.x ([`88a72e4`](https://github.com/taskforcesh/bullmq/commit/88a72e40eadef581a704bb5235e839184b435fb8)) -* test worker extends job lock while job is active \([577efdf](https://github.com/taskforcesh/bullmq/commit/577efdfb1d2d3140be78dee3bd658b5ce969b16d)\) +* npm install sinon (spies tool for tests) ([`c1778af`](https://github.com/taskforcesh/bullmq/commit/c1778af865c9d014a1091e3cd3027a6ca9cef317)) -# [1.2.0](https://github.com/taskforcesh/bullmq/compare/v1.1.0...v1.2.0) \(2019-11-03\) +* implement close() on our RedisConnection ([`db3aba9`](https://github.com/taskforcesh/bullmq/commit/db3aba9a97e2a2c01cf99846f22a448e3b9939d2)) -### Bug Fixes +* adapt some tests from v3 for compat class ([`24a2abe`](https://github.com/taskforcesh/bullmq/commit/24a2abec5309860ef71e64315873483833cc2216)) -* only run coveralls after success \([bd51893](https://github.com/taskforcesh/bullmq/commit/bd51893c35793657b65246a2f5a06469488c8a06)\) +* make prettier ([`4886fa2`](https://github.com/taskforcesh/bullmq/commit/4886fa2a7eba3beaf1c5e41c50093972cf0c80e0)) -### Features +* minor fixes in compat class ([`bf6c69f`](https://github.com/taskforcesh/bullmq/commit/bf6c69f460356a784ae6a0fe0661874241f24eef)) -* added code coverage and coveralls \([298cfc4](https://github.com/taskforcesh/bullmq/commit/298cfc48e35e648e6a22ac0d1633ac16c7b6e3de)\) -* added missing deps for coverage \([6f3ab8d](https://github.com/taskforcesh/bullmq/commit/6f3ab8d78ba8503a76447f0db5abf0c1c4f8e185)\) -* ignore commitlint file in coverage \([f874441](https://github.com/taskforcesh/bullmq/commit/f8744411a1b20b95e568502be15ec50cf8520926)\) -* only upload coverage once after all tests pass \([a7f73ec](https://github.com/taskforcesh/bullmq/commit/a7f73ecc2f51544f1d810de046ba073cb7aa5663)\) +* add suffix to defs from bull3 instead of V4 prefix on bullmq classes ([`f3a0601`](https://github.com/taskforcesh/bullmq/commit/f3a06012fc0587396b7378b9d39af35932921c4c)) -# [1.1.0](https://github.com/taskforcesh/bullmq/compare/v1.0.1...v1.1.0) \(2019-11-01\) +* add support of local and global events ([`e62bca1`](https://github.com/taskforcesh/bullmq/commit/e62bca1ad73a18ea4192168134129ac8993d6a93)) -### Bug Fixes +* implement job methods where possible; forward props access to inner v4Job ([`278bc77`](https://github.com/taskforcesh/bullmq/commit/278bc77bb9e9fc14c295316fa52f004a81c83a80)) -* failing build \([bb21d53](https://github.com/taskforcesh/bullmq/commit/bb21d53b199885dcc97e7fe20f60caf65e55e782)\) -* fix failing tests \([824eb6b](https://github.com/taskforcesh/bullmq/commit/824eb6bfb2b750b823d057c894797ccb336245d8)\) +* use v4 prefix for wrapped objects to better separate them ([`aa49369`](https://github.com/taskforcesh/bullmq/commit/aa49369d4b53e44e189df7ba2219af714144b5cc)) -### Features +* implement queue.add() ([`d6c9ebd`](https://github.com/taskforcesh/bullmq/commit/d6c9ebd58f98452860fb4e1988fdd0403ef1add5)) -* initial version of job locking mechanism \([1d4fa38](https://github.com/taskforcesh/bullmq/commit/1d4fa383e39f4f5dcb69a71a1359dd5dea75544c)\) +* implement some more getters -## [1.0.1](https://github.com/taskforcesh/bullmq/compare/v1.0.0...v1.0.1) \(2019-10-27\) +getJobs, getJobCounts, getJobCountByTypes, getCompletedCount, getFailedCount, +getDelayedCount, getWaitingCount, getPausedCount, getActiveCount, getRepeatableCount, +getWorkers, base64Name, clientName, parseClientList ([`e78e9bf`](https://github.com/taskforcesh/bullmq/commit/e78e9bf75dd2aff39e7d226087dcafb6dc1109bf)) -### Bug Fixes +* implement job getters and repeatable jobs functions ([`29eeb4c`](https://github.com/taskforcesh/bullmq/commit/29eeb4c1bcb2f7ceb9769b4681cae953b83ea6c4)) -* save job stacktrace on failure \([85dfe52](https://github.com/taskforcesh/bullmq/commit/85dfe525079a5f89c1901dbf35c7ddc6663afc24)\) -* simplify logic for stackTraceLimit \([296bd89](https://github.com/taskforcesh/bullmq/commit/296bd89514d430a499afee934dcae2aec41cffa2)\) +* implement implement pause, resume, count, close and getJob ([`4f43bb1`](https://github.com/taskforcesh/bullmq/commit/4f43bb1ed0f22f4877fe66fd6fe382c2217a23f2)) -# 1.0.0 \(2019-10-20\) +* implement queue.process() ([`1017ea6`](https://github.com/taskforcesh/bullmq/commit/1017ea63ac0add1b66ddfbfc39598669703c330b)) -### Bug Fixes +* implement queue/job options converters ([`736c1e0`](https://github.com/taskforcesh/bullmq/commit/736c1e03fa1d087f57ac15cdc5da3172907902c5)) -* add compilation step before running tests \([64abc13](https://github.com/taskforcesh/bullmq/commit/64abc13681f8735fb3ee5add5b271bb4da618047)\) -* add extra client to worker fixes [\#34](https://github.com/taskforcesh/bullmq/issues/34) \([90bd891](https://github.com/taskforcesh/bullmq/commit/90bd891c7514f5e9e397d7aad15069ee55bebacd)\) -* add missing dependency \([b92e330](https://github.com/taskforcesh/bullmq/commit/b92e330aad35ae54f43376f92ad1b41209012b76)\) -* check closing after resuming from pause \([7b2cef3](https://github.com/taskforcesh/bullmq/commit/7b2cef3677e2b3af0370e0023aec4b971ad313fe)\) -* default opts \([333c73b](https://github.com/taskforcesh/bullmq/commit/333c73b5819a263ae92bdb54f0406c19db5cb64f)\) -* do not block if blockTime is zero \([13b2df2](https://github.com/taskforcesh/bullmq/commit/13b2df20cf045c069b8b581751e117722681dcd4)\) -* do not exec if closing \([b1d1c08](https://github.com/taskforcesh/bullmq/commit/b1d1c08a2948088eeb3dd65de78085329bac671b)\) -* do not trim if maxEvents is undefined \([7edd8f4](https://github.com/taskforcesh/bullmq/commit/7edd8f47b392c8b3a7369196befdafa4b29421d1)\) -* emit wait event in add job \([39cba31](https://github.com/taskforcesh/bullmq/commit/39cba31a30b7ef762a8d55d4bc34efec636207bf)\) -* fix a couple of job tests \([e66b97b](https://github.com/taskforcesh/bullmq/commit/e66b97be4577d5ab373fff0f3f45d73de7842a37)\) -* fix compiling error \([3cf2617](https://github.com/taskforcesh/bullmq/commit/3cf261703292d263d1e2017ae30eb490121dab4e)\) -* fix more tests \([6a07b35](https://github.com/taskforcesh/bullmq/commit/6a07b3518f856e8f7158be032110c925ed5c924f)\) -* fix progress script \([4228e27](https://github.com/taskforcesh/bullmq/commit/4228e2768c0cf404e09642ebb4053147d0badb56)\) -* fix retry functionality \([ec41ea4](https://github.com/taskforcesh/bullmq/commit/ec41ea4e0bd88b10b1ba434ef5ceb0952bb59f7b)\) -* fix several floating promises \([590a4a9](https://github.com/taskforcesh/bullmq/commit/590a4a925167a7c7d6c0d9764bbb5ab69235beb7)\) -* fixed reprocess lua script \([b78296f](https://github.com/taskforcesh/bullmq/commit/b78296f33517b8c5d79b300fef920edd03149d2f)\) -* improve concurrency mechanism \([a3f6148](https://github.com/taskforcesh/bullmq/commit/a3f61489e3c9891f42749ff85bd41064943c62dc)\) -* improve disconnection for queue events \([56b53a1](https://github.com/taskforcesh/bullmq/commit/56b53a1aca1e527b50f04d906653060fe8ca644e)\) -* initialize events comsumption in constructor \([dbb66cd](https://github.com/taskforcesh/bullmq/commit/dbb66cda9722d44eca806fa6ad1cabdaabac846a)\) -* make ioredis typings a normal dependency \([fb80b90](https://github.com/taskforcesh/bullmq/commit/fb80b90b12931a12a1a93c5e204dbf90eed4f48f)\) -* minor fixes \([7791cda](https://github.com/taskforcesh/bullmq/commit/7791cdac2bfb6a7fbbab9c95c5d89b1eae226a4c)\) -* parse progres and return value in events \([9e43d0e](https://github.com/taskforcesh/bullmq/commit/9e43d0e30ab90a290942418718cde1f5bfbdcf56)\) -* properly emit event for progress \([3f70175](https://github.com/taskforcesh/bullmq/commit/3f701750b1c957027825ee90b58141cd2556694f)\) -* reduce drain delay to 5 seconds \([c6cfe7c](https://github.com/taskforcesh/bullmq/commit/c6cfe7c0b50cabe5e5eb31f4b631a8b1d3706611)\) -* remove buggy close\(\) on redis-connection \(fixes 5 failing tests\) \([64c2ede](https://github.com/taskforcesh/bullmq/commit/64c2edec5e738f43676d0f4ca61bdea8609203fc)\) -* remove unused dependencies \([34293c8](https://github.com/taskforcesh/bullmq/commit/34293c84bb0ed54f18d70c86821c3ac627d376a5)\) -* replace init by waitUntilReady \([4336161](https://github.com/taskforcesh/bullmq/commit/43361610de5b1a993a1c65f3f21ac745b8face21)\) -* reworked initialization of redis clients \([c17d4be](https://github.com/taskforcesh/bullmq/commit/c17d4be5a2ecdda3efcdc6b9d7aecdfaccd06d83)\) -* several fixes to make the lib work on other ts projects \([3cac1b0](https://github.com/taskforcesh/bullmq/commit/3cac1b0715613d9df51cb1ed6fe0859bcfbb8e9b)\) -* throw error messages instead of codes \([9267541](https://github.com/taskforcesh/bullmq/commit/92675413f1c3b9564574dc264ffcab0d6089e70e)\) -* update tests after merge \([51f75a4](https://github.com/taskforcesh/bullmq/commit/51f75a4929e7ae2704e42fa9035e335fe60d8dc0)\) -* wait until ready before trying to get jobs \([f3b768f](https://github.com/taskforcesh/bullmq/commit/f3b768f251ddafa207466af552376065b35bec8f)\) -* **connections:** reused connections \([1e808d2](https://github.com/taskforcesh/bullmq/commit/1e808d24018a29f6611f4fccd2f5754de0fa3e39)\) -* waitUntilFinished improvements \([18d4afe](https://github.com/taskforcesh/bullmq/commit/18d4afef08f04d19cb8d931e02fff8f962d07ee7)\) +* implement queue constructor ([`6dc880d`](https://github.com/taskforcesh/bullmq/commit/6dc880d03bf06d25f948200fc166a75f97b75281)) -### Features +* restore queue constructor (only call with supported for now) ([`1d1a761`](https://github.com/taskforcesh/bullmq/commit/1d1a761fb6218d75ad3515725174aa5b3acc435f)) + +* stub implementations for job and queue objects ([`cc51ac3`](https://github.com/taskforcesh/bullmq/commit/cc51ac3b6d38926d061cfed9e6f3e2241f318e88)) -* add cleaned event \([c544775](https://github.com/taskforcesh/bullmq/commit/c544775803626b5f03cf6f7c3cf18ed1d92debab)\) -* add empty method \([4376112](https://github.com/taskforcesh/bullmq/commit/4376112369d869c0a5c7ab4a543cfc50200e1414)\) -* add retry errors \([f6a7990](https://github.com/taskforcesh/bullmq/commit/f6a7990fb74585985729c5d95e2238acde6cf74a)\) -* add script to generate typedocs \([d0a8cb3](https://github.com/taskforcesh/bullmq/commit/d0a8cb32ef9090652017f8fbf2ca42f0960687f7)\) -* add some new tests for compat class, more minor fixes \([bc0f653](https://github.com/taskforcesh/bullmq/commit/bc0f653ecf7aedd5a46eee6f912ecd6849395dca)\) -* add support for adding jobs in bulk \([b62bddc](https://github.com/taskforcesh/bullmq/commit/b62bddc054b266a809b4b1646558a095a276d6d1)\) -* add trimEvents method to queue client \([b7da7c4](https://github.com/taskforcesh/bullmq/commit/b7da7c4de2de81282aa41f8b7624b9030edf7d15)\) -* automatically trim events \([279bbba](https://github.com/taskforcesh/bullmq/commit/279bbbab7e96ad8676ed3bd68663cb199067ea67)\) -* emit global stalled event fixes [\#10](https://github.com/taskforcesh/bullmq/issues/10) \([241f229](https://github.com/taskforcesh/bullmq/commit/241f229761691b9ac17124da005f91594a78273d)\) -* get rid of Job3 in favor of bullmq Job class \([7590cea](https://github.com/taskforcesh/bullmq/commit/7590ceae7abe32a8824e4a265f95fef2f9a6665f)\) -* implement close in redis connection fixes [\#8](https://github.com/taskforcesh/bullmq/issues/8) \([6de8b48](https://github.com/taskforcesh/bullmq/commit/6de8b48c9612ea39bb28db5f4130cb2a2bb5ee90)\) -* make delay in backoffs optional \([30d59e5](https://github.com/taskforcesh/bullmq/commit/30d59e519794780a8198222d0bbd88779c623275)\) -* move async initialization to constructors \([3fbacd0](https://github.com/taskforcesh/bullmq/commit/3fbacd088bc3bfbd61ed8ff173e4401193ce48ec)\) -* port a lot of functionality from bull 3.x \([ec9f3d2](https://github.com/taskforcesh/bullmq/commit/ec9f3d266c1aca0c27cb600f056d813c81259b4c)\) -* port more features from bull 3.x \([75bd261](https://github.com/taskforcesh/bullmq/commit/75bd26158678ee45a14e04fd7c3a1f96219979a2)\) -* ported tests and functionality from bull 3 \([1b6b192](https://github.com/taskforcesh/bullmq/commit/1b6b1927c7e8e6b6f1bf0bbd6c74eb59cc17deb6)\) -* **workers:** support for async backoffs \([c555837](https://github.com/taskforcesh/bullmq/commit/c55583701e5bdd4e6436a61c833e506bc05749de)\) -* remove support of bull3 config format in compat class \([d909486](https://github.com/taskforcesh/bullmq/commit/d9094868e34c2af21f810aaef4542951a509ccf8)\) -* support global:progress event \([60f4d85](https://github.com/taskforcesh/bullmq/commit/60f4d85d332b3be4a80db7aa179f3a9ceeb1d6f8)\) -* trim option to event stream [\#21](https://github.com/taskforcesh/bullmq/issues/21) & fix [\#17](https://github.com/taskforcesh/bullmq/issues/17) \([7eae653](https://github.com/taskforcesh/bullmq/commit/7eae65340820043101fadf1f87802f506020d553)\) +* reorganize structure of compat.ts ([`926f653`](https://github.com/taskforcesh/bullmq/commit/926f653f784cdcde3e0bc07a8fa87149fc54f74c)) -## Changelog +* import existing typescript definitions from dt project (master) -## 4.0.0-beta.2 +source: https://github.com/DefinitelyTyped/DefinitelyTyped ([`87e0ef1`](https://github.com/taskforcesh/bullmq/commit/87e0ef182189e458a55c2e38e72893aa84b26aa6)) -### Fixed +* rewrite master.js in typescript ([`5ced75d`](https://github.com/taskforcesh/bullmq/commit/5ced75d7a51003bee3040fba45396b5efc4c10cf)) -* Removed humans, they weren't doing fine with animals. +* replace promise chains with async/await ([`548c911`](https://github.com/taskforcesh/bullmq/commit/548c91163a253e0a1dcddfcb376a1a604850849b)) -### Changed +* finally fixed test for sandboxed processors ([`67d4ebe`](https://github.com/taskforcesh/bullmq/commit/67d4ebe3bbf7e37567da8bb403399b34997d198c)) -* Animals are now super cute, all of them. +* merge changes from development-4.0 ([`bd05c1a`](https://github.com/taskforcesh/bullmq/commit/bd05c1aee275673033fd9b2597fbdf0173132b8e)) -## 4.0.0-beta.1 +* run prettier ([`44cb575`](https://github.com/taskforcesh/bullmq/commit/44cb5756020fa7a5906904068ff90712634597bc)) -### Added +* port sandbox processors implementation and tests from bull 3.x ([`8658e61`](https://github.com/taskforcesh/bullmq/commit/8658e614bf80e802684c7d771f6dcd6b969dde49)) -* Introduced animals into the world, we believe they're going to be a neat addition. +* GitBook: [master] 2 pages modified ([`4d28ad5`](https://github.com/taskforcesh/bullmq/commit/4d28ad514e2d13e0badbec08ad9ea3d518e55982)) -## 4.0.0-beta.0 +* Initial commit ([`43e5efc`](https://github.com/taskforcesh/bullmq/commit/43e5efcd9bc60505d111715df23090d3e91d5bf7)) From 0939f1a55ff7c842d46cef0f0bf8360ee2431103 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Fri, 21 Jul 2023 12:01:40 -0500 Subject: [PATCH 251/322] ci(python): move into python directory --- .github/workflows/release.yml | 12 +- docs/gitbook/changelog.md | 10067 ++++---------------------------- 2 files changed, 1286 insertions(+), 8793 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 71940c28e2..a47e49eb51 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,9 +54,15 @@ jobs: flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Python Semantic Release if: ${{ contains(env.commitmsg, '(python)') }} - uses: python-semantic-release/python-semantic-release@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} + run: | + cd python + pip install python-semantic-release + git config --global user.email "manast@taskforce.sh" + git config --global user.name "manast" + export VERSION=$(semantic-release -vv --noop version --print) + if [ ! -z "$VERSION" ]; then + GH_TOKEN=${{ secrets.GITHUB_TOKEN }} semantic-release publish + fi - name: Publish package distributions to PyPI id: pypi-publish if: ${{ contains(env.commitmsg, '(python)') }} diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index a380e69965..88624db8be 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,10370 +1,2857 @@ -# CHANGELOG - - - -## v4.6.1 (2023-07-21) - -### Documentation - -* docs(retry): add stop retrying jobs pattern (#2080) ref #1571 ([`dd40cf1`](https://github.com/taskforcesh/bullmq/commit/dd40cf1eaf13767ddcd5e68c4f33d974b65e6f18)) - -### Fix - -* fix(python): upgrade semver to prevent warnings (#2074) ([`fc7f92b`](https://github.com/taskforcesh/bullmq/commit/fc7f92bc3cd5208e79405d4573a1b64f692c3be2)) - - -## v4.6.0 (2023-07-19) - -### Chore - -* chore(release): 4.6.0 [skip ci] - # [4.6.0](https://github.com/taskforcesh/bullmq/compare/v4.5.0...v4.6.0) (2023-07-19) -### Features - -* **queue:** add promoteJobs to promote all delayed jobs ([6074592](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) ([`39b2565`](https://github.com/taskforcesh/bullmq/commit/39b2565325a56b1df87f49dfe3a1ba9deb0ea174)) - -* chore: fix review comments ([`60484d0`](https://github.com/taskforcesh/bullmq/commit/60484d04dc0c1e602b2638e41ecc5de0e4e66b2d)) - -### Documentation - -* docs(api): remove old api files in favor of typedoc (#2078) ([`75a594f`](https://github.com/taskforcesh/bullmq/commit/75a594f36a2e8c62e16f55d917d1b8f906d18a8c)) - -### Feature - -* feat(queue): add promoteJobs to promote all delayed jobs ([`6074592`](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) - - -## v4.5.0 (2023-07-18) - -### Chore - -* chore(release): 4.5.0 [skip ci] - -# [4.5.0](https://github.com/taskforcesh/bullmq/compare/v4.4.0...v4.5.0) (2023-07-18) - -### Bug Fixes - -* **python:** respect concurrency in worker ([#2062](https://github.com/taskforcesh/bullmq/issues/2062)) fixes [#2063](https://github.com/taskforcesh/bullmq/issues/2063) ([1b95185](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) - -### Features - -* **job:** add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([841dc87](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) ([`2b31259`](https://github.com/taskforcesh/bullmq/commit/2b31259878b5c6d46429502e1fadf51b74d8872c)) - -### Feature - -* feat(job): add option for removing children in remove method (python) (#2064) ([`841dc87`](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) - -### Fix - -* fix(python): respect concurrency in worker (#2062) fixes #2063 ([`1b95185`](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) - -### Unknown - -* GITBOOK-176: change request with no subject merged in GitBook ([`4752a4d`](https://github.com/taskforcesh/bullmq/commit/4752a4dda4a2f48526bac7eb9cb322eccd6ea222)) - -* GITBOOK-175: change request with no subject merged in GitBook ([`8abc1bb`](https://github.com/taskforcesh/bullmq/commit/8abc1bb293c2fd5adbcf88c3aa5c3da7ec1a64fe)) - -* GITBOOK-174: change request with no subject merged in GitBook ([`34b950a`](https://github.com/taskforcesh/bullmq/commit/34b950a9e0be5a0c541eb8a3887704b4136543d4)) - -* GITBOOK-173: change request with no subject merged in GitBook ([`2e30d34`](https://github.com/taskforcesh/bullmq/commit/2e30d34edfbc82925215b7e955b4aed6e68d1d8b)) - - -## v4.4.0 (2023-07-17) - -### Chore - -* chore(release): 4.4.0 [skip ci] - -# [4.4.0](https://github.com/taskforcesh/bullmq/compare/v4.3.0...v4.4.0) (2023-07-17) - -### Features - -* **job:** add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([ffd49e2](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) -* **python:** add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([808ee72](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) ([`38ed54a`](https://github.com/taskforcesh/bullmq/commit/38ed54a879ecff97fab9757a5ebf6583d6d161fb)) - -* chore(deps): update coverallsapp/github-action digest to 95b1a23 (#2065) - -Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`a1577fa`](https://github.com/taskforcesh/bullmq/commit/a1577fa28870939101b1a7e31e04ae53005b9a46)) - -* chore(deps): update github/codeql-action digest to 489225d ([`d7d0981`](https://github.com/taskforcesh/bullmq/commit/d7d0981e441321c4156704c665a7015ba39d36bf)) - -* chore(deps): update actions/setup-node digest to e33196f ([`bdaccd3`](https://github.com/taskforcesh/bullmq/commit/bdaccd3aef8310a763169e3670cbbbd5288283e8)) - -* chore(deps): update dependency dev/setuptools to v68 (#2038) - -Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`0bdabcd`](https://github.com/taskforcesh/bullmq/commit/0bdabcd4ccf4fb16cc57c7fa67c8ccfe41031bf4)) - -### Feature - -* feat(job): add removeDependencyOnFailure option (#1953) ([`ffd49e2`](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) - -* feat(python): add remove method in queue (#2066) ([`808ee72`](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) - - -## v4.3.0 (2023-07-14) - -### Chore - -* chore(release): 4.3.0 [skip ci] - -# [4.3.0](https://github.com/taskforcesh/bullmq/compare/v4.2.1...v4.3.0) (2023-07-14) - -### Features - -* **worker:** add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([e255356](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) ([`3b6f33e`](https://github.com/taskforcesh/bullmq/commit/3b6f33eb85f68cff97eb61253884cf540cfb4908)) - -* chore(deps): update dependency dev/setuptools to v63.4.3 (#2034) - -Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`f0b823a`](https://github.com/taskforcesh/bullmq/commit/f0b823a2bb078ea9b1fe953f6f068cbfe3eab757)) - -### Documentation - -* docs(stalled): add pattern reference for manual fetching jobs ([`a82401c`](https://github.com/taskforcesh/bullmq/commit/a82401c00cc7378cdf8206b5c74afeaaead39c2c)) - -* docs(bullmq-pro): update changelog to v6.0.5 ([`37c203c`](https://github.com/taskforcesh/bullmq/commit/37c203c303e00a2aa4d8933bc5e68239547b1aca)) - -### Feature - -* feat(worker): add id as part of token (#2061) ([`e255356`](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) - - -## v4.2.1 (2023-07-10) - -### Chore - -* chore(release): 4.2.1 [skip ci] - -## [4.2.1](https://github.com/taskforcesh/bullmq/compare/v4.2.0...v4.2.1) (2023-07-10) - -### Bug Fixes - -* **flow:** emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([f419ff1](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) -* **python:** add requires-python config ([#2056](https://github.com/taskforcesh/bullmq/issues/2056)) fixes [#1979](https://github.com/taskforcesh/bullmq/issues/1979) ([a557970](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) -* **python:** fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([7ec1c5b](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) - -### Features - -* **python:** add moveToWaitingChildren job method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([6d0e224](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) ([`fc69da9`](https://github.com/taskforcesh/bullmq/commit/fc69da91d109d713ff16efca0a968466b7868f6c)) - -* chore(deps): update dependency pipenv to v2023.7.4 (#2042) - -Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`7508633`](https://github.com/taskforcesh/bullmq/commit/750863373adb9d8a528713a168d03b2dc3173eb1)) - -* chore(deps): update dependency dev/types-redis to v4.6.0.2 (#2046) ([`b47d622`](https://github.com/taskforcesh/bullmq/commit/b47d622fee8fa4363b23cff7969ac275d5b4b9ba)) - -* chore(deps): upgrade typedoc to 0.24.0 ([`2ac674d`](https://github.com/taskforcesh/bullmq/commit/2ac674daf78e6879d29f31a601242880bf8f975f)) - -### Ci - -* ci(api): avoid pushing changes to docs-api ([`ce382aa`](https://github.com/taskforcesh/bullmq/commit/ce382aa98994b7831439a3d0f05098d9f39cc4a1)) - -* ci(api): try to check out all branches ([`9981ce5`](https://github.com/taskforcesh/bullmq/commit/9981ce52a43b732a0097abda1fc9f94f402307f3)) - -* ci(api): restore origin/master ref ([`08a8a7f`](https://github.com/taskforcesh/bullmq/commit/08a8a7fdd4559668a3c02e34ae0c1ddf2b284c94)) - -* ci(api): add allow-unrelated-histories ([`4af6072`](https://github.com/taskforcesh/bullmq/commit/4af6072c506dd79b0ba525d86660271aff6a8fe1)) - -* ci(api): use origin/master ([`c04de32`](https://github.com/taskforcesh/bullmq/commit/c04de320efa53638cc10ebdf7939cca966ff627d)) - -* ci(api): use checkout ref to change branch ([`967d366`](https://github.com/taskforcesh/bullmq/commit/967d36658ff7a87dcb59f5122a11cdae97d779ef)) - -* ci(api): add docs-api branch logic (#2045) ([`6303148`](https://github.com/taskforcesh/bullmq/commit/63031484387a8cd8595da7ff0d2721c57b54d7e4)) - -### Documentation - -* docs(gitbook): update v4 references ([`b0adbf8`](https://github.com/taskforcesh/bullmq/commit/b0adbf857ddf4c39fdd8de53fa60d0f0169a7f7a)) - -### Feature - -* feat(python): add moveToWaitingChildren job method (#2049) ([`6d0e224`](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) - -### Fix - -* fix(flow): emit delayed event when parent is moved to delayed (#2055) ([`f419ff1`](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) - -* fix(python): add requires-python config (#2056) fixes #1979 ([`a557970`](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) - -* fix(python): fix isPaused method when custom prefix is present (#2047) ([`7ec1c5b`](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) - -### Unknown - -* doc(python): add python tabs in getters and step jobs pattern ([`f1ca525`](https://github.com/taskforcesh/bullmq/commit/f1ca52541eecbd610b0161b21fe696decd38ee7b)) - - -## v4.2.0 (2023-07-03) - -### Chore - -* chore(release): 4.2.0 [skip ci] - -# [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) - -### Bug Fixes - -* **python:** add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([d03ffc9](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) -* **python:** nuild egg-info at the root location ([3c2d06e](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) - -### Features - -* **common:** add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([ca17364](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) -* **python:** add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([57b2b72](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) -* **python:** add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([3e9db5e](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) -* **python:** add getFailedCount queue method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([92d7227](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) -* **python:** add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([8d5d6c1](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) -* **python:** add getJobState queue method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([8ec9ed6](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) ([`5e2a343`](https://github.com/taskforcesh/bullmq/commit/5e2a3430b320f0b28147e7695d8defd59e6a6a8e)) - -* chore(deps): update dependency dev/types-redis to v4.6.0.1 (#2035) ([`6e5d992`](https://github.com/taskforcesh/bullmq/commit/6e5d99213785c4988184fe70bf9dff6daf021880)) - -* chore(deps): update coverallsapp/github-action digest to 3b7440a (#2039) ([`cbc489b`](https://github.com/taskforcesh/bullmq/commit/cbc489bd59f689ced93c2c6a4162cde487475a28)) - -* chore: update python changelog ([`4994bd7`](https://github.com/taskforcesh/bullmq/commit/4994bd7626cd5996eaec77a75a008591cc35980b)) - -* chore(python): delete license key ([`d6e6449`](https://github.com/taskforcesh/bullmq/commit/d6e64493c979147a351f848212db5fa2282d3852)) - -* chore(deps): update dependency pipenv to v2023.6.26 ([`47e68bd`](https://github.com/taskforcesh/bullmq/commit/47e68bd6470a155ce3822772e37d1385777b89dd)) - -* chore(deps): update dependency tslib to v2.6.0 ([`0e33d9f`](https://github.com/taskforcesh/bullmq/commit/0e33d9f12a289bdf378a446d4b4f6851fc91ae44)) - -* chore(deps): update dependency redis to v4.6.0 ([`cb8edd6`](https://github.com/taskforcesh/bullmq/commit/cb8edd644082dc90dac77bc231b22d13055ec147)) - -### Documentation - -* docs(bullmq-pro): update changelog ([`b71e1ca`](https://github.com/taskforcesh/bullmq/commit/b71e1ca6b3bd77557a6c1219802faaeff8768392)) - -* docs(changelogs): update changelogs (#2028) ([`667de07`](https://github.com/taskforcesh/bullmq/commit/667de075f4762ab72dbaa5567bbacfd5147d4770)) - -* docs: update README.md ([`dc63efe`](https://github.com/taskforcesh/bullmq/commit/dc63efe6596c61487f0f7a9fbe06466fbd42d835)) - -* docs: update broken patterns link in the readme (#2025) ([`0e6e836`](https://github.com/taskforcesh/bullmq/commit/0e6e836376dc89d432f384e5ada0c9356d57252a)) - -### Feature - -* feat(common): add option to change repeatable jobs redis key hash algorithm (#2023) ([`ca17364`](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) - -* feat(python): add getJobState queue method (#2040) ([`8ec9ed6`](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) - -* feat(python): add getFailedCount queue method (#2036) ([`92d7227`](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) - -* feat(python): add getCompleted queue method (#2033) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) - -* feat(python): add get job methods by state (#2012) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) - -* feat(python): add getJobs method in queue class (#2011) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) - -### Fix - -* fix(python): nuild egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) - -* fix(python): add recommended pyproject.toml configuration (#2029) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) - -### Unknown - -* GITBOOK-172: change request with no subject merged in GitBook ([`2c45558`](https://github.com/taskforcesh/bullmq/commit/2c4555802d72bccc9c34ee268c80476a20ef7b49)) - - -## v4.1.0 (2023-06-23) - -### Chore - -* chore(release): 4.1.0 [skip ci] - -# [4.1.0](https://github.com/taskforcesh/bullmq/compare/v4.0.0...v4.1.0) (2023-06-23) - -### Features - -* **queue:** add getPrioritized and getPrioritizedCount methods ([#2005](https://github.com/taskforcesh/bullmq/issues/2005)) ([7363abe](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) ([`65184e3`](https://github.com/taskforcesh/bullmq/commit/65184e3f1388083e63ff956dea4ad62a1addf710)) - -* chore(deps): update github/codeql-action digest to f6e388e (#2003) ([`ef2aab9`](https://github.com/taskforcesh/bullmq/commit/ef2aab97592dd55431e413f39b3d97b3db0e5ed4)) - -### Feature - -* feat(queue): add getPrioritized and getPrioritizedCount methods (#2005) ([`7363abe`](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) - -### Unknown - -* GITBOOK-170: delete old architecture images ([`2e7c90d`](https://github.com/taskforcesh/bullmq/commit/2e7c90d2a5d533d23ec6a9f525259211492097f1)) - -* GITBOOK-169: New state architecture considering prioritized state ([`df50b99`](https://github.com/taskforcesh/bullmq/commit/df50b99ac22ef92d816ed2cd195de986a0140c6d)) - - -## v4.0.0 (2023-06-21) - -### Chore - -* chore(release): 4.0.0 [skip ci] - -# [4.0.0](https://github.com/taskforcesh/bullmq/compare/v3.15.8...v4.0.0) (2023-06-21) - -### Bug Fixes - -* **python:** pass right params to xtrim method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([a55fd77](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) - -### Performance Improvements - -* **priority:** add prioritized as a new state ([#1984](https://github.com/taskforcesh/bullmq/issues/1984)) (python) ([42a890a](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) - -### BREAKING CHANGES - -* **priority:** priority is separeted in its own zset, no duplication needed - -* feat(queue): add removeDeprecatedPriorityKey method - -* refactor: change job method name update to updateData - -ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ([`e0ab7e6`](https://github.com/taskforcesh/bullmq/commit/e0ab7e6fd62487884096ed8fc6164a0be0c4d581)) - -* chore(deps): update dependency platformdirs to v3.6.0 ([`35e77bb`](https://github.com/taskforcesh/bullmq/commit/35e77bb93262191e379c2cf5c5937ff886b15c16)) - -* chore(deps): update github/codeql-action digest to 6c089f5 ([`132f2f7`](https://github.com/taskforcesh/bullmq/commit/132f2f7d011a2181d5eb05164ccb094f3e595b9d)) - -* chore(deps): update dependency pipenv to v2023.6.18 (#1997) ([`fc3f746`](https://github.com/taskforcesh/bullmq/commit/fc3f746441d43ebbc86256583f9b446e2ea874e5)) - -* chore(deps): update dependency virtualenv to v20.23.1 (#1993) ([`86f8aed`](https://github.com/taskforcesh/bullmq/commit/86f8aed9702baf3be6078c6b92e1f358c888adc6)) - -* chore(deps): update dependency semver to v7.5.2 (#1987) ([`93005e6`](https://github.com/taskforcesh/bullmq/commit/93005e6a6001b78b6c86e8cc4f463e3152621005)) - -### Documentation - -* docs(update): add job data section (#1999) ([`854b1ca`](https://github.com/taskforcesh/bullmq/commit/854b1cabd082c1df4d55e7973f0e0b0cd4aefb79)) - -### Fix - -* fix(python): pass right params to xtrim method (#2004) ([`a55fd77`](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) - -### Performance - -* perf(priority): add prioritized as a new state (#1984) (python) - -decouple priority to keep one zset - -BREAKING CHANGE: priority is separeted in its own zset, no duplication needed - -* feat(queue): add removeDeprecatedPriorityKey method - -* refactor: change job method name update to updateData - -ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) - -### Unknown - -* GITBOOK-168: change request with no subject merged in GitBook ([`361e8cf`](https://github.com/taskforcesh/bullmq/commit/361e8cf330c15c9c5c150bcdc59db0a12e713623)) - -* GITBOOK-167: change request with no subject merged in GitBook ([`5920445`](https://github.com/taskforcesh/bullmq/commit/59204456c98a1f23c1bc4e0626850a8aa496795c)) - -* GITBOOK-166: change request with no subject merged in GitBook ([`1b1db39`](https://github.com/taskforcesh/bullmq/commit/1b1db390b4482925852b96aabc8a6fae56cfc500)) - -* GITBOOK-165: change request with no subject merged in GitBook ([`758dd30`](https://github.com/taskforcesh/bullmq/commit/758dd30ab60777ae66b5590faab24922affdcd46)) - -* GITBOOK-164: change request with no subject merged in GitBook ([`0cf17de`](https://github.com/taskforcesh/bullmq/commit/0cf17de033f6337c261c7ecab7dadb54a2ba17de)) - - -## v3.15.8 (2023-06-16) - -### Chore - -* chore(release): 3.15.8 [skip ci] - -## [3.15.8](https://github.com/taskforcesh/bullmq/compare/v3.15.7...v3.15.8) (2023-06-16) - -### Bug Fixes - -* **rate-limit:** keep priority fifo order ([#1991](https://github.com/taskforcesh/bullmq/issues/1991)) fixes [#1929](https://github.com/taskforcesh/bullmq/issues/1929) (python) ([56bd7ad](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) ([`5c36ae3`](https://github.com/taskforcesh/bullmq/commit/5c36ae318766741a00a07af587255a5e951bd731)) - -* chore(deps): update dependency pre-commit to v3.3.3 ([`dadeef3`](https://github.com/taskforcesh/bullmq/commit/dadeef3d31fda8ca826ca6f8b742574d761fd220)) - -* chore(deps): update dependency pipenv to v2023.6.12 ([`1434f7e`](https://github.com/taskforcesh/bullmq/commit/1434f7eaa515e30f2a819d6af3bcefabf7643790)) - -### Fix - -* fix(rate-limit): keep priority fifo order (#1991) fixes #1929 (python) ([`56bd7ad`](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) - - -## v3.15.7 (2023-06-16) - -### Chore - -* chore(release): 3.15.7 [skip ci] - -## [3.15.7](https://github.com/taskforcesh/bullmq/compare/v3.15.6...v3.15.7) (2023-06-16) - -### Bug Fixes - -* **python:** add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([7c5ee20](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) -* **worker:** set redis version always in initialization ([#1989](https://github.com/taskforcesh/bullmq/issues/1989)) fixes [#1988](https://github.com/taskforcesh/bullmq/issues/1988) ([a1544a8](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) ([`90c34c3`](https://github.com/taskforcesh/bullmq/commit/90c34c37605134c72d560ed0fc6aa03a63b6cbca)) - -* chore(deps): update dependency msgpackr to v1.9.5 ([`c1c8eb0`](https://github.com/taskforcesh/bullmq/commit/c1c8eb03f60188e1328507c1565fb2826081c824)) - -* chore(deps): update dependency filelock to v3.12.2 ([`c6e7b8b`](https://github.com/taskforcesh/bullmq/commit/c6e7b8bbc6dfa57e9c2142bfda56d0f080f8c165)) - -* chore: fix python CHANGELOG ref ([`67e5df9`](https://github.com/taskforcesh/bullmq/commit/67e5df913f65ed94dc3500480bee785a7d01f57b)) - -* chore: update CHANGELOG.md ref ([`be20157`](https://github.com/taskforcesh/bullmq/commit/be20157b79b6359cc0b778d6952f716fa64e2feb)) - -* chore: update python changelog ([`fbedf2c`](https://github.com/taskforcesh/bullmq/commit/fbedf2c45ea0c0030eff26de6fb432c68e7697a9)) - -### Fix - -* fix(worker): set redis version always in initialization (#1989) fixes #1988 ([`a1544a8`](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) - -* fix(python): add retry strategy in connection (#1975) ([`7c5ee20`](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) - -### Unknown - -* GITBOOK-163: docs(removing-jobs): add code tabs for python ([`234e3ad`](https://github.com/taskforcesh/bullmq/commit/234e3ad7f9dfc68540fb6c118dc6ff12ac8f6c25)) - - -## v3.15.6 (2023-06-13) - -### Chore - -* chore(release): 3.15.6 [skip ci] - -## [3.15.6](https://github.com/taskforcesh/bullmq/compare/v3.15.5...v3.15.6) (2023-06-13) - -### Bug Fixes - -* **worker:** use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([0df6afa](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) ([`7f42665`](https://github.com/taskforcesh/bullmq/commit/7f42665640b0cec1eaf32b4fec15ff1955164f8b)) - -### Documentation - -* docs(python): add missing version sections (#1974) ([`77b4de7`](https://github.com/taskforcesh/bullmq/commit/77b4de7c3b41ae63e311a2c373e0d2fc787f2f53)) - -### Fix - -* fix(worker): use timeout as integer for redis lower than v6.0.0 (python) (#1981) ([`0df6afa`](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) - - -## v3.15.5 (2023-06-11) - -### Chore - -* chore(release): 3.15.5 [skip ci] - -## [3.15.5](https://github.com/taskforcesh/bullmq/compare/v3.15.4...v3.15.5) (2023-06-11) - -### Bug Fixes - -* **python:** include lua scripts when releasing ([bb4f3b2](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) -* **retry-job:** consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([e753855](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) ### Features -* **python:** add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([6a172e9](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) ([`69b94aa`](https://github.com/taskforcesh/bullmq/commit/69b94aae13033a385bccd93f82601a0c7c4f45a0)) +* **queue:** add promoteJobs to promote all delayed jobs ([6074592](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) -* chore(deps): update actions/checkout digest to c85c95e (#1968) ([`85d8767`](https://github.com/taskforcesh/bullmq/commit/85d8767e96d17dc013c2553dd41e88e2c32c31f0)) - -### Ci - -* ci(python): add build execution before python release ([`fdaaff0`](https://github.com/taskforcesh/bullmq/commit/fdaaff0d51aaf8d1b585c88071aabf9749cceeb2)) - -* ci(python): check command files ([`1531db4`](https://github.com/taskforcesh/bullmq/commit/1531db4ed74b218b08f7379e0e97e5a3fe709e63)) - -### Feature - -* feat(python): add remove job method (#1965) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) - -### Fix - -* fix(retry-job): consider priority when moving job to wait (python) (#1969) ([`e753855`](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) - -* fix(python): include lua scripts when releasing ([`bb4f3b2`](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) - - -## v3.15.4 (2023-06-08) - -### Chore - -* chore(release): 3.15.4 [skip ci] - -## [3.15.4](https://github.com/taskforcesh/bullmq/compare/v3.15.3...v3.15.4) (2023-06-08) - -### Bug Fixes - -* **job:** import right reference of QueueEvents ([#1964](https://github.com/taskforcesh/bullmq/issues/1964)) ([689c845](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) ([`2ea7483`](https://github.com/taskforcesh/bullmq/commit/2ea74830cf0363ea39b077258d70f996f255a519)) - -### Ci - -* ci(python): install packaging module ([`ef0f7ed`](https://github.com/taskforcesh/bullmq/commit/ef0f7ed1d4e9e1b4f8bf7aecd79bc677c956ff67)) - -* ci(python): set user git information ([`38d23ae`](https://github.com/taskforcesh/bullmq/commit/38d23aed22ca0eb16171a013c37b51cdb403e8be)) - -* ci(python): downgrade python-semantic-release to avoid version issue ([`8a7cd62`](https://github.com/taskforcesh/bullmq/commit/8a7cd621d57aaceb1e432445fb86598dfb12cb55)) - -* ci(python): use version_source as commit ([`8002570`](https://github.com/taskforcesh/bullmq/commit/8002570555b1dfdfed3d3d331de23173d9cc67c8)) - -* ci(python): use version_source ([`973a9d3`](https://github.com/taskforcesh/bullmq/commit/973a9d357fc954ea6c44b2e14e18aef766208129)) - -### Fix - -* fix(job): import right reference of QueueEvents (#1964) ([`689c845`](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) - - -## v3.15.3 (2023-06-08) - -### Chore - -* chore(release): 3.15.3 [skip ci] - -## [3.15.3](https://github.com/taskforcesh/bullmq/compare/v3.15.2...v3.15.3) (2023-06-08) - -### Bug Fixes - -* **job:** use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([881848c](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) ([`0db3d46`](https://github.com/taskforcesh/bullmq/commit/0db3d46690acdf4b8b703427ba3fbed0893724e1)) - -* chore(deps): update dependency tslib to v2.5.3 ([`f1badc1`](https://github.com/taskforcesh/bullmq/commit/f1badc1d3ffbc0e5f70df4881a9e4586505083a7)) - -* chore(deps): update coverallsapp/github-action digest to c7885c0 ([`75e2803`](https://github.com/taskforcesh/bullmq/commit/75e280316a123c1620a408a0c91b3923f4408c83)) - -* chore(deps): update dependency pre-commit to v3 ([`49e078c`](https://github.com/taskforcesh/bullmq/commit/49e078c7e15d6548c9c71669cf15fd38f67da2cd)) - -* chore(deps): upgrade sinon ([`c884c35`](https://github.com/taskforcesh/bullmq/commit/c884c3550d48df11ddb1e50f0500aef37cb89a66)) - -* chore(python): bump to version 0.4.3 ([`8ad2e12`](https://github.com/taskforcesh/bullmq/commit/8ad2e124ea75a110981779b1fddb082f6210ac54)) - -### Ci - -* ci(python): move into python subfolder when releasing ([`d15581d`](https://github.com/taskforcesh/bullmq/commit/d15581d21bc9e5ed826c92b26cbe2f2b82c1c416)) - -* ci(python): use contains method instead of startsWith ([`646707b`](https://github.com/taskforcesh/bullmq/commit/646707bf5559ce5ee129527b8c5905922af4002d)) - -* ci(python): add python-semantic-release (#1957) ([`83cd060`](https://github.com/taskforcesh/bullmq/commit/83cd06049ead23a4a6ab4ac6dbb53371ca678ab5)) - -### Fix - -* fix(job): use QueueEvents type for waitUntilFinished (#1958) ([`881848c`](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) - - -## v3.15.2 (2023-06-06) - -### Chore - -* chore(release): 3.15.2 [skip ci] - -## [3.15.2](https://github.com/taskforcesh/bullmq/compare/v3.15.1...v3.15.2) (2023-06-06) - -### Bug Fixes - -* **worker:** better worker client naming ([c5f63af](https://github.com/taskforcesh/bullmq/commit/c5f63affe72f7b6616f4c5f3aafde858dcc0b200)) ([`492f686`](https://github.com/taskforcesh/bullmq/commit/492f686e685744511e3f817bf5f1d503e8094392)) - -### Fix - -* fix(worker): better worker client naming ([`c5f63af`](https://github.com/taskforcesh/bullmq/commit/c5f63affe72f7b6616f4c5f3aafde858dcc0b200)) - - -## v3.15.1 (2023-06-05) - -### Chore - -* chore(release): 3.15.1 [skip ci] - -## [3.15.1](https://github.com/taskforcesh/bullmq/compare/v3.15.0...v3.15.1) (2023-06-05) - -### Bug Fixes - -* **rate-limit:** consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) - -### Features - -* **python:** add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) ([`b1097c9`](https://github.com/taskforcesh/bullmq/commit/b1097c9d72dbe2cde7e2e5f6019d49e34d69b6b5)) - -* chore(deps): update actions/setup-python digest to bd6b4b6 (#1916) ([`bcc8030`](https://github.com/taskforcesh/bullmq/commit/bcc8030799907340f2f3db03edb2d83c77a52fb0)) - -### Feature - -* feat(python): add changePriority method (#1943) ([`945bcd3`](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) - -### Fix - -* fix(rate-limit): consider paused queue (#1931) ([`d97864a`](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) - -### Refactor - -* refactor(move-to-finished): return 4 values to prevent python errors when destructuring (#1936) ([`f391f2a`](https://github.com/taskforcesh/bullmq/commit/f391f2a27d5c2959c2a591d14578b9ae125c35f6)) - - -## v3.15.0 (2023-05-31) - -### Chore - -* chore(release): 3.15.0 [skip ci] - -# [3.15.0](https://github.com/taskforcesh/bullmq/compare/v3.14.2...v3.15.0) (2023-05-31) - -### Features - -* **job:** add changePriority method ([#1901](https://github.com/taskforcesh/bullmq/issues/1901)) ref [#1899](https://github.com/taskforcesh/bullmq/issues/1899) ([9485ad5](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) ([`1ccf486`](https://github.com/taskforcesh/bullmq/commit/1ccf4864c957b85f244e45673513cea239796ea4)) - -* chore(deps): lock file maintenance ([`8f4d86a`](https://github.com/taskforcesh/bullmq/commit/8f4d86a547b854ea844c5a13704874af90744c2c)) - -### Feature - -* feat(job): add changePriority method (#1901) ref #1899 ([`9485ad5`](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) - - -## v3.14.2 (2023-05-30) - -### Chore - -* chore(release): 3.14.2 [skip ci] - -## [3.14.2](https://github.com/taskforcesh/bullmq/compare/v3.14.1...v3.14.2) (2023-05-30) - -### Bug Fixes - -* **python:** fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) -* **rate-limit:** take in count priority ([#1919](https://github.com/taskforcesh/bullmq/issues/1919)) fixes [#1915](https://github.com/taskforcesh/bullmq/issues/1915) ([b8157a3](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) ([`6f4fb3c`](https://github.com/taskforcesh/bullmq/commit/6f4fb3cac980a06816660bbc7339b81db801f4d7)) - -* chore(python): bump to v0.4.1 ([`7509642`](https://github.com/taskforcesh/bullmq/commit/75096429d7a46d1f7babccdd4914f707eac32770)) - -* chore(python): add missing types to package - -Include types directory ([`7bc4f0b`](https://github.com/taskforcesh/bullmq/commit/7bc4f0bd02cf85be6e3ec9e363657d0260b826d6)) - -### Documentation - -* docs: add project homepage ([`adc5425`](https://github.com/taskforcesh/bullmq/commit/adc5425380b0e573dbf7a3b7423a631eff3ba351)) - -### Fix - -* fix(rate-limit): take in count priority (#1919) fixes #1915 ([`b8157a3`](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) - -* fix(python): fix 'install_requires' to include semver (#1927) ([`ce86ece`](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) - - -## v3.14.1 (2023-05-27) - -### Chore - -* chore(release): 3.14.1 [skip ci] - -## [3.14.1](https://github.com/taskforcesh/bullmq/compare/v3.14.0...v3.14.1) (2023-05-27) - -### Features - -* **python:** add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) - -### Performance Improvements - -* **retry-job:** get target queue list once ([#1921](https://github.com/taskforcesh/bullmq/issues/1921)) ([8a7a9dd](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) ([`5b1c5e9`](https://github.com/taskforcesh/bullmq/commit/5b1c5e9ccf2b01e2367582bd3214f9abdccea602)) - -* chore(deps): update dependency certifi to v2023 ([`8ab2353`](https://github.com/taskforcesh/bullmq/commit/8ab2353728a34c91f6b13cf697c10912158d2075)) - -* chore(deps): update dependency pipenv to v2023.5.19 ([`b59c2f8`](https://github.com/taskforcesh/bullmq/commit/b59c2f8bd79f43bcacbac0371710be0cdbc633b2)) - -### Documentation - -* docs(events): add listener api references (#1913) ([`864b5e5`](https://github.com/taskforcesh/bullmq/commit/864b5e56afb1fb1a92f41d06b155529f8f701838)) - -### Feature - -* feat(python): add getState method (#1906) ([`f0867a6`](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) - -### Performance - -* perf(retry-job): get target queue list once (#1921) ([`8a7a9dd`](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) - -### Test - -* test(job): do not save stacktrace when job key is missing (#1918) ref #1914 ([`b2d79cd`](https://github.com/taskforcesh/bullmq/commit/b2d79cdee63152b85228b5002f60c82127b9e630)) - -### Unknown - -* GITBOOK-162: change request with no subject merged in GitBook ([`84f03c4`](https://github.com/taskforcesh/bullmq/commit/84f03c43107af4cc1ee01da448662aa79c0ffdf8)) - -* GITBOOK-161: change request with no subject merged in GitBook ([`5671b8c`](https://github.com/taskforcesh/bullmq/commit/5671b8cf4587a9a254ac4e1c53ae27b13c7d10fe)) - -* GITBOOK-159: change request with no subject merged in GitBook ([`e83e284`](https://github.com/taskforcesh/bullmq/commit/e83e28459ac66851ef72a6cf402cd94459ead684)) - -* GITBOOK-158: change request with no subject merged in GitBook ([`9399384`](https://github.com/taskforcesh/bullmq/commit/93993844c6d60421a8e39d65875088c2367ca4f9)) - - -## v3.14.0 (2023-05-22) - -### Chore - -* chore(release): 3.14.0 [skip ci] - -# [3.14.0](https://github.com/taskforcesh/bullmq/compare/v3.13.4...v3.14.0) (2023-05-22) - -### Features - -* **worker:** make extendLocks overridable ([7b1386b](https://github.com/taskforcesh/bullmq/commit/7b1386bb823562d9666a1ad6e206e1deb63e57ec)) ([`5beaf52`](https://github.com/taskforcesh/bullmq/commit/5beaf5285bb06d457dceb7ae636ecefff80ed881)) - -* chore(deps): update dependency tslib to v2.5.2 (#1905) ([`02594d6`](https://github.com/taskforcesh/bullmq/commit/02594d67e73c0bfe43d0045e8f988beff27d5c0d)) - -* chore(python): bump to version 0.4.0 ([`5d8f57f`](https://github.com/taskforcesh/bullmq/commit/5d8f57fc1b967fe33f1cb561bb907c720bf4a286)) - -* chore(deps): update coverallsapp/github-action digest to 059e56d (#1907) ([`b600624`](https://github.com/taskforcesh/bullmq/commit/b60062445a5b1f918e5a62d04576c8cac96719dc)) - -* chore(bullmq-pro): update changelog (#1902) ([`d164fa8`](https://github.com/taskforcesh/bullmq/commit/d164fa8745514fe46bfb3feb02d24884e4ea4697)) - -* chore(deps): update dependency redis to v4.5.5 (#1883) ([`5b94b1c`](https://github.com/taskforcesh/bullmq/commit/5b94b1ca3d23e1cfa6d3efb73e042670d0421c39)) - -* chore(deps): lock file maintenance ([`80d39ac`](https://github.com/taskforcesh/bullmq/commit/80d39ace2cbaf61b325af8eaf3c3fe1b2bb212e6)) - -* chore(deps): update dependency platformdirs to v3.5.1 ([`4825098`](https://github.com/taskforcesh/bullmq/commit/4825098380066417ca1a9c3c96a750f8e8b6a81a)) - -### Ci - -* ci(python): fix commitmsg env reference ([`822f7a9`](https://github.com/taskforcesh/bullmq/commit/822f7a904e3f91c6b95f9faf40288427d7c20f43)) - -* ci(python): fix conditional step by startsWith ([`eb3d1d4`](https://github.com/taskforcesh/bullmq/commit/eb3d1d499b64c07f8385dc6db99370588977f9cf)) - -* ci(python): echo commit message ([`7510c22`](https://github.com/taskforcesh/bullmq/commit/7510c226a5094ae3042f3d15225708c1e1d83709)) - -* ci(python): retry lint with flake8 python ([`10191ef`](https://github.com/taskforcesh/bullmq/commit/10191ef0b2e6e578dbf3c5ab243bf1958c6a2383)) - -* ci(python): retry install dependencies python ([`1261fc4`](https://github.com/taskforcesh/bullmq/commit/1261fc487a88ee9df924f275c4eae45e7e8c62ee)) - -* ci(python): retry setup python ([`980796c`](https://github.com/taskforcesh/bullmq/commit/980796c9540e4603907e49b095bbd3b328aec29f)) - -* ci(python): remove setup python ([`23c6207`](https://github.com/taskforcesh/bullmq/commit/23c6207db9be71aef1827737a461b43c39eb05e8)) - -* ci(python): delete install dependencies python step ([`8d03ba1`](https://github.com/taskforcesh/bullmq/commit/8d03ba1daf5008fff8d6689ec5e335b25b9fbe2b)) - -* ci(python): delete flake8 step ([`e94bd83`](https://github.com/taskforcesh/bullmq/commit/e94bd835dc798ea60fcf4ce7942542f12cf42ed8)) - -* ci(python): delete commitmsg variable ([`2441eaf`](https://github.com/taskforcesh/bullmq/commit/2441eaf8ea52d12b1cf645051be5592e48a8e855)) - -* ci(python): delete Release Python step ([`3bf5e8d`](https://github.com/taskforcesh/bullmq/commit/3bf5e8dec40c40fd46a3f5fe551e7992804a51df)) - -* ci(python): try to save commit message for python action ([`d3673a1`](https://github.com/taskforcesh/bullmq/commit/d3673a1b79dbb1629d0b19f3fd9abcfdb32b32e0)) - -### Feature - -* feat(worker): make extendLocks overridable ([`7b1386b`](https://github.com/taskforcesh/bullmq/commit/7b1386bb823562d9666a1ad6e206e1deb63e57ec)) - -### Test - -* test(worker): fix flaky test ([`e08b91b`](https://github.com/taskforcesh/bullmq/commit/e08b91b6906e2a3924955f180d431fc18c0c9c18)) - -### Unknown - -* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`7970c60`](https://github.com/taskforcesh/bullmq/commit/7970c6066e3524363d649aa9d46faae57df6734c)) - - -## v3.13.4 (2023-05-11) - -### Chore - -* chore(release): 3.13.4 [skip ci] - -## [3.13.4](https://github.com/taskforcesh/bullmq/compare/v3.13.3...v3.13.4) (2023-05-11) - -### Performance Improvements - -* **rate-limit:** call pttl in script moveJobFromActiveToWait ([#1889](https://github.com/taskforcesh/bullmq/issues/1889)) ([e0d2992](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) ([`d7e640c`](https://github.com/taskforcesh/bullmq/commit/d7e640c6368a714f611920be849648348052de05)) - -### Performance - -* perf(rate-limit): call pttl in script moveJobFromActiveToWait (#1889) ([`e0d2992`](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) - - -## v3.13.3 (2023-05-10) - -### Chore - -* chore(release): 3.13.3 [skip ci] - -## [3.13.3](https://github.com/taskforcesh/bullmq/compare/v3.13.2...v3.13.3) (2023-05-10) - -### Bug Fixes - -* **child:** use named import for EventEmitter ([#1887](https://github.com/taskforcesh/bullmq/issues/1887)) ([1db396d](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) ([`64658c0`](https://github.com/taskforcesh/bullmq/commit/64658c024508fe91e85a291116ed899bbea0d564)) - -### Documentation - -* docs(bullmq-pro): update changelog (#1888) ([`0acfb79`](https://github.com/taskforcesh/bullmq/commit/0acfb79f779c6dcffca946f843290ae7bc4066e7)) - -### Fix - -* fix(child): use named import for EventEmitter (#1887) ([`1db396d`](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) - - -## v3.13.2 (2023-05-09) - -### Chore - -* chore(release): 3.13.2 [skip ci] - -## [3.13.2](https://github.com/taskforcesh/bullmq/compare/v3.13.1...v3.13.2) (2023-05-09) - -### Bug Fixes - -* **rate-limit:** consider paused queue when dynamic rate limit ([#1884](https://github.com/taskforcesh/bullmq/issues/1884)) ([a23f37e](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) ([`ce8059d`](https://github.com/taskforcesh/bullmq/commit/ce8059d5c6620acc9f8a090e447c610f80913af4)) - -### Fix - -* fix(rate-limit): consider paused queue when dynamic rate limit (#1884) ([`a23f37e`](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) - - -## v3.13.1 (2023-05-07) - -### Chore - -* chore(release): 3.13.1 [skip ci] - -## [3.13.1](https://github.com/taskforcesh/bullmq/compare/v3.13.0...v3.13.1) (2023-05-07) - -### Bug Fixes - -* **retry:** consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([01b621f](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) ([`a880069`](https://github.com/taskforcesh/bullmq/commit/a880069ca02c1b9eb64fb42a0d269b3e98aa91c3)) - -### Fix - -* fix(retry): consider when queue is paused (#1880) ([`01b621f`](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) - - -## v3.13.0 (2023-05-06) - -### Chore - -* chore(release): 3.13.0 [skip ci] - -# [3.13.0](https://github.com/taskforcesh/bullmq/compare/v3.12.1...v3.13.0) (2023-05-06) - -### Features - -* **worker:** add worker threads support ([0820985](https://github.com/taskforcesh/bullmq/commit/0820985e073582fdf841affad38ecc7ab64691ec)) ([`dd1803f`](https://github.com/taskforcesh/bullmq/commit/dd1803f866ff249f2c19691dc1c020a69125a88f)) - -* chore: add missing renaming of master to main ([`73ce10d`](https://github.com/taskforcesh/bullmq/commit/73ce10d31b1498e18dc352f4593444507036a6b4)) - -### Feature - -* feat(worker): add worker threads support ([`0820985`](https://github.com/taskforcesh/bullmq/commit/0820985e073582fdf841affad38ecc7ab64691ec)) - -### Test - -* test(child-pool): add another test ([`6ea5bbb`](https://github.com/taskforcesh/bullmq/commit/6ea5bbbd87129d447544d5223696f7cf1f7372d6)) - -* test: increase coverage for async fifo queue ([`7b8949c`](https://github.com/taskforcesh/bullmq/commit/7b8949cb4d2224f90da3c0d710393736960cc55c)) - - -## v3.12.1 (2023-05-05) - -### Chore - -* chore(release): 3.12.1 [skip ci] - -## [3.12.1](https://github.com/taskforcesh/bullmq/compare/v3.12.0...v3.12.1) (2023-05-05) - -### Bug Fixes - -* **python:** stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) -* **worker:** close open handles after closing ([#1861](https://github.com/taskforcesh/bullmq/issues/1861)) fixes [#1312](https://github.com/taskforcesh/bullmq/issues/1312) ([39286e8](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) - -### Features - -* **python:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) -* **python:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) -* **python:** add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([870da45](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) -* **python:** add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) -* **python:** add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) -* **python:** save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) -* **python:** support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) ([`8f02061`](https://github.com/taskforcesh/bullmq/commit/8f020618d364c5706aca63086effe993fd437bbc)) - -* chore(deps): update coverallsapp/github-action digest to 09b709c ([`7af4c78`](https://github.com/taskforcesh/bullmq/commit/7af4c78af61c93925e768da358fd1dcdbaad1165)) - -* chore(deps): update dependency virtualenv to v20.23.0 ([`31c475a`](https://github.com/taskforcesh/bullmq/commit/31c475aba94ce3ace5f3da67b759595097a8ca7e)) - -* chore(deps): update github/codeql-action digest to 29b1f65 (#1876) ([`e81e94a`](https://github.com/taskforcesh/bullmq/commit/e81e94aeef1a07a975235c1c330f297c2bf8c9f5)) - -* chore(worker): remove out-commented code ([`332672b`](https://github.com/taskforcesh/bullmq/commit/332672b5d589f624db7c7dbd4a130536a011cb83)) - -* chore(python): update python version ([`3ae441a`](https://github.com/taskforcesh/bullmq/commit/3ae441a904f1e5555754f116cb7f5f0ef38930f6)) - -* chore(deps): update dependency platformdirs to v3.5.0 ([`a0b8cd3`](https://github.com/taskforcesh/bullmq/commit/a0b8cd3ca96f7ad386d437355bfb630da058d233)) - -* chore(deps): update github/codeql-action digest to f3feb00 ([`450f449`](https://github.com/taskforcesh/bullmq/commit/450f4490988e01a1f1a5ea054eb1ac87c384c831)) - -* chore(deps): update dependency pipenv to v2023.4.29 ([`dd82136`](https://github.com/taskforcesh/bullmq/commit/dd821365ab00efe1bb8bd663815ce300c4693449)) - -* chore(deps): lock file maintenance (#1864) ([`f2f1f2c`](https://github.com/taskforcesh/bullmq/commit/f2f1f2ca9c53ea8dd7e7d44557d039d822ddb9b9)) - -* chore(deps): lock file maintenance (#1851) ([`083b4d5`](https://github.com/taskforcesh/bullmq/commit/083b4d55ea67c75ae2a40c0545157cecd8e50508)) - -* chore(python): replace staticmethod function with decorator (#1826) ([`475a188`](https://github.com/taskforcesh/bullmq/commit/475a18863b678e72f4d3ba65af70e9d15c199333)) - -* chore(deps): update actions/checkout digest to 8e5e7e5 ([`59cca88`](https://github.com/taskforcesh/bullmq/commit/59cca889afe2205821201e74616b3c3326cfa0fc)) - -* chore(deps): update actions/setup-python digest to 57ded4d ([`182b4bb`](https://github.com/taskforcesh/bullmq/commit/182b4bb06a398b3a61ea070a7256d68cb77b86e6)) - -* chore(deps): update github/codeql-action digest to 7df0ce3 ([`ef7d3e0`](https://github.com/taskforcesh/bullmq/commit/ef7d3e0b1357ba3c302c22792cc5a58ea7850889)) - -* chore(python): move types into a subfolder (#1828) ([`5428ecb`](https://github.com/taskforcesh/bullmq/commit/5428ecb6524ddcf880402108e7daa73ed4c4807a)) - -* chore(deps): update dependency filelock to v3.12.0 ([`7919a59`](https://github.com/taskforcesh/bullmq/commit/7919a59c1c6f29de00cbea8cf60105cb9d87ba76)) - -* chore(deps): update dependency virtualenv to v20.22.0 ([`9c2c76c`](https://github.com/taskforcesh/bullmq/commit/9c2c76c41b7ac5a8d77d2ee3e4e905cba9e07e0b)) - -* chore(deps): update dependency pipenv to v2023.4.20 ([`b4234c9`](https://github.com/taskforcesh/bullmq/commit/b4234c9ad74af0e671cd3477aba47ffcc5a548c3)) - -### Documentation - -* docs(python): add changelog (#1868) ([`e83f7d0`](https://github.com/taskforcesh/bullmq/commit/e83f7d0447471c24a753f0ad3e302a1eb85382d5)) - -* docs(repeatable): fix invalid cron expression in example (#1867) ([`4f31730`](https://github.com/taskforcesh/bullmq/commit/4f3173003464d3ef468271ad2394c1ca613f6077)) - -### Feature - -* feat(python): add retry method into job (#1877) ([`870da45`](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) - -* feat(python): add updateData method (#1871) ([`800b8c4`](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) - -* feat(python): support retryJob logic (#1869) ([`b044a03`](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) - -* feat(python): save stacktrace when job fails (#1859) ([`0b538ce`](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) - -* feat(python): add moveToDelayed job method (#1849) ([`5bebf8d`](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) - -* feat(python): add updateProgress method in job class(#1830) ([`e1e1aa2`](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) - -* feat(python): accept redis options as string ([`01f549e`](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) - -### Fix - -* fix(worker): close open handles after closing (#1861) fixes #1312 ([`39286e8`](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) - -* fix(python): stop processes when force stop (#1837) ([`514699c`](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) - -### Refactor - -* refactor(finished-on): save finishedOn on job methods (#1857) ([`5039369`](https://github.com/taskforcesh/bullmq/commit/503936909e004423536667720952e87fee90cff0)) - -### Test - -* test(events): try to fix flaky test ([`8358e28`](https://github.com/taskforcesh/bullmq/commit/8358e28680fe85a51935052082475fb8fa5f9c06)) - -### Unknown - -* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`13b26eb`](https://github.com/taskforcesh/bullmq/commit/13b26eb377632133a7280258687b9f95bdabd2f4)) - - -## v3.12.0 (2023-04-20) - -### Chore - -* chore(release): 3.12.0 [skip ci] - -# [3.12.0](https://github.com/taskforcesh/bullmq/compare/v3.11.0...v3.12.0) (2023-04-20) - -### Features - -* upgrade ioredis to 5.3.2 ([375b1be](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) ([`fc66096`](https://github.com/taskforcesh/bullmq/commit/fc66096d79734ad543562dfdbd6739c080f7102f)) - -* chore(deps): update coverallsapp/github-action digest to d2cf009 (#1842) ([`c72bc17`](https://github.com/taskforcesh/bullmq/commit/c72bc1756faec43b7b67528f0f0bdacef193e005)) - -* chore(deps): lock file maintenance ([`10135f2`](https://github.com/taskforcesh/bullmq/commit/10135f23fc7a1c38da96715b296a271b0eaffb58)) - -* chore(deps): update dependency ioredis to v5.3.2 ([`3eff8e6`](https://github.com/taskforcesh/bullmq/commit/3eff8e66d2582c024e71149c6621671af99e363c)) - -### Documentation - -* docs(bullmq-pro): update changelog (#1838) ([`13e838a`](https://github.com/taskforcesh/bullmq/commit/13e838a6cf3ccf2209cffdf09b9e2e53b8121e3e)) - -### Feature - -* feat: upgrade ioredis to 5.3.2 ([`375b1be`](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) - -### Unknown - -* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`95f3243`](https://github.com/taskforcesh/bullmq/commit/95f3243b17cf5cf10361785bc95653d4dc45a917)) - -* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`0514722`](https://github.com/taskforcesh/bullmq/commit/05147224c0f2e7df8a0298c999c8655d99ff011f)) - - -## v3.11.0 (2023-04-17) - -### Chore - -* chore(release): 3.11.0 [skip ci] - -# [3.11.0](https://github.com/taskforcesh/bullmq/compare/v3.10.4...v3.11.0) (2023-04-17) - -### Bug Fixes - -* **python:** correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([ef0c5d6](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) - -### Features - -* **python:** add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([46d6f94](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) -* **python:** improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([ec7c49e](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) -* **upstash:** don't throw an error when detecting an upstash host ([2e06bca](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) ([`1a3113b`](https://github.com/taskforcesh/bullmq/commit/1a3113b97106eebd63883dc8865b7c6a3f028765)) - -* chore: remove extra parentheses ([`8bb76ab`](https://github.com/taskforcesh/bullmq/commit/8bb76ab3a71a38f2e8df7977a0c08cce31f8a202)) - -* chore(deps): update dependency semver to v7.4.0 ([`79f8363`](https://github.com/taskforcesh/bullmq/commit/79f8363cad94e206b0f6416657407b5d649be0b4)) - -* chore(python): replace is operator (#1819) ([`cd15d7d`](https://github.com/taskforcesh/bullmq/commit/cd15d7d46626511231f50f86c11898c6fa551c5b)) - -* chore(deps): lock file maintenance ([`13dcd76`](https://github.com/taskforcesh/bullmq/commit/13dcd76c4a567b3750388806cf7923ac6d5e2cb2)) - -* chore(python): remove unnecessary semicolons (#1801) ([`b4729e9`](https://github.com/taskforcesh/bullmq/commit/b4729e99622a802a09db9f8007b1039b4001b8fb)) - -* chore(python): add JobOptions to add method (#1798) ([`8d0cbda`](https://github.com/taskforcesh/bullmq/commit/8d0cbdad4006394be080f8dc6ffdf5f193afc5aa)) - -* chore(deps): update github/codeql-action digest to d186a2a ([`99e5f6f`](https://github.com/taskforcesh/bullmq/commit/99e5f6fa9c5f2f4bcb1ab321b6221da7548055fe)) - -* chore(python): add QueueOptions (#1797) ([`7478049`](https://github.com/taskforcesh/bullmq/commit/74780498a76849b7157af7688ea5b9c37c1c09dd)) - -* chore(python): add JobOptions (#1796) ([`893f71a`](https://github.com/taskforcesh/bullmq/commit/893f71a9d0309aef924fba4ec605d9fb4f6c0f68)) - -* chore(deps): update dependency filelock to v3.11.0 ([`21d7e14`](https://github.com/taskforcesh/bullmq/commit/21d7e141fa30762369d2804b7901dfab24271120)) - -* chore(python): add WorkerOptions typed dict (#1795) ([`4843634`](https://github.com/taskforcesh/bullmq/commit/48436341230b495d9400948626c20db40761e2d1)) - -* chore(deps): pin actions/setup-python action to d27e3f3 ([`17ccf4f`](https://github.com/taskforcesh/bullmq/commit/17ccf4ff807179c9f65a9f4087fbb6671212f07c)) - -* chore(python): update python docs comments (#1790) ([`cb145ce`](https://github.com/taskforcesh/bullmq/commit/cb145cef8cc655deafbe10edef2f9540d1ca53cc)) - -### Documentation - -* docs: fix type error in scheduled job example code (closes taskforcesh/bullmq#1815) ([`11e62c9`](https://github.com/taskforcesh/bullmq/commit/11e62c9241a9c25e811bc5d8e99405c3871bc67f)) - -* docs: fix typo ([`806f758`](https://github.com/taskforcesh/bullmq/commit/806f758df9ea0c3d1e42f39e2fa00f76a5f5d6c4)) - -* docs(clean): fix typo/grammar (#1812) ([`65c12df`](https://github.com/taskforcesh/bullmq/commit/65c12df09c2364f5b722da532825af918e3e1a59)) - -* docs(flows): add warning about queues configurations (#1805) ([`3bdde0f`](https://github.com/taskforcesh/bullmq/commit/3bdde0fed601e335a2f0b3f814c394eeaecad85d)) - -### Feature - -* feat(upstash): don't throw an error when detecting an upstash host - -Upstash is currently rolling out redis streams to all regions and will be compatible with bullmq. ([`2e06bca`](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) - -* feat(python): add getJobCounts method (#1807) ([`46d6f94`](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) - -* feat(python): improve worker concurrency (#1809) ([`ec7c49e`](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) - -### Fix - -* fix(python): correct condition so that the worker keeps processing jobs indefinitely (#1800) ([`ef0c5d6`](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) - -### Refactor - -* refactor(python): update getCompleted return type (#1820) ([`ac8a96b`](https://github.com/taskforcesh/bullmq/commit/ac8a96bafa72542ffc2c632a1059a1403e282bc6)) - -* refactor(python): type hinting, remove white space, semicolon etc.. (#1818) ([`2dbb1ab`](https://github.com/taskforcesh/bullmq/commit/2dbb1ab74b11e2c894b96f44e64fe405a9126884)) - -### Unknown - -* GITBOOK-157: change request with no subject merged in GitBook ([`6e436ca`](https://github.com/taskforcesh/bullmq/commit/6e436caa7929d9e123d424165a7a46490b2da0af)) - - -## v3.10.4 (2023-04-05) - -### Chore - -* chore(release): 3.10.4 [skip ci] - -## [3.10.4](https://github.com/taskforcesh/bullmq/compare/v3.10.3...v3.10.4) (2023-04-05) - -### Bug Fixes - -* **flow:** do not remove completed children results ([#1788](https://github.com/taskforcesh/bullmq/issues/1788)) fixes [#1778](https://github.com/taskforcesh/bullmq/issues/1778) ([04b547a](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) -* **python:** fix scripts typing on array2obj function ([#1786](https://github.com/taskforcesh/bullmq/issues/1786)) ([134f6ab](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) ([`86f5774`](https://github.com/taskforcesh/bullmq/commit/86f57742e3233853b944ae8616c1cfa5a16706c3)) - -* chore(deps): update peaceiris/actions-gh-pages digest to 373f7f2 ([`ef7d0e2`](https://github.com/taskforcesh/bullmq/commit/ef7d0e26882f875e0942a464c8ca3afcabea5436)) - -* chore(deps): update dependency platformdirs to v3.2.0 ([`268dd38`](https://github.com/taskforcesh/bullmq/commit/268dd388b30568c6f474409b2424eee2df63fde8)) - -* chore(python): add missing typings in python (#1789) ([`9e22393`](https://github.com/taskforcesh/bullmq/commit/9e22393a66dee10d339225e453b4a52cdd9f2104)) - -* chore(deps): update actions/checkout digest to 8f4b7f8 ([`d081c9f`](https://github.com/taskforcesh/bullmq/commit/d081c9f3eb761143fdf5bd630c1dc5ee9bc02bd9)) - -* chore(deps): update dependency redis to v4.5.4 [security] ([`60c3c23`](https://github.com/taskforcesh/bullmq/commit/60c3c2323deb6a073760dbd8f07d9874a444fab0)) - -* chore(deps): update supercharge/redis-github-action action to v1.5.0 ([`663f961`](https://github.com/taskforcesh/bullmq/commit/663f9617b751e55b85e0226bc12cdd94ecb1d527)) - -* chore(deps): lock file maintenance ([`b65fa9b`](https://github.com/taskforcesh/bullmq/commit/b65fa9b51fa2b8813f63b153a25ac781fa9b72d0)) - -* chore(deps): update dependency cron-parser to v4.8.1 ([`33a91eb`](https://github.com/taskforcesh/bullmq/commit/33a91eb9447d55e14347d1dc90c48e43f912c082)) - -* chore(deps): update dependency msgpackr to v1.8.5 ([`1b0f4e0`](https://github.com/taskforcesh/bullmq/commit/1b0f4e0b0fe797e346fe9a66e50946aa1d45cbdf)) - -* chore(deps): update dependency filelock to v3.10.7 ([`35955b7`](https://github.com/taskforcesh/bullmq/commit/35955b7363bff083d4e3d933c52a5dd96326e277)) - -* chore(deps): update dependency msgpack to v1.0.5 (#1731) ([`7ca07dd`](https://github.com/taskforcesh/bullmq/commit/7ca07ddfd46383863fbcdb383dcc800e05bd000a)) - -### Documentation - -* docs(remove-jobs): add clean method description ([`85c3049`](https://github.com/taskforcesh/bullmq/commit/85c30493aa8f95277da07d1c12d9a4ab03648e5f)) - -* docs(pattern): add adding bulks section (#1782) ([`7785102`](https://github.com/taskforcesh/bullmq/commit/7785102c6905965c8e6bf39ee8c4992e6ed40ee7)) - -* docs(step-jobs): enhance documentation when throwing errors (#1774) ([`649aa6c`](https://github.com/taskforcesh/bullmq/commit/649aa6c7298083c808b73ce79ffa52351e9ec716)) - -* docs(flow-producer): add usage of addBulk method (#1773) ([`229c87e`](https://github.com/taskforcesh/bullmq/commit/229c87e9db144e26d23776b2e00ceb5467c0f0fb)) - -### Fix - -* fix(flow): do not remove completed children results (#1788) fixes #1778 ([`04b547a`](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) - -* fix(python): fix scripts typing on array2obj function (#1786) ([`134f6ab`](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) - -### Refactor - -* refactor(python): replace string concatenation with string formatting ([`ba26f64`](https://github.com/taskforcesh/bullmq/commit/ba26f64932d4b90861c001ee54bd60bcc158e6c9)) - -### Test - -* test(repeat): validate delayed records are deleted when removing repeatable (#1781) ([`3df8afb`](https://github.com/taskforcesh/bullmq/commit/3df8afb55725ac8e92a37ee132513fb5c7dc0051)) - - -## v3.10.3 (2023-03-30) - -### Chore - -* chore(release): 3.10.3 [skip ci] - -## [3.10.3](https://github.com/taskforcesh/bullmq/compare/v3.10.2...v3.10.3) (2023-03-30) - -### Bug Fixes - -* **flow:** consider removing dependency on removeOnFail true ([#1753](https://github.com/taskforcesh/bullmq/issues/1753)) ([de5a299](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) -* **python:** pass maxMetricsSize as empty string when it is not provided fixes [#1754](https://github.com/taskforcesh/bullmq/issues/1754) ([6bda2b2](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) ([`8c34cc7`](https://github.com/taskforcesh/bullmq/commit/8c34cc7dcb71413a77b1e9f5bdb157d5b6d7a0ac)) - -* chore(deps): update dependency pipenv to v2023.3.20 ([`65d9c97`](https://github.com/taskforcesh/bullmq/commit/65d9c97f6e1d253a08bc7111bbdebdd825e3d647)) - -* chore(deps): update actions/setup-node digest to 64ed1c7 ([`accfeff`](https://github.com/taskforcesh/bullmq/commit/accfeff2751e5879bb43d3018ba3150628fe0428)) - -* chore(deps): update github/codeql-action digest to 04df126 ([`d604078`](https://github.com/taskforcesh/bullmq/commit/d604078b560090e1310e48512e01655414687a6a)) - -* chore(deps): update dependency redis to v4.5.3 [security] ([`f6e7124`](https://github.com/taskforcesh/bullmq/commit/f6e712432b57372052db25ea77e0da15821b07d2)) - -* chore(python): update README ([`4ea9642`](https://github.com/taskforcesh/bullmq/commit/4ea9642193e3a9ac9852314a6e3f21558eaa267b)) - -* chore(asyncfifoqueue): add TODO comment ([`38e0708`](https://github.com/taskforcesh/bullmq/commit/38e0708d12e52373b9882707b2676ad7f06070a4)) - -* chore(deps): update dependency platformdirs to v3 ([`2654023`](https://github.com/taskforcesh/bullmq/commit/265402339268acb5152a04571c641adfff22d5c0)) - -* chore(deps): update coverallsapp/github-action digest to 6674157 ([`5e2df99`](https://github.com/taskforcesh/bullmq/commit/5e2df99d1c8bff83940a17be83ec4e006f9f75d4)) - -* chore(deps): update dependency virtualenv to v20.21.0 ([`33b9f7d`](https://github.com/taskforcesh/bullmq/commit/33b9f7d731a439e6773311f0b590738776576caf)) - -### Documentation - -* docs(step-jobs): add how to import errors (#1748) ([`d0cbb76`](https://github.com/taskforcesh/bullmq/commit/d0cbb7616853c2d9f5f87d4c61c39c02c7080855)) - -### Fix - -* fix(flow): consider removing dependency on removeOnFail true (#1753) ([`de5a299`](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) - -* fix(python): pass maxMetricsSize as empty string when it is not provided fixes #1754 ([`6bda2b2`](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) - -### Unknown - -* GITBOOK-156: change request with no subject merged in GitBook ([`f0b04af`](https://github.com/taskforcesh/bullmq/commit/f0b04af4c5268dc0df305c49c95be6b524e9dacc)) - -* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`72eb6eb`](https://github.com/taskforcesh/bullmq/commit/72eb6ebeff12261777b86f2bc74a9cbbba1609f0)) - - -## v3.10.2 (2023-03-22) - -### Chore - -* chore(release): 3.10.2 [skip ci] - -## [3.10.2](https://github.com/taskforcesh/bullmq/compare/v3.10.1...v3.10.2) (2023-03-22) - -### Bug Fixes - -* **job:** avoid error when job is moved when processing ([#1354](https://github.com/taskforcesh/bullmq/issues/1354)) fixes [#1343](https://github.com/taskforcesh/bullmq/issues/1343) [#1602](https://github.com/taskforcesh/bullmq/issues/1602) ([78085e4](https://github.com/taskforcesh/bullmq/commit/78085e4304357dd3695df61057f91e706c3a52bf)) ([`358ab2a`](https://github.com/taskforcesh/bullmq/commit/358ab2a9179155659800d48edee0f1f77309bff1)) - -* chore(deps): update dependency filelock to v3.9.1 ([`a695dd9`](https://github.com/taskforcesh/bullmq/commit/a695dd917446cd3b10b3ac8aa7cdd5a71b7dfd86)) - -* chore(deps): update github/codeql-action digest to 168b99b ([`20b8417`](https://github.com/taskforcesh/bullmq/commit/20b841717335df7d9bb6f01c0f5bba7a563070f9)) - -### Documentation - -* docs: expose async-fifo-queue (#1743) ([`922d118`](https://github.com/taskforcesh/bullmq/commit/922d118d4629e765e2f32e2bc5dae836a3e34f8b)) - -### Fix - -* fix(job): avoid error when job is moved when processing (#1354) fixes #1343 #1602 ([`78085e4`](https://github.com/taskforcesh/bullmq/commit/78085e4304357dd3695df61057f91e706c3a52bf)) - - -## v3.10.1 (2023-03-06) - -### Chore - -* chore(release): 3.10.1 [skip ci] - -## [3.10.1](https://github.com/taskforcesh/bullmq/compare/v3.10.0...v3.10.1) (2023-03-06) - -### Bug Fixes - -* **worker:** throw error with invalid concurrency fixes [#1723](https://github.com/taskforcesh/bullmq/issues/1723) ([2a1cdbe](https://github.com/taskforcesh/bullmq/commit/2a1cdbe3e871309f460aadc14b4d632238c32aa9)) ([`5849cf6`](https://github.com/taskforcesh/bullmq/commit/5849cf686064bfb5f28ccb735ec47fb44553c5a8)) - -### Fix - -* fix(worker): throw error with invalid concurrency fixes #1723 ([`2a1cdbe`](https://github.com/taskforcesh/bullmq/commit/2a1cdbe3e871309f460aadc14b4d632238c32aa9)) - -### Unknown - -* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`21c9de0`](https://github.com/taskforcesh/bullmq/commit/21c9de07001a6519fb12b32d87f760f8e481cb35)) - - -## v3.10.0 (2023-03-02) - -### Chore - -* chore(release): 3.10.0 [skip ci] - -# [3.10.0](https://github.com/taskforcesh/bullmq/compare/v3.9.0...v3.10.0) (2023-03-02) - -### Bug Fixes - -* **worker:** close lock extended timer ([7995f18](https://github.com/taskforcesh/bullmq/commit/7995f18bb7712bd50d0fa3d17c4ab565b16ab379)) -* **worker:** correct lock extender logic ([6aa3569](https://github.com/taskforcesh/bullmq/commit/6aa3569db0fe0137790e61a4b5982d2b35ee5646)) -* **worker:** start stalled check timer ([4763be0](https://github.com/taskforcesh/bullmq/commit/4763be028b0c7b0460fd0804d4569c446a06ef4a)) - -### Features - -* **worker:** replace Promise.race with efficient an async fifo ([0d94e35](https://github.com/taskforcesh/bullmq/commit/0d94e35e805b09c3b4c7404b8a2eeb71a1aff5c4)) -* **worker:** simplify lock extension to one call independent of concurrency ([ebf1aeb](https://github.com/taskforcesh/bullmq/commit/ebf1aeb2400383d0ae90ab68aeb4822aea03ba44)) - -### Performance Improvements - -* **scripts:** reuse keys array to avoid allocations ([feac7b4](https://github.com/taskforcesh/bullmq/commit/feac7b4070a6a3720597af36c43d095e9ea37173)) -* **worker:** improve worker memory consumption ([4846cf1](https://github.com/taskforcesh/bullmq/commit/4846cf1fe3f9ea35f58a679c11706e1a7101c898)) ([`4cb5250`](https://github.com/taskforcesh/bullmq/commit/4cb5250886f8f454a7ee4ee4d2b1754cd83df59b)) - -### Documentation - -* docs(auto-removal): add worker auto-removal examples (#1715) ([`4069344`](https://github.com/taskforcesh/bullmq/commit/40693440b473cd311da6a33ce591e8094fd9fc92)) - -### Feature - -* feat(worker): replace Promise.race with efficient an async fifo ([`0d94e35`](https://github.com/taskforcesh/bullmq/commit/0d94e35e805b09c3b4c7404b8a2eeb71a1aff5c4)) - -### Fix - -* fix(worker): correct lock extender logic ([`6aa3569`](https://github.com/taskforcesh/bullmq/commit/6aa3569db0fe0137790e61a4b5982d2b35ee5646)) - -* fix(worker): close lock extended timer ([`7995f18`](https://github.com/taskforcesh/bullmq/commit/7995f18bb7712bd50d0fa3d17c4ab565b16ab379)) - -* fix(worker): start stalled check timer ([`4763be0`](https://github.com/taskforcesh/bullmq/commit/4763be028b0c7b0460fd0804d4569c446a06ef4a)) - -### Performance - -* perf(scripts): reuse keys array to avoid allocations ([`feac7b4`](https://github.com/taskforcesh/bullmq/commit/feac7b4070a6a3720597af36c43d095e9ea37173)) - -* perf(worker): improve worker memory consumption ([`4846cf1`](https://github.com/taskforcesh/bullmq/commit/4846cf1fe3f9ea35f58a679c11706e1a7101c898)) - -### Test - -* test(getters): skip flaky test for now ([`d0d4bf2`](https://github.com/taskforcesh/bullmq/commit/d0d4bf25ed1bae69405492b4744b675c6882e777)) - -* test(getters): add timeout for wait to ready ([`bd18ef4`](https://github.com/taskforcesh/bullmq/commit/bd18ef43913aa956c61b399cea81640cbb11f14d)) - -* test(getters): fix getWorkers() test for shared connections ([`4cbc9ca`](https://github.com/taskforcesh/bullmq/commit/4cbc9cacd994931750aa93699408e4c6e0e27c6f)) - -### Unknown - -* Merge pull request #1706 from taskforcesh/feat/simplified-lock-extension - -feat/several-memory-optimizations ([`0881eb1`](https://github.com/taskforcesh/bullmq/commit/0881eb1345d7c50da181b1ba73162174da50db53)) - -* Merge branch 'feat/simplified-lock-extension' of https://github.com/taskforcesh/bullmq into feat/simplified-lock-extension ([`3a8293a`](https://github.com/taskforcesh/bullmq/commit/3a8293ab5948450ba027dea3c86ce98e5c97411c)) - -* Merge branch 'master' into feat/simplified-lock-extension ([`4284eb9`](https://github.com/taskforcesh/bullmq/commit/4284eb90342efe19e04f547cca6d7586eb646c7b)) - -* GITBOOK-154: No subject ([`bd233a9`](https://github.com/taskforcesh/bullmq/commit/bd233a96f4b47a7565eb908f742a3f1aa694b859)) - -* Merge branch 'master' into feat/simplified-lock-extension ([`b1d2dc8`](https://github.com/taskforcesh/bullmq/commit/b1d2dc8097ec83f8d56bf089ff7a6e0e4ceedcbc)) - -* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`573c6cb`](https://github.com/taskforcesh/bullmq/commit/573c6cbefa91fb0f236ace4d0aeb980640414376)) - - -## v3.9.0 (2023-02-25) - -### Chore - -* chore(release): 3.9.0 [skip ci] - -# [3.9.0](https://github.com/taskforcesh/bullmq/compare/v3.8.0...v3.9.0) (2023-02-25) - -### Features - -* **worker:** add remove on complete and fail options ([#1703](https://github.com/taskforcesh/bullmq/issues/1703)) ([cf13494](https://github.com/taskforcesh/bullmq/commit/cf1349471dcbf0e43feea9972eaa71d2299d619f)) ([`3dc3b55`](https://github.com/taskforcesh/bullmq/commit/3dc3b55b787b49701dcf7aa74e85a216c774c231)) - -* chore(deps): bump json5 from 1.0.1 to 1.0.2 (#1613) ([`b58c6f3`](https://github.com/taskforcesh/bullmq/commit/b58c6f302b363720c2004dd2c1f7a7dfecf6640b)) - -### Feature - -* feat(worker): add remove on complete and fail options (#1703) ([`cf13494`](https://github.com/taskforcesh/bullmq/commit/cf1349471dcbf0e43feea9972eaa71d2299d619f)) - - -## v3.8.0 (2023-02-23) - -### Chore - -* chore(release): 3.8.0 [skip ci] - -# [3.8.0](https://github.com/taskforcesh/bullmq/compare/v3.7.2...v3.8.0) (2023-02-23) - -### Bug Fixes - -* **worker:** run stalled check directly first time ([f71ec03](https://github.com/taskforcesh/bullmq/commit/f71ec03111a22897cbf2fad39073185e4aeac6d6)) - -### Features - -* **worker:** add a public method to run the stalled checker ([3159266](https://github.com/taskforcesh/bullmq/commit/3159266ccb002d4fc71b7ee7ac63c465c536dbd1)) -* **worker:** add support to disable stalled checks ([49e860c](https://github.com/taskforcesh/bullmq/commit/49e860c6675853971e992c2945b445660504e3b2)) ([`aa74246`](https://github.com/taskforcesh/bullmq/commit/aa742463f7dfbec433d166a42dfefd5b9248a544)) - -### Documentation - -* docs(worker): improve options documentation ([`47740b8`](https://github.com/taskforcesh/bullmq/commit/47740b86332036c7c9a4cc80473544618b0454aa)) - -### Feature - -* feat(worker): add a public method to run the stalled checker ([`3159266`](https://github.com/taskforcesh/bullmq/commit/3159266ccb002d4fc71b7ee7ac63c465c536dbd1)) - -* feat(worker): add support to disable stalled checks ([`49e860c`](https://github.com/taskforcesh/bullmq/commit/49e860c6675853971e992c2945b445660504e3b2)) - -### Fix - -* fix(worker): run stalled check directly first time ([`f71ec03`](https://github.com/taskforcesh/bullmq/commit/f71ec03111a22897cbf2fad39073185e4aeac6d6)) - -### Test - -* test(worker): renew lock high concurrency ([`5d25a37`](https://github.com/taskforcesh/bullmq/commit/5d25a37ecba93ace3114da95ca9cbc40145349bb)) - -### Unknown - -* GITBOOK-153: No subject ([`a185d5e`](https://github.com/taskforcesh/bullmq/commit/a185d5e551162302a1236d9c52e4681d5b5ae2f5)) - - -## v3.7.2 (2023-02-23) - -### Chore - -* chore(release): 3.7.2 [skip ci] - -## [3.7.2](https://github.com/taskforcesh/bullmq/compare/v3.7.1...v3.7.2) (2023-02-23) - -### Bug Fixes - -* **worker:** restore failed event job parameter typing ([#1707](https://github.com/taskforcesh/bullmq/issues/1707)) ([44c2203](https://github.com/taskforcesh/bullmq/commit/44c2203ab65d406be9a913254600fe07c83e62d5)) ([`3ecb8f7`](https://github.com/taskforcesh/bullmq/commit/3ecb8f7fbb736e223aa73bbbf8f07629892902fa)) - -* chore(deps): lock file maintenance ([`0c85108`](https://github.com/taskforcesh/bullmq/commit/0c85108997b706ff2c52643d5752b0ed2e9c76a3)) - -### Feature - -* feat(worker): simplify lock extension to one call independent of concurrency ([`ebf1aeb`](https://github.com/taskforcesh/bullmq/commit/ebf1aeb2400383d0ae90ab68aeb4822aea03ba44)) - -### Fix - -* fix(worker): restore failed event job parameter typing (#1707) ([`44c2203`](https://github.com/taskforcesh/bullmq/commit/44c2203ab65d406be9a913254600fe07c83e62d5)) - -### Unknown - -* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`cc35401`](https://github.com/taskforcesh/bullmq/commit/cc35401963532293dd222defcb20864bab12c5f9)) - - -## v3.7.1 (2023-02-22) - -### Chore - -* chore(release): 3.7.1 [skip ci] - -## [3.7.1](https://github.com/taskforcesh/bullmq/compare/v3.7.0...v3.7.1) (2023-02-22) - -### Bug Fixes - -* **worker:** failed event receives an optional job parameter ([#1702](https://github.com/taskforcesh/bullmq/issues/1702)) fixes [#1690](https://github.com/taskforcesh/bullmq/issues/1690) ([6009906](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) - -### Features - -* **python:** add retryJobs method ([#1688](https://github.com/taskforcesh/bullmq/issues/1688)) ([2745327](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) -* **python:** add trimEvents ([#1695](https://github.com/taskforcesh/bullmq/issues/1695)) ([ca48163](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) ([`e465b55`](https://github.com/taskforcesh/bullmq/commit/e465b5574a19013868250658740b0fdda1d2c6f6)) - -* chore(deps): update dependency virtualenv to v20.19.0 (#1686) ([`2397d00`](https://github.com/taskforcesh/bullmq/commit/2397d0068f9fdf4036abddb0aca205f9e5ca8d54)) - -### Feature - -* feat(python): add trimEvents (#1695) ([`ca48163`](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) - -* feat(python): add retryJobs method (#1688) ([`2745327`](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) - -### Fix - -* fix(worker): failed event receives an optional job parameter (#1702) fixes #1690 ([`6009906`](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) - - -## v3.7.0 (2023-02-16) - -### Chore - -* chore(release): 3.7.0 [skip ci] - -# [3.7.0](https://github.com/taskforcesh/bullmq/compare/v3.6.6...v3.7.0) (2023-02-16) - -### Features - -* initial python package ([#1673](https://github.com/taskforcesh/bullmq/issues/1673)) ([a97b22f](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) ([`3b63c3e`](https://github.com/taskforcesh/bullmq/commit/3b63c3e629c1d63b6692f823fd83888f60a3a834)) - -* chore: prevent npm releases from python changes ([`3c2dacb`](https://github.com/taskforcesh/bullmq/commit/3c2dacb0952190afdf9d7262502c7df6dd1376c4)) - -* chore: remove unneeded argument ([`cac6f02`](https://github.com/taskforcesh/bullmq/commit/cac6f026b906274cba02e601f7496bfcfb42b18d)) - -* chore: remove unneeded argument ([`49bb158`](https://github.com/taskforcesh/bullmq/commit/49bb158daac81c6a84101e2b10e92da275e89031)) - -### Feature - -* feat: initial python package (#1673) - -* feat: initial python package - -* chore: correct python actions - -* style: delete white spaces - -* feat(python): add isPaused method - -* chore: add missing async - -* feat(python): add more features to the python package - -* chore: avoid trigger npm releases for python changes - -* chore(python): better module handling - -* fix(python): some lint errors - ---------- - -Co-authored-by: rogger andrÊ valverde flores <rogger.valverde@uni.pe> ([`a97b22f`](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) - -### Unknown - -* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`6e1cb47`](https://github.com/taskforcesh/bullmq/commit/6e1cb4722414be7fee485d5bc0cbdbc703c8a821)) - -* GITBOOK-152: No subject ([`af77b92`](https://github.com/taskforcesh/bullmq/commit/af77b92fa903c36c72ad18df97b9a4a22eebe88e)) - - -## v3.6.6 (2023-02-15) - -### Chore - -* chore(release): 3.6.6 [skip ci] - -## [3.6.6](https://github.com/taskforcesh/bullmq/compare/v3.6.5...v3.6.6) (2023-02-15) - -### Bug Fixes - -* **job:** check jobKey when saving stacktrace ([#1681](https://github.com/taskforcesh/bullmq/issues/1681)) fixes [#1676](https://github.com/taskforcesh/bullmq/issues/1676) ([1856c76](https://github.com/taskforcesh/bullmq/commit/1856c7684c377ca4fd36294cca8e128404be27b8)) ([`488f943`](https://github.com/taskforcesh/bullmq/commit/488f9437977f9aeb5a03b96a41dbb664dbfe2775)) - -* chore(deps): lock file maintenance (#1657) ([`762fd28`](https://github.com/taskforcesh/bullmq/commit/762fd28e8a64448c7cd054fac3507cefeecebf40)) - -### Fix - -* fix(job): check jobKey when saving stacktrace (#1681) fixes #1676 ([`1856c76`](https://github.com/taskforcesh/bullmq/commit/1856c7684c377ca4fd36294cca8e128404be27b8)) - - -## v3.6.5 (2023-02-11) - -### Chore - -* chore(release): 3.6.5 [skip ci] - -## [3.6.5](https://github.com/taskforcesh/bullmq/compare/v3.6.4...v3.6.5) (2023-02-11) - -### Bug Fixes - -* infinite worker process spawned for invalid JS file ([a445ba8](https://github.com/taskforcesh/bullmq/commit/a445ba8b7a261b370dec7d88091ae5f5af8b2728)) ([`dfa431e`](https://github.com/taskforcesh/bullmq/commit/dfa431ebb22cebbf85247abcf8226946ad297ec5)) - -* chore: update bug template ([`f9e6ad3`](https://github.com/taskforcesh/bullmq/commit/f9e6ad3fac19c452ecab124a026244fe57b089e1)) - -* chore: add feature issue template ([`aca0371`](https://github.com/taskforcesh/bullmq/commit/aca03718275c2369bc0c36e5cfad093b82db4e52)) - -* chore: add issue template for bugs ([`327141c`](https://github.com/taskforcesh/bullmq/commit/327141ccae05b233bbb64f263fb9a34e50f8dfdc)) - -* chore(summary): remove duplicated nestjs section ([`3860d7c`](https://github.com/taskforcesh/bullmq/commit/3860d7cdf3c4dad5242b518ad57eaec5ec7981b3)) - -### Documentation - -* docs(COC): update contact email ([`798e9cc`](https://github.com/taskforcesh/bullmq/commit/798e9cc1df4dcfa9d825e293aa642542b805657c)) - -* docs: add code of conduct ([`3caec65`](https://github.com/taskforcesh/bullmq/commit/3caec65a86ca7c9e9ced92c379f85b9f5407d850)) - -* docs(connections): make keyPrefix warning more pronounced (#1679) ([`422e9fc`](https://github.com/taskforcesh/bullmq/commit/422e9fcbcdf014c14c65b1811b3a8000230c1a91)) - -* docs(nestjs): add flow producer documentation (#1674) ([`6dc75a3`](https://github.com/taskforcesh/bullmq/commit/6dc75a3233de5c702e5dec10a8d202259b5e8637)) - -* docs(stalled): fix typos (#1672) ([`31c6896`](https://github.com/taskforcesh/bullmq/commit/31c6896b816776404e160b4b2bbe45e03fcc220a)) - -### Fix - -* fix: infinite worker process spawned for invalid JS file ([`a445ba8`](https://github.com/taskforcesh/bullmq/commit/a445ba8b7a261b370dec7d88091ae5f5af8b2728)) - -### Test - -* test(stalled): close queueEvents at the end of test ([`42be85b`](https://github.com/taskforcesh/bullmq/commit/42be85bf339615c9cd6ec6a92e3d1cc11f030228)) - -* test(stalled): add test for maxStalledCount > 0 ([`6c10fae`](https://github.com/taskforcesh/bullmq/commit/6c10fae32a08bec016d895aab80576e262bae882)) - -* test(stalled): make sure Redis is clean of failed jobs ([`99ce98d`](https://github.com/taskforcesh/bullmq/commit/99ce98de8e384082aacaf6d2278c3f638eaa0146)) - - -## v3.6.4 (2023-02-09) - -### Chore - -* chore(release): 3.6.4 [skip ci] - -## [3.6.4](https://github.com/taskforcesh/bullmq/compare/v3.6.3...v3.6.4) (2023-02-09) - -### Bug Fixes - -* add a maximum block time ([1a2618b](https://github.com/taskforcesh/bullmq/commit/1a2618bc5473288a62dddb85e3cb78d6cdb4f39f)) ([`00ec4e8`](https://github.com/taskforcesh/bullmq/commit/00ec4e8d2d741df1246fb4e90ff876377fad7d16)) - -### Documentation - -* docs(nestjs-bullmq-pro): add registerFlowProducer example ([`77ca996`](https://github.com/taskforcesh/bullmq/commit/77ca996d34652e75b4fed5475c871c830a3d00f3)) - -* docs(nestjs-bullmq-pro): add producers section (#1661) ([`94f2fd7`](https://github.com/taskforcesh/bullmq/commit/94f2fd749c132b463816a04727269c9fca32498c)) - -### Fix - -* fix: add a maximum block time ([`1a2618b`](https://github.com/taskforcesh/bullmq/commit/1a2618bc5473288a62dddb85e3cb78d6cdb4f39f)) - -### Unknown - -* GITBOOK-150: No subject ([`6ac5d0a`](https://github.com/taskforcesh/bullmq/commit/6ac5d0a5103f262a0a273265b3a72981019973d0)) - -* GITBOOK-149: No subject ([`4e6c3bd`](https://github.com/taskforcesh/bullmq/commit/4e6c3bdab20f7d18a13ac486607cbf00b279722f)) - - -## v3.6.3 (2023-02-07) - -### Chore - -* chore(release): 3.6.3 [skip ci] - -## [3.6.3](https://github.com/taskforcesh/bullmq/compare/v3.6.2...v3.6.3) (2023-02-07) - -### Bug Fixes - -* **master:** copy type declaration ([23ade6e](https://github.com/taskforcesh/bullmq/commit/23ade6e3e45df14bd3fbc2c3e7be47307b642872)) ([`bf8589a`](https://github.com/taskforcesh/bullmq/commit/bf8589ae1b95b705e921f597644becdd1752b04f)) - -### Documentation - -* docs(nestjs): add nestjs-bullmq-pro changelog (#1655) ([`d681c22`](https://github.com/taskforcesh/bullmq/commit/d681c22982d1e5ca0d65fc2dd9e26de6f4370015)) - -### Fix - -* fix(master): copy type declaration ([`23ade6e`](https://github.com/taskforcesh/bullmq/commit/23ade6e3e45df14bd3fbc2c3e7be47307b642872)) - - -## v3.6.2 (2023-02-03) - -### Build - -* build(types): build types only once (#1652) ([`a104eb1`](https://github.com/taskforcesh/bullmq/commit/a104eb15adada64e3a2e79525baa335a6f2fa4d1)) - -### Chore - -* chore(release): 3.6.2 [skip ci] - -## [3.6.2](https://github.com/taskforcesh/bullmq/compare/v3.6.1...v3.6.2) (2023-02-03) - -### Bug Fixes - -* **redis:** increase minimum default retry time ([d521531](https://github.com/taskforcesh/bullmq/commit/d521531e22ba9eda8ad8d6e8eddf450fdc3f50f4)) ([`b08f95d`](https://github.com/taskforcesh/bullmq/commit/b08f95d9b87ec03b645af866ac869f771a42e1f1)) - -* chore: upgrade ioredis ([`e298c4e`](https://github.com/taskforcesh/bullmq/commit/e298c4e28f44f8c52ad4b85a1cf50870716ae479)) - -* chore(deps): update github/codeql-action digest to 3ebbd71 ([`f31ad20`](https://github.com/taskforcesh/bullmq/commit/f31ad20266cae66841074d6fb88309c4428108d7)) - -### Documentation - -* docs(readme): use foo as queueName in example (#1651) ([`e3ba746`](https://github.com/taskforcesh/bullmq/commit/e3ba7465fa887afff99281167663f69e861feefc)) - -### Fix - -* fix(redis): increase minimum default retry time ([`d521531`](https://github.com/taskforcesh/bullmq/commit/d521531e22ba9eda8ad8d6e8eddf450fdc3f50f4)) - -### Unknown - -* GitBook: [#148] No subject ([`26a88a3`](https://github.com/taskforcesh/bullmq/commit/26a88a34abab10af9ebd4f7f22aefe5704f15c2d)) - -* GitBook: [#147] No subject ([`e625fbc`](https://github.com/taskforcesh/bullmq/commit/e625fbce30171acf5b88a1ac762bee2862dfc2f2)) - -* GitBook: [#146] No subject ([`fdf04be`](https://github.com/taskforcesh/bullmq/commit/fdf04be20acd72491571155b0bc022b6925f2fc0)) - -* GitBook: [#144] No subject ([`09b4694`](https://github.com/taskforcesh/bullmq/commit/09b4694e718a81aeb9dfd6048e016f6d48ca9209)) - -* GitBook: [#143] No subject ([`9c1758e`](https://github.com/taskforcesh/bullmq/commit/9c1758ea8e3b1ba7e054694f930648f408416b11)) - -* GitBook: [#141] No subject ([`2f81b39`](https://github.com/taskforcesh/bullmq/commit/2f81b397c010bd7305f5369b82f90a32b32c4ea8)) - -* GitBook: [#140] No subject ([`35d0147`](https://github.com/taskforcesh/bullmq/commit/35d01471cb63f3261527d10eebada67f0e4dbf9f)) - -* GitBook: [#139] No subject ([`a485b55`](https://github.com/taskforcesh/bullmq/commit/a485b55b9e028df57cb3dd006d683e88338ae10e)) - - -## v3.6.1 (2023-01-31) - -### Chore - -* chore(release): 3.6.1 [skip ci] - -## [3.6.1](https://github.com/taskforcesh/bullmq/compare/v3.6.0...v3.6.1) (2023-01-31) - -### Bug Fixes - -* **connection:** apply console.warn in noeviction message ([95f171c](https://github.com/taskforcesh/bullmq/commit/95f171cbc8cdd7d04865618b715dd21229f36a4a)) ([`75092f5`](https://github.com/taskforcesh/bullmq/commit/75092f50169154bfbbc704d8a1971b2ac0a03187)) - -### Fix - -* fix(connection): apply console.warn in noeviction message ([`95f171c`](https://github.com/taskforcesh/bullmq/commit/95f171cbc8cdd7d04865618b715dd21229f36a4a)) - - -## v3.6.0 (2023-01-31) - -### Chore - -* chore(release): 3.6.0 [skip ci] - -# [3.6.0](https://github.com/taskforcesh/bullmq/compare/v3.5.11...v3.6.0) (2023-01-31) - -### Features - -* **job:** allow clearing job's log ([#1600](https://github.com/taskforcesh/bullmq/issues/1600)) ([0ded2d7](https://github.com/taskforcesh/bullmq/commit/0ded2d7709322bf105e0decac44d801ece5615f2)) ([`ce19e6d`](https://github.com/taskforcesh/bullmq/commit/ce19e6db253e03d5817b555abaa773a7bdf06171)) - -* chore(deps): lock file maintenance ([`35bd68b`](https://github.com/taskforcesh/bullmq/commit/35bd68b0214e27399e71d63db97a55d0f42936d0)) - -* chore(deps): update actions/checkout digest to ac59398 (#1582) ([`acebda8`](https://github.com/taskforcesh/bullmq/commit/acebda86b1e40e0a04dd3784b5fc3b7f1a662641)) - -* chore(deps): update peaceiris/actions-gh-pages digest to bd8c6b0 (#1632) ([`84e057e`](https://github.com/taskforcesh/bullmq/commit/84e057e3a84518be62607b8d8f9a7866aa3cd306)) - -### Documentation - -* docs(nestjs): add nestjs-bullmq-pro api reference (#1646) ([`3e8fb1a`](https://github.com/taskforcesh/bullmq/commit/3e8fb1a8fa7a35ec2418b7326b139d73baed23cd)) - -### Feature - -* feat(job): allow clearing job's log (#1600) ([`0ded2d7`](https://github.com/taskforcesh/bullmq/commit/0ded2d7709322bf105e0decac44d801ece5615f2)) - -### Unknown - -* GitBook: [#138] No subject ([`cb6bf20`](https://github.com/taskforcesh/bullmq/commit/cb6bf2005d86c138126d1fe85caa9db05fa68551)) - - -## v3.5.11 (2023-01-27) - -### Chore - -* chore(release): 3.5.11 [skip ci] - -## [3.5.11](https://github.com/taskforcesh/bullmq/compare/v3.5.10...v3.5.11) (2023-01-27) - -### Bug Fixes - -* **error:** remove global prototype toJSON ([#1642](https://github.com/taskforcesh/bullmq/issues/1642)) fixes [#1414](https://github.com/taskforcesh/bullmq/issues/1414) ([d4e7108](https://github.com/taskforcesh/bullmq/commit/d4e7108a37aeabdd3085a26c9daf09cea5976f3e)) ([`94b293e`](https://github.com/taskforcesh/bullmq/commit/94b293e6011bed3f8b6905b202f7a45d0d1d863b)) - -### Fix - -* fix(error): remove global prototype toJSON (#1642) fixes #1414 ([`d4e7108`](https://github.com/taskforcesh/bullmq/commit/d4e7108a37aeabdd3085a26c9daf09cea5976f3e)) - - -## v3.5.10 (2023-01-24) - -### Chore - -* chore(release): 3.5.10 [skip ci] - -## [3.5.10](https://github.com/taskforcesh/bullmq/compare/v3.5.9...v3.5.10) (2023-01-24) - -### Bug Fixes - -* **move-to-finished:** return correct delayUntil ([#1643](https://github.com/taskforcesh/bullmq/issues/1643)) ([c4bf9fa](https://github.com/taskforcesh/bullmq/commit/c4bf9fa6563eda1630d8eb2189b16e9324b01c7f)) ([`c66c03d`](https://github.com/taskforcesh/bullmq/commit/c66c03d377d6b5363231ec65117a8b045f136f86)) - -### Documentation - -* docs(nestjs): add example link in nestjs-bullmq-pro ([`a444934`](https://github.com/taskforcesh/bullmq/commit/a4449342166e0194e1a9010e1771d90fa5a02e35)) - -### Fix - -* fix(move-to-finished): return correct delayUntil (#1643) ([`c4bf9fa`](https://github.com/taskforcesh/bullmq/commit/c4bf9fa6563eda1630d8eb2189b16e9324b01c7f)) - - -## v3.5.9 (2023-01-19) - -### Chore - -* chore(release): 3.5.9 [skip ci] - -## [3.5.9](https://github.com/taskforcesh/bullmq/compare/v3.5.8...v3.5.9) (2023-01-19) - -### Bug Fixes - -* **worker:** fix delayed jobs with concurrency fixes [#1627](https://github.com/taskforcesh/bullmq/issues/1627) ([99a8e6d](https://github.com/taskforcesh/bullmq/commit/99a8e6d3a339be51fb46f69c8afac4ecdebff6d3)) ([`3714760`](https://github.com/taskforcesh/bullmq/commit/3714760ee4be056826e66baaec62bb97d60a53e3)) - -### Documentation - -* docs(bullmq-pro): add nestjs-bullmq-pro module documentation (#1636) ([`9a0a83e`](https://github.com/taskforcesh/bullmq/commit/9a0a83ed97b3093451c6487cd59d515a9c676713)) - -### Fix - -* fix(worker): fix delayed jobs with concurrency fixes #1627 ([`99a8e6d`](https://github.com/taskforcesh/bullmq/commit/99a8e6d3a339be51fb46f69c8afac4ecdebff6d3)) - -### Test - -* test: reuse queue instance from test suite ([`f50910b`](https://github.com/taskforcesh/bullmq/commit/f50910bdc9fa1f4bbcd328fb8ffab252d5d0a9aa)) - - -## v3.5.8 (2023-01-18) - -### Chore - -* chore(release): 3.5.8 [skip ci] - -## [3.5.8](https://github.com/taskforcesh/bullmq/compare/v3.5.7...v3.5.8) (2023-01-18) - -### Bug Fixes - -* **move-to-active:** delete marker when it is moved to active ([#1634](https://github.com/taskforcesh/bullmq/issues/1634)) ([ad1fcea](https://github.com/taskforcesh/bullmq/commit/ad1fcea4500d4ceed51d5d5b0a03dbb5e1735a42)) ([`5c761ae`](https://github.com/taskforcesh/bullmq/commit/5c761ae994c48402b27a6b3530a882b0720e4025)) - -### Fix - -* fix(move-to-active): delete marker when it is moved to active (#1634) ([`ad1fcea`](https://github.com/taskforcesh/bullmq/commit/ad1fcea4500d4ceed51d5d5b0a03dbb5e1735a42)) - - -## v3.5.7 (2023-01-17) - -### Chore - -* chore(release): 3.5.7 [skip ci] - -## [3.5.7](https://github.com/taskforcesh/bullmq/compare/v3.5.6...v3.5.7) (2023-01-17) - -### Bug Fixes - -* **move-to-active:** validate next marker and return delayUntil ([#1630](https://github.com/taskforcesh/bullmq/issues/1630)) ([3cd3305](https://github.com/taskforcesh/bullmq/commit/3cd33052fc711a9ba560c9a431630be5cdd02193)) ([`f2c1775`](https://github.com/taskforcesh/bullmq/commit/f2c1775dc150e3f1fd972beed39dcdd2b12e8ea1)) - -* chore(deps): bump luxon from 3.1.1 to 3.2.1 (#1621) ([`b203d0f`](https://github.com/taskforcesh/bullmq/commit/b203d0f80ff020242ee94e61899f7510e7d18b4d)) - -### Documentation - -* docs(bullmq-pro): add 5.1.11 changelog ([`d33baf8`](https://github.com/taskforcesh/bullmq/commit/d33baf8d7e37c7f535215400229f32a1f238ed0d)) - -### Fix - -* fix(move-to-active): validate next marker and return delayUntil (#1630) ([`3cd3305`](https://github.com/taskforcesh/bullmq/commit/3cd33052fc711a9ba560c9a431630be5cdd02193)) - - -## v3.5.6 (2023-01-13) - -### Chore - -* chore(release): 3.5.6 [skip ci] - -## [3.5.6](https://github.com/taskforcesh/bullmq/compare/v3.5.5...v3.5.6) (2023-01-13) - -### Bug Fixes - -* **worker:** add max concurrency from the beginning ([#1597](https://github.com/taskforcesh/bullmq/issues/1597)) fixes [#1589](https://github.com/taskforcesh/bullmq/issues/1589) ([6f49db3](https://github.com/taskforcesh/bullmq/commit/6f49db3fb15119d13f99cd83d49f2a7bdcb614cd)) ([`4de7f3c`](https://github.com/taskforcesh/bullmq/commit/4de7f3cf740ad1f96f07bdfcd50e372257df4514)) - -### Fix - -* fix(worker): add max concurrency from the beginning (#1597) fixes #1589 ([`6f49db3`](https://github.com/taskforcesh/bullmq/commit/6f49db3fb15119d13f99cd83d49f2a7bdcb614cd)) - -### Test - -* test(rate-limit): add flow case ([`cc631a6`](https://github.com/taskforcesh/bullmq/commit/cc631a681a501de16034b81389bd57b89169bf81)) - - -## v3.5.5 (2023-01-10) - -### Chore - -* chore(release): 3.5.5 [skip ci] - -## [3.5.5](https://github.com/taskforcesh/bullmq/compare/v3.5.4...v3.5.5) (2023-01-10) - -### Bug Fixes - -* circular references ([#1622](https://github.com/taskforcesh/bullmq/issues/1622)) ([f607ec7](https://github.com/taskforcesh/bullmq/commit/f607ec7530fb4430e8cab7ed325583bd9d171ccf)) ([`5a78f58`](https://github.com/taskforcesh/bullmq/commit/5a78f58ead461192069e78bf1ee34d84012e8077)) - -### Fix - -* fix: circular references (#1622) ([`f607ec7`](https://github.com/taskforcesh/bullmq/commit/f607ec7530fb4430e8cab7ed325583bd9d171ccf)) - - -## v3.5.4 (2023-01-09) - -### Chore - -* chore(release): 3.5.4 [skip ci] - -## [3.5.4](https://github.com/taskforcesh/bullmq/compare/v3.5.3...v3.5.4) (2023-01-09) - -### Bug Fixes - -* [#1603](https://github.com/taskforcesh/bullmq/issues/1603) performance issues in `remove()` ([#1607](https://github.com/taskforcesh/bullmq/issues/1607)) ([2541215](https://github.com/taskforcesh/bullmq/commit/2541215bcf81dcd52eaefa02530c3812a5135fbf)) ([`9fdac55`](https://github.com/taskforcesh/bullmq/commit/9fdac5578795900b85c99b4ef8c2e71583802417)) - -### Fix - -* fix: #1603 performance issues in `remove()` (#1607) ([`2541215`](https://github.com/taskforcesh/bullmq/commit/2541215bcf81dcd52eaefa02530c3812a5135fbf)) - - -## v3.5.3 (2023-01-07) - -### Chore - -* chore(release): 3.5.3 [skip ci] - -## [3.5.3](https://github.com/taskforcesh/bullmq/compare/v3.5.2...v3.5.3) (2023-01-07) - -### Bug Fixes - -* **delayed:** remove marker after being consumed ([#1620](https://github.com/taskforcesh/bullmq/issues/1620)) fixes [#1615](https://github.com/taskforcesh/bullmq/issues/1615) ([9fce0f0](https://github.com/taskforcesh/bullmq/commit/9fce0f05e5acc1918a276b03e8cb9c16083cb509)) ([`2061624`](https://github.com/taskforcesh/bullmq/commit/2061624f0baebd5e5018136934346b65750c0323)) - -* chore(deps): update peaceiris/actions-gh-pages digest to 64b46b4 (#1619) ([`4a6db4d`](https://github.com/taskforcesh/bullmq/commit/4a6db4db9bfcbe4a67b07b25b389f5bd1bee51ca)) - -### Documentation - -* docs(guide): nestjs section (#1610) ([`1276e2b`](https://github.com/taskforcesh/bullmq/commit/1276e2bc62e39db3b24e0ba3f0824904ca4b595e)) - -### Fix - -* fix(delayed): remove marker after being consumed (#1620) fixes #1615 ([`9fce0f0`](https://github.com/taskforcesh/bullmq/commit/9fce0f05e5acc1918a276b03e8cb9c16083cb509)) - - -## v3.5.2 (2023-01-04) - -### Chore - -* chore(release): 3.5.2 [skip ci] - -## [3.5.2](https://github.com/taskforcesh/bullmq/compare/v3.5.1...v3.5.2) (2023-01-04) - -### Performance Improvements - -* **get-dependencies:** replace slow object destructuring with single object ([#1612](https://github.com/taskforcesh/bullmq/issues/1612)) ([621748e](https://github.com/taskforcesh/bullmq/commit/621748ec7727b46ce57eb9d2b46ef981874cdf4c)) ([`5b34b8b`](https://github.com/taskforcesh/bullmq/commit/5b34b8ba09e14bc78aeed03824b4fbd419e0e18e)) - -### Documentation - -* docs(readme): add nestjs module ([`2dad0d4`](https://github.com/taskforcesh/bullmq/commit/2dad0d4708574704d7f59bb048334957bb2474fe)) - -* docs(bullmq-pro): update changelog to version 5.1.10 ([`6f995f7`](https://github.com/taskforcesh/bullmq/commit/6f995f7b11a918a91108d18cb58d151a428da370)) - -### Performance - -* perf(get-dependencies): replace slow object destructuring with single object (#1612) ([`621748e`](https://github.com/taskforcesh/bullmq/commit/621748ec7727b46ce57eb9d2b46ef981874cdf4c)) - -### Test - -* test(connection): expect ioredis prefix errors (#1601) ([`d1b6920`](https://github.com/taskforcesh/bullmq/commit/d1b69204ddede7c80c9e327228d39506c60a797d)) - - -## v3.5.1 (2022-12-23) - -### Chore - -* chore(release): 3.5.1 [skip ci] - -## [3.5.1](https://github.com/taskforcesh/bullmq/compare/v3.5.0...v3.5.1) (2022-12-23) - -### Bug Fixes - -* **connection:** throw exception if using keyPrefix in ioredis ([eb6a130](https://github.com/taskforcesh/bullmq/commit/eb6a1305541547725e1717eefe2b678bc445f4d0)) -* **connection:** use includes to check for upstash more reliably ([12efb5c](https://github.com/taskforcesh/bullmq/commit/12efb5c539cb6f031ea6f3a80e4128d2e556e627)) ([`1e8786a`](https://github.com/taskforcesh/bullmq/commit/1e8786a8dd2f08de6f84e08aeb252b304ebbca73)) - -### Fix - -* fix(connection): throw exception if using keyPrefix in ioredis ([`eb6a130`](https://github.com/taskforcesh/bullmq/commit/eb6a1305541547725e1717eefe2b678bc445f4d0)) - -* fix(connection): use includes to check for upstash more reliably ([`12efb5c`](https://github.com/taskforcesh/bullmq/commit/12efb5c539cb6f031ea6f3a80e4128d2e556e627)) - -### Test - -* test(connection): add test to verify cluster connection using dsn strings ([`a361a8e`](https://github.com/taskforcesh/bullmq/commit/a361a8e77766e1acb31151dc44b96eb4bff65386)) - - -## v3.5.0 (2022-12-20) - -### Chore - -* chore(release): 3.5.0 [skip ci] - -# [3.5.0](https://github.com/taskforcesh/bullmq/compare/v3.4.2...v3.5.0) (2022-12-20) - -### Bug Fixes - -* **job:** fetch parent before job moves to complete ([#1580](https://github.com/taskforcesh/bullmq/issues/1580)) ([6a6c0dc](https://github.com/taskforcesh/bullmq/commit/6a6c0dca30bb0a2417e0c62d4c80202c750322dd)) -* **sandbox:** throw error when no exported function ([#1588](https://github.com/taskforcesh/bullmq/issues/1588)) fixes [#1587](https://github.com/taskforcesh/bullmq/issues/1587) ([c031891](https://github.com/taskforcesh/bullmq/commit/c03189184c8eeeb324f005b86e93d114abbe2154)) - -### Features - -* **queue:** add getJobState method ([#1593](https://github.com/taskforcesh/bullmq/issues/1593)) ref [#1532](https://github.com/taskforcesh/bullmq/issues/1532) ([b741e84](https://github.com/taskforcesh/bullmq/commit/b741e8456f262b51aa7c68f571c76a3c54d02d37)) ([`ffb0851`](https://github.com/taskforcesh/bullmq/commit/ffb08512271be681204a803508cd4d5ece0bb71b)) - -* chore(deps): lock file maintenance (#1568) ([`a426e49`](https://github.com/taskforcesh/bullmq/commit/a426e499299f9782128106127285ddba2444ff58)) - -### Documentation - -* docs(bullmq): add manual rate-limit section (#1590) ([`3fa5d33`](https://github.com/taskforcesh/bullmq/commit/3fa5d33861e99c1405a576b5ef7171daae4c16bb)) - -### Feature - -* feat(queue): add getJobState method (#1593) ref #1532 ([`b741e84`](https://github.com/taskforcesh/bullmq/commit/b741e8456f262b51aa7c68f571c76a3c54d02d37)) - -### Fix - -* fix(sandbox): throw error when no exported function (#1588) fixes #1587 ([`c031891`](https://github.com/taskforcesh/bullmq/commit/c03189184c8eeeb324f005b86e93d114abbe2154)) - -* fix(job): fetch parent before job moves to complete (#1580) ([`6a6c0dc`](https://github.com/taskforcesh/bullmq/commit/6a6c0dca30bb0a2417e0c62d4c80202c750322dd)) - - -## v3.4.2 (2022-12-15) - -### Chore - -* chore(release): 3.4.2 [skip ci] - -## [3.4.2](https://github.com/taskforcesh/bullmq/compare/v3.4.1...v3.4.2) (2022-12-15) - -### Performance Improvements - -* **counts:** delete delayed marker when needed ([#1583](https://github.com/taskforcesh/bullmq/issues/1583)) ([cc26f1c](https://github.com/taskforcesh/bullmq/commit/cc26f1cd550de76c7588d3a98187b80ee78c40c4)) -* **get-children-values:** replace slow object destructuring with single object ([#1586](https://github.com/taskforcesh/bullmq/issues/1586)) ([857d403](https://github.com/taskforcesh/bullmq/commit/857d40377a6eb2c0101e6d16d9085ecd4b52b016)) ([`91bbde9`](https://github.com/taskforcesh/bullmq/commit/91bbde9472ea3b38e1b9ee94ef1ec56733eeb3fa)) - -### Documentation - -* docs: add api references (#1584) ([`a3df041`](https://github.com/taskforcesh/bullmq/commit/a3df04109d64bc2b5de30f7b4fb95d5a836df949)) - -### Performance - -* perf(counts): delete delayed marker when needed (#1583) ([`cc26f1c`](https://github.com/taskforcesh/bullmq/commit/cc26f1cd550de76c7588d3a98187b80ee78c40c4)) - -* perf(get-children-values): replace slow object destructuring with single object (#1586) ([`857d403`](https://github.com/taskforcesh/bullmq/commit/857d40377a6eb2c0101e6d16d9085ecd4b52b016)) - - -## v3.4.1 (2022-12-10) - -### Chore - -* chore(release): 3.4.1 [skip ci] - -## [3.4.1](https://github.com/taskforcesh/bullmq/compare/v3.4.0...v3.4.1) (2022-12-10) - -### Bug Fixes - -* **exponential:** respect exponential backoff delay ([#1581](https://github.com/taskforcesh/bullmq/issues/1581)) ([145dd32](https://github.com/taskforcesh/bullmq/commit/145dd329bb9f8254b404f4c5fbf7a50359202d37)) -* **get-jobs:** filter marker ([#1551](https://github.com/taskforcesh/bullmq/issues/1551)) ([4add0ef](https://github.com/taskforcesh/bullmq/commit/4add0efa7857cc2f7b6d3c0c78a7f82cb7a46933)) ([`df604c4`](https://github.com/taskforcesh/bullmq/commit/df604c48bfeec2b621fd9d52d97b316f477e79a2)) - -### Fix - -* fix(get-jobs): filter marker (#1551) ([`4add0ef`](https://github.com/taskforcesh/bullmq/commit/4add0efa7857cc2f7b6d3c0c78a7f82cb7a46933)) - -* fix(exponential): respect exponential backoff delay (#1581) ([`145dd32`](https://github.com/taskforcesh/bullmq/commit/145dd329bb9f8254b404f4c5fbf7a50359202d37)) - -### Test - -* test(repeat): fix flaky tests (#1578) ([`8f9eefd`](https://github.com/taskforcesh/bullmq/commit/8f9eefda9f932535de8e452c926029eb6fdae435)) - - -## v3.4.0 (2022-12-09) - -### Chore - -* chore(release): 3.4.0 [skip ci] - -# [3.4.0](https://github.com/taskforcesh/bullmq/compare/v3.3.5...v3.4.0) (2022-12-09) - -### Features - -* **worker:** add ready event for blockingConnection ([#1577](https://github.com/taskforcesh/bullmq/issues/1577)) ([992cc9e](https://github.com/taskforcesh/bullmq/commit/992cc9e9b3046185d3b67f2cc956f30337f458e1)) ([`6d9dada`](https://github.com/taskforcesh/bullmq/commit/6d9dadaedf016267255e2412ff4ca40d44001630)) - -### Feature - -* feat(worker): add ready event for blockingConnection (#1577) ([`992cc9e`](https://github.com/taskforcesh/bullmq/commit/992cc9e9b3046185d3b67f2cc956f30337f458e1)) - - -## v3.3.5 (2022-12-08) - -### Chore - -* chore(release): 3.3.5 [skip ci] - -## [3.3.5](https://github.com/taskforcesh/bullmq/compare/v3.3.4...v3.3.5) (2022-12-08) - -### Bug Fixes - -* **worker:** add token postfix ([#1575](https://github.com/taskforcesh/bullmq/issues/1575)) ([1d3e368](https://github.com/taskforcesh/bullmq/commit/1d3e368021041bb9861761c86fe3e04914b0c52f)) ([`865c9ca`](https://github.com/taskforcesh/bullmq/commit/865c9ca8ce99860a4a0c72b7a2ec4a5733395d10)) - -### Fix - -* fix(worker): add token postfix (#1575) ([`1d3e368`](https://github.com/taskforcesh/bullmq/commit/1d3e368021041bb9861761c86fe3e04914b0c52f)) - - -## v3.3.4 (2022-12-07) - -### Chore - -* chore(release): 3.3.4 [skip ci] - -## [3.3.4](https://github.com/taskforcesh/bullmq/compare/v3.3.3...v3.3.4) (2022-12-07) - -### Bug Fixes - -* **worker:** try catch setname call ([#1576](https://github.com/taskforcesh/bullmq/issues/1576)) fixes [#1574](https://github.com/taskforcesh/bullmq/issues/1574) ([0c42fd8](https://github.com/taskforcesh/bullmq/commit/0c42fd8c07dbac7ace81e97e45440af93fc622a5)) ([`bbe29ee`](https://github.com/taskforcesh/bullmq/commit/bbe29ee8546242a839b41ae0eccd5c9acc592e9a)) - -### Fix - -* fix(worker): try catch setname call (#1576) fixes #1574 ([`0c42fd8`](https://github.com/taskforcesh/bullmq/commit/0c42fd8c07dbac7ace81e97e45440af93fc622a5)) - - -## v3.3.3 (2022-12-07) - -### Chore - -* chore(release): 3.3.3 [skip ci] - -## [3.3.3](https://github.com/taskforcesh/bullmq/compare/v3.3.2...v3.3.3) (2022-12-07) - -### Bug Fixes - -* do not allow move from active to wait if not owner of the job ([dc1a307](https://github.com/taskforcesh/bullmq/commit/dc1a3077d1521c5dc99824a7fc05d17da03906bc)) ([`0f119cb`](https://github.com/taskforcesh/bullmq/commit/0f119cb7eac550ad6a5a08f6561b65a72d06ae91)) - -### Fix - -* fix: do not allow move from active to wait if not owner of the job ([`dc1a307`](https://github.com/taskforcesh/bullmq/commit/dc1a3077d1521c5dc99824a7fc05d17da03906bc)) - - -## v3.3.2 (2022-12-05) - -### Chore - -* chore(release): 3.3.2 [skip ci] - -## [3.3.2](https://github.com/taskforcesh/bullmq/compare/v3.3.1...v3.3.2) (2022-12-05) - -### Bug Fixes - -* floor pexpire to integer ([1d5de42](https://github.com/taskforcesh/bullmq/commit/1d5de425a19ebf879a8f9a7e0543d87a4d358be1)) ([`b469dcc`](https://github.com/taskforcesh/bullmq/commit/b469dcc4bafee0bc21a6fc51772ce958947ce516)) - -### Fix - -* fix: floor pexpire to integer ([`1d5de42`](https://github.com/taskforcesh/bullmq/commit/1d5de425a19ebf879a8f9a7e0543d87a4d358be1)) - - -## v3.3.1 (2022-12-05) - -### Chore - -* chore(release): 3.3.1 [skip ci] - -## [3.3.1](https://github.com/taskforcesh/bullmq/compare/v3.3.0...v3.3.1) (2022-12-05) - -### Bug Fixes - -* **get-workers:** set name when ready event in connection ([#1564](https://github.com/taskforcesh/bullmq/issues/1564)) ([de93c17](https://github.com/taskforcesh/bullmq/commit/de93c172901650e1666c48423a39076f2c7b9c7b)) -* **job:** console warn custom job ids when they represent integers ([#1569](https://github.com/taskforcesh/bullmq/issues/1569)) ([6e677d2](https://github.com/taskforcesh/bullmq/commit/6e677d2800957b368bef4247b8e4328c5758f262)) ([`1e0625e`](https://github.com/taskforcesh/bullmq/commit/1e0625eb72400891b126483e1201431bbb7fd161)) - -### Fix - -* fix(get-workers): set name when ready event in connection (#1564) ([`de93c17`](https://github.com/taskforcesh/bullmq/commit/de93c172901650e1666c48423a39076f2c7b9c7b)) - -* fix(job): console warn custom job ids when they represent integers (#1569) ([`6e677d2`](https://github.com/taskforcesh/bullmq/commit/6e677d2800957b368bef4247b8e4328c5758f262)) - - -## v3.3.0 (2022-12-04) - -### Chore - -* chore(release): 3.3.0 [skip ci] - -# [3.3.0](https://github.com/taskforcesh/bullmq/compare/v3.2.5...v3.3.0) (2022-12-04) - -### Features - -* **queue-events:** support duplicated event ([#1549](https://github.com/taskforcesh/bullmq/issues/1549)) ([18bc4eb](https://github.com/taskforcesh/bullmq/commit/18bc4eb50432f8aa27f2395750a7617317b66ca1)) ([`aa753dd`](https://github.com/taskforcesh/bullmq/commit/aa753dd3680964bf0fe7ab650734c12525020ef2)) - -### Feature - -* feat(queue-events): support duplicated event (#1549) ([`18bc4eb`](https://github.com/taskforcesh/bullmq/commit/18bc4eb50432f8aa27f2395750a7617317b66ca1)) - - -## v3.2.5 (2022-12-04) - -### Chore - -* chore(release): 3.2.5 [skip ci] - -## [3.2.5](https://github.com/taskforcesh/bullmq/compare/v3.2.4...v3.2.5) (2022-12-04) - -### Bug Fixes - -* **add-job:** throw error when jobId represents an integer ([#1556](https://github.com/taskforcesh/bullmq/issues/1556)) ([db617d7](https://github.com/taskforcesh/bullmq/commit/db617d79e8f55b5c9e0df4b6bfd4247612016da1)) ([`75ebd85`](https://github.com/taskforcesh/bullmq/commit/75ebd8558853969df094d8c37b12b66685108eb9)) - -### Fix - -* fix(add-job): throw error when jobId represents an integer (#1556) ([`db617d7`](https://github.com/taskforcesh/bullmq/commit/db617d79e8f55b5c9e0df4b6bfd4247612016da1)) - -### Refactor - -* refactor(lodash): replace flatten and fromPairs functions (#854) ([`34431f9`](https://github.com/taskforcesh/bullmq/commit/34431f90e025cc2d8f0eb88a04c21e4f41d43487)) - - -## v3.2.4 (2022-11-29) - -### Chore - -* chore(release): 3.2.4 [skip ci] - -## [3.2.4](https://github.com/taskforcesh/bullmq/compare/v3.2.3...v3.2.4) (2022-11-29) - -### Bug Fixes - -* **add-job:** do not update job that already exist ([#1550](https://github.com/taskforcesh/bullmq/issues/1550)) ([26f6311](https://github.com/taskforcesh/bullmq/commit/26f6311cd0d2b936e404d0abebca9637f314a209)) ([`4387d0c`](https://github.com/taskforcesh/bullmq/commit/4387d0c959d563eaaba2719d3f9566e992ba0914)) - -* chore(deps): update github/codeql-action digest to 312e093 ([`a64f8b3`](https://github.com/taskforcesh/bullmq/commit/a64f8b38d76a68b52b1a6b6783bdc3fd4593add8)) - -* chore(deps): lock file maintenance ([`b06abd9`](https://github.com/taskforcesh/bullmq/commit/b06abd9eef33fa0a319e03f71d504d9c458f0ad7)) - -### Ci - -* ci: harden release and test permissions (#1554) ([`cc37e76`](https://github.com/taskforcesh/bullmq/commit/cc37e7608cb44c0ee4dd975c48b423ad789fdb6e)) - -### Documentation - -* docs: update BullMQ Pro changelog ([`0dfc2c9`](https://github.com/taskforcesh/bullmq/commit/0dfc2c9b79f13dacc96b5fd9110c5da9c1985cc9)) - -### Fix - -* fix(add-job): do not update job that already exist (#1550) ([`26f6311`](https://github.com/taskforcesh/bullmq/commit/26f6311cd0d2b936e404d0abebca9637f314a209)) - -### Unknown - -* GitBook: [#134] No subject ([`b2841eb`](https://github.com/taskforcesh/bullmq/commit/b2841eb4b12aac0f1aff93746ff5b211d3a48a7e)) - - -## v3.2.3 (2022-11-29) - -### Chore - -* chore(release): 3.2.3 [skip ci] - -## [3.2.3](https://github.com/taskforcesh/bullmq/compare/v3.2.2...v3.2.3) (2022-11-29) - -### Bug Fixes - -* **rate-limit:** delete rateLimiterKey when 0 ([#1553](https://github.com/taskforcesh/bullmq/issues/1553)) ([0b88e5b](https://github.com/taskforcesh/bullmq/commit/0b88e5b94b4a0dc0d4000f7fd4b327f402248ad2)) ([`a6b7498`](https://github.com/taskforcesh/bullmq/commit/a6b74988e38ff74049df9b30215fb6ddab73e844)) - -* chore(deps): lock file maintenance (#1491) ([`e67c057`](https://github.com/taskforcesh/bullmq/commit/e67c0575f855202bad47eb6616c35c07513fa1a7)) - -### Documentation - -* docs: add missing - on param descriptions ([`84c0fe7`](https://github.com/taskforcesh/bullmq/commit/84c0fe7478983bc1d763da1936c5547772ef4d5f)) - -### Fix - -* fix(rate-limit): delete rateLimiterKey when 0 (#1553) ([`0b88e5b`](https://github.com/taskforcesh/bullmq/commit/0b88e5b94b4a0dc0d4000f7fd4b327f402248ad2)) - -### Test - -* test(repeat): fix flaky test ([`b09569b`](https://github.com/taskforcesh/bullmq/commit/b09569b562ae7aba3abdba06550e07f4a1c9dbe6)) - -### Unknown - -* GitBook: [#133] No subject ([`f0535a9`](https://github.com/taskforcesh/bullmq/commit/f0535a950ff350a947caea2b9be6973b3417e55b)) - -* GitBook: [#132] No subject ([`240ef6b`](https://github.com/taskforcesh/bullmq/commit/240ef6bacd91ecc40f69bba3a46294f3b9aad3ec)) - -* GitBook: [#131] No subject ([`fac0391`](https://github.com/taskforcesh/bullmq/commit/fac039125f71f247f56e58241b8370ea7db815c9)) - -* GitBook: [#130] No subject ([`2a59136`](https://github.com/taskforcesh/bullmq/commit/2a591360c98888187b8de37f2ff139c56d95d369)) - - -## v3.2.2 (2022-11-15) - -### Chore - -* chore(release): 3.2.2 [skip ci] - -## [3.2.2](https://github.com/taskforcesh/bullmq/compare/v3.2.1...v3.2.2) (2022-11-15) - -### Bug Fixes - -* **rate-limit:** check job is active before moving to wait ([9502167](https://github.com/taskforcesh/bullmq/commit/9502167bb0d9008fc8811ff7980dc8126fbc5ac2)) ([`4226070`](https://github.com/taskforcesh/bullmq/commit/4226070d9905fb052a2ec00f17ee4210bf931fbd)) - -* chore(moveLimitedBackToWait): make sure delay is an int ([`2a76ee2`](https://github.com/taskforcesh/bullmq/commit/2a76ee24a3b989685c78393d43fa43afc6eb3c2b)) - -### Fix - -* fix(rate-limit): check job is active before moving to wait ([`9502167`](https://github.com/taskforcesh/bullmq/commit/9502167bb0d9008fc8811ff7980dc8126fbc5ac2)) - - -## v3.2.1 (2022-11-15) - -### Chore - -* chore(release): 3.2.1 [skip ci] - -## [3.2.1](https://github.com/taskforcesh/bullmq/compare/v3.2.0...v3.2.1) (2022-11-15) - -### Bug Fixes - -* **worker:** consider removed jobs in failed event ([#1500](https://github.com/taskforcesh/bullmq/issues/1500)) ([8704b9a](https://github.com/taskforcesh/bullmq/commit/8704b9a10575fd7df738296f7156057123592b86)) ([`0301a7a`](https://github.com/taskforcesh/bullmq/commit/0301a7ab2b110670804de0dae63a04c7a314ee5a)) - -### Documentation - -* docs: add nocodedb as usedBy ([`7a8754f`](https://github.com/taskforcesh/bullmq/commit/7a8754fdf2138418283f2b991334f2076440e7ee)) - -### Fix - -* fix(worker): consider removed jobs in failed event (#1500) ([`8704b9a`](https://github.com/taskforcesh/bullmq/commit/8704b9a10575fd7df738296f7156057123592b86)) - -### Unknown - -* GitBook: [#129] clarify flow architecture for waiting-children state ([`75f04d7`](https://github.com/taskforcesh/bullmq/commit/75f04d7e0480997210ee442ebd4157553112aeca)) - -* GitBook: [#128] update architecture images ([`f890565`](https://github.com/taskforcesh/bullmq/commit/f890565d90948bed9d27e955cfba8acda18a696e)) - - -## v3.2.0 (2022-11-09) - -### Chore - -* chore(release): 3.2.0 [skip ci] - -# [3.2.0](https://github.com/taskforcesh/bullmq/compare/v3.1.3...v3.2.0) (2022-11-09) - -### Features - -* **flow:** move parent to delayed when delay option is provided ([#1501](https://github.com/taskforcesh/bullmq/issues/1501)) ([2f3e5d5](https://github.com/taskforcesh/bullmq/commit/2f3e5d54f0797bf0d1adf14dbb2b51ad9f9183ca)) ([`f05e098`](https://github.com/taskforcesh/bullmq/commit/f05e098a6dad2038c720d77d71a66b387b53bcb1)) - -* chore(move-to-finished): remove debug statement (#1524) ([`65189dc`](https://github.com/taskforcesh/bullmq/commit/65189dc45b9f96d8b56cf44a5e6debaa4344a746)) - -### Documentation - -* docs: update bullmq-pro changelog to 4.0.2 version ([`6892f3e`](https://github.com/taskforcesh/bullmq/commit/6892f3ef023b7c30150dd2192700d582f20feef2)) - -* docs(base-job-options): fix grammar - -Change grammar "an number" should be "a number" ([`3451b59`](https://github.com/taskforcesh/bullmq/commit/3451b591a2158b6e2ae57a369389e23f4d4376e7)) - -### Feature - -* feat(flow): move parent to delayed when delay option is provided (#1501) ([`2f3e5d5`](https://github.com/taskforcesh/bullmq/commit/2f3e5d54f0797bf0d1adf14dbb2b51ad9f9183ca)) - - -## v3.1.3 (2022-11-04) - -### Chore - -* chore(release): 3.1.3 [skip ci] - -## [3.1.3](https://github.com/taskforcesh/bullmq/compare/v3.1.2...v3.1.3) (2022-11-04) - -### Bug Fixes - -* **delayed:** better handling of marker id ([816376e](https://github.com/taskforcesh/bullmq/commit/816376e7880ae0eafe85a1f9a5aef9fdfe3031a9)) -* **delayed:** notify workers a delayed job is closer in time fixes [#1505](https://github.com/taskforcesh/bullmq/issues/1505) ([6ced4d0](https://github.com/taskforcesh/bullmq/commit/6ced4d06c5c9c8342c9e4f7920a21826871eac1b)) -* **job:** better error message in moveToFailed ([4e9f5bb](https://github.com/taskforcesh/bullmq/commit/4e9f5bb90f87c66eca959ffc9b7a09e05908c2d9)) -* **moveToFinish:** always promote delayed jobs ([7610cc3](https://github.com/taskforcesh/bullmq/commit/7610cc37d4695a885043c251990e153d4ce4440f)) -* **moveToFinished:** revert move promoteDelayedJobs ([7d780db](https://github.com/taskforcesh/bullmq/commit/7d780dbc1d7728ab7b762a5578871b31f27ff80c)) ([`f87858c`](https://github.com/taskforcesh/bullmq/commit/f87858caa382b56e34cc8015ad1a2706f2bcda8e)) - -### Fix - -* fix(job): better error message in moveToFailed ([`4e9f5bb`](https://github.com/taskforcesh/bullmq/commit/4e9f5bb90f87c66eca959ffc9b7a09e05908c2d9)) - -* fix(delayed): better handling of marker id ([`816376e`](https://github.com/taskforcesh/bullmq/commit/816376e7880ae0eafe85a1f9a5aef9fdfe3031a9)) - -* fix(moveToFinished): revert move promoteDelayedJobs ([`7d780db`](https://github.com/taskforcesh/bullmq/commit/7d780dbc1d7728ab7b762a5578871b31f27ff80c)) - -* fix(moveToFinish): always promote delayed jobs ([`7610cc3`](https://github.com/taskforcesh/bullmq/commit/7610cc37d4695a885043c251990e153d4ce4440f)) - -* fix(delayed): notify workers a delayed job is closer in time fixes #1505 ([`6ced4d0`](https://github.com/taskforcesh/bullmq/commit/6ced4d06c5c9c8342c9e4f7920a21826871eac1b)) - - -## v3.1.2 (2022-11-04) - -### Chore - -* chore(release): 3.1.2 [skip ci] - -## [3.1.2](https://github.com/taskforcesh/bullmq/compare/v3.1.1...v3.1.2) (2022-11-04) - -### Bug Fixes - -* **repeat:** allow easy migration from bullmq <3 to >=3 ([e17b886](https://github.com/taskforcesh/bullmq/commit/e17b886d3e2978e25f23f1a99b88562537a08576)) ([`be39c09`](https://github.com/taskforcesh/bullmq/commit/be39c090684ccf720bcc6adc3279d7bb1d0a5ed5)) - -### Fix - -* fix(repeat): allow easy migration from bullmq <3 to >=3 ([`e17b886`](https://github.com/taskforcesh/bullmq/commit/e17b886d3e2978e25f23f1a99b88562537a08576)) - - -## v3.1.1 (2022-11-03) - -### Chore - -* chore(release): 3.1.1 [skip ci] - -## [3.1.1](https://github.com/taskforcesh/bullmq/compare/v3.1.0...v3.1.1) (2022-11-03) - -### Bug Fixes - -* **change-delay:** remove delayed stream ([#1509](https://github.com/taskforcesh/bullmq/issues/1509)) ([6e4809e](https://github.com/taskforcesh/bullmq/commit/6e4809e5d8f7ef35bc0871d21bfcdcb0f1f316c6)) -* **worker:** restore dynamic concurrency change ([#1515](https://github.com/taskforcesh/bullmq/issues/1515)) ([fdac5c2](https://github.com/taskforcesh/bullmq/commit/fdac5c27607dfaaaad1c1256c47f2ae448efcd21)) ([`ad70396`](https://github.com/taskforcesh/bullmq/commit/ad7039625d3adb334f07bb015068d57982252615)) - -* chore(deps): update github/codeql-action digest to 18fe527 (#1499) ([`fca6640`](https://github.com/taskforcesh/bullmq/commit/fca66406f1890a268f1948b457eb4b9dbdc1f393)) - -### Fix - -* fix(change-delay): remove delayed stream (#1509) ([`6e4809e`](https://github.com/taskforcesh/bullmq/commit/6e4809e5d8f7ef35bc0871d21bfcdcb0f1f316c6)) - -* fix(worker): restore dynamic concurrency change (#1515) ([`fdac5c2`](https://github.com/taskforcesh/bullmq/commit/fdac5c27607dfaaaad1c1256c47f2ae448efcd21)) - - -## v3.1.0 (2022-11-02) - -### Chore - -* chore(release): 3.1.0 [skip ci] - -# [3.1.0](https://github.com/taskforcesh/bullmq/compare/v3.0.1...v3.1.0) (2022-11-02) - -### Features - -* **workers:** better error message for missing lock ([bf1d086](https://github.com/taskforcesh/bullmq/commit/bf1d0860c70bcc2b604d02ca47e5db64f962d71d)) ([`94c4862`](https://github.com/taskforcesh/bullmq/commit/94c4862fcb8de9676df20d3b002f8f13fddf658a)) - -### Feature - -* feat(workers): better error message for missing lock ([`bf1d086`](https://github.com/taskforcesh/bullmq/commit/bf1d0860c70bcc2b604d02ca47e5db64f962d71d)) - - -## v3.0.1 (2022-11-02) - -### Chore - -* chore(release): 3.0.1 [skip ci] - -## [3.0.1](https://github.com/taskforcesh/bullmq/compare/v3.0.0...v3.0.1) (2022-11-02) - -### Bug Fixes - -* **move-to-delayed:** consider promoting delayed jobs ([#1493](https://github.com/taskforcesh/bullmq/issues/1493)) ([909da2b](https://github.com/taskforcesh/bullmq/commit/909da2bc2718a588379b3fdd9791bc8e51ad1dad)) -* **retry-job:** consider promoting delayed jobs ([#1508](https://github.com/taskforcesh/bullmq/issues/1508)) ([d0b3412](https://github.com/taskforcesh/bullmq/commit/d0b3412d222449c24ab36068a791d08ea19ed922)) ([`c3c565d`](https://github.com/taskforcesh/bullmq/commit/c3c565dad2d7267e3bb1aa2a4d540f0c826def1a)) - -* chore(release): upgrade ubuntu version to latest ([`f2cb153`](https://github.com/taskforcesh/bullmq/commit/f2cb153abb4ba8f872efac56f1f514a3129b1cc7)) - -* chore(deps): update actions/setup-node digest to 8c91899 (#1473) ([`89bad09`](https://github.com/taskforcesh/bullmq/commit/89bad097edf1692dba19eec938da82b6f2be7430)) - -### Documentation - -* docs: update bullmq-pro changelog ([`e023112`](https://github.com/taskforcesh/bullmq/commit/e02311294b850f8dcf817a1bb479a52d72b58db5)) - -* docs(rate-limiting): update group keys information ([`a1ee543`](https://github.com/taskforcesh/bullmq/commit/a1ee543d6c07cd70a2f03cca1b682ac945be8e35)) - -* docs(retrying-failing-jobs): update backoffStrategy examples ([`125ca2f`](https://github.com/taskforcesh/bullmq/commit/125ca2f58d48177168a75d4625aea4582b8d6f6d)) - -* docs: update README ([`32ace36`](https://github.com/taskforcesh/bullmq/commit/32ace362d9687ce16d86fc72bf4990205fd3a076)) - -### Fix - -* fix(retry-job): consider promoting delayed jobs (#1508) ([`d0b3412`](https://github.com/taskforcesh/bullmq/commit/d0b3412d222449c24ab36068a791d08ea19ed922)) - -* fix(move-to-delayed): consider promoting delayed jobs (#1493) ([`909da2b`](https://github.com/taskforcesh/bullmq/commit/909da2bc2718a588379b3fdd9791bc8e51ad1dad)) - - -## v3.0.0 (2022-10-25) - -### Breaking - -* feat(rate-limit): remove group key support and improve global rate limit - -BREAKING CHANGE: limit by group keys has been removed in favor -of a much simpler and efficent rate-limit implementation. ([`81f780a`](https://github.com/taskforcesh/bullmq/commit/81f780aeed81e670107d01d01265d407a30e2a62)) - -* fix(backoff): handle backoff strategy as function (#1463) - -BREAKING CHANGE: object mapping is replaced by single function ([`3640269`](https://github.com/taskforcesh/bullmq/commit/36402691a3c7fa500f07e2e11a28318099bdb909)) - -### Chore - -* chore(release): 3.0.0 [skip ci] - -# [3.0.0](https://github.com/taskforcesh/bullmq/compare/v2.4.0...v3.0.0) (2022-10-25) - -### Bug Fixes - -* **backoff:** handle backoff strategy as function ([#1463](https://github.com/taskforcesh/bullmq/issues/1463)) ([3640269](https://github.com/taskforcesh/bullmq/commit/36402691a3c7fa500f07e2e11a28318099bdb909)) -* **repeat:** remove cron in favor of pattern option ([#1456](https://github.com/taskforcesh/bullmq/issues/1456)) ([3cc150e](https://github.com/taskforcesh/bullmq/commit/3cc150e32cb5971ad4ba6ff91246aaf75296c165)) - -### Features - -* add support for dynamic rate limiting ([2d51d2b](https://github.com/taskforcesh/bullmq/commit/2d51d2b33ef49059503e1bca7a582c71f6861ef4)) -* **rate-limit:** remove group key support and improve global rate limit ([81f780a](https://github.com/taskforcesh/bullmq/commit/81f780aeed81e670107d01d01265d407a30e2a62)) - -### BREAKING CHANGES - -* **rate-limit:** limit by group keys has been removed in favor -of a much simpler and efficent rate-limit implementation. -* **backoff:** object mapping is replaced by single function ([`a252282`](https://github.com/taskforcesh/bullmq/commit/a2522822210d200ff66576d3a71bf3cc7c1a7622)) - -### Feature - -* feat: add support for dynamic rate limiting ([`2d51d2b`](https://github.com/taskforcesh/bullmq/commit/2d51d2b33ef49059503e1bca7a582c71f6861ef4)) - -### Fix - -* fix(repeat): remove cron in favor of pattern option (#1456) ([`3cc150e`](https://github.com/taskforcesh/bullmq/commit/3cc150e32cb5971ad4ba6ff91246aaf75296c165)) - -### Test - -* test: add a bit of extra margin to rate-limit test ([`4f03545`](https://github.com/taskforcesh/bullmq/commit/4f035451aaaa1cbcec7e45b2b9a788383d889c40)) - -* test: remove irrelevant tests ([`285f1ba`](https://github.com/taskforcesh/bullmq/commit/285f1ba23ff17a2bfc01eb629d3f34c67700ee14)) - -### Unknown - -* GitBook: [#126] No subject ([`c04ea4d`](https://github.com/taskforcesh/bullmq/commit/c04ea4da3b233e71bbb019f5398b6a542167ee83)) - - -## v2.4.0 (2022-10-24) - -### Chore - -* chore(release): 2.4.0 [skip ci] - -# [2.4.0](https://github.com/taskforcesh/bullmq/compare/v2.3.2...v2.4.0) (2022-10-24) - -### Features - -* **flows:** allow parent on root jobs in addBulk method ([#1488](https://github.com/taskforcesh/bullmq/issues/1488)) ref [#1480](https://github.com/taskforcesh/bullmq/issues/1480) ([92308e5](https://github.com/taskforcesh/bullmq/commit/92308e53acf14e0ce108d94ecd616633ac93e35d)) ([`65ce37a`](https://github.com/taskforcesh/bullmq/commit/65ce37ac10648e48e55a102eb0f59fce104fbcb9)) - -* chore(deps): update peaceiris/actions-gh-pages digest to de7ea6f (#1490) ([`6191040`](https://github.com/taskforcesh/bullmq/commit/61910409b9c9250cd371e805ead7f876127744a9)) - -* chore(deps): update github/codeql-action digest to cc7986c (#1482) ([`14ed954`](https://github.com/taskforcesh/bullmq/commit/14ed9545418b23a82921f98f94facd78b56f588c)) - -* chore(deps): lock file maintenance ([`3b983f9`](https://github.com/taskforcesh/bullmq/commit/3b983f955248ec0bceef8f919b9a2ecc6ec6ccd2)) - -### Documentation - -* docs: update bullmq-pro changelog ([`94f020d`](https://github.com/taskforcesh/bullmq/commit/94f020d9617426c942582bf9c48b29c6ce0e38b9)) - -### Feature - -* feat(flows): allow parent on root jobs in addBulk method (#1488) ref #1480 ([`92308e5`](https://github.com/taskforcesh/bullmq/commit/92308e53acf14e0ce108d94ecd616633ac93e35d)) - -### Refactor - -* refactor(promote): reuse addJobWithPriority include (#1485) ([`899d3d0`](https://github.com/taskforcesh/bullmq/commit/899d3d05f5369d40d7ff22165c05fee412678a7a)) - - -## v2.3.2 (2022-10-18) - -### Chore - -* chore(release): 2.3.2 [skip ci] - -## [2.3.2](https://github.com/taskforcesh/bullmq/compare/v2.3.1...v2.3.2) (2022-10-18) - -### Bug Fixes - -* **job:** send failed event when failParentOnFailure ([#1481](https://github.com/taskforcesh/bullmq/issues/1481)) fixes [#1469](https://github.com/taskforcesh/bullmq/issues/1469) ([b20eb6f](https://github.com/taskforcesh/bullmq/commit/b20eb6f65c7e2c4593d5f9f4d4b940f780bf26d2)) ([`583bde4`](https://github.com/taskforcesh/bullmq/commit/583bde47ff0fa9366db968eca35e30b2fe89f4ad)) - -### Ci - -* ci(build): copy lua scripts (#1476) ([`b96991e`](https://github.com/taskforcesh/bullmq/commit/b96991e0828cceb062b40f4e68625d422d84e146)) - -### Fix - -* fix(job): send failed event when failParentOnFailure (#1481) fixes #1469 ([`b20eb6f`](https://github.com/taskforcesh/bullmq/commit/b20eb6f65c7e2c4593d5f9f4d4b940f780bf26d2)) - - -## v2.3.1 (2022-10-13) - -### Chore - -* chore(release): 2.3.1 [skip ci] - -## [2.3.1](https://github.com/taskforcesh/bullmq/compare/v2.3.0...v2.3.1) (2022-10-13) - -### Bug Fixes - -* **redis:** replace throw exception by console.error ([fafa2f8](https://github.com/taskforcesh/bullmq/commit/fafa2f89e796796f950e6c4abbdda4d3d71ad1b0)) ([`0fb2964`](https://github.com/taskforcesh/bullmq/commit/0fb2964151166f2aece0270c54c8cb4f4e2eb898)) - -### Fix - -* fix(redis): replace throw exception by console.error ([`fafa2f8`](https://github.com/taskforcesh/bullmq/commit/fafa2f89e796796f950e6c4abbdda4d3d71ad1b0)) - - -## v2.3.0 (2022-10-13) - -### Chore - -* chore(release): 2.3.0 [skip ci] - -# [2.3.0](https://github.com/taskforcesh/bullmq/compare/v2.2.1...v2.3.0) (2022-10-13) - -### Features - -* **redis-connection:** allow providing scripts for extension ([#1472](https://github.com/taskforcesh/bullmq/issues/1472)) ([f193cfb](https://github.com/taskforcesh/bullmq/commit/f193cfb1830e127f9fd47a969baad30011a0e3a4)) ([`005539f`](https://github.com/taskforcesh/bullmq/commit/005539f2c34eff7ee92aeba1b34801fc69a05018)) - -* chore(deps): update actions/checkout digest to 93ea575 ([`4c88b2c`](https://github.com/taskforcesh/bullmq/commit/4c88b2ca4ff61db0dac4405267328a10d5ce9e69)) - -### Ci - -* ci(docs): use pretest before docs script ([`2407bd9`](https://github.com/taskforcesh/bullmq/commit/2407bd9d4da03a414438dae285228635bf5cd681)) - -* ci(scripts): generate scripts before docs (#1470) ([`6947180`](https://github.com/taskforcesh/bullmq/commit/694718012788f1ddd207aa62d1e4dc857b716de2)) - -### Feature - -* feat(redis-connection): allow providing scripts for extension (#1472) ([`f193cfb`](https://github.com/taskforcesh/bullmq/commit/f193cfb1830e127f9fd47a969baad30011a0e3a4)) - - -## v2.2.1 (2022-10-11) - -### Chore - -* chore(release): 2.2.1 [skip ci] - -## [2.2.1](https://github.com/taskforcesh/bullmq/compare/v2.2.0...v2.2.1) (2022-10-11) - -### Performance Improvements - -* **scripts:** pre-build scripts ([#1441](https://github.com/taskforcesh/bullmq/issues/1441)) ([7f72603](https://github.com/taskforcesh/bullmq/commit/7f72603d463f705d0617898cb221f832c49a4aa3)) ([`547a20f`](https://github.com/taskforcesh/bullmq/commit/547a20f652960472500940c71363fe65b111737e)) - -* chore(deps): lock file maintenance (#1457) ([`c2bdeef`](https://github.com/taskforcesh/bullmq/commit/c2bdeefab4a1cae920e38bed25dd47238e6163de)) - -### Performance - -* perf(scripts): pre-build scripts (#1441) ([`7f72603`](https://github.com/taskforcesh/bullmq/commit/7f72603d463f705d0617898cb221f832c49a4aa3)) - - -## v2.2.0 (2022-10-10) - -### Chore - -* chore(release): 2.2.0 [skip ci] - -# [2.2.0](https://github.com/taskforcesh/bullmq/compare/v2.1.3...v2.2.0) (2022-10-10) - -### Bug Fixes - -* **connection:** validate array of strings in Cluster ([#1468](https://github.com/taskforcesh/bullmq/issues/1468)) fixes [#1467](https://github.com/taskforcesh/bullmq/issues/1467) ([8355182](https://github.com/taskforcesh/bullmq/commit/8355182a372b68ec62e9c3953bacbd69e0abfc74)) - -### Features - -* **flow-producer:** allow parent opts in root job when adding a flow ([#1110](https://github.com/taskforcesh/bullmq/issues/1110)) ref [#1097](https://github.com/taskforcesh/bullmq/issues/1097) ([3c3ac71](https://github.com/taskforcesh/bullmq/commit/3c3ac718ad84f6bd0cc1575013c948e767b46f38)) ([`68f5b6f`](https://github.com/taskforcesh/bullmq/commit/68f5b6fedb1012926bd121df8ee62ddd32285b08)) - -* chore(deps): update github/codeql-action digest to 8075783 (#1465) ([`b85c24d`](https://github.com/taskforcesh/bullmq/commit/b85c24d95750e912a1c1a1e1826e8abb6ff49de8)) - -* chore(deps): update github/codeql-action digest to e0e5ded (#1398) ([`6ec5dab`](https://github.com/taskforcesh/bullmq/commit/6ec5dab961b25cc1103010004880a198cf240cb3)) - -### Documentation - -* docs: fix Object.values usage in flows guide (#1466) ([`74cbcc2`](https://github.com/taskforcesh/bullmq/commit/74cbcc2514b18bb94e0067618ba7d83d57f00c87)) - -* docs(bullmq-pro): update changelog to version 2.4.12 ([`c4b9ee4`](https://github.com/taskforcesh/bullmq/commit/c4b9ee4961fd692741116727ffc03102c1f40afb)) - -### Feature - -* feat(flow-producer): allow parent opts in root job when adding a flow (#1110) ref #1097 ([`3c3ac71`](https://github.com/taskforcesh/bullmq/commit/3c3ac718ad84f6bd0cc1575013c948e767b46f38)) - -### Fix - -* fix(connection): validate array of strings in Cluster (#1468) fixes #1467 ([`8355182`](https://github.com/taskforcesh/bullmq/commit/8355182a372b68ec62e9c3953bacbd69e0abfc74)) - - -## v2.1.3 (2022-09-30) - -### Chore - -* chore(release): 2.1.3 [skip ci] - -## [2.1.3](https://github.com/taskforcesh/bullmq/compare/v2.1.2...v2.1.3) (2022-09-30) - -### Bug Fixes - -* **worker:** clear stalled jobs timer when closing worker ([1567a0d](https://github.com/taskforcesh/bullmq/commit/1567a0df0ca3c8d43a18990fe488888f4ff68040)) ([`ad3889c`](https://github.com/taskforcesh/bullmq/commit/ad3889c674da4eb8e772c47b7841d1c65fecb65e)) - -### Fix - -* fix(worker): clear stalled jobs timer when closing worker ([`1567a0d`](https://github.com/taskforcesh/bullmq/commit/1567a0df0ca3c8d43a18990fe488888f4ff68040)) - - -## v2.1.2 (2022-09-29) - -### Chore - -* chore(release): 2.1.2 [skip ci] - -## [2.1.2](https://github.com/taskforcesh/bullmq/compare/v2.1.1...v2.1.2) (2022-09-29) - -### Bug Fixes - -* **getters:** fix return type of getJobLogs ([d452927](https://github.com/taskforcesh/bullmq/commit/d4529278c59b2c94eee604c7d4455acc490679e9)) ([`18d91d1`](https://github.com/taskforcesh/bullmq/commit/18d91d1786955bae0921577dbd93a2bdbe6e4e68)) - -* chore(deps): update actions/setup-node digest to 969bd26 ([`8016027`](https://github.com/taskforcesh/bullmq/commit/80160272df53a4e90b0a43a57865d94ec915a25d)) - -* chore(deps): lock file maintenance (#1445) ([`0cd64a6`](https://github.com/taskforcesh/bullmq/commit/0cd64a673679f7b532fb2adb85c0364713bc6908)) - -### Fix - -* fix(getters): fix return type of getJobLogs ([`d452927`](https://github.com/taskforcesh/bullmq/commit/d4529278c59b2c94eee604c7d4455acc490679e9)) - - -## v2.1.1 (2022-09-28) - -### Chore - -* chore(release): 2.1.1 [skip ci] - -## [2.1.1](https://github.com/taskforcesh/bullmq/compare/v2.1.0...v2.1.1) (2022-09-28) - -### Bug Fixes - -* **sandbox:** get open port using built-in module instead of get-port ([#1446](https://github.com/taskforcesh/bullmq/issues/1446)) ([6db6288](https://github.com/taskforcesh/bullmq/commit/6db628868a9d64c5a3e47d1c9201017e6d05c1ae)) ([`4eb5a9a`](https://github.com/taskforcesh/bullmq/commit/4eb5a9a5c9cf9bf19de60cbef2ff90fde5a11a03)) - -### Documentation - -* docs: update Queue Scheduler API Reference - -The html page is no longer generated by typedoc since v2 ([`89bb53f`](https://github.com/taskforcesh/bullmq/commit/89bb53fb193e291f90b4be219507cdd7c7b04dba)) - -### Fix - -* fix(sandbox): get open port using built-in module instead of get-port (#1446) ([`6db6288`](https://github.com/taskforcesh/bullmq/commit/6db628868a9d64c5a3e47d1c9201017e6d05c1ae)) - - -## v2.1.0 (2022-09-23) - -### Chore - -* chore(release): 2.1.0 [skip ci] - -# [2.1.0](https://github.com/taskforcesh/bullmq/compare/v2.0.2...v2.1.0) (2022-09-23) - -### Features - -* **job-options:** add failParentOnFailure option ([#1339](https://github.com/taskforcesh/bullmq/issues/1339)) ([65e5c36](https://github.com/taskforcesh/bullmq/commit/65e5c3678771f26555c9128bdb908dd62e3584f9)) ([`af1a066`](https://github.com/taskforcesh/bullmq/commit/af1a0664168a183250b56759cfb19b58be672b62)) - -### Documentation - -* docs: fix typo on queue ([`4a977cb`](https://github.com/taskforcesh/bullmq/commit/4a977cba768fc2a36d9b34651bfa5e8eba336156)) - -### Feature - -* feat(job-options): add failParentOnFailure option (#1339) ([`65e5c36`](https://github.com/taskforcesh/bullmq/commit/65e5c3678771f26555c9128bdb908dd62e3584f9)) - - -## v2.0.2 (2022-09-22) - -### Chore - -* chore(release): 2.0.2 [skip ci] - -## [2.0.2](https://github.com/taskforcesh/bullmq/compare/v2.0.1...v2.0.2) (2022-09-22) - -### Bug Fixes - -* **job:** update delay value when moving to wait ([#1436](https://github.com/taskforcesh/bullmq/issues/1436)) ([9560915](https://github.com/taskforcesh/bullmq/commit/95609158c1800cf661f22ad7995541fb9474826a)) ([`2eeb081`](https://github.com/taskforcesh/bullmq/commit/2eeb0812c007fd67adc6f54be7fe94d47ea06219)) - -### Fix - -* fix(job): update delay value when moving to wait (#1436) ([`9560915`](https://github.com/taskforcesh/bullmq/commit/95609158c1800cf661f22ad7995541fb9474826a)) - -### Unknown - -* GitBook: [#123] No subject ([`8fdb42d`](https://github.com/taskforcesh/bullmq/commit/8fdb42de089120c7daedbb16b2589b07f12baafe)) - - -## v2.0.1 (2022-09-21) - -### Chore - -* chore(release): 2.0.1 [skip ci] - -## [2.0.1](https://github.com/taskforcesh/bullmq/compare/v2.0.0...v2.0.1) (2022-09-21) - -### Bug Fixes - -* **connection:** throw error when no noeviction policy ([3468390](https://github.com/taskforcesh/bullmq/commit/3468390dd6331291f4cf71a54c32028a06d1d99e)) - -### Performance Improvements - -* **events:** remove data and opts from added event ([e13d4b8](https://github.com/taskforcesh/bullmq/commit/e13d4b8e0c4f99203f4249ccc86e369d124ff483)) ([`0e26d88`](https://github.com/taskforcesh/bullmq/commit/0e26d88a6afee6becfa4f318a044f1177456b177)) - -### Documentation - -* docs: manually updated changelog ([`00a3b48`](https://github.com/taskforcesh/bullmq/commit/00a3b48b6f7e71f337eb76aab856464c94f12fe7)) - -### Fix - -* fix(connection): throw error when no noeviction policy ([`3468390`](https://github.com/taskforcesh/bullmq/commit/3468390dd6331291f4cf71a54c32028a06d1d99e)) - -### Performance - -* perf(events): remove data and opts from added event ([`e13d4b8`](https://github.com/taskforcesh/bullmq/commit/e13d4b8e0c4f99203f4249ccc86e369d124ff483)) - - -## v2.0.0 (2022-09-21) - -### Breaking - -* fix(compat): remove Queue3 class (#1421) - -BREAKING CHANGE: -The compatibility class for Bullv3 is no longer available. ([`fc797f7`](https://github.com/taskforcesh/bullmq/commit/fc797f7cd334c19a95cb1290ddb6611cd3417179)) - -### Chore - -* chore(release): 2.0.0 [skip ci] - -# [2.0.0](https://github.com/taskforcesh/bullmq/compare/v1.91.1...v2.0.0) (2022-09-21) - -### Bug Fixes - -* **compat:** remove Queue3 class ([#1421](https://github.com/taskforcesh/bullmq/issues/1421)) ([fc797f7](https://github.com/taskforcesh/bullmq/commit/fc797f7cd334c19a95cb1290ddb6611cd3417179)) -* **delayed:** promote delayed jobs instead of picking one by one ([1b938af](https://github.com/taskforcesh/bullmq/commit/1b938af75069d69772ddf2b03f95db7f53eada68)) -* **getters:** compensate for "mark" job id ([231b9aa](https://github.com/taskforcesh/bullmq/commit/231b9aa0f4781e4493d3ea272c33b27c0b7dc0ab)) -* **promote:** remove marker when promoting delayed job ([1aea0dc](https://github.com/taskforcesh/bullmq/commit/1aea0dcc5fb29086cef3d0c432c387d6f8261963)) -* **sandbox:** remove progress method ([b43267b](https://github.com/taskforcesh/bullmq/commit/b43267be50f9eade8233500d189d46940a01cc29)) -* **stalled-jobs:** handle job id 0 ([829e6e0](https://github.com/taskforcesh/bullmq/commit/829e6e0252e78bf2cbc55ab1d3bd153faa0cee4c)) -* **worker:** do not allow stalledInterval to be less than zero ([831ffc5](https://github.com/taskforcesh/bullmq/commit/831ffc520ccd3c6ea63af6b04ddddc9f7829c667)) -* **workers:** use connection closing to determine closing status ([fe1d173](https://github.com/taskforcesh/bullmq/commit/fe1d17321f1eb49bd872c52965392add22729941)) - -### Features - -* improve delayed jobs and remove QueueScheduler ([1f66e5a](https://github.com/taskforcesh/bullmq/commit/1f66e5a6c891d52e0671e58a685dbca511e45e7e)) -* move stalled jobs check and handling to Worker class from QueueScheduler ([13769cb](https://github.com/taskforcesh/bullmq/commit/13769cbe38ba22793cbc66e9706a6be28a7f1512)) - -### BREAKING CHANGES - -* **compat:** The compatibility class for Bullv3 is no longer available. -* The QueueScheduler class is removed since it is not necessary anymore. -Delayed jobs are now handled in a much simpler and -robust way, without the need of a separate process. -* failed and stalled events are now produced by the Worker class instead of by the QueueScheduler. ([`5f3c316`](https://github.com/taskforcesh/bullmq/commit/5f3c31609b60589ed9e78317bf212dd407fad55b)) - -* chore: merge devel-2.0 ([`e20fc34`](https://github.com/taskforcesh/bullmq/commit/e20fc34e90589596c98b51a8ad774a733fe423bd)) - -* chore(deps): lock file maintenance ([`6f35126`](https://github.com/taskforcesh/bullmq/commit/6f35126bef0ac3021e95c66c27eb0bf6a0751f96)) - -* chore: add minimum recommended version 6.2.0 ([`9c3742a`](https://github.com/taskforcesh/bullmq/commit/9c3742ad003bcc5027f1ca0771b877ebc95e0200)) - -### Fix - -* fix(sandbox): remove progress method ([`b43267b`](https://github.com/taskforcesh/bullmq/commit/b43267be50f9eade8233500d189d46940a01cc29)) - -* fix(stalled-jobs): handle job id 0 ([`829e6e0`](https://github.com/taskforcesh/bullmq/commit/829e6e0252e78bf2cbc55ab1d3bd153faa0cee4c)) - -* fix(delayed): promote delayed jobs instead of picking one by one ([`1b938af`](https://github.com/taskforcesh/bullmq/commit/1b938af75069d69772ddf2b03f95db7f53eada68)) - -### Unknown - -* Merge pull request #1423 from taskforcesh/feat/removed-queue-scheduler - -feat: eliminate the need of having a QueueScheduler ([`7b069ea`](https://github.com/taskforcesh/bullmq/commit/7b069ea9fbb5469c6f1e6ca2e339136170950e11)) - -* GitBook: [#122] No subject ([`f55e94c`](https://github.com/taskforcesh/bullmq/commit/f55e94c3887f5e1108aec5cbb6121d114ac63b46)) - - -## v1.91.1 (2022-09-18) - -### Chore - -* chore(release): 1.91.1 [skip ci] - -## [1.91.1](https://github.com/taskforcesh/bullmq/compare/v1.91.0...v1.91.1) (2022-09-18) - -### Bug Fixes - -* **drain:** consider empty active list ([#1412](https://github.com/taskforcesh/bullmq/issues/1412)) ([f919a50](https://github.com/taskforcesh/bullmq/commit/f919a50b2f4972dcb9ecd5848b0f7fd9a0e137ea)) ([`5f3338c`](https://github.com/taskforcesh/bullmq/commit/5f3338c1c125e08c3f2be86e51dc81ddce8daae5)) - -### Fix - -* fix(drain): consider empty active list (#1412) ([`f919a50`](https://github.com/taskforcesh/bullmq/commit/f919a50b2f4972dcb9ecd5848b0f7fd9a0e137ea)) - -* fix(promote): remove marker when promoting delayed job ([`1aea0dc`](https://github.com/taskforcesh/bullmq/commit/1aea0dcc5fb29086cef3d0c432c387d6f8261963)) - -* fix(worker): do not allow stalledInterval to be less than zero ([`831ffc5`](https://github.com/taskforcesh/bullmq/commit/831ffc520ccd3c6ea63af6b04ddddc9f7829c667)) - -* fix(workers): use connection closing to determine closing status ([`fe1d173`](https://github.com/taskforcesh/bullmq/commit/fe1d17321f1eb49bd872c52965392add22729941)) - -* fix(getters): compensate for "mark" job id ([`231b9aa`](https://github.com/taskforcesh/bullmq/commit/231b9aa0f4781e4493d3ea272c33b27c0b7dc0ab)) - -### Test - -* test(obliterate): make sure there are no active jobs when obliterating ([`4400b33`](https://github.com/taskforcesh/bullmq/commit/4400b33880835188f0805ab956a237945959dba8)) - -* test(job): skip delay priority test ([`dd304d3`](https://github.com/taskforcesh/bullmq/commit/dd304d3a0d63ec7bb4e3f40905b44f79f14b67bc)) - -* test(jobs): add an assertion ([`41343b4`](https://github.com/taskforcesh/bullmq/commit/41343b42a3ccbaeecf54585c03064f73b56df69f)) - -* test(clean): update some assertions ([`6b90d07`](https://github.com/taskforcesh/bullmq/commit/6b90d07e6803b0f2c5321e2677c96832cb7b237e)) - - -## v1.91.0 (2022-09-16) - -### Breaking - -* feat: improve delayed jobs and remove QueueScheduler - -BREAKING CHANGE: -The QueueScheduler class is removed since it is not necessary anymore. -Delayed jobs are now handled in a much simpler and -robust way, without the need of a separate process. ([`1f66e5a`](https://github.com/taskforcesh/bullmq/commit/1f66e5a6c891d52e0671e58a685dbca511e45e7e)) - -* feat: move stalled jobs check and handling to Worker class from QueueScheduler - -BREAKING CHANGE: -failed and stalled events are now produced by the Worker class instead of by the QueueScheduler. ([`13769cb`](https://github.com/taskforcesh/bullmq/commit/13769cbe38ba22793cbc66e9706a6be28a7f1512)) - -### Chore - -* chore(release): 1.91.0 [skip ci] - -# [1.91.0](https://github.com/taskforcesh/bullmq/compare/v1.90.2...v1.91.0) (2022-09-16) - -### Features - -* **sandbox:** support update method ([#1416](https://github.com/taskforcesh/bullmq/issues/1416)) ([606b75d](https://github.com/taskforcesh/bullmq/commit/606b75d53e12dfc109f01eda38736c07e829e9b7)) ([`ca33621`](https://github.com/taskforcesh/bullmq/commit/ca336213a0fdba07d9abbdae7fa42bc4c52fa8a1)) - -* chore(deps): lock file maintenance ([`7904fb1`](https://github.com/taskforcesh/bullmq/commit/7904fb155406471511403abd2592362d1a176c26)) - -### Feature - -* feat(sandbox): support update method (#1416) ([`606b75d`](https://github.com/taskforcesh/bullmq/commit/606b75d53e12dfc109f01eda38736c07e829e9b7)) - -### Test - -* test(worker): fix test case ([`43c0e72`](https://github.com/taskforcesh/bullmq/commit/43c0e723c8497639e7855e1f3a61865096fc03d4)) - -### Unknown - -* Merge branch 'feat/move-check-stalled-jobs-to-worker' of github.com:taskforcesh/bullmq into feat/move-check-stalled-jobs-to-worker ([`67d7cd6`](https://github.com/taskforcesh/bullmq/commit/67d7cd683e8183bd9a42e5cdcfa152db9c40112c)) - - -## v1.90.2 (2022-09-12) - -### Chore - -* chore(release): 1.90.2 [skip ci] - -## [1.90.2](https://github.com/taskforcesh/bullmq/compare/v1.90.1...v1.90.2) (2022-09-12) - -### Performance Improvements - -* **script-loader:** use cache to read script once ([#1410](https://github.com/taskforcesh/bullmq/issues/1410)) ([f956e93](https://github.com/taskforcesh/bullmq/commit/f956e937ae3488cdcd0e2eacbe3e096c8066ebd1)) ([`31c3297`](https://github.com/taskforcesh/bullmq/commit/31c3297592cf4fb550007e06cf8da8f99a4a2580)) - -* chore(deps): update dependency uuid to v9 ([`ca29c1a`](https://github.com/taskforcesh/bullmq/commit/ca29c1a5bb4e31a48ff84258d94f07961bb1f9a8)) - -* chore(deps): lock file maintenance ([`9d71495`](https://github.com/taskforcesh/bullmq/commit/9d714950965dfdcefc147c81f84f9b52c4e206b7)) - -### Documentation - -* docs: update RedisGreen sponsorship with new name ([`06be1eb`](https://github.com/taskforcesh/bullmq/commit/06be1ebab7c4e8e24cbe4508a6c3153a3e0edb21)) - -* docs(bullmq-pro): update changelog to version 2.4.7 ([`f7234a6`](https://github.com/taskforcesh/bullmq/commit/f7234a61ea8e8884ea90a044ba838fc7a99eb7ad)) - -### Performance - -* perf(script-loader): use cache to read script once (#1410) ([`f956e93`](https://github.com/taskforcesh/bullmq/commit/f956e937ae3488cdcd0e2eacbe3e096c8066ebd1)) - -### Test - -* test(rate-limit): split tests (#1400) ([`f2d00c3`](https://github.com/taskforcesh/bullmq/commit/f2d00c328ce0578dd5837fb37ce471d166d1e246)) - - -## v1.90.1 (2022-09-02) - -### Chore - -* chore(release): 1.90.1 [skip ci] - -## [1.90.1](https://github.com/taskforcesh/bullmq/compare/v1.90.0...v1.90.1) (2022-09-02) - -### Performance Improvements - -* **add-job:** handle parent split on js ([#1397](https://github.com/taskforcesh/bullmq/issues/1397)) ([566f074](https://github.com/taskforcesh/bullmq/commit/566f0747110679e5b07e7642fef793744565fffe)) ([`632d9b6`](https://github.com/taskforcesh/bullmq/commit/632d9b6b94b1d0fc6082d519defc70c8329c7f3f)) - -* chore(deps): lock file maintenance ([`45a8e4d`](https://github.com/taskforcesh/bullmq/commit/45a8e4dadbfc39ce387613e4fbce3867c8c80b95)) - -### Performance - -* perf(add-job): handle parent split on js (#1397) ([`566f074`](https://github.com/taskforcesh/bullmq/commit/566f0747110679e5b07e7642fef793744565fffe)) - - -## v1.90.0 (2022-08-30) - -### Chore - -* chore(release): 1.90.0 [skip ci] - -# [1.90.0](https://github.com/taskforcesh/bullmq/compare/v1.89.2...v1.90.0) (2022-08-30) - -### Features - -* **repeat:** allow passing a cron strategy ([#1248](https://github.com/taskforcesh/bullmq/issues/1248)) ref [#1245](https://github.com/taskforcesh/bullmq/issues/1245) ([7f0534f](https://github.com/taskforcesh/bullmq/commit/7f0534f72449ae14a7415fa17a2eb2a70136a8b0)) ([`0a18c0f`](https://github.com/taskforcesh/bullmq/commit/0a18c0f2f4368c5a716b7147556f545e340f7c12)) - -* chore(deps): update github/codeql-action digest to c7f292e ([`1925925`](https://github.com/taskforcesh/bullmq/commit/192592565a6adf5da7513ade46ca210904f229c3)) - -### Documentation - -* docs(bullmq-pro): update changelog to version 2.4.3 ([`0bf8428`](https://github.com/taskforcesh/bullmq/commit/0bf8428d9174ddcc861ae84f8a7b54df67a4d3ee)) - -### Feature - -* feat(repeat): allow passing a cron strategy (#1248) ref #1245 ([`7f0534f`](https://github.com/taskforcesh/bullmq/commit/7f0534f72449ae14a7415fa17a2eb2a70136a8b0)) - - -## v1.89.2 (2022-08-23) - -### Chore - -* chore(release): 1.89.2 [skip ci] - -## [1.89.2](https://github.com/taskforcesh/bullmq/compare/v1.89.1...v1.89.2) (2022-08-23) - -### Bug Fixes - -* **job:** update delay when changeDelay ([#1389](https://github.com/taskforcesh/bullmq/issues/1389)) fixes [#1160](https://github.com/taskforcesh/bullmq/issues/1160) ([d9b100d](https://github.com/taskforcesh/bullmq/commit/d9b100d04112c518ef2efbcf5586aa1226ccccab)) ([`9d2355a`](https://github.com/taskforcesh/bullmq/commit/9d2355a8f30838d4638f75568f9bb879ce4aac6d)) - -### Fix - -* fix(job): update delay when changeDelay (#1389) fixes #1160 ([`d9b100d`](https://github.com/taskforcesh/bullmq/commit/d9b100d04112c518ef2efbcf5586aa1226ccccab)) - -### Unknown - -* GitBook: [#121] No subject ([`b9fd5bb`](https://github.com/taskforcesh/bullmq/commit/b9fd5bbb15706cc1fef6d9cb00c25581258a10dd)) - - -## v1.89.1 (2022-08-19) - -### Chore - -* chore(release): 1.89.1 [skip ci] - -## [1.89.1](https://github.com/taskforcesh/bullmq/compare/v1.89.0...v1.89.1) (2022-08-19) - -### Bug Fixes - -* revert "chore: allow esm imports through exports field" ([#1388](https://github.com/taskforcesh/bullmq/issues/1388)) ([8e51272](https://github.com/taskforcesh/bullmq/commit/8e512724b1e8145bceb0152b70a934decf6d6864)) ([`db9d1ad`](https://github.com/taskforcesh/bullmq/commit/db9d1ad98628c6023fa05f2f86c09a528405aee7)) - -### Fix - -* fix: revert "chore: allow esm imports through exports field" (#1388) ([`8e51272`](https://github.com/taskforcesh/bullmq/commit/8e512724b1e8145bceb0152b70a934decf6d6864)) - - -## v1.89.0 (2022-08-18) - -### Chore - -* chore(release): 1.89.0 [skip ci] - -# [1.89.0](https://github.com/taskforcesh/bullmq/compare/v1.88.2...v1.89.0) (2022-08-18) - -### Features - -* **job:** expose delay in instance ([#1386](https://github.com/taskforcesh/bullmq/issues/1386)) ([d4d0d2e](https://github.com/taskforcesh/bullmq/commit/d4d0d2e737c7ceb5eb34a2c50d53bd1081e0ad4a)) ([`3ee4f5e`](https://github.com/taskforcesh/bullmq/commit/3ee4f5e0063077e40526b3d3315c2ca76e71657d)) - -### Feature - -* feat(job): expose delay in instance (#1386) ([`d4d0d2e`](https://github.com/taskforcesh/bullmq/commit/d4d0d2e737c7ceb5eb34a2c50d53bd1081e0ad4a)) - - -## v1.88.2 (2022-08-18) - -### Chore - -* chore(release): 1.88.2 [skip ci] - -## [1.88.2](https://github.com/taskforcesh/bullmq/compare/v1.88.1...v1.88.2) (2022-08-18) - -### Bug Fixes - -* revert "feat(sandbox): experimental support ESM" ([#1384](https://github.com/taskforcesh/bullmq/issues/1384)) ([7d180eb](https://github.com/taskforcesh/bullmq/commit/7d180eb18daa41062dcbca72213bc9d9f40153db)) ([`77cfec5`](https://github.com/taskforcesh/bullmq/commit/77cfec58bc2096df7e945b9a811d1341a3f85d65)) - -### Fix - -* fix: revert "feat(sandbox): experimental support ESM" (#1384) - -This reverts commit ed0faff3c67c436116eb625ffacb03e435caee3f. ([`7d180eb`](https://github.com/taskforcesh/bullmq/commit/7d180eb18daa41062dcbca72213bc9d9f40153db)) - -### Style - -* style: restore eslint deps (#1383) ([`5f813c3`](https://github.com/taskforcesh/bullmq/commit/5f813c32150122a596a0a44c527c26964189e0a0)) - - -## v1.88.1 (2022-08-17) - -### Chore - -* chore(release): 1.88.1 [skip ci] - -## [1.88.1](https://github.com/taskforcesh/bullmq/compare/v1.88.0...v1.88.1) (2022-08-17) - -### Bug Fixes - -* fix husky install ([edee918](https://github.com/taskforcesh/bullmq/commit/edee918e84ba895ed4ef63cabcc26b97d9c52d8d)) ([`d08566c`](https://github.com/taskforcesh/bullmq/commit/d08566c05dc6d036c689fd4164e15d20e1bfc74f)) - -### Fix - -* fix: fix husky install ([`edee918`](https://github.com/taskforcesh/bullmq/commit/edee918e84ba895ed4ef63cabcc26b97d9c52d8d)) - - -## v1.88.0 (2022-08-17) - -### Chore - -* chore(release): 1.88.0 [skip ci] - -# [1.88.0](https://github.com/taskforcesh/bullmq/compare/v1.87.2...v1.88.0) (2022-08-17) - -### Bug Fixes - -* **clean:** consider priority when cleaning waiting jobs ([#1357](https://github.com/taskforcesh/bullmq/issues/1357)) ([ced5be1](https://github.com/taskforcesh/bullmq/commit/ced5be1c9531953baa9cf87d6bda3faa5863270d)) -* **parent-priority-check:** use tonumber on priority ([#1370](https://github.com/taskforcesh/bullmq/issues/1370)) ([e2043c6](https://github.com/taskforcesh/bullmq/commit/e2043c6f4b8ad5faea8c13edde76aea60612fec6)) - -### Features - -* **sandbox:** experimental support ESM ([ed0faff](https://github.com/taskforcesh/bullmq/commit/ed0faff3c67c436116eb625ffacb03e435caee3f)) ([`e30b0c9`](https://github.com/taskforcesh/bullmq/commit/e30b0c974d2fc2eedeb434afaf17a80cc2eab5bf)) - -* chore: disable husky in semantic release (#1377) ([`c3cbea5`](https://github.com/taskforcesh/bullmq/commit/c3cbea554a2b507a1551ed960c16568d14cc1642)) - -* chore: upgrade get-port without deprecating node12 (#1374) ([`c9bd025`](https://github.com/taskforcesh/bullmq/commit/c9bd02540e4577b39f819673b80d82a0bd854894)) - -* chore(compat): use some unused types properly (#1360) ([`1916516`](https://github.com/taskforcesh/bullmq/commit/19165160c6184757fb160aac38bb6f22c80188f8)) - -* chore: allow esm imports through exports field ([`f7ae7c0`](https://github.com/taskforcesh/bullmq/commit/f7ae7c0c87bb1eeb7ef897bc77606ddfa667d688)) - -* chore(deps): update dependency tslib to v2 ([`889d7f5`](https://github.com/taskforcesh/bullmq/commit/889d7f5b9c87414ac2f3c898c5014dc192dee44c)) - -* chore(deps): add renovate.json ([`d8c3b0a`](https://github.com/taskforcesh/bullmq/commit/d8c3b0abe04248721c64c5dc3f4b26c47826db9f)) - -* chore: adapt to ioredis 5 ([`1b6cf41`](https://github.com/taskforcesh/bullmq/commit/1b6cf41395e9c2515d044363f9d976d8bdfd0ccc)) - -* chore: update dependencies ([`8063a78`](https://github.com/taskforcesh/bullmq/commit/8063a782d60a6daa326233f54d50ef587148652c)) - -* chore: streamline ci setup ([`3b060fa`](https://github.com/taskforcesh/bullmq/commit/3b060fa6daf803ee3a7510a4759693121a0d184e)) - -### Ci - -* ci: set up nyc coverage limits aligned with reality ([`a22430b`](https://github.com/taskforcesh/bullmq/commit/a22430b5c29ac6a87a889022285ee34f93a56f9e)) - -### Feature - -* feat(sandbox): experimental support ESM ([`ed0faff`](https://github.com/taskforcesh/bullmq/commit/ed0faff3c67c436116eb625ffacb03e435caee3f)) - -### Fix - -* fix(clean): consider priority when cleaning waiting jobs (#1357) ([`ced5be1`](https://github.com/taskforcesh/bullmq/commit/ced5be1c9531953baa9cf87d6bda3faa5863270d)) - -* fix(parent-priority-check): use tonumber on priority (#1370) ([`e2043c6`](https://github.com/taskforcesh/bullmq/commit/e2043c6f4b8ad5faea8c13edde76aea60612fec6)) - - -## v1.87.2 (2022-08-13) - -### Chore - -* chore(release): 1.87.2 [skip ci] - -## [1.87.2](https://github.com/taskforcesh/bullmq/compare/v1.87.1...v1.87.2) (2022-08-13) - -### Bug Fixes - -* **move-parent-to-wait:** emit waiting instead of active event ([#1356](https://github.com/taskforcesh/bullmq/issues/1356)) ([53578dd](https://github.com/taskforcesh/bullmq/commit/53578dd1cbe31b49361a833b1aca449486f3b925)) ([`19c0da8`](https://github.com/taskforcesh/bullmq/commit/19c0da8aa7cd2fe891364dc0cf1b6b26bd77adee)) - -### Fix - -* fix(move-parent-to-wait): emit waiting instead of active event (#1356) ([`53578dd`](https://github.com/taskforcesh/bullmq/commit/53578dd1cbe31b49361a833b1aca449486f3b925)) - - -## v1.87.1 (2022-08-09) - -### Chore - -* chore(release): 1.87.1 [skip ci] - -## [1.87.1](https://github.com/taskforcesh/bullmq/compare/v1.87.0...v1.87.1) (2022-08-09) - -### Bug Fixes - -* **job:** declare discarded as protected ([#1352](https://github.com/taskforcesh/bullmq/issues/1352)) ([870e01c](https://github.com/taskforcesh/bullmq/commit/870e01c4ab602c1e6e351cc369f3eac5f7afa083)) ([`380c56e`](https://github.com/taskforcesh/bullmq/commit/380c56e43bf59895ffc2ca0ed5a2ade79803a872)) - -### Documentation - -* docs(bullmq-pro): update changelog to version 2.3.10 ([`1d9dd6e`](https://github.com/taskforcesh/bullmq/commit/1d9dd6eb812cea211b17785f437ef07a78e90166)) - -### Fix - -* fix(job): declare discarded as protected (#1352) ([`870e01c`](https://github.com/taskforcesh/bullmq/commit/870e01c4ab602c1e6e351cc369f3eac5f7afa083)) - - -## v1.87.0 (2022-08-05) - -### Chore - -* chore(release): 1.87.0 [skip ci] - -# [1.87.0](https://github.com/taskforcesh/bullmq/compare/v1.86.10...v1.87.0) (2022-08-05) - -### Features - -* **flow:** consider priority when parent is moved ([#1286](https://github.com/taskforcesh/bullmq/issues/1286)) ([d49760d](https://github.com/taskforcesh/bullmq/commit/d49760d09420c5fcc99ab06c8fe36168755fd397)) ([`d19a712`](https://github.com/taskforcesh/bullmq/commit/d19a71229b6ddaf8b44b9ad41152f052ff1aeadd)) - -* chore(scripts): generate raw scripts (#1209) ([`d07deb1`](https://github.com/taskforcesh/bullmq/commit/d07deb1cb16180fea6a31922a92c658dc5ebb868)) - -### Documentation - -* docs(bullmq-pro): update changelog to version 2.3.9 ([`64ccdde`](https://github.com/taskforcesh/bullmq/commit/64ccdde2179d8709107f982ea6506804abbfd6f7)) - -### Feature - -* feat(flow): consider priority when parent is moved (#1286) ([`d49760d`](https://github.com/taskforcesh/bullmq/commit/d49760d09420c5fcc99ab06c8fe36168755fd397)) - -### Unknown - -* GitBook: [#120] No subject ([`7ca048a`](https://github.com/taskforcesh/bullmq/commit/7ca048a6b90a0bb13a7f404ff9e8afb8315b22ed)) - -* GitBook: [#119] No subject ([`168f1da`](https://github.com/taskforcesh/bullmq/commit/168f1da199841f50bf4943a3fadfc22db1214f33)) - -* GitBook: [#118] No subject ([`94071e8`](https://github.com/taskforcesh/bullmq/commit/94071e806c3d36c2da44214d0f04912001369b6a)) - - -## v1.86.10 (2022-07-29) - -### Chore - -* chore(release): 1.86.10 [skip ci] - -## [1.86.10](https://github.com/taskforcesh/bullmq/compare/v1.86.9...v1.86.10) (2022-07-29) - -### Performance Improvements - -* **clean-jobs-in-set:** use ZRANGEBYSCORE when limit > 0 ([#1338](https://github.com/taskforcesh/bullmq/issues/1338)) ([f0d9985](https://github.com/taskforcesh/bullmq/commit/f0d998541f03778ca2a092080a19e6bf7b7d0af1)) ([`7251dd7`](https://github.com/taskforcesh/bullmq/commit/7251dd7259ab0d2e1c6343e3fc491ad41195816f)) - -### Performance - -* perf(clean-jobs-in-set): use ZRANGEBYSCORE when limit > 0 (#1338) ([`f0d9985`](https://github.com/taskforcesh/bullmq/commit/f0d998541f03778ca2a092080a19e6bf7b7d0af1)) - - -## v1.86.9 (2022-07-27) - -### Chore - -* chore(release): 1.86.9 [skip ci] - -## [1.86.9](https://github.com/taskforcesh/bullmq/compare/v1.86.8...v1.86.9) (2022-07-27) - -### Bug Fixes - -* **get-flow:** consider groupKey ([#1336](https://github.com/taskforcesh/bullmq/issues/1336)) fixes [#1334](https://github.com/taskforcesh/bullmq/issues/1334) ([9f31272](https://github.com/taskforcesh/bullmq/commit/9f31272fa8b3f5b8ab26f15e21bd80537c5baef0)) ([`9c14458`](https://github.com/taskforcesh/bullmq/commit/9c14458ca130171c38af82d2d0bd51b8779f21cc)) - -### Fix - -* fix(get-flow): consider groupKey (#1336) fixes #1334 ([`9f31272`](https://github.com/taskforcesh/bullmq/commit/9f31272fa8b3f5b8ab26f15e21bd80537c5baef0)) - - -## v1.86.8 (2022-07-26) - -### Chore - -* chore(release): 1.86.8 [skip ci] - -## [1.86.8](https://github.com/taskforcesh/bullmq/compare/v1.86.7...v1.86.8) (2022-07-26) - -### Bug Fixes - -* **promote:** consider empty queue when paused ([#1335](https://github.com/taskforcesh/bullmq/issues/1335)) ([9f742e8](https://github.com/taskforcesh/bullmq/commit/9f742e88d6338ce9ac7e0413bdac411ab6cf675c)) ([`19b34bd`](https://github.com/taskforcesh/bullmq/commit/19b34bd3005e0dc21a6a181ac6771142bf8454eb)) - -### Documentation - -* docs(bullmq-pro): update changelog to version 2.3.5 ([`788faef`](https://github.com/taskforcesh/bullmq/commit/788faefbb0240964cedb35daadf296d258417965)) - -* docs(readme): fix incorrect typescript example (#1329) ([`4646f3b`](https://github.com/taskforcesh/bullmq/commit/4646f3b292788e824b15b1cb670fee9a341e6d24)) - -### Fix - -* fix(promote): consider empty queue when paused (#1335) ([`9f742e8`](https://github.com/taskforcesh/bullmq/commit/9f742e88d6338ce9ac7e0413bdac411ab6cf675c)) - -### Refactor - -* refactor(job): replace slow object destructuring with single object in getDependencies (#1324) fixes #1323 ([`ec8afcc`](https://github.com/taskforcesh/bullmq/commit/ec8afcc54a7fc6feeb9fcd124b5c69392909b8d3)) - -### Unknown - -* GitBook: [#117] No subject ([`cbe57d2`](https://github.com/taskforcesh/bullmq/commit/cbe57d29043acebf150525f5c4110eb12bde8de1)) - - -## v1.86.7 (2022-07-15) - -### Chore - -* chore(release): 1.86.7 [skip ci] - -## [1.86.7](https://github.com/taskforcesh/bullmq/compare/v1.86.6...v1.86.7) (2022-07-15) - -### Bug Fixes - -* **sandboxed-process:** consider UnrecoverableError ([#1320](https://github.com/taskforcesh/bullmq/issues/1320)) fixes [#1317](https://github.com/taskforcesh/bullmq/issues/1317) ([c1269cc](https://github.com/taskforcesh/bullmq/commit/c1269cc772c6cec84d82ff790b9a7c9cc4242dcb)) ([`306543a`](https://github.com/taskforcesh/bullmq/commit/306543a7e055c22faa6c34c1bb7190060691458f)) - -### Fix - -* fix(sandboxed-process): consider UnrecoverableError (#1320) fixes #1317 ([`c1269cc`](https://github.com/taskforcesh/bullmq/commit/c1269cc772c6cec84d82ff790b9a7c9cc4242dcb)) - - -## v1.86.6 (2022-07-14) - -### Chore - -* chore(release): 1.86.6 [skip ci] - -## [1.86.6](https://github.com/taskforcesh/bullmq/compare/v1.86.5...v1.86.6) (2022-07-14) - -### Bug Fixes - -* **retry-jobs:** consider paused queue ([#1321](https://github.com/taskforcesh/bullmq/issues/1321)) ([3e9703d](https://github.com/taskforcesh/bullmq/commit/3e9703d17fc9dc601d5d77e999f3e9a137f20843)) ([`970bb87`](https://github.com/taskforcesh/bullmq/commit/970bb87eff67fce0fb4d37609182ad47d3e9309e)) - -* chore(deps-dev): bump moment from 2.29.2 to 2.29.4 (#1315) ([`e50bd88`](https://github.com/taskforcesh/bullmq/commit/e50bd884707777d60f039e223572cdfb8be11c0d)) - -### Documentation - -* docs(bullmq-pro): update changelog ([`331f6fd`](https://github.com/taskforcesh/bullmq/commit/331f6fdae579e3f2810810d645ab61afdbe86272)) - -### Fix - -* fix(retry-jobs): consider paused queue (#1321) ([`3e9703d`](https://github.com/taskforcesh/bullmq/commit/3e9703d17fc9dc601d5d77e999f3e9a137f20843)) - - -## v1.86.5 (2022-07-09) - -### Chore - -* chore(release): 1.86.5 [skip ci] - -## [1.86.5](https://github.com/taskforcesh/bullmq/compare/v1.86.4...v1.86.5) (2022-07-09) - -### Bug Fixes - -* **retry-job:** consider paused queue ([#1314](https://github.com/taskforcesh/bullmq/issues/1314)) ([907ae1d](https://github.com/taskforcesh/bullmq/commit/907ae1d7e3504f31c625ec8a09e32785f08357ff)) ([`4c182df`](https://github.com/taskforcesh/bullmq/commit/4c182df13c2223b2d6615506844999c474adf1bd)) - -### Documentation - -* docs(bullmq-pro): update changelog ([`ff1f1ee`](https://github.com/taskforcesh/bullmq/commit/ff1f1ee5b5cdec0e9c669df99699cc4a4b9840e5)) - -* docs(bullmq-pro): update changelog ([`dba0b3b`](https://github.com/taskforcesh/bullmq/commit/dba0b3bd86850fe612f38c9a122cf9ccd8ab0194)) - -* docs: add new api references ([`bd64c46`](https://github.com/taskforcesh/bullmq/commit/bd64c4663ce956d24e4b2d37134416ba5f344899)) - -### Fix - -* fix(retry-job): consider paused queue (#1314) ([`907ae1d`](https://github.com/taskforcesh/bullmq/commit/907ae1d7e3504f31c625ec8a09e32785f08357ff)) - -### Unknown - -* GitBook: [#116] No subject ([`40ca91b`](https://github.com/taskforcesh/bullmq/commit/40ca91b823f4141de3ec59e44c821c4a5d2d1052)) - -* GitBook: [#114] No subject ([`29a1ba9`](https://github.com/taskforcesh/bullmq/commit/29a1ba95db0a2986468ebe8159a904b783bef8d8)) - - -## v1.86.4 (2022-06-29) - -### Chore - -* chore(release): 1.86.4 [skip ci] - -## [1.86.4](https://github.com/taskforcesh/bullmq/compare/v1.86.3...v1.86.4) (2022-06-29) - -### Bug Fixes - -* **parent:** emit waiting event when no pending children ([#1296](https://github.com/taskforcesh/bullmq/issues/1296)) ([aa8fa3f](https://github.com/taskforcesh/bullmq/commit/aa8fa3f8cd5ab6d7d309d87ae45c558249b1c29c)) ([`868bb00`](https://github.com/taskforcesh/bullmq/commit/868bb00213626fdfa3c8594c8f8dfea9b47cd7b1)) - -### Documentation - -* docs: add Novu in "used by" ([`b1de9bc`](https://github.com/taskforcesh/bullmq/commit/b1de9bc3378f6d0ef9a8f3f4bd20ea2216b902a0)) - -* docs(pausing-groups): update description and bullmq-pro changelog ([`fdc894b`](https://github.com/taskforcesh/bullmq/commit/fdc894b4cc39705cb73409db8ea37328999d0302)) - -### Fix - -* fix(parent): emit waiting event when no pending children (#1296) ([`aa8fa3f`](https://github.com/taskforcesh/bullmq/commit/aa8fa3f8cd5ab6d7d309d87ae45c558249b1c29c)) - - -## v1.86.3 (2022-06-26) - -### Chore - -* chore(release): 1.86.3 [skip ci] - -## [1.86.3](https://github.com/taskforcesh/bullmq/compare/v1.86.2...v1.86.3) (2022-06-26) - -### Bug Fixes - -* avoid calling delay() if queue is being closed ([#1295](https://github.com/taskforcesh/bullmq/issues/1295)) ([52a5045](https://github.com/taskforcesh/bullmq/commit/52a5045b903ed6e0e73dd747748787a6389f12f7)) ([`9dc1420`](https://github.com/taskforcesh/bullmq/commit/9dc1420f08e094df821085412e55a4e0dbac36ec)) - -### Documentation - -* docs(bullmq-pro): add pausing-groups section ([`b7b8741`](https://github.com/taskforcesh/bullmq/commit/b7b874134e01d8d3ff5078823037d897d8a5d5a1)) - -### Fix - -* fix: avoid calling delay() if queue is being closed (#1295) ([`52a5045`](https://github.com/taskforcesh/bullmq/commit/52a5045b903ed6e0e73dd747748787a6389f12f7)) - -### Unknown - -* GitBook: [#113] No subject ([`5b1a71a`](https://github.com/taskforcesh/bullmq/commit/5b1a71a6200b4b5c8e42f9dd618441c223ffe834)) - -* GitBook: [#112] No subject ([`897c4b3`](https://github.com/taskforcesh/bullmq/commit/897c4b3451ba373409dcd3c96b84b3c3c59bbf17)) - - -## v1.86.2 (2022-06-16) - -### Chore - -* chore(release): 1.86.2 [skip ci] - -## [1.86.2](https://github.com/taskforcesh/bullmq/compare/v1.86.1...v1.86.2) (2022-06-16) - -### Bug Fixes - -* **queue:** get rid of repeat options from defaultJobOptions ([#1284](https://github.com/taskforcesh/bullmq/issues/1284)) ([cdd2a20](https://github.com/taskforcesh/bullmq/commit/cdd2a20c2c4ca47042ecd1da525ecb72941e4910)) ([`88095f6`](https://github.com/taskforcesh/bullmq/commit/88095f6261ca57cf13eba5582cb71d7b69ab2339)) - -### Fix - -* fix(queue): get rid of repeat options from defaultJobOptions (#1284) ([`cdd2a20`](https://github.com/taskforcesh/bullmq/commit/cdd2a20c2c4ca47042ecd1da525ecb72941e4910)) - - -## v1.86.1 (2022-06-12) - -### Chore - -* chore(release): 1.86.1 [skip ci] - -## [1.86.1](https://github.com/taskforcesh/bullmq/compare/v1.86.0...v1.86.1) (2022-06-12) - -### Bug Fixes - -* unpack empty metrics in batches ([96829db](https://github.com/taskforcesh/bullmq/commit/96829db839fad4489415f7dbb047abdca5566e78)) ([`1769ce1`](https://github.com/taskforcesh/bullmq/commit/1769ce15d907269c34be1b26671ab5e71fae43d1)) - -### Fix - -* fix: unpack empty metrics in batches ([`96829db`](https://github.com/taskforcesh/bullmq/commit/96829db839fad4489415f7dbb047abdca5566e78)) - - -## v1.86.0 (2022-06-10) - -### Chore - -* chore(release): 1.86.0 [skip ci] - -# [1.86.0](https://github.com/taskforcesh/bullmq/compare/v1.85.4...v1.86.0) (2022-06-10) - -### Features - -* **repeat:** save repeatJobKey reference ([#1214](https://github.com/taskforcesh/bullmq/issues/1214)) ([4d5a8e3](https://github.com/taskforcesh/bullmq/commit/4d5a8e33b614cf099369c18298e5b2963b434b1b)) ([`363f6c0`](https://github.com/taskforcesh/bullmq/commit/363f6c05f0ca64db9fc7a028b57b9a301a9a8808)) - -### Documentation - -* docs: add some missing API documentation ([`8baaae6`](https://github.com/taskforcesh/bullmq/commit/8baaae6f3625ccb88d22e4bd1938447b8352d3f7)) - -* docs(bullmq-pro): add ttl per job name description (#1276) ([`2d59174`](https://github.com/taskforcesh/bullmq/commit/2d59174986c55fce334999fdb2905e06a948edb5)) - -### Feature - -* feat(repeat): save repeatJobKey reference (#1214) ([`4d5a8e3`](https://github.com/taskforcesh/bullmq/commit/4d5a8e33b614cf099369c18298e5b2963b434b1b)) - - -## v1.85.4 (2022-06-08) - -### Chore - -* chore(release): 1.85.4 [skip ci] - -## [1.85.4](https://github.com/taskforcesh/bullmq/compare/v1.85.3...v1.85.4) (2022-06-08) - -### Bug Fixes - -* **error-prototype:** define custom name for toJSON method ([#1272](https://github.com/taskforcesh/bullmq/issues/1272)) ([66d80da](https://github.com/taskforcesh/bullmq/commit/66d80da4a6043755c7d296addb31857816ea4da3)) ([`9dbec4a`](https://github.com/taskforcesh/bullmq/commit/9dbec4a7329f650931abd198940b5a8c926fd6c1)) - -* chore(deps): bump semver-regex from 3.1.3 to 3.1.4 (#1269) ([`90592a2`](https://github.com/taskforcesh/bullmq/commit/90592a2f2b123fd2565ffc679a0efeaff83bde0d)) - -### Fix - -* fix(error-prototype): define custom name for toJSON method (#1272) ([`66d80da`](https://github.com/taskforcesh/bullmq/commit/66d80da4a6043755c7d296addb31857816ea4da3)) - -### Refactor - -* refactor(clean-jobs-in-set): split script into include functions (#1271) ([`f3fc053`](https://github.com/taskforcesh/bullmq/commit/f3fc053b33df2deb2cfa1f89d0c774e94c6d61d2)) - - -## v1.85.3 (2022-06-03) - -### Chore - -* chore(release): 1.85.3 [skip ci] - -## [1.85.3](https://github.com/taskforcesh/bullmq/compare/v1.85.2...v1.85.3) (2022-06-03) - -### Bug Fixes - -* **queue:** fix addBulk signature ResultType ([#1268](https://github.com/taskforcesh/bullmq/issues/1268)) ([f6770cc](https://github.com/taskforcesh/bullmq/commit/f6770cc383b68bf7b2fa655cd9eda713a06835aa)) ([`7ad899b`](https://github.com/taskforcesh/bullmq/commit/7ad899b55d35cc911afbbdd67b68bd06b001e39c)) - -### Documentation - -* docs(concurrency): add concurrency update description (#1264) ([`7249012`](https://github.com/taskforcesh/bullmq/commit/7249012f189632957ee1ec62f563e1a7445f1cdb)) - -### Fix - -* fix(queue): fix addBulk signature ResultType (#1268) ([`f6770cc`](https://github.com/taskforcesh/bullmq/commit/f6770cc383b68bf7b2fa655cd9eda713a06835aa)) - - -## v1.85.2 (2022-06-01) - -### Chore - -* chore(release): 1.85.2 [skip ci] - -## [1.85.2](https://github.com/taskforcesh/bullmq/compare/v1.85.1...v1.85.2) (2022-06-01) - -### Bug Fixes - -* **job:** save finishedOn attribute on instance ([#1267](https://github.com/taskforcesh/bullmq/issues/1267)) ([4cf6a63](https://github.com/taskforcesh/bullmq/commit/4cf6a63d197e6095841bb87cef297a9533ac79c3)) ([`137cd8e`](https://github.com/taskforcesh/bullmq/commit/137cd8e755a255db1083424c47bad2c183a0b2cc)) - -### Fix - -* fix(job): save finishedOn attribute on instance (#1267) ([`4cf6a63`](https://github.com/taskforcesh/bullmq/commit/4cf6a63d197e6095841bb87cef297a9533ac79c3)) - - -## v1.85.1 (2022-05-31) - -### Chore - -* chore(release): 1.85.1 [skip ci] - -## [1.85.1](https://github.com/taskforcesh/bullmq/compare/v1.85.0...v1.85.1) (2022-05-31) - -### Performance Improvements - -* **remove-job:** send prefix key instead of jobKey ([#1252](https://github.com/taskforcesh/bullmq/issues/1252)) ([452856a](https://github.com/taskforcesh/bullmq/commit/452856a6c8c6e67ffda595c26c30988a15c1c1a4)) ([`d77bacc`](https://github.com/taskforcesh/bullmq/commit/d77baccd72ef904c415bf5d94b615d9d07770275)) - -### Performance - -* perf(remove-job): send prefix key instead of jobKey (#1252) ([`452856a`](https://github.com/taskforcesh/bullmq/commit/452856a6c8c6e67ffda595c26c30988a15c1c1a4)) - - -## v1.85.0 (2022-05-30) - -### Chore - -* chore(release): 1.85.0 [skip ci] - -# [1.85.0](https://github.com/taskforcesh/bullmq/compare/v1.84.1...v1.85.0) (2022-05-30) - -### Features - -* **worker:** change the number of concurrent processes ([#1256](https://github.com/taskforcesh/bullmq/issues/1256)) ref [#22](https://github.com/taskforcesh/bullmq/issues/22) ([940dc8f](https://github.com/taskforcesh/bullmq/commit/940dc8f34d9a46dc9c8384661461bf0558e97600)) ([`9cfda3d`](https://github.com/taskforcesh/bullmq/commit/9cfda3d2dd640350d7b41f2449cd89318a237610)) - -### Documentation - -* docs(step-jobs): fix waiting children step (#1261) ([`35b0283`](https://github.com/taskforcesh/bullmq/commit/35b028356e41ef3b646db44e1cfe7a1cf64d3f3e)) - -### Feature - -* feat(worker): change the number of concurrent processes (#1256) ref #22 ([`940dc8f`](https://github.com/taskforcesh/bullmq/commit/940dc8f34d9a46dc9c8384661461bf0558e97600)) - - -## v1.84.1 (2022-05-27) - -### Chore - -* chore(release): 1.84.1 [skip ci] - -## [1.84.1](https://github.com/taskforcesh/bullmq/compare/v1.84.0...v1.84.1) (2022-05-27) - -### Bug Fixes - -* **waiting-children:** pass right timestamp value in moveToWaitingChildren ([#1260](https://github.com/taskforcesh/bullmq/issues/1260)) ([0f993f7](https://github.com/taskforcesh/bullmq/commit/0f993f71ed481b02a3f859a2109177352336cb9a)) ([`5d68aef`](https://github.com/taskforcesh/bullmq/commit/5d68aef2715d2ba474893bd343a34753f1e0eccb)) - -### Fix - -* fix(waiting-children): pass right timestamp value in moveToWaitingChildren (#1260) ([`0f993f7`](https://github.com/taskforcesh/bullmq/commit/0f993f71ed481b02a3f859a2109177352336cb9a)) - - -## v1.84.0 (2022-05-26) - -### Chore - -* chore(release): 1.84.0 [skip ci] - -# [1.84.0](https://github.com/taskforcesh/bullmq/compare/v1.83.2...v1.84.0) (2022-05-26) - -### Features - -* **flow-producer:** add event listener types ([#1257](https://github.com/taskforcesh/bullmq/issues/1257)) ([19ed099](https://github.com/taskforcesh/bullmq/commit/19ed099905cbb4f071370b2b6d67d9a378e3a8f8)) ([`0dac923`](https://github.com/taskforcesh/bullmq/commit/0dac92327328838730cdee8ca33918611e05d5d9)) - -### Documentation - -* docs(bullmq-pro): update changelog ([`2c7639d`](https://github.com/taskforcesh/bullmq/commit/2c7639d389c82370889f5164460ea2ef746931ba)) - -### Feature - -* feat(flow-producer): add event listener types (#1257) ([`19ed099`](https://github.com/taskforcesh/bullmq/commit/19ed099905cbb4f071370b2b6d67d9a378e3a8f8)) - - -## v1.83.2 (2022-05-24) - -### Chore - -* chore(release): 1.83.2 [skip ci] - -## [1.83.2](https://github.com/taskforcesh/bullmq/compare/v1.83.1...v1.83.2) (2022-05-24) - -### Bug Fixes - -* **close:** emit ioredis:close event instead of error ([#1251](https://github.com/taskforcesh/bullmq/issues/1251)) fixes [#1231](https://github.com/taskforcesh/bullmq/issues/1231) ([74c1c38](https://github.com/taskforcesh/bullmq/commit/74c1c38f7ff468da1adc63aff160e31940d682a9)) ([`eb38636`](https://github.com/taskforcesh/bullmq/commit/eb38636346b5b679f6967671fbb3ca84fda68fd8)) - -### Fix - -* fix(close): emit ioredis:close event instead of error (#1251) fixes #1231 ([`74c1c38`](https://github.com/taskforcesh/bullmq/commit/74c1c38f7ff468da1adc63aff160e31940d682a9)) - - -## v1.83.1 (2022-05-24) - -### Chore - -* chore(release): 1.83.1 [skip ci] - -## [1.83.1](https://github.com/taskforcesh/bullmq/compare/v1.83.0...v1.83.1) (2022-05-24) - -### Bug Fixes - -* **get-workers:** use blockingConnection client to set clientName ([#1255](https://github.com/taskforcesh/bullmq/issues/1255)) fixes [#1254](https://github.com/taskforcesh/bullmq/issues/1254) ([df796bd](https://github.com/taskforcesh/bullmq/commit/df796bd0c085aff72cef001395809b3f1a8045e4)) ([`41cc7f1`](https://github.com/taskforcesh/bullmq/commit/41cc7f1cade5410664873ffacb8569f37f6a409f)) - -### Documentation - -* docs(bullmq-pro): update changelog ([`a705738`](https://github.com/taskforcesh/bullmq/commit/a70573854ca70310d80a761e940640083f8e311d)) - -### Fix - -* fix(get-workers): use blockingConnection client to set clientName (#1255) fixes #1254 ([`df796bd`](https://github.com/taskforcesh/bullmq/commit/df796bd0c085aff72cef001395809b3f1a8045e4)) - - -## v1.83.0 (2022-05-20) - -### Chore - -* chore(release): 1.83.0 [skip ci] - -# [1.83.0](https://github.com/taskforcesh/bullmq/compare/v1.82.3...v1.83.0) (2022-05-20) - -### Features - -* **flow-producer:** easier to build extension ([#1250](https://github.com/taskforcesh/bullmq/issues/1250)) ([aaf637e](https://github.com/taskforcesh/bullmq/commit/aaf637e74b9610651fd9e4efc5ff349971b7bb26)) ([`44ee7cf`](https://github.com/taskforcesh/bullmq/commit/44ee7cff2e3570acda6ded8836fca91a11db3d15)) - -### Feature - -* feat(flow-producer): easier to build extension (#1250) ([`aaf637e`](https://github.com/taskforcesh/bullmq/commit/aaf637e74b9610651fd9e4efc5ff349971b7bb26)) - - -## v1.82.3 (2022-05-19) - -### Chore - -* chore(release): 1.82.3 [skip ci] - -## [1.82.3](https://github.com/taskforcesh/bullmq/compare/v1.82.2...v1.82.3) (2022-05-19) - -### Bug Fixes - -* **redis-connection:** save cluster opts and coerse redis version ([#1247](https://github.com/taskforcesh/bullmq/issues/1247)) ref [#1246](https://github.com/taskforcesh/bullmq/issues/1246) fixes [#1243](https://github.com/taskforcesh/bullmq/issues/1243) ([acb69b5](https://github.com/taskforcesh/bullmq/commit/acb69b57d7a6417b8ca9fe1576a94d16e41f12d7)) ([`cd8ffa4`](https://github.com/taskforcesh/bullmq/commit/cd8ffa4958bba16b389114c8c37c847f8a6cf17a)) - -### Documentation - -* docs(bullmq-pro): update changelog (#1244) ([`1e4e1bc`](https://github.com/taskforcesh/bullmq/commit/1e4e1bc729208fb0d2c423694e9e686418ed5aab)) - -### Fix - -* fix(redis-connection): save cluster opts and coerse redis version (#1247) ref #1246 fixes #1243 ([`acb69b5`](https://github.com/taskforcesh/bullmq/commit/acb69b57d7a6417b8ca9fe1576a94d16e41f12d7)) - - -## v1.82.2 (2022-05-17) - -### Chore - -* chore(release): 1.82.2 [skip ci] - -## [1.82.2](https://github.com/taskforcesh/bullmq/compare/v1.82.1...v1.82.2) (2022-05-17) - -### Bug Fixes - -* **job:** add job helper attribute for extension ([#1242](https://github.com/taskforcesh/bullmq/issues/1242)) ([4d7ae9e](https://github.com/taskforcesh/bullmq/commit/4d7ae9e3fda23650e802ebac6b33ff3350f116f6)) ([`5d77e15`](https://github.com/taskforcesh/bullmq/commit/5d77e15a498e9d25349beabe55b4fa8e025f9c6d)) - -### Fix - -* fix(job): add job helper attribute for extension (#1242) ([`4d7ae9e`](https://github.com/taskforcesh/bullmq/commit/4d7ae9e3fda23650e802ebac6b33ff3350f116f6)) - - -## v1.82.1 (2022-05-16) - -### Chore - -* chore(release): 1.82.1 [skip ci] - -## [1.82.1](https://github.com/taskforcesh/bullmq/compare/v1.82.0...v1.82.1) (2022-05-16) - -### Bug Fixes - -* **remove-job:** pass right prev param in removed event ([#1237](https://github.com/taskforcesh/bullmq/issues/1237)) ([54df47e](https://github.com/taskforcesh/bullmq/commit/54df47edf715a0a2a42687bf827e0a62c03951a5)) ([`547a853`](https://github.com/taskforcesh/bullmq/commit/547a85368ffedab4f642dea70813945050e53cf4)) - -### Fix - -* fix(remove-job): pass right prev param in removed event (#1237) ([`54df47e`](https://github.com/taskforcesh/bullmq/commit/54df47edf715a0a2a42687bf827e0a62c03951a5)) - -### Refactor - -* refactor(scripts): create class instance to handle scripts call (#1240) ([`87a16f0`](https://github.com/taskforcesh/bullmq/commit/87a16f0570d17e4db33fc5deb0131d4c8209704a)) - - -## v1.82.0 (2022-05-11) - -### Chore - -* chore(release): 1.82.0 [skip ci] - -# [1.82.0](https://github.com/taskforcesh/bullmq/compare/v1.81.4...v1.82.0) (2022-05-11) - -### Features - -* **remove-repeatable:** return boolean depending on job existence ([#1239](https://github.com/taskforcesh/bullmq/issues/1239)) ref [#1235](https://github.com/taskforcesh/bullmq/issues/1235) ([59b0da7](https://github.com/taskforcesh/bullmq/commit/59b0da7d0e979e4f9e8a5b042acbdce433790611)) ([`a0b179c`](https://github.com/taskforcesh/bullmq/commit/a0b179cba0349f166dc20f2bac28e1ea7f715592)) - -### Documentation - -* docs(bullmq-pro): add version 2.0.3 changelog ([`a265398`](https://github.com/taskforcesh/bullmq/commit/a26539826479ff360e6313b3b9bad80a0c935caa)) - -* docs(bullmq-pro): add changelog (#1234) ([`fb1ece0`](https://github.com/taskforcesh/bullmq/commit/fb1ece0c534250b90452bcf021bc77779a7f35a3)) - -### Feature - -* feat(remove-repeatable): return boolean depending on job existence (#1239) ref #1235 ([`59b0da7`](https://github.com/taskforcesh/bullmq/commit/59b0da7d0e979e4f9e8a5b042acbdce433790611)) - -### Refactor - -* refactor(remove-jobs): remove timestamp param from removeJobsByMaxCount (#1233) ([`83465ff`](https://github.com/taskforcesh/bullmq/commit/83465ff391ea2ba050adc62bba5630d311f66fab)) - - -## v1.81.4 (2022-05-05) - -### Chore - -* chore(release): 1.81.4 [skip ci] - -## [1.81.4](https://github.com/taskforcesh/bullmq/compare/v1.81.3...v1.81.4) (2022-05-05) - -### Bug Fixes - -* **repeatable:** emit removed event when removing ([#1229](https://github.com/taskforcesh/bullmq/issues/1229)) ([7d2de8d](https://github.com/taskforcesh/bullmq/commit/7d2de8d075e5ee7774501429c5177b729c430c20)) ([`7edc886`](https://github.com/taskforcesh/bullmq/commit/7edc886fd2bc7ec18640e30e9eabaf1ea0ef6493)) - -### Fix - -* fix(repeatable): emit removed event when removing (#1229) ([`7d2de8d`](https://github.com/taskforcesh/bullmq/commit/7d2de8d075e5ee7774501429c5177b729c430c20)) - - -## v1.81.3 (2022-05-04) - -### Chore - -* chore(release): 1.81.3 [skip ci] - -## [1.81.3](https://github.com/taskforcesh/bullmq/compare/v1.81.2...v1.81.3) (2022-05-04) - -### Bug Fixes - -* **remove-parent:** check removed record from waiting-children ([#1227](https://github.com/taskforcesh/bullmq/issues/1227)) ([e7b25d0](https://github.com/taskforcesh/bullmq/commit/e7b25d00acb860ee3df36c6214a7162b2cf79635)) ([`6cc16d6`](https://github.com/taskforcesh/bullmq/commit/6cc16d66fe5afd79ca9d2e3af9a135c8f47ca758)) - -### Fix - -* fix(remove-parent): check removed record from waiting-children (#1227) ([`e7b25d0`](https://github.com/taskforcesh/bullmq/commit/e7b25d00acb860ee3df36c6214a7162b2cf79635)) - - -## v1.81.2 (2022-05-03) - -### Chore - -* chore(release): 1.81.2 [skip ci] - -## [1.81.2](https://github.com/taskforcesh/bullmq/compare/v1.81.1...v1.81.2) (2022-05-03) - -### Bug Fixes - -* **stalled:** consider removeOnFail when failing jobs ([#1225](https://github.com/taskforcesh/bullmq/issues/1225)) fixes [#1171](https://github.com/taskforcesh/bullmq/issues/1171) ([38486cb](https://github.com/taskforcesh/bullmq/commit/38486cb4d7cbfc78bd64d71f19d8bfbc908f3fc7)) ([`c175c13`](https://github.com/taskforcesh/bullmq/commit/c175c13c25f32987d65f2195fca6bba1840ed5c7)) - -### Fix - -* fix(stalled): consider removeOnFail when failing jobs (#1225) fixes #1171 ([`38486cb`](https://github.com/taskforcesh/bullmq/commit/38486cb4d7cbfc78bd64d71f19d8bfbc908f3fc7)) - - -## v1.81.1 (2022-04-29) - -### Chore - -* chore(release): 1.81.1 [skip ci] - -## [1.81.1](https://github.com/taskforcesh/bullmq/compare/v1.81.0...v1.81.1) (2022-04-29) - -### Bug Fixes - -* **add-bulk:** use for loop and throw if error is present ([#1223](https://github.com/taskforcesh/bullmq/issues/1223)) fixes [#1222](https://github.com/taskforcesh/bullmq/issues/1222) ([564de4f](https://github.com/taskforcesh/bullmq/commit/564de4f907648f5a5667a845c5366f73cff1d384)) ([`22fae96`](https://github.com/taskforcesh/bullmq/commit/22fae96f2b03ace7b9d00390ef451c12ea14e3b4)) - -### Fix - -* fix(add-bulk): use for loop and throw if error is present (#1223) fixes #1222 ([`564de4f`](https://github.com/taskforcesh/bullmq/commit/564de4f907648f5a5667a845c5366f73cff1d384)) - - -## v1.81.0 (2022-04-26) - -### Chore - -* chore(release): 1.81.0 [skip ci] - -# [1.81.0](https://github.com/taskforcesh/bullmq/compare/v1.80.6...v1.81.0) (2022-04-26) - -### Features - -* **move-to-delayed:** allow passing token ([#1213](https://github.com/taskforcesh/bullmq/issues/1213)) ([14f0e4a](https://github.com/taskforcesh/bullmq/commit/14f0e4a33d9ddfbaa1f86dbe7598e20a516a9d09)) ([`b01db23`](https://github.com/taskforcesh/bullmq/commit/b01db23ecf4947011d09870c5a2a7e76753cf3c4)) - -### Documentation - -* docs: add missing read more sections ([`3e995f6`](https://github.com/taskforcesh/bullmq/commit/3e995f6dd70813da2dfea7c547fc20cbf24836da)) - -### Feature - -* feat(move-to-delayed): allow passing token (#1213) - -fix(move-to-waiting-children): delete lock ([`14f0e4a`](https://github.com/taskforcesh/bullmq/commit/14f0e4a33d9ddfbaa1f86dbe7598e20a516a9d09)) - -### Unknown - -* GitBook: [#111] docs: add Curri in used by ([`60da723`](https://github.com/taskforcesh/bullmq/commit/60da723cc5f75b5e6bc4a1d55a3c0e31ba2bc6ad)) - -* GitBook: [#110] docs: update queues section links ([`73ac8c7`](https://github.com/taskforcesh/bullmq/commit/73ac8c75775083476e17a3e6ae62e4b4fe0fe6be)) - - -## v1.80.6 (2022-04-22) - -### Chore - -* chore(release): 1.80.6 [skip ci] - -## [1.80.6](https://github.com/taskforcesh/bullmq/compare/v1.80.5...v1.80.6) (2022-04-22) - -### Bug Fixes - -* **job:** delete token when moving to delayed ([#1208](https://github.com/taskforcesh/bullmq/issues/1208)) ([37acf41](https://github.com/taskforcesh/bullmq/commit/37acf4109d17090dfaef992267e48130d34f7187)) ([`86a1874`](https://github.com/taskforcesh/bullmq/commit/86a1874699bfe9bd9214344d6d4c451e148582b2)) - -### Fix - -* fix(job): delete token when moving to delayed (#1208) ([`37acf41`](https://github.com/taskforcesh/bullmq/commit/37acf4109d17090dfaef992267e48130d34f7187)) - - -## v1.80.5 (2022-04-21) - -### Chore - -* chore(release): 1.80.5 [skip ci] - -## [1.80.5](https://github.com/taskforcesh/bullmq/compare/v1.80.4...v1.80.5) (2022-04-21) - -### Bug Fixes - -* **queue-base:** emit close error when no closing ([#1203](https://github.com/taskforcesh/bullmq/issues/1203)) fixes [#1205](https://github.com/taskforcesh/bullmq/issues/1205) ([4d76582](https://github.com/taskforcesh/bullmq/commit/4d7658272af94b57a09486e1141b0e15a7bac3ba)) ([`6cd3a19`](https://github.com/taskforcesh/bullmq/commit/6cd3a19a68ee308ad2d8e1c79b34ffee55efdf30)) - -### Documentation - -* docs: change order of summary ([`7a3206f`](https://github.com/taskforcesh/bullmq/commit/7a3206fe97cf801db4042cfe96a912c695037916)) - -* docs: fix README.md heading ([`dda13cf`](https://github.com/taskforcesh/bullmq/commit/dda13cfa898f24f0b31de58e2f24d55f097e1476)) - -### Fix - -* fix(queue-base): emit close error when no closing (#1203) fixes #1205 ([`4d76582`](https://github.com/taskforcesh/bullmq/commit/4d7658272af94b57a09486e1141b0e15a7bac3ba)) - - -## v1.80.4 (2022-04-19) - -### Chore - -* chore(release): 1.80.4 [skip ci] - -## [1.80.4](https://github.com/taskforcesh/bullmq/compare/v1.80.3...v1.80.4) (2022-04-19) - -### Bug Fixes - -* **queue-scheduler:** apply isNotConnectionError ([#1189](https://github.com/taskforcesh/bullmq/issues/1189)) fixes [#1181](https://github.com/taskforcesh/bullmq/issues/1181) ([605d685](https://github.com/taskforcesh/bullmq/commit/605d68595d8fa1d9d47348a3fa9e0d7a4e28c706)) ([`d48fe2a`](https://github.com/taskforcesh/bullmq/commit/d48fe2a35b20cdbcd4d84861bc3fb607f64631b7)) - -### Fix - -* fix(queue-scheduler): apply isNotConnectionError (#1189) fixes #1181 ([`605d685`](https://github.com/taskforcesh/bullmq/commit/605d68595d8fa1d9d47348a3fa9e0d7a4e28c706)) - - -## v1.80.3 (2022-04-15) - -### Chore - -* chore(release): 1.80.3 [skip ci] - -## [1.80.3](https://github.com/taskforcesh/bullmq/compare/v1.80.2...v1.80.3) (2022-04-15) - -### Bug Fixes - -* **cluster:** check correct Upstash host ([#1195](https://github.com/taskforcesh/bullmq/issues/1195)) fixes [#1193](https://github.com/taskforcesh/bullmq/issues/1193) ([69f2863](https://github.com/taskforcesh/bullmq/commit/69f28632408c741219c1ba49304d36f49cf5cb83)) ([`e347cdb`](https://github.com/taskforcesh/bullmq/commit/e347cdbabcb142060592e541f35aa94730196700)) - -* chore: upgrade typescript to version 4.6.x ([`445a031`](https://github.com/taskforcesh/bullmq/commit/445a0310219c6cd3dfebc6ca82cca985e3d84912)) - -### Documentation - -* docs: add link to bullmq-pro api reference ([`52fdc61`](https://github.com/taskforcesh/bullmq/commit/52fdc61a100090a236b2c990df8e826701ad697b)) - -* docs: fix link to api reference ([`7e3df91`](https://github.com/taskforcesh/bullmq/commit/7e3df91a068421851ad8ae10a87d6c86235ffcdc)) - -* docs: remove readme from api docs ([`da8a310`](https://github.com/taskforcesh/bullmq/commit/da8a310f2e90be480ba4541c105d2d25e39c1240)) - -* docs: add missing typedoc dependency ([`ab7f1b5`](https://github.com/taskforcesh/bullmq/commit/ab7f1b54b2e22a76e0640f6fe7bc4e54417fbda1)) - -* docs: add new api based on typedoc ([`8e56db5`](https://github.com/taskforcesh/bullmq/commit/8e56db551e1f0f187c2ae56c22b70342f9106822)) - -### Fix - -* fix(cluster): check correct Upstash host (#1195) fixes #1193 ([`69f2863`](https://github.com/taskforcesh/bullmq/commit/69f28632408c741219c1ba49304d36f49cf5cb83)) - -### Unknown - -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`892e80b`](https://github.com/taskforcesh/bullmq/commit/892e80b097b808e81e8091d3696ab64ee1a534a9)) - - -## v1.80.2 (2022-04-15) - -### Chore - -* chore(release): 1.80.2 [skip ci] - -## [1.80.2](https://github.com/taskforcesh/bullmq/compare/v1.80.1...v1.80.2) (2022-04-15) - -### Bug Fixes - -* **job:** remove Error from Promise return in moveToWaitingChildren ([#1197](https://github.com/taskforcesh/bullmq/issues/1197)) ([180a8bf](https://github.com/taskforcesh/bullmq/commit/180a8bf8fb2fe62b9929765a6dfd084574c77936)) ([`d83842d`](https://github.com/taskforcesh/bullmq/commit/d83842dc346f9308f52cf7dfda5ad2fc050eef4e)) - -### Fix - -* fix(job): remove Error from Promise return in moveToWaitingChildren (#1197) ([`180a8bf`](https://github.com/taskforcesh/bullmq/commit/180a8bf8fb2fe62b9929765a6dfd084574c77936)) - -### Unknown - -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`99ae4c0`](https://github.com/taskforcesh/bullmq/commit/99ae4c0c6e80a51b9220acb9b74c8202d2d3a830)) - - -## v1.80.1 (2022-04-14) - -### Chore - -* chore(release): 1.80.1 [skip ci] - -## [1.80.1](https://github.com/taskforcesh/bullmq/compare/v1.80.0...v1.80.1) (2022-04-14) - -### Bug Fixes - -* **worker:** restore worker suffix to empty string ([#1194](https://github.com/taskforcesh/bullmq/issues/1194)) fixes [#1185](https://github.com/taskforcesh/bullmq/issues/1185) ([2666ea5](https://github.com/taskforcesh/bullmq/commit/2666ea5b8532645da24482cf01c5692da5f2ceda)) ([`3901472`](https://github.com/taskforcesh/bullmq/commit/3901472f30c090d8c26a34ccc1fb666193a91ca0)) - -### Fix - -* fix(worker): restore worker suffix to empty string (#1194) fixes #1185 ([`2666ea5`](https://github.com/taskforcesh/bullmq/commit/2666ea5b8532645da24482cf01c5692da5f2ceda)) - - -## v1.80.0 (2022-04-12) - -### Chore - -* chore(release): 1.80.0 [skip ci] - -# [1.80.0](https://github.com/taskforcesh/bullmq/compare/v1.79.1...v1.80.0) (2022-04-12) - -### Features - -* **worker-listener:** use generics in events ([#1190](https://github.com/taskforcesh/bullmq/issues/1190)) ref [#1188](https://github.com/taskforcesh/bullmq/issues/1188) ([2821193](https://github.com/taskforcesh/bullmq/commit/28211937d9ed405330eede5ad7d4b0b817accf39)) ([`3ac9dd0`](https://github.com/taskforcesh/bullmq/commit/3ac9dd002f0dcedf83312708222c39041d23c2c0)) - -### Feature - -* feat(worker-listener): use generics in events (#1190) ref #1188 ([`2821193`](https://github.com/taskforcesh/bullmq/commit/28211937d9ed405330eede5ad7d4b0b817accf39)) - - -## v1.79.1 (2022-04-12) - -### Chore - -* chore(release): 1.79.1 [skip ci] - -## [1.79.1](https://github.com/taskforcesh/bullmq/compare/v1.79.0...v1.79.1) (2022-04-12) - -### Bug Fixes - -* **connection:** remove Queue reconnect overrides ([#1119](https://github.com/taskforcesh/bullmq/issues/1119)) ([83f1c79](https://github.com/taskforcesh/bullmq/commit/83f1c797b8a5272028c8d78d5ce464236e90909e)) ([`56ffa3c`](https://github.com/taskforcesh/bullmq/commit/56ffa3c918c1c642f0ffeae4952fc57cfbd13abd)) - -* chore(deps-dev): bump moment from 2.29.1 to 2.29.2 (#1184) ([`e27986e`](https://github.com/taskforcesh/bullmq/commit/e27986e06dc39c1ee983733deb8188fa78c797d1)) - -### Fix - -* fix(connection): remove Queue reconnect overrides (#1119) ([`83f1c79`](https://github.com/taskforcesh/bullmq/commit/83f1c797b8a5272028c8d78d5ce464236e90909e)) - -### Unknown - -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`8f0bbda`](https://github.com/taskforcesh/bullmq/commit/8f0bbda3332ce3dd3712e9812963733c117d2b74)) - - -## v1.79.0 (2022-04-08) - -### Chore - -* chore(release): 1.79.0 [skip ci] - -# [1.79.0](https://github.com/taskforcesh/bullmq/compare/v1.78.2...v1.79.0) (2022-04-08) - -### Features - -* **queue-getters:** add getQueueEvents ([#1085](https://github.com/taskforcesh/bullmq/issues/1085)) ([f10a20a](https://github.com/taskforcesh/bullmq/commit/f10a20a90ab6dbf2d9f3f75ba99dacbdc797c329)) ([`cb46ff7`](https://github.com/taskforcesh/bullmq/commit/cb46ff78e1f22b7ae94e37adfcc91f2ed4041355)) - -* chore(redis-connection): coerce redis version to standard semver format ([`3828767`](https://github.com/taskforcesh/bullmq/commit/382876791c9d2a8cb8f3550f7c6eab97bb30d899)) - -### Documentation - -* docs(readme): better layout in "used by" ([`094ec8f`](https://github.com/taskforcesh/bullmq/commit/094ec8fb8f2655b9b4fd0752dcde36e5526fe333)) - -* docs(readme): add curri in "used by" ([`931a932`](https://github.com/taskforcesh/bullmq/commit/931a932e25cee430cbe5a126fd8dd6f7e704756a)) - -### Feature - -* feat(queue-getters): add getQueueEvents (#1085) ([`f10a20a`](https://github.com/taskforcesh/bullmq/commit/f10a20a90ab6dbf2d9f3f75ba99dacbdc797c329)) - -### Refactor - -* refactor(get-workers): add worker suffix (#1176) ([`8376f4c`](https://github.com/taskforcesh/bullmq/commit/8376f4c055fc134bb51d6605a4ddffbffdf5130e)) - -* refactor(backoff-options): improve IntelliSense for backoff types (#1168) ([`1633c5b`](https://github.com/taskforcesh/bullmq/commit/1633c5b85555a3c7f90e535dd8dcfce2e2127b86)) - -### Test - -* test(events): fix flaky test ([`ee7fb35`](https://github.com/taskforcesh/bullmq/commit/ee7fb35bd622297f20ee83079715aec5ab9e30ab)) - - -## v1.78.2 (2022-03-31) - -### Chore - -* chore(release): 1.78.2 [skip ci] - -## [1.78.2](https://github.com/taskforcesh/bullmq/compare/v1.78.1...v1.78.2) (2022-03-31) - -### Bug Fixes - -* **clean:** consider processedOn and finishedOn attributes ([#1158](https://github.com/taskforcesh/bullmq/issues/1158)) ([8c3cb72](https://github.com/taskforcesh/bullmq/commit/8c3cb72235ec6123da389553f37433c2943e0f57)) ([`3c75df5`](https://github.com/taskforcesh/bullmq/commit/3c75df5c9bc8f7ba5db9638b0aaeefb00903105d)) - -### Documentation - -* docs: misspelled rate limited (#1165) ([`f33d0a9`](https://github.com/taskforcesh/bullmq/commit/f33d0a957525ec1bc3986e4bb57624d5ac0a4bc1)) - -* docs(worker): add autorun example (#1161) ([`ad159ad`](https://github.com/taskforcesh/bullmq/commit/ad159ad6a4bda3703ce1686b4989e1fae7dcaef8)) - -* docs(metrics): fix typo ([`7ff86b2`](https://github.com/taskforcesh/bullmq/commit/7ff86b23525392937914c2336f22c7d2ae89f6e9)) - -### Fix - -* fix(clean): consider processedOn and finishedOn attributes (#1158) ([`8c3cb72`](https://github.com/taskforcesh/bullmq/commit/8c3cb72235ec6123da389553f37433c2943e0f57)) - -### Unknown - -* GitBook: [#106] No subject ([`8271109`](https://github.com/taskforcesh/bullmq/commit/8271109a2a11af46ac23cf8b1e3a4d63ef1c27c7)) - -* GitBook: [#105] No subject ([`a27a9a3`](https://github.com/taskforcesh/bullmq/commit/a27a9a3b82362330de29e174a8353bfc264bd516)) - - -## v1.78.1 (2022-03-24) - -### Chore - -* chore(release): 1.78.1 [skip ci] - -## [1.78.1](https://github.com/taskforcesh/bullmq/compare/v1.78.0...v1.78.1) (2022-03-24) - -### Bug Fixes - -* **queue:** close repeat connection when calling close ([#1154](https://github.com/taskforcesh/bullmq/issues/1154)) ([7d79616](https://github.com/taskforcesh/bullmq/commit/7d796167229048ec79660ca5d3ac8a7c85d125e7)) ([`04d0992`](https://github.com/taskforcesh/bullmq/commit/04d09929a8cd2a79d335e27f97543b62ca105191)) - -### Fix - -* fix(queue): close repeat connection when calling close (#1154) ([`7d79616`](https://github.com/taskforcesh/bullmq/commit/7d796167229048ec79660ca5d3ac8a7c85d125e7)) - - -## v1.78.0 (2022-03-23) - -### Chore - -* chore(release): 1.78.0 [skip ci] - -# [1.78.0](https://github.com/taskforcesh/bullmq/compare/v1.77.3...v1.78.0) (2022-03-23) - -### Features - -* **cron-parser:** upgrades version to 4.2.1 ([#1149](https://github.com/taskforcesh/bullmq/issues/1149)) fixes [#1147](https://github.com/taskforcesh/bullmq/issues/1147) ([88a6c9c](https://github.com/taskforcesh/bullmq/commit/88a6c9c437172035173628842909f5170eb481f7)) ([`cc5c695`](https://github.com/taskforcesh/bullmq/commit/cc5c695b689df2e319c519aae316e4df2bf194b5)) - -### Feature - -* feat(cron-parser): upgrades version to 4.2.1 (#1149) fixes #1147 ([`88a6c9c`](https://github.com/taskforcesh/bullmq/commit/88a6c9c437172035173628842909f5170eb481f7)) - -### Test - -* test(events): fix flaky test ([`1788833`](https://github.com/taskforcesh/bullmq/commit/17888335138fafd888689a894372ee059ca714ec)) - - -## v1.77.3 (2022-03-22) - -### Chore - -* chore(release): 1.77.3 [skip ci] - -## [1.77.3](https://github.com/taskforcesh/bullmq/compare/v1.77.2...v1.77.3) (2022-03-22) - -### Bug Fixes - -* **async-send:** check proc.send type ([#1150](https://github.com/taskforcesh/bullmq/issues/1150)) ([4f44173](https://github.com/taskforcesh/bullmq/commit/4f44173f0a3cc54705ca9a7e1730aeff26ea1c5a)) ([`fd8742b`](https://github.com/taskforcesh/bullmq/commit/fd8742b1746443a670789b5dbf668e84425f5897)) - -### Fix - -* fix(async-send): check proc.send type (#1150) ([`4f44173`](https://github.com/taskforcesh/bullmq/commit/4f44173f0a3cc54705ca9a7e1730aeff26ea1c5a)) - -### Test - -* test(rate-limiter): fix flaky test ([`a9c11c9`](https://github.com/taskforcesh/bullmq/commit/a9c11c9751bf8be6e6b263ffc95960b1c1ab7ce4)) - -### Unknown - -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`24b4026`](https://github.com/taskforcesh/bullmq/commit/24b4026be2bd831a8e7609f5a9611ac0ed4c6d89)) - - -## v1.77.2 (2022-03-20) - -### Chore - -* chore(release): 1.77.2 [skip ci] - -## [1.77.2](https://github.com/taskforcesh/bullmq/compare/v1.77.1...v1.77.2) (2022-03-20) - -### Bug Fixes - -* **trim-events:** consider maxLenEvents as 0 ([#1137](https://github.com/taskforcesh/bullmq/issues/1137)) ([bc58a49](https://github.com/taskforcesh/bullmq/commit/bc58a49fba1b6f4e3595a0371ecf8410000a9021)) - -### Performance Improvements - -* **clean:** speed up clean operation using deletion marker ([#1144](https://github.com/taskforcesh/bullmq/issues/1144)) ([5fb32ef](https://github.com/taskforcesh/bullmq/commit/5fb32ef2c60843d8d1f2cbc000aacf4df3388b7e)) ([`41ba863`](https://github.com/taskforcesh/bullmq/commit/41ba8631c76477a46af4a23cfad5365d78d77409)) - -### Fix - -* fix(trim-events): consider maxLenEvents as 0 (#1137) ([`bc58a49`](https://github.com/taskforcesh/bullmq/commit/bc58a49fba1b6f4e3595a0371ecf8410000a9021)) - -### Performance - -* perf(clean): speed up clean operation using deletion marker (#1144) ([`5fb32ef`](https://github.com/taskforcesh/bullmq/commit/5fb32ef2c60843d8d1f2cbc000aacf4df3388b7e)) - - -## v1.77.1 (2022-03-17) - -### Chore - -* chore(release): 1.77.1 [skip ci] - -## [1.77.1](https://github.com/taskforcesh/bullmq/compare/v1.77.0...v1.77.1) (2022-03-17) - -### Bug Fixes - -* **flow:** remove processed children ([#1060](https://github.com/taskforcesh/bullmq/issues/1060)) fixes [#1056](https://github.com/taskforcesh/bullmq/issues/1056) ([6b54e86](https://github.com/taskforcesh/bullmq/commit/6b54e86c12f287a13da036f3ec7801b8656f0434)) ([`ed9dd80`](https://github.com/taskforcesh/bullmq/commit/ed9dd801533d714baacc64c469b8b94564a22b98)) - -### Fix - -* fix(flow): remove processed children (#1060) fixes #1056 ([`6b54e86`](https://github.com/taskforcesh/bullmq/commit/6b54e86c12f287a13da036f3ec7801b8656f0434)) - - -## v1.77.0 (2022-03-16) - -### Chore - -* chore(release): 1.77.0 [skip ci] - -# [1.77.0](https://github.com/taskforcesh/bullmq/compare/v1.76.6...v1.77.0) (2022-03-16) - -### Features - -* allow QueueScheduler to be extended ([289beb8](https://github.com/taskforcesh/bullmq/commit/289beb87d2ef3e3dd7583159f7be2b5450f7de3c)) ([`a178ae4`](https://github.com/taskforcesh/bullmq/commit/a178ae4c2fa6d7ece5ebda79c11164be761968a5)) - -### Feature - -* feat: allow QueueScheduler to be extended ([`289beb8`](https://github.com/taskforcesh/bullmq/commit/289beb87d2ef3e3dd7583159f7be2b5450f7de3c)) - -### Unknown - -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`10fdcd3`](https://github.com/taskforcesh/bullmq/commit/10fdcd37fb3c1d115b878f7ca489d711cca3ff6a)) - - -## v1.76.6 (2022-03-15) - -### Chore - -* chore(release): 1.76.6 [skip ci] - -## [1.76.6](https://github.com/taskforcesh/bullmq/compare/v1.76.5...v1.76.6) (2022-03-15) - -### Bug Fixes - -* **master:** do not export master file ([#1136](https://github.com/taskforcesh/bullmq/issues/1136)) fixes [#1125](https://github.com/taskforcesh/bullmq/issues/1125) ref [#1129](https://github.com/taskforcesh/bullmq/issues/1129) ([6aa2f96](https://github.com/taskforcesh/bullmq/commit/6aa2f9657b8787aa791ab5af7267a6d27d7d7869)) ([`96de7b4`](https://github.com/taskforcesh/bullmq/commit/96de7b43fd01a94b28991f9af24b4e6b2a6c0fc2)) - -### Fix - -* fix(master): do not export master file (#1136) fixes #1125 ref #1129 ([`6aa2f96`](https://github.com/taskforcesh/bullmq/commit/6aa2f9657b8787aa791ab5af7267a6d27d7d7869)) - - -## v1.76.5 (2022-03-15) - -### Chore - -* chore(release): 1.76.5 [skip ci] - -## [1.76.5](https://github.com/taskforcesh/bullmq/compare/v1.76.4...v1.76.5) (2022-03-15) - -### Bug Fixes - -* **queue:** sanitize job types in getJobs and getJobsCount ([#1113](https://github.com/taskforcesh/bullmq/issues/1113)) fixes [#1112](https://github.com/taskforcesh/bullmq/issues/1112) ([d452b29](https://github.com/taskforcesh/bullmq/commit/d452b29773cead153a73b8322adda3164fb610d8)) ([`0e74cfa`](https://github.com/taskforcesh/bullmq/commit/0e74cfac4efe7a2d62460ed8e646593f8b48a850)) - -### Fix - -* fix(queue): sanitize job types in getJobs and getJobsCount (#1113) fixes #1112 ([`d452b29`](https://github.com/taskforcesh/bullmq/commit/d452b29773cead153a73b8322adda3164fb610d8)) - -### Test - -* test(rate-limit): add cases when promoting jobs (#1135) fixes #1083 ([`51343c9`](https://github.com/taskforcesh/bullmq/commit/51343c95f4823fedd7d7295d59ad5a092ae8dcbf)) - - -## v1.76.4 (2022-03-13) - -### Chore - -* chore(release): 1.76.4 [skip ci] - -## [1.76.4](https://github.com/taskforcesh/bullmq/compare/v1.76.3...v1.76.4) (2022-03-13) - -### Performance Improvements - -* **move-to-finished:** avoid an extra roundtrip when using rate limit ([#1131](https://github.com/taskforcesh/bullmq/issues/1131)) ([1711547](https://github.com/taskforcesh/bullmq/commit/171154707bf5cbcb750ea9d2a9957128c1abc044)) ([`f713474`](https://github.com/taskforcesh/bullmq/commit/f71347415f4fd04c9a59a94a24ceac11ab320e01)) - -### Documentation - -* docs: clarify jobs priority order (#1124) ([`7721ac3`](https://github.com/taskforcesh/bullmq/commit/7721ac3a01ca5071bcf4b51df3ca0ad0a896659b)) - -### Performance - -* perf(move-to-finished): avoid an extra roundtrip when using rate limit (#1131) ([`1711547`](https://github.com/taskforcesh/bullmq/commit/171154707bf5cbcb750ea9d2a9957128c1abc044)) - -### Refactor - -* refactor(move-to-finished): pass some args using pack (#1128) ([`b60ac86`](https://github.com/taskforcesh/bullmq/commit/b60ac86b4684ee6cc3b931238b59d3aecf1af44f)) - -### Unknown - -* GitBook: [#104] No subject ([`f718340`](https://github.com/taskforcesh/bullmq/commit/f7183404f04a83ba559f915b38a81316ae2fe0ff)) - -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`0870974`](https://github.com/taskforcesh/bullmq/commit/087097422aa9e0d5efbccb1e858d1692e4e22c88)) - - -## v1.76.3 (2022-03-10) - -### Chore - -* chore(release): 1.76.3 [skip ci] - -## [1.76.3](https://github.com/taskforcesh/bullmq/compare/v1.76.2...v1.76.3) (2022-03-10) - -### Bug Fixes - -* **drained:** emit event only once when queue has drained the waiting list ([#1123](https://github.com/taskforcesh/bullmq/issues/1123)) fixes [#1121](https://github.com/taskforcesh/bullmq/issues/1121) ref [#1070](https://github.com/taskforcesh/bullmq/issues/1070) ([b89b4e8](https://github.com/taskforcesh/bullmq/commit/b89b4e8a83fe4c9349ac5a9c439fc07374ff1e63)) ([`e37f6f8`](https://github.com/taskforcesh/bullmq/commit/e37f6f8eed5589b69ed7a2ed27e951846fbfbb0c)) - -### Fix - -* fix(drained): emit event only once when queue has drained the waiting list (#1123) fixes #1121 ref #1070 ([`b89b4e8`](https://github.com/taskforcesh/bullmq/commit/b89b4e8a83fe4c9349ac5a9c439fc07374ff1e63)) - -### Unknown - -* GitBook: [#103] No subject ([`bab62d1`](https://github.com/taskforcesh/bullmq/commit/bab62d1f49748de254ca7cfeaab4b7cf2009ff96)) - - -## v1.76.2 (2022-03-09) - -### Chore - -* chore(release): 1.76.2 [skip ci] - -## [1.76.2](https://github.com/taskforcesh/bullmq/compare/v1.76.1...v1.76.2) (2022-03-09) - -### Bug Fixes - -* **utils:** fix proc.send type ([#1122](https://github.com/taskforcesh/bullmq/issues/1122)) fixes [#1120](https://github.com/taskforcesh/bullmq/issues/1120) ([da23977](https://github.com/taskforcesh/bullmq/commit/da239774379825d9f0a51c118740bc0fefa568bd)) ([`88ac8e5`](https://github.com/taskforcesh/bullmq/commit/88ac8e551574bdd00cbd644aa1ea5bf75f03fa5e)) - -* chore(deps): upgrade gitbook-plugin-mermaid-compat ([`14a4099`](https://github.com/taskforcesh/bullmq/commit/14a40999c0a120480bccd7567e61d61b31779867)) - -### Documentation - -* docs: add mermaid diagrams as comments(#1116) ([`1d69619`](https://github.com/taskforcesh/bullmq/commit/1d69619fcc70c24cca8a5d30451886b6cb487e5c)) - -* docs(architecture): restore diagram ([`b0a3315`](https://github.com/taskforcesh/bullmq/commit/b0a3315db650ee88a7d6dc61c16d764e06803537)) - -* docs: try mermaid-gitbook example ([`dc5c396`](https://github.com/taskforcesh/bullmq/commit/dc5c3962a99e557ae8b8800ea2112485658c2b35)) - -* docs(package): add mermaid-compat plugin ([`1978fdf`](https://github.com/taskforcesh/bullmq/commit/1978fdf121f4ee2988d767c5655249f040d6be65)) - -* docs(architecture): replace state diagram ([`71a95c7`](https://github.com/taskforcesh/bullmq/commit/71a95c784f3add49d1a3e273f0a4771fc7275234)) - -* docs(architecture): use mermaid in state diagram ([`5d5e9d4`](https://github.com/taskforcesh/bullmq/commit/5d5e9d4418e286a2fda73468c13a8d5ff58c36f6)) - -### Fix - -* fix(utils): fix proc.send type (#1122) fixes #1120 ([`da23977`](https://github.com/taskforcesh/bullmq/commit/da239774379825d9f0a51c118740bc0fefa568bd)) - -### Unknown - -* GitBook: [#102] No subject ([`35a7349`](https://github.com/taskforcesh/bullmq/commit/35a734964ebea256708e4583f1514245a4bcf6da)) - -* GitBook: [#100] No subject ([`edfbf62`](https://github.com/taskforcesh/bullmq/commit/edfbf623c39b510163dc2024eb4808d3dcefc6ff)) - -* GitBook: [#99] No subject ([`b710285`](https://github.com/taskforcesh/bullmq/commit/b710285a67271c0b2c1be6d602d858b6025166b5)) - -* GitBook: [#98] No subject ([`8e908dd`](https://github.com/taskforcesh/bullmq/commit/8e908ddc74bc6886b58ac9297844a648cf0808ad)) - -* GitBook: [#97] No subject ([`d196217`](https://github.com/taskforcesh/bullmq/commit/d1962177c2c684c70389b946e614ada883bf6a54)) - -* GitBook: [#96] No subject ([`3f46a47`](https://github.com/taskforcesh/bullmq/commit/3f46a470ccd65b07df66b0004a49294dabaae73a)) - - -## v1.76.1 (2022-03-04) - -### Chore - -* chore(release): 1.76.1 [skip ci] - -## [1.76.1](https://github.com/taskforcesh/bullmq/compare/v1.76.0...v1.76.1) (2022-03-04) - -### Bug Fixes - -* **get-waiting-children-count:** consider waiting-children status only ([#1117](https://github.com/taskforcesh/bullmq/issues/1117)) ([1820df7](https://github.com/taskforcesh/bullmq/commit/1820df73c17ce119d2fdb0f526fc95f99845a5ec)) ([`485def0`](https://github.com/taskforcesh/bullmq/commit/485def0cbb9970e5b85775a549a132016ddef6f4)) - -### Documentation - -* docs: add read more section (#1114) ([`3ba05f7`](https://github.com/taskforcesh/bullmq/commit/3ba05f7ff80b152cd99167b13546d6d76654d3ed)) - -* docs(guide): add link references to classes (#1111) ([`350234e`](https://github.com/taskforcesh/bullmq/commit/350234e816783ff7a4e91d4839d81ac4fe2b2a1d)) - -### Fix - -* fix(get-waiting-children-count): consider waiting-children status only (#1117) ([`1820df7`](https://github.com/taskforcesh/bullmq/commit/1820df73c17ce119d2fdb0f526fc95f99845a5ec)) - - -## v1.76.0 (2022-03-02) - -### Chore - -* chore(release): 1.76.0 [skip ci] - -# [1.76.0](https://github.com/taskforcesh/bullmq/compare/v1.75.1...v1.76.0) (2022-03-02) - -### Features - -* **metrics:** add metrics support ([ab51326](https://github.com/taskforcesh/bullmq/commit/ab51326cf318b4b48e37a1a77f5609e405eecb45)) ([`359e4e5`](https://github.com/taskforcesh/bullmq/commit/359e4e54b633237ec01107e862c109e8712824dc)) - -### Feature - -* feat(metrics): add metrics support ([`ab51326`](https://github.com/taskforcesh/bullmq/commit/ab51326cf318b4b48e37a1a77f5609e405eecb45)) - - -## v1.75.1 (2022-02-26) - -### Chore - -* chore(release): 1.75.1 [skip ci] - -## [1.75.1](https://github.com/taskforcesh/bullmq/compare/v1.75.0...v1.75.1) (2022-02-26) - -### Bug Fixes - -* **rate-limiter:** move job to wait after retry when groupKey is missed ([#1103](https://github.com/taskforcesh/bullmq/issues/1103)) fixes [#1084](https://github.com/taskforcesh/bullmq/issues/1084) ([8aeab37](https://github.com/taskforcesh/bullmq/commit/8aeab37ac5a5c1c760be21bff2ba8752a485577c)) ([`779f6db`](https://github.com/taskforcesh/bullmq/commit/779f6db7b5b0da0324a187f4b735ec6762abc9ad)) - -### Fix - -* fix(rate-limiter): move job to wait after retry when groupKey is missed (#1103) fixes #1084 ([`8aeab37`](https://github.com/taskforcesh/bullmq/commit/8aeab37ac5a5c1c760be21bff2ba8752a485577c)) - -### Unknown - -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`73b9950`](https://github.com/taskforcesh/bullmq/commit/73b995091439727a9a85e3eee1cb8fdfcab9a090)) - - -## v1.75.0 (2022-02-24) - -### Chore - -* chore(release): 1.75.0 [skip ci] - -# [1.75.0](https://github.com/taskforcesh/bullmq/compare/v1.74.3...v1.75.0) (2022-02-24) - -### Bug Fixes - -* **cluster:** check for host presence in Upstash validation ([#1102](https://github.com/taskforcesh/bullmq/issues/1102)) fixes [#1101](https://github.com/taskforcesh/bullmq/issues/1101) ([54d4eac](https://github.com/taskforcesh/bullmq/commit/54d4eac52cfe13d4be99410932c0226c8d06d5d5)) - -### Features - -* **retry-jobs:** allow to retry completed jobs ([#1082](https://github.com/taskforcesh/bullmq/issues/1082)) ([e17b3f2](https://github.com/taskforcesh/bullmq/commit/e17b3f21606757a16630988a69c9607e8c843bd2)) ([`7f11b7d`](https://github.com/taskforcesh/bullmq/commit/7f11b7d741f32101e1dc895ca931647fe9d4c81f)) - -### Feature - -* feat(retry-jobs): allow to retry completed jobs (#1082) ([`e17b3f2`](https://github.com/taskforcesh/bullmq/commit/e17b3f21606757a16630988a69c9607e8c843bd2)) - -### Fix - -* fix(cluster): check for host presence in Upstash validation (#1102) fixes #1101 ([`54d4eac`](https://github.com/taskforcesh/bullmq/commit/54d4eac52cfe13d4be99410932c0226c8d06d5d5)) - - -## v1.74.3 (2022-02-24) - -### Chore - -* chore(release): 1.74.3 [skip ci] - -## [1.74.3](https://github.com/taskforcesh/bullmq/compare/v1.74.2...v1.74.3) (2022-02-24) - -### Bug Fixes - -* **connection:** throw error when Upstash host is provided ([#1098](https://github.com/taskforcesh/bullmq/issues/1098)) fixes [#1087](https://github.com/taskforcesh/bullmq/issues/1087) ([5156d0a](https://github.com/taskforcesh/bullmq/commit/5156d0a4812d8c649a3b41bd98e3e0efb41d0491)) ([`df2fa62`](https://github.com/taskforcesh/bullmq/commit/df2fa62064c9bc1a21b9410e48042257e0a1c57b)) - -### Documentation - -* docs(procesador): add pattern for named processor (#1096) ([`dd1e63c`](https://github.com/taskforcesh/bullmq/commit/dd1e63c623a6a1958ff8de983adc668e452aed52)) - -### Fix - -* fix(connection): throw error when Upstash host is provided (#1098) fixes #1087 ([`5156d0a`](https://github.com/taskforcesh/bullmq/commit/5156d0a4812d8c649a3b41bd98e3e0efb41d0491)) - - -## v1.74.2 (2022-02-23) - -### Chore - -* chore(release): 1.74.2 [skip ci] - -## [1.74.2](https://github.com/taskforcesh/bullmq/compare/v1.74.1...v1.74.2) (2022-02-23) - -### Bug Fixes - -* **move-to-finished:** increment attemptsMade when moving job to active ([#1095](https://github.com/taskforcesh/bullmq/issues/1095)) fixes [#1094](https://github.com/taskforcesh/bullmq/issues/1094) ([321b0e1](https://github.com/taskforcesh/bullmq/commit/321b0e1d515d01c5b3f1ca9f404cd571e3f753b7)) ([`023cf74`](https://github.com/taskforcesh/bullmq/commit/023cf745e92c318b21251e4cedbedf3949c57abe)) - -### Fix - -* fix(move-to-finished): increment attemptsMade when moving job to active (#1095) fixes #1094 ([`321b0e1`](https://github.com/taskforcesh/bullmq/commit/321b0e1d515d01c5b3f1ca9f404cd571e3f753b7)) - -### Unknown - -* GitBook: [#95] No subject ([`edf8bf6`](https://github.com/taskforcesh/bullmq/commit/edf8bf6981eeaf3756ce7ae0f2d0000ca3a8ff7d)) - -* GitBook: [#94] No subject ([`bbdb07b`](https://github.com/taskforcesh/bullmq/commit/bbdb07b947d5a0569719d89339b94237b35292f8)) - -* GitBook: [#93] No subject ([`b9d040a`](https://github.com/taskforcesh/bullmq/commit/b9d040a83d8892bb99760075eec784a707c0cfda)) - -* GitBook: [#92] No subject ([`d19f1f0`](https://github.com/taskforcesh/bullmq/commit/d19f1f05a9757006ada6ea5ad6d2b6058cda0b01)) - - -## v1.74.1 (2022-02-20) - -### Chore - -* chore(release): 1.74.1 [skip ci] - -## [1.74.1](https://github.com/taskforcesh/bullmq/compare/v1.74.0...v1.74.1) (2022-02-20) - -### Bug Fixes - -* **flow:** respect defaultJobOptions from queue opts ([#1080](https://github.com/taskforcesh/bullmq/issues/1080)) fixes [#1034](https://github.com/taskforcesh/bullmq/issues/1034) ([0aca072](https://github.com/taskforcesh/bullmq/commit/0aca072f805302e660b6675fd4097ba893c91eb0)) ([`cf0710c`](https://github.com/taskforcesh/bullmq/commit/cf0710cfe322eb2147f439364b425763b4d5c592)) - -### Documentation - -* docs: add queueName doc ([`e52ca41`](https://github.com/taskforcesh/bullmq/commit/e52ca4109eacfec6eb0cddae01952051222ca8eb)) - -* docs: add queueName doc ([`9c6b331`](https://github.com/taskforcesh/bullmq/commit/9c6b331a84827dc5bdc5a4fd45e89653dfa92079)) - -### Fix - -* fix(flow): respect defaultJobOptions from queue opts (#1080) fixes #1034 - - - -* docs(flow): add descriptions of opts param ([`0aca072`](https://github.com/taskforcesh/bullmq/commit/0aca072f805302e660b6675fd4097ba893c91eb0)) - -### Refactor - -* refactor(utils): asyncSend ([`3b3ff30`](https://github.com/taskforcesh/bullmq/commit/3b3ff300f7fa732ea831fe81440c7456518486a4)) - -### Unknown - -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`6c2dbb1`](https://github.com/taskforcesh/bullmq/commit/6c2dbb12ebb666bea3de5aed45c413471eee4f4f)) - - -## v1.74.0 (2022-02-19) - -### Chore - -* chore(release): 1.74.0 [skip ci] - -# [1.74.0](https://github.com/taskforcesh/bullmq/compare/v1.73.0...v1.74.0) (2022-02-19) - -### Features - -* **retry-jobs:** pass timestamp as option ([#1054](https://github.com/taskforcesh/bullmq/issues/1054)) ([1522359](https://github.com/taskforcesh/bullmq/commit/15223590b235f749af9cb229fc784760d4b3add2)) ([`2bf08ef`](https://github.com/taskforcesh/bullmq/commit/2bf08efda8a938e86be2d09ae2dbbdd81b8181b7)) - -### Documentation - -* docs: add obliterateOpts description (#1086) ([`7f7dc34`](https://github.com/taskforcesh/bullmq/commit/7f7dc34789abc8a7fb59dd79a3170c4fb94c202d)) - -* docs: remove remix from used-by as requested ([`e295ba2`](https://github.com/taskforcesh/bullmq/commit/e295ba2b92e56df8b2bd8e8404b4247dae820673)) - -### Feature - -* feat(retry-jobs): pass timestamp as option (#1054) ([`1522359`](https://github.com/taskforcesh/bullmq/commit/15223590b235f749af9cb229fc784760d4b3add2)) - - -## v1.73.0 (2022-02-16) - -### Chore - -* chore(release): 1.73.0 [skip ci] - -# [1.73.0](https://github.com/taskforcesh/bullmq/compare/v1.72.0...v1.73.0) (2022-02-16) - -### Features - -* **job:** add prefix getter ([#1077](https://github.com/taskforcesh/bullmq/issues/1077)) ([db9ef10](https://github.com/taskforcesh/bullmq/commit/db9ef105a7a524d7502664d52bd9f9c7dfa9477f)) -* **queue-getters:** add getQueueSchedulers ([#1078](https://github.com/taskforcesh/bullmq/issues/1078)) ref [#1075](https://github.com/taskforcesh/bullmq/issues/1075) ([0b3b1c4](https://github.com/taskforcesh/bullmq/commit/0b3b1c4382de34bd68733d162c2fa2ba9417f79c)) ([`19845bd`](https://github.com/taskforcesh/bullmq/commit/19845bd017c3b508aeaa59a50abdf4df0e4dae0f)) - -### Documentation - -* docs(flow): update README.md example description (#1076) ([`ca38bfb`](https://github.com/taskforcesh/bullmq/commit/ca38bfb797ccd37db511d1e02b9a72a42ad4e894)) - -* docs: add logos for some BullMQ users ([`03949b7`](https://github.com/taskforcesh/bullmq/commit/03949b70b17dc767c113b0fe9ffcbe927553e105)) - -### Feature - -* feat(queue-getters): add getQueueSchedulers (#1078) ref #1075 ([`0b3b1c4`](https://github.com/taskforcesh/bullmq/commit/0b3b1c4382de34bd68733d162c2fa2ba9417f79c)) - -* feat(job): add prefix getter (#1077) ([`db9ef10`](https://github.com/taskforcesh/bullmq/commit/db9ef105a7a524d7502664d52bd9f9c7dfa9477f)) - -### Unknown - -* GitBook: [#91] No subject ([`12944e6`](https://github.com/taskforcesh/bullmq/commit/12944e615fcf29a4c25f217d55e2d870b7923c73)) - -* GitBook: [#90] No subject ([`27c9883`](https://github.com/taskforcesh/bullmq/commit/27c9883e7b06252e2903006a9c3efca68e0a3738)) - -* GitBook: [#89] No subject ([`99d21d1`](https://github.com/taskforcesh/bullmq/commit/99d21d19f37924294c941b1959be46379d6fd6e1)) - - -## v1.72.0 (2022-02-15) - -### Chore - -* chore(release): 1.72.0 [skip ci] - -# [1.72.0](https://github.com/taskforcesh/bullmq/compare/v1.71.0...v1.72.0) (2022-02-15) - -### Features - -* **backoff:** validate UnrecoverableError presence ([#1074](https://github.com/taskforcesh/bullmq/issues/1074)) ([1defeac](https://github.com/taskforcesh/bullmq/commit/1defeac3f251a13aad57f3027d8eb8f857e40acb)) ([`efe9bb7`](https://github.com/taskforcesh/bullmq/commit/efe9bb7239d9554407e8d0cf40fe74cae83abea5)) - -### Documentation - -* docs(step-jobs): pattern to wait children when adding children at runtime (#1069) ([`d53a800`](https://github.com/taskforcesh/bullmq/commit/d53a800473ac5556211408d526df92aba686fff1)) - -### Feature - -* feat(backoff): validate UnrecoverableError presence (#1074) ([`1defeac`](https://github.com/taskforcesh/bullmq/commit/1defeac3f251a13aad57f3027d8eb8f857e40acb)) - - -## v1.71.0 (2022-02-14) - -### Chore - -* chore(release): 1.71.0 [skip ci] - -# [1.71.0](https://github.com/taskforcesh/bullmq/compare/v1.70.0...v1.71.0) (2022-02-14) - -### Features - -* **get-job-counts:** add default values ([#1068](https://github.com/taskforcesh/bullmq/issues/1068)) ([1c7f841](https://github.com/taskforcesh/bullmq/commit/1c7f841a52b3ea18fa7878f10986b362ccc6c4fe)) ([`cdb1de2`](https://github.com/taskforcesh/bullmq/commit/cdb1de2fca81df5b18fb3312d821bc1cdae19066)) - -### Feature - -* feat(get-job-counts): add default values (#1068) ([`1c7f841`](https://github.com/taskforcesh/bullmq/commit/1c7f841a52b3ea18fa7878f10986b362ccc6c4fe)) - -### Refactor - -* refactor: extract trimEvents as include (#1071) ([`6ded7ba`](https://github.com/taskforcesh/bullmq/commit/6ded7bae22b0f369ebb68960d48780f547d43346)) - - -## v1.70.0 (2022-02-11) - -### Chore - -* chore(release): 1.70.0 [skip ci] - -# [1.70.0](https://github.com/taskforcesh/bullmq/compare/v1.69.1...v1.70.0) (2022-02-11) - -### Features - -* **sandbox:** pass parent property ([#1065](https://github.com/taskforcesh/bullmq/issues/1065)) ([1fd33f6](https://github.com/taskforcesh/bullmq/commit/1fd33f6fd3a3af17753de8c4d48e14ef86c7409c)) ([`9cd593f`](https://github.com/taskforcesh/bullmq/commit/9cd593fefc5b08fa13de7d4119327db7202fdd4b)) - -### Feature - -* feat(sandbox): pass parent property (#1065) ([`1fd33f6`](https://github.com/taskforcesh/bullmq/commit/1fd33f6fd3a3af17753de8c4d48e14ef86c7409c)) - - -## v1.69.1 (2022-02-10) - -### Chore - -* chore(release): 1.69.1 [skip ci] - -## [1.69.1](https://github.com/taskforcesh/bullmq/compare/v1.69.0...v1.69.1) (2022-02-10) - -### Bug Fixes - -* **move-to-finished:** validate lock first ([#1064](https://github.com/taskforcesh/bullmq/issues/1064)) ([9da1b29](https://github.com/taskforcesh/bullmq/commit/9da1b29486c6c6e2b097ec2f6107494a36525495)) ([`8216ce2`](https://github.com/taskforcesh/bullmq/commit/8216ce26c28e79307dc0c4eb3f79c0eb582260b8)) - -### Fix - -* fix(move-to-finished): validate lock first (#1064) ([`9da1b29`](https://github.com/taskforcesh/bullmq/commit/9da1b29486c6c6e2b097ec2f6107494a36525495)) - -### Refactor - -* refactor(move-to-finished): reuse removeJob include (#1061) ([`e48aec6`](https://github.com/taskforcesh/bullmq/commit/e48aec6ced3989995a78c581222c9798a50087eb)) - - -## v1.69.0 (2022-02-08) - -### Chore - -* chore(release): 1.69.0 [skip ci] - -# [1.69.0](https://github.com/taskforcesh/bullmq/compare/v1.68.4...v1.69.0) (2022-02-08) - -### Features - -* **job:** pass queueName into sandbox ([#1053](https://github.com/taskforcesh/bullmq/issues/1053)) fixes [#1050](https://github.com/taskforcesh/bullmq/issues/1050) ref [#1051](https://github.com/taskforcesh/bullmq/issues/1051) ([12bb19c](https://github.com/taskforcesh/bullmq/commit/12bb19c1586d8755b973a80be97f407630827d4f)) ([`64e01fb`](https://github.com/taskforcesh/bullmq/commit/64e01fbbe9e76c663477ef18e84a37dfd90e667a)) - -### Feature - -* feat(job): pass queueName into sandbox (#1053) fixes #1050 ref #1051 ([`12bb19c`](https://github.com/taskforcesh/bullmq/commit/12bb19c1586d8755b973a80be97f407630827d4f)) - - -## v1.68.4 (2022-02-05) - -### Chore - -* chore(release): 1.68.4 [skip ci] - -## [1.68.4](https://github.com/taskforcesh/bullmq/compare/v1.68.3...v1.68.4) (2022-02-05) - -### Bug Fixes - -* **clean:** consider checking parent jobs when cleaning ([#1048](https://github.com/taskforcesh/bullmq/issues/1048)) ([0708a24](https://github.com/taskforcesh/bullmq/commit/0708a24c7f4cb6d1cda776ed983d3f20fc3261f1)) ([`8fc4b7e`](https://github.com/taskforcesh/bullmq/commit/8fc4b7e358d8188983eb7c4a714c57d80be2b9b4)) - -### Fix - -* fix(clean): consider checking parent jobs when cleaning (#1048) ([`0708a24`](https://github.com/taskforcesh/bullmq/commit/0708a24c7f4cb6d1cda776ed983d3f20fc3261f1)) - -### Refactor - -* refactor(retry-jobs): create getZSetItems include script (#1052) ([`5ab8525`](https://github.com/taskforcesh/bullmq/commit/5ab85256d1b4e1fad75c86626f03864be0f3cd30)) - - -## v1.68.3 (2022-02-04) - -### Chore - -* chore(release): 1.68.3 [skip ci] - -## [1.68.3](https://github.com/taskforcesh/bullmq/compare/v1.68.2...v1.68.3) (2022-02-04) - -### Bug Fixes - -* **drain:** delete priority queueKey ([#1049](https://github.com/taskforcesh/bullmq/issues/1049)) ([2e6129a](https://github.com/taskforcesh/bullmq/commit/2e6129a4a08783eeafa2f0b69c10ac810f53d085)) ([`7685091`](https://github.com/taskforcesh/bullmq/commit/76850916ceb3c693b2c7e32549ccd9dde6d374d9)) - -### Fix - -* fix(drain): delete priority queueKey (#1049) ([`2e6129a`](https://github.com/taskforcesh/bullmq/commit/2e6129a4a08783eeafa2f0b69c10ac810f53d085)) - - -## v1.68.2 (2022-02-03) - -### Chore - -* chore(release): 1.68.2 [skip ci] - -## [1.68.2](https://github.com/taskforcesh/bullmq/compare/v1.68.1...v1.68.2) (2022-02-03) - -### Performance Improvements - -* **remove-parent-dependency:** do not emit wait event in hard deletions ([#1045](https://github.com/taskforcesh/bullmq/issues/1045)) ([4069821](https://github.com/taskforcesh/bullmq/commit/40698218d13a880615f832a9926f0f057b1c33f9)) ([`dfc01bb`](https://github.com/taskforcesh/bullmq/commit/dfc01bb3bedbcc676ffa2f40381477c51b2fd956)) - -### Documentation - -* docs(process-step-jobs): add new pattern (#1044) ([`e988cf5`](https://github.com/taskforcesh/bullmq/commit/e988cf5589783cf3ba7b4785d8b63df632c0fe37)) - -* docs(flow-job): add description into FlowOpts (#1047) ([`734f5fe`](https://github.com/taskforcesh/bullmq/commit/734f5fe8257a29b7790fa848173f2a1a35cbe605)) - -* docs(worker): specify error parameter in failed event (#1043) fixes #1038 ([`42114f5`](https://github.com/taskforcesh/bullmq/commit/42114f53058229e24127e0b649f4a7ec5a847b01)) - -* docs(wait-until-finished): update docs to match behavior (#1033) ref #1031 ([`d3e0d09`](https://github.com/taskforcesh/bullmq/commit/d3e0d09b6147940eb9074c9ee0f53bc3e76670a6)) - -### Performance - -* perf(remove-parent-dependency): do not emit wait event in hard deletions (#1045) ([`4069821`](https://github.com/taskforcesh/bullmq/commit/40698218d13a880615f832a9926f0f057b1c33f9)) - - -## v1.68.1 (2022-02-01) - -### Chore - -* chore(release): 1.68.1 [skip ci] - -## [1.68.1](https://github.com/taskforcesh/bullmq/compare/v1.68.0...v1.68.1) (2022-02-01) - -### Bug Fixes - -* **update:** throw error when missing job key ([#1042](https://github.com/taskforcesh/bullmq/issues/1042)) ([a00ae5c](https://github.com/taskforcesh/bullmq/commit/a00ae5c9b3f6d51cb0229adca29d13d932fc5601)) ([`2c2da6f`](https://github.com/taskforcesh/bullmq/commit/2c2da6ffa0744447f7cad9760cc0ff7f7d13c0e7)) - -### Fix - -* fix(update): throw error when missing job key (#1042) ([`a00ae5c`](https://github.com/taskforcesh/bullmq/commit/a00ae5c9b3f6d51cb0229adca29d13d932fc5601)) - - -## v1.68.0 (2022-01-29) - -### Chore - -* chore(release): 1.68.0 [skip ci] - -# [1.68.0](https://github.com/taskforcesh/bullmq/compare/v1.67.3...v1.68.0) (2022-01-29) - -### Features - -* **queue:** add retryJobs method for failed jobs ([#1024](https://github.com/taskforcesh/bullmq/issues/1024)) ([310a730](https://github.com/taskforcesh/bullmq/commit/310a730ed322501cc19cdd5cf5244bc8eee6fee2)) - -### Performance Improvements - -* **lua:** call del command with multiple keys ([#1035](https://github.com/taskforcesh/bullmq/issues/1035)) ([9cfaab8](https://github.com/taskforcesh/bullmq/commit/9cfaab8965d0c9f92460d31d6c3083839c36447f)) ([`317c095`](https://github.com/taskforcesh/bullmq/commit/317c0953043e3eb2242eb330d8e8e2071c131c37)) - -### Feature - -* feat(queue): add retryJobs method for failed jobs (#1024) ([`310a730`](https://github.com/taskforcesh/bullmq/commit/310a730ed322501cc19cdd5cf5244bc8eee6fee2)) - -### Performance - -* perf(lua): call del command with multiple keys (#1035) ([`9cfaab8`](https://github.com/taskforcesh/bullmq/commit/9cfaab8965d0c9f92460d31d6c3083839c36447f)) - - -## v1.67.3 (2022-01-28) - -### Chore - -* chore(release): 1.67.3 [skip ci] - -## [1.67.3](https://github.com/taskforcesh/bullmq/compare/v1.67.2...v1.67.3) (2022-01-28) - -### Bug Fixes - -* **drain:** consider checking parent jobs when draining ([#992](https://github.com/taskforcesh/bullmq/issues/992)) ([81b7221](https://github.com/taskforcesh/bullmq/commit/81b72213a9ff31d6b297825391de77557598ebd1)) ([`e45a0f7`](https://github.com/taskforcesh/bullmq/commit/e45a0f7e18b28385022eaafd678fbe5edb82eb4f)) - -### Fix - -* fix(drain): consider checking parent jobs when draining (#992) ([`81b7221`](https://github.com/taskforcesh/bullmq/commit/81b72213a9ff31d6b297825391de77557598ebd1)) - - -## v1.67.2 (2022-01-28) - -### Chore - -* chore(release): 1.67.2 [skip ci] - -## [1.67.2](https://github.com/taskforcesh/bullmq/compare/v1.67.1...v1.67.2) (2022-01-28) - -### Bug Fixes - -* **repeat:** consider immediately option with cron ([#1030](https://github.com/taskforcesh/bullmq/issues/1030)) fixes [#1020](https://github.com/taskforcesh/bullmq/issues/1020) ([b9e7488](https://github.com/taskforcesh/bullmq/commit/b9e748870385a88b2384df40f50df3144c11d7e0)) ([`e55ff35`](https://github.com/taskforcesh/bullmq/commit/e55ff358ca23bb4ea3d70bfb136feb27be3fe79c)) - -### Fix - -* fix(repeat): consider immediately option with cron (#1030) fixes #1020 ([`b9e7488`](https://github.com/taskforcesh/bullmq/commit/b9e748870385a88b2384df40f50df3144c11d7e0)) - -### Test - -* test: pass shared connection into Queue in test case (#1029) ([`da587c2`](https://github.com/taskforcesh/bullmq/commit/da587c2844763a5e7035f799541ce0d6e09aa296)) - - -## v1.67.1 (2022-01-27) - -### Chore - -* chore(release): 1.67.1 [skip ci] - -## [1.67.1](https://github.com/taskforcesh/bullmq/compare/v1.67.0...v1.67.1) (2022-01-27) - -### Bug Fixes - -* **retry:** pass state in error message ([#1027](https://github.com/taskforcesh/bullmq/issues/1027)) ([c646a45](https://github.com/taskforcesh/bullmq/commit/c646a45377fdfaff340185d1f7bedceb80c214c2)) - -### Performance Improvements - -* **retry:** delete props in retryJob lua script ([#1016](https://github.com/taskforcesh/bullmq/issues/1016)) ([547cedd](https://github.com/taskforcesh/bullmq/commit/547cedd5ecd30c9a73d37e4053b9e518cb3fbe53)) ([`a440be9`](https://github.com/taskforcesh/bullmq/commit/a440be95518ebf037a5879decad282249e651180)) - -### Fix - -* fix(retry): pass state in error message (#1027) ([`c646a45`](https://github.com/taskforcesh/bullmq/commit/c646a45377fdfaff340185d1f7bedceb80c214c2)) - -### Performance - -* perf(retry): delete props in retryJob lua script (#1016) ([`547cedd`](https://github.com/taskforcesh/bullmq/commit/547cedd5ecd30c9a73d37e4053b9e518cb3fbe53)) - - -## v1.67.0 (2022-01-26) - -### Chore - -* chore(release): 1.67.0 [skip ci] - -# [1.67.0](https://github.com/taskforcesh/bullmq/compare/v1.66.1...v1.67.0) (2022-01-26) - -### Features - -* add support for removeOn based on time ([6c4ac75](https://github.com/taskforcesh/bullmq/commit/6c4ac75bb3ac239cc83ef6144d69c04b2bba1311)) ([`8c5fcea`](https://github.com/taskforcesh/bullmq/commit/8c5fcea765682e7d3d3e189a89217ed5d7838da8)) - -* chore: move helper close to tests ([`4dca8ed`](https://github.com/taskforcesh/bullmq/commit/4dca8ed5f3dd0e8f3ac79c80f32cbc1628c04f79)) - -### Feature - -* feat: add support for removeOn based on time ([`6c4ac75`](https://github.com/taskforcesh/bullmq/commit/6c4ac75bb3ac239cc83ef6144d69c04b2bba1311)) - -### Test - -* test: skip compat tests as they are deprecated ([`17fee4e`](https://github.com/taskforcesh/bullmq/commit/17fee4e3a16535ea7556fdb2e242c6cb36a56843)) - - -## v1.66.1 (2022-01-25) - -### Chore - -* chore(release): 1.66.1 [skip ci] - -## [1.66.1](https://github.com/taskforcesh/bullmq/compare/v1.66.0...v1.66.1) (2022-01-25) - -### Bug Fixes - -* **job:** increase attemptsMade when moving job to active ([#1009](https://github.com/taskforcesh/bullmq/issues/1009)) fixes [#1002](https://github.com/taskforcesh/bullmq/issues/1002) ([0974ae0](https://github.com/taskforcesh/bullmq/commit/0974ae0ff6db73c223be4b18fb2aab53b6a23c88)) ([`30a9bc6`](https://github.com/taskforcesh/bullmq/commit/30a9bc6c3b719c469396c80f14e8249d7e7ce85b)) - -* chore(deps): bump node-fetch from 2.6.1 to 2.6.7 (#1014) ([`07735a0`](https://github.com/taskforcesh/bullmq/commit/07735a01b090c435e3e9ed27a3c41957632545ba)) - -### Fix - -* fix(job): increase attemptsMade when moving job to active (#1009) fixes #1002 ([`0974ae0`](https://github.com/taskforcesh/bullmq/commit/0974ae0ff6db73c223be4b18fb2aab53b6a23c88)) - - -## v1.66.0 (2022-01-23) - -### Chore - -* chore(release): 1.66.0 [skip ci] - -# [1.66.0](https://github.com/taskforcesh/bullmq/compare/v1.65.1...v1.66.0) (2022-01-23) - -### Features - -* **queue-events:** add retries-exhausted event ([#1010](https://github.com/taskforcesh/bullmq/issues/1010)) ([e476f35](https://github.com/taskforcesh/bullmq/commit/e476f35f5c3f9b1baf2bbc3d46712b8ba597f73c)) ([`9945a03`](https://github.com/taskforcesh/bullmq/commit/9945a03b0b3673c1cf981573b2b8669f0e4026c5)) - -### Feature - -* feat(queue-events): add retries-exhausted event (#1010) ([`e476f35`](https://github.com/taskforcesh/bullmq/commit/e476f35f5c3f9b1baf2bbc3d46712b8ba597f73c)) - - -## v1.65.1 (2022-01-21) - -### Chore - -* chore(release): 1.65.1 [skip ci] - -## [1.65.1](https://github.com/taskforcesh/bullmq/compare/v1.65.0...v1.65.1) (2022-01-21) - -### Bug Fixes - -* dont loop through empty modules paths ([#1013](https://github.com/taskforcesh/bullmq/issues/1013)) fixes [#1012](https://github.com/taskforcesh/bullmq/issues/1012) ([86e84df](https://github.com/taskforcesh/bullmq/commit/86e84df933c2662380b00a11b5f4000f2618d218)) ([`3677295`](https://github.com/taskforcesh/bullmq/commit/36772957fcf865e8fd7dba92d594f8800c4b1e6f)) - -### Fix - -* fix: dont loop through empty modules paths (#1013) fixes #1012 ([`86e84df`](https://github.com/taskforcesh/bullmq/commit/86e84df933c2662380b00a11b5f4000f2618d218)) - - -## v1.65.0 (2022-01-21) - -### Chore - -* chore(release): 1.65.0 [skip ci] - -# [1.65.0](https://github.com/taskforcesh/bullmq/compare/v1.64.4...v1.65.0) (2022-01-21) - -### Features - -* **queue:** add JobType and JobState unions for better typing ([#1011](https://github.com/taskforcesh/bullmq/issues/1011)) ([3b9b79d](https://github.com/taskforcesh/bullmq/commit/3b9b79dbdd754ab66c3948e7e16380f2d5513262)) ([`7f0245d`](https://github.com/taskforcesh/bullmq/commit/7f0245dce512e30e33559df219af3c227a6228e4)) - -* chore(deps): bump trim-off-newlines from 1.0.1 to 1.0.3 (#1008) ([`2dfb7ae`](https://github.com/taskforcesh/bullmq/commit/2dfb7aef39c0f7699a030298a377658bb9acda6b)) - -### Feature - -* feat(queue): add JobType and JobState unions for better typing (#1011) ([`3b9b79d`](https://github.com/taskforcesh/bullmq/commit/3b9b79dbdd754ab66c3948e7e16380f2d5513262)) - - -## v1.64.4 (2022-01-19) - -### Chore - -* chore(release): 1.64.4 [skip ci] - -## [1.64.4](https://github.com/taskforcesh/bullmq/compare/v1.64.3...v1.64.4) (2022-01-19) - -### Bug Fixes - -* **queue:** use 0 as initial value for getJobCountByTypes reducer ([#1005](https://github.com/taskforcesh/bullmq/issues/1005)) ([f0e23ef](https://github.com/taskforcesh/bullmq/commit/f0e23ef01b97d36c775db0bf8c9dd2f63f6cb194)) ([`43ea8c5`](https://github.com/taskforcesh/bullmq/commit/43ea8c5a6a1cff364c00e3a0a1bc9dae92ab469f)) - -### Ci - -* ci(redis): run tests in different redis versions (#999) ([`8c22da5`](https://github.com/taskforcesh/bullmq/commit/8c22da5c1225ba090ab0f7af063b05b1f69c69ce)) - -### Documentation - -* docs(job): add params docs in waitUntilFinished (#1000) ref #996 ([`32e7948`](https://github.com/taskforcesh/bullmq/commit/32e7948408f6e12bfe913db1d7c3be7cabb0a5ef)) - -### Fix - -* fix(queue): use 0 as initial value for getJobCountByTypes reducer (#1005) ([`f0e23ef`](https://github.com/taskforcesh/bullmq/commit/f0e23ef01b97d36c775db0bf8c9dd2f63f6cb194)) - -### Unknown - -* GitBook: [#88] No subject ([`a565666`](https://github.com/taskforcesh/bullmq/commit/a565666f199b47dfb92216334646e8ea68f590ee)) - -* GitBook: [#87] No subject ([`92f9681`](https://github.com/taskforcesh/bullmq/commit/92f968198274f97406eaa4324f65dc945ba8fb12)) - -* GitBook: [#86] No subject ([`8ce484a`](https://github.com/taskforcesh/bullmq/commit/8ce484a58000d1ba5036806b0f6968f96ffa1170)) - - -## v1.64.3 (2022-01-17) - -### Chore - -* chore(release): 1.64.3 [skip ci] - -## [1.64.3](https://github.com/taskforcesh/bullmq/compare/v1.64.2...v1.64.3) (2022-01-17) - -### Bug Fixes - -* **worker:** blockTime must be integer on older Redis ([6fedc0a](https://github.com/taskforcesh/bullmq/commit/6fedc0a03bdb217ef0dbae60d49fccb0f2a5dbdb)) ([`70001de`](https://github.com/taskforcesh/bullmq/commit/70001de2c4c039bf9448a5cc25037f517fd25915)) - -### Documentation - -* docs(readme): add Bullmq-Pro in comparison table (#993) ([`9d35cb4`](https://github.com/taskforcesh/bullmq/commit/9d35cb49ac6f4172f13832e136fc68cd22426491)) - -### Fix - -* fix(worker): blockTime must be integer on older Redis ([`6fedc0a`](https://github.com/taskforcesh/bullmq/commit/6fedc0a03bdb217ef0dbae60d49fccb0f2a5dbdb)) - - -## v1.64.2 (2022-01-14) - -### Chore - -* chore(release): 1.64.2 [skip ci] - -## [1.64.2](https://github.com/taskforcesh/bullmq/compare/v1.64.1...v1.64.2) (2022-01-14) - -### Bug Fixes - -* **remove-job:** consider removing parent dependency key in lua scripts ([#990](https://github.com/taskforcesh/bullmq/issues/990)) ([661abf0](https://github.com/taskforcesh/bullmq/commit/661abf0921e663c9ea2fa7d59c12da35950637dc)) ([`1791390`](https://github.com/taskforcesh/bullmq/commit/17913908c816cfa480a34a80bb13eb16db455168)) - -### Fix - -* fix(remove-job): consider removing parent dependency key in lua scripts (#990) ([`661abf0`](https://github.com/taskforcesh/bullmq/commit/661abf0921e663c9ea2fa7d59c12da35950637dc)) - - -## v1.64.1 (2022-01-14) - -### Chore - -* chore(release): 1.64.1 [skip ci] - -## [1.64.1](https://github.com/taskforcesh/bullmq/compare/v1.64.0...v1.64.1) (2022-01-14) - -### Bug Fixes - -* **sandbox:** exit uncaughtException instead of throwing error ([013d6a5](https://github.com/taskforcesh/bullmq/commit/013d6a5ee0c70266ae740abfa596ca9e506de71b)) ([`aea20b4`](https://github.com/taskforcesh/bullmq/commit/aea20b48af275a2ab3fb9b3f3234af8ca4ce76bc)) - -* chore: update docker-compose config (#986) ([`21c5a51`](https://github.com/taskforcesh/bullmq/commit/21c5a51680527fea0845f87151bca34054ce29af)) - -### Fix - -* fix(sandbox): exit uncaughtException instead of throwing error ([`013d6a5`](https://github.com/taskforcesh/bullmq/commit/013d6a5ee0c70266ae740abfa596ca9e506de71b)) - -### Unknown - -* GitBook: [#85] No subject ([`3cae7c3`](https://github.com/taskforcesh/bullmq/commit/3cae7c3e44be2ca075d0aa6363be79636e607786)) - - -## v1.64.0 (2022-01-07) - -### Chore - -* chore(release): 1.64.0 [skip ci] - -# [1.64.0](https://github.com/taskforcesh/bullmq/compare/v1.63.3...v1.64.0) (2022-01-07) - -### Features - -* **sanboxed-process:** support .cjs files ([#984](https://github.com/taskforcesh/bullmq/issues/984)) ([531e4de](https://github.com/taskforcesh/bullmq/commit/531e4de1525f2cf322e0b97f5537ed43276ff72b)) ([`b918676`](https://github.com/taskforcesh/bullmq/commit/b91867653564a97a5ced04f36dac1a4e1c96e21b)) - -### Feature - -* feat(sanboxed-process): support .cjs files (#984) ([`531e4de`](https://github.com/taskforcesh/bullmq/commit/531e4de1525f2cf322e0b97f5537ed43276ff72b)) - - -## v1.63.3 (2022-01-06) - -### Chore - -* chore(release): 1.63.3 [skip ci] - -## [1.63.3](https://github.com/taskforcesh/bullmq/compare/v1.63.2...v1.63.3) (2022-01-06) - -### Bug Fixes - -* **job:** throw error when delay and repeat are provided together ([#983](https://github.com/taskforcesh/bullmq/issues/983)) ([07b0082](https://github.com/taskforcesh/bullmq/commit/07b008273ead9360fc43564fa9ff1a7503616ceb)) ([`282a402`](https://github.com/taskforcesh/bullmq/commit/282a4029bc9985056508f83deb5040b830dc3c82)) - -* chore(scripts): add generics in methods (#981) ([`8807b5e`](https://github.com/taskforcesh/bullmq/commit/8807b5eef1114dd866060b1f9571675fc3e1a36d)) - -### Fix - -* fix(job): throw error when delay and repeat are provided together (#983) ([`07b0082`](https://github.com/taskforcesh/bullmq/commit/07b008273ead9360fc43564fa9ff1a7503616ceb)) - - -## v1.63.2 (2022-01-04) - -### Chore - -* chore(release): 1.63.2 [skip ci] - -## [1.63.2](https://github.com/taskforcesh/bullmq/compare/v1.63.1...v1.63.2) (2022-01-04) - -### Bug Fixes - -* **queue:** add missing error event typing ([#979](https://github.com/taskforcesh/bullmq/issues/979)) ([afdaac6](https://github.com/taskforcesh/bullmq/commit/afdaac6b072c7af5973222cc7fb69f3f138f3b0b)) ([`1f3b1cb`](https://github.com/taskforcesh/bullmq/commit/1f3b1cb0fe1857a6cc4581611f8aeda371d04f2e)) - -### Documentation - -* docs: delete duplicated parent-child explanation (#980) ([`9fb8b72`](https://github.com/taskforcesh/bullmq/commit/9fb8b72885bab40e3980418a6367859435397733)) - -### Fix - -* fix(queue): add missing error event typing (#979) ([`afdaac6`](https://github.com/taskforcesh/bullmq/commit/afdaac6b072c7af5973222cc7fb69f3f138f3b0b)) - - -## v1.63.1 (2022-01-04) - -### Chore - -* chore(release): 1.63.1 [skip ci] - -## [1.63.1](https://github.com/taskforcesh/bullmq/compare/v1.63.0...v1.63.1) (2022-01-04) - -### Bug Fixes - -* **update-progress:** throw error if job key is missing ([#978](https://github.com/taskforcesh/bullmq/issues/978)) ref [#977](https://github.com/taskforcesh/bullmq/issues/977) ([b03aaf1](https://github.com/taskforcesh/bullmq/commit/b03aaf10ca694745d143def2129f952b9bac18a6)) ([`1763af8`](https://github.com/taskforcesh/bullmq/commit/1763af8eb35fe5b48cbe1a6a1a066524edb59232)) - -### Fix - -* fix(update-progress): throw error if job key is missing (#978) ref #977 ([`b03aaf1`](https://github.com/taskforcesh/bullmq/commit/b03aaf10ca694745d143def2129f952b9bac18a6)) - - -## v1.63.0 (2021-12-31) - -### Chore - -* chore(release): 1.63.0 [skip ci] - -# [1.63.0](https://github.com/taskforcesh/bullmq/compare/v1.62.0...v1.63.0) (2021-12-31) - -### Features - -* **job:** use generic types for static methods ([#975](https://github.com/taskforcesh/bullmq/issues/975)) ([f78f4d0](https://github.com/taskforcesh/bullmq/commit/f78f4d0f75adb5c73558b3e8cf511db22f972791)) ([`4cfa4f9`](https://github.com/taskforcesh/bullmq/commit/4cfa4f9c0d97a29b89ab342a5f41de5e4e3ecbd2)) - -### Documentation - -* docs(flow): add getFlow into guide structure (#976) ([`db1224a`](https://github.com/taskforcesh/bullmq/commit/db1224a6aa674288b7ad879f53c9e1e063b7e9f7)) - -### Feature - -* feat(job): use generic types for static methods (#975) ([`f78f4d0`](https://github.com/taskforcesh/bullmq/commit/f78f4d0f75adb5c73558b3e8cf511db22f972791)) - -### Refactor - -* refactor: clean some interfaces references (#974) ([`92da59e`](https://github.com/taskforcesh/bullmq/commit/92da59ec7e9932377cb1b6a2ba1422ec50e24158)) - - -## v1.62.0 (2021-12-31) - -### Chore - -* chore(release): 1.62.0 [skip ci] - -# [1.62.0](https://github.com/taskforcesh/bullmq/compare/v1.61.0...v1.62.0) (2021-12-31) - -### Bug Fixes - -* add deprecated tag in progress and Queue3 class ([#973](https://github.com/taskforcesh/bullmq/issues/973)) ([6abdf5b](https://github.com/taskforcesh/bullmq/commit/6abdf5b66717cc8bc8ddb048029f7d9b92509942)) - -### Features - -* **queue:** add better event typing ([#971](https://github.com/taskforcesh/bullmq/issues/971)) ([596fd7b](https://github.com/taskforcesh/bullmq/commit/596fd7b260f2e95607f0eb4ff9553fb35137ec54)) ([`abe3f59`](https://github.com/taskforcesh/bullmq/commit/abe3f594b412c924ae9eb42e450bd2a356df7654)) - -### Feature - -* feat(queue): add better event typing (#971) ([`596fd7b`](https://github.com/taskforcesh/bullmq/commit/596fd7b260f2e95607f0eb4ff9553fb35137ec54)) - -### Fix - -* fix: add deprecated tag in progress and Queue3 class (#973) ([`6abdf5b`](https://github.com/taskforcesh/bullmq/commit/6abdf5b66717cc8bc8ddb048029f7d9b92509942)) - - -## v1.61.0 (2021-12-29) - -### Chore - -* chore(release): 1.61.0 [skip ci] - -# [1.61.0](https://github.com/taskforcesh/bullmq/compare/v1.60.0...v1.61.0) (2021-12-29) - -### Features - -* **queue:** reuse generic typing for jobs ([5c10818](https://github.com/taskforcesh/bullmq/commit/5c10818d90724cccdf510f0358c01233aeac77e4)) -* **worker:** reuse generic typing for jobs ([9adcdb7](https://github.com/taskforcesh/bullmq/commit/9adcdb798b4ee55835123a9f3d04c1397b176dc1)) ([`06176e3`](https://github.com/taskforcesh/bullmq/commit/06176e32579611f06569a9e05a26832c02a0e6f4)) - -### Feature - -* feat(queue): reuse generic typing for jobs ([`5c10818`](https://github.com/taskforcesh/bullmq/commit/5c10818d90724cccdf510f0358c01233aeac77e4)) - -* feat(worker): reuse generic typing for jobs ([`9adcdb7`](https://github.com/taskforcesh/bullmq/commit/9adcdb798b4ee55835123a9f3d04c1397b176dc1)) - - -## v1.60.0 (2021-12-29) - -### Chore - -* chore(release): 1.60.0 [skip ci] - -# [1.60.0](https://github.com/taskforcesh/bullmq/compare/v1.59.4...v1.60.0) (2021-12-29) - -### Features - -* **queue-scheduler:** add better event typing ([#963](https://github.com/taskforcesh/bullmq/issues/963)) ([b23c006](https://github.com/taskforcesh/bullmq/commit/b23c006e2bfce8a0709f0eb8e8739261b68c2f48)) ([`0caa042`](https://github.com/taskforcesh/bullmq/commit/0caa042725325a5b682d9ce53a5346a1131486a2)) - -### Documentation - -* docs(throttle-jobs): fix definition in patterns (#961) fixes #689 ([`e184d4d`](https://github.com/taskforcesh/bullmq/commit/e184d4d88c37f1e9b2d3c4fddf00130556a9f8df)) - -### Feature - -* feat(queue-scheduler): add better event typing (#963) ([`b23c006`](https://github.com/taskforcesh/bullmq/commit/b23c006e2bfce8a0709f0eb8e8739261b68c2f48)) - -### Refactor - -* refactor(get-state): add checkItemInList include (#964) ([`9df25c1`](https://github.com/taskforcesh/bullmq/commit/9df25c1f1310186e0516e0bb02abba527a819480)) - -### Test - -* test(worker): add case when sharing connection (#955) ([`2325ff7`](https://github.com/taskforcesh/bullmq/commit/2325ff791aae19cd98f8d27b645afade07b4c4fc)) - -* test: add next tick into processor (#967) ([`c636528`](https://github.com/taskforcesh/bullmq/commit/c636528d07161ed68ad017a65867aa1c9172c5d5)) - -* test(repeat): call nextTick in processor (#966) ([`2aaae88`](https://github.com/taskforcesh/bullmq/commit/2aaae88b58def78718e13ceea1a3ec9ab069b69b)) - - -## v1.59.4 (2021-12-21) - -### Chore - -* chore(release): 1.59.4 [skip ci] - -## [1.59.4](https://github.com/taskforcesh/bullmq/compare/v1.59.3...v1.59.4) (2021-12-21) - -### Bug Fixes - -* downgrade typescript to 3.9.10 fixes [#917](https://github.com/taskforcesh/bullmq/issues/917) ([#960](https://github.com/taskforcesh/bullmq/issues/960)) ([4e51fe0](https://github.com/taskforcesh/bullmq/commit/4e51fe00751092ee8f521039a3f2b41d881b71ae)) ([`fbecbef`](https://github.com/taskforcesh/bullmq/commit/fbecbef96a2f8b7d037d8ffaca7c0f710be9b518)) - -### Fix - -* fix: downgrade typescript to 3.9.10 fixes #917 (#960) ([`4e51fe0`](https://github.com/taskforcesh/bullmq/commit/4e51fe00751092ee8f521039a3f2b41d881b71ae)) - - -## v1.59.3 (2021-12-21) - -### Chore - -* chore(release): 1.59.3 [skip ci] - -## [1.59.3](https://github.com/taskforcesh/bullmq/compare/v1.59.2...v1.59.3) (2021-12-21) - -### Bug Fixes - -* **worker:** fix undefined moveToActive ([87e8cab](https://github.com/taskforcesh/bullmq/commit/87e8cab16dad6f8bd9e9ec369ef7e79f471180be)) ([`28ccfa9`](https://github.com/taskforcesh/bullmq/commit/28ccfa91f9fac99abd6f2d448d7f2e8d10b78806)) - -### Fix - -* fix(worker): fix undefined moveToActive ([`87e8cab`](https://github.com/taskforcesh/bullmq/commit/87e8cab16dad6f8bd9e9ec369ef7e79f471180be)) - - -## v1.59.2 (2021-12-17) - -### Chore - -* chore(release): 1.59.2 [skip ci] - -## [1.59.2](https://github.com/taskforcesh/bullmq/compare/v1.59.1...v1.59.2) (2021-12-17) - -### Bug Fixes - -* **package:** add jsnext:main prop ([#953](https://github.com/taskforcesh/bullmq/issues/953)) ([1a92bf7](https://github.com/taskforcesh/bullmq/commit/1a92bf7d41860f758841c5a833c1192d9a84a25f)) ([`7a950f5`](https://github.com/taskforcesh/bullmq/commit/7a950f5b336702f79058952c14bb2bf573818158)) - -### Documentation - -* docs: update debounce-jobs.md (#950) ([`424b54a`](https://github.com/taskforcesh/bullmq/commit/424b54af7c549150197a647fe898c67ff9d87aa4)) - -### Fix - -* fix(package): add jsnext:main prop (#953) ([`1a92bf7`](https://github.com/taskforcesh/bullmq/commit/1a92bf7d41860f758841c5a833c1192d9a84a25f)) - - -## v1.59.1 (2021-12-17) - -### Chore - -* chore(release): 1.59.1 [skip ci] - -## [1.59.1](https://github.com/taskforcesh/bullmq/compare/v1.59.0...v1.59.1) (2021-12-17) - -### Bug Fixes - -* copy lua files to correct location ([2be1120](https://github.com/taskforcesh/bullmq/commit/2be1120974692ee57ec00e30d6dbbef670d88a1e)) ([`192f093`](https://github.com/taskforcesh/bullmq/commit/192f093af11f0faf6ae946c4a464059d6e48c015)) - -### Fix - -* fix: copy lua files to correct location ([`2be1120`](https://github.com/taskforcesh/bullmq/commit/2be1120974692ee57ec00e30d6dbbef670d88a1e)) - - -## v1.59.0 (2021-12-17) - -### Chore - -* chore(release): 1.59.0 [skip ci] - -# [1.59.0](https://github.com/taskforcesh/bullmq/compare/v1.58.0...v1.59.0) (2021-12-17) - -### Bug Fixes - -* correct dist path ([067d4c2](https://github.com/taskforcesh/bullmq/commit/067d4c2009b877f8bf6e6145507a41a53e5f7af3)) - -### Features - -* also export bullmq as an ESM ([e97e5b5](https://github.com/taskforcesh/bullmq/commit/e97e5b52b079adf2ed79f7cb61699e40a91e34e8)) ([`0d3a222`](https://github.com/taskforcesh/bullmq/commit/0d3a222859b8b66dbe0aad8c8475b31c4fac93d2)) - -### Feature - -* feat: also export bullmq as an ESM ([`e97e5b5`](https://github.com/taskforcesh/bullmq/commit/e97e5b52b079adf2ed79f7cb61699e40a91e34e8)) - -### Fix - -* fix: correct dist path ([`067d4c2`](https://github.com/taskforcesh/bullmq/commit/067d4c2009b877f8bf6e6145507a41a53e5f7af3)) - - -## v1.58.0 (2021-12-15) - -### Chore - -* chore(release): 1.58.0 [skip ci] - -# [1.58.0](https://github.com/taskforcesh/bullmq/compare/v1.57.4...v1.58.0) (2021-12-15) - -### Features - -* **worker:** add better event typing ([#940](https://github.com/taskforcesh/bullmq/issues/940)) ([a326d4f](https://github.com/taskforcesh/bullmq/commit/a326d4f27e96ffa462a908ac14356d29839ff073)) ([`e2ffaaf`](https://github.com/taskforcesh/bullmq/commit/e2ffaafc54df02e9a9d7d0cd7e110407753c1ba9)) - -### Feature - -* feat(worker): add better event typing (#940) ([`a326d4f`](https://github.com/taskforcesh/bullmq/commit/a326d4f27e96ffa462a908ac14356d29839ff073)) - -### Refactor - -* refactor(repeat): move removeRepeatable to Script (#939) ([`60ed941`](https://github.com/taskforcesh/bullmq/commit/60ed941a69b6de3d29f29214133c542268d41984)) - - -## v1.57.4 (2021-12-14) - -### Chore - -* chore(release): 1.57.4 [skip ci] - -## [1.57.4](https://github.com/taskforcesh/bullmq/compare/v1.57.3...v1.57.4) (2021-12-14) - -### Bug Fixes - -* **move-to-active:** add try catch in moveToActive call ([#933](https://github.com/taskforcesh/bullmq/issues/933)) ([bab45b0](https://github.com/taskforcesh/bullmq/commit/bab45b05d08c625557e2df65921e12f48081d39c)) -* **redis-connection:** consider cluster redisOptions config ([#934](https://github.com/taskforcesh/bullmq/issues/934)) ([5130f63](https://github.com/taskforcesh/bullmq/commit/5130f63ad969efa9649ab8f9abf36a72e8f553f4)) ([`9d2d62c`](https://github.com/taskforcesh/bullmq/commit/9d2d62c2c33b981ac5071d7122cd50da1d272d5c)) - -* chore: delete extra test directory (#931) ([`9ccc200`](https://github.com/taskforcesh/bullmq/commit/9ccc200bf26a60523cda85871cf1743fc288cb66)) - -### Fix - -* fix(redis-connection): consider cluster redisOptions config (#934) ([`5130f63`](https://github.com/taskforcesh/bullmq/commit/5130f63ad969efa9649ab8f9abf36a72e8f553f4)) - -* fix(move-to-active): add try catch in moveToActive call (#933) ([`bab45b0`](https://github.com/taskforcesh/bullmq/commit/bab45b05d08c625557e2df65921e12f48081d39c)) - - -## v1.57.3 (2021-12-14) - -### Chore - -* chore(release): 1.57.3 [skip ci] - -## [1.57.3](https://github.com/taskforcesh/bullmq/compare/v1.57.2...v1.57.3) (2021-12-14) - -### Bug Fixes - -* remove debug console.error ([#932](https://github.com/taskforcesh/bullmq/issues/932)) ([271aac3](https://github.com/taskforcesh/bullmq/commit/271aac3417bc7f76ac02435b456552677b2847db)) ([`cf57730`](https://github.com/taskforcesh/bullmq/commit/cf57730ae41fb9d6185a78ec47f4ae95aa8dcd88)) - -### Fix - -* fix: remove debug console.error (#932) ([`271aac3`](https://github.com/taskforcesh/bullmq/commit/271aac3417bc7f76ac02435b456552677b2847db)) - -### Unknown - -* GitBook: [#83] docs: add initial documentation for groups rate limiting ([`4b59d05`](https://github.com/taskforcesh/bullmq/commit/4b59d05276a6c1933097542b22fd028b1a7c8a40)) - - -## v1.57.2 (2021-12-11) - -### Chore - -* chore(release): 1.57.2 [skip ci] - -## [1.57.2](https://github.com/taskforcesh/bullmq/compare/v1.57.1...v1.57.2) (2021-12-11) - -### Bug Fixes - -* **connection:** check instance options to console log deprecation message ([#927](https://github.com/taskforcesh/bullmq/issues/927)) ([fc1e2b9](https://github.com/taskforcesh/bullmq/commit/fc1e2b9f3f20db53f9dc7ecdfa4644f02acc9f83)) - -### Performance Improvements - -* **add-job:** save parent data as json ([#859](https://github.com/taskforcesh/bullmq/issues/859)) ([556d4ee](https://github.com/taskforcesh/bullmq/commit/556d4ee427090f60270945a7fd438e2595bb43e9)) ([`d9fd74f`](https://github.com/taskforcesh/bullmq/commit/d9fd74f8eae499ce2aeb02c7a0e5fcae5e4795bd)) - -### Fix - -* fix(connection): check instance options to console log deprecation message (#927) ([`fc1e2b9`](https://github.com/taskforcesh/bullmq/commit/fc1e2b9f3f20db53f9dc7ecdfa4644f02acc9f83)) - -### Performance - -* perf(add-job): save parent data as json (#859) ([`556d4ee`](https://github.com/taskforcesh/bullmq/commit/556d4ee427090f60270945a7fd438e2595bb43e9)) - - -## v1.57.1 (2021-12-11) - -### Chore - -* chore(release): 1.57.1 [skip ci] - -## [1.57.1](https://github.com/taskforcesh/bullmq/compare/v1.57.0...v1.57.1) (2021-12-11) - -### Bug Fixes - -* **worker:** better handling of block timeout ([be4c933](https://github.com/taskforcesh/bullmq/commit/be4c933ae0a7a790d24a081b2ed4e7e1c0216e47)) ([`8aa6e36`](https://github.com/taskforcesh/bullmq/commit/8aa6e36a806f51903620d397f821ef55763c6ff4)) - -### Fix - -* fix(worker): better handling of block timeout ([`be4c933`](https://github.com/taskforcesh/bullmq/commit/be4c933ae0a7a790d24a081b2ed4e7e1c0216e47)) - - -## v1.57.0 (2021-12-08) - -### Chore - -* chore(release): 1.57.0 [skip ci] - -# [1.57.0](https://github.com/taskforcesh/bullmq/compare/v1.56.0...v1.57.0) (2021-12-08) - -### Features - -* **queue-events:** add better event typing ([#919](https://github.com/taskforcesh/bullmq/issues/919)) ([e980080](https://github.com/taskforcesh/bullmq/commit/e980080767bc56ae09a5c5cf33728a85a023bb42)) ([`7ea381b`](https://github.com/taskforcesh/bullmq/commit/7ea381b2936b93d86752e5f4b773fa04b3d8a7cd)) - -### Feature - -* feat(queue-events): add better event typing (#919) ([`e980080`](https://github.com/taskforcesh/bullmq/commit/e980080767bc56ae09a5c5cf33728a85a023bb42)) - -### Unknown - -* GitBook: [#82] docs: fixe import for bullmq-pro ([`efb627b`](https://github.com/taskforcesh/bullmq/commit/efb627b4061b386cbfddecdf638a6e73d3a2820a)) - - -## v1.56.0 (2021-12-06) - -### Chore - -* chore(release): 1.56.0 [skip ci] - -# [1.56.0](https://github.com/taskforcesh/bullmq/compare/v1.55.1...v1.56.0) (2021-12-06) - -### Bug Fixes - -* emit drain event if no jobs left when completing ([9ad78a9](https://github.com/taskforcesh/bullmq/commit/9ad78a91c0a4a74cf84bd77d351d98195104f0b6)) -* **worker:** use client for setting worker name ([af65c2c](https://github.com/taskforcesh/bullmq/commit/af65c2cd0d3fb232c617b018d4991f3276db11ea)) - -### Features - -* **worker:** make moveToActive protected ([d2897ee](https://github.com/taskforcesh/bullmq/commit/d2897ee7bbf4aee5251ac4fb28705f2bebbe7bfe)) ([`bf37a32`](https://github.com/taskforcesh/bullmq/commit/bf37a324273dd1a2f606ff2dcb08c6166cc86ae9)) - -* chore: refactor moveToActive ([`e74648f`](https://github.com/taskforcesh/bullmq/commit/e74648f22e3768474546f201050273f77bc5ea68)) - -* chore: move initMapping to constructor ([`4f35cee`](https://github.com/taskforcesh/bullmq/commit/4f35cee25e1767aa2134a0309558a09223d2c818)) - -* chore: add tests ([`dd8332a`](https://github.com/taskforcesh/bullmq/commit/dd8332a894915c2421f289fc7e851455c75cccdb)) - -* chore: remove bullmq-tests submodule ([`7ac95d2`](https://github.com/taskforcesh/bullmq/commit/7ac95d2d189157a8bc74889a9c6edc814ca69879)) - -### Feature - -* feat(worker): make moveToActive protected ([`d2897ee`](https://github.com/taskforcesh/bullmq/commit/d2897ee7bbf4aee5251ac4fb28705f2bebbe7bfe)) - -### Fix - -* fix(worker): use client for setting worker name ([`af65c2c`](https://github.com/taskforcesh/bullmq/commit/af65c2cd0d3fb232c617b018d4991f3276db11ea)) - -* fix: emit drain event if no jobs left when completing ([`9ad78a9`](https://github.com/taskforcesh/bullmq/commit/9ad78a91c0a4a74cf84bd77d351d98195104f0b6)) - -### Test - -* test: fix deprecation warnings ([`ed16ac3`](https://github.com/taskforcesh/bullmq/commit/ed16ac3bfc5f78a1d5b4fdabccf6ec2c8db31d7e)) - - -## v1.55.1 (2021-12-03) - -### Chore - -* chore(release): 1.55.1 [skip ci] - -## [1.55.1](https://github.com/taskforcesh/bullmq/compare/v1.55.0...v1.55.1) (2021-12-03) - -### Bug Fixes - -* **worker:** always try to move to active after waiting for job ([#914](https://github.com/taskforcesh/bullmq/issues/914)) ([97b7084](https://github.com/taskforcesh/bullmq/commit/97b708451bf4ce14a461a50f8a24d14b0e40dd4b)) ([`5327a96`](https://github.com/taskforcesh/bullmq/commit/5327a9618932ffe5ffc632c13c73b8c26302074c)) - -* chore: add codeql-analysis ([`f6721dc`](https://github.com/taskforcesh/bullmq/commit/f6721dc34ccfc75d773cceaadc3c65e4c75eb6ad)) - -### Fix - -* fix(worker): always try to move to active after waiting for job (#914) ([`97b7084`](https://github.com/taskforcesh/bullmq/commit/97b708451bf4ce14a461a50f8a24d14b0e40dd4b)) - -### Test - -* test: fix test reference (#913) ([`c67aa6c`](https://github.com/taskforcesh/bullmq/commit/c67aa6c235ff7830c643e2fb291d1145b11b9de2)) - -### Unknown - -* GitBook: [#81] docs: add pricing information for bullmq-pro ([`27a69f9`](https://github.com/taskforcesh/bullmq/commit/27a69f9b9540baadf692e62eb0c6857f0b86aa96)) - - -## v1.55.0 (2021-12-02) - -### Chore - -* chore(release): 1.55.0 [skip ci] - -# [1.55.0](https://github.com/taskforcesh/bullmq/compare/v1.54.6...v1.55.0) (2021-12-02) - -### Features - -* **script-loader:** lua script loader with include support ([#897](https://github.com/taskforcesh/bullmq/issues/897)) ([64b6ccf](https://github.com/taskforcesh/bullmq/commit/64b6ccf2a373b40d7ea763b3d35cf34f36ba11da)) ([`ae90c44`](https://github.com/taskforcesh/bullmq/commit/ae90c44e2ef79661440abbb9aae29345ca4e40ad)) - -### Documentation - -* docs(bullmq-pro): add missing line in install instructions (#905) ([`53ba7b7`](https://github.com/taskforcesh/bullmq/commit/53ba7b798d75ead036b417c4644a7eab59b81cb4)) - -* docs(job): use defaultValue tag (#903) ([`3133599`](https://github.com/taskforcesh/bullmq/commit/3133599e982071fd1dfe7871f20b87eb6461cbf2)) - -### Feature - -* feat(script-loader): lua script loader with include support (#897) ([`64b6ccf`](https://github.com/taskforcesh/bullmq/commit/64b6ccf2a373b40d7ea763b3d35cf34f36ba11da)) - -### Style - -* style: fix styled github warnings (#904) ([`a008c2b`](https://github.com/taskforcesh/bullmq/commit/a008c2be6bc8fe73360ac97a6deabced04382ab4)) - - -## v1.54.6 (2021-11-30) - -### Chore - -* chore(release): 1.54.6 [skip ci] - -## [1.54.6](https://github.com/taskforcesh/bullmq/compare/v1.54.5...v1.54.6) (2021-11-30) - -### Bug Fixes - -* **stalled:** save finidhedOn when job stalled more than allowable limit ([#900](https://github.com/taskforcesh/bullmq/issues/900)) ([eb89edf](https://github.com/taskforcesh/bullmq/commit/eb89edf2f4eb85dedb1485de32e79331940a654f)) ([`0c0be5e`](https://github.com/taskforcesh/bullmq/commit/0c0be5e2c4b1192c45dcea16f3f0fdd725aa40fc)) - -* chore(deps): upgrade dev dependencies ([`9d108e3`](https://github.com/taskforcesh/bullmq/commit/9d108e30fbd47de3f4b32d2217bce8a1d0c9400c)) - -* chore(redis-connection): delete unused variables ([`437d9b3`](https://github.com/taskforcesh/bullmq/commit/437d9b35251fca132f56f1e075b84f5cdccebbde)) - -* chore: fix coverage action ([`72db663`](https://github.com/taskforcesh/bullmq/commit/72db663a52fd73ab62568ba06b2952dc57791f3b)) - -### Documentation - -* docs: update logo ([`5ae0ec4`](https://github.com/taskforcesh/bullmq/commit/5ae0ec4ce63e6fe184b8edd4dfb462a5804cba02)) - -### Fix - -* fix(stalled): save finidhedOn when job stalled more than allowable limit (#900) ([`eb89edf`](https://github.com/taskforcesh/bullmq/commit/eb89edf2f4eb85dedb1485de32e79331940a654f)) - -### Style - -* style(eslint): warn ts ban types ([`1d8aaf2`](https://github.com/taskforcesh/bullmq/commit/1d8aaf2346c851846c4807cea1580f3360498f49)) - -### Unknown - -* GitBook: [#80] docs: update install bullmq-pro ([`3805ce7`](https://github.com/taskforcesh/bullmq/commit/3805ce76d7db1b52dc8b3e32bae8221bb3ef9f96)) - - -## v1.54.5 (2021-11-26) - -### Chore - -* chore(release): 1.54.5 [skip ci] - -## [1.54.5](https://github.com/taskforcesh/bullmq/compare/v1.54.4...v1.54.5) (2021-11-26) - -### Bug Fixes - -* **tsconfig:** only include node types ([#895](https://github.com/taskforcesh/bullmq/issues/895)) ([5f4fdca](https://github.com/taskforcesh/bullmq/commit/5f4fdca5f416f2cd9d83eb0fba84e56c24320b63)) ([`f178fa9`](https://github.com/taskforcesh/bullmq/commit/f178fa984a7d53c8f92ea123ad476d92d153ab0f)) - -### Fix - -* fix(tsconfig): only include node types (#895) ([`5f4fdca`](https://github.com/taskforcesh/bullmq/commit/5f4fdca5f416f2cd9d83eb0fba84e56c24320b63)) - -### Test - -* test: fix test checkout ([`e9859fc`](https://github.com/taskforcesh/bullmq/commit/e9859fcf826ded5e2efedeba753a99d4f9ff9145)) - -* test: correct test paths ([`4bc5e75`](https://github.com/taskforcesh/bullmq/commit/4bc5e7512c0982989289aacb685b35fbb3bc5a82)) - -* test: add tests as an external module ([`19d3de4`](https://github.com/taskforcesh/bullmq/commit/19d3de4f9a6ed65b211e8cb903f20e5a47e0bbe2)) - - -## v1.54.4 (2021-11-24) - -### Chore - -* chore(release): 1.54.4 [skip ci] - -## [1.54.4](https://github.com/taskforcesh/bullmq/compare/v1.54.3...v1.54.4) (2021-11-24) - -### Bug Fixes - -* **child-processor:** add deprecation warning for progress method ([#890](https://github.com/taskforcesh/bullmq/issues/890)) ([f80b19a](https://github.com/taskforcesh/bullmq/commit/f80b19a5aa85413b8906aa0fac1bfd09bec990cb)) ([`9469c36`](https://github.com/taskforcesh/bullmq/commit/9469c36cdbeb67491534f580f05f704d7c325d4b)) - -* chore: move pre-commit to husky hooks ([`a83c822`](https://github.com/taskforcesh/bullmq/commit/a83c822b6706432b604329e2da47d5f3ec1837a9)) - -### Documentation - -* docs: add missing returned types (#889) ([`3c76dc4`](https://github.com/taskforcesh/bullmq/commit/3c76dc4fa3558fa83161537751bc68eeb65e9d4a)) - -### Fix - -* fix(child-processor): add deprecation warning for progress method (#890) ([`f80b19a`](https://github.com/taskforcesh/bullmq/commit/f80b19a5aa85413b8906aa0fac1bfd09bec990cb)) - -### Refactor - -* refactor(sandbox): use utilty functions instead of send ([`7619e23`](https://github.com/taskforcesh/bullmq/commit/7619e232faf759c0456e83bef7b35064278f2453)) - -* refactor: refactor sandoxes related code ([`bd0131d`](https://github.com/taskforcesh/bullmq/commit/bd0131dabfe3c6983d6b2c68cdd974c60d947314)) - -* refactor: provide a protected method for calling process job ([`b6c9166`](https://github.com/taskforcesh/bullmq/commit/b6c9166e7cc74e5deb17cbf8ec3ad495bd0b7720)) - - -## v1.54.3 (2021-11-22) - -### Chore - -* chore(release): 1.54.3 [skip ci] - -## [1.54.3](https://github.com/taskforcesh/bullmq/compare/v1.54.2...v1.54.3) (2021-11-22) - -### Bug Fixes - -* **clean:** use range values in lua script ([#885](https://github.com/taskforcesh/bullmq/issues/885)) ([02ef63a](https://github.com/taskforcesh/bullmq/commit/02ef63a8163e627a270a1c1bd74989a67c3f15f7)) ([`22eabe5`](https://github.com/taskforcesh/bullmq/commit/22eabe5e7d515a501f427b4dca05b2b398f60412)) - -### Fix - -* fix(clean): use range values in lua script (#885) ([`02ef63a`](https://github.com/taskforcesh/bullmq/commit/02ef63a8163e627a270a1c1bd74989a67c3f15f7)) - - -## v1.54.2 (2021-11-20) - -### Chore - -* chore(release): 1.54.2 [skip ci] - -## [1.54.2](https://github.com/taskforcesh/bullmq/compare/v1.54.1...v1.54.2) (2021-11-20) - -### Bug Fixes - -* **job:** use this when use new operators ([#884](https://github.com/taskforcesh/bullmq/issues/884)) ([7b84283](https://github.com/taskforcesh/bullmq/commit/7b842839e1d30967ebf15b901033e3b31e929df8)) ([`03f6eb3`](https://github.com/taskforcesh/bullmq/commit/03f6eb3d536dc4dd00c0d75338eb72678f397a69)) - -### Fix - -* fix(job): use this when use new operators (#884) ([`7b84283`](https://github.com/taskforcesh/bullmq/commit/7b842839e1d30967ebf15b901033e3b31e929df8)) - - -## v1.54.1 (2021-11-19) - -### Chore - -* chore(release): 1.54.1 [skip ci] - -## [1.54.1](https://github.com/taskforcesh/bullmq/compare/v1.54.0...v1.54.1) (2021-11-19) - -### Bug Fixes - -* **job:** change private attributes to protected for extensions ([#882](https://github.com/taskforcesh/bullmq/issues/882)) ([ffcc3f0](https://github.com/taskforcesh/bullmq/commit/ffcc3f083c23e6de3587c38fb7aacb2e19085351)) ([`5024c18`](https://github.com/taskforcesh/bullmq/commit/5024c186b4bafaa6c416799c782331934fa19eb1)) - -### Fix - -* fix(job): change private attributes to protected for extensions (#882) ([`ffcc3f0`](https://github.com/taskforcesh/bullmq/commit/ffcc3f083c23e6de3587c38fb7aacb2e19085351)) - - -## v1.54.0 (2021-11-17) - -### Chore - -* chore(release): 1.54.0 [skip ci] - -# [1.54.0](https://github.com/taskforcesh/bullmq/compare/v1.53.0...v1.54.0) (2021-11-17) - -### Features - -* **load-includes:** export includes to be reused in extensions ([#877](https://github.com/taskforcesh/bullmq/issues/877)) ([b56c4a9](https://github.com/taskforcesh/bullmq/commit/b56c4a9cf2ecebb44481618026589162be61680a)) ([`d6519f1`](https://github.com/taskforcesh/bullmq/commit/d6519f1a185decdd544667115657e00239c9d6ee)) - -### Feature - -* feat(load-includes): export includes to be reused in extensions (#877) ([`b56c4a9`](https://github.com/taskforcesh/bullmq/commit/b56c4a9cf2ecebb44481618026589162be61680a)) - - -## v1.53.0 (2021-11-16) - -### Chore - -* chore(release): 1.53.0 [skip ci] - -# [1.53.0](https://github.com/taskforcesh/bullmq/compare/v1.52.2...v1.53.0) (2021-11-16) - -### Features - -* **queue-events:** add cleaned event ([#865](https://github.com/taskforcesh/bullmq/issues/865)) ([b3aebad](https://github.com/taskforcesh/bullmq/commit/b3aebad8a62311e135d53be2e7c5e47740547465)) ([`14e4f31`](https://github.com/taskforcesh/bullmq/commit/14e4f318e3c4ca2eb3fd065d79f1813c6ed7f8eb)) - -### Feature - -* feat(queue-events): add cleaned event (#865) ([`b3aebad`](https://github.com/taskforcesh/bullmq/commit/b3aebad8a62311e135d53be2e7c5e47740547465)) - - -## v1.52.2 (2021-11-14) - -### Chore - -* chore(release): 1.52.2 [skip ci] - -## [1.52.2](https://github.com/taskforcesh/bullmq/compare/v1.52.1...v1.52.2) (2021-11-14) - -### Bug Fixes - -* **worker:** change private attributes to protected for pro extension ([#874](https://github.com/taskforcesh/bullmq/issues/874)) ([1c73881](https://github.com/taskforcesh/bullmq/commit/1c738819b49f206688ed7b3b9d103077045e1b05)) ([`e73580b`](https://github.com/taskforcesh/bullmq/commit/e73580ba747b304924643ba9c710449e9b254716)) - -### Fix - -* fix(worker): change private attributes to protected for pro extension (#874) ([`1c73881`](https://github.com/taskforcesh/bullmq/commit/1c738819b49f206688ed7b3b9d103077045e1b05)) - - -## v1.52.1 (2021-11-12) - -### Chore - -* chore(release): 1.52.1 [skip ci] - -## [1.52.1](https://github.com/taskforcesh/bullmq/compare/v1.52.0...v1.52.1) (2021-11-12) - -### Performance Improvements - -* **clean:** speed up clean method when called with limit param ([#864](https://github.com/taskforcesh/bullmq/issues/864)) ([09b5cb4](https://github.com/taskforcesh/bullmq/commit/09b5cb45a79c4bc53a52d540918c22477a066e16)) ([`d59475c`](https://github.com/taskforcesh/bullmq/commit/d59475ce4d3ad1181dde613e47e7318812f23110)) - -* chore(deps): apply rimraf to delete extra published files (#873) ([`e84620c`](https://github.com/taskforcesh/bullmq/commit/e84620c785f388ed14742c86d78dd78fb05218de)) - -### Performance - -* perf(clean): speed up clean method when called with limit param (#864) ([`09b5cb4`](https://github.com/taskforcesh/bullmq/commit/09b5cb45a79c4bc53a52d540918c22477a066e16)) - - -## v1.52.0 (2021-11-11) - -### Chore - -* chore(release): 1.52.0 [skip ci] - -# [1.52.0](https://github.com/taskforcesh/bullmq/compare/v1.51.3...v1.52.0) (2021-11-11) - -### Features - -* **queue:** add waiting event type declaration ([#872](https://github.com/taskforcesh/bullmq/issues/872)) ([f29925d](https://github.com/taskforcesh/bullmq/commit/f29925da3b12f573582ea188ec386e86023cefc9)) ([`2048a9b`](https://github.com/taskforcesh/bullmq/commit/2048a9b47f69166805858fdc3a18c940deb42049)) - -* chore(deps): upgrade @semantic-release/github (#867) to 8.0.2 ([`9621383`](https://github.com/taskforcesh/bullmq/commit/96213838121f4a52d71ce07928f2c5f9cb46fa9c)) - -### Ci - -* ci(node-workflow): allow run tests in next branch (#852) ([`6009054`](https://github.com/taskforcesh/bullmq/commit/6009054c53ef447d02173f6a7a88fe6a7eb03581)) - -### Feature - -* feat(queue): add waiting event type declaration (#872) ([`f29925d`](https://github.com/taskforcesh/bullmq/commit/f29925da3b12f573582ea188ec386e86023cefc9)) - -### Test - -* test(worker): check finishedOn value passed in completed event (#866) ref #863 ([`ef47aa9`](https://github.com/taskforcesh/bullmq/commit/ef47aa93b0808f3027c85e17aee3be12e716ff8c)) - - -## v1.51.3 (2021-11-04) - -### Chore - -* chore(release): 1.51.3 [skip ci] - -## [1.51.3](https://github.com/taskforcesh/bullmq/compare/v1.51.2...v1.51.3) (2021-11-04) - -### Bug Fixes - -* **move-to-failed:** delete closing check that prevents script execution ([#858](https://github.com/taskforcesh/bullmq/issues/858)) fixes [#834](https://github.com/taskforcesh/bullmq/issues/834) ([d50814f](https://github.com/taskforcesh/bullmq/commit/d50814f864448c10fec8e93651a2095fa4ef3f4e)) ([`be186d9`](https://github.com/taskforcesh/bullmq/commit/be186d9e6f3c3bf1d4afb0e1423935190681de34)) - -### Fix - -* fix(move-to-failed): delete closing check that prevents script execution (#858) fixes #834 ([`d50814f`](https://github.com/taskforcesh/bullmq/commit/d50814f864448c10fec8e93651a2095fa4ef3f4e)) - - -## v1.51.2 (2021-11-03) - -### Chore - -* chore(release): 1.51.2 [skip ci] - -## [1.51.2](https://github.com/taskforcesh/bullmq/compare/v1.51.1...v1.51.2) (2021-11-03) - -### Bug Fixes - -* **flow:** remove repeat option from FlowJob opts ([#853](https://github.com/taskforcesh/bullmq/issues/853)) fixes [#851](https://github.com/taskforcesh/bullmq/issues/851) ([c9ee2f1](https://github.com/taskforcesh/bullmq/commit/c9ee2f100a23aa24034598b7d452c69720d7aabd)) ([`8c8a5df`](https://github.com/taskforcesh/bullmq/commit/8c8a5df4121560a7325bbbadb8ec77b59fad3505)) - -* chore(deps): add npm-run-all into dev-dependencies (#847) ([`315d5dd`](https://github.com/taskforcesh/bullmq/commit/315d5dda39bcfb3223976d1a6da8e11d0a4902a5)) - -### Documentation - -* docs: use implements for declaration types (#845) ([`2446cea`](https://github.com/taskforcesh/bullmq/commit/2446cea3d99d9b1bd738e7a8480c395984f8f17c)) - -### Fix - -* fix(flow): remove repeat option from FlowJob opts (#853) fixes #851 ([`c9ee2f1`](https://github.com/taskforcesh/bullmq/commit/c9ee2f100a23aa24034598b7d452c69720d7aabd)) - -### Unknown - -* GitBook: [#79] correct groups paragraph ([`0460246`](https://github.com/taskforcesh/bullmq/commit/0460246ea4d9c79264b601671ce4794603fa1bdc)) - -* GitBook: [#78] docs: update custom job ids ([`b157171`](https://github.com/taskforcesh/bullmq/commit/b1571712311856f72c2eea4315bb2e5ca06015f7)) - -* GitBook: [#77] docs: add job ids page ([`cea2742`](https://github.com/taskforcesh/bullmq/commit/cea274258858517f648e2d6cacdb73ca0659cf25)) - - -## v1.51.1 (2021-10-29) - -### Chore - -* chore(release): 1.51.1 [skip ci] - -## [1.51.1](https://github.com/taskforcesh/bullmq/compare/v1.51.0...v1.51.1) (2021-10-29) - -### Bug Fixes - -* **commands:** copy includes lua scripts ([#843](https://github.com/taskforcesh/bullmq/issues/843)) fixes [#837](https://github.com/taskforcesh/bullmq/issues/837) ([cab33e0](https://github.com/taskforcesh/bullmq/commit/cab33e08bc78bd3c45b86158a818100beeb06d81)) ([`1c99cc7`](https://github.com/taskforcesh/bullmq/commit/1c99cc7f00097ee77669378c6e1c291677b330df)) - -### Fix - -* fix(commands): copy includes lua scripts (#843) fixes #837 ([`cab33e0`](https://github.com/taskforcesh/bullmq/commit/cab33e08bc78bd3c45b86158a818100beeb06d81)) - - -## v1.51.0 (2021-10-28) - -### Chore - -* chore(release): 1.51.0 [skip ci] - -# [1.51.0](https://github.com/taskforcesh/bullmq/compare/v1.50.7...v1.51.0) (2021-10-28) - -### Features - -* **flow:** consider continually adding jobs ([#828](https://github.com/taskforcesh/bullmq/issues/828)) fixes [#826](https://github.com/taskforcesh/bullmq/issues/826) ([b0fde69](https://github.com/taskforcesh/bullmq/commit/b0fde69f4370160a891e4654485c09745066b80b)) ([`8231052`](https://github.com/taskforcesh/bullmq/commit/82310524849b8aaae0ab8e427f4a0637fadaa2de)) - -### Feature - -* feat(flow): consider continually adding jobs (#828) fixes #826 ([`b0fde69`](https://github.com/taskforcesh/bullmq/commit/b0fde69f4370160a891e4654485c09745066b80b)) - - -## v1.50.7 (2021-10-28) - -### Chore - -* chore(release): 1.50.7 [skip ci] - -## [1.50.7](https://github.com/taskforcesh/bullmq/compare/v1.50.6...v1.50.7) (2021-10-28) - -### Bug Fixes - -* override enableReadyCheck, maxRetriesPerRequest fixes reconnection ([09ba358](https://github.com/taskforcesh/bullmq/commit/09ba358b6f761bdc52b0f5b2aa315cc6c2a9db6e)) -* **queue-base:** deprecation warning on missing connection ([2f79802](https://github.com/taskforcesh/bullmq/commit/2f79802378d7e015b5d0702945a71c1c2073251e)) ([`da1add8`](https://github.com/taskforcesh/bullmq/commit/da1add8d2970216b953406d1c1109b36bfa05c5c)) - -* chore: remove some lodash functions (#835) ([`fcc48e3`](https://github.com/taskforcesh/bullmq/commit/fcc48e3fb4263950f355e9fd9a233a20fe18f380)) - -### Fix - -* fix: override enableReadyCheck, maxRetriesPerRequest fixes reconnection ([`09ba358`](https://github.com/taskforcesh/bullmq/commit/09ba358b6f761bdc52b0f5b2aa315cc6c2a9db6e)) - -* fix(queue-base): deprecation warning on missing connection ([`2f79802`](https://github.com/taskforcesh/bullmq/commit/2f79802378d7e015b5d0702945a71c1c2073251e)) - - -## v1.50.6 (2021-10-28) - -### Chore - -* chore(release): 1.50.6 [skip ci] - -## [1.50.6](https://github.com/taskforcesh/bullmq/compare/v1.50.5...v1.50.6) (2021-10-28) - -### Bug Fixes - -* **queue-base:** show connection deprecation warning ([#832](https://github.com/taskforcesh/bullmq/issues/832)) fixes [#829](https://github.com/taskforcesh/bullmq/issues/829) ([5d023fe](https://github.com/taskforcesh/bullmq/commit/5d023fe7b671a2547398fd68995ccd85216cc7a5)) ([`2c191b0`](https://github.com/taskforcesh/bullmq/commit/2c191b0e079bf412f292617c88917eec3c9b00de)) - -### Ci - -* ci(github): set test job and cache (#820) ([`d810465`](https://github.com/taskforcesh/bullmq/commit/d810465a4549da871e53d8bed496118afda61fb0)) - -### Fix - -* fix(queue-base): show connection deprecation warning (#832) fixes #829 ([`5d023fe`](https://github.com/taskforcesh/bullmq/commit/5d023fe7b671a2547398fd68995ccd85216cc7a5)) - -### Test - -* test(flow): add backoff strategy case (#827) ([`a0cae58`](https://github.com/taskforcesh/bullmq/commit/a0cae58ca0c3c489309c6ad626fb5d6147bdf92d)) - - -## v1.50.5 (2021-10-21) - -### Chore - -* chore(release): 1.50.5 [skip ci] - -## [1.50.5](https://github.com/taskforcesh/bullmq/compare/v1.50.4...v1.50.5) (2021-10-21) - -### Bug Fixes - -* **child-pool:** pipe process stdout and stderr([#822](https://github.com/taskforcesh/bullmq/issues/822)) fixes [#821](https://github.com/taskforcesh/bullmq/issues/821) ([13f5c62](https://github.com/taskforcesh/bullmq/commit/13f5c62174925e4638acda6a9de379668048189d)) ([`7dcbe43`](https://github.com/taskforcesh/bullmq/commit/7dcbe43ccc3c69625e6fba72f80d71dd755690b3)) - -### Fix - -* fix(child-pool): pipe process stdout and stderr(#822) fixes #821 ([`13f5c62`](https://github.com/taskforcesh/bullmq/commit/13f5c62174925e4638acda6a9de379668048189d)) - -### Test - -* test: add test case for shared connections ([`3c8906e`](https://github.com/taskforcesh/bullmq/commit/3c8906e910c8aa399b9b591f87c19427d685b69d)) - - -## v1.50.4 (2021-10-20) - -### Chore - -* chore(release): 1.50.4 [skip ci] - -## [1.50.4](https://github.com/taskforcesh/bullmq/compare/v1.50.3...v1.50.4) (2021-10-20) - -### Bug Fixes - -* properly pass sharedConnection option to worker base class ([56557f1](https://github.com/taskforcesh/bullmq/commit/56557f1c0c3fb04bc3dd8824819c2d4367324c3b)) ([`fdc76ff`](https://github.com/taskforcesh/bullmq/commit/fdc76ff9b8781a1735933514a8b2b5eac510b789)) - -### Fix - -* fix: properly pass sharedConnection option to worker base class ([`56557f1`](https://github.com/taskforcesh/bullmq/commit/56557f1c0c3fb04bc3dd8824819c2d4367324c3b)) - -### Unknown - -* GitBook: [#74] update bullmq-pro docs ([`b61b9a8`](https://github.com/taskforcesh/bullmq/commit/b61b9a8ccca16554d4a0c03eb14ed3e6fe5a7543)) - -* GitBook: [#73] update bullmq-pro docs ([`fce0070`](https://github.com/taskforcesh/bullmq/commit/fce00701930e188844218453f2aeb68087cf111d)) - -* GitBook: [#72] update groups ([`c99069a`](https://github.com/taskforcesh/bullmq/commit/c99069a481102e57889872aac1ad7d9f4fee58e4)) - -* GitBook: [#71] update groups ([`8dc7f36`](https://github.com/taskforcesh/bullmq/commit/8dc7f36fa9e91f1d9f876db82dccbdbd2b8e3bbd)) - -* GitBook: [#70] add groups diagram ([`00be74a`](https://github.com/taskforcesh/bullmq/commit/00be74afc99f255999a0a7aaf1c971d68f67e382)) - -* GitBook: [#69] update bullmq-pro install instructions ([`b47d5ef`](https://github.com/taskforcesh/bullmq/commit/b47d5ef32ebcdf7363c059481491b8c22aec041b)) - - -## v1.50.3 (2021-10-18) - -### Chore - -* chore(release): 1.50.3 [skip ci] - -## [1.50.3](https://github.com/taskforcesh/bullmq/compare/v1.50.2...v1.50.3) (2021-10-18) - -### Bug Fixes - -* **msgpackr:** upgrade version to 1.4.6 to support esm bundlers ([#818](https://github.com/taskforcesh/bullmq/issues/818)) fixes [#813](https://github.com/taskforcesh/bullmq/issues/813) ([913d7a9](https://github.com/taskforcesh/bullmq/commit/913d7a9a892d2c7e2fa5822367355c2dee888583)) ([`19da60a`](https://github.com/taskforcesh/bullmq/commit/19da60a6006d0df9e0cb81ea810d3c2673e46350)) - -### Documentation - -* docs(remove): fix id typo (#805) ([`51eebc4`](https://github.com/taskforcesh/bullmq/commit/51eebc4ca25f3cada743f5e0a3e7e8878b82bc7e)) - -### Fix - -* fix(msgpackr): upgrade version to 1.4.6 to support esm bundlers (#818) fixes #813 ([`913d7a9`](https://github.com/taskforcesh/bullmq/commit/913d7a9a892d2c7e2fa5822367355c2dee888583)) - -### Unknown - -* GitBook: [#68] docs: more updates to bull documentation ([`478e90a`](https://github.com/taskforcesh/bullmq/commit/478e90ac39005198be07d731c50c9df4cae2f674)) - -* GitBook: [#67] add initial bullmq-pro and groups documentation ([`123e784`](https://github.com/taskforcesh/bullmq/commit/123e7846b65b43c1f19540aaa2de41b3dd94fb0e)) - - -## v1.50.2 (2021-10-12) - -### Chore - -* chore(release): 1.50.2 [skip ci] - -## [1.50.2](https://github.com/taskforcesh/bullmq/compare/v1.50.1...v1.50.2) (2021-10-12) - -### Bug Fixes - -* **msgpack:** replace msgpack by msgpackr ([dc13a75](https://github.com/taskforcesh/bullmq/commit/dc13a75374bbd29fefbf3e56f822e763df3712d9)) ([`23c02b2`](https://github.com/taskforcesh/bullmq/commit/23c02b2eee3c4e27e0370317779b1620b195e2f5)) - -### Fix - -* fix(msgpack): replace msgpack by msgpackr ([`dc13a75`](https://github.com/taskforcesh/bullmq/commit/dc13a75374bbd29fefbf3e56f822e763df3712d9)) - -### Test - -* test(events): fix broken text ([`67ab17d`](https://github.com/taskforcesh/bullmq/commit/67ab17d0093edcba4f784531c0e601b32cff5e1f)) - - -## v1.50.1 (2021-10-12) - -### Chore - -* chore(release): 1.50.1 [skip ci] - -## [1.50.1](https://github.com/taskforcesh/bullmq/compare/v1.50.0...v1.50.1) (2021-10-12) - -### Bug Fixes - -* **queue-getters:** only getting the first 2 jobs ([653873a](https://github.com/taskforcesh/bullmq/commit/653873a6a86dd6c3e1afc3142efbe11014d80557)) ([`4768d7b`](https://github.com/taskforcesh/bullmq/commit/4768d7b1f843dcac14bef62edbfab3d1242dec64)) - -* chore(test_getters): check order for completed jobs ([`7b3e718`](https://github.com/taskforcesh/bullmq/commit/7b3e7189dc30947427ce94a1bd39cc481077a117)) - -* chore(test_getters): add tests for waiting and failed getters ([`426a2a7`](https://github.com/taskforcesh/bullmq/commit/426a2a753d5b5e6a561937c4ad34ab5cc028c65c)) - -### Fix - -* fix(queue-getters): only getting the first 2 jobs ([`653873a`](https://github.com/taskforcesh/bullmq/commit/653873a6a86dd6c3e1afc3142efbe11014d80557)) - - -## v1.50.0 (2021-10-12) - -### Chore - -* chore(release): 1.50.0 [skip ci] - -# [1.50.0](https://github.com/taskforcesh/bullmq/compare/v1.49.0...v1.50.0) (2021-10-12) - -### Features - -* easier to build extensions on top of BullMQ ([b1a9e64](https://github.com/taskforcesh/bullmq/commit/b1a9e64a9184addc0b8245a04013e1c896e9c2bc)) ([`2d646d1`](https://github.com/taskforcesh/bullmq/commit/2d646d169f9ad084b6fc8c47316aaa77821126ea)) - -### Documentation - -* docs(child-pool): add link to process exit codes (#799) ([`1f12295`](https://github.com/taskforcesh/bullmq/commit/1f122952a0f161c754b5ddbba75db2880a4554c8)) - -### Feature - -* feat: easier to build extensions on top of BullMQ ([`b1a9e64`](https://github.com/taskforcesh/bullmq/commit/b1a9e64a9184addc0b8245a04013e1c896e9c2bc)) - - -## v1.49.0 (2021-10-08) - -### Chore - -* chore(release): 1.49.0 [skip ci] - -# [1.49.0](https://github.com/taskforcesh/bullmq/compare/v1.48.3...v1.49.0) (2021-10-08) - -### Features - -* **sandboxed-process:** handle init-failed error ([#797](https://github.com/taskforcesh/bullmq/issues/797)) ([5d2f553](https://github.com/taskforcesh/bullmq/commit/5d2f55342b19ee99d34f8d8003f09359cfe17d4f)) ([`daaa73e`](https://github.com/taskforcesh/bullmq/commit/daaa73e2016948e715f11e67fac1bf261dadb33a)) - -### Documentation - -* docs(change-delay): add param in docs (#792) ([`58a803f`](https://github.com/taskforcesh/bullmq/commit/58a803ff2e6a1815b4000dc16584663e33dace09)) - -* docs(readme): add semantic-release badge (#795) ([`2f1b141`](https://github.com/taskforcesh/bullmq/commit/2f1b14197786282292ce5150c008a61a7f44f19e)) - -### Feature - -* feat(sandboxed-process): handle init-failed error (#797) ([`5d2f553`](https://github.com/taskforcesh/bullmq/commit/5d2f55342b19ee99d34f8d8003f09359cfe17d4f)) - -### Test - -* test(sandboxed-process): add test case where process.env is shared (#793) ([`479c425`](https://github.com/taskforcesh/bullmq/commit/479c425aeac01e218de661f6ba357d0ed2f116aa)) - - -## v1.48.3 (2021-10-05) - -### Chore - -* chore(release): 1.48.3 [skip ci] - -## [1.48.3](https://github.com/taskforcesh/bullmq/compare/v1.48.2...v1.48.3) (2021-10-05) - -### Bug Fixes - -* **change-delay:** add current time to delay ([#789](https://github.com/taskforcesh/bullmq/issues/789)) fixes [#787](https://github.com/taskforcesh/bullmq/issues/787) ([4a70def](https://github.com/taskforcesh/bullmq/commit/4a70def6e85cf9ea384ec5f38c3c4f83e4eb523c)) ([`4e09a2a`](https://github.com/taskforcesh/bullmq/commit/4e09a2a97bb9eab6c5c3db1294aa1aa4fd3730b0)) - -* chore(@microsoft/api-extractor): upgrade to 7.18.9 ([`366a113`](https://github.com/taskforcesh/bullmq/commit/366a113507e22d696b9822868889881195c05fb1)) - -* chore(@microsoft/api-documenter): upgrade to 7.13.50 ([`5581642`](https://github.com/taskforcesh/bullmq/commit/5581642ddcc33bfd0581c13e6f7cff0142076ff7)) - -* chore(coveralls): upgrade to 3.1.1 ([`812da7e`](https://github.com/taskforcesh/bullmq/commit/812da7e832644e3abf60726be00df43302bd2d87)) - -* chore(copyfiles): upgrade to 2.4.1 ([`d8510a1`](https://github.com/taskforcesh/bullmq/commit/d8510a19159062d10c482938eaf3f5187c123887)) - -* chore(semantic-release): upgrade to 17.4.7 (#778) ([`477bdae`](https://github.com/taskforcesh/bullmq/commit/477bdae9d037a92f9d94457c9476b2b3aba6c671)) - -* chore(@semantic-release/git): upgrade to 9.0.1 ([`f57fea0`](https://github.com/taskforcesh/bullmq/commit/f57fea0750a3421a14bd056ba511eac5b6475ad1)) - -* chore(sinon): upgrade to 7.5.0 ([`cb60a5f`](https://github.com/taskforcesh/bullmq/commit/cb60a5f1b62116f056c9a16836a5f05d68bb39ee)) - -* chore(pretty-quick): upgrade to 3.1.1 ([`b711907`](https://github.com/taskforcesh/bullmq/commit/b711907d682e2de4219f35bc3c05c90d545d18b3)) - -* chore(prettier): upgrade to 2.4.1 ([`3d603b7`](https://github.com/taskforcesh/bullmq/commit/3d603b778697cb71b2dbe690574598acb524de5b)) - -* chore(@semantic-release/release-notes-generator): upgrade to 9.0.3 ([`3c01ad4`](https://github.com/taskforcesh/bullmq/commit/3c01ad4fd66231987d6a6be3a73c4c61052bf84a)) - -* chore(@types/chai): upgrade to 4.2.22 ([`982aa08`](https://github.com/taskforcesh/bullmq/commit/982aa0854aaedde685309fb15e9d495e9fbaa000)) - -* chore(@types/chai-as-promised): upgrade to 7.1.4 ([`4e8fef3`](https://github.com/taskforcesh/bullmq/commit/4e8fef35e1bddcf55e51b27705d60c9e9ad55d0c)) - -* chore(@commitlint/config-conventional): upgrade to 8.3.4 ([`c754bc4`](https://github.com/taskforcesh/bullmq/commit/c754bc4d591bcc7377c5c1e0f2aa467f6261e8bc)) - -* chore(@commitlint/cli): upgrade to 8.3.5 ([`969cc58`](https://github.com/taskforcesh/bullmq/commit/969cc581aea069ba881a4a2cd3f97472a5c95990)) - -* chore(@types/lodash): upgrade to 4.14.173 ([`753417a`](https://github.com/taskforcesh/bullmq/commit/753417aee792f59da8cf7c92c9fa3309770144ea)) - -* chore(eslint-plugin-mocha): upgrade to 8.2.0 ([`0e7dc9a`](https://github.com/taskforcesh/bullmq/commit/0e7dc9a3eaaf248abfee425672b939d83ba79774)) - -* chore(husky): upgrade to 3.1.0 ([`c89de04`](https://github.com/taskforcesh/bullmq/commit/c89de0453c78b470d3c1495391185386cec4ae51)) - -* chore(mocha): upgrade to 6.2.3 ([`c489734`](https://github.com/taskforcesh/bullmq/commit/c4897344f7ef802587ce1847833af37566ffe4ea)) - -* chore(ts-mocha): upgrade to 8.0.0 ([`a4d8f7f`](https://github.com/taskforcesh/bullmq/commit/a4d8f7f5e06e7a0d0d1cf1e5d27864a661df139c)) - -* chore(ts-node): upgrade to 8.10.2 ([`32909ba`](https://github.com/taskforcesh/bullmq/commit/32909babd11eda160158aed900282bbb4c504ea8)) - -* chore(typescript): upgrade to 3.9.10 ([`9a5e860`](https://github.com/taskforcesh/bullmq/commit/9a5e8602a37a4ab05199a1d32635853a9a717390)) - -* chore(@types/mocha): upgrade to 5.2.7 ([`c6de08e`](https://github.com/taskforcesh/bullmq/commit/c6de08efd148c91d313c50ebc1b98f100c965008)) - -* chore(@types/node): upgrade to 12.20.25 ([`04a6cee`](https://github.com/taskforcesh/bullmq/commit/04a6cee6ec81a083259919a5db091b2360da3a10)) - -* chore(@types/semver): upgrade to 6.2.3 ([`6d46d9c`](https://github.com/taskforcesh/bullmq/commit/6d46d9cfdf054a5b358ac42c8cd3e587cd13f6d0)) - -* chore(@types/sinon): upgrade to 7.5.2 ([`2bfe5df`](https://github.com/taskforcesh/bullmq/commit/2bfe5df7b4c841c3daec8beab405a05a6a8d0391)) - -* chore(@types/uuid): upgrade to 3.4.10 ([`71727bd`](https://github.com/taskforcesh/bullmq/commit/71727bd6610e991ec715adc769568dd15fde8ae1)) - -* chore(tslib): upgrade to 1.14.1 ([`b4d87b5`](https://github.com/taskforcesh/bullmq/commit/b4d87b5bf94d67bef1edfcdd0bfdf677fc4e0c39)) - -* chore(ioredis): upgrade to 4.27.9 ([`1d95209`](https://github.com/taskforcesh/bullmq/commit/1d95209671ac0b7d4fd1cc60927580f900a68556)) - -* chore(get-port): upgrade to 5.1.1 ([`3bb79d0`](https://github.com/taskforcesh/bullmq/commit/3bb79d038fb9f3fabec62ef3fa72bdf3a704ae39)) - -* chore(cron-parser): upgrade to 2.18.0 ([`1ab8716`](https://github.com/taskforcesh/bullmq/commit/1ab8716f8833c2a1b730d530f06e96330b1e0ec1)) - -### Documentation - -* docs(events): update completed and failed events docs (#785) ([`3712537`](https://github.com/taskforcesh/bullmq/commit/371253744ec89f8edcc868ee9236681deab62dbf)) - -* docs: correct bird's name & comparative adjective for repeatable frequency ([`cb4292c`](https://github.com/taskforcesh/bullmq/commit/cb4292ca13af145140eedb5960ccbff87644953f)) - -* docs(autorun): add documentation (#769) ref #263 ([`b016344`](https://github.com/taskforcesh/bullmq/commit/b016344caedc8915052cea43948901f3b77b6ece)) - -### Fix - -* fix(change-delay): add current time to delay (#789) fixes #787 ([`4a70def`](https://github.com/taskforcesh/bullmq/commit/4a70def6e85cf9ea384ec5f38c3c4f83e4eb523c)) - -### Refactor - -* refactor(reprocess-job): change error messages (#768) ([`5cbd3b6`](https://github.com/taskforcesh/bullmq/commit/5cbd3b6aea64fb1eeee6a8d5c51797eb02b63d73)) - -### Style - -* style: remove unused variables (#771) ([`044250b`](https://github.com/taskforcesh/bullmq/commit/044250b370565cfbcd6f9628e3c4e289dd5937e9)) - - -## v1.48.2 (2021-09-24) - -### Chore - -* chore(release): 1.48.2 [skip ci] - -## [1.48.2](https://github.com/taskforcesh/bullmq/compare/v1.48.1...v1.48.2) (2021-09-24) - -### Performance Improvements - -* **obliterate:** do not pass unused variables ([#766](https://github.com/taskforcesh/bullmq/issues/766)) ([e9abfa6](https://github.com/taskforcesh/bullmq/commit/e9abfa6f821064901770a9b72adfb00cac96154c)) ([`1b5317a`](https://github.com/taskforcesh/bullmq/commit/1b5317a5f5488fefe367550c518e5c2584ced300)) - -### Performance - -* perf(obliterate): do not pass unused variables (#766) ([`e9abfa6`](https://github.com/taskforcesh/bullmq/commit/e9abfa6f821064901770a9b72adfb00cac96154c)) - - -## v1.48.1 (2021-09-23) - -### Chore - -* chore(release): 1.48.1 [skip ci] - -## [1.48.1](https://github.com/taskforcesh/bullmq/compare/v1.48.0...v1.48.1) (2021-09-23) - -### Bug Fixes - -* **obliterate:** consider dependencies and processed keys ([#765](https://github.com/taskforcesh/bullmq/issues/765)) ([fd6bad8](https://github.com/taskforcesh/bullmq/commit/fd6bad8c7444c21e6f1d67611a28f8e4aace293d)) ([`1fbb80d`](https://github.com/taskforcesh/bullmq/commit/1fbb80ded6dd22b755757b4699667351eda0b106)) - -### Fix - -* fix(obliterate): consider dependencies and processed keys (#765) ([`fd6bad8`](https://github.com/taskforcesh/bullmq/commit/fd6bad8c7444c21e6f1d67611a28f8e4aace293d)) - - -## v1.48.0 (2021-09-23) - -### Chore - -* chore(release): 1.48.0 [skip ci] - -# [1.48.0](https://github.com/taskforcesh/bullmq/compare/v1.47.2...v1.48.0) (2021-09-23) - -### Features - -* **queue:** add drain lua script ([#764](https://github.com/taskforcesh/bullmq/issues/764)) ([2daa698](https://github.com/taskforcesh/bullmq/commit/2daa698a7cc5dc8a6cd087b2d29356bc02fb4944)) ([`4c91ad5`](https://github.com/taskforcesh/bullmq/commit/4c91ad549830ccf10d0dc599aabbeaf3466fdb26)) - -### Feature - -* feat(queue): add drain lua script (#764) ([`2daa698`](https://github.com/taskforcesh/bullmq/commit/2daa698a7cc5dc8a6cd087b2d29356bc02fb4944)) - - -## v1.47.2 (2021-09-22) - -### Chore - -* chore(release): 1.47.2 [skip ci] - -## [1.47.2](https://github.com/taskforcesh/bullmq/compare/v1.47.1...v1.47.2) (2021-09-22) - -### Bug Fixes - -* **flow-producer:** use default prefix in add method ([#763](https://github.com/taskforcesh/bullmq/issues/763)) fixes [#762](https://github.com/taskforcesh/bullmq/issues/762) ([fffdb55](https://github.com/taskforcesh/bullmq/commit/fffdb55f37917776494a4471673ef4564e0faab5)) ([`375f7c1`](https://github.com/taskforcesh/bullmq/commit/375f7c18432b36802bc521bfa78855278a834963)) - -* chore(deps): bump semver-regex from 3.1.2 to 3.1.3 (#761) ([`4586cda`](https://github.com/taskforcesh/bullmq/commit/4586cdab0ca52f28e12449ff6f82f7c6124a2c12)) - -### Documentation - -* docs(feature-comparison): fix parent-child checks (#759) ([`b2c6bcc`](https://github.com/taskforcesh/bullmq/commit/b2c6bccfabc265c3ed2beb1d677933c67177e90f)) - -* docs(readme): add feature comparison (#758) ([`60b608d`](https://github.com/taskforcesh/bullmq/commit/60b608db589da0fa82f8edce388525c3d4bca9a8)) - -### Fix - -* fix(flow-producer): use default prefix in add method (#763) fixes #762 ([`fffdb55`](https://github.com/taskforcesh/bullmq/commit/fffdb55f37917776494a4471673ef4564e0faab5)) - -### Test - -* test(compat): fix flaky test when global drained event is emitted (#760) ([`fb25aee`](https://github.com/taskforcesh/bullmq/commit/fb25aee5c17a139d54b7b99549a853d422d6a078)) - - -## v1.47.1 (2021-09-17) - -### Chore - -* chore(release): 1.47.1 [skip ci] - -## [1.47.1](https://github.com/taskforcesh/bullmq/compare/v1.47.0...v1.47.1) (2021-09-17) - -### Bug Fixes - -* **running:** move running attribute before first async call ([#756](https://github.com/taskforcesh/bullmq/issues/756)) ([f7f0660](https://github.com/taskforcesh/bullmq/commit/f7f066076bbe6cbcbf716ae622d55c6c1ae9b270)) ([`9c2dfab`](https://github.com/taskforcesh/bullmq/commit/9c2dfab132eb3366af69a5c2f1585d4b7150eadb)) - -### Documentation - -* docs(prioritized): rename file (#757) ([`31ba505`](https://github.com/taskforcesh/bullmq/commit/31ba5055983c085019f96c8223fbffe22b88df1c)) - -### Fix - -* fix(running): move running attribute before first async call (#756) ([`f7f0660`](https://github.com/taskforcesh/bullmq/commit/f7f066076bbe6cbcbf716ae622d55c6c1ae9b270)) - - -## v1.47.0 (2021-09-16) - -### Chore - -* chore(release): 1.47.0 [skip ci] - -# [1.47.0](https://github.com/taskforcesh/bullmq/compare/v1.46.7...v1.47.0) (2021-09-16) - -### Features - -* **queue-events:** launch without launching process ([#750](https://github.com/taskforcesh/bullmq/issues/750)) ([23a2360](https://github.com/taskforcesh/bullmq/commit/23a23606e727ca13b24924a1e867c6b557d6a09d)) ([`7600f1b`](https://github.com/taskforcesh/bullmq/commit/7600f1b4f9c78e0933ab25f6d285381443c07c91)) - -### Feature - -* feat(queue-events): launch without launching process (#750) ([`23a2360`](https://github.com/taskforcesh/bullmq/commit/23a23606e727ca13b24924a1e867c6b557d6a09d)) - - -## v1.46.7 (2021-09-16) - -### Chore - -* chore(release): 1.46.7 [skip ci] - -## [1.46.7](https://github.com/taskforcesh/bullmq/compare/v1.46.6...v1.46.7) (2021-09-16) - -### Bug Fixes - -* **wait-for-job:** add catch block and emit error ([#749](https://github.com/taskforcesh/bullmq/issues/749)) ([b407f9a](https://github.com/taskforcesh/bullmq/commit/b407f9ac429c825984856eebca58bbfd16feb9d3)) ([`e1cd8bb`](https://github.com/taskforcesh/bullmq/commit/e1cd8bb2b69cb3efff9e6f379462bbefe4e0cf1d)) - -### Documentation - -* docs(retry): increase awareness of needing QueueScheduler instance (#747) ([`99f2efb`](https://github.com/taskforcesh/bullmq/commit/99f2efbca906cb0de4b7673a2886e02423c084c6)) - -### Fix - -* fix(wait-for-job): add catch block and emit error (#749) ([`b407f9a`](https://github.com/taskforcesh/bullmq/commit/b407f9ac429c825984856eebca58bbfd16feb9d3)) - -### Refactor - -* refactor(utils): add handleError (#752) ([`e07afb3`](https://github.com/taskforcesh/bullmq/commit/e07afb3f3873e5d517b4db8737b5af2a9a7f22ad)) - - -## v1.46.6 (2021-09-15) - -### Chore - -* chore(release): 1.46.6 [skip ci] - -## [1.46.6](https://github.com/taskforcesh/bullmq/compare/v1.46.5...v1.46.6) (2021-09-15) - -### Bug Fixes - -* **connection:** fail only if redis connection does not recover ([#751](https://github.com/taskforcesh/bullmq/issues/751)) ([8d59ced](https://github.com/taskforcesh/bullmq/commit/8d59ced27831a636f40ed4233eba3d4ac0654534)) ([`8dc5463`](https://github.com/taskforcesh/bullmq/commit/8dc54632c55db21231a359f53c43bd89d8db18f3)) - -### Fix - -* fix(connection): fail only if redis connection does not recover (#751) ([`8d59ced`](https://github.com/taskforcesh/bullmq/commit/8d59ced27831a636f40ed4233eba3d4ac0654534)) - - -## v1.46.5 (2021-09-12) - -### Chore - -* chore(release): 1.46.5 [skip ci] - -## [1.46.5](https://github.com/taskforcesh/bullmq/compare/v1.46.4...v1.46.5) (2021-09-12) - -### Bug Fixes - -* **is-finished:** reject when missing job key ([#746](https://github.com/taskforcesh/bullmq/issues/746)) fixes [#85](https://github.com/taskforcesh/bullmq/issues/85) ([bd49bd2](https://github.com/taskforcesh/bullmq/commit/bd49bd20492676559072e5e16adb6d4e47afb22b)) ([`4b80319`](https://github.com/taskforcesh/bullmq/commit/4b8031963b745334e53e492ae9b028173bb3d0be)) - -### Fix - -* fix(is-finished): reject when missing job key (#746) fixes #85 ([`bd49bd2`](https://github.com/taskforcesh/bullmq/commit/bd49bd20492676559072e5e16adb6d4e47afb22b)) - - -## v1.46.4 (2021-09-10) - -### Chore - -* chore(release): 1.46.4 [skip ci] - -## [1.46.4](https://github.com/taskforcesh/bullmq/compare/v1.46.3...v1.46.4) (2021-09-10) - -### Bug Fixes - -* **wait-until-finished:** isFinished return failedReason or returnValue ([#743](https://github.com/taskforcesh/bullmq/issues/743)) fixes [#555](https://github.com/taskforcesh/bullmq/issues/555) ([63acae9](https://github.com/taskforcesh/bullmq/commit/63acae98cb083ec978ea17833819d1a21086be33)) ([`1c92551`](https://github.com/taskforcesh/bullmq/commit/1c92551fb6d7dcbca2d12fb8576cd8988cdccb55)) - -### Fix - -* fix(wait-until-finished): isFinished return failedReason or returnValue (#743) fixes #555 ([`63acae9`](https://github.com/taskforcesh/bullmq/commit/63acae98cb083ec978ea17833819d1a21086be33)) - - -## v1.46.3 (2021-09-08) - -### Chore - -* chore(release): 1.46.3 [skip ci] - -## [1.46.3](https://github.com/taskforcesh/bullmq/compare/v1.46.2...v1.46.3) (2021-09-08) - -### Bug Fixes - -* **add-job:** throw error when missing parent key ([#739](https://github.com/taskforcesh/bullmq/issues/739)) ([d751070](https://github.com/taskforcesh/bullmq/commit/d751070f4ab6553c782341270574ccd253d309b8)) ([`1fab5c2`](https://github.com/taskforcesh/bullmq/commit/1fab5c28c6eace6505b271bb00133f8c59be08ce)) - -### Fix - -* fix(add-job): throw error when missing parent key (#739) ([`d751070`](https://github.com/taskforcesh/bullmq/commit/d751070f4ab6553c782341270574ccd253d309b8)) - -### Test - -* test: cover more lines for coverage (#741) ([`8383b14`](https://github.com/taskforcesh/bullmq/commit/8383b14c6185fb498a110bf61079bdb630345f6d)) - -* test(nyc): watch src files only (#740) ([`d439631`](https://github.com/taskforcesh/bullmq/commit/d4396318bddac6521cbafed8d7cc87671c92827d)) - - -## v1.46.2 (2021-09-07) - -### Chore - -* chore(release): 1.46.2 [skip ci] - -## [1.46.2](https://github.com/taskforcesh/bullmq/compare/v1.46.1...v1.46.2) (2021-09-07) - -### Bug Fixes - -* **queue-events:** duplicate connection ([#733](https://github.com/taskforcesh/bullmq/issues/733)) fixes [#726](https://github.com/taskforcesh/bullmq/issues/726) ([e2531ed](https://github.com/taskforcesh/bullmq/commit/e2531ed0c1dc195f210f8cf996e9ffe04c9e4b7d)) ([`8a677ef`](https://github.com/taskforcesh/bullmq/commit/8a677ef958950ca392d97fa4904ea37023605eab)) - -### Fix - -* fix(queue-events): duplicate connection (#733) fixes #726 ([`e2531ed`](https://github.com/taskforcesh/bullmq/commit/e2531ed0c1dc195f210f8cf996e9ffe04c9e4b7d)) - -### Test - -* test: improve some types (#736) ([`ce0646c`](https://github.com/taskforcesh/bullmq/commit/ce0646c578e58003959c2a2a4b2f98d88bed3ebf)) - - -## v1.46.1 (2021-09-06) - -### Chore - -* chore(release): 1.46.1 [skip ci] - -## [1.46.1](https://github.com/taskforcesh/bullmq/compare/v1.46.0...v1.46.1) (2021-09-06) - -### Bug Fixes - -* **redis-connection:** improve closing fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([9d8eb03](https://github.com/taskforcesh/bullmq/commit/9d8eb0306ef5e63c9d34ffd5c96fc15491da639d)) ([`ef9bcc3`](https://github.com/taskforcesh/bullmq/commit/ef9bcc3c80dc3c8705b63d9457397b368d5c611b)) - -### Fix - -* fix(redis-connection): improve closing fixes #721 ([`9d8eb03`](https://github.com/taskforcesh/bullmq/commit/9d8eb0306ef5e63c9d34ffd5c96fc15491da639d)) - -### Test - -* test(flow-producer): add test case using priority option (#735) ([`88c374a`](https://github.com/taskforcesh/bullmq/commit/88c374a10f6eb5cba7d7aa215a3397491f8be697)) - - -## v1.46.0 (2021-09-02) - -### Chore - -* chore(release): 1.46.0 [skip ci] - -# [1.46.0](https://github.com/taskforcesh/bullmq/compare/v1.45.0...v1.46.0) (2021-09-02) - -### Features - -* **worker:** launch without launching process ([#724](https://github.com/taskforcesh/bullmq/issues/724)) ([af689e4](https://github.com/taskforcesh/bullmq/commit/af689e4e3945b9bc68bfc08c8f0ad57644206c5b)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) ([`543cae0`](https://github.com/taskforcesh/bullmq/commit/543cae02b5a98a166a942f1f977e02aa0b75058e)) - -### Feature - -* feat(worker): launch without launching process (#724) - -re #436 ([`af689e4`](https://github.com/taskforcesh/bullmq/commit/af689e4e3945b9bc68bfc08c8f0ad57644206c5b)) - - -## v1.45.0 (2021-09-02) - -### Chore - -* chore(release): 1.45.0 [skip ci] - -# [1.45.0](https://github.com/taskforcesh/bullmq/compare/v1.44.3...v1.45.0) (2021-09-02) - -### Features - -* **queue-scheduler:** launch without launching process ([#729](https://github.com/taskforcesh/bullmq/issues/729)) ([f1932a7](https://github.com/taskforcesh/bullmq/commit/f1932a789af13da9b705a72d6f633f984a218862)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) ([`f13757c`](https://github.com/taskforcesh/bullmq/commit/f13757ca06daa52402371fb2a458a990503c0bff)) - -### Documentation - -* docs(changelog): fix format (#732) ([`45aaa39`](https://github.com/taskforcesh/bullmq/commit/45aaa39241be269fcd68fd59632f47b0b072e80b)) - -### Feature - -* feat(queue-scheduler): launch without launching process (#729) - -re #436 ([`f1932a7`](https://github.com/taskforcesh/bullmq/commit/f1932a789af13da9b705a72d6f633f984a218862)) - - -## v1.44.3 (2021-09-02) - -### Chore - -* chore(release): 1.44.3 [skip ci] - -## [1.44.3](https://github.com/taskforcesh/bullmq/compare/v1.44.2...v1.44.3) (2021-09-02) - -### Bug Fixes - -* **queuescheduler:** handle shared connections fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([32a2b2e](https://github.com/taskforcesh/bullmq/commit/32a2b2eccfa3ba1516eacd71e334cae6c787ce4c)) ([`4b551fa`](https://github.com/taskforcesh/bullmq/commit/4b551faaa5b02c572e4f6d36c5d2c2b8c79ff954)) - -* chore(deps): bump tar from 6.1.3 to 6.1.11 (#728) ([`e4c37fe`](https://github.com/taskforcesh/bullmq/commit/e4c37fec13e85ea69cd2051ed56f03942e4e10e8)) - -* chore(deps): bump path-parse from 1.0.6 to 1.0.7 (#680) ([`a1845fc`](https://github.com/taskforcesh/bullmq/commit/a1845fcc393ef607401ff72a98916e571c5e33df)) - -### Fix - -* fix(queuescheduler): handle shared connections fixes #721 ([`32a2b2e`](https://github.com/taskforcesh/bullmq/commit/32a2b2eccfa3ba1516eacd71e334cae6c787ce4c)) - -### Refactor - -* refactor(error-codes): add error-codes enum (#716) ([`3070102`](https://github.com/taskforcesh/bullmq/commit/30701023b05d8cd11a1c40dc4098dee882c341d6)) - -### Test - -* test: close instances (#730) ([`f5ff4a7`](https://github.com/taskforcesh/bullmq/commit/f5ff4a756f438676471f06878bcc9c12bf33ba02)) - -* test: add missing close calls(#725) ([`df27ae9`](https://github.com/taskforcesh/bullmq/commit/df27ae9d11630c4e817c098e5bff70cffcdf5b67)) - -* test(repeat): restore test (#723) ([`ceaa7de`](https://github.com/taskforcesh/bullmq/commit/ceaa7dece47bbef99c6e289bbfed41860991b4c9)) - - -## v1.44.2 (2021-08-29) - -### Chore - -* chore(release): 1.44.2 [skip ci] - -## [1.44.2](https://github.com/taskforcesh/bullmq/compare/v1.44.1...v1.44.2) (2021-08-29) - -### Bug Fixes - -* **worker:** use spread operator in processing map keys ([#720](https://github.com/taskforcesh/bullmq/issues/720)) ([32f1e57](https://github.com/taskforcesh/bullmq/commit/32f1e570a9a3369174a228f729f1d1330dcb6965)) ([`c27b97f`](https://github.com/taskforcesh/bullmq/commit/c27b97f5200481b70a6c05131d2fc34db2425d45)) - -### Fix - -* fix(worker): use spread operator in processing map keys (#720) ([`32f1e57`](https://github.com/taskforcesh/bullmq/commit/32f1e570a9a3369174a228f729f1d1330dcb6965)) - -### Test - -* test(repeat): restore skipped test case (#719) ([`d8b1063`](https://github.com/taskforcesh/bullmq/commit/d8b106350ed51a0bb36bb568557a16132aa9e841)) - -* test: use rejectedWith (#718) ([`3c170f3`](https://github.com/taskforcesh/bullmq/commit/3c170f3cc46ba33ea27c9c308929314d19c4fa9d)) - - -## v1.44.1 (2021-08-29) - -### Chore - -* chore(release): 1.44.1 [skip ci] - -## [1.44.1](https://github.com/taskforcesh/bullmq/compare/v1.44.0...v1.44.1) (2021-08-29) - -### Bug Fixes - -* **retry:** throw error when retry non failed job ([#717](https://github.com/taskforcesh/bullmq/issues/717)) ([bb9b192](https://github.com/taskforcesh/bullmq/commit/bb9b192e9a1a4f3c25374fcb8c0fb2159eb3f779)) ([`2a8c476`](https://github.com/taskforcesh/bullmq/commit/2a8c4766c674dd132f7592cc9b0b4213b9f33611)) - -* chore(deps): bump normalize-url from 6.0.0 to 6.0.1 (#587) ([`1e7cef3`](https://github.com/taskforcesh/bullmq/commit/1e7cef36c5ae7d93c86b49e0aa9484dfc470247a)) - -* chore(deps): upgrade dependencies (#713) ([`ae5cafd`](https://github.com/taskforcesh/bullmq/commit/ae5cafd987d1d494944c850c6317db46292f5a05)) - -### Documentation - -* docs(prioritized): fix typo (#715) ([`919994c`](https://github.com/taskforcesh/bullmq/commit/919994cd4d200e83d77950ca94a44303e634a81a)) - -### Fix - -* fix(retry): throw error when retry non failed job (#717) ([`bb9b192`](https://github.com/taskforcesh/bullmq/commit/bb9b192e9a1a4f3c25374fcb8c0fb2159eb3f779)) - -### Test - -* test: clean redis db after finishing test cases (#714) ([`54f2f2c`](https://github.com/taskforcesh/bullmq/commit/54f2f2c8517ae5484cbcbb472a6ab9ad9ffa4d61)) - - -## v1.44.0 (2021-08-27) - -### Chore - -* chore(release): 1.44.0 [skip ci] - -# [1.44.0](https://github.com/taskforcesh/bullmq/compare/v1.43.0...v1.44.0) (2021-08-27) - -### Features - -* **queue-events:** add waiting-children event ([#704](https://github.com/taskforcesh/bullmq/issues/704)) ([18b0b79](https://github.com/taskforcesh/bullmq/commit/18b0b7954313274a61fcc058380bfb9d682c059d)) ([`a41952f`](https://github.com/taskforcesh/bullmq/commit/a41952fa8a17441275dd4bf1c675e8a81b4f54a0)) - -### Documentation - -* docs(changelog): fix format (#712) ([`a1c8e00`](https://github.com/taskforcesh/bullmq/commit/a1c8e001431dc516ab74c1c8b054f15dd77634fc)) - -* docs(queue-events): update progress event typing (#618) ([`8c2f253`](https://github.com/taskforcesh/bullmq/commit/8c2f25382c3673a280210eca487517128279b950)) - -### Feature - -* feat(queue-events): add waiting-children event (#704) ([`18b0b79`](https://github.com/taskforcesh/bullmq/commit/18b0b7954313274a61fcc058380bfb9d682c059d)) - -### Style - -* style(tsdoc): add eslint-plugin-tsdoc ([`25bca3c`](https://github.com/taskforcesh/bullmq/commit/25bca3c6dda8c17ef7172ad1045a4f4de18ce7ab)) - -### Test - -* test(queue-events): add test case when progress receive object ([`c18563f`](https://github.com/taskforcesh/bullmq/commit/c18563f8b670347f0b890f190ab74cabd7dd78cc)) - -* test(repeat): add test when removeOnComplete is true - -re #515 ([`265ff3f`](https://github.com/taskforcesh/bullmq/commit/265ff3fbc5811f2911a1ebafae1825869f9e9283)) - -### Unknown - -* GitBook: [master] one page modified ([`031a3ff`](https://github.com/taskforcesh/bullmq/commit/031a3ff0a4a709733320b6eddd3e26cc2c4c18bc)) - -* GitBook: [master] 3 pages modified ([`074e7a7`](https://github.com/taskforcesh/bullmq/commit/074e7a7ab7c58a994293e73c6faaf2c37d21efc9)) - - -## v1.43.0 (2021-08-25) - -### Chore - -* chore(release): 1.43.0 [skip ci] - -# [1.43.0](https://github.com/taskforcesh/bullmq/compare/v1.42.1...v1.43.0) (2021-08-25) - -### Features - -* **events:** add added event when job is created ([#699](https://github.com/taskforcesh/bullmq/issues/699)) ([f533cc5](https://github.com/taskforcesh/bullmq/commit/f533cc55a43cf6ea78a60e85102f15b1c1ff69a0)) ([`dd7efc3`](https://github.com/taskforcesh/bullmq/commit/dd7efc3390e4a9a90f1b3ee0c3e3c74deb1f0369)) - -* chore: delete comment ([`7df0461`](https://github.com/taskforcesh/bullmq/commit/7df0461b8de3e761b51321ca6de29a26b19e13d2)) - -### Documentation - -* docs(queue): improved queue docs ([`8cdd116`](https://github.com/taskforcesh/bullmq/commit/8cdd1162fdae8c94dead9f2abfbbfb2cf79d416f)) - -* docs(queue-events): improved queue-events docs ([`bca894a`](https://github.com/taskforcesh/bullmq/commit/bca894acdda6c58a0ba0b00ec4ad97fc7c24de1f)) - -### Feature - -* feat(events): add added event when job is created (#699) ([`f533cc5`](https://github.com/taskforcesh/bullmq/commit/f533cc55a43cf6ea78a60e85102f15b1c1ff69a0)) - -### Test - -* test(mocha): add setup file ([`1324848`](https://github.com/taskforcesh/bullmq/commit/1324848afbfaf7d3fed47ea23da3b519da222b9a)) - - -## v1.42.1 (2021-08-23) - -### Chore - -* chore(release): 1.42.1 [skip ci] - -## [1.42.1](https://github.com/taskforcesh/bullmq/compare/v1.42.0...v1.42.1) (2021-08-23) - -### Bug Fixes - -* protect emit calls with throw/catch ([79f879b](https://github.com/taskforcesh/bullmq/commit/79f879bf1bca1acea19485def361cc36f1d13b7e)) ([`55606f7`](https://github.com/taskforcesh/bullmq/commit/55606f79cc6accf07d45fe2c4ffa81817108d7bc)) - -* chore: use spread operator on error emit ([`d911a49`](https://github.com/taskforcesh/bullmq/commit/d911a49f8d160a9ada926aafe101b13a4f61b2b4)) - -* chore: throw error if missing lua files ([`0ef1671`](https://github.com/taskforcesh/bullmq/commit/0ef16719d02cacdb2bf6834f7cdd9f901bb568c2)) - -### Documentation - -* docs(flow-producer): add NodeOpts documentation ([`b2bcac6`](https://github.com/taskforcesh/bullmq/commit/b2bcac6a49f1e480c0055025a09aecdcff1923df)) - -* docs(job): apply jsdoc ([`43e0764`](https://github.com/taskforcesh/bullmq/commit/43e076468c6abb2149361344bef8b2b345f3b471)) - -### Fix - -* fix: protect emit calls with throw/catch ([`79f879b`](https://github.com/taskforcesh/bullmq/commit/79f879bf1bca1acea19485def361cc36f1d13b7e)) - -### Test - -* test(events): error event when throwing an error from another event ([`1b59884`](https://github.com/taskforcesh/bullmq/commit/1b598847f8f65dacff6c6cf7239a01eb6253a6b2)) - - -## v1.42.0 (2021-08-20) - -### Chore - -* chore(release): 1.42.0 [skip ci] - -# [1.42.0](https://github.com/taskforcesh/bullmq/compare/v1.41.0...v1.42.0) (2021-08-20) - -### Features - -* **flows:** add queuesOptions for rate limit ([#692](https://github.com/taskforcesh/bullmq/issues/692)) ([6689ec3](https://github.com/taskforcesh/bullmq/commit/6689ec3fadd21904d9935f932c047f540ed8caf0)), closes [#621](https://github.com/taskforcesh/bullmq/issues/621) ([`f1472da`](https://github.com/taskforcesh/bullmq/commit/f1472dab64c04a7db694a4af3d78f45a96d8922f)) - -### Feature - -* feat(flows): add queuesOptions for rate limit (#692) - -re #621 ([`6689ec3`](https://github.com/taskforcesh/bullmq/commit/6689ec3fadd21904d9935f932c047f540ed8caf0)) - - -## v1.41.0 (2021-08-20) - -### Chore - -* chore(release): 1.41.0 [skip ci] - -# [1.41.0](https://github.com/taskforcesh/bullmq/compare/v1.40.4...v1.41.0) (2021-08-20) - -### Features - -* **flow:** add bulk ([dc59fe6](https://github.com/taskforcesh/bullmq/commit/dc59fe62e57b6e761fe4d2ab6179a69dc4792399)) ([`874b1a4`](https://github.com/taskforcesh/bullmq/commit/874b1a48d1480ee19e57c362f978e13e9f34b1bd)) - -* chore: delete comment ([`1f6e77e`](https://github.com/taskforcesh/bullmq/commit/1f6e77e4e9c26cfa4f007fa79a3c59fce1e9bbaa)) - -* chore(flow): remove unneeded updateIds (#684) ([`1b44359`](https://github.com/taskforcesh/bullmq/commit/1b44359ca298dc5195be7046bb5a5c939c91f3cd)) - -* chore(redis): add docker-compose to support windows development ([`39d42ae`](https://github.com/taskforcesh/bullmq/commit/39d42aefd0ab940006eda05805b9039244ee685a)) - -### Documentation - -* docs: fix typo in bullmq.ratelimiteroptions.md (#683) ([`0190699`](https://github.com/taskforcesh/bullmq/commit/0190699f482705e664b9697223fca6c9fb875484)) - -* docs(redis): add redis docker-compose instructions for development ([`bee6b75`](https://github.com/taskforcesh/bullmq/commit/bee6b75e982a9b0d3857623cb8e8e3e67662b02c)) - -### Feature - -* feat(flow): add bulk ([`dc59fe6`](https://github.com/taskforcesh/bullmq/commit/dc59fe62e57b6e761fe4d2ab6179a69dc4792399)) - -### Style - -* style(lint): exclude changelog ([`995f281`](https://github.com/taskforcesh/bullmq/commit/995f28138cb9b30dd4d5fee1236230c88aed59ab)) - -### Test - -* test(rate-limit): fix another flaky test ([`24f6a8b`](https://github.com/taskforcesh/bullmq/commit/24f6a8b91f26b571b6983c099f736a3a647909b1)) - -* test(rate-limit): fix flaky test ([`bb08318`](https://github.com/taskforcesh/bullmq/commit/bb08318fa39efc3ce384828e00a84e9725e2f4af)) - -### Unknown - -* GitBook: [master] one page modified ([`443de32`](https://github.com/taskforcesh/bullmq/commit/443de325afa0cfc35f4ae3e0b0fa718dbd18f13c)) - -* GitBook: [master] 4 pages modified ([`d441c5e`](https://github.com/taskforcesh/bullmq/commit/d441c5ec2169c606141f4d80fa2d9d13fe30fca5)) - -* GitBook: [master] 39 pages modified ([`0475e6d`](https://github.com/taskforcesh/bullmq/commit/0475e6d921916385a3e8335c9fcc80cc90796e04)) - - -## v1.40.4 (2021-08-06) - -### Chore - -* chore(release): 1.40.4 [skip ci] - -## [1.40.4](https://github.com/taskforcesh/bullmq/compare/v1.40.3...v1.40.4) (2021-08-06) - -### Bug Fixes - -* **rate-limiter:** check groupKey is not undefined ([999b918](https://github.com/taskforcesh/bullmq/commit/999b91868814caf4c5c1ddee40798178b71e0ea8)) ([`76dff91`](https://github.com/taskforcesh/bullmq/commit/76dff919c89b6eef13bd3109d5b84c89436f427a)) - -### Fix - -* fix(rate-limiter): check groupKey is not undefined ([`999b918`](https://github.com/taskforcesh/bullmq/commit/999b91868814caf4c5c1ddee40798178b71e0ea8)) - -### Test - -* test(rate-limiter): add test case when missing groupKey ([`1cf58d1`](https://github.com/taskforcesh/bullmq/commit/1cf58d188f48b76f531ccc7f96736a5ce6084d7f)) - - -## v1.40.3 (2021-08-06) - -### Chore - -* chore(release): 1.40.3 [skip ci] - -## [1.40.3](https://github.com/taskforcesh/bullmq/compare/v1.40.2...v1.40.3) (2021-08-06) - -### Bug Fixes - -* **redis-connection:** add error event in waitUntilReady ([ac4101e](https://github.com/taskforcesh/bullmq/commit/ac4101e3e798110c022d6c9f10f3b98f5e86b151)) ([`40f9d14`](https://github.com/taskforcesh/bullmq/commit/40f9d14f6ff6d64664748eb723d3a827bd2de337)) - -* chore(deps): bump tar from 6.1.0 to 6.1.3 - -Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.3. -- [Release notes](https://github.com/npm/node-tar/releases) -- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md) -- [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.3) - ---- -updated-dependencies: -- dependency-name: tar - dependency-type: indirect -... - -Signed-off-by: dependabot[bot] <support@github.com> ([`242ed66`](https://github.com/taskforcesh/bullmq/commit/242ed664fdbd3dab58a363d886b63a56bc024170)) - -### Fix - -* fix(redis-connection): add error event in waitUntilReady ([`ac4101e`](https://github.com/taskforcesh/bullmq/commit/ac4101e3e798110c022d6c9f10f3b98f5e86b151)) - -### Style - -* style: use string template ([`9872ce1`](https://github.com/taskforcesh/bullmq/commit/9872ce1c3a52bd9ff0325d9c929f5554ed260c96)) - - -## v1.40.2 (2021-08-06) - -### Chore - -* chore(release): 1.40.2 [skip ci] - -## [1.40.2](https://github.com/taskforcesh/bullmq/compare/v1.40.1...v1.40.2) (2021-08-06) - -### Bug Fixes - -* move clientCommandMessageReg to utils ([dd5d555](https://github.com/taskforcesh/bullmq/commit/dd5d5553fe768eb18b17b53c7f75e7066024e382)) ([`5a83df7`](https://github.com/taskforcesh/bullmq/commit/5a83df7fac77ee5dac4e97813f5feaaf0b3246b8)) - -### Documentation - -* docs(changelog): fix formatting ([`7a41a1c`](https://github.com/taskforcesh/bullmq/commit/7a41a1ced66dbcf3ac3c71f95d446214a51647ff)) - -### Fix - -* fix: move clientCommandMessageReg to utils ([`dd5d555`](https://github.com/taskforcesh/bullmq/commit/dd5d5553fe768eb18b17b53c7f75e7066024e382)) - -### Refactor - -* refactor: move getParentKey into utils ([`2c5baf0`](https://github.com/taskforcesh/bullmq/commit/2c5baf0cd2842ac37284fb387a78b9fe2942d2f4)) - - -## v1.40.1 (2021-07-24) - -### Chore - -* chore(release): 1.40.1 [skip ci] - -## [1.40.1](https://github.com/taskforcesh/bullmq/compare/v1.40.0...v1.40.1) (2021-07-24) - -### Bug Fixes - -* connection hangs with failed connection fixes [#656](https://github.com/taskforcesh/bullmq/issues/656) ([c465611](https://github.com/taskforcesh/bullmq/commit/c465611ed76afd2adfd0e05a8babd6e369f5c310)) ([`e2502ca`](https://github.com/taskforcesh/bullmq/commit/e2502ca390aff42d8580474376492b80a273bae3)) - -### Fix - -* fix: connection hangs with failed connection fixes #656 ([`c465611`](https://github.com/taskforcesh/bullmq/commit/c465611ed76afd2adfd0e05a8babd6e369f5c310)) - -### Refactor - -* refactor: import CONNECTION_CLOSED_ERROR_MSG from ioredis - -It's possible to import `CONNECTION_CLOSED_ERROR_MSG` from `ioredis`, but it isn't available on the main export and isn't defined in the library type declarations. ([`f217219`](https://github.com/taskforcesh/bullmq/commit/f217219bc3b37de375bf44511acdf94f85b31e32)) - - -## v1.40.0 (2021-07-22) - -### Chore - -* chore(release): 1.40.0 [skip ci] - -# [1.40.0](https://github.com/taskforcesh/bullmq/compare/v1.39.5...v1.40.0) (2021-07-22) - -### Features - -* **worker:** retry with delay errors in run loop ([409fe7f](https://github.com/taskforcesh/bullmq/commit/409fe7fc09b87b7916a3362a463bb9e0f17ecea8)) ([`a4984ee`](https://github.com/taskforcesh/bullmq/commit/a4984ee9b3afb5c999fcef6f60b07279e85770a6)) - -* chore: simplify retryIfFailed ([`3eff55b`](https://github.com/taskforcesh/bullmq/commit/3eff55b8e847db6134f7bbe5045922e59a27647a)) - -### Documentation - -* docs(worker): add more documentation to Worker methods ([`3dbe652`](https://github.com/taskforcesh/bullmq/commit/3dbe6526ad1314264f0dc722f0297c3aba38fc4e)) - -* docs: add missing changelog items ([`6e96c25`](https://github.com/taskforcesh/bullmq/commit/6e96c2566da0c9c2072aee5cbcc49b9c67907c2c)) - -* docs(changelog): change symbolic link ([`01ac146`](https://github.com/taskforcesh/bullmq/commit/01ac1462ef4cd7504b0c37e3366c8bc5c3070a2b)) - -* docs(changelog): fix config ([`a60a530`](https://github.com/taskforcesh/bullmq/commit/a60a530971cf3a810a3430ce8cd837e621ea5e47)) - -* docs: deleted uppercased CHANGELOG ([`6c7ec18`](https://github.com/taskforcesh/bullmq/commit/6c7ec18b562abb2e9646b21b05a722f2d849beb3)) - -### Feature - -* feat(worker): retry with delay errors in run loop ([`409fe7f`](https://github.com/taskforcesh/bullmq/commit/409fe7fc09b87b7916a3362a463bb9e0f17ecea8)) - - -## v1.39.5 (2021-07-21) - -### Chore - -* chore(release): 1.39.5 [skip ci] - -## [1.39.5](https://github.com/taskforcesh/bullmq/compare/v1.39.4...v1.39.5) (2021-07-21) - -### Bug Fixes - -* **move-to-finished:** remove stalled jobs when finishing ([3867126](https://github.com/taskforcesh/bullmq/commit/38671261ccc00ca7fefa677663e45a40a92df555)) ([`4000c34`](https://github.com/taskforcesh/bullmq/commit/4000c34716609ca60c324635c4850bbe5c363b90)) - -* chore: use string templates ([`01b9d45`](https://github.com/taskforcesh/bullmq/commit/01b9d45e6096c065e34415765375f81cf0d06fe6)) - -### Fix - -* fix(move-to-finished): remove stalled jobs when finishing ([`3867126`](https://github.com/taskforcesh/bullmq/commit/38671261ccc00ca7fefa677663e45a40a92df555)) - - -## v1.39.4 (2021-07-21) - -### Chore - -* chore(release): 1.39.4 [skip ci] - -## [1.39.4](https://github.com/taskforcesh/bullmq/compare/v1.39.3...v1.39.4) (2021-07-21) - -### Bug Fixes - -* **repeatable:** validate endDate when adding next repeatable job ([1324cbb](https://github.com/taskforcesh/bullmq/commit/1324cbb4effd55e98c29d95a21afca7cd045b46c)) ([`a6eefeb`](https://github.com/taskforcesh/bullmq/commit/a6eefebfb33aaa376e241c27ff242adb6a78e44b)) - -### Fix - -* fix(repeatable): validate endDate when adding next repeatable job ([`1324cbb`](https://github.com/taskforcesh/bullmq/commit/1324cbb4effd55e98c29d95a21afca7cd045b46c)) - - -## v1.39.3 (2021-07-16) - -### Chore - -* chore(release): 1.39.3 [skip ci] - -## [1.39.3](https://github.com/taskforcesh/bullmq/compare/v1.39.2...v1.39.3) (2021-07-16) - -### Bug Fixes - -* connect if redis client has status "wait" ([f711717](https://github.com/taskforcesh/bullmq/commit/f711717f56822aef43c9fd0440e30fad0876ba62)) ([`6774a2a`](https://github.com/taskforcesh/bullmq/commit/6774a2a6dd061055ef470229e43e896754e06c64)) - -### Fix - -* fix: connect if redis client has status "wait" - -Summary: When supplying your own IORedis instance and `lazyConnect` is true, the RedisConnection instance will not connect on its own because it does not check if it's `status` is "wait". While this may be intended behavior, there is no direct way to call `connect` on the duplicated Redis instance causing it to never connect and indefinitely wait until ready. ([`f711717`](https://github.com/taskforcesh/bullmq/commit/f711717f56822aef43c9fd0440e30fad0876ba62)) - - -## v1.39.2 (2021-07-15) - -### Chore - -* chore(release): 1.39.2 [skip ci] - -## [1.39.2](https://github.com/taskforcesh/bullmq/compare/v1.39.1...v1.39.2) (2021-07-15) - -### Bug Fixes - -* **queue:** ensure the Queue constructor doesn't try to set queue options if the client is closed ([b40c6eb](https://github.com/taskforcesh/bullmq/commit/b40c6eb931a71d0ae9f6454eb70d84259a6981b7)) ([`451365c`](https://github.com/taskforcesh/bullmq/commit/451365ce939e43e71fd45c3614103ad409c8a90d)) - -### Fix - -* fix(queue): ensure the Queue constructor doesn't try to set queue options if the client is closed - -In my app we disconnect queues sometimes quite quickly after constructing them, and see this error every so often in our CI logs: - -``` -/app/node_modules/bullmq/node_modules/ioredis/built/redis/index.js:620 - command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG)); - ^ -Error: Connection is closed. - at Redis.sendCommand (/app/node_modules/bullmq/node_modules/ioredis/built/redis/index.js:620:24) - at Redis.hset (/app/node_modules/bullmq/node_modules/ioredis/built/commander.js:111:25) - at /app/node_modules/bullmq/src/classes/queue.ts:29:14 -``` - -I am not exactly sure why it only happens sometimes but not others, but regardless, I think it's a good idea not to try to run the floating `hset` in the queue constructor if the client has been closed. This prevents that by first checking if the client has been closed before doing this floating work. ([`b40c6eb`](https://github.com/taskforcesh/bullmq/commit/b40c6eb931a71d0ae9f6454eb70d84259a6981b7)) - - -## v1.39.1 (2021-07-15) - -### Chore - -* chore(release): 1.39.1 [skip ci] - -## [1.39.1](https://github.com/taskforcesh/bullmq/compare/v1.39.0...v1.39.1) (2021-07-15) - -### Bug Fixes - -* **sandbox:** use updateProgress method name ([27d62c3](https://github.com/taskforcesh/bullmq/commit/27d62c32b2fac091b2700d6077de593c9fda4c22)) ([`a3bdce2`](https://github.com/taskforcesh/bullmq/commit/a3bdce292486b983305e6e324427adee9d4199ef)) - -### Fix - -* fix(sandbox): use updateProgress method name ([`27d62c3`](https://github.com/taskforcesh/bullmq/commit/27d62c32b2fac091b2700d6077de593c9fda4c22)) - -### Unknown - -* GitBook: [master] one page modified ([`7299935`](https://github.com/taskforcesh/bullmq/commit/72999351fedb5edb0ea6742e1cb7610e9cfff406)) - -* GitBook: [master] 8 pages modified ([`c37b009`](https://github.com/taskforcesh/bullmq/commit/c37b0092cd2842a4479fc0726e79eadea39f6ce2)) - - -## v1.39.0 (2021-07-13) - -### Chore - -* chore(release): 1.39.0 [skip ci] - -# [1.39.0](https://github.com/taskforcesh/bullmq/compare/v1.38.1...v1.39.0) (2021-07-13) - -### Features - -* **worker+scheduler:** add a "running" attribute for healthchecking ([aae358e](https://github.com/taskforcesh/bullmq/commit/aae358e067a0b6f20124751cffcdeaebac6eb7fd)) ([`c718d36`](https://github.com/taskforcesh/bullmq/commit/c718d365d0a1882154130d096988f3294fe8c66f)) - -### Feature - -* feat(worker+scheduler): add a "running" attribute for healthchecking ([`aae358e`](https://github.com/taskforcesh/bullmq/commit/aae358e067a0b6f20124751cffcdeaebac6eb7fd)) - - -## v1.38.1 (2021-07-12) - -### Chore - -* chore(release): 1.38.1 [skip ci] - -## [1.38.1](https://github.com/taskforcesh/bullmq/compare/v1.38.0...v1.38.1) (2021-07-12) - -### Bug Fixes - -* **reprocess:** do not store job.id in added list ([9c0605e](https://github.com/taskforcesh/bullmq/commit/9c0605e10f0bbdce94153d3f318d56c23bfd3269)) ([`9a4e496`](https://github.com/taskforcesh/bullmq/commit/9a4e496489b292821c746d14f413aff25f134bfd)) - -### Fix - -* fix(reprocess): do not store job.id in added list ([`9c0605e`](https://github.com/taskforcesh/bullmq/commit/9c0605e10f0bbdce94153d3f318d56c23bfd3269)) - - -## v1.38.0 (2021-07-12) - -### Chore - -* chore(release): 1.38.0 [skip ci] - -# [1.38.0](https://github.com/taskforcesh/bullmq/compare/v1.37.1...v1.38.0) (2021-07-12) - -### Features - -* **queue:** add missing events typings ([b42e78c](https://github.com/taskforcesh/bullmq/commit/b42e78c36cb6a6579a4c7cce1d7e969b230ff5b6)) ([`c234af2`](https://github.com/taskforcesh/bullmq/commit/c234af2ae548c4bed6ed6553a368c555d65b249e)) - -### Feature - -* feat(queue): add missing events typings ([`b42e78c`](https://github.com/taskforcesh/bullmq/commit/b42e78c36cb6a6579a4c7cce1d7e969b230ff5b6)) - - -## v1.37.1 (2021-07-02) - -### Chore - -* chore(release): 1.37.1 [skip ci] - -## [1.37.1](https://github.com/taskforcesh/bullmq/compare/v1.37.0...v1.37.1) (2021-07-02) - -### Bug Fixes - -* **stalled-jobs:** move stalled jobs to wait in batches ([a23fcb8](https://github.com/taskforcesh/bullmq/commit/a23fcb82d4ca20cbc4b8cd8b544b2d2eaddd86c3)), closes [#422](https://github.com/taskforcesh/bullmq/issues/422) ([`ff8cde6`](https://github.com/taskforcesh/bullmq/commit/ff8cde6cb8ed13d6bca19802348979caa3669ee6)) - -### Fix - -* fix(stalled-jobs): move stalled jobs to wait in batches - -re #422 ([`a23fcb8`](https://github.com/taskforcesh/bullmq/commit/a23fcb82d4ca20cbc4b8cd8b544b2d2eaddd86c3)) - - -## v1.37.0 (2021-06-30) - -### Chore - -* chore(release): 1.37.0 [skip ci] - -# [1.37.0](https://github.com/taskforcesh/bullmq/compare/v1.36.1...v1.37.0) (2021-06-30) - -### Features - -* **job:** add changeDelay method for delayed jobs ([f0a9f9c](https://github.com/taskforcesh/bullmq/commit/f0a9f9c6479062413abc0ac9a6f744329571a618)) ([`57f95e0`](https://github.com/taskforcesh/bullmq/commit/57f95e078eb8176973eea0670c56c9f2e3ec524c)) - -* chore(deps): add commitizen - -this is a helper for semantic-release commit messages ([`eacd59b`](https://github.com/taskforcesh/bullmq/commit/eacd59bd67b7c356614d9acd2cc59a8b92f9b396)) - -### Documentation - -* docs: remove poll ([`990497a`](https://github.com/taskforcesh/bullmq/commit/990497a8c427b4804c8c1fcccf23f213ee4bb047)) - -* docs(contributing): rephrase some sections ([`16529c2`](https://github.com/taskforcesh/bullmq/commit/16529c2a9fb5df5cffa02106ccc631ac16e43ae4)) - -* docs(readme): add contributing reference ([`c7bc38b`](https://github.com/taskforcesh/bullmq/commit/c7bc38b47f8e8a74a3c5348dd987baa3effbd048)) - -### Feature - -* feat(job): add changeDelay method for delayed jobs ([`f0a9f9c`](https://github.com/taskforcesh/bullmq/commit/f0a9f9c6479062413abc0ac9a6f744329571a618)) - - -## v1.36.1 (2021-06-22) - -### Chore - -* chore(release): 1.36.1 [skip ci] - -## [1.36.1](https://github.com/taskforcesh/bullmq/compare/v1.36.0...v1.36.1) (2021-06-22) - -### Bug Fixes - -* **worker:** change active event typing ([220b4f6](https://github.com/taskforcesh/bullmq/commit/220b4f619b30a8f04979e9abd0139e46d89b424d)) ([`5bed98a`](https://github.com/taskforcesh/bullmq/commit/5bed98aa4204d6e6cf7d17233b6ea2d4ab9fcb3c)) - -### Fix - -* fix(worker): change active event typing ([`220b4f6`](https://github.com/taskforcesh/bullmq/commit/220b4f619b30a8f04979e9abd0139e46d89b424d)) - - -## v1.36.0 (2021-06-20) - -### Chore - -* chore(release): 1.36.0 [skip ci] - -# [1.36.0](https://github.com/taskforcesh/bullmq/compare/v1.35.0...v1.36.0) (2021-06-20) - -### Bug Fixes - -* **queue-events:** fix drained typing ([9cf711d](https://github.com/taskforcesh/bullmq/commit/9cf711d4d4e7d8214dfd93a243c35d0bf135cdaf)) - -### Features - -* **worker:** add active event typing ([5508cdf](https://github.com/taskforcesh/bullmq/commit/5508cdf7cf372ae2f4af0ef576016eb901580671)) -* **worker:** add progress event typing ([119cb7c](https://github.com/taskforcesh/bullmq/commit/119cb7cd7a91c0f1866f5957faf2850afadbe709)) ([`8d40ddb`](https://github.com/taskforcesh/bullmq/commit/8d40ddbaf1f48dc08e459e085fbe196361bba9a3)) - -### Documentation - -* docs: add keywords ([`071fec2`](https://github.com/taskforcesh/bullmq/commit/071fec2eae89fbb347dc9f51eac0a357ae509f49)) - -### Feature - -* feat(worker): add active event typing ([`5508cdf`](https://github.com/taskforcesh/bullmq/commit/5508cdf7cf372ae2f4af0ef576016eb901580671)) - -* feat(worker): add progress event typing ([`119cb7c`](https://github.com/taskforcesh/bullmq/commit/119cb7cd7a91c0f1866f5957faf2850afadbe709)) - -### Fix - -* fix(queue-events): fix drained typing ([`9cf711d`](https://github.com/taskforcesh/bullmq/commit/9cf711d4d4e7d8214dfd93a243c35d0bf135cdaf)) - - -## v1.35.0 (2021-06-19) - -### Chore - -* chore(release): 1.35.0 [skip ci] - -# [1.35.0](https://github.com/taskforcesh/bullmq/compare/v1.34.2...v1.35.0) (2021-06-19) - -### Features - -* **worker:** add drained event typing ([ed5f315](https://github.com/taskforcesh/bullmq/commit/ed5f3155415693d2a6dbfb779397d53d74b704e2)) ([`499fe50`](https://github.com/taskforcesh/bullmq/commit/499fe5088aba2f265213b730fd79f3ad6f63b1b9)) - -### Feature - -* feat(worker): add drained event typing ([`ed5f315`](https://github.com/taskforcesh/bullmq/commit/ed5f3155415693d2a6dbfb779397d53d74b704e2)) - - -## v1.34.2 (2021-06-18) - -### Chore - -* chore(release): 1.34.2 [skip ci] - -## [1.34.2](https://github.com/taskforcesh/bullmq/compare/v1.34.1...v1.34.2) (2021-06-18) - -### Bug Fixes - -* **worker:** await for processing functions ([0566804](https://github.com/taskforcesh/bullmq/commit/056680470283f134b447a8ba39afa29e1e113585)) ([`4882e01`](https://github.com/taskforcesh/bullmq/commit/4882e01379efad9b3fe7bff48bb7fbe70f115873)) - -### Fix - -* fix(worker): await for processing functions ([`0566804`](https://github.com/taskforcesh/bullmq/commit/056680470283f134b447a8ba39afa29e1e113585)) - - -## v1.34.1 (2021-06-18) - -### Chore - -* chore(release): 1.34.1 [skip ci] - -## [1.34.1](https://github.com/taskforcesh/bullmq/compare/v1.34.0...v1.34.1) (2021-06-18) - -### Bug Fixes - -* **redis-connection:** remove error event listener from client ([2d70fe7](https://github.com/taskforcesh/bullmq/commit/2d70fe7cc7d43673674ec2ba0204c10661b34e95)) ([`2b21440`](https://github.com/taskforcesh/bullmq/commit/2b21440f5befd4b95d6be3d8e8235b31279ce0c6)) - -### Documentation - -* docs(flow-producer): fix typo on getFlow ([`f6e163e`](https://github.com/taskforcesh/bullmq/commit/f6e163e3430a0e38d671730313ba9157ef93f85b)) - -* docs: add example of adding retry rules to queue's default options ([`1f53172`](https://github.com/taskforcesh/bullmq/commit/1f53172351b81dff9b3d4dc6daa83de6d8249dec)) - -### Fix - -* fix(redis-connection): remove error event listener from client ([`2d70fe7`](https://github.com/taskforcesh/bullmq/commit/2d70fe7cc7d43673674ec2ba0204c10661b34e95)) - -### Test - -* test(mocha): no exclusive tests ([`2e9af30`](https://github.com/taskforcesh/bullmq/commit/2e9af3071f445a7118823dfeb79d8eb355ba5def)) - - -## v1.34.0 (2021-06-11) - -### Chore - -* chore(release): 1.34.0 [skip ci] - -# [1.34.0](https://github.com/taskforcesh/bullmq/compare/v1.33.1...v1.34.0) (2021-06-11) - -### Features - -* **job:** expose queueName ([8683bd4](https://github.com/taskforcesh/bullmq/commit/8683bd470cc7304f087d646fd40c5bc3acc1263c)) ([`a3342b2`](https://github.com/taskforcesh/bullmq/commit/a3342b2aa23ed0606fe97f4aeadad5263038a703)) - -### Documentation - -* docs: define exponential and fixed backoffs ([`d621359`](https://github.com/taskforcesh/bullmq/commit/d62135967e1d9a8c001faddde42238e4e96e5212)) - -### Feature - -* feat(job): expose queueName ([`8683bd4`](https://github.com/taskforcesh/bullmq/commit/8683bd470cc7304f087d646fd40c5bc3acc1263c)) - - -## v1.33.1 (2021-06-10) - -### Chore - -* chore(release): 1.33.1 [skip ci] - -## [1.33.1](https://github.com/taskforcesh/bullmq/compare/v1.33.0...v1.33.1) (2021-06-10) - -### Bug Fixes - -* **job:** destructure default opts for pagination ([73363a5](https://github.com/taskforcesh/bullmq/commit/73363a551f56608f8936ad1f730d0a9c778aafd2)) ([`7dfb343`](https://github.com/taskforcesh/bullmq/commit/7dfb343219737c1a3bef72c5121803b4e7e4fdd6)) - -### Fix - -* fix(job): destructure default opts for pagination ([`73363a5`](https://github.com/taskforcesh/bullmq/commit/73363a551f56608f8936ad1f730d0a9c778aafd2)) - -### Test - -* test: add missing test case for processed pagination ([`2631c21`](https://github.com/taskforcesh/bullmq/commit/2631c214b843b60224557418f1d69a2ea8dc87d5)) - - -## v1.33.0 (2021-06-10) - -### Chore - -* chore(release): 1.33.0 [skip ci] - -# [1.33.0](https://github.com/taskforcesh/bullmq/compare/v1.32.0...v1.33.0) (2021-06-10) - -### Features - -* **job:** add getDependenciesCount method ([ae39a4c](https://github.com/taskforcesh/bullmq/commit/ae39a4c77a958242cb445dbb32ae27b15a953653)) ([`a4efbb5`](https://github.com/taskforcesh/bullmq/commit/a4efbb57e29315b7255780569ef2c6c11b4dad6d)) - -* chore: delete .only ([`4a3b789`](https://github.com/taskforcesh/bullmq/commit/4a3b78920514b707ddbdab20293d656284d91735)) - -### Documentation - -* docs(queue-options): fix typo ([`8db639b`](https://github.com/taskforcesh/bullmq/commit/8db639b9e62706ea70ba847c6c49b1244c260e54)) - -### Test - -* test(worker): fix flaky test related to getDependencies ([`f512823`](https://github.com/taskforcesh/bullmq/commit/f512823a847d7a464cf7253fed3fad2563945fbc)) - -### Unknown - -* feat(job): add getDependenciesCount method ([`ae39a4c`](https://github.com/taskforcesh/bullmq/commit/ae39a4c77a958242cb445dbb32ae27b15a953653)) - - -## v1.32.0 (2021-06-07) - -### Chore - -* chore(release): 1.32.0 [skip ci] - -# [1.32.0](https://github.com/taskforcesh/bullmq/compare/v1.31.1...v1.32.0) (2021-06-07) - -### Features - -* **flow-producer:** add getFlow method ([ce93d04](https://github.com/taskforcesh/bullmq/commit/ce93d04c962686aff34f670f2decadadbf1cf4ca)) ([`87b3603`](https://github.com/taskforcesh/bullmq/commit/87b360323ed3ab4d43ccd3e278413137479cdf3b)) - -### Feature - -* feat(flow-producer): add getFlow method ([`ce93d04`](https://github.com/taskforcesh/bullmq/commit/ce93d04c962686aff34f670f2decadadbf1cf4ca)) - - -## v1.31.1 (2021-06-07) - -### Chore - -* chore(release): 1.31.1 [skip ci] - -## [1.31.1](https://github.com/taskforcesh/bullmq/compare/v1.31.0...v1.31.1) (2021-06-07) - -### Bug Fixes - -* **worker:** remove processed key when removeOnComplete ([4ec1b73](https://github.com/taskforcesh/bullmq/commit/4ec1b739d6aeeb2fc21887b58f5978027ddcdb50)) ([`7068d4c`](https://github.com/taskforcesh/bullmq/commit/7068d4c2297468714ce1034b16bc9a32e9571d70)) - -* chore(deps): upgrade ioredis to 4.27.5 ([`f538f5b`](https://github.com/taskforcesh/bullmq/commit/f538f5bd760570b6cc3078083b685988d6e42bc4)) - -### Documentation - -* docs(compat): fix typos ([`f9c5c3c`](https://github.com/taskforcesh/bullmq/commit/f9c5c3c54338eedf1385864f0580cc8d83cea388)) - -### Fix - -* fix(worker): remove processed key when removeOnComplete ([`4ec1b73`](https://github.com/taskforcesh/bullmq/commit/4ec1b739d6aeeb2fc21887b58f5978027ddcdb50)) - - -## v1.31.0 (2021-06-04) - -### Chore - -* chore(release): 1.31.0 [skip ci] - -# [1.31.0](https://github.com/taskforcesh/bullmq/compare/v1.30.2...v1.31.0) (2021-06-04) - -### Features - -* **job:** extend getDependencies to support pagination ([9b61bbb](https://github.com/taskforcesh/bullmq/commit/9b61bbb9160358f629cd458fa8dc4c9b6ebcd9f5)) ([`d8c67c2`](https://github.com/taskforcesh/bullmq/commit/d8c67c26483c1e38554abdbde240a29b90f1766a)) - -### Feature - -* feat(job): extend getDependencies to support pagination ([`9b61bbb`](https://github.com/taskforcesh/bullmq/commit/9b61bbb9160358f629cd458fa8dc4c9b6ebcd9f5)) - - -## v1.30.2 (2021-06-03) - -### Chore - -* chore(release): 1.30.2 [skip ci] - -## [1.30.2](https://github.com/taskforcesh/bullmq/compare/v1.30.1...v1.30.2) (2021-06-03) - -### Bug Fixes - -* **job:** parse results in getDependencies for processed jobs ([6fdc701](https://github.com/taskforcesh/bullmq/commit/6fdc7011ba910e5ca9c6d87926cc523ef38ef3ca)) ([`d3335ce`](https://github.com/taskforcesh/bullmq/commit/d3335cee83c3ad93a36066b06111a350b34d0621)) - -### Unknown - -* fix(job): parse results in getDependencies for processed jobs ([`6fdc701`](https://github.com/taskforcesh/bullmq/commit/6fdc7011ba910e5ca9c6d87926cc523ef38ef3ca)) - - -## v1.30.1 (2021-06-02) - -### Chore - -* chore(release): 1.30.1 [skip ci] +# [4.5.0](https://github.com/taskforcesh/bullmq/compare/v4.4.0...v4.5.0) (2023-07-18) -## [1.30.1](https://github.com/taskforcesh/bullmq/compare/v1.30.0...v1.30.1) (2021-06-02) ### Bug Fixes -* **move-to-waiting-children:** make opts optional ([33bd76a](https://github.com/taskforcesh/bullmq/commit/33bd76a2cac9be450b5d76c6cfe16751c7569ceb)) ([`46e35c3`](https://github.com/taskforcesh/bullmq/commit/46e35c39141573daf0401c8ab79957c84424f1a7)) - -### Fix - -* fix(move-to-waiting-children): make opts optional ([`33bd76a`](https://github.com/taskforcesh/bullmq/commit/33bd76a2cac9be450b5d76c6cfe16751c7569ceb)) +* **python:** respect concurrency in worker ([#2062](https://github.com/taskforcesh/bullmq/issues/2062)) fixes [#2063](https://github.com/taskforcesh/bullmq/issues/2063) ([1b95185](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) -## v1.30.0 (2021-06-02) +### Features -### Chore +* **job:** add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([841dc87](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) -* chore(release): 1.30.0 [skip ci] +# [4.4.0](https://github.com/taskforcesh/bullmq/compare/v4.3.0...v4.4.0) (2023-07-17) -# [1.30.0](https://github.com/taskforcesh/bullmq/compare/v1.29.1...v1.30.0) (2021-06-02) ### Features -* add some event typing ([934c004](https://github.com/taskforcesh/bullmq/commit/934c0040b0802bb67f44a979584405d795a8ab5e)) ([`bf17c7b`](https://github.com/taskforcesh/bullmq/commit/bf17c7bf5b30e6c9c566e565400aa0c8f32220ab)) - -### Feature +* **job:** add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([ffd49e2](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) +* **python:** add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([808ee72](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) -* feat: add some event typing ([`934c004`](https://github.com/taskforcesh/bullmq/commit/934c0040b0802bb67f44a979584405d795a8ab5e)) +# [4.3.0](https://github.com/taskforcesh/bullmq/compare/v4.2.1...v4.3.0) (2023-07-14) -## v1.29.1 (2021-05-31) +### Features -### Chore +* **worker:** add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([e255356](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) -* chore(release): 1.29.1 [skip ci] +## [4.2.1](https://github.com/taskforcesh/bullmq/compare/v4.2.0...v4.2.1) (2023-07-10) -## [1.29.1](https://github.com/taskforcesh/bullmq/compare/v1.29.0...v1.29.1) (2021-05-31) ### Bug Fixes -* **move-stalled-jobs-to-wait:** send failedReason to queueEvents ([7c510b5](https://github.com/taskforcesh/bullmq/commit/7c510b542558bd4b1330371b73331f37b97a818d)) ([`2b43133`](https://github.com/taskforcesh/bullmq/commit/2b43133875ed67189ca9f6cf1222bf726a941a85)) - -### Fix +* **flow:** emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([f419ff1](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) -* fix(move-stalled-jobs-to-wait): send failedReason to queueEvents ([`7c510b5`](https://github.com/taskforcesh/bullmq/commit/7c510b542558bd4b1330371b73331f37b97a818d)) +# [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) -## v1.29.0 (2021-05-31) +### Features -### Chore +* **common:** add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([ca17364](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) -* chore(release): 1.29.0 [skip ci] +# [4.1.0](https://github.com/taskforcesh/bullmq/compare/v4.0.0...v4.1.0) (2023-06-23) -# [1.29.0](https://github.com/taskforcesh/bullmq/compare/v1.28.2...v1.29.0) (2021-05-31) ### Features -* add move to waiting children for manual processing ([#477](https://github.com/taskforcesh/bullmq/issues/477)) ([f312f29](https://github.com/taskforcesh/bullmq/commit/f312f293b8cac79af9c14848ffd1b11b65a806c3)) ([`00a8352`](https://github.com/taskforcesh/bullmq/commit/00a8352c7e772df7f0a42812a330b98e50f45de3)) - -### Feature - -* feat: add move to waiting children for manual processing (#477) ([`f312f29`](https://github.com/taskforcesh/bullmq/commit/f312f293b8cac79af9c14848ffd1b11b65a806c3)) +* **queue:** add getPrioritized and getPrioritizedCount methods ([#2005](https://github.com/taskforcesh/bullmq/issues/2005)) ([7363abe](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) +# [4.0.0](https://github.com/taskforcesh/bullmq/compare/v3.15.8...v4.0.0) (2023-06-21) -## v1.28.2 (2021-05-31) -### Chore +### Features -* chore(release): 1.28.2 [skip ci] +* **queue:** add removeDeprecatedPriorityKey method -## [1.28.2](https://github.com/taskforcesh/bullmq/compare/v1.28.1...v1.28.2) (2021-05-31) -### Bug Fixes +### Performance Improvements -* **obliterate:** remove job logs ([ea91895](https://github.com/taskforcesh/bullmq/commit/ea918950d7696241047a23773cc13cd675209c4b)) ([`499bb93`](https://github.com/taskforcesh/bullmq/commit/499bb93c303052af0a2629dbaddd8916dc020fc4)) +* **priority:** add prioritized as a new state ([#1984](https://github.com/taskforcesh/bullmq/issues/1984)) (python) ([42a890a](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) -### Fix -* fix(obliterate): remove job logs ([`ea91895`](https://github.com/taskforcesh/bullmq/commit/ea918950d7696241047a23773cc13cd675209c4b)) +### BREAKING CHANGES +* **priority:** priority is separeted in its own zset, no duplication needed -## v1.28.1 (2021-05-31) +* **job:** change job method name update to updateData -### Chore +ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) -* chore(release): 1.28.1 [skip ci] +## [3.15.8](https://github.com/taskforcesh/bullmq/compare/v3.15.7...v3.15.8) (2023-06-16) -## [1.28.1](https://github.com/taskforcesh/bullmq/compare/v1.28.0...v1.28.1) (2021-05-31) ### Bug Fixes -* **get-workers:** use strict equality on name fixes [#564](https://github.com/taskforcesh/bullmq/issues/564) ([4becfa6](https://github.com/taskforcesh/bullmq/commit/4becfa66e09dacf9830804898c45cb3317dcf438)) ([`f8c3a37`](https://github.com/taskforcesh/bullmq/commit/f8c3a3793d25696fd472ad963441836529f356e7)) +* **rate-limit:** keep priority fifo order ([#1991](https://github.com/taskforcesh/bullmq/issues/1991)) fixes [#1929](https://github.com/taskforcesh/bullmq/issues/1929) (python) ([56bd7ad](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) -### Documentation +## [3.15.7](https://github.com/taskforcesh/bullmq/compare/v3.15.6...v3.15.7) (2023-06-16) -* docs(job): fix timestamp typo ([`de37977`](https://github.com/taskforcesh/bullmq/commit/de37977e517b7f6b9aa2efe642169a840aeb4e1a)) -* docs: update readme ([`6442798`](https://github.com/taskforcesh/bullmq/commit/644279813fc6a5e1838ac18cc1f16aae5fee2723)) +### Bug Fixes -### Unknown +* **worker:** set redis version always in initialization ([#1989](https://github.com/taskforcesh/bullmq/issues/1989)) fixes [#1988](https://github.com/taskforcesh/bullmq/issues/1988) ([a1544a8](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) -* fix(get-workers): use strict equality on name fixes #564 ([`4becfa6`](https://github.com/taskforcesh/bullmq/commit/4becfa66e09dacf9830804898c45cb3317dcf438)) +## [3.15.6](https://github.com/taskforcesh/bullmq/compare/v3.15.5...v3.15.6) (2023-06-13) -## v1.28.0 (2021-05-24) +### Bug Fixes -### Chore +* **worker:** use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([0df6afa](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) -* chore(release): 1.28.0 [skip ci] +## [3.15.5](https://github.com/taskforcesh/bullmq/compare/v3.15.4...v3.15.5) (2023-06-11) -# [1.28.0](https://github.com/taskforcesh/bullmq/compare/v1.27.0...v1.28.0) (2021-05-24) -### Features +### Bug Fixes -* **flow-producer:** expose client connection ([17d4263](https://github.com/taskforcesh/bullmq/commit/17d4263abfa57797535cd8773c4cc316ff5149d2)) ([`a3aa689`](https://github.com/taskforcesh/bullmq/commit/a3aa6892fde7fd81e3ad78d664ffd29bca6be249)) +* **retry-job:** consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([e753855](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) -### Documentation +## [3.15.4](https://github.com/taskforcesh/bullmq/compare/v3.15.3...v3.15.4) (2023-06-08) -* docs: document some job methods ([`fd203ea`](https://github.com/taskforcesh/bullmq/commit/fd203ea696cc72e1df823b3ee033617bd6cfff87)) -### Feature +### Bug Fixes -* feat(flow-producer): expose client connection ([`17d4263`](https://github.com/taskforcesh/bullmq/commit/17d4263abfa57797535cd8773c4cc316ff5149d2)) +* **job:** import right reference of QueueEvents ([#1964](https://github.com/taskforcesh/bullmq/issues/1964)) ([689c845](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) +## [3.15.3](https://github.com/taskforcesh/bullmq/compare/v3.15.2...v3.15.3) (2023-06-08) -## v1.27.0 (2021-05-24) -### Chore +### Bug Fixes -* chore(release): 1.27.0 [skip ci] +* **job:** use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([881848c](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) -# [1.27.0](https://github.com/taskforcesh/bullmq/compare/v1.26.5...v1.27.0) (2021-05-24) +## [3.15.2](https://github.com/taskforcesh/bullmq/compare/v3.15.1...v3.15.2) (2023-06-06) -### Features -* **repeat:** add immediately opt for repeat ([d095573](https://github.com/taskforcesh/bullmq/commit/d095573f8e7ce5911f777df48368382eceb99d6a)) ([`9bad41e`](https://github.com/taskforcesh/bullmq/commit/9bad41e6947f1b16e33839742f055b6c5c2c5bc5)) +### Bug Fixes -### Documentation +* **worker:** better worker client naming ([c5f63af](https://github.com/taskforcesh/bullmq/commit/c5f63affe72f7b6616f4c5f3aafde858dcc0b200)) -* docs: replace survey link ([`a4a2f46`](https://github.com/taskforcesh/bullmq/commit/a4a2f468dc2bdbc1108a95ed67a19295036056f5)) +## [3.15.1](https://github.com/taskforcesh/bullmq/compare/v3.15.0...v3.15.1) (2023-06-05) -### Unknown -* feat(repeat): add immediately opt for repeat ([`d095573`](https://github.com/taskforcesh/bullmq/commit/d095573f8e7ce5911f777df48368382eceb99d6a)) +### Bug Fixes +* **rate-limit:** consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) -## v1.26.5 (2021-05-21) +# [3.15.0](https://github.com/taskforcesh/bullmq/compare/v3.14.2...v3.15.0) (2023-05-31) -### Chore -* chore(release): 1.26.5 [skip ci] +### Features -## [1.26.5](https://github.com/taskforcesh/bullmq/compare/v1.26.4...v1.26.5) (2021-05-21) +* **job:** add changePriority method ([#1901](https://github.com/taskforcesh/bullmq/issues/1901)) ref [#1899](https://github.com/taskforcesh/bullmq/issues/1899) ([9485ad5](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) -### Bug Fixes +## [3.14.2](https://github.com/taskforcesh/bullmq/compare/v3.14.1...v3.14.2) (2023-05-30) -* **movetofinished:** use parent queue for events ([1b17b62](https://github.com/taskforcesh/bullmq/commit/1b17b62a794728a318f1079e73d07e33fe65c9c7)) ([`a283a2b`](https://github.com/taskforcesh/bullmq/commit/a283a2b78a325eb8e7a0531bfe50f726326741c8)) -### Documentation +### Bug Fixes -* docs(job): fix typo ([`afb1d5c`](https://github.com/taskforcesh/bullmq/commit/afb1d5cd203b8985be4c0482ac5595de7238f0db)) +* **rate-limit:** take in count priority ([#1919](https://github.com/taskforcesh/bullmq/issues/1919)) fixes [#1915](https://github.com/taskforcesh/bullmq/issues/1915) ([b8157a3](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) -### Fix +## [3.14.1](https://github.com/taskforcesh/bullmq/compare/v3.14.0...v3.14.1) (2023-05-27) -* fix(movetofinished): use parent queue for events ([`1b17b62`](https://github.com/taskforcesh/bullmq/commit/1b17b62a794728a318f1079e73d07e33fe65c9c7)) +### Performance Improvements -## v1.26.4 (2021-05-20) +* **retry-job:** get target queue list once ([#1921](https://github.com/taskforcesh/bullmq/issues/1921)) ([8a7a9dd](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) -### Chore +# [3.14.0](https://github.com/taskforcesh/bullmq/compare/v3.13.4...v3.14.0) (2023-05-22) -* chore(release): 1.26.4 [skip ci] -## [1.26.4](https://github.com/taskforcesh/bullmq/compare/v1.26.3...v1.26.4) (2021-05-20) +### Features -### Bug Fixes +* **worker:** make extendLocks overridable ([7b1386b](https://github.com/taskforcesh/bullmq/commit/7b1386bb823562d9666a1ad6e206e1deb63e57ec)) -* **removejob:** delete processed hash ([a2a5058](https://github.com/taskforcesh/bullmq/commit/a2a5058f18ab77ed4d0114d48f47e6144d632cbf)) ([`c3887d6`](https://github.com/taskforcesh/bullmq/commit/c3887d6ced3035f9a8c2221bd2403427db816fb3)) +## [3.13.4](https://github.com/taskforcesh/bullmq/compare/v3.13.3...v3.13.4) (2023-05-11) -### Documentation -* docs: update README ([`3a771d1`](https://github.com/taskforcesh/bullmq/commit/3a771d1547ecd34e71cad624e42872037d248d79)) +### Performance Improvements -### Fix +* **rate-limit:** call pttl in script moveJobFromActiveToWait ([#1889](https://github.com/taskforcesh/bullmq/issues/1889)) ([e0d2992](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) -* fix(removejob): delete processed hash ([`a2a5058`](https://github.com/taskforcesh/bullmq/commit/a2a5058f18ab77ed4d0114d48f47e6144d632cbf)) +## [3.13.3](https://github.com/taskforcesh/bullmq/compare/v3.13.2...v3.13.3) (2023-05-10) -## v1.26.3 (2021-05-19) +### Bug Fixes -### Chore +* **child:** use named import for EventEmitter ([#1887](https://github.com/taskforcesh/bullmq/issues/1887)) ([1db396d](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) -* chore(release): 1.26.3 [skip ci] +## [3.13.2](https://github.com/taskforcesh/bullmq/compare/v3.13.1...v3.13.2) (2023-05-09) -## [1.26.3](https://github.com/taskforcesh/bullmq/compare/v1.26.2...v1.26.3) (2021-05-19) ### Bug Fixes -* ensure connection reconnects when pausing fixes [#160](https://github.com/taskforcesh/bullmq/issues/160) ([f38fee8](https://github.com/taskforcesh/bullmq/commit/f38fee84def75dd8a38cbb8bfb5aa662485ddf91)) ([`0eb67d5`](https://github.com/taskforcesh/bullmq/commit/0eb67d5b7b41ca92de35ea24b49e05870fd863b1)) - -### Documentation +* **rate-limit:** consider paused queue when dynamic rate limit ([#1884](https://github.com/taskforcesh/bullmq/issues/1884)) ([a23f37e](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) -* docs(changelog): adding missing version messages ([`41ab373`](https://github.com/taskforcesh/bullmq/commit/41ab373e8e411ec6279c3fa8468cdf3c49d578e2)) - -### Fix +## [3.13.1](https://github.com/taskforcesh/bullmq/compare/v3.13.0...v3.13.1) (2023-05-07) -* fix: ensure connection reconnects when pausing fixes #160 ([`f38fee8`](https://github.com/taskforcesh/bullmq/commit/f38fee84def75dd8a38cbb8bfb5aa662485ddf91)) -### Style +### Bug Fixes -* style(changelog): more formatting ([`35c90e8`](https://github.com/taskforcesh/bullmq/commit/35c90e84701d5412a7c76ddf406aaea1a7b674ba)) +* **retry:** consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([01b621f](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) -* style(changelog): formatting old messages ([`0197382`](https://github.com/taskforcesh/bullmq/commit/01973826e6213fc3a4519e2efa04b2b9f4e64c99)) +# [3.13.0](https://github.com/taskforcesh/bullmq/compare/v3.12.1...v3.13.0) (2023-05-06) -## v1.26.2 (2021-05-18) +### Features -### Chore +* **worker:** add worker threads support ([0820985](https://github.com/taskforcesh/bullmq/commit/0820985e073582fdf841affad38ecc7ab64691ec)) -* chore(release): 1.26.2 [skip ci] +## [3.12.1](https://github.com/taskforcesh/bullmq/compare/v3.12.0...v3.12.1) (2023-05-05) -## [1.26.2](https://github.com/taskforcesh/bullmq/compare/v1.26.1...v1.26.2) (2021-05-18) ### Bug Fixes -* **getjoblogs:** no reversed pagination ([fb0c3a5](https://github.com/taskforcesh/bullmq/commit/fb0c3a50f0d37851a8f35cb4c478259a63d93461)) ([`09bf324`](https://github.com/taskforcesh/bullmq/commit/09bf324ef30d8f6b11ff2e6cb547da467d612d74)) +* **worker:** close open handles after closing ([#1861](https://github.com/taskforcesh/bullmq/issues/1861)) fixes [#1312](https://github.com/taskforcesh/bullmq/issues/1312) ([39286e8](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) -* chore: rename CHANGELOG ([`018f10b`](https://github.com/taskforcesh/bullmq/commit/018f10b00d229b0c7fc218a4546670ee9b47e40d)) +# [3.12.0](https://github.com/taskforcesh/bullmq/compare/v3.11.0...v3.12.0) (2023-04-20) -### Fix -* fix(getjoblogs): no reversed pagination ([`fb0c3a5`](https://github.com/taskforcesh/bullmq/commit/fb0c3a50f0d37851a8f35cb4c478259a63d93461)) +### Features -### Unknown +* upgrade ioredis to 5.3.2 ([375b1be](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) -* Update SUMMARY.md ([`cba5d26`](https://github.com/taskforcesh/bullmq/commit/cba5d26dd226fc6fc0fc5cf6c121fa8ff4dfdb12)) +# [3.11.0](https://github.com/taskforcesh/bullmq/compare/v3.10.4...v3.11.0) (2023-04-17) -## v1.26.1 (2021-05-17) +### Features -### Chore +* **upstash:** don't throw an error when detecting an upstash host ([2e06bca](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) -* chore(release): 1.26.1 [skip ci] +## [3.10.4](https://github.com/taskforcesh/bullmq/compare/v3.10.3...v3.10.4) (2023-04-05) -## [1.26.1](https://github.com/taskforcesh/bullmq/compare/v1.26.0...v1.26.1) (2021-05-17) ### Bug Fixes -* **flow-producer:** use custom jobId as parentId for children, fixes [#552](https://github.com/taskforcesh/bullmq/issues/552) ([645b576](https://github.com/taskforcesh/bullmq/commit/645b576c1aabd8426ab77a68c199a594867cd729)) ([`a907c6e`](https://github.com/taskforcesh/bullmq/commit/a907c6e56c76b601e0f7ae3db64db7e08355d717)) - -### Fix - -* fix(flow-producer): use custom jobId as parentId for children, fixes #552 ([`645b576`](https://github.com/taskforcesh/bullmq/commit/645b576c1aabd8426ab77a68c199a594867cd729)) +* **flow:** do not remove completed children results ([#1788](https://github.com/taskforcesh/bullmq/issues/1788)) fixes [#1778](https://github.com/taskforcesh/bullmq/issues/1778) ([04b547a](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) +## [3.10.3](https://github.com/taskforcesh/bullmq/compare/v3.10.2...v3.10.3) (2023-03-30) -## v1.26.0 (2021-05-17) -### Chore +### Bug Fixes -* chore(release): 1.26.0 [skip ci] +* **flow:** consider removing dependency on removeOnFail true ([#1753](https://github.com/taskforcesh/bullmq/issues/1753)) ([de5a299](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) -# [1.26.0](https://github.com/taskforcesh/bullmq/compare/v1.25.2...v1.26.0) (2021-05-17) +## [3.10.2](https://github.com/taskforcesh/bullmq/compare/v3.10.1...v3.10.2) (2023-03-22) -### Features -* **custombackoff:** provide job as third parameter ([ddaf8dc](https://github.com/taskforcesh/bullmq/commit/ddaf8dc2f95ca336cb117a540edd4640d5d579e4)) ([`2656566`](https://github.com/taskforcesh/bullmq/commit/26565660b410c9c38adee13ecbe274b934d2cd64)) +### Bug Fixes -### Feature +* **job:** avoid error when job is moved when processing ([#1354](https://github.com/taskforcesh/bullmq/issues/1354)) fixes [#1343](https://github.com/taskforcesh/bullmq/issues/1343) [#1602](https://github.com/taskforcesh/bullmq/issues/1602) ([78085e4](https://github.com/taskforcesh/bullmq/commit/78085e4304357dd3695df61057f91e706c3a52bf)) -* feat(custombackoff): provide job as third parameter ([`ddaf8dc`](https://github.com/taskforcesh/bullmq/commit/ddaf8dc2f95ca336cb117a540edd4640d5d579e4)) +## [3.10.1](https://github.com/taskforcesh/bullmq/compare/v3.10.0...v3.10.1) (2023-03-06) -## v1.25.2 (2021-05-17) +### Bug Fixes -### Chore +* **worker:** throw error with invalid concurrency fixes [#1723](https://github.com/taskforcesh/bullmq/issues/1723) ([2a1cdbe](https://github.com/taskforcesh/bullmq/commit/2a1cdbe3e871309f460aadc14b4d632238c32aa9)) -* chore(release): 1.25.2 [skip ci] +# [3.10.0](https://github.com/taskforcesh/bullmq/compare/v3.9.0...v3.10.0) (2023-03-02) -## [1.25.2](https://github.com/taskforcesh/bullmq/compare/v1.25.1...v1.25.2) (2021-05-17) ### Bug Fixes -* **flow-producer:** process parent with children as empty array, fixes [#547](https://github.com/taskforcesh/bullmq/issues/547) ([48168f0](https://github.com/taskforcesh/bullmq/commit/48168f07cbaed7ed522c68d127a0c7d5e4cb380e)) ([`f7601d7`](https://github.com/taskforcesh/bullmq/commit/f7601d7edb36398cf7070c927709c191cabbaebe)) +* **worker:** close lock extended timer ([7995f18](https://github.com/taskforcesh/bullmq/commit/7995f18bb7712bd50d0fa3d17c4ab565b16ab379)) +* **worker:** correct lock extender logic ([6aa3569](https://github.com/taskforcesh/bullmq/commit/6aa3569db0fe0137790e61a4b5982d2b35ee5646)) +* **worker:** start stalled check timer ([4763be0](https://github.com/taskforcesh/bullmq/commit/4763be028b0c7b0460fd0804d4569c446a06ef4a)) -* chore: fix changelog file ([`5a9d530`](https://github.com/taskforcesh/bullmq/commit/5a9d530b027bbb8d44af82b2e4f954e8a013d6da)) -### Documentation +### Features -* docs: reword sentences in stalled.md ([`b679dd6`](https://github.com/taskforcesh/bullmq/commit/b679dd6904ca82432887f5ccd6636afc2ae43428)) +* **worker:** replace Promise.race with efficient an async fifo ([0d94e35](https://github.com/taskforcesh/bullmq/commit/0d94e35e805b09c3b4c7404b8a2eeb71a1aff5c4)) +* **worker:** simplify lock extension to one call independent of concurrency ([ebf1aeb](https://github.com/taskforcesh/bullmq/commit/ebf1aeb2400383d0ae90ab68aeb4822aea03ba44)) -### Fix -* fix(flow-producer): process parent with children as empty array, fixes #547 ([`48168f0`](https://github.com/taskforcesh/bullmq/commit/48168f07cbaed7ed522c68d127a0c7d5e4cb380e)) +### Performance Improvements -### Unknown +* **scripts:** reuse keys array to avoid allocations ([feac7b4](https://github.com/taskforcesh/bullmq/commit/feac7b4070a6a3720597af36c43d095e9ea37173)) +* **worker:** improve worker memory consumption ([4846cf1](https://github.com/taskforcesh/bullmq/commit/4846cf1fe3f9ea35f58a679c11706e1a7101c898)) -* remove lowercase changelog ([`daad876`](https://github.com/taskforcesh/bullmq/commit/daad876a973bc2771b000b150e939de77d24cc4e)) +# [3.9.0](https://github.com/taskforcesh/bullmq/compare/v3.8.0...v3.9.0) (2023-02-25) -## v1.25.1 (2021-05-13) +### Features -### Chore +* **worker:** add remove on complete and fail options ([#1703](https://github.com/taskforcesh/bullmq/issues/1703)) ([cf13494](https://github.com/taskforcesh/bullmq/commit/cf1349471dcbf0e43feea9972eaa71d2299d619f)) -* chore(release): 1.25.1 [skip ci] +# [3.8.0](https://github.com/taskforcesh/bullmq/compare/v3.7.2...v3.8.0) (2023-02-23) -## [1.25.1](https://github.com/taskforcesh/bullmq/compare/v1.25.0...v1.25.1) (2021-05-13) ### Bug Fixes -* **addbulk:** should not consider repeat option ([c85357e](https://github.com/taskforcesh/bullmq/commit/c85357e415b9ea66f845f751a4943b5c48c2bb18)) ([`0c50dbf`](https://github.com/taskforcesh/bullmq/commit/0c50dbf958d5778293bfdde5dc2a22c60f6658c3)) +* **worker:** run stalled check directly first time ([f71ec03](https://github.com/taskforcesh/bullmq/commit/f71ec03111a22897cbf2fad39073185e4aeac6d6)) -### Fix -* fix(addbulk): should not consider repeat option ([`c85357e`](https://github.com/taskforcesh/bullmq/commit/c85357e415b9ea66f845f751a4943b5c48c2bb18)) +### Features -### Unknown +* **worker:** add a public method to run the stalled checker ([3159266](https://github.com/taskforcesh/bullmq/commit/3159266ccb002d4fc71b7ee7ac63c465c536dbd1)) +* **worker:** add support to disable stalled checks ([49e860c](https://github.com/taskforcesh/bullmq/commit/49e860c6675853971e992c2945b445660504e3b2)) -* Update README.md ([`1b220b6`](https://github.com/taskforcesh/bullmq/commit/1b220b64b212aa9cc952795d6bb60e9454acca86)) +## [3.7.2](https://github.com/taskforcesh/bullmq/compare/v3.7.1...v3.7.2) (2023-02-23) -## v1.25.0 (2021-05-11) +### Bug Fixes -### Chore +* **worker:** restore failed event job parameter typing ([#1707](https://github.com/taskforcesh/bullmq/issues/1707)) ([44c2203](https://github.com/taskforcesh/bullmq/commit/44c2203ab65d406be9a913254600fe07c83e62d5)) -* chore(release): 1.25.0 [skip ci] +## [3.7.1](https://github.com/taskforcesh/bullmq/compare/v3.7.0...v3.7.1) (2023-02-22) -# [1.25.0](https://github.com/taskforcesh/bullmq/compare/v1.24.5...v1.25.0) (2021-05-11) -### Features +### Bug Fixes -* **job:** add sizeLimit option when creating a job ([f10aeeb](https://github.com/taskforcesh/bullmq/commit/f10aeeb62520d20b31d35440524d147ac4adcc9c)) ([`c687877`](https://github.com/taskforcesh/bullmq/commit/c687877156b49feb5228e472750ad8274a454630)) +* **worker:** failed event receives an optional job parameter ([#1702](https://github.com/taskforcesh/bullmq/issues/1702)) fixes [#1690](https://github.com/taskforcesh/bullmq/issues/1690) ([6009906](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) -### Documentation +# [3.7.0](https://github.com/taskforcesh/bullmq/compare/v3.6.6...v3.7.0) (2023-02-16) -* docs: fix job type in sandbox-processors guide fixes #539 ([`81bbf4a`](https://github.com/taskforcesh/bullmq/commit/81bbf4a7b7d929936ad9c27ead7fc25fb570654a)) -* docs: fix typo in flows.md ([`3d8f042`](https://github.com/taskforcesh/bullmq/commit/3d8f042f3906b38c4f1ee29e88c0414a1a5641ca)) +### Features -* docs(job): add descriptions to public properties ([`86e663b`](https://github.com/taskforcesh/bullmq/commit/86e663beb23e6a5530fa69c076553996708bbfb5)) +* initial python package ([#1673](https://github.com/taskforcesh/bullmq/issues/1673)) ([a97b22f](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) -* docs(joboptions): more documentation on timestamp ([`ee9fb5b`](https://github.com/taskforcesh/bullmq/commit/ee9fb5b1f61a18e06dd7ad37e6dcbdf1d1998169)) +## [3.6.6](https://github.com/taskforcesh/bullmq/compare/v3.6.5...v3.6.6) (2023-02-15) -### Feature -* feat(job): add sizeLimit option when creating a job ([`f10aeeb`](https://github.com/taskforcesh/bullmq/commit/f10aeeb62520d20b31d35440524d147ac4adcc9c)) +### Bug Fixes -### Unknown +* **job:** check jobKey when saving stacktrace ([#1681](https://github.com/taskforcesh/bullmq/issues/1681)) fixes [#1676](https://github.com/taskforcesh/bullmq/issues/1676) ([1856c76](https://github.com/taskforcesh/bullmq/commit/1856c7684c377ca4fd36294cca8e128404be27b8)) -* Merge branch 'master' of https://github.com/taskforcesh/bullmq ([`a544d68`](https://github.com/taskforcesh/bullmq/commit/a544d68446d918957aa5a30a44bc6de79d162ae2)) +## [3.6.5](https://github.com/taskforcesh/bullmq/compare/v3.6.4...v3.6.5) (2023-02-11) -## v1.24.5 (2021-05-08) +### Bug Fixes -### Chore +* infinite worker process spawned for invalid JS file ([a445ba8](https://github.com/taskforcesh/bullmq/commit/a445ba8b7a261b370dec7d88091ae5f5af8b2728)) -* chore(release): 1.24.5 [skip ci] +## [3.6.4](https://github.com/taskforcesh/bullmq/compare/v3.6.3...v3.6.4) (2023-02-09) -## [1.24.5](https://github.com/taskforcesh/bullmq/compare/v1.24.4...v1.24.5) (2021-05-08) ### Bug Fixes -* **deps:** upgrading lodash to 4.17.21 ([6e90c3f](https://github.com/taskforcesh/bullmq/commit/6e90c3f0a3d2735875ebf44457b342629aa14572)) ([`d7f8e47`](https://github.com/taskforcesh/bullmq/commit/d7f8e4704feff803399be8a4771967fdc0dd8f3c)) +* add a maximum block time ([1a2618b](https://github.com/taskforcesh/bullmq/commit/1a2618bc5473288a62dddb85e3cb78d6cdb4f39f)) -* chore: apply lint ([`2b7aea5`](https://github.com/taskforcesh/bullmq/commit/2b7aea5186e3ab3fabc5e56850f5b8a5898940ff)) +## [3.6.3](https://github.com/taskforcesh/bullmq/compare/v3.6.2...v3.6.3) (2023-02-07) -### Documentation -* docs(gitook): fix typo in queuescheduler.md ([`f942364`](https://github.com/taskforcesh/bullmq/commit/f94236431aba016a2dbe957bf9e01573eb2e0cdd)) +### Bug Fixes -### Fix +* **master:** copy type declaration ([23ade6e](https://github.com/taskforcesh/bullmq/commit/23ade6e3e45df14bd3fbc2c3e7be47307b642872)) -* fix(deps): upgrading lodash to 4.17.21 ([`6e90c3f`](https://github.com/taskforcesh/bullmq/commit/6e90c3f0a3d2735875ebf44457b342629aa14572)) +## [3.6.2](https://github.com/taskforcesh/bullmq/compare/v3.6.1...v3.6.2) (2023-02-03) -### Unknown -* Update README.md ([`8b5cf34`](https://github.com/taskforcesh/bullmq/commit/8b5cf349fe47e72c613fe1f46ea7c5275044f240)) +### Bug Fixes +* **redis:** increase minimum default retry time ([d521531](https://github.com/taskforcesh/bullmq/commit/d521531e22ba9eda8ad8d6e8eddf450fdc3f50f4)) -## v1.24.4 (2021-05-07) +## [3.6.1](https://github.com/taskforcesh/bullmq/compare/v3.6.0...v3.6.1) (2023-01-31) -### Chore -* chore(release): 1.24.4 [skip ci] +### Bug Fixes -## [1.24.4](https://github.com/taskforcesh/bullmq/compare/v1.24.3...v1.24.4) (2021-05-07) +* **connection:** apply console.warn in noeviction message ([95f171c](https://github.com/taskforcesh/bullmq/commit/95f171cbc8cdd7d04865618b715dd21229f36a4a)) -### Bug Fixes +# [3.6.0](https://github.com/taskforcesh/bullmq/compare/v3.5.11...v3.6.0) (2023-01-31) -* **cluster:** add redis cluster support ([5a7dd14](https://github.com/taskforcesh/bullmq/commit/5a7dd145bd3ae11850cac6d1b4fb9b01af0e6766)) -* **redisclient:** not reference types from import ([022fc04](https://github.com/taskforcesh/bullmq/commit/022fc042a17c1754af7d74acabb7dd5c397576ab)) ([`4c55cfd`](https://github.com/taskforcesh/bullmq/commit/4c55cfdc011101ec2a9598bf470d0113949f1281)) -### Fix +### Features -* fix(redisclient): not reference types from import ([`022fc04`](https://github.com/taskforcesh/bullmq/commit/022fc042a17c1754af7d74acabb7dd5c397576ab)) +* **job:** allow clearing job's log ([#1600](https://github.com/taskforcesh/bullmq/issues/1600)) ([0ded2d7](https://github.com/taskforcesh/bullmq/commit/0ded2d7709322bf105e0decac44d801ece5615f2)) -* fix(cluster): add redis cluster support ([`5a7dd14`](https://github.com/taskforcesh/bullmq/commit/5a7dd145bd3ae11850cac6d1b4fb9b01af0e6766)) +## [3.5.11](https://github.com/taskforcesh/bullmq/compare/v3.5.10...v3.5.11) (2023-01-27) -## v1.24.3 (2021-05-05) +### Bug Fixes -### Chore +* **error:** remove global prototype toJSON ([#1642](https://github.com/taskforcesh/bullmq/issues/1642)) fixes [#1414](https://github.com/taskforcesh/bullmq/issues/1414) ([d4e7108](https://github.com/taskforcesh/bullmq/commit/d4e7108a37aeabdd3085a26c9daf09cea5976f3e)) -* chore(release): 1.24.3 [skip ci] +## [3.5.10](https://github.com/taskforcesh/bullmq/compare/v3.5.9...v3.5.10) (2023-01-24) -## [1.24.3](https://github.com/taskforcesh/bullmq/compare/v1.24.2...v1.24.3) (2021-05-05) ### Bug Fixes -* **sandbox:** properly redirect stdout ([#525](https://github.com/taskforcesh/bullmq/issues/525)) ([c8642a0](https://github.com/taskforcesh/bullmq/commit/c8642a0724dc3d2f77abc4b5d6d24efa67c1e592)) ([`caacaee`](https://github.com/taskforcesh/bullmq/commit/caacaeef3147871f9dc1e9849dbffbfd6e8101b4)) - -### Fix +* **move-to-finished:** return correct delayUntil ([#1643](https://github.com/taskforcesh/bullmq/issues/1643)) ([c4bf9fa](https://github.com/taskforcesh/bullmq/commit/c4bf9fa6563eda1630d8eb2189b16e9324b01c7f)) -* fix(sandbox): properly redirect stdout (#525) ([`c8642a0`](https://github.com/taskforcesh/bullmq/commit/c8642a0724dc3d2f77abc4b5d6d24efa67c1e592)) +## [3.5.9](https://github.com/taskforcesh/bullmq/compare/v3.5.8...v3.5.9) (2023-01-19) -## v1.24.2 (2021-05-05) +### Bug Fixes -### Chore +* **worker:** fix delayed jobs with concurrency fixes [#1627](https://github.com/taskforcesh/bullmq/issues/1627) ([99a8e6d](https://github.com/taskforcesh/bullmq/commit/99a8e6d3a339be51fb46f69c8afac4ecdebff6d3)) -* chore(release): 1.24.2 [skip ci] +## [3.5.8](https://github.com/taskforcesh/bullmq/compare/v3.5.7...v3.5.8) (2023-01-18) -## [1.24.2](https://github.com/taskforcesh/bullmq/compare/v1.24.1...v1.24.2) (2021-05-05) ### Bug Fixes -* **sandbox:** handle broken processor files ([2326983](https://github.com/taskforcesh/bullmq/commit/23269839af0be2f7cf2a4f6062563d30904bc259)) ([`6bdacb8`](https://github.com/taskforcesh/bullmq/commit/6bdacb8a37b85c0d98fdbf501b044aab97f90e28)) - -### Fix +* **move-to-active:** delete marker when it is moved to active ([#1634](https://github.com/taskforcesh/bullmq/issues/1634)) ([ad1fcea](https://github.com/taskforcesh/bullmq/commit/ad1fcea4500d4ceed51d5d5b0a03dbb5e1735a42)) -* fix(sandbox): handle broken processor files ([`2326983`](https://github.com/taskforcesh/bullmq/commit/23269839af0be2f7cf2a4f6062563d30904bc259)) +## [3.5.7](https://github.com/taskforcesh/bullmq/compare/v3.5.6...v3.5.7) (2023-01-17) -## v1.24.1 (2021-05-05) +### Bug Fixes -### Chore +* **move-to-active:** validate next marker and return delayUntil ([#1630](https://github.com/taskforcesh/bullmq/issues/1630)) ([3cd3305](https://github.com/taskforcesh/bullmq/commit/3cd33052fc711a9ba560c9a431630be5cdd02193)) -* chore(release): 1.24.1 [skip ci] +## [3.5.6](https://github.com/taskforcesh/bullmq/compare/v3.5.5...v3.5.6) (2023-01-13) -## [1.24.1](https://github.com/taskforcesh/bullmq/compare/v1.24.0...v1.24.1) (2021-05-05) ### Bug Fixes -* **queueevents:** add active type fixes [#519](https://github.com/taskforcesh/bullmq/issues/519) ([10af883](https://github.com/taskforcesh/bullmq/commit/10af883db849cf9392b26724903f88752d9be92c)) ([`7679ada`](https://github.com/taskforcesh/bullmq/commit/7679ada2038ae6c3a3bc66a0f46604e1e47e4950)) - -* chore: replace tslint with eslint ([`5770aef`](https://github.com/taskforcesh/bullmq/commit/5770aef2cc8fd450b619f154236b77b1a0181605)) +* **worker:** add max concurrency from the beginning ([#1597](https://github.com/taskforcesh/bullmq/issues/1597)) fixes [#1589](https://github.com/taskforcesh/bullmq/issues/1589) ([6f49db3](https://github.com/taskforcesh/bullmq/commit/6f49db3fb15119d13f99cd83d49f2a7bdcb614cd)) -### Fix +## [3.5.5](https://github.com/taskforcesh/bullmq/compare/v3.5.4...v3.5.5) (2023-01-10) -* fix(queueevents): add active type fixes #519 ([`10af883`](https://github.com/taskforcesh/bullmq/commit/10af883db849cf9392b26724903f88752d9be92c)) +### Bug Fixes -## v1.24.0 (2021-05-03) +* circular references ([#1622](https://github.com/taskforcesh/bullmq/issues/1622)) ([f607ec7](https://github.com/taskforcesh/bullmq/commit/f607ec7530fb4430e8cab7ed325583bd9d171ccf)) -### Chore +## [3.5.4](https://github.com/taskforcesh/bullmq/compare/v3.5.3...v3.5.4) (2023-01-09) -* chore(release): 1.24.0 [skip ci] -# [1.24.0](https://github.com/taskforcesh/bullmq/compare/v1.23.1...v1.24.0) (2021-05-03) +### Bug Fixes -### Features +* [#1603](https://github.com/taskforcesh/bullmq/issues/1603) performance issues in `remove()` ([#1607](https://github.com/taskforcesh/bullmq/issues/1607)) ([2541215](https://github.com/taskforcesh/bullmq/commit/2541215bcf81dcd52eaefa02530c3812a5135fbf)) -* add option for non-blocking getNextJob ([13ce2cf](https://github.com/taskforcesh/bullmq/commit/13ce2cfd4ccd64f45567df31de11af95b0fe67d9)) ([`b75b4f1`](https://github.com/taskforcesh/bullmq/commit/b75b4f1b0d63a83f93870c539201aae486782756)) +## [3.5.3](https://github.com/taskforcesh/bullmq/compare/v3.5.2...v3.5.3) (2023-01-07) -### Feature -* feat: add option for non-blocking getNextJob ([`13ce2cf`](https://github.com/taskforcesh/bullmq/commit/13ce2cfd4ccd64f45567df31de11af95b0fe67d9)) +### Bug Fixes +* **delayed:** remove marker after being consumed ([#1620](https://github.com/taskforcesh/bullmq/issues/1620)) fixes [#1615](https://github.com/taskforcesh/bullmq/issues/1615) ([9fce0f0](https://github.com/taskforcesh/bullmq/commit/9fce0f05e5acc1918a276b03e8cb9c16083cb509)) -## v1.23.1 (2021-05-03) +## [3.5.2](https://github.com/taskforcesh/bullmq/compare/v3.5.1...v3.5.2) (2023-01-04) -### Chore -* chore(release): 1.23.1 [skip ci] +### Performance Improvements -## [1.23.1](https://github.com/taskforcesh/bullmq/compare/v1.23.0...v1.23.1) (2021-05-03) +* **get-dependencies:** replace slow object destructuring with single object ([#1612](https://github.com/taskforcesh/bullmq/issues/1612)) ([621748e](https://github.com/taskforcesh/bullmq/commit/621748ec7727b46ce57eb9d2b46ef981874cdf4c)) -### Bug Fixes +## [3.5.1](https://github.com/taskforcesh/bullmq/compare/v3.5.0...v3.5.1) (2022-12-23) -* add return type for job.waitUntilFinished() ([59ede97](https://github.com/taskforcesh/bullmq/commit/59ede976061a738503f70d9eb0c92a4b1d6ae4a3)) ([`ed35d24`](https://github.com/taskforcesh/bullmq/commit/ed35d24d1f1e8f810a0a4825c6d7e3732772d7c8)) -### Fix +### Bug Fixes -* fix: add return type for job.waitUntilFinished() ([`59ede97`](https://github.com/taskforcesh/bullmq/commit/59ede976061a738503f70d9eb0c92a4b1d6ae4a3)) +* **connection:** throw exception if using keyPrefix in ioredis ([eb6a130](https://github.com/taskforcesh/bullmq/commit/eb6a1305541547725e1717eefe2b678bc445f4d0)) +* **connection:** use includes to check for upstash more reliably ([12efb5c](https://github.com/taskforcesh/bullmq/commit/12efb5c539cb6f031ea6f3a80e4128d2e556e627)) +# [3.5.0](https://github.com/taskforcesh/bullmq/compare/v3.4.2...v3.5.0) (2022-12-20) -## v1.23.0 (2021-04-30) -### Chore +### Bug Fixes -* chore(release): 1.23.0 [skip ci] +* **job:** fetch parent before job moves to complete ([#1580](https://github.com/taskforcesh/bullmq/issues/1580)) ([6a6c0dc](https://github.com/taskforcesh/bullmq/commit/6a6c0dca30bb0a2417e0c62d4c80202c750322dd)) +* **sandbox:** throw error when no exported function ([#1588](https://github.com/taskforcesh/bullmq/issues/1588)) fixes [#1587](https://github.com/taskforcesh/bullmq/issues/1587) ([c031891](https://github.com/taskforcesh/bullmq/commit/c03189184c8eeeb324f005b86e93d114abbe2154)) -# [1.23.0](https://github.com/taskforcesh/bullmq/compare/v1.22.2...v1.23.0) (2021-04-30) ### Features -* **job:** pass parent opts to addBulk ([7f21615](https://github.com/taskforcesh/bullmq/commit/7f216153293e45c4f33f2592561c925ca4464d44)) ([`3283af2`](https://github.com/taskforcesh/bullmq/commit/3283af26c1fead3c3395bf2fc82790cb0772380f)) - -### Feature +* **queue:** add getJobState method ([#1593](https://github.com/taskforcesh/bullmq/issues/1593)) ref [#1532](https://github.com/taskforcesh/bullmq/issues/1532) ([b741e84](https://github.com/taskforcesh/bullmq/commit/b741e8456f262b51aa7c68f571c76a3c54d02d37)) -* feat(job): pass parent opts to addBulk ([`7f21615`](https://github.com/taskforcesh/bullmq/commit/7f216153293e45c4f33f2592561c925ca4464d44)) +## [3.4.2](https://github.com/taskforcesh/bullmq/compare/v3.4.1...v3.4.2) (2022-12-15) -## v1.22.2 (2021-04-29) +### Performance Improvements -### Chore +* **counts:** delete delayed marker when needed ([#1583](https://github.com/taskforcesh/bullmq/issues/1583)) ([cc26f1c](https://github.com/taskforcesh/bullmq/commit/cc26f1cd550de76c7588d3a98187b80ee78c40c4)) +* **get-children-values:** replace slow object destructuring with single object ([#1586](https://github.com/taskforcesh/bullmq/issues/1586)) ([857d403](https://github.com/taskforcesh/bullmq/commit/857d40377a6eb2c0101e6d16d9085ecd4b52b016)) -* chore(release): 1.22.2 [skip ci] +## [3.4.1](https://github.com/taskforcesh/bullmq/compare/v3.4.0...v3.4.1) (2022-12-10) -## [1.22.2](https://github.com/taskforcesh/bullmq/compare/v1.22.1...v1.22.2) (2021-04-29) ### Bug Fixes -* add missing Redis Cluster types fixes [#406](https://github.com/taskforcesh/bullmq/issues/406) ([07743ff](https://github.com/taskforcesh/bullmq/commit/07743ff310ad716802afdd5bdc6844eb5296318e)) ([`277997d`](https://github.com/taskforcesh/bullmq/commit/277997d0162761921870828e6bf0073d177dc1a4)) - -### Fix +* **exponential:** respect exponential backoff delay ([#1581](https://github.com/taskforcesh/bullmq/issues/1581)) ([145dd32](https://github.com/taskforcesh/bullmq/commit/145dd329bb9f8254b404f4c5fbf7a50359202d37)) +* **get-jobs:** filter marker ([#1551](https://github.com/taskforcesh/bullmq/issues/1551)) ([4add0ef](https://github.com/taskforcesh/bullmq/commit/4add0efa7857cc2f7b6d3c0c78a7f82cb7a46933)) -* fix: add missing Redis Cluster types fixes #406 ([`07743ff`](https://github.com/taskforcesh/bullmq/commit/07743ff310ad716802afdd5bdc6844eb5296318e)) +# [3.4.0](https://github.com/taskforcesh/bullmq/compare/v3.3.5...v3.4.0) (2022-12-09) -## v1.22.1 (2021-04-28) +### Features -### Chore +* **worker:** add ready event for blockingConnection ([#1577](https://github.com/taskforcesh/bullmq/issues/1577)) ([992cc9e](https://github.com/taskforcesh/bullmq/commit/992cc9e9b3046185d3b67f2cc956f30337f458e1)) -* chore(release): 1.22.1 [skip ci] +## [3.3.5](https://github.com/taskforcesh/bullmq/compare/v3.3.4...v3.3.5) (2022-12-08) -## [1.22.1](https://github.com/taskforcesh/bullmq/compare/v1.22.0...v1.22.1) (2021-04-28) ### Bug Fixes -* **addjob:** fix redis cluster CROSSSLOT ([a5fd1d7](https://github.com/taskforcesh/bullmq/commit/a5fd1d7a0713585d11bd862bfe2d426d5242bd3c)) ([`b34ccd1`](https://github.com/taskforcesh/bullmq/commit/b34ccd1a91f20354ec7a517c54ba4b0ea708f3d3)) - -* chore: barrel export of FlowJob interface ([`c13da36`](https://github.com/taskforcesh/bullmq/commit/c13da36f939f42b8e72a499c5d0b495d7fde8a14)) +* **worker:** add token postfix ([#1575](https://github.com/taskforcesh/bullmq/issues/1575)) ([1d3e368](https://github.com/taskforcesh/bullmq/commit/1d3e368021041bb9861761c86fe3e04914b0c52f)) -### Fix - -* fix(addjob): fix redis cluster CROSSSLOT ([`a5fd1d7`](https://github.com/taskforcesh/bullmq/commit/a5fd1d7a0713585d11bd862bfe2d426d5242bd3c)) +## [3.3.4](https://github.com/taskforcesh/bullmq/compare/v3.3.3...v3.3.4) (2022-12-07) -## v1.22.0 (2021-04-28) +### Bug Fixes -### Chore +* **worker:** try catch setname call ([#1576](https://github.com/taskforcesh/bullmq/issues/1576)) fixes [#1574](https://github.com/taskforcesh/bullmq/issues/1574) ([0c42fd8](https://github.com/taskforcesh/bullmq/commit/0c42fd8c07dbac7ace81e97e45440af93fc622a5)) -* chore(release): 1.22.0 [skip ci] +## [3.3.3](https://github.com/taskforcesh/bullmq/compare/v3.3.2...v3.3.3) (2022-12-07) -# [1.22.0](https://github.com/taskforcesh/bullmq/compare/v1.21.0...v1.22.0) (2021-04-28) -### Features +### Bug Fixes -* **jobcreate:** allow passing parent in job.create ([ede3626](https://github.com/taskforcesh/bullmq/commit/ede3626b65fb5d3f4cebc55c813e9fa4b482b887)) ([`a7cb577`](https://github.com/taskforcesh/bullmq/commit/a7cb57704e4662b15a49228bbee56b346ee56d06)) +* do not allow move from active to wait if not owner of the job ([dc1a307](https://github.com/taskforcesh/bullmq/commit/dc1a3077d1521c5dc99824a7fc05d17da03906bc)) -* chore(deps): add chai-as-promised dev dependency ([`51457cf`](https://github.com/taskforcesh/bullmq/commit/51457cfd38ec05f32aaef7f5bac0aaf32518827a)) +## [3.3.2](https://github.com/taskforcesh/bullmq/compare/v3.3.1...v3.3.2) (2022-12-05) -### Feature -* feat(jobcreate): allow passing parent in job.create ([`ede3626`](https://github.com/taskforcesh/bullmq/commit/ede3626b65fb5d3f4cebc55c813e9fa4b482b887)) +### Bug Fixes -### Test +* floor pexpire to integer ([1d5de42](https://github.com/taskforcesh/bullmq/commit/1d5de425a19ebf879a8f9a7e0543d87a4d358be1)) -* test: using rejectedWith in expect ([`c3ae5dc`](https://github.com/taskforcesh/bullmq/commit/c3ae5dc7afa43c80d3dc1017a132fd078bfaa08f)) +## [3.3.1](https://github.com/taskforcesh/bullmq/compare/v3.3.0...v3.3.1) (2022-12-05) -## v1.21.0 (2021-04-26) +### Bug Fixes -### Chore +* **get-workers:** set name when ready event in connection ([#1564](https://github.com/taskforcesh/bullmq/issues/1564)) ([de93c17](https://github.com/taskforcesh/bullmq/commit/de93c172901650e1666c48423a39076f2c7b9c7b)) +* **job:** console warn custom job ids when they represent integers ([#1569](https://github.com/taskforcesh/bullmq/issues/1569)) ([6e677d2](https://github.com/taskforcesh/bullmq/commit/6e677d2800957b368bef4247b8e4328c5758f262)) -* chore(release): 1.21.0 [skip ci] +# [3.3.0](https://github.com/taskforcesh/bullmq/compare/v3.2.5...v3.3.0) (2022-12-04) -# [1.21.0](https://github.com/taskforcesh/bullmq/compare/v1.20.6...v1.21.0) (2021-04-26) ### Features -* add typing for addNextRepeatableJob ([a3be937](https://github.com/taskforcesh/bullmq/commit/a3be9379e29ae3e01264e2269e8b03aa614fd42c)) ([`f4d89f0`](https://github.com/taskforcesh/bullmq/commit/f4d89f0d6b8b5461e3738a71f4554f12d68db4e9)) +* **queue-events:** support duplicated event ([#1549](https://github.com/taskforcesh/bullmq/issues/1549)) ([18bc4eb](https://github.com/taskforcesh/bullmq/commit/18bc4eb50432f8aa27f2395750a7617317b66ca1)) -### Feature - -* feat: add typing for addNextRepeatableJob ([`a3be937`](https://github.com/taskforcesh/bullmq/commit/a3be9379e29ae3e01264e2269e8b03aa614fd42c)) +## [3.2.5](https://github.com/taskforcesh/bullmq/compare/v3.2.4...v3.2.5) (2022-12-04) -## v1.20.6 (2021-04-25) +### Bug Fixes -### Chore +* **add-job:** throw error when jobId represents an integer ([#1556](https://github.com/taskforcesh/bullmq/issues/1556)) ([db617d7](https://github.com/taskforcesh/bullmq/commit/db617d79e8f55b5c9e0df4b6bfd4247612016da1)) -* chore(release): 1.20.6 [skip ci] +## [3.2.4](https://github.com/taskforcesh/bullmq/compare/v3.2.3...v3.2.4) (2022-11-29) -## [1.20.6](https://github.com/taskforcesh/bullmq/compare/v1.20.5...v1.20.6) (2021-04-25) ### Bug Fixes -* **movetocompleted:** should not complete before children ([812ff66](https://github.com/taskforcesh/bullmq/commit/812ff664b3e162dd87831ca04ebfdb783cc7ae5b)) ([`7320304`](https://github.com/taskforcesh/bullmq/commit/73203048a5ff085a5d6fe006a1173ca179b8fd5a)) +* **add-job:** do not update job that already exist ([#1550](https://github.com/taskforcesh/bullmq/issues/1550)) ([26f6311](https://github.com/taskforcesh/bullmq/commit/26f6311cd0d2b936e404d0abebca9637f314a209)) -### Fix - -* fix(movetocompleted): should not complete before children ([`812ff66`](https://github.com/taskforcesh/bullmq/commit/812ff664b3e162dd87831ca04ebfdb783cc7ae5b)) +## [3.2.3](https://github.com/taskforcesh/bullmq/compare/v3.2.2...v3.2.3) (2022-11-29) -## v1.20.5 (2021-04-23) +### Bug Fixes -### Chore +* **rate-limit:** delete rateLimiterKey when 0 ([#1553](https://github.com/taskforcesh/bullmq/issues/1553)) ([0b88e5b](https://github.com/taskforcesh/bullmq/commit/0b88e5b94b4a0dc0d4000f7fd4b327f402248ad2)) -* chore(release): 1.20.5 [skip ci] +## [3.2.2](https://github.com/taskforcesh/bullmq/compare/v3.2.1...v3.2.2) (2022-11-15) -## [1.20.5](https://github.com/taskforcesh/bullmq/compare/v1.20.4...v1.20.5) (2021-04-23) ### Bug Fixes -* **obliterate:** correctly remove many jobs ([b5ae4ce](https://github.com/taskforcesh/bullmq/commit/b5ae4ce92aeaf000408ffbbcd22d829cee20f2f8)) ([`dacd0c6`](https://github.com/taskforcesh/bullmq/commit/dacd0c66efdba779875239fcab3d18dd6a45e052)) - -### Fix - -* fix(obliterate): correctly remove many jobs ([`b5ae4ce`](https://github.com/taskforcesh/bullmq/commit/b5ae4ce92aeaf000408ffbbcd22d829cee20f2f8)) +* **rate-limit:** check job is active before moving to wait ([9502167](https://github.com/taskforcesh/bullmq/commit/9502167bb0d9008fc8811ff7980dc8126fbc5ac2)) +## [3.2.1](https://github.com/taskforcesh/bullmq/compare/v3.2.0...v3.2.1) (2022-11-15) -## v1.20.4 (2021-04-23) -### Chore +### Bug Fixes -* chore(release): 1.20.4 [skip ci] +* **worker:** consider removed jobs in failed event ([#1500](https://github.com/taskforcesh/bullmq/issues/1500)) ([8704b9a](https://github.com/taskforcesh/bullmq/commit/8704b9a10575fd7df738296f7156057123592b86)) -## [1.20.4](https://github.com/taskforcesh/bullmq/compare/v1.20.3...v1.20.4) (2021-04-23) +# [3.2.0](https://github.com/taskforcesh/bullmq/compare/v3.1.3...v3.2.0) (2022-11-09) -### Bug Fixes -* remove internal deps on barrel fixes [#469](https://github.com/taskforcesh/bullmq/issues/469) ([#495](https://github.com/taskforcesh/bullmq/issues/495)) ([60dbeed](https://github.com/taskforcesh/bullmq/commit/60dbeed7ff1d9b6cb0e35590713fee8a7be09477)) ([`9cf71f6`](https://github.com/taskforcesh/bullmq/commit/9cf71f66b965a7cd4d92faf239a0750065b53e1d)) +### Features -### Fix +* **flow:** move parent to delayed when delay option is provided ([#1501](https://github.com/taskforcesh/bullmq/issues/1501)) ([2f3e5d5](https://github.com/taskforcesh/bullmq/commit/2f3e5d54f0797bf0d1adf14dbb2b51ad9f9183ca)) -* fix: remove internal deps on barrel fixes #469 (#495) ([`60dbeed`](https://github.com/taskforcesh/bullmq/commit/60dbeed7ff1d9b6cb0e35590713fee8a7be09477)) +## [3.1.3](https://github.com/taskforcesh/bullmq/compare/v3.1.2...v3.1.3) (2022-11-04) -## v1.20.3 (2021-04-23) +### Bug Fixes -### Chore +* **delayed:** better handling of marker id ([816376e](https://github.com/taskforcesh/bullmq/commit/816376e7880ae0eafe85a1f9a5aef9fdfe3031a9)) +* **delayed:** notify workers a delayed job is closer in time fixes [#1505](https://github.com/taskforcesh/bullmq/issues/1505) ([6ced4d0](https://github.com/taskforcesh/bullmq/commit/6ced4d06c5c9c8342c9e4f7920a21826871eac1b)) +* **job:** better error message in moveToFailed ([4e9f5bb](https://github.com/taskforcesh/bullmq/commit/4e9f5bb90f87c66eca959ffc9b7a09e05908c2d9)) +* **moveToFinish:** always promote delayed jobs ([7610cc3](https://github.com/taskforcesh/bullmq/commit/7610cc37d4695a885043c251990e153d4ce4440f)) +* **moveToFinished:** revert move promoteDelayedJobs ([7d780db](https://github.com/taskforcesh/bullmq/commit/7d780dbc1d7728ab7b762a5578871b31f27ff80c)) -* chore(release): 1.20.3 [skip ci] +## [3.1.2](https://github.com/taskforcesh/bullmq/compare/v3.1.1...v3.1.2) (2022-11-04) -## [1.20.3](https://github.com/taskforcesh/bullmq/compare/v1.20.2...v1.20.3) (2021-04-23) ### Bug Fixes -* **flows:** correct typings fixes [#492](https://github.com/taskforcesh/bullmq/issues/492) ([a77f80b](https://github.com/taskforcesh/bullmq/commit/a77f80bc07e7627f512323f0dcc9141fe408809e)) ([`3b7c038`](https://github.com/taskforcesh/bullmq/commit/3b7c038a7db24f63b48cbd1d231a6740fef4ea70)) - -### Fix - -* fix(flows): correct typings fixes #492 ([`a77f80b`](https://github.com/taskforcesh/bullmq/commit/a77f80bc07e7627f512323f0dcc9141fe408809e)) +* **repeat:** allow easy migration from bullmq <3 to >=3 ([e17b886](https://github.com/taskforcesh/bullmq/commit/e17b886d3e2978e25f23f1a99b88562537a08576)) +## [3.1.1](https://github.com/taskforcesh/bullmq/compare/v3.1.0...v3.1.1) (2022-11-03) -## v1.20.2 (2021-04-22) -### Chore +### Bug Fixes -* chore(release): 1.20.2 [skip ci] +* **change-delay:** remove delayed stream ([#1509](https://github.com/taskforcesh/bullmq/issues/1509)) ([6e4809e](https://github.com/taskforcesh/bullmq/commit/6e4809e5d8f7ef35bc0871d21bfcdcb0f1f316c6)) +* **worker:** restore dynamic concurrency change ([#1515](https://github.com/taskforcesh/bullmq/issues/1515)) ([fdac5c2](https://github.com/taskforcesh/bullmq/commit/fdac5c27607dfaaaad1c1256c47f2ae448efcd21)) -## [1.20.2](https://github.com/taskforcesh/bullmq/compare/v1.20.1...v1.20.2) (2021-04-22) +# [3.1.0](https://github.com/taskforcesh/bullmq/compare/v3.0.1...v3.1.0) (2022-11-02) -### Bug Fixes -* **movetodelayed:** check if job is in active state ([4e63f70](https://github.com/taskforcesh/bullmq/commit/4e63f70aac367d4dd695bbe07c72a08a82a65d97)) ([`582ae51`](https://github.com/taskforcesh/bullmq/commit/582ae517b979d9d07a9c7937c6ff6d3f449c74e9)) +### Features -### Fix +* **workers:** better error message for missing lock ([bf1d086](https://github.com/taskforcesh/bullmq/commit/bf1d0860c70bcc2b604d02ca47e5db64f962d71d)) -* fix(movetodelayed): check if job is in active state ([`4e63f70`](https://github.com/taskforcesh/bullmq/commit/4e63f70aac367d4dd695bbe07c72a08a82a65d97)) +## [3.0.1](https://github.com/taskforcesh/bullmq/compare/v3.0.0...v3.0.1) (2022-11-02) -## v1.20.1 (2021-04-22) +### Bug Fixes -### Chore +* **move-to-delayed:** consider promoting delayed jobs ([#1493](https://github.com/taskforcesh/bullmq/issues/1493)) ([909da2b](https://github.com/taskforcesh/bullmq/commit/909da2bc2718a588379b3fdd9791bc8e51ad1dad)) +* **retry-job:** consider promoting delayed jobs ([#1508](https://github.com/taskforcesh/bullmq/issues/1508)) ([d0b3412](https://github.com/taskforcesh/bullmq/commit/d0b3412d222449c24ab36068a791d08ea19ed922)) -* chore(release): 1.20.1 [skip ci] +# [3.0.0](https://github.com/taskforcesh/bullmq/compare/v2.4.0...v3.0.0) (2022-10-25) -## [1.20.1](https://github.com/taskforcesh/bullmq/compare/v1.20.0...v1.20.1) (2021-04-22) ### Bug Fixes -* **worker:** make token optional in processor function fixes [#490](https://github.com/taskforcesh/bullmq/issues/490) ([3940bd7](https://github.com/taskforcesh/bullmq/commit/3940bd71c6faf3bd5fce572b9c1f11cb5b5d2123)) ([`77cc94b`](https://github.com/taskforcesh/bullmq/commit/77cc94b528f1efb35639eef4a2960c8703f9120b)) +* **backoff:** handle backoff strategy as function ([#1463](https://github.com/taskforcesh/bullmq/issues/1463)) ([3640269](https://github.com/taskforcesh/bullmq/commit/36402691a3c7fa500f07e2e11a28318099bdb909)) +* **repeat:** remove cron in favor of pattern option ([#1456](https://github.com/taskforcesh/bullmq/issues/1456)) ([3cc150e](https://github.com/taskforcesh/bullmq/commit/3cc150e32cb5971ad4ba6ff91246aaf75296c165)) -* chore(npm): just publish dist files (#486) ([`1b06de3`](https://github.com/taskforcesh/bullmq/commit/1b06de395d36a86a9d8e4227e822eb014dafad2c)) -### Fix +### Features -* fix(worker): make token optional in processor function fixes #490 ([`3940bd7`](https://github.com/taskforcesh/bullmq/commit/3940bd71c6faf3bd5fce572b9c1f11cb5b5d2123)) +* add support for dynamic rate limiting ([2d51d2b](https://github.com/taskforcesh/bullmq/commit/2d51d2b33ef49059503e1bca7a582c71f6861ef4)) +* **rate-limit:** remove group key support and improve global rate limit ([81f780a](https://github.com/taskforcesh/bullmq/commit/81f780aeed81e670107d01d01265d407a30e2a62)) -## v1.20.0 (2021-04-21) +### BREAKING CHANGES -### Chore +* **rate-limit:** limit by group keys has been removed in favor +of a much simpler and efficent rate-limit implementation. +* **backoff:** object mapping is replaced by single function -* chore(release): 1.20.0 [skip ci] +# [2.4.0](https://github.com/taskforcesh/bullmq/compare/v2.3.2...v2.4.0) (2022-10-24) -# [1.20.0](https://github.com/taskforcesh/bullmq/compare/v1.19.3...v1.20.0) (2021-04-21) ### Features -* **worker:** passing token in processor function ([2249724](https://github.com/taskforcesh/bullmq/commit/2249724b1bc6fbf40b0291400011f201fd02dab3)) ([`c96032a`](https://github.com/taskforcesh/bullmq/commit/c96032a425a155a8a94c9532d61c70617e4a62d5)) - -### Feature +* **flows:** allow parent on root jobs in addBulk method ([#1488](https://github.com/taskforcesh/bullmq/issues/1488)) ref [#1480](https://github.com/taskforcesh/bullmq/issues/1480) ([92308e5](https://github.com/taskforcesh/bullmq/commit/92308e53acf14e0ce108d94ecd616633ac93e35d)) -* feat(worker): passing token in processor function ([`2249724`](https://github.com/taskforcesh/bullmq/commit/2249724b1bc6fbf40b0291400011f201fd02dab3)) +## [2.3.2](https://github.com/taskforcesh/bullmq/compare/v2.3.1...v2.3.2) (2022-10-18) -## v1.19.3 (2021-04-20) +### Bug Fixes -### Chore +* **job:** send failed event when failParentOnFailure ([#1481](https://github.com/taskforcesh/bullmq/issues/1481)) fixes [#1469](https://github.com/taskforcesh/bullmq/issues/1469) ([b20eb6f](https://github.com/taskforcesh/bullmq/commit/b20eb6f65c7e2c4593d5f9f4d4b940f780bf26d2)) -* chore(release): 1.19.3 [skip ci] +## [2.3.1](https://github.com/taskforcesh/bullmq/compare/v2.3.0...v2.3.1) (2022-10-13) -## [1.19.3](https://github.com/taskforcesh/bullmq/compare/v1.19.2...v1.19.3) (2021-04-20) ### Bug Fixes -* **movetocompleted:** throw an error if job is not in active state ([c2fe5d2](https://github.com/taskforcesh/bullmq/commit/c2fe5d292fcf8ac2e53906c30282df69d43321b1)) ([`0faf083`](https://github.com/taskforcesh/bullmq/commit/0faf08379d6604973686ea1e3643a9603661823c)) - -### Fix +* **redis:** replace throw exception by console.error ([fafa2f8](https://github.com/taskforcesh/bullmq/commit/fafa2f89e796796f950e6c4abbdda4d3d71ad1b0)) -* fix(movetocompleted): throw an error if job is not in active state ([`c2fe5d2`](https://github.com/taskforcesh/bullmq/commit/c2fe5d292fcf8ac2e53906c30282df69d43321b1)) +# [2.3.0](https://github.com/taskforcesh/bullmq/compare/v2.2.1...v2.3.0) (2022-10-13) -### Unknown -* GitBook: [master] one page modified ([`4f6e8c9`](https://github.com/taskforcesh/bullmq/commit/4f6e8c9ed6127a420f5d9fa817d243d0912038e6)) +### Features +* **redis-connection:** allow providing scripts for extension ([#1472](https://github.com/taskforcesh/bullmq/issues/1472)) ([f193cfb](https://github.com/taskforcesh/bullmq/commit/f193cfb1830e127f9fd47a969baad30011a0e3a4)) -## v1.19.2 (2021-04-19) +## [2.2.1](https://github.com/taskforcesh/bullmq/compare/v2.2.0...v2.2.1) (2022-10-11) -### Chore -* chore(release): 1.19.2 [skip ci] +### Performance Improvements -## [1.19.2](https://github.com/taskforcesh/bullmq/compare/v1.19.1...v1.19.2) (2021-04-19) +* **scripts:** pre-build scripts ([#1441](https://github.com/taskforcesh/bullmq/issues/1441)) ([7f72603](https://github.com/taskforcesh/bullmq/commit/7f72603d463f705d0617898cb221f832c49a4aa3)) -### Bug Fixes +# [2.2.0](https://github.com/taskforcesh/bullmq/compare/v2.1.3...v2.2.0) (2022-10-10) -* **worker:** close base class connection [#451](https://github.com/taskforcesh/bullmq/issues/451) ([0875306](https://github.com/taskforcesh/bullmq/commit/0875306ae801a7cbfe04758dc2481cb86ca2ef69)) ([`7521543`](https://github.com/taskforcesh/bullmq/commit/75215430ab1eb1ac11d447621e42579e026a26b5)) -### Fix +### Bug Fixes -* fix(worker): close base class connection #451 ([`0875306`](https://github.com/taskforcesh/bullmq/commit/0875306ae801a7cbfe04758dc2481cb86ca2ef69)) +* **connection:** validate array of strings in Cluster ([#1468](https://github.com/taskforcesh/bullmq/issues/1468)) fixes [#1467](https://github.com/taskforcesh/bullmq/issues/1467) ([8355182](https://github.com/taskforcesh/bullmq/commit/8355182a372b68ec62e9c3953bacbd69e0abfc74)) -## v1.19.1 (2021-04-19) +### Features -### Chore +* **flow-producer:** allow parent opts in root job when adding a flow ([#1110](https://github.com/taskforcesh/bullmq/issues/1110)) ref [#1097](https://github.com/taskforcesh/bullmq/issues/1097) ([3c3ac71](https://github.com/taskforcesh/bullmq/commit/3c3ac718ad84f6bd0cc1575013c948e767b46f38)) -* chore(release): 1.19.1 [skip ci] +## [2.1.3](https://github.com/taskforcesh/bullmq/compare/v2.1.2...v2.1.3) (2022-09-30) -## [1.19.1](https://github.com/taskforcesh/bullmq/compare/v1.19.0...v1.19.1) (2021-04-19) ### Bug Fixes -* remove repeatable with obliterate ([1c5e581](https://github.com/taskforcesh/bullmq/commit/1c5e581a619ba707863c2a6e9f3e5f6eadfbe64f)) ([`8bccbc3`](https://github.com/taskforcesh/bullmq/commit/8bccbc39412da0c6ff9a2279df7031a3b40763f8)) +* **worker:** clear stalled jobs timer when closing worker ([1567a0d](https://github.com/taskforcesh/bullmq/commit/1567a0df0ca3c8d43a18990fe488888f4ff68040)) -* chore(deps): bump ssri from 6.0.1 to 6.0.2 +## [2.1.2](https://github.com/taskforcesh/bullmq/compare/v2.1.1...v2.1.2) (2022-09-29) -Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2. -- [Release notes](https://github.com/npm/ssri/releases) -- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md) -- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2) -Signed-off-by: dependabot[bot] <support@github.com> ([`14b2d5e`](https://github.com/taskforcesh/bullmq/commit/14b2d5e2a882f38158b5037eae8ab0e55494bcdb)) +### Bug Fixes -### Fix +* **getters:** fix return type of getJobLogs ([d452927](https://github.com/taskforcesh/bullmq/commit/d4529278c59b2c94eee604c7d4455acc490679e9)) -* fix: remove repeatable with obliterate ([`1c5e581`](https://github.com/taskforcesh/bullmq/commit/1c5e581a619ba707863c2a6e9f3e5f6eadfbe64f)) +## [2.1.1](https://github.com/taskforcesh/bullmq/compare/v2.1.0...v2.1.1) (2022-09-28) -## v1.19.0 (2021-04-19) +### Bug Fixes -### Chore +* **sandbox:** get open port using built-in module instead of get-port ([#1446](https://github.com/taskforcesh/bullmq/issues/1446)) ([6db6288](https://github.com/taskforcesh/bullmq/commit/6db628868a9d64c5a3e47d1c9201017e6d05c1ae)) -* chore(release): 1.19.0 [skip ci] +# [2.1.0](https://github.com/taskforcesh/bullmq/compare/v2.0.2...v2.1.0) (2022-09-23) -# [1.19.0](https://github.com/taskforcesh/bullmq/compare/v1.18.2...v1.19.0) (2021-04-19) ### Features -* add workerDelay option to limiter ([9b6ab8a](https://github.com/taskforcesh/bullmq/commit/9b6ab8ad4bc0a94068f3bc707ad9c0ed01596068)) ([`cee7a02`](https://github.com/taskforcesh/bullmq/commit/cee7a02d8b08fea11bdff26c896fd2afcc82468d)) - -### Feature +* **job-options:** add failParentOnFailure option ([#1339](https://github.com/taskforcesh/bullmq/issues/1339)) ([65e5c36](https://github.com/taskforcesh/bullmq/commit/65e5c3678771f26555c9128bdb908dd62e3584f9)) -* feat: add workerDelay option to limiter ([`9b6ab8a`](https://github.com/taskforcesh/bullmq/commit/9b6ab8ad4bc0a94068f3bc707ad9c0ed01596068)) - -### Unknown - -* GitBook: [master] 39 pages modified ([`3becac3`](https://github.com/taskforcesh/bullmq/commit/3becac377a13eaa0c66d8f8547a206763b1605cf)) +## [2.0.2](https://github.com/taskforcesh/bullmq/compare/v2.0.1...v2.0.2) (2022-09-22) -## v1.18.2 (2021-04-16) +### Bug Fixes -### Chore +* **job:** update delay value when moving to wait ([#1436](https://github.com/taskforcesh/bullmq/issues/1436)) ([9560915](https://github.com/taskforcesh/bullmq/commit/95609158c1800cf661f22ad7995541fb9474826a)) -* chore(release): 1.18.2 [skip ci] +## [2.0.1](https://github.com/taskforcesh/bullmq/compare/v2.0.0...v2.0.1) (2022-09-21) -## [1.18.2](https://github.com/taskforcesh/bullmq/compare/v1.18.1...v1.18.2) (2021-04-16) ### Bug Fixes -* add parentKey property to Job ([febc60d](https://github.com/taskforcesh/bullmq/commit/febc60dba94c29b85be3e1bc2547fa83ed932806)) ([`bc66de0`](https://github.com/taskforcesh/bullmq/commit/bc66de0678ccf93ff8add2e20e4b70870e7b641a)) - -### Fix +* **connection:** throw error when no noeviction policy ([3468390](https://github.com/taskforcesh/bullmq/commit/3468390dd6331291f4cf71a54c32028a06d1d99e)) -* fix: add parentKey property to Job ([`febc60d`](https://github.com/taskforcesh/bullmq/commit/febc60dba94c29b85be3e1bc2547fa83ed932806)) -### Unknown +### Performance Improvements -* GitBook: [master] one page modified ([`b0d33c5`](https://github.com/taskforcesh/bullmq/commit/b0d33c51e80dd3706596af57f553b4086bcdee6d)) +* **events:** remove data and opts from added event ([e13d4b8](https://github.com/taskforcesh/bullmq/commit/e13d4b8e0c4f99203f4249ccc86e369d124ff483)) -* GitBook: [master] 40 pages modified ([`498073d`](https://github.com/taskforcesh/bullmq/commit/498073dabb106153d374f41fdac2f10d3dd9fd21)) +# [2.0.0](https://github.com/taskforcesh/bullmq/compare/v1.91.1...v2.0.0) (2022-09-21) -* GitBook: [master] 2 pages modified ([`d27e3eb`](https://github.com/taskforcesh/bullmq/commit/d27e3ebf120dae16f74a02bec833b50d01477a16)) +### Bug Fixes -## v1.18.1 (2021-04-16) +* **compat:** remove Queue3 class ([#1421](https://github.com/taskforcesh/bullmq/issues/1421)) ([fc797f7](https://github.com/taskforcesh/bullmq/commit/fc797f7cd334c19a95cb1290ddb6611cd3417179)) +* **delayed:** promote delayed jobs instead of picking one by one ([1b938af](https://github.com/taskforcesh/bullmq/commit/1b938af75069d69772ddf2b03f95db7f53eada68)) +* **delayed:** remove marker when promoting delayed job ([1aea0dc](https://github.com/taskforcesh/bullmq/commit/1aea0dcc5fb29086cef3d0c432c387d6f8261963)) +* **getters:** compensate for "mark" job id ([231b9aa](https://github.com/taskforcesh/bullmq/commit/231b9aa0f4781e4493d3ea272c33b27c0b7dc0ab)) +* **sandbox:** remove progress method ([b43267b](https://github.com/taskforcesh/bullmq/commit/b43267be50f9eade8233500d189d46940a01cc29)) +* **stalled-jobs:** handle job id 0 ([829e6e0](https://github.com/taskforcesh/bullmq/commit/829e6e0252e78bf2cbc55ab1d3bd153faa0cee4c)) +* **worker:** do not allow stalledInterval to be less than zero ([831ffc5](https://github.com/taskforcesh/bullmq/commit/831ffc520ccd3c6ea63af6b04ddddc9f7829c667)) +* **workers:** use connection closing to determine closing status ([fe1d173](https://github.com/taskforcesh/bullmq/commit/fe1d17321f1eb49bd872c52965392add22729941)) -### Chore -* chore(release): 1.18.1 [skip ci] +### Features -## [1.18.1](https://github.com/taskforcesh/bullmq/compare/v1.18.0...v1.18.1) (2021-04-16) +* improve delayed jobs and remove QueueScheduler ([1f66e5a](https://github.com/taskforcesh/bullmq/commit/1f66e5a6c891d52e0671e58a685dbca511e45e7e)) +* move stalled jobs check and handling to Worker class from QueueScheduler ([13769cb](https://github.com/taskforcesh/bullmq/commit/13769cbe38ba22793cbc66e9706a6be28a7f1512)) -### Bug Fixes -* rename Flow to FlowProducer class ([c64321d](https://github.com/taskforcesh/bullmq/commit/c64321d03e2af7cee88eaf6df6cd2e5b7840ae64)) ([`b43431c`](https://github.com/taskforcesh/bullmq/commit/b43431c47defe0b9a68d64fab8c9e09c953281c3)) +### BREAKING CHANGES -### Fix +* **compat:** The compatibility class for Bullv3 is no longer available. +* The QueueScheduler class is removed since it is not necessary anymore. +Delayed jobs are now handled in a much simpler and +robust way, without the need of a separate process. +* Failed and stalled events are now produced by the Worker class instead of by the QueueScheduler. +* The minimum Redis recommended version is 6.2.0. -* fix: rename Flow to FlowProducer class ([`c64321d`](https://github.com/taskforcesh/bullmq/commit/c64321d03e2af7cee88eaf6df6cd2e5b7840ae64)) +## [1.91.1](https://github.com/taskforcesh/bullmq/compare/v1.91.0...v1.91.1) (2022-09-18) -## v1.18.0 (2021-04-16) +### Bug Fixes -### Chore +* **drain:** consider empty active list ([#1412](https://github.com/taskforcesh/bullmq/issues/1412)) ([f919a50](https://github.com/taskforcesh/bullmq/commit/f919a50b2f4972dcb9ecd5848b0f7fd9a0e137ea)) -* chore(release): 1.18.0 [skip ci] +# [1.91.0](https://github.com/taskforcesh/bullmq/compare/v1.90.2...v1.91.0) (2022-09-16) -# [1.18.0](https://github.com/taskforcesh/bullmq/compare/v1.17.0...v1.18.0) (2021-04-16) ### Features -* add remove support for flows ([4e8a7ef](https://github.com/taskforcesh/bullmq/commit/4e8a7efd53f918937478ae13f5da7dee9ea9d8b3)) ([`301e0fb`](https://github.com/taskforcesh/bullmq/commit/301e0fb9acc1c21ae129bc7e574ad88a4c53b577)) +* **sandbox:** support update method ([#1416](https://github.com/taskforcesh/bullmq/issues/1416)) ([606b75d](https://github.com/taskforcesh/bullmq/commit/606b75d53e12dfc109f01eda38736c07e829e9b7)) -### Feature +## [1.90.2](https://github.com/taskforcesh/bullmq/compare/v1.90.1...v1.90.2) (2022-09-12) -* feat: add remove support for flows ([`4e8a7ef`](https://github.com/taskforcesh/bullmq/commit/4e8a7efd53f918937478ae13f5da7dee9ea9d8b3)) +### Performance Improvements -## v1.17.0 (2021-04-16) +* **script-loader:** use cache to read script once ([#1410](https://github.com/taskforcesh/bullmq/issues/1410)) ([f956e93](https://github.com/taskforcesh/bullmq/commit/f956e937ae3488cdcd0e2eacbe3e096c8066ebd1)) -### Chore +## [1.90.1](https://github.com/taskforcesh/bullmq/compare/v1.90.0...v1.90.1) (2022-09-02) -* chore(release): 1.17.0 [skip ci] -# [1.17.0](https://github.com/taskforcesh/bullmq/compare/v1.16.2...v1.17.0) (2021-04-16) +### Performance Improvements -### Features +* **add-job:** handle parent split on js ([#1397](https://github.com/taskforcesh/bullmq/issues/1397)) ([566f074](https://github.com/taskforcesh/bullmq/commit/566f0747110679e5b07e7642fef793744565fffe)) -* **job:** consider waiting-children state ([2916dd5](https://github.com/taskforcesh/bullmq/commit/2916dd5d7ba9438d2eae66436899d32ec8ac0e91)) ([`dcb5f5b`](https://github.com/taskforcesh/bullmq/commit/dcb5f5b12b133a60b4ed09cc083915187c84ed2d)) +# [1.90.0](https://github.com/taskforcesh/bullmq/compare/v1.89.2...v1.90.0) (2022-08-30) -### Feature -* feat(job): consider waiting-children state ([`2916dd5`](https://github.com/taskforcesh/bullmq/commit/2916dd5d7ba9438d2eae66436899d32ec8ac0e91)) +### Features -### Style +* **repeat:** allow passing a cron strategy ([#1248](https://github.com/taskforcesh/bullmq/issues/1248)) ref [#1245](https://github.com/taskforcesh/bullmq/issues/1245) ([7f0534f](https://github.com/taskforcesh/bullmq/commit/7f0534f72449ae14a7415fa17a2eb2a70136a8b0)) -* style: fixing comments ([`9d5767b`](https://github.com/taskforcesh/bullmq/commit/9d5767b649b4049e276439549d3ab07d7fa7dc4b)) +## [1.89.2](https://github.com/taskforcesh/bullmq/compare/v1.89.1...v1.89.2) (2022-08-23) -## v1.16.2 (2021-04-14) +### Bug Fixes -### Chore +* **job:** update delay when changeDelay ([#1389](https://github.com/taskforcesh/bullmq/issues/1389)) fixes [#1160](https://github.com/taskforcesh/bullmq/issues/1160) ([d9b100d](https://github.com/taskforcesh/bullmq/commit/d9b100d04112c518ef2efbcf5586aa1226ccccab)) -* chore(release): 1.16.2 [skip ci] +## [1.89.1](https://github.com/taskforcesh/bullmq/compare/v1.89.0...v1.89.1) (2022-08-19) -## [1.16.2](https://github.com/taskforcesh/bullmq/compare/v1.16.1...v1.16.2) (2021-04-14) ### Bug Fixes -* read lua scripts serially ([69e73b8](https://github.com/taskforcesh/bullmq/commit/69e73b87bc6855623240a7b1a45368a7914b23b7)) ([`ca5db26`](https://github.com/taskforcesh/bullmq/commit/ca5db266d7f2407e16c5edb8d068d5d374a902f8)) +* revert "chore: allow esm imports through exports field" ([#1388](https://github.com/taskforcesh/bullmq/issues/1388)) ([8e51272](https://github.com/taskforcesh/bullmq/commit/8e512724b1e8145bceb0152b70a934decf6d6864)) -### Fix - -* fix: read lua scripts serially ([`69e73b8`](https://github.com/taskforcesh/bullmq/commit/69e73b87bc6855623240a7b1a45368a7914b23b7)) +# [1.89.0](https://github.com/taskforcesh/bullmq/compare/v1.88.2...v1.89.0) (2022-08-18) -## v1.16.1 (2021-04-12) +### Features -### Chore +* **job:** expose delay in instance ([#1386](https://github.com/taskforcesh/bullmq/issues/1386)) ([d4d0d2e](https://github.com/taskforcesh/bullmq/commit/d4d0d2e737c7ceb5eb34a2c50d53bd1081e0ad4a)) -* chore(release): 1.16.1 [skip ci] +## [1.88.2](https://github.com/taskforcesh/bullmq/compare/v1.88.1...v1.88.2) (2022-08-18) -## [1.16.1](https://github.com/taskforcesh/bullmq/compare/v1.16.0...v1.16.1) (2021-04-12) ### Bug Fixes -* **flow:** relative dependency path fixes [#466](https://github.com/taskforcesh/bullmq/issues/466) ([d104bf8](https://github.com/taskforcesh/bullmq/commit/d104bf802d6d1000ac1ccd781fa7a07bce2fe140)) ([`c1b5211`](https://github.com/taskforcesh/bullmq/commit/c1b5211fc6455c2b256094b87bffa3f84ff03c12)) +* revert "feat(sandbox): experimental support ESM" ([#1384](https://github.com/taskforcesh/bullmq/issues/1384)) ([7d180eb](https://github.com/taskforcesh/bullmq/commit/7d180eb18daa41062dcbca72213bc9d9f40153db)) -### Fix +## [1.88.1](https://github.com/taskforcesh/bullmq/compare/v1.88.0...v1.88.1) (2022-08-17) -* fix(flow): relative dependency path fixes #466 ([`d104bf8`](https://github.com/taskforcesh/bullmq/commit/d104bf802d6d1000ac1ccd781fa7a07bce2fe140)) -### Unknown +### Bug Fixes -* GitBook: [master] 39 pages modified ([`59bc9ad`](https://github.com/taskforcesh/bullmq/commit/59bc9ad4216cebb4d8cc670da3f745e83acc4ac1)) +* fix husky install ([edee918](https://github.com/taskforcesh/bullmq/commit/edee918e84ba895ed4ef63cabcc26b97d9c52d8d)) +# [1.88.0](https://github.com/taskforcesh/bullmq/compare/v1.87.2...v1.88.0) (2022-08-17) -## v1.16.0 (2021-04-12) -### Chore +### Bug Fixes -* chore(release): 1.16.0 [skip ci] +* **clean:** consider priority when cleaning waiting jobs ([#1357](https://github.com/taskforcesh/bullmq/issues/1357)) ([ced5be1](https://github.com/taskforcesh/bullmq/commit/ced5be1c9531953baa9cf87d6bda3faa5863270d)) +* **parent-priority-check:** use tonumber on priority ([#1370](https://github.com/taskforcesh/bullmq/issues/1370)) ([e2043c6](https://github.com/taskforcesh/bullmq/commit/e2043c6f4b8ad5faea8c13edde76aea60612fec6)) -# [1.16.0](https://github.com/taskforcesh/bullmq/compare/v1.15.1...v1.16.0) (2021-04-12) ### Features -* add support for flows (parent-child dependencies) ([#454](https://github.com/taskforcesh/bullmq/issues/454)) ([362212c](https://github.com/taskforcesh/bullmq/commit/362212c58c4be36b5435df862503699deb8bb79c)) ([`d1254fa`](https://github.com/taskforcesh/bullmq/commit/d1254fadc1060260f82490de9aa4d874d6ddcd52)) +* **sandbox:** experimental support ESM ([ed0faff](https://github.com/taskforcesh/bullmq/commit/ed0faff3c67c436116eb625ffacb03e435caee3f)) -* chore: add proper return type to getChildrenValues ([`331462c`](https://github.com/taskforcesh/bullmq/commit/331462c96313ecb79618258c0aa2416a6f22e953)) +## [1.87.2](https://github.com/taskforcesh/bullmq/compare/v1.87.1...v1.87.2) (2022-08-13) + + +### Bug Fixes -* chore(deps): upgrade ioredis to 4.25.0 ([`bc533ca`](https://github.com/taskforcesh/bullmq/commit/bc533ca119600f92caca020dd280c1011e849417)) +* **move-parent-to-wait:** emit waiting instead of active event ([#1356](https://github.com/taskforcesh/bullmq/issues/1356)) ([53578dd](https://github.com/taskforcesh/bullmq/commit/53578dd1cbe31b49361a833b1aca449486f3b925)) -### Documentation +## [1.87.1](https://github.com/taskforcesh/bullmq/compare/v1.87.0...v1.87.1) (2022-08-09) -* docs: fix typo ([`baa90b2`](https://github.com/taskforcesh/bullmq/commit/baa90b2090bcc7d86ed3dedd4d9d6202af6c8606)) -* docs: update README.md ([`927cc0c`](https://github.com/taskforcesh/bullmq/commit/927cc0c1abc647ad105ac56f5443ec3c675f04d5)) +### Bug Fixes -### Feature +* **job:** declare discarded as protected ([#1352](https://github.com/taskforcesh/bullmq/issues/1352)) ([870e01c](https://github.com/taskforcesh/bullmq/commit/870e01c4ab602c1e6e351cc369f3eac5f7afa083)) -* feat: add support for flows (parent-child dependencies) (#454) ([`362212c`](https://github.com/taskforcesh/bullmq/commit/362212c58c4be36b5435df862503699deb8bb79c)) +# [1.87.0](https://github.com/taskforcesh/bullmq/compare/v1.86.10...v1.87.0) (2022-08-05) -### Refactor -* refactor(getstate): adding getState script ([`a044124`](https://github.com/taskforcesh/bullmq/commit/a044124a88c23ab43746026486eac41432d37ff7)) +### Features -### Unknown +* **flow:** consider priority when parent is moved ([#1286](https://github.com/taskforcesh/bullmq/issues/1286)) ([d49760d](https://github.com/taskforcesh/bullmq/commit/d49760d09420c5fcc99ab06c8fe36168755fd397)) -* GitBook: [master] one page modified ([`5c6e5d2`](https://github.com/taskforcesh/bullmq/commit/5c6e5d230df52bd9055ebecf5f5cb4f65764a15d)) +## [1.86.10](https://github.com/taskforcesh/bullmq/compare/v1.86.9...v1.86.10) (2022-07-29) -* GitBook: [master] 3 pages modified ([`1450fea`](https://github.com/taskforcesh/bullmq/commit/1450feab58e0ab13737e465dbb5d8bcabf52b5d4)) -* GitBook: [master] 3 pages modified ([`2a903c2`](https://github.com/taskforcesh/bullmq/commit/2a903c2f0c1100dd64b3b0852fea8b171da329ec)) +### Performance Improvements -* GitBook: [master] one page modified ([`e2b6479`](https://github.com/taskforcesh/bullmq/commit/e2b64792e84b1983d5bdeab8e630c02a9275cca1)) +* **clean-jobs-in-set:** use ZRANGEBYSCORE when limit > 0 ([#1338](https://github.com/taskforcesh/bullmq/issues/1338)) ([f0d9985](https://github.com/taskforcesh/bullmq/commit/f0d998541f03778ca2a092080a19e6bf7b7d0af1)) -* GitBook: [master] one page modified ([`c2cfc96`](https://github.com/taskforcesh/bullmq/commit/c2cfc965a05d1f2292e81b3819426059a7d5795f)) +## [1.86.9](https://github.com/taskforcesh/bullmq/compare/v1.86.8...v1.86.9) (2022-07-27) -## v1.15.1 (2021-03-19) +### Bug Fixes -### Chore +* **get-flow:** consider groupKey ([#1336](https://github.com/taskforcesh/bullmq/issues/1336)) fixes [#1334](https://github.com/taskforcesh/bullmq/issues/1334) ([9f31272](https://github.com/taskforcesh/bullmq/commit/9f31272fa8b3f5b8ab26f15e21bd80537c5baef0)) -* chore(release): 1.15.1 [skip ci] +## [1.86.8](https://github.com/taskforcesh/bullmq/compare/v1.86.7...v1.86.8) (2022-07-26) -## [1.15.1](https://github.com/taskforcesh/bullmq/compare/v1.15.0...v1.15.1) (2021-03-19) ### Bug Fixes -* **obliterate:** safer implementation ([82f571f](https://github.com/taskforcesh/bullmq/commit/82f571f2548c61c776b897fd1c5050bb09c8afca)) ([`0e0540e`](https://github.com/taskforcesh/bullmq/commit/0e0540e311abcc366f377f70abf68ede78a279ba)) +* **promote:** consider empty queue when paused ([#1335](https://github.com/taskforcesh/bullmq/issues/1335)) ([9f742e8](https://github.com/taskforcesh/bullmq/commit/9f742e88d6338ce9ac7e0413bdac411ab6cf675c)) -### Fix +## [1.86.7](https://github.com/taskforcesh/bullmq/compare/v1.86.6...v1.86.7) (2022-07-15) -* fix(obliterate): safer implementation ([`82f571f`](https://github.com/taskforcesh/bullmq/commit/82f571f2548c61c776b897fd1c5050bb09c8afca)) +### Bug Fixes -## v1.15.0 (2021-03-18) +* **sandboxed-process:** consider UnrecoverableError ([#1320](https://github.com/taskforcesh/bullmq/issues/1320)) fixes [#1317](https://github.com/taskforcesh/bullmq/issues/1317) ([c1269cc](https://github.com/taskforcesh/bullmq/commit/c1269cc772c6cec84d82ff790b9a7c9cc4242dcb)) -### Chore +## [1.86.6](https://github.com/taskforcesh/bullmq/compare/v1.86.5...v1.86.6) (2022-07-14) -* chore(release): 1.15.0 [skip ci] -# [1.15.0](https://github.com/taskforcesh/bullmq/compare/v1.14.8...v1.15.0) (2021-03-18) +### Bug Fixes -### Features +* **retry-jobs:** consider paused queue ([#1321](https://github.com/taskforcesh/bullmq/issues/1321)) ([3e9703d](https://github.com/taskforcesh/bullmq/commit/3e9703d17fc9dc601d5d77e999f3e9a137f20843)) -* add method to "obliterate" a queue, fixes [#430](https://github.com/taskforcesh/bullmq/issues/430) ([624be0e](https://github.com/taskforcesh/bullmq/commit/624be0ed48159c2aa405025938925a723330e0c2)) ([`61d39d5`](https://github.com/taskforcesh/bullmq/commit/61d39d55967037378710c811a2cbb837950e220c)) +## [1.86.5](https://github.com/taskforcesh/bullmq/compare/v1.86.4...v1.86.5) (2022-07-09) -### Feature -* feat: add method to "obliterate" a queue, fixes #430 ([`624be0e`](https://github.com/taskforcesh/bullmq/commit/624be0ed48159c2aa405025938925a723330e0c2)) +### Bug Fixes -### Unknown +* **retry-job:** consider paused queue ([#1314](https://github.com/taskforcesh/bullmq/issues/1314)) ([907ae1d](https://github.com/taskforcesh/bullmq/commit/907ae1d7e3504f31c625ec8a09e32785f08357ff)) -* GitBook: [master] 38 pages modified ([`300cedc`](https://github.com/taskforcesh/bullmq/commit/300cedcde02c44acda8dbbd5777d89ca9cfba2e5)) +## [1.86.4](https://github.com/taskforcesh/bullmq/compare/v1.86.3...v1.86.4) (2022-06-29) -* GitBook: [master] one page modified ([`28dea5f`](https://github.com/taskforcesh/bullmq/commit/28dea5f465fbfdea57f1767791836e0ebf82e104)) -* GitBook: [master] 36 pages and one asset modified ([`321d4a0`](https://github.com/taskforcesh/bullmq/commit/321d4a03929bc1433e99d00f7f1c0a961aa20ca6)) +### Bug Fixes +* **parent:** emit waiting event when no pending children ([#1296](https://github.com/taskforcesh/bullmq/issues/1296)) ([aa8fa3f](https://github.com/taskforcesh/bullmq/commit/aa8fa3f8cd5ab6d7d309d87ae45c558249b1c29c)) -## v1.14.8 (2021-03-06) +## [1.86.3](https://github.com/taskforcesh/bullmq/compare/v1.86.2...v1.86.3) (2022-06-26) -### Chore -* chore(release): 1.14.8 [skip ci] +### Bug Fixes -## [1.14.8](https://github.com/taskforcesh/bullmq/compare/v1.14.7...v1.14.8) (2021-03-06) +* avoid calling delay() if queue is being closed ([#1295](https://github.com/taskforcesh/bullmq/issues/1295)) ([52a5045](https://github.com/taskforcesh/bullmq/commit/52a5045b903ed6e0e73dd747748787a6389f12f7)) -### Bug Fixes +## [1.86.2](https://github.com/taskforcesh/bullmq/compare/v1.86.1...v1.86.2) (2022-06-16) -* specify promise type to make TS 4.1 and 4.2 happy. ([#418](https://github.com/taskforcesh/bullmq/issues/418)) ([702f609](https://github.com/taskforcesh/bullmq/commit/702f609b410d8b0652c2d0504a8a67526966fdc3)) ([`cd4d02b`](https://github.com/taskforcesh/bullmq/commit/cd4d02bd8b44366ac3060ebbd00bafcf1c2cea3a)) -### Fix +### Bug Fixes -* fix: specify promise type to make TS 4.1 and 4.2 happy. (#418) ([`702f609`](https://github.com/taskforcesh/bullmq/commit/702f609b410d8b0652c2d0504a8a67526966fdc3)) +* **queue:** get rid of repeat options from defaultJobOptions ([#1284](https://github.com/taskforcesh/bullmq/issues/1284)) ([cdd2a20](https://github.com/taskforcesh/bullmq/commit/cdd2a20c2c4ca47042ecd1da525ecb72941e4910)) -### Unknown +## [1.86.1](https://github.com/taskforcesh/bullmq/compare/v1.86.0...v1.86.1) (2022-06-12) -* Update README.md ([`c0fb48e`](https://github.com/taskforcesh/bullmq/commit/c0fb48ecc127088006463b806772688be83cd405)) -* Update README.md ([`ac29d08`](https://github.com/taskforcesh/bullmq/commit/ac29d0857a4e31d93ae1782aa3e0838cf125d4ce)) +### Bug Fixes -* GitBook: [master] one page modified ([`742fe5b`](https://github.com/taskforcesh/bullmq/commit/742fe5bb42e1223d70e0d5046c5d21ef52c026bb)) +* unpack empty metrics in batches ([96829db](https://github.com/taskforcesh/bullmq/commit/96829db839fad4489415f7dbb047abdca5566e78)) -* GitBook: [master] one page modified ([`2ace43d`](https://github.com/taskforcesh/bullmq/commit/2ace43dc0e6103592188d64ac4eda0a8597c3103)) +# [1.86.0](https://github.com/taskforcesh/bullmq/compare/v1.85.4...v1.86.0) (2022-06-10) -## v1.14.7 (2021-02-16) +### Features -### Chore +* **repeat:** save repeatJobKey reference ([#1214](https://github.com/taskforcesh/bullmq/issues/1214)) ([4d5a8e3](https://github.com/taskforcesh/bullmq/commit/4d5a8e33b614cf099369c18298e5b2963b434b1b)) -* chore(release): 1.14.7 [skip ci] +## [1.85.4](https://github.com/taskforcesh/bullmq/compare/v1.85.3...v1.85.4) (2022-06-08) -## [1.14.7](https://github.com/taskforcesh/bullmq/compare/v1.14.6...v1.14.7) (2021-02-16) ### Bug Fixes -* remove "client" property of QueueBaseOptions ([#324](https://github.com/taskforcesh/bullmq/issues/324)) ([e0b9e71](https://github.com/taskforcesh/bullmq/commit/e0b9e71c4da4a93af54c4386af461c61ab5f146c)) ([`9d0f6e7`](https://github.com/taskforcesh/bullmq/commit/9d0f6e76dfc4f918e039986d9666d5ed485f4904)) +* **error-prototype:** define custom name for toJSON method ([#1272](https://github.com/taskforcesh/bullmq/issues/1272)) ([66d80da](https://github.com/taskforcesh/bullmq/commit/66d80da4a6043755c7d296addb31857816ea4da3)) -### Fix - -* fix: remove "client" property of QueueBaseOptions (#324) ([`e0b9e71`](https://github.com/taskforcesh/bullmq/commit/e0b9e71c4da4a93af54c4386af461c61ab5f146c)) +## [1.85.3](https://github.com/taskforcesh/bullmq/compare/v1.85.2...v1.85.3) (2022-06-03) -## v1.14.6 (2021-02-16) +### Bug Fixes -### Chore +* **queue:** fix addBulk signature ResultType ([#1268](https://github.com/taskforcesh/bullmq/issues/1268)) ([f6770cc](https://github.com/taskforcesh/bullmq/commit/f6770cc383b68bf7b2fa655cd9eda713a06835aa)) -* chore(release): 1.14.6 [skip ci] +## [1.85.2](https://github.com/taskforcesh/bullmq/compare/v1.85.1...v1.85.2) (2022-06-01) -## [1.14.6](https://github.com/taskforcesh/bullmq/compare/v1.14.5...v1.14.6) (2021-02-16) ### Bug Fixes -* remove next job in removeRepeatableByKey fixes [#165](https://github.com/taskforcesh/bullmq/issues/165) ([fb3a7c2](https://github.com/taskforcesh/bullmq/commit/fb3a7c2f429d535dd9f038687d7230d61201defc)) ([`5e6631e`](https://github.com/taskforcesh/bullmq/commit/5e6631e7c3f40b7857d2f73b48abfd3f9d072b35)) +* **job:** save finishedOn attribute on instance ([#1267](https://github.com/taskforcesh/bullmq/issues/1267)) ([4cf6a63](https://github.com/taskforcesh/bullmq/commit/4cf6a63d197e6095841bb87cef297a9533ac79c3)) -### Fix +## [1.85.1](https://github.com/taskforcesh/bullmq/compare/v1.85.0...v1.85.1) (2022-05-31) -* fix: remove next job in removeRepeatableByKey fixes #165 ([`fb3a7c2`](https://github.com/taskforcesh/bullmq/commit/fb3a7c2f429d535dd9f038687d7230d61201defc)) -### Unknown +### Performance Improvements -* GitBook: [master] one page modified ([`6e61c56`](https://github.com/taskforcesh/bullmq/commit/6e61c5629af24ac9b374786eab4580e6cb3ea2cb)) +* **remove-job:** send prefix key instead of jobKey ([#1252](https://github.com/taskforcesh/bullmq/issues/1252)) ([452856a](https://github.com/taskforcesh/bullmq/commit/452856a6c8c6e67ffda595c26c30988a15c1c1a4)) -* GitBook: [master] 34 pages modified ([`a006bc0`](https://github.com/taskforcesh/bullmq/commit/a006bc028e9178c0cccf335e9fd25db87120f326)) +# [1.85.0](https://github.com/taskforcesh/bullmq/compare/v1.84.1...v1.85.0) (2022-05-30) -## v1.14.5 (2021-02-16) +### Features -### Chore +* **worker:** change the number of concurrent processes ([#1256](https://github.com/taskforcesh/bullmq/issues/1256)) ref [#22](https://github.com/taskforcesh/bullmq/issues/22) ([940dc8f](https://github.com/taskforcesh/bullmq/commit/940dc8f34d9a46dc9c8384661461bf0558e97600)) -* chore(release): 1.14.5 [skip ci] +## [1.84.1](https://github.com/taskforcesh/bullmq/compare/v1.84.0...v1.84.1) (2022-05-27) -## [1.14.5](https://github.com/taskforcesh/bullmq/compare/v1.14.4...v1.14.5) (2021-02-16) ### Bug Fixes -* add jobId support to repeatable jobs fixes [#396](https://github.com/taskforcesh/bullmq/issues/396) ([c2dc669](https://github.com/taskforcesh/bullmq/commit/c2dc6693a4546e547245bc7ec1e71b4841829619)) ([`c5e3a2a`](https://github.com/taskforcesh/bullmq/commit/c5e3a2a73e0714649a3d975d15a45cbcb255db45)) - -### Documentation - -* docs: fix typo (#395) ([`e5a29bf`](https://github.com/taskforcesh/bullmq/commit/e5a29bf17dad2d9f75fbeb0db33353ddf49f1643)) - -### Fix +* **waiting-children:** pass right timestamp value in moveToWaitingChildren ([#1260](https://github.com/taskforcesh/bullmq/issues/1260)) ([0f993f7](https://github.com/taskforcesh/bullmq/commit/0f993f71ed481b02a3f859a2109177352336cb9a)) -* fix: add jobId support to repeatable jobs fixes #396 ([`c2dc669`](https://github.com/taskforcesh/bullmq/commit/c2dc6693a4546e547245bc7ec1e71b4841829619)) +# [1.84.0](https://github.com/taskforcesh/bullmq/compare/v1.83.2...v1.84.0) (2022-05-26) -## v1.14.4 (2021-02-08) +### Features -### Chore +* **flow-producer:** add event listener types ([#1257](https://github.com/taskforcesh/bullmq/issues/1257)) ([19ed099](https://github.com/taskforcesh/bullmq/commit/19ed099905cbb4f071370b2b6d67d9a378e3a8f8)) -* chore(release): 1.14.4 [skip ci] +## [1.83.2](https://github.com/taskforcesh/bullmq/compare/v1.83.1...v1.83.2) (2022-05-24) -## [1.14.4](https://github.com/taskforcesh/bullmq/compare/v1.14.3...v1.14.4) (2021-02-08) ### Bug Fixes -* reconnect at start fixes [#337](https://github.com/taskforcesh/bullmq/issues/337) ([fb33772](https://github.com/taskforcesh/bullmq/commit/fb3377280b3bda04a15a62d2901bdd78b869e08c)) ([`e0f56b3`](https://github.com/taskforcesh/bullmq/commit/e0f56b3ce656cf5b609996905b14caf4d1fcb3ab)) +* **close:** emit ioredis:close event instead of error ([#1251](https://github.com/taskforcesh/bullmq/issues/1251)) fixes [#1231](https://github.com/taskforcesh/bullmq/issues/1231) ([74c1c38](https://github.com/taskforcesh/bullmq/commit/74c1c38f7ff468da1adc63aff160e31940d682a9)) + +## [1.83.1](https://github.com/taskforcesh/bullmq/compare/v1.83.0...v1.83.1) (2022-05-24) -### Fix -* fix: reconnect at start fixes #337 ([`fb33772`](https://github.com/taskforcesh/bullmq/commit/fb3377280b3bda04a15a62d2901bdd78b869e08c)) +### Bug Fixes -### Test +* **get-workers:** use blockingConnection client to set clientName ([#1255](https://github.com/taskforcesh/bullmq/issues/1255)) fixes [#1254](https://github.com/taskforcesh/bullmq/issues/1254) ([df796bd](https://github.com/taskforcesh/bullmq/commit/df796bd0c085aff72cef001395809b3f1a8045e4)) -* test: skip test for invalid connection ([`19dfd78`](https://github.com/taskforcesh/bullmq/commit/19dfd78ecf034df06032bbf6b805d8114ac7c182)) +# [1.83.0](https://github.com/taskforcesh/bullmq/compare/v1.82.3...v1.83.0) (2022-05-20) -## v1.14.3 (2021-02-07) +### Features -### Chore +* **flow-producer:** easier to build extension ([#1250](https://github.com/taskforcesh/bullmq/issues/1250)) ([aaf637e](https://github.com/taskforcesh/bullmq/commit/aaf637e74b9610651fd9e4efc5ff349971b7bb26)) -* chore(release): 1.14.3 [skip ci] +## [1.82.3](https://github.com/taskforcesh/bullmq/compare/v1.82.2...v1.82.3) (2022-05-19) -## [1.14.3](https://github.com/taskforcesh/bullmq/compare/v1.14.2...v1.14.3) (2021-02-07) ### Bug Fixes -* **worker:** avoid possible infinite loop fixes [#389](https://github.com/taskforcesh/bullmq/issues/389) ([d05566e](https://github.com/taskforcesh/bullmq/commit/d05566ec0153f31a1257f7338399fdb55c959487)) ([`8266fcc`](https://github.com/taskforcesh/bullmq/commit/8266fccc4bbac63a2a0509e4df749a2b07fc72d9)) - -### Fix +* **redis-connection:** save cluster opts and coerse redis version ([#1247](https://github.com/taskforcesh/bullmq/issues/1247)) ref [#1246](https://github.com/taskforcesh/bullmq/issues/1246) fixes [#1243](https://github.com/taskforcesh/bullmq/issues/1243) ([acb69b5](https://github.com/taskforcesh/bullmq/commit/acb69b57d7a6417b8ca9fe1576a94d16e41f12d7)) -* fix(worker): avoid possible infinite loop fixes #389 ([`d05566e`](https://github.com/taskforcesh/bullmq/commit/d05566ec0153f31a1257f7338399fdb55c959487)) +## [1.82.2](https://github.com/taskforcesh/bullmq/compare/v1.82.1...v1.82.2) (2022-05-17) -## v1.14.2 (2021-02-02) +### Bug Fixes -### Chore +* **job:** add job helper attribute for extension ([#1242](https://github.com/taskforcesh/bullmq/issues/1242)) ([4d7ae9e](https://github.com/taskforcesh/bullmq/commit/4d7ae9e3fda23650e802ebac6b33ff3350f116f6)) -* chore(release): 1.14.2 [skip ci] +## [1.82.1](https://github.com/taskforcesh/bullmq/compare/v1.82.0...v1.82.1) (2022-05-16) -## [1.14.2](https://github.com/taskforcesh/bullmq/compare/v1.14.1...v1.14.2) (2021-02-02) ### Bug Fixes -* improve job timeout notification by giving the job name and id in the error message ([#387](https://github.com/taskforcesh/bullmq/issues/387)) ([ca886b1](https://github.com/taskforcesh/bullmq/commit/ca886b1f854051aed0888f5b872a64b052b2383e)) ([`c76d3f9`](https://github.com/taskforcesh/bullmq/commit/c76d3f9547fc88c286b171982ff07ce4e6c0ff33)) - -### Fix +* **remove-job:** pass right prev param in removed event ([#1237](https://github.com/taskforcesh/bullmq/issues/1237)) ([54df47e](https://github.com/taskforcesh/bullmq/commit/54df47edf715a0a2a42687bf827e0a62c03951a5)) -* fix: improve job timeout notification by giving the job name and id in the error message (#387) ([`ca886b1`](https://github.com/taskforcesh/bullmq/commit/ca886b1f854051aed0888f5b872a64b052b2383e)) +# [1.82.0](https://github.com/taskforcesh/bullmq/compare/v1.81.4...v1.82.0) (2022-05-11) -## v1.14.1 (2021-02-01) +### Features -### Chore +* **remove-repeatable:** return boolean depending on job existence ([#1239](https://github.com/taskforcesh/bullmq/issues/1239)) ref [#1235](https://github.com/taskforcesh/bullmq/issues/1235) ([59b0da7](https://github.com/taskforcesh/bullmq/commit/59b0da7d0e979e4f9e8a5b042acbdce433790611)) -* chore(release): 1.14.1 [skip ci] +## [1.81.4](https://github.com/taskforcesh/bullmq/compare/v1.81.3...v1.81.4) (2022-05-05) -## [1.14.1](https://github.com/taskforcesh/bullmq/compare/v1.14.0...v1.14.1) (2021-02-01) ### Bug Fixes -* job finish queue events race condition ([355bca5](https://github.com/taskforcesh/bullmq/commit/355bca5ee128bf4ff37608746f9c6f7cca580eb0)) ([`a14e1ad`](https://github.com/taskforcesh/bullmq/commit/a14e1ada63c884d2a7a4e4f8539ef68230f83bea)) - -* chore(redis-connection): add explicit promise type +* **repeatable:** emit removed event when removing ([#1229](https://github.com/taskforcesh/bullmq/issues/1229)) ([7d2de8d](https://github.com/taskforcesh/bullmq/commit/7d2de8d075e5ee7774501429c5177b729c430c20)) -Silences a typescript warning when viewing the file. ([`12441ca`](https://github.com/taskforcesh/bullmq/commit/12441caee941226a6b60b8a8763a7b7edd7d6cc3)) +## [1.81.3](https://github.com/taskforcesh/bullmq/compare/v1.81.2...v1.81.3) (2022-05-04) -* chore: fix api generation step ([`4664a02`](https://github.com/taskforcesh/bullmq/commit/4664a02f952ae235e21f6ea9794c3d55b337e7c5)) -### Documentation +### Bug Fixes -* docs: add doc for debounce usecase (#335) ([`067e32a`](https://github.com/taskforcesh/bullmq/commit/067e32aff24955b6d5bfe9c4196820f60fe21888)) +* **remove-parent:** check removed record from waiting-children ([#1227](https://github.com/taskforcesh/bullmq/issues/1227)) ([e7b25d0](https://github.com/taskforcesh/bullmq/commit/e7b25d00acb860ee3df36c6214a7162b2cf79635)) -* docs(timer-manager): describe setTimer() args ([`25e8cd7`](https://github.com/taskforcesh/bullmq/commit/25e8cd7ce1e444c7e7e0061ad0307e40f4156fe1)) +## [1.81.2](https://github.com/taskforcesh/bullmq/compare/v1.81.1...v1.81.2) (2022-05-03) -* docs(interfaces): use block comments; add references and descriptions -- Block comments for IDE support / "intellisense" -- Add links to the docs for further reading -- For links, I used the format described at https://tsdoc.org/pages/tags/see/ ([`87297b8`](https://github.com/taskforcesh/bullmq/commit/87297b8b0aef281636e174b6e925eedb440df841)) +### Bug Fixes -* docs(queue-scheduler): fix typo ([`c63fec0`](https://github.com/taskforcesh/bullmq/commit/c63fec00c91b3811757a9a5fe4f295e6e4057f93)) +* **stalled:** consider removeOnFail when failing jobs ([#1225](https://github.com/taskforcesh/bullmq/issues/1225)) fixes [#1171](https://github.com/taskforcesh/bullmq/issues/1171) ([38486cb](https://github.com/taskforcesh/bullmq/commit/38486cb4d7cbfc78bd64d71f19d8bfbc908f3fc7)) -* docs: add idempotence pattern ([`c28520a`](https://github.com/taskforcesh/bullmq/commit/c28520aee6600e0273adf85e64b0b9e8757e2c2a)) +## [1.81.1](https://github.com/taskforcesh/bullmq/compare/v1.81.0...v1.81.1) (2022-04-29) -### Fix -* fix: job finish queue events race condition ([`355bca5`](https://github.com/taskforcesh/bullmq/commit/355bca5ee128bf4ff37608746f9c6f7cca580eb0)) +### Bug Fixes -### Refactor +* **add-bulk:** use for loop and throw if error is present ([#1223](https://github.com/taskforcesh/bullmq/issues/1223)) fixes [#1222](https://github.com/taskforcesh/bullmq/issues/1222) ([564de4f](https://github.com/taskforcesh/bullmq/commit/564de4f907648f5a5667a845c5366f73cff1d384)) -* refactor(timer-manager): use Map to store timers +# [1.81.0](https://github.com/taskforcesh/bullmq/compare/v1.80.6...v1.81.0) (2022-04-26) -Typed map of timers instead of a plain object and type "any". ([`fb9e959`](https://github.com/taskforcesh/bullmq/commit/fb9e959cc789a708a0c9ccd6036c57a3ff33311a)) -### Unknown +### Features -* GitBook: [master] 5 pages modified ([`78a16a1`](https://github.com/taskforcesh/bullmq/commit/78a16a19de9264d7a5bef2c8d39a0976cbeabc18)) +* **move-to-delayed:** allow passing token ([#1213](https://github.com/taskforcesh/bullmq/issues/1213)) ([14f0e4a](https://github.com/taskforcesh/bullmq/commit/14f0e4a33d9ddfbaa1f86dbe7598e20a516a9d09)) -* GitBook: [master] 3 pages modified ([`6c10db5`](https://github.com/taskforcesh/bullmq/commit/6c10db5e2751162f39820864bae89d299d1c2d2c)) +## [1.80.6](https://github.com/taskforcesh/bullmq/compare/v1.80.5...v1.80.6) (2022-04-22) -* GitBook: [master] 3 pages modified ([`ac4c9f6`](https://github.com/taskforcesh/bullmq/commit/ac4c9f62a0c4ef28ea06543c84bbefa156a9e210)) -* GitBook: [master] one page modified ([`3efbff6`](https://github.com/taskforcesh/bullmq/commit/3efbff69b425969177cb08e004757ff0ff027bdb)) +### Bug Fixes -* GitBook: [master] one page modified ([`87db39c`](https://github.com/taskforcesh/bullmq/commit/87db39cb6f90d70e8fef05311b0698de06dfd3ff)) +* **job:** delete token when moving to delayed ([#1208](https://github.com/taskforcesh/bullmq/issues/1208)) ([37acf41](https://github.com/taskforcesh/bullmq/commit/37acf4109d17090dfaef992267e48130d34f7187)) -* GitBook: [master] one page modified ([`c166e17`](https://github.com/taskforcesh/bullmq/commit/c166e17017fa1d60ca246054a31a401633964128)) +## [1.80.5](https://github.com/taskforcesh/bullmq/compare/v1.80.4...v1.80.5) (2022-04-21) -* GitBook: [master] 7 pages modified ([`ae82cd7`](https://github.com/taskforcesh/bullmq/commit/ae82cd7defcd1501a8a9e0095bf32f02e747b87b)) +### Bug Fixes -## v1.14.0 (2021-01-06) +* **queue-base:** emit close error when no closing ([#1203](https://github.com/taskforcesh/bullmq/issues/1203)) fixes [#1205](https://github.com/taskforcesh/bullmq/issues/1205) ([4d76582](https://github.com/taskforcesh/bullmq/commit/4d7658272af94b57a09486e1141b0e15a7bac3ba)) -### Chore +## [1.80.4](https://github.com/taskforcesh/bullmq/compare/v1.80.3...v1.80.4) (2022-04-19) -* chore(release): 1.14.0 [skip ci] -# [1.14.0](https://github.com/taskforcesh/bullmq/compare/v1.13.0...v1.14.0) (2021-01-06) +### Bug Fixes -### Features +* **queue-scheduler:** apply isNotConnectionError ([#1189](https://github.com/taskforcesh/bullmq/issues/1189)) fixes [#1181](https://github.com/taskforcesh/bullmq/issues/1181) ([605d685](https://github.com/taskforcesh/bullmq/commit/605d68595d8fa1d9d47348a3fa9e0d7a4e28c706)) -* **job:** expose extendLock as a public method ([17e8431](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)) +## [1.80.3](https://github.com/taskforcesh/bullmq/compare/v1.80.2...v1.80.3) (2022-04-15) -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api -api-extractor 7.12.1 - https://api-extractor.com/ +### Bug Fixes -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 +* **cluster:** check correct Upstash host ([#1195](https://github.com/taskforcesh/bullmq/issues/1195)) fixes [#1193](https://github.com/taskforcesh/bullmq/issues/1193) ([69f2863](https://github.com/taskforcesh/bullmq/commit/69f28632408c741219c1ba49304d36f49cf5cb83)) -API Extractor completed with warnings +## [1.80.2](https://github.com/taskforcesh/bullmq/compare/v1.80.1...v1.80.2) (2022-04-15) -api-documenter 7.12.1 - https://api-extractor.com/ -Reading bullmq.api.json +### Bug Fixes -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 5.00s. ([`8a2a748`](https://github.com/taskforcesh/bullmq/commit/8a2a748a86ca799fcd72d4b00fc9a10048e46d4c)) +* **job:** remove Error from Promise return in moveToWaitingChildren ([#1197](https://github.com/taskforcesh/bullmq/issues/1197)) ([180a8bf](https://github.com/taskforcesh/bullmq/commit/180a8bf8fb2fe62b9929765a6dfd084574c77936)) -* chore: sanitize changelog ([`fa3ea5b`](https://github.com/taskforcesh/bullmq/commit/fa3ea5bffbf4ea3d2a4a91810842e5949a84b3ec)) +## [1.80.1](https://github.com/taskforcesh/bullmq/compare/v1.80.0...v1.80.1) (2022-04-14) -* chore(release): 1.13.0 [skip ci] -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) +### Bug Fixes -### Features +* **worker:** restore worker suffix to empty string ([#1194](https://github.com/taskforcesh/bullmq/issues/1194)) fixes [#1185](https://github.com/taskforcesh/bullmq/issues/1185) ([2666ea5](https://github.com/taskforcesh/bullmq/commit/2666ea5b8532645da24482cf01c5692da5f2ceda)) -* **job:** expose extendLock as a public method ([17e8431](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)) -* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) +# [1.80.0](https://github.com/taskforcesh/bullmq/compare/v1.79.1...v1.80.0) (2022-04-12) -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api -api-extractor 7.12.1 - https://api-extractor.com/ +### Features -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 +* **worker-listener:** use generics in events ([#1190](https://github.com/taskforcesh/bullmq/issues/1190)) ref [#1188](https://github.com/taskforcesh/bullmq/issues/1188) ([2821193](https://github.com/taskforcesh/bullmq/commit/28211937d9ed405330eede5ad7d4b0b817accf39)) -API Extractor completed with warnings +## [1.79.1](https://github.com/taskforcesh/bullmq/compare/v1.79.0...v1.79.1) (2022-04-12) -api-documenter 7.12.1 - https://api-extractor.com/ -Reading bullmq.api.json +### Bug Fixes -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 4.76s. ([`a75f4d5`](https://github.com/taskforcesh/bullmq/commit/a75f4d5fc1fa30ea0d537f0a07fbbbbd6f838275)) +* **connection:** remove Queue reconnect overrides ([#1119](https://github.com/taskforcesh/bullmq/issues/1119)) ([83f1c79](https://github.com/taskforcesh/bullmq/commit/83f1c797b8a5272028c8d78d5ce464236e90909e)) -* chore(release): 1.13.0 [skip ci] +# [1.79.0](https://github.com/taskforcesh/bullmq/compare/v1.78.2...v1.79.0) (2022-04-08) -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) ### Features -* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) +* **queue-getters:** add getQueueEvents ([#1085](https://github.com/taskforcesh/bullmq/issues/1085)) ([f10a20a](https://github.com/taskforcesh/bullmq/commit/f10a20a90ab6dbf2d9f3f75ba99dacbdc797c329)) -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api +## [1.78.2](https://github.com/taskforcesh/bullmq/compare/v1.78.1...v1.78.2) (2022-03-31) -api-extractor 7.12.1 - https://api-extractor.com/ -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 +### Bug Fixes -API Extractor completed with warnings +* **clean:** consider processedOn and finishedOn attributes ([#1158](https://github.com/taskforcesh/bullmq/issues/1158)) ([8c3cb72](https://github.com/taskforcesh/bullmq/commit/8c3cb72235ec6123da389553f37433c2943e0f57)) -api-documenter 7.12.1 - https://api-extractor.com/ +## [1.78.1](https://github.com/taskforcesh/bullmq/compare/v1.78.0...v1.78.1) (2022-03-24) -Reading bullmq.api.json -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 5.09s. ([`6e9a359`](https://github.com/taskforcesh/bullmq/commit/6e9a359a729a7deefa0a7a9a636ae9b8bd2dcf8e)) +### Bug Fixes -* chore: delete changelog.md ([`79bb38f`](https://github.com/taskforcesh/bullmq/commit/79bb38f8d39504672d1ff103d69595da1f2df473)) +* **queue:** close repeat connection when calling close ([#1154](https://github.com/taskforcesh/bullmq/issues/1154)) ([7d79616](https://github.com/taskforcesh/bullmq/commit/7d796167229048ec79660ca5d3ac8a7c85d125e7)) -* chore(release): 1.13.0 [skip ci] +# [1.78.0](https://github.com/taskforcesh/bullmq/compare/v1.77.3...v1.78.0) (2022-03-23) -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) ### Features -* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) - -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api - -api-extractor 7.12.1 - https://api-extractor.com/ +* **cron-parser:** upgrades version to 4.2.1 ([#1149](https://github.com/taskforcesh/bullmq/issues/1149)) fixes [#1147](https://github.com/taskforcesh/bullmq/issues/1147) ([88a6c9c](https://github.com/taskforcesh/bullmq/commit/88a6c9c437172035173628842909f5170eb481f7)) -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 - -API Extractor completed with warnings +## [1.77.3](https://github.com/taskforcesh/bullmq/compare/v1.77.2...v1.77.3) (2022-03-22) -api-documenter 7.12.1 - https://api-extractor.com/ -Reading bullmq.api.json +### Bug Fixes -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 4.75s. ([`8504d5b`](https://github.com/taskforcesh/bullmq/commit/8504d5b9d76bac9f3962e2362df32591b366fdcf)) +* **async-send:** check proc.send type ([#1150](https://github.com/taskforcesh/bullmq/issues/1150)) ([4f44173](https://github.com/taskforcesh/bullmq/commit/4f44173f0a3cc54705ca9a7e1730aeff26ea1c5a)) -* chore(release): 1.13.0 [skip ci] +## [1.77.2](https://github.com/taskforcesh/bullmq/compare/v1.77.1...v1.77.2) (2022-03-20) -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) -### Features +### Bug Fixes -* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) +* **trim-events:** consider maxLenEvents as 0 ([#1137](https://github.com/taskforcesh/bullmq/issues/1137)) ([bc58a49](https://github.com/taskforcesh/bullmq/commit/bc58a49fba1b6f4e3595a0371ecf8410000a9021)) -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api -api-extractor 7.12.1 - https://api-extractor.com/ +### Performance Improvements -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 +* **clean:** speed up clean operation using deletion marker ([#1144](https://github.com/taskforcesh/bullmq/issues/1144)) ([5fb32ef](https://github.com/taskforcesh/bullmq/commit/5fb32ef2c60843d8d1f2cbc000aacf4df3388b7e)) -API Extractor completed with warnings +## [1.77.1](https://github.com/taskforcesh/bullmq/compare/v1.77.0...v1.77.1) (2022-03-17) -api-documenter 7.12.1 - https://api-extractor.com/ -Reading bullmq.api.json +### Bug Fixes -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 5.06s. ([`1d83485`](https://github.com/taskforcesh/bullmq/commit/1d83485e284033d702ef3364e5436880966fb95a)) +* **flow:** remove processed children ([#1060](https://github.com/taskforcesh/bullmq/issues/1060)) fixes [#1056](https://github.com/taskforcesh/bullmq/issues/1056) ([6b54e86](https://github.com/taskforcesh/bullmq/commit/6b54e86c12f287a13da036f3ec7801b8656f0434)) -* chore(release): 1.13.0 [skip ci] +# [1.77.0](https://github.com/taskforcesh/bullmq/compare/v1.76.6...v1.77.0) (2022-03-16) -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2020-12-30) ### Features -* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) - -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api +* allow QueueScheduler to be extended ([289beb8](https://github.com/taskforcesh/bullmq/commit/289beb87d2ef3e3dd7583159f7be2b5450f7de3c)) -api-extractor 7.12.1 - https://api-extractor.com/ - -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 - -API Extractor completed with warnings - -api-documenter 7.12.1 - https://api-extractor.com/ +## [1.76.6](https://github.com/taskforcesh/bullmq/compare/v1.76.5...v1.76.6) (2022-03-15) -Reading bullmq.api.json -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 4.57s. ([`57b37ea`](https://github.com/taskforcesh/bullmq/commit/57b37ea886c9d86912f49d2d8d77cf3f97eda265)) +### Bug Fixes -* chore: remove api symlink ([`6731f8a`](https://github.com/taskforcesh/bullmq/commit/6731f8a36e2ea88f448034194347ffbeb857d17c)) +* **master:** do not export master file ([#1136](https://github.com/taskforcesh/bullmq/issues/1136)) fixes [#1125](https://github.com/taskforcesh/bullmq/issues/1125) ref [#1129](https://github.com/taskforcesh/bullmq/issues/1129) ([6aa2f96](https://github.com/taskforcesh/bullmq/commit/6aa2f9657b8787aa791ab5af7267a6d27d7d7869)) -* chore: add api-extractor config ([`6850f87`](https://github.com/taskforcesh/bullmq/commit/6850f874d4b1bcac6fad5df3bc6f5b6f427c2370)) +## [1.76.5](https://github.com/taskforcesh/bullmq/compare/v1.76.4...v1.76.5) (2022-03-15) -* chore: improvements in semantic release ([`bdb53a3`](https://github.com/taskforcesh/bullmq/commit/bdb53a3b5f895d242a17ee878eda2b1f50f5d45f)) -### Documentation +### Bug Fixes -* docs: fix summary ([`3a8873b`](https://github.com/taskforcesh/bullmq/commit/3a8873b6453405e6f8e57331f6cee30977406670)) +* **queue:** sanitize job types in getJobs and getJobsCount ([#1113](https://github.com/taskforcesh/bullmq/issues/1113)) fixes [#1112](https://github.com/taskforcesh/bullmq/issues/1112) ([d452b29](https://github.com/taskforcesh/bullmq/commit/d452b29773cead153a73b8322adda3164fb610d8)) -* docs: fix api reference ([`b06cb1b`](https://github.com/taskforcesh/bullmq/commit/b06cb1be01701050d6cf9a0195872bc6ea0019b1)) +## [1.76.4](https://github.com/taskforcesh/bullmq/compare/v1.76.3...v1.76.4) (2022-03-13) -### Feature -* feat(job): expose extendLock as a public method ([`17e8431`](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)) +### Performance Improvements -### Unknown +* **move-to-finished:** avoid an extra roundtrip when using rate limit ([#1131](https://github.com/taskforcesh/bullmq/issues/1131)) ([1711547](https://github.com/taskforcesh/bullmq/commit/171154707bf5cbcb750ea9d2a9957128c1abc044)) -* GitBook: [master] 34 pages modified ([`ea1459d`](https://github.com/taskforcesh/bullmq/commit/ea1459d7332846d920c2040c830c67b86c60225b)) +## [1.76.3](https://github.com/taskforcesh/bullmq/compare/v1.76.2...v1.76.3) (2022-03-10) -## v1.13.0 (2020-12-30) +### Bug Fixes -### Chore +* **drained:** emit event only once when queue has drained the waiting list ([#1123](https://github.com/taskforcesh/bullmq/issues/1123)) fixes [#1121](https://github.com/taskforcesh/bullmq/issues/1121) ref [#1070](https://github.com/taskforcesh/bullmq/issues/1070) ([b89b4e8](https://github.com/taskforcesh/bullmq/commit/b89b4e8a83fe4c9349ac5a9c439fc07374ff1e63)) -* chore(deps-dev): bump semantic-release from 15.14.0 to 17.2.3 +## [1.76.2](https://github.com/taskforcesh/bullmq/compare/v1.76.1...v1.76.2) (2022-03-09) -Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 15.14.0 to 17.2.3. -- [Release notes](https://github.com/semantic-release/semantic-release/releases) -- [Commits](https://github.com/semantic-release/semantic-release/compare/v15.14.0...v17.2.3) -Signed-off-by: dependabot[bot] <support@github.com> ([`d0b23c7`](https://github.com/taskforcesh/bullmq/commit/d0b23c7f408a8a7b99eaa1215847f4addef9f635)) +### Bug Fixes -* chore: re-added changelog ([`4030dab`](https://github.com/taskforcesh/bullmq/commit/4030dab9a7bdcaa85408a5df1136374bcd0b9198)) +* **utils:** fix proc.send type ([#1122](https://github.com/taskforcesh/bullmq/issues/1122)) fixes [#1120](https://github.com/taskforcesh/bullmq/issues/1120) ([da23977](https://github.com/taskforcesh/bullmq/commit/da239774379825d9f0a51c118740bc0fefa568bd)) -* chore: moved CHANGELOG ([`d50e14a`](https://github.com/taskforcesh/bullmq/commit/d50e14a6277f903cdac44d71da196f392652e5d6)) +## [1.76.1](https://github.com/taskforcesh/bullmq/compare/v1.76.0...v1.76.1) (2022-03-04) -* chore: add CHANGELOG.md as a symbolic link in gitbook ([`008e343`](https://github.com/taskforcesh/bullmq/commit/008e34306267194e418c546aee5967f60c875df0)) -* chore: remove changelog from gitbook root ([`e19f270`](https://github.com/taskforcesh/bullmq/commit/e19f270985e131058f86c0b2eae0bb26c87e5e8b)) +### Bug Fixes -* chore: remove changelog link ([`20f15a6`](https://github.com/taskforcesh/bullmq/commit/20f15a600b3cada3092d42e01044f6b8caec97f8)) +* **get-waiting-children-count:** consider waiting-children status only ([#1117](https://github.com/taskforcesh/bullmq/issues/1117)) ([1820df7](https://github.com/taskforcesh/bullmq/commit/1820df73c17ce119d2fdb0f526fc95f99845a5ec)) -### Documentation +# [1.76.0](https://github.com/taskforcesh/bullmq/compare/v1.75.1...v1.76.0) (2022-03-02) -* docs: generate api documentation ([`ec6634f`](https://github.com/taskforcesh/bullmq/commit/ec6634ff96877c2629ace25827f4462f6894751d)) -* docs: replace link to crontab generator, which used the wrong format. (#307) ([`de99a07`](https://github.com/taskforcesh/bullmq/commit/de99a07c33b2c893466e81b0ed724b3e3e5ffbcd)) +### Features -* docs: add CHANGELOG.md to the summary ([`75888bd`](https://github.com/taskforcesh/bullmq/commit/75888bdc779020bb8b5034572f8e222b78f407ca)) +* **metrics:** add metrics support ([ab51326](https://github.com/taskforcesh/bullmq/commit/ab51326cf318b4b48e37a1a77f5609e405eecb45)) -* docs: remove api redirect ([`dcadb10`](https://github.com/taskforcesh/bullmq/commit/dcadb10b8fdcb85af343d6a129ccd182cb7051a5)) +## [1.75.1](https://github.com/taskforcesh/bullmq/compare/v1.75.0...v1.75.1) (2022-02-26) -* docs: add changelog to gitbook ([`7b9ab79`](https://github.com/taskforcesh/bullmq/commit/7b9ab7975d755181780629c641a340ca4c478b81)) -* docs: fix paths to changelog and api ([`d3a951f`](https://github.com/taskforcesh/bullmq/commit/d3a951fdbd41d2bce7fd17b362971042e8280dc9)) +### Bug Fixes -### Feature +* **rate-limiter:** move job to wait after retry when groupKey is missed ([#1103](https://github.com/taskforcesh/bullmq/issues/1103)) fixes [#1084](https://github.com/taskforcesh/bullmq/issues/1084) ([8aeab37](https://github.com/taskforcesh/bullmq/commit/8aeab37ac5a5c1c760be21bff2ba8752a485577c)) -* feat: add support for manually processing jobs fixes #327 ([`e42bfd2`](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) +# [1.75.0](https://github.com/taskforcesh/bullmq/compare/v1.74.3...v1.75.0) (2022-02-24) -### Unknown -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`d72c40c`](https://github.com/taskforcesh/bullmq/commit/d72c40c638e85febd0b532753af7a6abed9fe3d6)) +### Bug Fixes -* GitBook: [master] 2 pages modified ([`39e8f4d`](https://github.com/taskforcesh/bullmq/commit/39e8f4d498b004564e413458a910952ff1013748)) +* **cluster:** check for host presence in Upstash validation ([#1102](https://github.com/taskforcesh/bullmq/issues/1102)) fixes [#1101](https://github.com/taskforcesh/bullmq/issues/1101) ([54d4eac](https://github.com/taskforcesh/bullmq/commit/54d4eac52cfe13d4be99410932c0226c8d06d5d5)) -* GitBook: [master] 3 pages modified ([`ab94522`](https://github.com/taskforcesh/bullmq/commit/ab94522d1ede8976ad4662e76aae404ac947bb00)) +### Features -## v1.12.3 (2020-12-28) +* **retry-jobs:** allow to retry completed jobs ([#1082](https://github.com/taskforcesh/bullmq/issues/1082)) ([e17b3f2](https://github.com/taskforcesh/bullmq/commit/e17b3f21606757a16630988a69c9607e8c843bd2)) -### Chore +## [1.74.3](https://github.com/taskforcesh/bullmq/compare/v1.74.2...v1.74.3) (2022-02-24) -* chore(release): 1.12.3 [skip ci]nn## [1.12.3](https://github.com/taskforcesh/bullmq/compare/v1.12.2...v1.12.3) (2020-12-28) ### Bug Fixes -* correctly handle "falsy" data values fixes [#264](https://github.com/taskforcesh/bullmq/issues/264) ([becad91](https://github.com/taskforcesh/bullmq/commit/becad91350fd4ac01037e5b0d4a8a93724dd8dbd)) -* **worker:** setname on worker blocking connection ([645b633](https://github.com/taskforcesh/bullmq/commit/645b6338f5883b0c21ae78007777d86b45422615)) ([`7e84155`](https://github.com/taskforcesh/bullmq/commit/7e841558d9406d4acd6210b4c7e9181fc2b5835b)) +* **connection:** throw error when Upstash host is provided ([#1098](https://github.com/taskforcesh/bullmq/issues/1098)) fixes [#1087](https://github.com/taskforcesh/bullmq/issues/1087) ([5156d0a](https://github.com/taskforcesh/bullmq/commit/5156d0a4812d8c649a3b41bd98e3e0efb41d0491)) -* chore: update gitbook redirects ([`c635261`](https://github.com/taskforcesh/bullmq/commit/c63526164ba8ce3d6d1b36ccf99c967b0181a1e2)) - -### Documentation - -* docs: fix typo (#350) ([`3f3cd11`](https://github.com/taskforcesh/bullmq/commit/3f3cd1181817dcaa45d2f81798f5b6a965e2bbbd)) - -### Unknown +## [1.74.2](https://github.com/taskforcesh/bullmq/compare/v1.74.1...v1.74.2) (2022-02-23) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`9b51319`](https://github.com/taskforcesh/bullmq/commit/9b513197e0b4551157718aedf0aae89d783cdd0d)) +### Bug Fixes -## v1.12.2 (2020-12-23) +* **move-to-finished:** increment attemptsMade when moving job to active ([#1095](https://github.com/taskforcesh/bullmq/issues/1095)) fixes [#1094](https://github.com/taskforcesh/bullmq/issues/1094) ([321b0e1](https://github.com/taskforcesh/bullmq/commit/321b0e1d515d01c5b3f1ca9f404cd571e3f753b7)) -### Chore +## [1.74.1](https://github.com/taskforcesh/bullmq/compare/v1.74.0...v1.74.1) (2022-02-20) -* chore(release): 1.12.2 [skip ci]nn## [1.12.2](https://github.com/taskforcesh/bullmq/compare/v1.12.1...v1.12.2) (2020-12-23) ### Bug Fixes -* catch errors from Repeat ([#348](https://github.com/taskforcesh/bullmq/issues/348)) ([09a1a98](https://github.com/taskforcesh/bullmq/commit/09a1a98fc42dc1a9ae98bfb29c0cca3fac02013f)) ([`971a079`](https://github.com/taskforcesh/bullmq/commit/971a079b1b9e3c1b962821bf759dc8c7c9792a94)) +* **flow:** respect defaultJobOptions from queue opts ([#1080](https://github.com/taskforcesh/bullmq/issues/1080)) fixes [#1034](https://github.com/taskforcesh/bullmq/issues/1034) ([0aca072](https://github.com/taskforcesh/bullmq/commit/0aca072f805302e660b6675fd4097ba893c91eb0)) + +# [1.74.0](https://github.com/taskforcesh/bullmq/compare/v1.73.0...v1.74.0) (2022-02-19) -### Fix -* fix: catch errors from Repeat (#348) ([`09a1a98`](https://github.com/taskforcesh/bullmq/commit/09a1a98fc42dc1a9ae98bfb29c0cca3fac02013f)) +### Features -### Unknown +* **retry-jobs:** pass timestamp as option ([#1054](https://github.com/taskforcesh/bullmq/issues/1054)) ([1522359](https://github.com/taskforcesh/bullmq/commit/15223590b235f749af9cb229fc784760d4b3add2)) -* GitBook: [master] 32 pages modified ([`eef4488`](https://github.com/taskforcesh/bullmq/commit/eef4488891bd19b46dff42d821b17292ff957ce2)) +# [1.73.0](https://github.com/taskforcesh/bullmq/compare/v1.72.0...v1.73.0) (2022-02-16) -* GitBook: [master] 2 pages and 2 assets modified ([`11c5e60`](https://github.com/taskforcesh/bullmq/commit/11c5e6058ab533daa714a27f02d411c3ed63c338)) +### Features -## v1.12.1 (2020-12-21) +* **job:** add prefix getter ([#1077](https://github.com/taskforcesh/bullmq/issues/1077)) ([db9ef10](https://github.com/taskforcesh/bullmq/commit/db9ef105a7a524d7502664d52bd9f9c7dfa9477f)) +* **queue-getters:** add getQueueSchedulers ([#1078](https://github.com/taskforcesh/bullmq/issues/1078)) ref [#1075](https://github.com/taskforcesh/bullmq/issues/1075) ([0b3b1c4](https://github.com/taskforcesh/bullmq/commit/0b3b1c4382de34bd68733d162c2fa2ba9417f79c)) -### Chore +# [1.72.0](https://github.com/taskforcesh/bullmq/compare/v1.71.0...v1.72.0) (2022-02-15) -* chore(release): 1.12.1 [skip ci]nn## [1.12.1](https://github.com/taskforcesh/bullmq/compare/v1.12.0...v1.12.1) (2020-12-21) -### Bug Fixes +### Features -* correctly handle "falsy" data values fixes [#264](https://github.com/taskforcesh/bullmq/issues/264) ([cf1dbaf](https://github.com/taskforcesh/bullmq/commit/cf1dbaf7e60d74fc8443a5f8a537455f28a8dba3)) ([`cc1471e`](https://github.com/taskforcesh/bullmq/commit/cc1471ed703b80da8324b7f29404a1120f27d826)) +* **backoff:** validate UnrecoverableError presence ([#1074](https://github.com/taskforcesh/bullmq/issues/1074)) ([1defeac](https://github.com/taskforcesh/bullmq/commit/1defeac3f251a13aad57f3027d8eb8f857e40acb)) -### Fix +# [1.71.0](https://github.com/taskforcesh/bullmq/compare/v1.70.0...v1.71.0) (2022-02-14) -* fix: correctly handle "falsy" data values fixes #264 ([`cf1dbaf`](https://github.com/taskforcesh/bullmq/commit/cf1dbaf7e60d74fc8443a5f8a537455f28a8dba3)) -* fix: correctly handle "falsy" data values fixes #264 ([`becad91`](https://github.com/taskforcesh/bullmq/commit/becad91350fd4ac01037e5b0d4a8a93724dd8dbd)) +### Features -### Unknown +* **get-job-counts:** add default values ([#1068](https://github.com/taskforcesh/bullmq/issues/1068)) ([1c7f841](https://github.com/taskforcesh/bullmq/commit/1c7f841a52b3ea18fa7878f10986b362ccc6c4fe)) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`64985aa`](https://github.com/taskforcesh/bullmq/commit/64985aa6b5d86d9a15304bab7e732b15b720fec4)) +# [1.70.0](https://github.com/taskforcesh/bullmq/compare/v1.69.1...v1.70.0) (2022-02-11) -* GitBook: [master] one page modified ([`ff318de`](https://github.com/taskforcesh/bullmq/commit/ff318dea01b14896ad2f47981973c707d744aa1f)) -* GitBook: [master] 32 pages modified ([`db84a0b`](https://github.com/taskforcesh/bullmq/commit/db84a0b0b80fd3641494d4ae7fd66c880d1bac7e)) +### Features -* GitBook: [master] 2 pages modified ([`cca32ec`](https://github.com/taskforcesh/bullmq/commit/cca32ec90fbe6225241e2867198b5c981341c4ec)) +* **sandbox:** pass parent property ([#1065](https://github.com/taskforcesh/bullmq/issues/1065)) ([1fd33f6](https://github.com/taskforcesh/bullmq/commit/1fd33f6fd3a3af17753de8c4d48e14ef86c7409c)) -* GitBook: [master] one page modified ([`e2bcb1e`](https://github.com/taskforcesh/bullmq/commit/e2bcb1eba830e0687cd2ac1a9eb6208bec2ac6e2)) +## [1.69.1](https://github.com/taskforcesh/bullmq/compare/v1.69.0...v1.69.1) (2022-02-10) -* GitBook: [master] 32 pages and 2 assets modified ([`92f257e`](https://github.com/taskforcesh/bullmq/commit/92f257eff137778f8932e76194f993245360a78f)) +### Bug Fixes -## v1.12.0 (2020-12-16) +* **move-to-finished:** validate lock first ([#1064](https://github.com/taskforcesh/bullmq/issues/1064)) ([9da1b29](https://github.com/taskforcesh/bullmq/commit/9da1b29486c6c6e2b097ec2f6107494a36525495)) -### Chore +# [1.69.0](https://github.com/taskforcesh/bullmq/compare/v1.68.4...v1.69.0) (2022-02-08) -* chore(release): 1.12.0 [skip ci]nn# [1.12.0](https://github.com/taskforcesh/bullmq/compare/v1.11.2...v1.12.0) (2020-12-16) ### Features -* add ability to get if queue is paused or not ([e98b7d8](https://github.com/taskforcesh/bullmq/commit/e98b7d8973df830cc29e0afc5d86e82c9a7ce76f)) ([`c853787`](https://github.com/taskforcesh/bullmq/commit/c85378794f58574d4b382001f457388e5af8f90b)) +* **job:** pass queueName into sandbox ([#1053](https://github.com/taskforcesh/bullmq/issues/1053)) fixes [#1050](https://github.com/taskforcesh/bullmq/issues/1050) ref [#1051](https://github.com/taskforcesh/bullmq/issues/1051) ([12bb19c](https://github.com/taskforcesh/bullmq/commit/12bb19c1586d8755b973a80be97f407630827d4f)) -### Feature +## [1.68.4](https://github.com/taskforcesh/bullmq/compare/v1.68.3...v1.68.4) (2022-02-05) -* feat: add ability to get if queue is paused or not ([`e98b7d8`](https://github.com/taskforcesh/bullmq/commit/e98b7d8973df830cc29e0afc5d86e82c9a7ce76f)) +### Bug Fixes -## v1.11.2 (2020-12-15) +* **clean:** consider checking parent jobs when cleaning ([#1048](https://github.com/taskforcesh/bullmq/issues/1048)) ([0708a24](https://github.com/taskforcesh/bullmq/commit/0708a24c7f4cb6d1cda776ed983d3f20fc3261f1)) -### Chore +## [1.68.3](https://github.com/taskforcesh/bullmq/compare/v1.68.2...v1.68.3) (2022-02-04) -* chore(release): 1.11.2 [skip ci]nn## [1.11.2](https://github.com/taskforcesh/bullmq/compare/v1.11.1...v1.11.2) (2020-12-15) ### Bug Fixes -* promote jobs to the right "list" when paused ([d3df615](https://github.com/taskforcesh/bullmq/commit/d3df615d37b1114c02eacb45f23643ee2f05374d)) ([`49fe957`](https://github.com/taskforcesh/bullmq/commit/49fe95787794e5778bbffd04afe9ba23dc9c9db8)) +* **drain:** delete priority queueKey ([#1049](https://github.com/taskforcesh/bullmq/issues/1049)) ([2e6129a](https://github.com/taskforcesh/bullmq/commit/2e6129a4a08783eeafa2f0b69c10ac810f53d085)) -### Fix +## [1.68.2](https://github.com/taskforcesh/bullmq/compare/v1.68.1...v1.68.2) (2022-02-03) -* fix: promote jobs to the right "list" when paused ([`d3df615`](https://github.com/taskforcesh/bullmq/commit/d3df615d37b1114c02eacb45f23643ee2f05374d)) +### Performance Improvements -## v1.11.1 (2020-12-15) +* **remove-parent-dependency:** do not emit wait event in hard deletions ([#1045](https://github.com/taskforcesh/bullmq/issues/1045)) ([4069821](https://github.com/taskforcesh/bullmq/commit/40698218d13a880615f832a9926f0f057b1c33f9)) -### Chore +## [1.68.1](https://github.com/taskforcesh/bullmq/compare/v1.68.0...v1.68.1) (2022-02-01) -* chore(release): 1.11.1 [skip ci]nn## [1.11.1](https://github.com/taskforcesh/bullmq/compare/v1.11.0...v1.11.1) (2020-12-15) ### Bug Fixes -* clientCommandMessageReg to support GCP memorystore v5 ([8408dda](https://github.com/taskforcesh/bullmq/commit/8408dda9fa64fc0b968e88fb2726e0a30f717ed7)) ([`9aba722`](https://github.com/taskforcesh/bullmq/commit/9aba722f41b390b5a5eeeeeba7c51b4f87cd87c7)) +* **update:** throw error when missing job key ([#1042](https://github.com/taskforcesh/bullmq/issues/1042)) ([a00ae5c](https://github.com/taskforcesh/bullmq/commit/a00ae5c9b3f6d51cb0229adca29d13d932fc5601)) + +# [1.68.0](https://github.com/taskforcesh/bullmq/compare/v1.67.3...v1.68.0) (2022-01-29) -* chore(deps): bump ini from 1.3.5 to 1.3.7 -Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. -- [Release notes](https://github.com/isaacs/ini/releases) -- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) +### Features -Signed-off-by: dependabot[bot] <support@github.com> ([`b0121b2`](https://github.com/taskforcesh/bullmq/commit/b0121b216a5853acd88c7948541d2f8678a4a91f)) +* **queue:** add retryJobs method for failed jobs ([#1024](https://github.com/taskforcesh/bullmq/issues/1024)) ([310a730](https://github.com/taskforcesh/bullmq/commit/310a730ed322501cc19cdd5cf5244bc8eee6fee2)) -### Documentation -* docs: add instructions for npm install ([`f1203ff`](https://github.com/taskforcesh/bullmq/commit/f1203ffda233e6b3dbe5dea52f8f8c073760f86f)) +### Performance Improvements -* docs: fix a typo in guide/workers.md (#328) ([`1c17c02`](https://github.com/taskforcesh/bullmq/commit/1c17c02de0036e434f2900142eb87a92daac36d9)) +* **lua:** call del command with multiple keys ([#1035](https://github.com/taskforcesh/bullmq/issues/1035)) ([9cfaab8](https://github.com/taskforcesh/bullmq/commit/9cfaab8965d0c9f92460d31d6c3083839c36447f)) -* docs: fix redis default port ([`7372ef1`](https://github.com/taskforcesh/bullmq/commit/7372ef16465fdf7d3c803a9cd9c1a25422d53373)) +## [1.67.3](https://github.com/taskforcesh/bullmq/compare/v1.67.2...v1.67.3) (2022-01-28) -### Fix -* fix: clientCommandMessageReg to support GCP memorystore v5 ([`8408dda`](https://github.com/taskforcesh/bullmq/commit/8408dda9fa64fc0b968e88fb2726e0a30f717ed7)) +### Bug Fixes -### Unknown +* **drain:** consider checking parent jobs when draining ([#992](https://github.com/taskforcesh/bullmq/issues/992)) ([81b7221](https://github.com/taskforcesh/bullmq/commit/81b72213a9ff31d6b297825391de77557598ebd1)) -* GitBook: [master] 4 pages and 2 assets modified ([`6570def`](https://github.com/taskforcesh/bullmq/commit/6570def1b073a19a68073754ff18fe38d3254060)) +## [1.67.2](https://github.com/taskforcesh/bullmq/compare/v1.67.1...v1.67.2) (2022-01-28) -* GitBook: [master] 30 pages modified ([`56f89bf`](https://github.com/taskforcesh/bullmq/commit/56f89bfc6862947f787ec7ec7e86eea4eff9e121)) +### Bug Fixes -## v1.11.0 (2020-11-24) +* **repeat:** consider immediately option with cron ([#1030](https://github.com/taskforcesh/bullmq/issues/1030)) fixes [#1020](https://github.com/taskforcesh/bullmq/issues/1020) ([b9e7488](https://github.com/taskforcesh/bullmq/commit/b9e748870385a88b2384df40f50df3144c11d7e0)) -### Chore +## [1.67.1](https://github.com/taskforcesh/bullmq/compare/v1.67.0...v1.67.1) (2022-01-27) -* chore(release): 1.11.0 [skip ci]nn# [1.11.0](https://github.com/taskforcesh/bullmq/compare/v1.10.0...v1.11.0) (2020-11-24) ### Bug Fixes -* add generic type to processor ([d4f6501](https://github.com/taskforcesh/bullmq/commit/d4f650120804bd6161f0eeda5162ad5a96811a05)) - -### Features +* **retry:** pass state in error message ([#1027](https://github.com/taskforcesh/bullmq/issues/1027)) ([c646a45](https://github.com/taskforcesh/bullmq/commit/c646a45377fdfaff340185d1f7bedceb80c214c2)) -* add name and return types to queue, worker and processor ([4879715](https://github.com/taskforcesh/bullmq/commit/4879715ec7c917f11e3a0ac3c5f5126029340ed3)) ([`4495e1d`](https://github.com/taskforcesh/bullmq/commit/4495e1d301e2c16310afabc42ebd284b9ad20363)) -### Documentation +### Performance Improvements -* docs: add a remark about scheduler for retries to work (#316) ([`6e29fcd`](https://github.com/taskforcesh/bullmq/commit/6e29fcd2d79aff5e400d9bee83a597b8cf57d39c)) +* **retry:** delete props in retryJob lua script ([#1016](https://github.com/taskforcesh/bullmq/issues/1016)) ([547cedd](https://github.com/taskforcesh/bullmq/commit/547cedd5ecd30c9a73d37e4053b9e518cb3fbe53)) -### Feature +# [1.67.0](https://github.com/taskforcesh/bullmq/compare/v1.66.1...v1.67.0) (2022-01-26) -* feat: add name and return types to queue, worker and processor ([`4879715`](https://github.com/taskforcesh/bullmq/commit/4879715ec7c917f11e3a0ac3c5f5126029340ed3)) -### Fix +### Features -* fix: add generic type to processor ([`d4f6501`](https://github.com/taskforcesh/bullmq/commit/d4f650120804bd6161f0eeda5162ad5a96811a05)) +* add support for removeOn based on time ([6c4ac75](https://github.com/taskforcesh/bullmq/commit/6c4ac75bb3ac239cc83ef6144d69c04b2bba1311)) -### Unknown +## [1.66.1](https://github.com/taskforcesh/bullmq/compare/v1.66.0...v1.66.1) (2022-01-25) -* GitBook: [master] one page modified ([`3b6681b`](https://github.com/taskforcesh/bullmq/commit/3b6681b911d0eab332f6e65d4997e54cce255d7a)) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`34c803f`](https://github.com/taskforcesh/bullmq/commit/34c803fcaa4fe96e0ac8515287c8b9c49f139d89)) +### Bug Fixes -* GitBook: [master] 28 pages modified ([`bf54c65`](https://github.com/taskforcesh/bullmq/commit/bf54c6504ac45633d91b431272f5ad1c1e343264)) +* **job:** increase attemptsMade when moving job to active ([#1009](https://github.com/taskforcesh/bullmq/issues/1009)) fixes [#1002](https://github.com/taskforcesh/bullmq/issues/1002) ([0974ae0](https://github.com/taskforcesh/bullmq/commit/0974ae0ff6db73c223be4b18fb2aab53b6a23c88)) -* GitBook: [master] one page modified ([`b564337`](https://github.com/taskforcesh/bullmq/commit/b564337cccc1b5e8d7f0734938616674d54fd6da)) +# [1.66.0](https://github.com/taskforcesh/bullmq/compare/v1.65.1...v1.66.0) (2022-01-23) -* Update README.md ([`d61db4a`](https://github.com/taskforcesh/bullmq/commit/d61db4a4d9bab3a6b33100a362359376fabe6eba)) +### Features -## v1.10.0 (2020-10-20) +* **queue-events:** add retries-exhausted event ([#1010](https://github.com/taskforcesh/bullmq/issues/1010)) ([e476f35](https://github.com/taskforcesh/bullmq/commit/e476f35f5c3f9b1baf2bbc3d46712b8ba597f73c)) -### Build +## [1.65.1](https://github.com/taskforcesh/bullmq/compare/v1.65.0...v1.65.1) (2022-01-21) -* build: sort script targets, rename prepublish target to prepare ([`f52a33a`](https://github.com/taskforcesh/bullmq/commit/f52a33a3f4dddc83c5146018b645d5873f63b87a)) -### Chore +### Bug Fixes -* chore(release): 1.10.0 [skip ci]nn# [1.10.0](https://github.com/taskforcesh/bullmq/compare/v1.9.0...v1.10.0) (2020-10-20) +* dont loop through empty modules paths ([#1013](https://github.com/taskforcesh/bullmq/issues/1013)) fixes [#1012](https://github.com/taskforcesh/bullmq/issues/1012) ([86e84df](https://github.com/taskforcesh/bullmq/commit/86e84df933c2662380b00a11b5f4000f2618d218)) -### Bug Fixes +# [1.65.0](https://github.com/taskforcesh/bullmq/compare/v1.64.4...v1.65.0) (2022-01-21) -* **job:** remove listeners before resolving promise ([563ce92](https://github.com/taskforcesh/bullmq/commit/563ce9218f5dd81f2bc836f9e8ccdedc549f09dd)) -* **worker:** continue processing if handleFailed fails. fixes [#286](https://github.com/taskforcesh/bullmq/issues/286) ([4ef1cbc](https://github.com/taskforcesh/bullmq/commit/4ef1cbc13d53897b57ae3d271afbaa1b213824aa)) -* **worker:** fix memory leak on Promise.race ([#282](https://github.com/taskforcesh/bullmq/issues/282)) ([a78ab2b](https://github.com/taskforcesh/bullmq/commit/a78ab2b362e54f897eec6c8b16f16ecccf7875c2)) -* **worker:** setname on worker blocking connection ([#291](https://github.com/taskforcesh/bullmq/issues/291)) ([50a87fc](https://github.com/taskforcesh/bullmq/commit/50a87fcb1dab976a6a0273d2b0cc4b31b63c015f)) -* remove async for loop in child pool fixes [#229](https://github.com/taskforcesh/bullmq/issues/229) ([d77505e](https://github.com/taskforcesh/bullmq/commit/d77505e989cd1395465c5222613555f79e4d9720)) ### Features -* **sandbox:** kill child workers gracefully ([#243](https://github.com/taskforcesh/bullmq/issues/243)) ([4262837](https://github.com/taskforcesh/bullmq/commit/4262837bc67e007fe44606670dce48ee7fec65cd)) ([`c03219c`](https://github.com/taskforcesh/bullmq/commit/c03219c38fcf42957b705384dd1fb4bfaa86b075)) +* **queue:** add JobType and JobState unions for better typing ([#1011](https://github.com/taskforcesh/bullmq/issues/1011)) ([3b9b79d](https://github.com/taskforcesh/bullmq/commit/3b9b79dbdd754ab66c3948e7e16380f2d5513262)) -* chore: use yarn not npm ([`428504a`](https://github.com/taskforcesh/bullmq/commit/428504a132b52626be39901d0b1cf22a010c877c)) +## [1.64.4](https://github.com/taskforcesh/bullmq/compare/v1.64.3...v1.64.4) (2022-01-19) -* chore: correct release steps ([`01570f1`](https://github.com/taskforcesh/bullmq/commit/01570f196733e3ab0f1472361fa86b88e96efbc3)) -* chore: move from travis to github workflows ([`5e278b6`](https://github.com/taskforcesh/bullmq/commit/5e278b6bbf3397316826b082bce08192aa789017)) +### Bug Fixes -### Documentation +* **queue:** use 0 as initial value for getJobCountByTypes reducer ([#1005](https://github.com/taskforcesh/bullmq/issues/1005)) ([f0e23ef](https://github.com/taskforcesh/bullmq/commit/f0e23ef01b97d36c775db0bf8c9dd2f63f6cb194)) -* docs: update README ([`1d9940b`](https://github.com/taskforcesh/bullmq/commit/1d9940b23c713cc9bbf8b2ebc767890ee17e8073)) +## [1.64.3](https://github.com/taskforcesh/bullmq/compare/v1.64.2...v1.64.3) (2022-01-17) -* docs: update README ([`3a1a8e5`](https://github.com/taskforcesh/bullmq/commit/3a1a8e50dedbea545de3786fd1c41b53a300b0a1)) -### Feature +### Bug Fixes -* feat(sandbox): kill child workers gracefully (#243) ([`4262837`](https://github.com/taskforcesh/bullmq/commit/4262837bc67e007fe44606670dce48ee7fec65cd)) +* **worker:** blockTime must be integer on older Redis ([6fedc0a](https://github.com/taskforcesh/bullmq/commit/6fedc0a03bdb217ef0dbae60d49fccb0f2a5dbdb)) -### Fix +## [1.64.2](https://github.com/taskforcesh/bullmq/compare/v1.64.1...v1.64.2) (2022-01-14) -* fix(worker): setname on worker blocking connection (#291) ([`50a87fc`](https://github.com/taskforcesh/bullmq/commit/50a87fcb1dab976a6a0273d2b0cc4b31b63c015f)) -* fix(worker): continue processing if handleFailed fails. fixes #286 ([`4ef1cbc`](https://github.com/taskforcesh/bullmq/commit/4ef1cbc13d53897b57ae3d271afbaa1b213824aa)) +### Bug Fixes -* fix(worker): setname on worker blocking connection ([`645b633`](https://github.com/taskforcesh/bullmq/commit/645b6338f5883b0c21ae78007777d86b45422615)) +* **remove-job:** consider removing parent dependency key in lua scripts ([#990](https://github.com/taskforcesh/bullmq/issues/990)) ([661abf0](https://github.com/taskforcesh/bullmq/commit/661abf0921e663c9ea2fa7d59c12da35950637dc)) -* fix(job): remove listeners before resolving promise ([`563ce92`](https://github.com/taskforcesh/bullmq/commit/563ce9218f5dd81f2bc836f9e8ccdedc549f09dd)) +## [1.64.1](https://github.com/taskforcesh/bullmq/compare/v1.64.0...v1.64.1) (2022-01-14) -* fix(worker): fix memory leak on Promise.race (#282) ([`a78ab2b`](https://github.com/taskforcesh/bullmq/commit/a78ab2b362e54f897eec6c8b16f16ecccf7875c2)) -* fix: remove async for loop in child pool fixes #229 ([`d77505e`](https://github.com/taskforcesh/bullmq/commit/d77505e989cd1395465c5222613555f79e4d9720)) +### Bug Fixes -### Test +* **sandbox:** exit uncaughtException instead of throwing error ([013d6a5](https://github.com/taskforcesh/bullmq/commit/013d6a5ee0c70266ae740abfa596ca9e506de71b)) -* test: increase timeout on child retain tests (#293) ([`0c72e08`](https://github.com/taskforcesh/bullmq/commit/0c72e0884b3e0b66d86a2fb94ff98b1def240b3e)) +# [1.64.0](https://github.com/taskforcesh/bullmq/compare/v1.63.3...v1.64.0) (2022-01-07) -### Unknown -* Update README.md ([`3a3a66f`](https://github.com/taskforcesh/bullmq/commit/3a3a66f31dbd11c69034aee3b9afa3c1e83200b8)) +### Features -* Update README.md ([`461f441`](https://github.com/taskforcesh/bullmq/commit/461f4414c4fbc7439b64e08677d1a935d6a97a1a)) +* **sanboxed-process:** support .cjs files ([#984](https://github.com/taskforcesh/bullmq/issues/984)) ([531e4de](https://github.com/taskforcesh/bullmq/commit/531e4de1525f2cf322e0b97f5537ed43276ff72b)) -* Update README.md ([`5eae7e6`](https://github.com/taskforcesh/bullmq/commit/5eae7e6054da612e64eefde58598d568814c0969)) +## [1.63.3](https://github.com/taskforcesh/bullmq/compare/v1.63.2...v1.63.3) (2022-01-06) -* Update README.md ([`902a038`](https://github.com/taskforcesh/bullmq/commit/902a038dd158bfdab2166e7e2aa62c9109f62843)) -* Update README.md ([`9de5cfa`](https://github.com/taskforcesh/bullmq/commit/9de5cfa1123f0b3284488d0ae078d38b3d0b1513)) +### Bug Fixes -* GitBook: [master] 29 pages modified ([`297ec30`](https://github.com/taskforcesh/bullmq/commit/297ec30086bd0d95b10718c128409e535414180f)) +* **job:** throw error when delay and repeat are provided together ([#983](https://github.com/taskforcesh/bullmq/issues/983)) ([07b0082](https://github.com/taskforcesh/bullmq/commit/07b008273ead9360fc43564fa9ff1a7503616ceb)) -* GitBook: [master] one page modified ([`abaa7f7`](https://github.com/taskforcesh/bullmq/commit/abaa7f725c1cf4efb124115fdca10f194c52f805)) +## [1.63.2](https://github.com/taskforcesh/bullmq/compare/v1.63.1...v1.63.2) (2022-01-04) -* GitBook: [master] one page modified ([`0866c8c`](https://github.com/taskforcesh/bullmq/commit/0866c8c0f8de74b80fac29a30a146c5af8a0ddf9)) -* GitBook: [master] 3 pages modified ([`5e30929`](https://github.com/taskforcesh/bullmq/commit/5e30929b747609caa7ce9c13087b6f04a3b42d2d)) +### Bug Fixes -* GitBook: [master] one page modified ([`3fcb0ac`](https://github.com/taskforcesh/bullmq/commit/3fcb0acaa2fd32f5a2acbbb50dfd077545eb6cb8)) +* **queue:** add missing error event typing ([#979](https://github.com/taskforcesh/bullmq/issues/979)) ([afdaac6](https://github.com/taskforcesh/bullmq/commit/afdaac6b072c7af5973222cc7fb69f3f138f3b0b)) -* GitBook: [master] one page modified ([`89243b5`](https://github.com/taskforcesh/bullmq/commit/89243b52c4beb23e7be4e6cfe283d7eb01663a21)) +## [1.63.1](https://github.com/taskforcesh/bullmq/compare/v1.63.0...v1.63.1) (2022-01-04) -* GitBook: [master] 10 pages and one asset modified ([`3121a00`](https://github.com/taskforcesh/bullmq/commit/3121a000dca00364b881dbdd02ddd42cec4b7865)) +### Bug Fixes -## v1.9.0 (2020-07-19) +* **update-progress:** throw error if job key is missing ([#978](https://github.com/taskforcesh/bullmq/issues/978)) ref [#977](https://github.com/taskforcesh/bullmq/issues/977) ([b03aaf1](https://github.com/taskforcesh/bullmq/commit/b03aaf10ca694745d143def2129f952b9bac18a6)) -### Chore +# [1.63.0](https://github.com/taskforcesh/bullmq/compare/v1.62.0...v1.63.0) (2021-12-31) -* chore(release): 1.9.0 [skip ci]nn# [1.9.0](https://github.com/taskforcesh/bullmq/compare/v1.8.14...v1.9.0) (2020-07-19) ### Features -* add grouped rate limiting ([3a958dd](https://github.com/taskforcesh/bullmq/commit/3a958dd30d09a049b0d761679d3b8d92709e815e)) ([`30aa033`](https://github.com/taskforcesh/bullmq/commit/30aa0330dd2a8fbe3f692b3e3fc6091a4f0593af)) - -* chore(deps): bump lodash from 4.17.15 to 4.17.19 +* **job:** use generic types for static methods ([#975](https://github.com/taskforcesh/bullmq/issues/975)) ([f78f4d0](https://github.com/taskforcesh/bullmq/commit/f78f4d0f75adb5c73558b3e8cf511db22f972791)) -Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. -- [Release notes](https://github.com/lodash/lodash/releases) -- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) - -Signed-off-by: dependabot[bot] <support@github.com> ([`7f986fc`](https://github.com/taskforcesh/bullmq/commit/7f986fc17c067263238fbe1e285ff0ef08570445)) +# [1.62.0](https://github.com/taskforcesh/bullmq/compare/v1.61.0...v1.62.0) (2021-12-31) -### Feature -* feat: add grouped rate limiting ([`3a958dd`](https://github.com/taskforcesh/bullmq/commit/3a958dd30d09a049b0d761679d3b8d92709e815e)) +### Bug Fixes +* add deprecated tag in progress and Queue3 class ([#973](https://github.com/taskforcesh/bullmq/issues/973)) ([6abdf5b](https://github.com/taskforcesh/bullmq/commit/6abdf5b66717cc8bc8ddb048029f7d9b92509942)) -## v1.8.14 (2020-07-03) -### Chore +### Features -* chore(release): 1.8.14 [skip ci]nn## [1.8.14](https://github.com/taskforcesh/bullmq/compare/v1.8.13...v1.8.14) (2020-07-03) +* **queue:** add better event typing ([#971](https://github.com/taskforcesh/bullmq/issues/971)) ([596fd7b](https://github.com/taskforcesh/bullmq/commit/596fd7b260f2e95607f0eb4ff9553fb35137ec54)) -### Bug Fixes +# [1.61.0](https://github.com/taskforcesh/bullmq/compare/v1.60.0...v1.61.0) (2021-12-29) -* **typescript:** fix typings, upgrade ioredis dependencies ([#220](https://github.com/taskforcesh/bullmq/issues/220)) ([7059f20](https://github.com/taskforcesh/bullmq/commit/7059f2089553a206ab3937f7fd0d0b9de96aa7b7)) -* **worker:** return this.closing when calling close ([b68c845](https://github.com/taskforcesh/bullmq/commit/b68c845c77de6b2973ec31d2f22958ab60ad87aa)) ([`3f3f2a9`](https://github.com/taskforcesh/bullmq/commit/3f3f2a9563387312e7dd14a0efaa5f87ff3b71c3)) -### Fix +### Features -* fix(typescript): fix typings, upgrade ioredis dependencies (#220) ([`7059f20`](https://github.com/taskforcesh/bullmq/commit/7059f2089553a206ab3937f7fd0d0b9de96aa7b7)) +* **queue:** reuse generic typing for jobs ([5c10818](https://github.com/taskforcesh/bullmq/commit/5c10818d90724cccdf510f0358c01233aeac77e4)) +* **worker:** reuse generic typing for jobs ([9adcdb7](https://github.com/taskforcesh/bullmq/commit/9adcdb798b4ee55835123a9f3d04c1397b176dc1)) -### Test +# [1.60.0](https://github.com/taskforcesh/bullmq/compare/v1.59.4...v1.60.0) (2021-12-29) -* test(getters): check length of get failed jobs ([`9296516`](https://github.com/taskforcesh/bullmq/commit/9296516cbb212d6a24422cc9a76109e89c12915e)) -### Unknown +### Features -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`d280be9`](https://github.com/taskforcesh/bullmq/commit/d280be98f491ca074cf63a3324ad6d09046babcf)) +* **queue-scheduler:** add better event typing ([#963](https://github.com/taskforcesh/bullmq/issues/963)) ([b23c006](https://github.com/taskforcesh/bullmq/commit/b23c006e2bfce8a0709f0eb8e8739261b68c2f48)) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`c6e0188`](https://github.com/taskforcesh/bullmq/commit/c6e018808254ed8011adc8bd11822f34797f77e5)) +## [1.59.4](https://github.com/taskforcesh/bullmq/compare/v1.59.3...v1.59.4) (2021-12-21) -* Update queue.ts ([`2da059d`](https://github.com/taskforcesh/bullmq/commit/2da059df47c55074036fdbf347cd5ee38971487c)) +### Bug Fixes -## v1.8.13 (2020-06-05) +* downgrade typescript to 3.9.10 fixes [#917](https://github.com/taskforcesh/bullmq/issues/917) ([#960](https://github.com/taskforcesh/bullmq/issues/960)) ([4e51fe0](https://github.com/taskforcesh/bullmq/commit/4e51fe00751092ee8f521039a3f2b41d881b71ae)) -### Chore +## [1.59.3](https://github.com/taskforcesh/bullmq/compare/v1.59.2...v1.59.3) (2021-12-21) -* chore(release): 1.8.13 [skip ci]nn## [1.8.13](https://github.com/taskforcesh/bullmq/compare/v1.8.12...v1.8.13) (2020-06-05) ### Bug Fixes -* **redis-connection:** run the load command for reused redis client ([fab9bba](https://github.com/taskforcesh/bullmq/commit/fab9bba4caee8fd44523febb3bde588b151e8514)) ([`47d0827`](https://github.com/taskforcesh/bullmq/commit/47d0827b225bab4420647bfcd5eb551db0175269)) +* **worker:** fix undefined moveToActive ([87e8cab](https://github.com/taskforcesh/bullmq/commit/87e8cab16dad6f8bd9e9ec369ef7e79f471180be)) -### Fix +## [1.59.2](https://github.com/taskforcesh/bullmq/compare/v1.59.1...v1.59.2) (2021-12-17) -* fix(redis-connection): run the load command for reused redis client ([`fab9bba`](https://github.com/taskforcesh/bullmq/commit/fab9bba4caee8fd44523febb3bde588b151e8514)) +### Bug Fixes -## v1.8.12 (2020-06-04) +* **package:** add jsnext:main prop ([#953](https://github.com/taskforcesh/bullmq/issues/953)) ([1a92bf7](https://github.com/taskforcesh/bullmq/commit/1a92bf7d41860f758841c5a833c1192d9a84a25f)) -### Chore +## [1.59.1](https://github.com/taskforcesh/bullmq/compare/v1.59.0...v1.59.1) (2021-12-17) -* chore(release): 1.8.12 [skip ci]nn## [1.8.12](https://github.com/taskforcesh/bullmq/compare/v1.8.11...v1.8.12) (2020-06-04) ### Bug Fixes -* remove unused options ([23aadc3](https://github.com/taskforcesh/bullmq/commit/23aadc300b947693f4afb22296d236a924bd11ca)) ([`5e808ad`](https://github.com/taskforcesh/bullmq/commit/5e808ad92ab510400b4f5f223db3e0b4ed6af09c)) - -### Documentation +* copy lua files to correct location ([2be1120](https://github.com/taskforcesh/bullmq/commit/2be1120974692ee57ec00e30d6dbbef670d88a1e)) -* docs: update README.md (#217) ([`55fff7f`](https://github.com/taskforcesh/bullmq/commit/55fff7f7c370186752710e20534ded3e17962cf8)) +# [1.59.0](https://github.com/taskforcesh/bullmq/compare/v1.58.0...v1.59.0) (2021-12-17) -* docs: improve QueueScheduler docs -I know that this looks obvious but it was not so direct to find it on the docs ([`873ec2f`](https://github.com/taskforcesh/bullmq/commit/873ec2f44eaf522c645241af3fed071ded5a2c43)) +### Bug Fixes -### Fix +* correct dist path ([067d4c2](https://github.com/taskforcesh/bullmq/commit/067d4c2009b877f8bf6e6145507a41a53e5f7af3)) -* fix: remove unused options ([`23aadc3`](https://github.com/taskforcesh/bullmq/commit/23aadc300b947693f4afb22296d236a924bd11ca)) -### Unknown +### Features -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`46291ce`](https://github.com/taskforcesh/bullmq/commit/46291ce5b16eebb28da1c82dec2d62d4ca2a6351)) +* also export bullmq as an ESM ([e97e5b5](https://github.com/taskforcesh/bullmq/commit/e97e5b52b079adf2ed79f7cb61699e40a91e34e8)) +# [1.58.0](https://github.com/taskforcesh/bullmq/compare/v1.57.4...v1.58.0) (2021-12-15) -## v1.8.11 (2020-05-29) -### Chore +### Features -* chore(release): 1.8.11 [skip ci]nn## [1.8.11](https://github.com/taskforcesh/bullmq/compare/v1.8.10...v1.8.11) (2020-05-29) +* **worker:** add better event typing ([#940](https://github.com/taskforcesh/bullmq/issues/940)) ([a326d4f](https://github.com/taskforcesh/bullmq/commit/a326d4f27e96ffa462a908ac14356d29839ff073)) -### Bug Fixes +## [1.57.4](https://github.com/taskforcesh/bullmq/compare/v1.57.3...v1.57.4) (2021-12-14) -* **scheduler:** remove unnecessary division by 4096 ([4d25e95](https://github.com/taskforcesh/bullmq/commit/4d25e95f9522388bd85e932e04b6668e3da57686)) ([`c608a3f`](https://github.com/taskforcesh/bullmq/commit/c608a3fdf7e7c9031998a5695d387eb2a7797b6f)) -### Fix +### Bug Fixes -* fix(scheduler): remove unnecessary division by 4096 ([`4d25e95`](https://github.com/taskforcesh/bullmq/commit/4d25e95f9522388bd85e932e04b6668e3da57686)) +* **move-to-active:** add try catch in moveToActive call ([#933](https://github.com/taskforcesh/bullmq/issues/933)) ([bab45b0](https://github.com/taskforcesh/bullmq/commit/bab45b05d08c625557e2df65921e12f48081d39c)) +* **redis-connection:** consider cluster redisOptions config ([#934](https://github.com/taskforcesh/bullmq/issues/934)) ([5130f63](https://github.com/taskforcesh/bullmq/commit/5130f63ad969efa9649ab8f9abf36a72e8f553f4)) -### Unknown +## [1.57.3](https://github.com/taskforcesh/bullmq/compare/v1.57.2...v1.57.3) (2021-12-14) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`fc9d13f`](https://github.com/taskforcesh/bullmq/commit/fc9d13f7d8ce9cacefea516be9ad73b43ba9079d)) +### Bug Fixes -## v1.8.10 (2020-05-28) +* remove debug console.error ([#932](https://github.com/taskforcesh/bullmq/issues/932)) ([271aac3](https://github.com/taskforcesh/bullmq/commit/271aac3417bc7f76ac02435b456552677b2847db)) -### Chore +## [1.57.2](https://github.com/taskforcesh/bullmq/compare/v1.57.1...v1.57.2) (2021-12-11) -* chore(release): 1.8.10 [skip ci]nn## [1.8.10](https://github.com/taskforcesh/bullmq/compare/v1.8.9...v1.8.10) (2020-05-28) ### Bug Fixes -* **scheduler:** divide timestamp by 4096 in update set fixes [#168](https://github.com/taskforcesh/bullmq/issues/168) ([0c5db83](https://github.com/taskforcesh/bullmq/commit/0c5db8391bb8994bee19f25a33efb9dfee792d7b)) ([`183137a`](https://github.com/taskforcesh/bullmq/commit/183137a8f4c9dafada20096ee07aba4bd1ecb35a)) - -### Fix +* **connection:** check instance options to console log deprecation message ([#927](https://github.com/taskforcesh/bullmq/issues/927)) ([fc1e2b9](https://github.com/taskforcesh/bullmq/commit/fc1e2b9f3f20db53f9dc7ecdfa4644f02acc9f83)) -* fix(scheduler): divide timestamp by 4096 in update set fixes #168 ([`0c5db83`](https://github.com/taskforcesh/bullmq/commit/0c5db8391bb8994bee19f25a33efb9dfee792d7b)) +### Performance Improvements -## v1.8.9 (2020-05-25) +* **add-job:** save parent data as json ([#859](https://github.com/taskforcesh/bullmq/issues/859)) ([556d4ee](https://github.com/taskforcesh/bullmq/commit/556d4ee427090f60270945a7fd438e2595bb43e9)) -### Chore +## [1.57.1](https://github.com/taskforcesh/bullmq/compare/v1.57.0...v1.57.1) (2021-12-11) -* chore(release): 1.8.9 [skip ci]nn## [1.8.9](https://github.com/taskforcesh/bullmq/compare/v1.8.8...v1.8.9) (2020-05-25) ### Bug Fixes -* **scheduler:** divide next timestamp by 4096 ([#204](https://github.com/taskforcesh/bullmq/issues/204)) ([9562d74](https://github.com/taskforcesh/bullmq/commit/9562d74625e20b7b6de8750339c85345ba027357)) ([`e126c25`](https://github.com/taskforcesh/bullmq/commit/e126c25e61b36f484a7b4b753be4789001b8dcf8)) +* **worker:** better handling of block timeout ([be4c933](https://github.com/taskforcesh/bullmq/commit/be4c933ae0a7a790d24a081b2ed4e7e1c0216e47)) -* chore(deps): bump jquery from 3.4.1 to 3.5.1 +# [1.57.0](https://github.com/taskforcesh/bullmq/compare/v1.56.0...v1.57.0) (2021-12-08) -Bumps [jquery](https://github.com/jquery/jquery) from 3.4.1 to 3.5.1. -- [Release notes](https://github.com/jquery/jquery/releases) -- [Commits](https://github.com/jquery/jquery/compare/3.4.1...3.5.1) -Signed-off-by: dependabot[bot] <support@github.com> ([`6ec5517`](https://github.com/taskforcesh/bullmq/commit/6ec5517d5de6a55482f0fb598367b64c1c65cdef)) +### Features -### Fix +* **queue-events:** add better event typing ([#919](https://github.com/taskforcesh/bullmq/issues/919)) ([e980080](https://github.com/taskforcesh/bullmq/commit/e980080767bc56ae09a5c5cf33728a85a023bb42)) -* fix(scheduler): divide next timestamp by 4096 (#204) +# [1.56.0](https://github.com/taskforcesh/bullmq/compare/v1.55.1...v1.56.0) (2021-12-06) -authored-by: Boris Dorofeev <bdorofeev@bdorofeev-laptop.corp.ps.kz> ([`9562d74`](https://github.com/taskforcesh/bullmq/commit/9562d74625e20b7b6de8750339c85345ba027357)) +### Bug Fixes -## v1.8.8 (2020-05-25) +* emit drain event if no jobs left when completing ([9ad78a9](https://github.com/taskforcesh/bullmq/commit/9ad78a91c0a4a74cf84bd77d351d98195104f0b6)) +* **worker:** use client for setting worker name ([af65c2c](https://github.com/taskforcesh/bullmq/commit/af65c2cd0d3fb232c617b018d4991f3276db11ea)) -### Chore -* chore(release): 1.8.8 [skip ci]nn## [1.8.8](https://github.com/taskforcesh/bullmq/compare/v1.8.7...v1.8.8) (2020-05-25) +### Features -### Bug Fixes +* **worker:** make moveToActive protected ([d2897ee](https://github.com/taskforcesh/bullmq/commit/d2897ee7bbf4aee5251ac4fb28705f2bebbe7bfe)) -* **queue-base:** error event is passed through ([ad14e77](https://github.com/taskforcesh/bullmq/commit/ad14e777171c0c44b7e50752d9847dec23f46158)) -* **redis-connection:** error event is passed through ([a15b1a1](https://github.com/taskforcesh/bullmq/commit/a15b1a1824c6863ecf3e5132e22924fc3ff161f6)) -* **worker:** error event is passed through ([d7f0374](https://github.com/taskforcesh/bullmq/commit/d7f03749ce300e917399a435a3f426e66145dd8c)) ([`75eeef2`](https://github.com/taskforcesh/bullmq/commit/75eeef2031fb862fd35b769cf81d12642bad811c)) +## [1.55.1](https://github.com/taskforcesh/bullmq/compare/v1.55.0...v1.55.1) (2021-12-03) -### Fix -* fix(redis-connection): error event is passed through ([`a15b1a1`](https://github.com/taskforcesh/bullmq/commit/a15b1a1824c6863ecf3e5132e22924fc3ff161f6)) +### Bug Fixes -* fix(worker): error event is passed through ([`d7f0374`](https://github.com/taskforcesh/bullmq/commit/d7f03749ce300e917399a435a3f426e66145dd8c)) +* **worker:** always try to move to active after waiting for job ([#914](https://github.com/taskforcesh/bullmq/issues/914)) ([97b7084](https://github.com/taskforcesh/bullmq/commit/97b708451bf4ce14a461a50f8a24d14b0e40dd4b)) -* fix(queue-base): error event is passed through +# [1.55.0](https://github.com/taskforcesh/bullmq/compare/v1.54.6...v1.55.0) (2021-12-02) -Existing code doesn't seem to pass 'error' event through in a right way. ([`ad14e77`](https://github.com/taskforcesh/bullmq/commit/ad14e777171c0c44b7e50752d9847dec23f46158)) -### Test +### Features -* test: fix broken connection test ([`230664c`](https://github.com/taskforcesh/bullmq/commit/230664cf0565e2d5351299d64d3a8bef70289b0f)) +* **script-loader:** lua script loader with include support ([#897](https://github.com/taskforcesh/bullmq/issues/897)) ([64b6ccf](https://github.com/taskforcesh/bullmq/commit/64b6ccf2a373b40d7ea763b3d35cf34f36ba11da)) -### Unknown +## [1.54.6](https://github.com/taskforcesh/bullmq/compare/v1.54.5...v1.54.6) (2021-11-30) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`5d4e983`](https://github.com/taskforcesh/bullmq/commit/5d4e9835bd74500699bbe7300e17cb094911e4f6)) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`96201b3`](https://github.com/taskforcesh/bullmq/commit/96201b392c590dfdbbd8001a94d124a2567165bf)) +### Bug Fixes -* update events.md +* **stalled:** save finishedOn when job stalled more than allowable limit ([#900](https://github.com/taskforcesh/bullmq/issues/900)) ([eb89edf](https://github.com/taskforcesh/bullmq/commit/eb89edf2f4eb85dedb1485de32e79331940a654f)) -Correctly instantiate the `Worker` class, ([`2a439fb`](https://github.com/taskforcesh/bullmq/commit/2a439fbe44e0e08544d1d34d78dd8999cd4ca83b)) +## [1.54.5](https://github.com/taskforcesh/bullmq/compare/v1.54.4...v1.54.5) (2021-11-26) -* Second Argument for worker is missing -I am not sure exactly the options here, but definitely this will work. It also appears that some sort of resolution might occur if a string is passed, but I can't figure that one out. ([`8ee4d68`](https://github.com/taskforcesh/bullmq/commit/8ee4d685dec7a92f050d752f29375b5f58cc6c72)) +### Bug Fixes -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`2971254`](https://github.com/taskforcesh/bullmq/commit/2971254dcabada77b815affb377639abb5d6f990)) +* **tsconfig:** only include node types ([#895](https://github.com/taskforcesh/bullmq/issues/895)) ([5f4fdca](https://github.com/taskforcesh/bullmq/commit/5f4fdca5f416f2cd9d83eb0fba84e56c24320b63)) +## [1.54.4](https://github.com/taskforcesh/bullmq/compare/v1.54.3...v1.54.4) (2021-11-24) -## v1.8.7 (2020-04-10) -### Chore +### Bug Fixes -* chore(release): 1.8.7 [skip ci]nn## [1.8.7](https://github.com/taskforcesh/bullmq/compare/v1.8.6...v1.8.7) (2020-04-10) +* **child-processor:** add deprecation warning for progress method ([#890](https://github.com/taskforcesh/bullmq/issues/890)) ([f80b19a](https://github.com/taskforcesh/bullmq/commit/f80b19a5aa85413b8906aa0fac1bfd09bec990cb)) -### Bug Fixes +## [1.54.3](https://github.com/taskforcesh/bullmq/compare/v1.54.2...v1.54.3) (2021-11-22) -* **worker:** do not use global child pool fixes [#172](https://github.com/taskforcesh/bullmq/issues/172) ([bc65f26](https://github.com/taskforcesh/bullmq/commit/bc65f26dd47c59d0a7277ac947140405557be9a5)) ([`5ef3e12`](https://github.com/taskforcesh/bullmq/commit/5ef3e12afc936b0db23de6787cf62ec9bd262f42)) -### Fix +### Bug Fixes -* fix(worker): do not use global child pool fixes #172 ([`bc65f26`](https://github.com/taskforcesh/bullmq/commit/bc65f26dd47c59d0a7277ac947140405557be9a5)) +* **clean:** use range values in lua script ([#885](https://github.com/taskforcesh/bullmq/issues/885)) ([02ef63a](https://github.com/taskforcesh/bullmq/commit/02ef63a8163e627a270a1c1bd74989a67c3f15f7)) -### Unknown +## [1.54.2](https://github.com/taskforcesh/bullmq/compare/v1.54.1...v1.54.2) (2021-11-20) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`b80678d`](https://github.com/taskforcesh/bullmq/commit/b80678d22f12b79b5f7fabce9e445a929ec2f289)) +### Bug Fixes -## v1.8.6 (2020-04-10) +* **job:** use this when use new operators ([#884](https://github.com/taskforcesh/bullmq/issues/884)) ([7b84283](https://github.com/taskforcesh/bullmq/commit/7b842839e1d30967ebf15b901033e3b31e929df8)) -### Chore +## [1.54.1](https://github.com/taskforcesh/bullmq/compare/v1.54.0...v1.54.1) (2021-11-19) -* chore(release): 1.8.6 [skip ci]nn## [1.8.6](https://github.com/taskforcesh/bullmq/compare/v1.8.5...v1.8.6) (2020-04-10) ### Bug Fixes -* **workers:** do not call super.close() ([ebd2ae1](https://github.com/taskforcesh/bullmq/commit/ebd2ae1a5613d71643c5a7ba3f685d77585de68e)) -* make sure closing is returned in every close call ([88c5948](https://github.com/taskforcesh/bullmq/commit/88c5948d33a9a7b7a4f4f64f3183727b87d80207)) -* **scheduler:** duplicate connections fixes [#174](https://github.com/taskforcesh/bullmq/issues/174) ([011b8ac](https://github.com/taskforcesh/bullmq/commit/011b8acfdec54737d94a9fead2423e060e3364db)) -* **worker:** return this.closing when calling close ([06d3d4f](https://github.com/taskforcesh/bullmq/commit/06d3d4f476444a2d2af8538d60cb2561a1915868)) ([`4654721`](https://github.com/taskforcesh/bullmq/commit/46547217fe04853b50d29b83d95c1e6f29a184de)) +* **job:** change private attributes to protected for extensions ([#882](https://github.com/taskforcesh/bullmq/issues/882)) ([ffcc3f0](https://github.com/taskforcesh/bullmq/commit/ffcc3f083c23e6de3587c38fb7aacb2e19085351)) -### Fix +# [1.54.0](https://github.com/taskforcesh/bullmq/compare/v1.53.0...v1.54.0) (2021-11-17) -* fix(workers): do not call super.close() ([`ebd2ae1`](https://github.com/taskforcesh/bullmq/commit/ebd2ae1a5613d71643c5a7ba3f685d77585de68e)) -* fix: make sure closing is returned in every close call ([`88c5948`](https://github.com/taskforcesh/bullmq/commit/88c5948d33a9a7b7a4f4f64f3183727b87d80207)) +### Features -* fix(worker): return this.closing when calling close ([`06d3d4f`](https://github.com/taskforcesh/bullmq/commit/06d3d4f476444a2d2af8538d60cb2561a1915868)) +* **load-includes:** export includes to be reused in extensions ([#877](https://github.com/taskforcesh/bullmq/issues/877)) ([b56c4a9](https://github.com/taskforcesh/bullmq/commit/b56c4a9cf2ecebb44481618026589162be61680a)) -### Test +# [1.53.0](https://github.com/taskforcesh/bullmq/compare/v1.52.2...v1.53.0) (2021-11-16) -* test(stalled_jobs): finetune params ([`d7888ae`](https://github.com/taskforcesh/bullmq/commit/d7888ae8efe9ff3427605e0937862bce930cd27b)) -* test(stalled_jobs): increase timeout ([`8f654f9`](https://github.com/taskforcesh/bullmq/commit/8f654f95ba2e7f08c3f780c94d69e8c15adec641)) +### Features -### Unknown +* **queue-events:** add cleaned event ([#865](https://github.com/taskforcesh/bullmq/issues/865)) ([b3aebad](https://github.com/taskforcesh/bullmq/commit/b3aebad8a62311e135d53be2e7c5e47740547465)) -* fix(scheduler): duplicate connections fixes #174 ([`011b8ac`](https://github.com/taskforcesh/bullmq/commit/011b8acfdec54737d94a9fead2423e060e3364db)) +## [1.52.2](https://github.com/taskforcesh/bullmq/compare/v1.52.1...v1.52.2) (2021-11-14) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`fff60bf`](https://github.com/taskforcesh/bullmq/commit/fff60bf2962a6a4708081ed57772c413adb3a43c)) +### Bug Fixes -## v1.8.5 (2020-04-05) +* **worker:** change private attributes to protected for pro extension ([#874](https://github.com/taskforcesh/bullmq/issues/874)) ([1c73881](https://github.com/taskforcesh/bullmq/commit/1c738819b49f206688ed7b3b9d103077045e1b05)) -### Chore +## [1.52.1](https://github.com/taskforcesh/bullmq/compare/v1.52.0...v1.52.1) (2021-11-12) -* chore(release): 1.8.5 [skip ci]nn## [1.8.5](https://github.com/taskforcesh/bullmq/compare/v1.8.4...v1.8.5) (2020-04-05) -### Bug Fixes +### Performance Improvements -* removed deprecated and unused node-uuid ([c810579](https://github.com/taskforcesh/bullmq/commit/c810579029d33ef47d5a7563e63126a69c62fd87)) ([`88ef30b`](https://github.com/taskforcesh/bullmq/commit/88ef30b1ff2ec0a037bf2cd69e8558687bbeb70e)) +* **clean:** speed up clean method when called with limit param ([#864](https://github.com/taskforcesh/bullmq/issues/864)) ([09b5cb4](https://github.com/taskforcesh/bullmq/commit/09b5cb45a79c4bc53a52d540918c22477a066e16)) -### Fix +# [1.52.0](https://github.com/taskforcesh/bullmq/compare/v1.51.3...v1.52.0) (2021-11-11) -* fix: removed deprecated and unused node-uuid ([`c810579`](https://github.com/taskforcesh/bullmq/commit/c810579029d33ef47d5a7563e63126a69c62fd87)) +### Features -## v1.8.4 (2020-03-17) +* **queue:** add waiting event type declaration ([#872](https://github.com/taskforcesh/bullmq/issues/872)) ([f29925d](https://github.com/taskforcesh/bullmq/commit/f29925da3b12f573582ea188ec386e86023cefc9)) -### Chore +## [1.51.3](https://github.com/taskforcesh/bullmq/compare/v1.51.2...v1.51.3) (2021-11-04) -* chore(release): 1.8.4 [skip ci]nn## [1.8.4](https://github.com/taskforcesh/bullmq/compare/v1.8.3...v1.8.4) (2020-03-17) ### Bug Fixes -* **job:** added nullable/optional properties ([cef134f](https://github.com/taskforcesh/bullmq/commit/cef134f7c4d87e1b80ba42a5e06c3877956ff4cc)) ([`5c656cb`](https://github.com/taskforcesh/bullmq/commit/5c656cb231e0d001f3c18937cfb6b11b1f4f480d)) - -### Fix +* **move-to-failed:** delete closing check that prevents script execution ([#858](https://github.com/taskforcesh/bullmq/issues/858)) fixes [#834](https://github.com/taskforcesh/bullmq/issues/834) ([d50814f](https://github.com/taskforcesh/bullmq/commit/d50814f864448c10fec8e93651a2095fa4ef3f4e)) -* fix(job): added nullable/optional properties +## [1.51.2](https://github.com/taskforcesh/bullmq/compare/v1.51.1...v1.51.2) (2021-11-03) -Marked finishedOn and processedOn as nullable/optional ([`cef134f`](https://github.com/taskforcesh/bullmq/commit/cef134f7c4d87e1b80ba42a5e06c3877956ff4cc)) +### Bug Fixes -## v1.8.3 (2020-03-13) +* **flow:** remove repeat option from FlowJob opts ([#853](https://github.com/taskforcesh/bullmq/issues/853)) fixes [#851](https://github.com/taskforcesh/bullmq/issues/851) ([c9ee2f1](https://github.com/taskforcesh/bullmq/commit/c9ee2f100a23aa24034598b7d452c69720d7aabd)) -### Chore +## [1.51.1](https://github.com/taskforcesh/bullmq/compare/v1.51.0...v1.51.1) (2021-10-29) -* chore(release): 1.8.3 [skip ci]nn## [1.8.3](https://github.com/taskforcesh/bullmq/compare/v1.8.2...v1.8.3) (2020-03-13) ### Bug Fixes -* **sandbox:** If the child process is killed, remove it from the pool. ([8fb0fb5](https://github.com/taskforcesh/bullmq/commit/8fb0fb569a0236b37d3bae06bf58a2a1da3221c6)) ([`acf3159`](https://github.com/taskforcesh/bullmq/commit/acf3159650b9afabc23db4db6d8a445e3ec02b72)) +* **commands:** copy includes lua scripts ([#843](https://github.com/taskforcesh/bullmq/issues/843)) fixes [#837](https://github.com/taskforcesh/bullmq/issues/837) ([cab33e0](https://github.com/taskforcesh/bullmq/commit/cab33e08bc78bd3c45b86158a818100beeb06d81)) -### Fix +# [1.51.0](https://github.com/taskforcesh/bullmq/compare/v1.50.7...v1.51.0) (2021-10-28) -* fix(sandbox): If the child process is killed, remove it from the pool. ([`8fb0fb5`](https://github.com/taskforcesh/bullmq/commit/8fb0fb569a0236b37d3bae06bf58a2a1da3221c6)) +### Features -## v1.8.2 (2020-03-03) +* **flow:** consider continually adding jobs ([#828](https://github.com/taskforcesh/bullmq/issues/828)) fixes [#826](https://github.com/taskforcesh/bullmq/issues/826) ([b0fde69](https://github.com/taskforcesh/bullmq/commit/b0fde69f4370160a891e4654485c09745066b80b)) -### Chore +## [1.50.7](https://github.com/taskforcesh/bullmq/compare/v1.50.6...v1.50.7) (2021-10-28) -* chore(release): 1.8.2 [skip ci]nn## [1.8.2](https://github.com/taskforcesh/bullmq/compare/v1.8.1...v1.8.2) (2020-03-03) ### Bug Fixes -* restore the Job timestamp when deserializing JSON data ([#138](https://github.com/taskforcesh/bullmq/issues/138)) ([#152](https://github.com/taskforcesh/bullmq/issues/152)) ([c171bd4](https://github.com/taskforcesh/bullmq/commit/c171bd47f7b75378e75307a1decdc0f630ac1cd6)) ([`b96f5ba`](https://github.com/taskforcesh/bullmq/commit/b96f5ba3e9c36182174300af629b34fe43c62ecd)) - -### Fix +* override enableReadyCheck, maxRetriesPerRequest fixes reconnection ([09ba358](https://github.com/taskforcesh/bullmq/commit/09ba358b6f761bdc52b0f5b2aa315cc6c2a9db6e)) +* **queue-base:** deprecation warning on missing connection ([2f79802](https://github.com/taskforcesh/bullmq/commit/2f79802378d7e015b5d0702945a71c1c2073251e)) -* fix: restore the Job timestamp when deserializing JSON data (#138) (#152) ([`c171bd4`](https://github.com/taskforcesh/bullmq/commit/c171bd47f7b75378e75307a1decdc0f630ac1cd6)) +## [1.50.6](https://github.com/taskforcesh/bullmq/compare/v1.50.5...v1.50.6) (2021-10-28) -* fix(worker): return this.closing when calling close ([`b68c845`](https://github.com/taskforcesh/bullmq/commit/b68c845c77de6b2973ec31d2f22958ab60ad87aa)) +### Bug Fixes -## v1.8.1 (2020-03-02) +* **queue-base:** show connection deprecation warning ([#832](https://github.com/taskforcesh/bullmq/issues/832)) fixes [#829](https://github.com/taskforcesh/bullmq/issues/829) ([5d023fe](https://github.com/taskforcesh/bullmq/commit/5d023fe7b671a2547398fd68995ccd85216cc7a5)) -### Chore +## [1.50.5](https://github.com/taskforcesh/bullmq/compare/v1.50.4...v1.50.5) (2021-10-21) -* chore(release): 1.8.1 [skip ci]nn## [1.8.1](https://github.com/taskforcesh/bullmq/compare/v1.8.0...v1.8.1) (2020-03-02) ### Bug Fixes -* modified imports to work when esModuleInterop is disabled ([#132](https://github.com/taskforcesh/bullmq/issues/132)) ([01681f2](https://github.com/taskforcesh/bullmq/commit/01681f282bafac2df2c602edb51d6bde3483896c)) ([`fccacee`](https://github.com/taskforcesh/bullmq/commit/fccacee7164155ea1fdf5bee163dd56103cfb223)) - -### Fix +* **child-pool:** pipe process stdout and stderr([#822](https://github.com/taskforcesh/bullmq/issues/822)) fixes [#821](https://github.com/taskforcesh/bullmq/issues/821) ([13f5c62](https://github.com/taskforcesh/bullmq/commit/13f5c62174925e4638acda6a9de379668048189d)) -* fix: modified imports to work when esModuleInterop is disabled (#132) +## [1.50.4](https://github.com/taskforcesh/bullmq/compare/v1.50.3...v1.50.4) (2021-10-20) -fixes https://github.com/taskforcesh/bullmq/issues/129 ([`01681f2`](https://github.com/taskforcesh/bullmq/commit/01681f282bafac2df2c602edb51d6bde3483896c)) +### Bug Fixes -## v1.8.0 (2020-03-02) +* properly pass sharedConnection option to worker base class ([56557f1](https://github.com/taskforcesh/bullmq/commit/56557f1c0c3fb04bc3dd8824819c2d4367324c3b)) -### Chore +## [1.50.3](https://github.com/taskforcesh/bullmq/compare/v1.50.2...v1.50.3) (2021-10-18) -* chore(release): 1.8.0 [skip ci]nn# [1.8.0](https://github.com/taskforcesh/bullmq/compare/v1.7.0...v1.8.0) (2020-03-02) ### Bug Fixes -* cleanup signatures for queue add and addBulk ([#127](https://github.com/taskforcesh/bullmq/issues/127)) ([48e221b](https://github.com/taskforcesh/bullmq/commit/48e221b53909079a4def9c48c1b69cebabd0ed74)) -* exit code 12 when using inspect with child process ([#137](https://github.com/taskforcesh/bullmq/issues/137)) ([43ebc67](https://github.com/taskforcesh/bullmq/commit/43ebc67cec3e8f283f9a555b4466cf918226687b)) - -### Features - -* **types:** add sandboxed job processor types ([#114](https://github.com/taskforcesh/bullmq/issues/114)) ([a50a88c](https://github.com/taskforcesh/bullmq/commit/a50a88cd1658fa9d568235283a4c23a74eb8ed2a)) ([`5cde2fa`](https://github.com/taskforcesh/bullmq/commit/5cde2faa699344ffa3c948aea2214723eeda37d1)) +* **msgpackr:** upgrade version to 1.4.6 to support esm bundlers ([#818](https://github.com/taskforcesh/bullmq/issues/818)) fixes [#813](https://github.com/taskforcesh/bullmq/issues/813) ([913d7a9](https://github.com/taskforcesh/bullmq/commit/913d7a9a892d2c7e2fa5822367355c2dee888583)) -### Feature +## [1.50.2](https://github.com/taskforcesh/bullmq/compare/v1.50.1...v1.50.2) (2021-10-12) -* feat(types): add sandboxed job processor types (#114) ([`a50a88c`](https://github.com/taskforcesh/bullmq/commit/a50a88cd1658fa9d568235283a4c23a74eb8ed2a)) -### Fix +### Bug Fixes -* fix: exit code 12 when using inspect with child process (#137) ([`43ebc67`](https://github.com/taskforcesh/bullmq/commit/43ebc67cec3e8f283f9a555b4466cf918226687b)) +* **msgpack:** replace msgpack by msgpackr ([dc13a75](https://github.com/taskforcesh/bullmq/commit/dc13a75374bbd29fefbf3e56f822e763df3712d9)) -* fix: cleanup signatures for queue add and addBulk (#127) +## [1.50.1](https://github.com/taskforcesh/bullmq/compare/v1.50.0...v1.50.1) (2021-10-12) -The addBulk signature was missing the data type and the name parameter -did not match between the two functions. ([`48e221b`](https://github.com/taskforcesh/bullmq/commit/48e221b53909079a4def9c48c1b69cebabd0ed74)) +### Bug Fixes -## v1.7.0 (2020-03-02) +* **queue-getters:** only getting the first 2 jobs ([653873a](https://github.com/taskforcesh/bullmq/commit/653873a6a86dd6c3e1afc3142efbe11014d80557)) -### Chore +# [1.50.0](https://github.com/taskforcesh/bullmq/compare/v1.49.0...v1.50.0) (2021-10-12) -* chore(release): 1.7.0 [skip ci]nn# [1.7.0](https://github.com/taskforcesh/bullmq/compare/v1.6.8...v1.7.0) (2020-03-02) ### Features -* made queue name publicly readable for [#140](https://github.com/taskforcesh/bullmq/issues/140) ([f2bba2e](https://github.com/taskforcesh/bullmq/commit/f2bba2efd9d85986b01bb35c847a232b5c42ae57)) ([`dbf19de`](https://github.com/taskforcesh/bullmq/commit/dbf19de422b889574aa055ad08f677050bffb762)) +* easier to build extensions on top of BullMQ ([b1a9e64](https://github.com/taskforcesh/bullmq/commit/b1a9e64a9184addc0b8245a04013e1c896e9c2bc)) + +# [1.49.0](https://github.com/taskforcesh/bullmq/compare/v1.48.3...v1.49.0) (2021-10-08) -### Unknown -* Merge pull request #141 from bobdercole/queue-name +### Features -feat: made queue name publicly readable for #140 ([`def0eb6`](https://github.com/taskforcesh/bullmq/commit/def0eb658821d3eb44e3b69d71cb58e05d251f70)) +* **sandboxed-process:** handle init-failed error ([#797](https://github.com/taskforcesh/bullmq/issues/797)) ([5d2f553](https://github.com/taskforcesh/bullmq/commit/5d2f55342b19ee99d34f8d8003f09359cfe17d4f)) -* Merge branch 'master' into queue-name ([`5c202cf`](https://github.com/taskforcesh/bullmq/commit/5c202cf0e62de796b0f3ce6cfec4018042d7744e)) +## [1.48.3](https://github.com/taskforcesh/bullmq/compare/v1.48.2...v1.48.3) (2021-10-05) -## v1.6.8 (2020-02-22) +### Bug Fixes -### Chore +* **change-delay:** add current time to delay ([#789](https://github.com/taskforcesh/bullmq/issues/789)) fixes [#787](https://github.com/taskforcesh/bullmq/issues/787) ([4a70def](https://github.com/taskforcesh/bullmq/commit/4a70def6e85cf9ea384ec5f38c3c4f83e4eb523c)) -* chore(release): 1.6.8 [skip ci]nn## [1.6.8](https://github.com/taskforcesh/bullmq/compare/v1.6.7...v1.6.8) (2020-02-22) +## [1.48.2](https://github.com/taskforcesh/bullmq/compare/v1.48.1...v1.48.2) (2021-09-24) -### Bug Fixes -* modified QueueGetters.getJob and Job.fromId to also return null to ([65183fc](https://github.com/taskforcesh/bullmq/commit/65183fcf542d0227ec1d4d6637b46b5381331787)) -* modified QueueGetters.getJob and Job.fromId to return undefined ([ede352b](https://github.com/taskforcesh/bullmq/commit/ede352be75ffe05bf633516db9eda88467c562bf)) ([`293ef56`](https://github.com/taskforcesh/bullmq/commit/293ef569460d076bdedc62f60e3d520fa6ccab33)) +### Performance Improvements -### Documentation +* **obliterate:** do not pass unused variables ([#766](https://github.com/taskforcesh/bullmq/issues/766)) ([e9abfa6](https://github.com/taskforcesh/bullmq/commit/e9abfa6f821064901770a9b72adfb00cac96154c)) -* docs: minor improvements ([`a882a4a`](https://github.com/taskforcesh/bullmq/commit/a882a4ad6b60b5b0fd3dec838f9c35b7e582310d)) +## [1.48.1](https://github.com/taskforcesh/bullmq/compare/v1.48.0...v1.48.1) (2021-09-23) -* docs: fix QueueEvents examples in quick start guide ([`83c8e28`](https://github.com/taskforcesh/bullmq/commit/83c8e281f7c30caf82fa9c3e21775a507b560378)) -### Feature +### Bug Fixes -* feat: made queue name publicly readable for #140 ([`f2bba2e`](https://github.com/taskforcesh/bullmq/commit/f2bba2efd9d85986b01bb35c847a232b5c42ae57)) +* **obliterate:** consider dependencies and processed keys ([#765](https://github.com/taskforcesh/bullmq/issues/765)) ([fd6bad8](https://github.com/taskforcesh/bullmq/commit/fd6bad8c7444c21e6f1d67611a28f8e4aace293d)) -### Fix +# [1.48.0](https://github.com/taskforcesh/bullmq/compare/v1.47.2...v1.48.0) (2021-09-23) -* fix: modified QueueGetters.getJob and Job.fromId to return undefined -instead of null ([`ede352b`](https://github.com/taskforcesh/bullmq/commit/ede352be75ffe05bf633516db9eda88467c562bf)) -* fix: modified QueueGetters.getJob and Job.fromId to also return null to -maintain consistency with v3 API. ([`65183fc`](https://github.com/taskforcesh/bullmq/commit/65183fcf542d0227ec1d4d6637b46b5381331787)) +### Features -### Test +* **queue:** add drain lua script ([#764](https://github.com/taskforcesh/bullmq/issues/764)) ([2daa698](https://github.com/taskforcesh/bullmq/commit/2daa698a7cc5dc8a6cd087b2d29356bc02fb4944)) -* test: added test for undefined getJob ([`102d7f7`](https://github.com/taskforcesh/bullmq/commit/102d7f705dc28ce0dd467bed46d2e5c4e3523ee8)) +## [1.47.2](https://github.com/taskforcesh/bullmq/compare/v1.47.1...v1.47.2) (2021-09-22) -* test: re-added getJob test ([`5716279`](https://github.com/taskforcesh/bullmq/commit/57162796a089d76635edf017798190d38b7a9702)) -* test: updated tests for ede352b ([`2de620b`](https://github.com/taskforcesh/bullmq/commit/2de620b3eb9f292fc25f88bd1bff55805f832d03)) +### Bug Fixes -### Unknown +* **flow-producer:** use default prefix in add method ([#763](https://github.com/taskforcesh/bullmq/issues/763)) fixes [#762](https://github.com/taskforcesh/bullmq/issues/762) ([fffdb55](https://github.com/taskforcesh/bullmq/commit/fffdb55f37917776494a4471673ef4564e0faab5)) -* Merge pull request #133 from bobdercole/get-job-type +## [1.47.1](https://github.com/taskforcesh/bullmq/compare/v1.47.0...v1.47.1) (2021-09-17) -fix: modified QueueGetters.getJob and Job.fromId to also return null ([`10f493e`](https://github.com/taskforcesh/bullmq/commit/10f493e8dfdd4fbf13a288482d8578ba895a1323)) -* Merge pull request #125 from snacqs/docs-improvements +### Bug Fixes -docs: minor improvements ([`36726bf`](https://github.com/taskforcesh/bullmq/commit/36726bfb01430af8ec606f36423fc187e4a06fb4)) +* **running:** move running attribute before first async call ([#756](https://github.com/taskforcesh/bullmq/issues/756)) ([f7f0660](https://github.com/taskforcesh/bullmq/commit/f7f066076bbe6cbcbf716ae622d55c6c1ae9b270)) -* Merge pull request #123 from rhinodavid/queue_events_doc +# [1.47.0](https://github.com/taskforcesh/bullmq/compare/v1.46.7...v1.47.0) (2021-09-16) -docs: fix QueueEvents examples in quick start guide ([`195e877`](https://github.com/taskforcesh/bullmq/commit/195e8777f35032f106732adc7e5e74dc952f3aa8)) +### Features -## v1.6.7 (2020-01-16) +* **queue-events:** launch without launching process ([#750](https://github.com/taskforcesh/bullmq/issues/750)) ([23a2360](https://github.com/taskforcesh/bullmq/commit/23a23606e727ca13b24924a1e867c6b557d6a09d)) -### Chore +## [1.46.7](https://github.com/taskforcesh/bullmq/compare/v1.46.6...v1.46.7) (2021-09-16) -* chore(release): 1.6.7 [skip ci]nn## [1.6.7](https://github.com/taskforcesh/bullmq/compare/v1.6.6...v1.6.7) (2020-01-16) ### Bug Fixes -* don't fail a job when the worker already lost the lock ([23c0bf7](https://github.com/taskforcesh/bullmq/commit/23c0bf70eab6d166b0483336f103323d1bf2ca64)) ([`9d796a1`](https://github.com/taskforcesh/bullmq/commit/9d796a14258061e4b52063150e1d307799ce9019)) +* **wait-for-job:** add catch block and emit error ([#749](https://github.com/taskforcesh/bullmq/issues/749)) ([b407f9a](https://github.com/taskforcesh/bullmq/commit/b407f9ac429c825984856eebca58bbfd16feb9d3)) -### Fix +## [1.46.6](https://github.com/taskforcesh/bullmq/compare/v1.46.5...v1.46.6) (2021-09-15) -* fix: don't fail a job when the worker already lost the lock ([`23c0bf7`](https://github.com/taskforcesh/bullmq/commit/23c0bf70eab6d166b0483336f103323d1bf2ca64)) -### Unknown +### Bug Fixes -* Merge pull request #107 from wavyapp/fix-71 +* **connection:** fail only if redis connection does not recover ([#751](https://github.com/taskforcesh/bullmq/issues/751)) ([8d59ced](https://github.com/taskforcesh/bullmq/commit/8d59ced27831a636f40ed4233eba3d4ac0654534)) -fix: don't fail a job when the worker already lost the lock ([`da8cdb4`](https://github.com/taskforcesh/bullmq/commit/da8cdb42827c22fea12b9c2f4c0c80fbad786b98)) +## [1.46.5](https://github.com/taskforcesh/bullmq/compare/v1.46.4...v1.46.5) (2021-09-12) -* GitBook: [master] 7 pages modified ([`b4a7dfd`](https://github.com/taskforcesh/bullmq/commit/b4a7dfd5691f35b67ce0474169bc02e31431e262)) +### Bug Fixes -## v1.6.6 (2020-01-05) +* **is-finished:** reject when missing job key ([#746](https://github.com/taskforcesh/bullmq/issues/746)) fixes [#85](https://github.com/taskforcesh/bullmq/issues/85) ([bd49bd2](https://github.com/taskforcesh/bullmq/commit/bd49bd20492676559072e5e16adb6d4e47afb22b)) -### Chore +## [1.46.4](https://github.com/taskforcesh/bullmq/compare/v1.46.3...v1.46.4) (2021-09-10) -* chore(release): 1.6.6 [skip ci]nn## [1.6.6](https://github.com/taskforcesh/bullmq/compare/v1.6.5...v1.6.6) (2020-01-05) ### Bug Fixes -* remove duplicate active entry ([1d2cca3](https://github.com/taskforcesh/bullmq/commit/1d2cca38ee61289adcee4899a91f7dcbc93a7c05)) ([`6553a20`](https://github.com/taskforcesh/bullmq/commit/6553a204dbd9c08e84fc4e173b5363610a789ad5)) - -### Unknown +* **wait-until-finished:** isFinished return failedReason or returnValue ([#743](https://github.com/taskforcesh/bullmq/issues/743)) fixes [#555](https://github.com/taskforcesh/bullmq/issues/555) ([63acae9](https://github.com/taskforcesh/bullmq/commit/63acae98cb083ec978ea17833819d1a21086be33)) -* Merge pull request #99 from chrisabrams/fix-dup-entry - -[fix] Remove duplicate active entry ([`bddaf44`](https://github.com/taskforcesh/bullmq/commit/bddaf4467dea4ff8583cd6e9cbbb83a6e5330893)) +## [1.46.3](https://github.com/taskforcesh/bullmq/compare/v1.46.2...v1.46.3) (2021-09-08) -* Merge branch 'master' into fix-dup-entry ([`f7712d8`](https://github.com/taskforcesh/bullmq/commit/f7712d8d2a614d5db077eaef19c807e3b550a020)) +### Bug Fixes -## v1.6.5 (2020-01-05) +* **add-job:** throw error when missing parent key ([#739](https://github.com/taskforcesh/bullmq/issues/739)) ([d751070](https://github.com/taskforcesh/bullmq/commit/d751070f4ab6553c782341270574ccd253d309b8)) -### Chore +## [1.46.2](https://github.com/taskforcesh/bullmq/compare/v1.46.1...v1.46.2) (2021-09-07) -* chore(release): 1.6.5 [skip ci]nn## [1.6.5](https://github.com/taskforcesh/bullmq/compare/v1.6.4...v1.6.5) (2020-01-05) ### Bug Fixes -* get rid of flushdb/flushall in tests ([550c67b](https://github.com/taskforcesh/bullmq/commit/550c67b25de5f6d800e5e317398044cd16b85924)) ([`0097592`](https://github.com/taskforcesh/bullmq/commit/00975929ec559594bafb8fa1c4c7e75f87db912a)) +* **queue-events:** duplicate connection ([#733](https://github.com/taskforcesh/bullmq/issues/733)) fixes [#726](https://github.com/taskforcesh/bullmq/issues/726) ([e2531ed](https://github.com/taskforcesh/bullmq/commit/e2531ed0c1dc195f210f8cf996e9ffe04c9e4b7d)) -### Unknown +## [1.46.1](https://github.com/taskforcesh/bullmq/compare/v1.46.0...v1.46.1) (2021-09-06) -* Merge pull request #103 from taskforcesh/fix-102-get-rid-of-flushdb-in-tests -fix: get rid of flushdb/flushall in tests ([`725ad01`](https://github.com/taskforcesh/bullmq/commit/725ad0179f615b9d53d939619210d26d8a5ec4a0)) +### Bug Fixes -* Merge branch 'master' into fix-102-get-rid-of-flushdb-in-tests ([`d82748a`](https://github.com/taskforcesh/bullmq/commit/d82748a79f65c68b7427863a074b05cbce79a000)) +* **redis-connection:** improve closing fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([9d8eb03](https://github.com/taskforcesh/bullmq/commit/9d8eb0306ef5e63c9d34ffd5c96fc15491da639d)) +# [1.46.0](https://github.com/taskforcesh/bullmq/compare/v1.45.0...v1.46.0) (2021-09-02) -## v1.6.4 (2020-01-05) -### Chore +### Features -* chore(release): 1.6.4 [skip ci]nn## [1.6.4](https://github.com/taskforcesh/bullmq/compare/v1.6.3...v1.6.4) (2020-01-05) +* **worker:** launch without launching process ([#724](https://github.com/taskforcesh/bullmq/issues/724)) ([af689e4](https://github.com/taskforcesh/bullmq/commit/af689e4e3945b9bc68bfc08c8f0ad57644206c5b)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) -### Bug Fixes +# [1.45.0](https://github.com/taskforcesh/bullmq/compare/v1.44.3...v1.45.0) (2021-09-02) -* delete logs when cleaning jobs in set ([b11c6c7](https://github.com/taskforcesh/bullmq/commit/b11c6c7c9f4f1c49eac93b98fdc93ac8f861c8b2)) ([`d3b0ab0`](https://github.com/taskforcesh/bullmq/commit/d3b0ab09b5aeb3bc88b42f9e38efab0724dfa08f)) -### Fix +### Features -* fix: get rid of flushdb/flushall in tests ([`550c67b`](https://github.com/taskforcesh/bullmq/commit/550c67b25de5f6d800e5e317398044cd16b85924)) +* **queue-scheduler:** launch without launching process ([#729](https://github.com/taskforcesh/bullmq/issues/729)) ([f1932a7](https://github.com/taskforcesh/bullmq/commit/f1932a789af13da9b705a72d6f633f984a218862)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) -* fix: remove duplicate active entry ([`1d2cca3`](https://github.com/taskforcesh/bullmq/commit/1d2cca38ee61289adcee4899a91f7dcbc93a7c05)) +## [1.44.3](https://github.com/taskforcesh/bullmq/compare/v1.44.2...v1.44.3) (2021-09-02) -* fix: delete logs when cleaning jobs in set ([`b11c6c7`](https://github.com/taskforcesh/bullmq/commit/b11c6c7c9f4f1c49eac93b98fdc93ac8f861c8b2)) -### Unknown +### Bug Fixes -* Merge pull request #98 from taskforcesh/fix/delete-jobs-when-cleaning-in-set +* **queuescheduler:** handle shared connections fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([32a2b2e](https://github.com/taskforcesh/bullmq/commit/32a2b2eccfa3ba1516eacd71e334cae6c787ce4c)) -Fix/delete jobs when cleaning in set ([`ab8d860`](https://github.com/taskforcesh/bullmq/commit/ab8d860c8f16867a2a46c620da742db43944d0a7)) +## [1.44.2](https://github.com/taskforcesh/bullmq/compare/v1.44.1...v1.44.2) (2021-08-29) -* Merge branch 'master' of github.com:taskforcesh/bullmq into fix/fix-tslib-dep ([`ba2db3a`](https://github.com/taskforcesh/bullmq/commit/ba2db3a0817de1cca54384531ba41e2616ff463d)) +### Bug Fixes -## v1.6.3 (2020-01-01) +* **worker:** use spread operator in processing map keys ([#720](https://github.com/taskforcesh/bullmq/issues/720)) ([32f1e57](https://github.com/taskforcesh/bullmq/commit/32f1e570a9a3369174a228f729f1d1330dcb6965)) -### Chore +## [1.44.1](https://github.com/taskforcesh/bullmq/compare/v1.44.0...v1.44.1) (2021-08-29) -* chore(release): 1.6.3 [skip ci]nn## [1.6.3](https://github.com/taskforcesh/bullmq/compare/v1.6.2...v1.6.3) (2020-01-01) ### Bug Fixes -* add tslib dependency fixes [#65](https://github.com/taskforcesh/bullmq/issues/65) ([7ad7995](https://github.com/taskforcesh/bullmq/commit/7ad799544a9c30b30aa96df8864119159c9a1185)) ([`e4c47ae`](https://github.com/taskforcesh/bullmq/commit/e4c47aefb16df401e0a8a84981e2cce233a550ec)) +* **retry:** throw error when retry non failed job ([#717](https://github.com/taskforcesh/bullmq/issues/717)) ([bb9b192](https://github.com/taskforcesh/bullmq/commit/bb9b192e9a1a4f3c25374fcb8c0fb2159eb3f779)) -* chore: import lodash es6 style ([`17c7378`](https://github.com/taskforcesh/bullmq/commit/17c73782420dc36e7b1108f596d2ac233ba97dd5)) +# [1.44.0](https://github.com/taskforcesh/bullmq/compare/v1.43.0...v1.44.0) (2021-08-27) -### Fix -* fix: add tslib dependency fixes #65 ([`7ad7995`](https://github.com/taskforcesh/bullmq/commit/7ad799544a9c30b30aa96df8864119159c9a1185)) +### Features -### Unknown +* **queue-events:** add waiting-children event ([#704](https://github.com/taskforcesh/bullmq/issues/704)) ([18b0b79](https://github.com/taskforcesh/bullmq/commit/18b0b7954313274a61fcc058380bfb9d682c059d)) -* Merge pull request #96 from taskforcesh/fix/fix-tslib-dep -Fix/fix tslib dep ([`f84cd9b`](https://github.com/taskforcesh/bullmq/commit/f84cd9bc875fedad25bd387e382ebb2ab4751e57)) +# [1.43.0](https://github.com/taskforcesh/bullmq/compare/v1.42.1...v1.43.0) \(2021-08-25\) -* Merge branch 'master' into fix/fix-tslib-dep ([`01818b9`](https://github.com/taskforcesh/bullmq/commit/01818b90ebd00cb9695b5d763a21cc1c76c445a3)) -* Merge pull request #93 from ericcarboni/patch-1 +### Features -docs: fix typo ([`d8bf244`](https://github.com/taskforcesh/bullmq/commit/d8bf244fbbb43b1975e89434c546e7bdabf91702)) +* **events:** add added event when job is created \([\#699](https://github.com/taskforcesh/bullmq/issues/699)\) \([f533cc5](https://github.com/taskforcesh/bullmq/commit/f533cc55a43cf6ea78a60e85102f15b1c1ff69a0)\) -* Merge branch 'master' into patch-1 ([`5fcf40b`](https://github.com/taskforcesh/bullmq/commit/5fcf40b2aa91bbee022d727919d3cbdf75d3a118)) +## [1.42.1](https://github.com/taskforcesh/bullmq/compare/v1.42.0...v1.42.1) \(2021-08-23\) -## v1.6.2 (2019-12-16) +### Bug Fixes -### Chore +* protect emit calls with throw/catch \([79f879b](https://github.com/taskforcesh/bullmq/commit/79f879bf1bca1acea19485def361cc36f1d13b7e)\) -* chore(release): 1.6.2 [skip ci]nn## [1.6.2](https://github.com/taskforcesh/bullmq/compare/v1.6.1...v1.6.2) (2019-12-16) +# [1.42.0](https://github.com/taskforcesh/bullmq/compare/v1.41.0...v1.42.0) \(2021-08-20\) -### Bug Fixes -* change default QueueEvents lastEventId to $ ([3c5b01d](https://github.com/taskforcesh/bullmq/commit/3c5b01d16ee1442f5802a0fe4e7675c14f7a7f1f)) -* ensure QE ready before adding test events ([fd190f4](https://github.com/taskforcesh/bullmq/commit/fd190f4be792b03273481c8aaf73be5ca42663d1)) -* explicitly test the behavior of .on and .once ([ea11087](https://github.com/taskforcesh/bullmq/commit/ea11087b292d9325105707b53f92ac61c334a147)) ([`9b4042d`](https://github.com/taskforcesh/bullmq/commit/9b4042da2977178d007cb4f07686be897172792b)) +### Features -### Unknown +* **flows:** add queuesOptions for rate limit \([\#692](https://github.com/taskforcesh/bullmq/issues/692)\) \([6689ec3](https://github.com/taskforcesh/bullmq/commit/6689ec3fadd21904d9935f932c047f540ed8caf0)\), closes [\#621](https://github.com/taskforcesh/bullmq/issues/621) -* Merge pull request #82 from jbr/dollarsign-as-default-queue-event-id +# [1.41.0](https://github.com/taskforcesh/bullmq/compare/v1.40.4...v1.41.0) \(2021-08-20\) -$ as default queue event id #76 ([`7a6b2ee`](https://github.com/taskforcesh/bullmq/commit/7a6b2ee593d76718f45075556e6e7eb53251ca52)) -* Merge branch 'master' into patch-1 ([`176bd9d`](https://github.com/taskforcesh/bullmq/commit/176bd9d9a3d07fb8c2b74d055fcb36c541602590)) +### Features -* Merge branch 'master' into dollarsign-as-default-queue-event-id ([`878fc0d`](https://github.com/taskforcesh/bullmq/commit/878fc0d191a1d0ad16f41dad7d09ebbf26f6b493)) +* **flow:** add bulk \([dc59fe6](https://github.com/taskforcesh/bullmq/commit/dc59fe62e57b6e761fe4d2ab6179a69dc4792399)\) +## [1.40.4](https://github.com/taskforcesh/bullmq/compare/v1.40.3...v1.40.4) \(2021-08-06\) -## v1.6.1 (2019-12-16) +### Bug Fixes -### Chore +* **rate-limiter:** check groupKey is not undefined \([999b918](https://github.com/taskforcesh/bullmq/commit/999b91868814caf4c5c1ddee40798178b71e0ea8)\) -* chore(release): 1.6.1 [skip ci]nn## [1.6.1](https://github.com/taskforcesh/bullmq/compare/v1.6.0...v1.6.1) (2019-12-16) +## [1.40.3](https://github.com/taskforcesh/bullmq/compare/v1.40.2...v1.40.3) \(2021-08-06\) ### Bug Fixes -* check of existing redis instance ([dd466b3](https://github.com/taskforcesh/bullmq/commit/dd466b332b03b430108126531d59ff9e66ce9521)) ([`5410d23`](https://github.com/taskforcesh/bullmq/commit/5410d23b2cf7d19bf14c4c089874b9630237fa42)) +* **redis-connection:** add error event in waitUntilReady \([ac4101e](https://github.com/taskforcesh/bullmq/commit/ac4101e3e798110c022d6c9f10f3b98f5e86b151)\) -* chore(deps): bump npm from 6.12.0 to 6.13.4 +## [1.40.2](https://github.com/taskforcesh/bullmq/compare/v1.40.1...v1.40.2) \(2021-08-06\) -Bumps [npm](https://github.com/npm/cli) from 6.12.0 to 6.13.4. -- [Release notes](https://github.com/npm/cli/releases) -- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md) -- [Commits](https://github.com/npm/cli/compare/v6.12.0...v6.13.4) +### Bug Fixes -Signed-off-by: dependabot[bot] <support@github.com> ([`4780be2`](https://github.com/taskforcesh/bullmq/commit/4780be24fe8233f778fbb871bef2cafe9a0c37fe)) +* move clientCommandMessageReg to utils \([dd5d555](https://github.com/taskforcesh/bullmq/commit/dd5d5553fe768eb18b17b53c7f75e7066024e382)\) -### Documentation +## [1.40.1](https://github.com/taskforcesh/bullmq/compare/v1.40.0...v1.40.1) \(2021-07-24\) -* docs: fix typo ([`307bb69`](https://github.com/taskforcesh/bullmq/commit/307bb695b98ea6094f1e2361d9019d298773c724)) +### Bug Fixes -### Fix +* connection hangs with failed connection fixes [\#656](https://github.com/taskforcesh/bullmq/issues/656) \([c465611](https://github.com/taskforcesh/bullmq/commit/c465611ed76afd2adfd0e05a8babd6e369f5c310)\) -* fix: check of existing redis instance ([`dd466b3`](https://github.com/taskforcesh/bullmq/commit/dd466b332b03b430108126531d59ff9e66ce9521)) +# [1.40.0](https://github.com/taskforcesh/bullmq/compare/v1.39.5...v1.40.0) \(2021-07-22\) -### Unknown +### Features -* Merge branch 'master' into dollarsign-as-default-queue-event-id ([`3930d5a`](https://github.com/taskforcesh/bullmq/commit/3930d5a1c24396463afaefadb09e8292038c093c)) +* **worker:** retry with delay errors in run loop \([409fe7f](https://github.com/taskforcesh/bullmq/commit/409fe7fc09b87b7916a3362a463bb9e0f17ecea8)\) -* Merge pull request #91 from Embraser01/fix-#90 +## [1.39.5](https://github.com/taskforcesh/bullmq/compare/v1.39.4...v1.39.5) \(2021-07-21\) -fix: check of existing redis instance ([`6ebae9e`](https://github.com/taskforcesh/bullmq/commit/6ebae9e111d27f423e7736776735c750ed475c20)) +### Bug Fixes -* Merge branch 'master' into dollarsign-as-default-queue-event-id ([`2727cb9`](https://github.com/taskforcesh/bullmq/commit/2727cb964d843f2a8533807f527518e8cecf2f70)) +* **move-to-finished:** remove stalled jobs when finishing \([3867126](https://github.com/taskforcesh/bullmq/commit/38671261ccc00ca7fefa677663e45a40a92df555)\) -* Merge branch 'master' into patch-1 ([`182087b`](https://github.com/taskforcesh/bullmq/commit/182087ba393caca72df9a0300d4195531079444f)) +## [1.39.4](https://github.com/taskforcesh/bullmq/compare/v1.39.3...v1.39.4) \(2021-07-21\) -* Merge branch 'master' into fix-#90 ([`b3b89b6`](https://github.com/taskforcesh/bullmq/commit/b3b89b6e74a86e1dfb6dd710a5fd8ae5ec77b044)) +### Bug Fixes -* Merge pull request #92 from taskforcesh/dependabot/npm_and_yarn/npm-6.13.4 +* **repeatable:** validate endDate when adding next repeatable job \([1324cbb](https://github.com/taskforcesh/bullmq/commit/1324cbb4effd55e98c29d95a21afca7cd045b46c)\) -chore(deps): bump npm from 6.12.0 to 6.13.4 ([`763ca72`](https://github.com/taskforcesh/bullmq/commit/763ca72f0a9ca866deea99648a5161b1aedd7998)) +## [1.39.3](https://github.com/taskforcesh/bullmq/compare/v1.39.2...v1.39.3) \(2021-07-16\) -* Merge branch 'master' into dollarsign-as-default-queue-event-id ([`e862de3`](https://github.com/taskforcesh/bullmq/commit/e862de317ecf4a04fbb10c0aeeda8afdd6b4903a)) +### Bug Fixes +* connect if redis client has status "wait" \([f711717](https://github.com/taskforcesh/bullmq/commit/f711717f56822aef43c9fd0440e30fad0876ba62)\) -## v1.6.0 (2019-12-12) +## [1.39.2](https://github.com/taskforcesh/bullmq/compare/v1.39.1...v1.39.2) \(2021-07-15\) -### Chore +### Bug Fixes -* chore(release): 1.6.0 [skip ci]nn# [1.6.0](https://github.com/taskforcesh/bullmq/compare/v1.5.0...v1.6.0) (2019-12-12) +* **queue:** ensure the Queue constructor doesn't try to set queue options if the client is closed \([b40c6eb](https://github.com/taskforcesh/bullmq/commit/b40c6eb931a71d0ae9f6454eb70d84259a6981b7)\) -### Features +## [1.39.1](https://github.com/taskforcesh/bullmq/compare/v1.39.0...v1.39.1) \(2021-07-15\) -* add generic type to job data and return value ([87c0531](https://github.com/taskforcesh/bullmq/commit/87c0531efc2716db37f8a0886848cdb786709554)) ([`fd5e524`](https://github.com/taskforcesh/bullmq/commit/fd5e524d7435df6ad0c1c805b9ed56293fc39101)) +### Bug Fixes -* chore: fix typo ([`e73355a`](https://github.com/taskforcesh/bullmq/commit/e73355ac80d45bdc635e2d7965b29a102be0c976)) +* **sandbox:** use updateProgress method name \([27d62c3](https://github.com/taskforcesh/bullmq/commit/27d62c32b2fac091b2700d6077de593c9fda4c22)\) -### Documentation +# [1.39.0](https://github.com/taskforcesh/bullmq/compare/v1.38.1...v1.39.0) \(2021-07-13\) -* docs: add github link to what-is-bullmq.md (#80) ([`4adf856`](https://github.com/taskforcesh/bullmq/commit/4adf85680028bafe2f7f1ac7a350f2d83a3fb58f)) +### Features -### Feature +* **worker+scheduler:** add a "running" attribute for healthchecking \([aae358e](https://github.com/taskforcesh/bullmq/commit/aae358e067a0b6f20124751cffcdeaebac6eb7fd)\) -* feat: add generic type to job data and return value ([`87c0531`](https://github.com/taskforcesh/bullmq/commit/87c0531efc2716db37f8a0886848cdb786709554)) +## [1.38.1](https://github.com/taskforcesh/bullmq/compare/v1.38.0...v1.38.1) \(2021-07-12\) -### Fix +### Bug Fixes -* fix: explicitly test the behavior of .on and .once ([`ea11087`](https://github.com/taskforcesh/bullmq/commit/ea11087b292d9325105707b53f92ac61c334a147)) +* **reprocess:** do not store job.id in added list \([9c0605e](https://github.com/taskforcesh/bullmq/commit/9c0605e10f0bbdce94153d3f318d56c23bfd3269)\) -* fix: ensure QE ready before adding test events ([`fd190f4`](https://github.com/taskforcesh/bullmq/commit/fd190f4be792b03273481c8aaf73be5ca42663d1)) +# [1.38.0](https://github.com/taskforcesh/bullmq/compare/v1.37.1...v1.38.0) \(2021-07-12\) -* fix: change default QueueEvents lastEventId to $ ([`3c5b01d`](https://github.com/taskforcesh/bullmq/commit/3c5b01d16ee1442f5802a0fe4e7675c14f7a7f1f)) +### Features -### Test +* **queue:** add missing events typings \([b42e78c](https://github.com/taskforcesh/bullmq/commit/b42e78c36cb6a6579a4c7cce1d7e969b230ff5b6)\) -* test: fix broken test ([`5a4acd7`](https://github.com/taskforcesh/bullmq/commit/5a4acd72442dc4d58a6da1bb2bc9fa673a62816a)) +## [1.37.1](https://github.com/taskforcesh/bullmq/compare/v1.37.0...v1.37.1) \(2021-07-02\) -### Unknown +### Bug Fixes -* Merge pull request #88 from taskforcesh/feat/add-generic-type-to-job-data +* **stalled-jobs:** move stalled jobs to wait in batches \([a23fcb8](https://github.com/taskforcesh/bullmq/commit/a23fcb82d4ca20cbc4b8cd8b544b2d2eaddd86c3)\), closes [\#422](https://github.com/taskforcesh/bullmq/issues/422) -feat: add generic type to job data and return value ([`3f9eaec`](https://github.com/taskforcesh/bullmq/commit/3f9eaeceef002e13bf9d995256282c0bb0863cd1)) +# [1.37.0](https://github.com/taskforcesh/bullmq/compare/v1.36.1...v1.37.0) \(2021-06-30\) -* Merge branch 'master' into feat/add-generic-type-to-job-data ([`d31ab9b`](https://github.com/taskforcesh/bullmq/commit/d31ab9b9204c8f20447c4392518481653b017149)) +### Features -* Merge pull request #78 from ericcarboni/patch-1 +* **job:** add changeDelay method for delayed jobs \([f0a9f9c](https://github.com/taskforcesh/bullmq/commit/f0a9f9c6479062413abc0ac9a6f744329571a618)\) -Docs: update quick start page ([`36604f5`](https://github.com/taskforcesh/bullmq/commit/36604f5c53d5984e48170ebb937dd9d2fc7c1875)) +## [1.36.1](https://github.com/taskforcesh/bullmq/compare/v1.36.0...v1.36.1) \(2021-06-22\) -* Update README.md ([`762f7e6`](https://github.com/taskforcesh/bullmq/commit/762f7e60f0577560b6e1ce1545b88e01d96d62b3)) +### Bug Fixes +* **worker:** change active event typing \([220b4f6](https://github.com/taskforcesh/bullmq/commit/220b4f619b30a8f04979e9abd0139e46d89b424d)\) -## v1.5.0 (2019-11-22) +# [1.36.0](https://github.com/taskforcesh/bullmq/compare/v1.35.0...v1.36.0) \(2021-06-20\) -### Chore +### Bug Fixes -* chore(release): 1.5.0 [skip ci]nn# [1.5.0](https://github.com/taskforcesh/bullmq/compare/v1.4.3...v1.5.0) (2019-11-22) +* **queue-events:** fix drained typing \([9cf711d](https://github.com/taskforcesh/bullmq/commit/9cf711d4d4e7d8214dfd93a243c35d0bf135cdaf)\) ### Features -* remove delay dependency ([97e1a30](https://github.com/taskforcesh/bullmq/commit/97e1a3015d853e615ddd623af07f12a194ccab2c)) -* remove dependence on Bluebird.delay [#67](https://github.com/taskforcesh/bullmq/issues/67) ([bedbaf2](https://github.com/taskforcesh/bullmq/commit/bedbaf25af6479e387cd7548e246dca7c72fc140)) ([`e8e37cf`](https://github.com/taskforcesh/bullmq/commit/e8e37cf2da26d1f67f21e3bd94da65025e7bde8f)) +* **worker:** add active event typing \([5508cdf](https://github.com/taskforcesh/bullmq/commit/5508cdf7cf372ae2f4af0ef576016eb901580671)\) +* **worker:** add progress event typing \([119cb7c](https://github.com/taskforcesh/bullmq/commit/119cb7cd7a91c0f1866f5957faf2850afadbe709)\) -### Feature +# [1.35.0](https://github.com/taskforcesh/bullmq/compare/v1.34.2...v1.35.0) \(2021-06-19\) -* feat: remove delay dependency +### Features -this commit uses delay from utils in typescript and adds a simple -test/fixtures/delay.js for use in javascript fixtures. this change also -allowed the ts compiler to identify a promise that was not `await`ed in -src/test/test_worker.ts ([`97e1a30`](https://github.com/taskforcesh/bullmq/commit/97e1a3015d853e615ddd623af07f12a194ccab2c)) +* **worker:** add drained event typing \([ed5f315](https://github.com/taskforcesh/bullmq/commit/ed5f3155415693d2a6dbfb779397d53d74b704e2)\) -* feat: remove dependence on Bluebird.delay #67 +## [1.34.2](https://github.com/taskforcesh/bullmq/compare/v1.34.1...v1.34.2) \(2021-06-18\) -This approach uses a simple setTimeout-based delay in the only production -usage (src/classes/queue-events.ts), defined in src/util.ts, and since -there was already a devDependency on a library called -[delay](https://www.npmjs.com/package/delay), this commit uses that in -test contexts. It should be easy to replace that dep with a -`(ms:number) => new Promise(r => setTimeout(r, ms))` as well. +### Bug Fixes -Closes #67 ([`bedbaf2`](https://github.com/taskforcesh/bullmq/commit/bedbaf25af6479e387cd7548e246dca7c72fc140)) +* **worker:** await for processing functions \([0566804](https://github.com/taskforcesh/bullmq/commit/056680470283f134b447a8ba39afa29e1e113585)\) -### Unknown +## [1.34.1](https://github.com/taskforcesh/bullmq/compare/v1.34.0...v1.34.1) \(2021-06-18\) -* Merge pull request #75 from jbr/feat-67-remove-bluebird-dependency +### Bug Fixes -feat: remove dependence on Bluebird and delay #67 ([`8d38bfa`](https://github.com/taskforcesh/bullmq/commit/8d38bfa77d1c1249ec9f95a754327491ef001e28)) +* **redis-connection:** remove error event listener from client \([2d70fe7](https://github.com/taskforcesh/bullmq/commit/2d70fe7cc7d43673674ec2ba0204c10661b34e95)\) +# [1.34.0](https://github.com/taskforcesh/bullmq/compare/v1.33.1...v1.34.0) \(2021-06-11\) -## v1.4.3 (2019-11-21) +### Features -### Chore +* **job:** expose queueName \([8683bd4](https://github.com/taskforcesh/bullmq/commit/8683bd470cc7304f087d646fd40c5bc3acc1263c)\) -* chore(release): 1.4.3 [skip ci]nn## [1.4.3](https://github.com/taskforcesh/bullmq/compare/v1.4.2...v1.4.3) (2019-11-21) +## [1.33.1](https://github.com/taskforcesh/bullmq/compare/v1.33.0...v1.33.1) \(2021-06-10\) ### Bug Fixes -* check in moveToFinished to use default val for opts.maxLenEvents ([d1118aa](https://github.com/taskforcesh/bullmq/commit/d1118aab77f755b4a65e3dd8ea2e195baf3d2602)) ([`136f087`](https://github.com/taskforcesh/bullmq/commit/136f0879bb28d4b6c2e860f11fc6d65446ac6900)) +* **job:** destructure default opts for pagination \([73363a5](https://github.com/taskforcesh/bullmq/commit/73363a551f56608f8936ad1f730d0a9c778aafd2)\) -### Unknown +# [1.33.0](https://github.com/taskforcesh/bullmq/compare/v1.32.0...v1.33.0) \(2021-06-10\) -* Merge pull request #73 from taskforcesh/fix-72-default-maxLenEvents-in-move-to-finished-lua - -fix: check in moveToFinished to use default val for opts.maxLenEvents ([`f79e5ad`](https://github.com/taskforcesh/bullmq/commit/f79e5ad83398bd858dd082f7b12639a9f38e7f49)) +### Features -* Merge branch 'master' into fix-72-default-maxLenEvents-in-move-to-finished-lua ([`5cbc742`](https://github.com/taskforcesh/bullmq/commit/5cbc742f9ee8420a4bf06d22080ba58572752a13)) +* **job:** add getDependenciesCount method \([ae39a4c](https://github.com/taskforcesh/bullmq/commit/ae39a4c77a958242cb445dbb32ae27b15a953653)\) +# [1.32.0](https://github.com/taskforcesh/bullmq/compare/v1.31.1...v1.32.0) \(2021-06-07\) -## v1.4.2 (2019-11-21) +### Features -### Chore +* **flow-producer:** add getFlow method \([ce93d04](https://github.com/taskforcesh/bullmq/commit/ce93d04c962686aff34f670f2decadadbf1cf4ca)\) -* chore(release): 1.4.2 [skip ci]nn## [1.4.2](https://github.com/taskforcesh/bullmq/compare/v1.4.1...v1.4.2) (2019-11-21) +## [1.31.1](https://github.com/taskforcesh/bullmq/compare/v1.31.0...v1.31.1) \(2021-06-07\) ### Bug Fixes -* avoid Job<->Queue circular json error ([5752727](https://github.com/taskforcesh/bullmq/commit/5752727a6294e1b8d35f6a49e4953375510e10e6)) -* avoid the .toJSON serializer interface [#70](https://github.com/taskforcesh/bullmq/issues/70) ([5941b82](https://github.com/taskforcesh/bullmq/commit/5941b82b646e46d53970197a404e5ea54f09d008)) ([`371ef07`](https://github.com/taskforcesh/bullmq/commit/371ef07fbb61c5ad490061c9571dbd8df9f6ab47)) +* **worker:** remove processed key when removeOnComplete \([4ec1b73](https://github.com/taskforcesh/bullmq/commit/4ec1b739d6aeeb2fc21887b58f5978027ddcdb50)\) + +# [1.31.0](https://github.com/taskforcesh/bullmq/compare/v1.30.2...v1.31.0) \(2021-06-04\) -### Fix +### Features -* fix: avoid Job<->Queue circular json error ([`5752727`](https://github.com/taskforcesh/bullmq/commit/5752727a6294e1b8d35f6a49e4953375510e10e6)) +* **job:** extend getDependencies to support pagination \([9b61bbb](https://github.com/taskforcesh/bullmq/commit/9b61bbb9160358f629cd458fa8dc4c9b6ebcd9f5)\) -* fix: avoid the .toJSON serializer interface #70 +## [1.30.2](https://github.com/taskforcesh/bullmq/compare/v1.30.1...v1.30.2) \(2021-06-03\) -renames Job#toJSON to Job#asJSON and adds a test ([`5941b82`](https://github.com/taskforcesh/bullmq/commit/5941b82b646e46d53970197a404e5ea54f09d008)) +### Bug Fixes -* fix: check in moveToFinished to use default val for opts.maxLenEvents ([`d1118aa`](https://github.com/taskforcesh/bullmq/commit/d1118aab77f755b4a65e3dd8ea2e195baf3d2602)) +* **job:** parse results in getDependencies for processed jobs \([6fdc701](https://github.com/taskforcesh/bullmq/commit/6fdc7011ba910e5ca9c6d87926cc523ef38ef3ca)\) -### Unknown +## [1.30.1](https://github.com/taskforcesh/bullmq/compare/v1.30.0...v1.30.1) \(2021-06-02\) -* Merge pull request #74 from jbr/fix-70-job-tojson +### Bug Fixes -fix: avoid changing Job property types through JSON serialization/deserialization #70 ([`344a887`](https://github.com/taskforcesh/bullmq/commit/344a887e924048d7a2ab2036b6adfcdd99a6f466)) +* **move-to-waiting-children:** make opts optional \([33bd76a](https://github.com/taskforcesh/bullmq/commit/33bd76a2cac9be450b5d76c6cfe16751c7569ceb)\) +# [1.30.0](https://github.com/taskforcesh/bullmq/compare/v1.29.1...v1.30.0) \(2021-06-02\) -## v1.4.1 (2019-11-08) +### Features -### Chore +* add some event typing \([934c004](https://github.com/taskforcesh/bullmq/commit/934c0040b0802bb67f44a979584405d795a8ab5e)\) -* chore(release): 1.4.1 [skip ci]nn## [1.4.1](https://github.com/taskforcesh/bullmq/compare/v1.4.0...v1.4.1) (2019-11-08) +## [1.29.1](https://github.com/taskforcesh/bullmq/compare/v1.29.0...v1.29.1) \(2021-05-31\) ### Bug Fixes -* default job settings [#58](https://github.com/taskforcesh/bullmq/issues/58) ([667fc6e](https://github.com/taskforcesh/bullmq/commit/667fc6e00ae4d6da639d285a104fb67e01c95bbd)) ([`ad1fc3c`](https://github.com/taskforcesh/bullmq/commit/ad1fc3c19d5c02382989a7e1cb72b807b743465c)) +* **move-stalled-jobs-to-wait:** send failedReason to queueEvents \([7c510b5](https://github.com/taskforcesh/bullmq/commit/7c510b542558bd4b1330371b73331f37b97a818d)\) -### Unknown +# [1.29.0](https://github.com/taskforcesh/bullmq/compare/v1.28.2...v1.29.0) \(2021-05-31\) -* Merge pull request #58 from HNicolas/patch-1 +### Features -Fix #57 ([`f67d306`](https://github.com/taskforcesh/bullmq/commit/f67d3063f2296325e2d753600dbf633960034195)) +* add move to waiting children for manual processing \([\#477](https://github.com/taskforcesh/bullmq/issues/477)\) \([f312f29](https://github.com/taskforcesh/bullmq/commit/f312f293b8cac79af9c14848ffd1b11b65a806c3)\) -* Merge branch 'master' into patch-1 ([`c41b4f3`](https://github.com/taskforcesh/bullmq/commit/c41b4f329dd21874c6a2bf7b2a649c956fd0a3da)) +## [1.28.2](https://github.com/taskforcesh/bullmq/compare/v1.28.1...v1.28.2) \(2021-05-31\) -* GitBook: [master] 4 pages modified ([`fde089d`](https://github.com/taskforcesh/bullmq/commit/fde089d85397ad48a382e3c1eb0fac835a9f49ad)) +### Bug Fixes -* Merge branch 'master' into patch-1 ([`cabed12`](https://github.com/taskforcesh/bullmq/commit/cabed126f7d699e1335be78007221987000146cd)) +* **obliterate:** remove job logs \([ea91895](https://github.com/taskforcesh/bullmq/commit/ea918950d7696241047a23773cc13cd675209c4b)\) +## [1.28.1](https://github.com/taskforcesh/bullmq/compare/v1.28.0...v1.28.1) \(2021-05-31\) -## v1.4.0 (2019-11-06) +### Bug Fixes -### Chore +* **get-workers:** use strict equality on name fixes [\#564](https://github.com/taskforcesh/bullmq/issues/564) \([4becfa6](https://github.com/taskforcesh/bullmq/commit/4becfa66e09dacf9830804898c45cb3317dcf438)\) -* chore(release): 1.4.0 [skip ci]nn# [1.4.0](https://github.com/taskforcesh/bullmq/compare/v1.3.0...v1.4.0) (2019-11-06) +# [1.28.0](https://github.com/taskforcesh/bullmq/compare/v1.27.0...v1.28.0) \(2021-05-24\) ### Features -* job.progress() return last progress for sandboxed processors ([5c4b146](https://github.com/taskforcesh/bullmq/commit/5c4b146ca8e42c8a29f9db87326a17deac30e10e)) ([`5e9e0b3`](https://github.com/taskforcesh/bullmq/commit/5e9e0b33cd548952a6968151db94325f299ae3c4)) - -### Unknown +* **flow-producer:** expose client connection \([17d4263](https://github.com/taskforcesh/bullmq/commit/17d4263abfa57797535cd8773c4cc316ff5149d2)\) -* Merge branch 'master' into patch-1 ([`f964575`](https://github.com/taskforcesh/bullmq/commit/f964575510ed246bee14d2edb5c1aa61423d0e10)) +# [1.27.0](https://github.com/taskforcesh/bullmq/compare/v1.26.5...v1.27.0) \(2021-05-24\) -* Merge pull request #60 from taskforcesh/feat-job-progress-getter-for-sanboxed-processors +### Features -job.progress() return last progress for sandboxed processors ([`11bfae6`](https://github.com/taskforcesh/bullmq/commit/11bfae63ac64bfa24df1e51ff5343447863e0095)) +* **repeat:** add immediately opt for repeat \([d095573](https://github.com/taskforcesh/bullmq/commit/d095573f8e7ce5911f777df48368382eceb99d6a)\) -* Merge branch 'master' into feat-job-progress-getter-for-sanboxed-processors ([`302bf9c`](https://github.com/taskforcesh/bullmq/commit/302bf9cb30aafb8f3e3d8abe9bbd2904661c3340)) +## [1.26.5](https://github.com/taskforcesh/bullmq/compare/v1.26.4...v1.26.5) \(2021-05-21\) +### Bug Fixes -## v1.3.0 (2019-11-05) +* **movetofinished:** use parent queue for events \([1b17b62](https://github.com/taskforcesh/bullmq/commit/1b17b62a794728a318f1079e73d07e33fe65c9c7)\) -### Chore +## [1.26.4](https://github.com/taskforcesh/bullmq/compare/v1.26.3...v1.26.4) \(2021-05-20\) -* chore(release): 1.3.0 [skip ci]nn# [1.3.0](https://github.com/taskforcesh/bullmq/compare/v1.2.0...v1.3.0) (2019-11-05) +### Bug Fixes -### Features +* **removejob:** delete processed hash \([a2a5058](https://github.com/taskforcesh/bullmq/commit/a2a5058f18ab77ed4d0114d48f47e6144d632cbf)\) -* test worker extends job lock while job is active ([577efdf](https://github.com/taskforcesh/bullmq/commit/577efdfb1d2d3140be78dee3bd658b5ce969b16d)) ([`c6b1e65`](https://github.com/taskforcesh/bullmq/commit/c6b1e65b424f0feb700468564276786895acec70)) +## [1.26.3](https://github.com/taskforcesh/bullmq/compare/v1.26.2...v1.26.3) \(2021-05-19\) -### Feature +### Bug Fixes -* feat: test worker extends job lock while job is active ([`577efdf`](https://github.com/taskforcesh/bullmq/commit/577efdfb1d2d3140be78dee3bd658b5ce969b16d)) +* ensure connection reconnects when pausing fixes [\#160](https://github.com/taskforcesh/bullmq/issues/160) \([f38fee8](https://github.com/taskforcesh/bullmq/commit/f38fee84def75dd8a38cbb8bfb5aa662485ddf91)\) -* feat: job.progress() return last progress for sandboxed processors +## [1.26.2](https://github.com/taskforcesh/bullmq/compare/v1.26.1...v1.26.2) \(2021-05-18\) -ported from Bull3 (https://github.com/OptimalBits/bull/pull/1536) ([`5c4b146`](https://github.com/taskforcesh/bullmq/commit/5c4b146ca8e42c8a29f9db87326a17deac30e10e)) +### Bug Fixes -### Fix +* **getjoblogs:** no reversed pagination \([fb0c3a5](https://github.com/taskforcesh/bullmq/commit/fb0c3a50f0d37851a8f35cb4c478259a63d93461)\) -* fix: default job settings #58 +## [1.26.1](https://github.com/taskforcesh/bullmq/compare/v1.26.0...v1.26.1) \(2021-05-17\) -I updated job options merging in order to override default job options when options are provided at job level. -Maybe a deep merge between the two objects could be even better. ([`667fc6e`](https://github.com/taskforcesh/bullmq/commit/667fc6e00ae4d6da639d285a104fb67e01c95bbd)) +### Bug Fixes -### Unknown +* **flow-producer:** use custom jobId as parentId for children fixes [\#552](https://github.com/taskforcesh/bullmq/issues/552) \([645b576](https://github.com/taskforcesh/bullmq/commit/645b576c1aabd8426ab77a68c199a594867cd729)\) -* Merge branch 'master' into feat-job-progress-getter-for-sanboxed-processors ([`5211dd7`](https://github.com/taskforcesh/bullmq/commit/5211dd7258396266bc41bd6ecb530e4c3042f5c8)) +# [1.26.0](https://github.com/taskforcesh/bullmq/compare/v1.25.1...v1.26.0) \(2021-05-16\) -* Merge pull request #61 from taskforcesh/feat-test-worker-extends-job-lock +### Features -Test worker extends job lock while job is active ([`0cf504f`](https://github.com/taskforcesh/bullmq/commit/0cf504f5fca2240e5e27eb95475d2f221bf3bfc9)) +* **custombackoff:** provide job as third parameter \([ddaf8dc](https://github.com/taskforcesh/bullmq/commit/ddaf8dc2f95ca336cb117a540edd4640d5d579e4)\) +## [1.25.2](https://github.com/taskforcesh/bullmq/compare/v1.25.1...v1.25.2) \(2021-05-16\) -## v1.2.0 (2019-11-03) +### Bug Fixes -### Chore +* **flow-producer:** process parent with children as empty array fixes [\#547](https://github.com/taskforcesh/bullmq/issues/547) \([48168f0](https://github.com/taskforcesh/bullmq/commit/48168f07cbaed7ed522c68d127a0c7d5e4cb380e)\) -* chore(release): 1.2.0 [skip ci]nn# [1.2.0](https://github.com/taskforcesh/bullmq/compare/v1.1.0...v1.2.0) (2019-11-03) +## [1.25.1](https://github.com/taskforcesh/bullmq/compare/v1.25.0...v1.25.1) \(2021-05-13\) ### Bug Fixes -* only run coveralls after success ([bd51893](https://github.com/taskforcesh/bullmq/commit/bd51893c35793657b65246a2f5a06469488c8a06)) +* **addbulk:** should not consider repeat option \([c85357e](https://github.com/taskforcesh/bullmq/commit/c85357e415b9ea66f845f751a4943b5c48c2bb18)\) -### Features +# [1.25.0](https://github.com/taskforcesh/bullmq/compare/v1.24.5...v1.25.0) \(2021-05-11\) -* added code coverage and coveralls ([298cfc4](https://github.com/taskforcesh/bullmq/commit/298cfc48e35e648e6a22ac0d1633ac16c7b6e3de)) -* added missing deps for coverage ([6f3ab8d](https://github.com/taskforcesh/bullmq/commit/6f3ab8d78ba8503a76447f0db5abf0c1c4f8e185)) -* ignore commitlint file in coverage ([f874441](https://github.com/taskforcesh/bullmq/commit/f8744411a1b20b95e568502be15ec50cf8520926)) -* only upload coverage once after all tests pass ([a7f73ec](https://github.com/taskforcesh/bullmq/commit/a7f73ecc2f51544f1d810de046ba073cb7aa5663)) ([`89bb554`](https://github.com/taskforcesh/bullmq/commit/89bb554b3e8dcc7f8e2376f1a4557ef3d8e0c96f)) +### Features -### Feature +* **job:** add sizeLimit option when creating a job \([f10aeeb](https://github.com/taskforcesh/bullmq/commit/f10aeeb62520d20b31d35440524d147ac4adcc9c)\) -* feat: only upload coverage once after all tests pass ([`a7f73ec`](https://github.com/taskforcesh/bullmq/commit/a7f73ecc2f51544f1d810de046ba073cb7aa5663)) +## [1.24.5](https://github.com/taskforcesh/bullmq/compare/v1.24.4...v1.24.5) \(2021-05-08\) -* feat: ignore commitlint file in coverage ([`f874441`](https://github.com/taskforcesh/bullmq/commit/f8744411a1b20b95e568502be15ec50cf8520926)) +### Bug Fixes -* feat: added missing deps for coverage ([`6f3ab8d`](https://github.com/taskforcesh/bullmq/commit/6f3ab8d78ba8503a76447f0db5abf0c1c4f8e185)) +* **deps:** upgrading lodash to 4.17.21 \([6e90c3f](https://github.com/taskforcesh/bullmq/commit/6e90c3f0a3d2735875ebf44457b342629aa14572)\) -* feat: added code coverage and coveralls ([`298cfc4`](https://github.com/taskforcesh/bullmq/commit/298cfc48e35e648e6a22ac0d1633ac16c7b6e3de)) +## [1.24.4](https://github.com/taskforcesh/bullmq/compare/v1.24.3...v1.24.4) \(2021-05-07\) -### Fix +### Bug Fixes -* fix: only run coveralls after success ([`bd51893`](https://github.com/taskforcesh/bullmq/commit/bd51893c35793657b65246a2f5a06469488c8a06)) +* **cluster:** add redis cluster support \([5a7dd14](https://github.com/taskforcesh/bullmq/commit/5a7dd145bd3ae11850cac6d1b4fb9b01af0e6766)\) +* **redisclient:** not reference types from import \([022fc04](https://github.com/taskforcesh/bullmq/commit/022fc042a17c1754af7d74acabb7dd5c397576ab)\) -### Unknown +## [1.24.3](https://github.com/taskforcesh/bullmq/compare/v1.24.2...v1.24.3) \(2021-05-05\) -* Merge pull request #55 from MichielDeMey/feature/coveralls +### Bug Fixes -Feat/coveralls Adds code coverage with Coveralls integration ([`4deb7d4`](https://github.com/taskforcesh/bullmq/commit/4deb7d43db5ee459cb8536e5202d2e4bb3811af3)) +* **sandbox:** properly redirect stdout \([\#525](https://github.com/taskforcesh/bullmq/issues/525)\) \([c8642a0](https://github.com/taskforcesh/bullmq/commit/c8642a0724dc3d2f77abc4b5d6d24efa67c1e592)\) +## [1.24.2](https://github.com/taskforcesh/bullmq/compare/v1.24.1...v1.24.2) \(2021-05-05\) -## v1.1.0 (2019-11-01) +### Bug Fixes -### Chore +* **sandbox:** handle broken processor files \([2326983](https://github.com/taskforcesh/bullmq/commit/23269839af0be2f7cf2a4f6062563d30904bc259)\) -* chore(release): 1.1.0 [skip ci]nn# [1.1.0](https://github.com/taskforcesh/bullmq/compare/v1.0.1...v1.1.0) (2019-11-01) +## [1.24.1](https://github.com/taskforcesh/bullmq/compare/v1.24.0...v1.24.1) \(2021-05-05\) ### Bug Fixes -* failing build ([bb21d53](https://github.com/taskforcesh/bullmq/commit/bb21d53b199885dcc97e7fe20f60caf65e55e782)) -* fix failing tests ([824eb6b](https://github.com/taskforcesh/bullmq/commit/824eb6bfb2b750b823d057c894797ccb336245d8)) +* **queueevents:** add active type fixes [\#519](https://github.com/taskforcesh/bullmq/issues/519) \([10af883](https://github.com/taskforcesh/bullmq/commit/10af883db849cf9392b26724903f88752d9be92c)\) + +# [1.24.0](https://github.com/taskforcesh/bullmq/compare/v1.23.1...v1.24.0) \(2021-05-03\) ### Features -* initial version of job locking mechanism ([1d4fa38](https://github.com/taskforcesh/bullmq/commit/1d4fa383e39f4f5dcb69a71a1359dd5dea75544c)) ([`1f55fa2`](https://github.com/taskforcesh/bullmq/commit/1f55fa26be8834ac970a219485e3c5c681390b75)) +* add option for non-blocking getNextJob \([13ce2cf](https://github.com/taskforcesh/bullmq/commit/13ce2cfd4ccd64f45567df31de11af95b0fe67d9)\) -### Fix +## [1.23.1](https://github.com/taskforcesh/bullmq/compare/v1.23.0...v1.23.1) \(2021-05-03\) -* fix: failing build ([`bb21d53`](https://github.com/taskforcesh/bullmq/commit/bb21d53b199885dcc97e7fe20f60caf65e55e782)) +### Bug Fixes -* fix: fix failing tests ([`824eb6b`](https://github.com/taskforcesh/bullmq/commit/824eb6bfb2b750b823d057c894797ccb336245d8)) +* add return type for job.waitUntilFinished\(\) \([59ede97](https://github.com/taskforcesh/bullmq/commit/59ede976061a738503f70d9eb0c92a4b1d6ae4a3)\) -### Unknown +# [1.23.0](https://github.com/taskforcesh/bullmq/compare/v1.22.2...v1.23.0) \(2021-04-30\) -* Merge pull request #52 from taskforcesh/feat-47-job-locking +### Features -Job locking mechanism ([`dd502b2`](https://github.com/taskforcesh/bullmq/commit/dd502b21952cba180f419a542c319414372177b1)) +* **job:** pass parent opts to addBulk \([7f21615](https://github.com/taskforcesh/bullmq/commit/7f216153293e45c4f33f2592561c925ca4464d44)\) -* Merge branch 'feat-47-job-locking' of https://github.com/taskforcesh/bullmq into feat-47-job-locking ([`5e0d4f7`](https://github.com/taskforcesh/bullmq/commit/5e0d4f77cef174fcbac8ecf1423d4fbf3938ad2a)) +## [1.22.2](https://github.com/taskforcesh/bullmq/compare/v1.22.1...v1.22.2) \(2021-04-29\) -* Merge branch 'master' into feat-47-job-locking ([`8464697`](https://github.com/taskforcesh/bullmq/commit/8464697d1d1ccfd40d851ebe12226a8eb75c28b8)) +### Bug Fixes -* Merge pull request #54 from root-io/patch-1 +* add missing Redis Cluster types fixes [\#406](https://github.com/taskforcesh/bullmq/issues/406) \([07743ff](https://github.com/taskforcesh/bullmq/commit/07743ff310ad716802afdd5bdc6844eb5296318e)\) -doc: use correct connection property ([`f3336de`](https://github.com/taskforcesh/bullmq/commit/f3336de43567e859905795517e5bf1aa4936e60d)) +## [1.22.1](https://github.com/taskforcesh/bullmq/compare/v1.22.0...v1.22.1) \(2021-04-28\) -* Merge branch 'master' into patch-1 ([`d311fc4`](https://github.com/taskforcesh/bullmq/commit/d311fc420a85718cf77fe4103d923a34efadbc63)) +### Bug Fixes -* Merge branch 'master' into feat-47-job-locking ([`d4509b9`](https://github.com/taskforcesh/bullmq/commit/d4509b95498be24d32f815e08b2aabc4cea14ed2)) +* **addjob:** fix redis cluster CROSSSLOT \([a5fd1d7](https://github.com/taskforcesh/bullmq/commit/a5fd1d7a0713585d11bd862bfe2d426d5242bd3c)\) -* GitBook: [master] one page modified ([`93bfbd0`](https://github.com/taskforcesh/bullmq/commit/93bfbd0395f2c69193476b93ff5ad26f1933a7ca)) +# [1.22.0](https://github.com/taskforcesh/bullmq/compare/v1.21.0...v1.22.0) \(2021-04-28\) -* doc: use correct connection property ([`3a1ef5e`](https://github.com/taskforcesh/bullmq/commit/3a1ef5e2aafe169b212a13d63cc2f7687ace89d9)) +### Features -* Merge branch 'master' into feat-47-job-locking ([`4bab512`](https://github.com/taskforcesh/bullmq/commit/4bab512fda82fccdbda5d7896560e3b163e154c5)) +* **jobcreate:** allow passing parent in job.create \([ede3626](https://github.com/taskforcesh/bullmq/commit/ede3626b65fb5d3f4cebc55c813e9fa4b482b887)\) +# [1.21.0](https://github.com/taskforcesh/bullmq/compare/v1.20.6...v1.21.0) \(2021-04-26\) -## v1.0.1 (2019-10-27) +### Features -### Chore +* add typing for addNextRepeatableJob \([a3be937](https://github.com/taskforcesh/bullmq/commit/a3be9379e29ae3e01264e2269e8b03aa614fd42c)\) -* chore(release): 1.0.1 [skip ci]nn## [1.0.1](https://github.com/taskforcesh/bullmq/compare/v1.0.0...v1.0.1) (2019-10-27) +## [1.20.6](https://github.com/taskforcesh/bullmq/compare/v1.20.5...v1.20.6) \(2021-04-25\) ### Bug Fixes -* save job stacktrace on failure ([85dfe52](https://github.com/taskforcesh/bullmq/commit/85dfe525079a5f89c1901dbf35c7ddc6663afc24)) -* simplify logic for stackTraceLimit ([296bd89](https://github.com/taskforcesh/bullmq/commit/296bd89514d430a499afee934dcae2aec41cffa2)) ([`72f3669`](https://github.com/taskforcesh/bullmq/commit/72f36694139163009bc237a9ee25ea0070946dfb)) - -* chore: enabled npm publish ([`cd3dc46`](https://github.com/taskforcesh/bullmq/commit/cd3dc46b6cfc5a403a5bbe36519f471fb4128fe5)) - -### Feature - -* feat: initial version of job locking mechanism ([`1d4fa38`](https://github.com/taskforcesh/bullmq/commit/1d4fa383e39f4f5dcb69a71a1359dd5dea75544c)) - -### Fix +* **movetocompleted:** should not complete before children \([812ff66](https://github.com/taskforcesh/bullmq/commit/812ff664b3e162dd87831ca04ebfdb783cc7ae5b)\) -* fix: simplify logic for stackTraceLimit ([`296bd89`](https://github.com/taskforcesh/bullmq/commit/296bd89514d430a499afee934dcae2aec41cffa2)) +## [1.20.5](https://github.com/taskforcesh/bullmq/compare/v1.20.4...v1.20.5) \(2021-04-23\) -* fix: save job stacktrace on failure ([`85dfe52`](https://github.com/taskforcesh/bullmq/commit/85dfe525079a5f89c1901dbf35c7ddc6663afc24)) - -### Unknown +### Bug Fixes -* Merge pull request #51 from taskforcesh/fix-31-stacktrace-missing-after-job-failure +* **obliterate:** correctly remove many jobs \([b5ae4ce](https://github.com/taskforcesh/bullmq/commit/b5ae4ce92aeaf000408ffbbcd22d829cee20f2f8)\) -Save job stacktrace on failure ([`855560a`](https://github.com/taskforcesh/bullmq/commit/855560a675dd40cc9d51bcc2bcad70bc3c44373d)) +## [1.20.4](https://github.com/taskforcesh/bullmq/compare/v1.20.3...v1.20.4) \(2021-04-23\) -* Merge branch 'master' into fix-31-stacktrace-missing-after-job-failure ([`42f671a`](https://github.com/taskforcesh/bullmq/commit/42f671af17a4680b1168100ec60fb9921b624acf)) +### Bug Fixes -* Merge branch 'master' into feat-47-job-locking ([`e0444e3`](https://github.com/taskforcesh/bullmq/commit/e0444e396fb73fa911cfd02d5689b4dad41c807e)) +* remove internal deps on barrel fixes [\#469](https://github.com/taskforcesh/bullmq/issues/469) \([\#495](https://github.com/taskforcesh/bullmq/issues/495)\) \([60dbeed](https://github.com/taskforcesh/bullmq/commit/60dbeed7ff1d9b6cb0e35590713fee8a7be09477)\) -* Merge pull request #39 from taskforcesh/fix-cleanup-dependencies +## [1.20.3](https://github.com/taskforcesh/bullmq/compare/v1.20.2...v1.20.3) \(2021-04-23\) -Replace deprecated node-uuid with uuid, move lodash to runtime dependencies ([`3a3a21b`](https://github.com/taskforcesh/bullmq/commit/3a3a21b3da21485c7ff73ee7e297b14ec9f01bab)) +### Bug Fixes -* Merge branch 'master' into fix-cleanup-dependencies ([`13a8aff`](https://github.com/taskforcesh/bullmq/commit/13a8affa7435a4e7132d7e44394633e62350b935)) +* **flows:** correct typings fixes [\#492](https://github.com/taskforcesh/bullmq/issues/492) \([a77f80b](https://github.com/taskforcesh/bullmq/commit/a77f80bc07e7627f512323f0dcc9141fe408809e)\) +## [1.20.2](https://github.com/taskforcesh/bullmq/compare/v1.20.1...v1.20.2) \(2021-04-22\) -## v1.0.0 (2019-10-20) +### Bug Fixes -### Chore +* **movetodelayed:** check if job is in active state \([4e63f70](https://github.com/taskforcesh/bullmq/commit/4e63f70aac367d4dd695bbe07c72a08a82a65d97)\) -* chore(release): 1.0.0 [skip ci]nn# 1.0.0 (2019-10-20) +## [1.20.1](https://github.com/taskforcesh/bullmq/compare/v1.20.0...v1.20.1) \(2021-04-22\) ### Bug Fixes -* add compilation step before running tests ([64abc13](https://github.com/taskforcesh/bullmq/commit/64abc13681f8735fb3ee5add5b271bb4da618047)) -* add extra client to worker fixes [#34](https://github.com/taskforcesh/bullmq/issues/34) ([90bd891](https://github.com/taskforcesh/bullmq/commit/90bd891c7514f5e9e397d7aad15069ee55bebacd)) -* add missing dependency ([b92e330](https://github.com/taskforcesh/bullmq/commit/b92e330aad35ae54f43376f92ad1b41209012b76)) -* check closing after resuming from pause ([7b2cef3](https://github.com/taskforcesh/bullmq/commit/7b2cef3677e2b3af0370e0023aec4b971ad313fe)) -* default opts ([333c73b](https://github.com/taskforcesh/bullmq/commit/333c73b5819a263ae92bdb54f0406c19db5cb64f)) -* do not block if blockTime is zero ([13b2df2](https://github.com/taskforcesh/bullmq/commit/13b2df20cf045c069b8b581751e117722681dcd4)) -* do not exec if closing ([b1d1c08](https://github.com/taskforcesh/bullmq/commit/b1d1c08a2948088eeb3dd65de78085329bac671b)) -* do not trim if maxEvents is undefined ([7edd8f4](https://github.com/taskforcesh/bullmq/commit/7edd8f47b392c8b3a7369196befdafa4b29421d1)) -* emit wait event in add job ([39cba31](https://github.com/taskforcesh/bullmq/commit/39cba31a30b7ef762a8d55d4bc34efec636207bf)) -* fix a couple of job tests ([e66b97b](https://github.com/taskforcesh/bullmq/commit/e66b97be4577d5ab373fff0f3f45d73de7842a37)) -* fix compiling error ([3cf2617](https://github.com/taskforcesh/bullmq/commit/3cf261703292d263d1e2017ae30eb490121dab4e)) -* fix more tests ([6a07b35](https://github.com/taskforcesh/bullmq/commit/6a07b3518f856e8f7158be032110c925ed5c924f)) -* fix progress script ([4228e27](https://github.com/taskforcesh/bullmq/commit/4228e2768c0cf404e09642ebb4053147d0badb56)) -* fix retry functionality ([ec41ea4](https://github.com/taskforcesh/bullmq/commit/ec41ea4e0bd88b10b1ba434ef5ceb0952bb59f7b)) -* fix several floating promises ([590a4a9](https://github.com/taskforcesh/bullmq/commit/590a4a925167a7c7d6c0d9764bbb5ab69235beb7)) -* fixed reprocess lua script ([b78296f](https://github.com/taskforcesh/bullmq/commit/b78296f33517b8c5d79b300fef920edd03149d2f)) -* improve concurrency mechanism ([a3f6148](https://github.com/taskforcesh/bullmq/commit/a3f61489e3c9891f42749ff85bd41064943c62dc)) -* improve disconnection for queue events ([56b53a1](https://github.com/taskforcesh/bullmq/commit/56b53a1aca1e527b50f04d906653060fe8ca644e)) -* initialize events comsumption in constructor ([dbb66cd](https://github.com/taskforcesh/bullmq/commit/dbb66cda9722d44eca806fa6ad1cabdaabac846a)) -* make ioredis typings a normal dependency ([fb80b90](https://github.com/taskforcesh/bullmq/commit/fb80b90b12931a12a1a93c5e204dbf90eed4f48f)) -* minor fixes ([7791cda](https://github.com/taskforcesh/bullmq/commit/7791cdac2bfb6a7fbbab9c95c5d89b1eae226a4c)) -* parse progres and return value in events ([9e43d0e](https://github.com/taskforcesh/bullmq/commit/9e43d0e30ab90a290942418718cde1f5bfbdcf56)) -* properly emit event for progress ([3f70175](https://github.com/taskforcesh/bullmq/commit/3f701750b1c957027825ee90b58141cd2556694f)) -* reduce drain delay to 5 seconds ([c6cfe7c](https://github.com/taskforcesh/bullmq/commit/c6cfe7c0b50cabe5e5eb31f4b631a8b1d3706611)) -* remove buggy close() on redis-connection (fixes 5 failing tests) ([64c2ede](https://github.com/taskforcesh/bullmq/commit/64c2edec5e738f43676d0f4ca61bdea8609203fc)) -* remove unused dependencies ([34293c8](https://github.com/taskforcesh/bullmq/commit/34293c84bb0ed54f18d70c86821c3ac627d376a5)) -* replace init by waitUntilReady ([4336161](https://github.com/taskforcesh/bullmq/commit/43361610de5b1a993a1c65f3f21ac745b8face21)) -* reworked initialization of redis clients ([c17d4be](https://github.com/taskforcesh/bullmq/commit/c17d4be5a2ecdda3efcdc6b9d7aecdfaccd06d83)) -* several fixes to make the lib work on other ts projects ([3cac1b0](https://github.com/taskforcesh/bullmq/commit/3cac1b0715613d9df51cb1ed6fe0859bcfbb8e9b)) -* throw error messages instead of codes ([9267541](https://github.com/taskforcesh/bullmq/commit/92675413f1c3b9564574dc264ffcab0d6089e70e)) -* update tests after merge ([51f75a4](https://github.com/taskforcesh/bullmq/commit/51f75a4929e7ae2704e42fa9035e335fe60d8dc0)) -* wait until ready before trying to get jobs ([f3b768f](https://github.com/taskforcesh/bullmq/commit/f3b768f251ddafa207466af552376065b35bec8f)) -* **connections:** reused connections ([1e808d2](https://github.com/taskforcesh/bullmq/commit/1e808d24018a29f6611f4fccd2f5754de0fa3e39)) -* waitUntilFinished improvements ([18d4afe](https://github.com/taskforcesh/bullmq/commit/18d4afef08f04d19cb8d931e02fff8f962d07ee7)) +* **worker:** make token optional in processor function fixes [\#490](https://github.com/taskforcesh/bullmq/issues/490) \([3940bd7](https://github.com/taskforcesh/bullmq/commit/3940bd71c6faf3bd5fce572b9c1f11cb5b5d2123)\) -### Features +# [1.20.0](https://github.com/taskforcesh/bullmq/compare/v1.19.3...v1.20.0) \(2021-04-21\) -* add cleaned event ([c544775](https://github.com/taskforcesh/bullmq/commit/c544775803626b5f03cf6f7c3cf18ed1d92debab)) -* add empty method ([4376112](https://github.com/taskforcesh/bullmq/commit/4376112369d869c0a5c7ab4a543cfc50200e1414)) -* add retry errors ([f6a7990](https://github.com/taskforcesh/bullmq/commit/f6a7990fb74585985729c5d95e2238acde6cf74a)) -* add script to generate typedocs ([d0a8cb3](https://github.com/taskforcesh/bullmq/commit/d0a8cb32ef9090652017f8fbf2ca42f0960687f7)) -* add some new tests for compat class, more minor fixes ([bc0f653](https://github.com/taskforcesh/bullmq/commit/bc0f653ecf7aedd5a46eee6f912ecd6849395dca)) -* add support for adding jobs in bulk ([b62bddc](https://github.com/taskforcesh/bullmq/commit/b62bddc054b266a809b4b1646558a095a276d6d1)) -* add trimEvents method to queue client ([b7da7c4](https://github.com/taskforcesh/bullmq/commit/b7da7c4de2de81282aa41f8b7624b9030edf7d15)) -* automatically trim events ([279bbba](https://github.com/taskforcesh/bullmq/commit/279bbbab7e96ad8676ed3bd68663cb199067ea67)) -* emit global stalled event fixes [#10](https://github.com/taskforcesh/bullmq/issues/10) ([241f229](https://github.com/taskforcesh/bullmq/commit/241f229761691b9ac17124da005f91594a78273d)) -* get rid of Job3 in favor of bullmq Job class ([7590cea](https://github.com/taskforcesh/bullmq/commit/7590ceae7abe32a8824e4a265f95fef2f9a6665f)) -* implement close in redis connection fixes [#8](https://github.com/taskforcesh/bullmq/issues/8) ([6de8b48](https://github.com/taskforcesh/bullmq/commit/6de8b48c9612ea39bb28db5f4130cb2a2bb5ee90)) -* make delay in backoffs optional ([30d59e5](https://github.com/taskforcesh/bullmq/commit/30d59e519794780a8198222d0bbd88779c623275)) -* move async initialization to constructors ([3fbacd0](https://github.com/taskforcesh/bullmq/commit/3fbacd088bc3bfbd61ed8ff173e4401193ce48ec)) -* port a lot of functionality from bull 3.x ([ec9f3d2](https://github.com/taskforcesh/bullmq/commit/ec9f3d266c1aca0c27cb600f056d813c81259b4c)) -* port more features from bull 3.x ([75bd261](https://github.com/taskforcesh/bullmq/commit/75bd26158678ee45a14e04fd7c3a1f96219979a2)) -* ported tests and functionality from bull 3 ([1b6b192](https://github.com/taskforcesh/bullmq/commit/1b6b1927c7e8e6b6f1bf0bbd6c74eb59cc17deb6)) -* **workers:** support for async backoffs ([c555837](https://github.com/taskforcesh/bullmq/commit/c55583701e5bdd4e6436a61c833e506bc05749de)) -* remove support of bull3 config format in compat class ([d909486](https://github.com/taskforcesh/bullmq/commit/d9094868e34c2af21f810aaef4542951a509ccf8)) -* support global:progress event ([60f4d85](https://github.com/taskforcesh/bullmq/commit/60f4d85d332b3be4a80db7aa179f3a9ceeb1d6f8)) -* trim option to event stream [#21](https://github.com/taskforcesh/bullmq/issues/21) & fix [#17](https://github.com/taskforcesh/bullmq/issues/17) ([7eae653](https://github.com/taskforcesh/bullmq/commit/7eae65340820043101fadf1f87802f506020d553)) ([`e2e2d8d`](https://github.com/taskforcesh/bullmq/commit/e2e2d8d186c97a4762ce146887b7c3db6841a23e)) +### Features -* chore: add missing dependency ([`10fd6f5`](https://github.com/taskforcesh/bullmq/commit/10fd6f5608140131000f0001c7ba7501ac56ade8)) +* **worker:** passing token in processor function \([2249724](https://github.com/taskforcesh/bullmq/commit/2249724b1bc6fbf40b0291400011f201fd02dab3)\) -* chore: add missing dependencies ([`b71ef0e`](https://github.com/taskforcesh/bullmq/commit/b71ef0e6bf9852253c1fb5fef51835dec7ba3a0b)) +## [1.19.3](https://github.com/taskforcesh/bullmq/compare/v1.19.2...v1.19.3) \(2021-04-20\) -* chore: add semantic release plugins ([`58477ad`](https://github.com/taskforcesh/bullmq/commit/58477ad6c70dcb0772a89482ad52576899fac031)) +### Bug Fixes -* chore: replace deprecated node-uuid with uuid, move lodash to deps ([`4c13565`](https://github.com/taskforcesh/bullmq/commit/4c135653429188dac568ac4c749514e06f82562e)) +* **movetocompleted:** throw an error if job is not in active state \([c2fe5d2](https://github.com/taskforcesh/bullmq/commit/c2fe5d292fcf8ac2e53906c30282df69d43321b1)\) -* chore: cleanups ([`c682abd`](https://github.com/taskforcesh/bullmq/commit/c682abd5c7a1ff7bdc1df29bbc47782e15af2a52)) +## [1.19.2](https://github.com/taskforcesh/bullmq/compare/v1.19.1...v1.19.2) \(2021-04-19\) -* chore: add prepublish script ([`29e37c5`](https://github.com/taskforcesh/bullmq/commit/29e37c5ed6741a39d193eaf18170caac68ab7251)) +### Bug Fixes -* chore: bump to 4.0.0-beta.1 ([`f644cb0`](https://github.com/taskforcesh/bullmq/commit/f644cb0ba3158fe672e1371369f42de70a546224)) +* **worker:** close base class connection [\#451](https://github.com/taskforcesh/bullmq/issues/451) \([0875306](https://github.com/taskforcesh/bullmq/commit/0875306ae801a7cbfe04758dc2481cb86ca2ef69)\) -* chore: update gitignore ([`83e8982`](https://github.com/taskforcesh/bullmq/commit/83e8982e132660c7a30cc63f5d93c7bd8638a13d)) +## [1.19.1](https://github.com/taskforcesh/bullmq/compare/v1.19.0...v1.19.1) \(2021-04-19\) -* chore: ordered dependencies ([`c72226b`](https://github.com/taskforcesh/bullmq/commit/c72226bfda7cf736432f7c5f840065d87346702e)) +### Bug Fixes -* chore: merge upstream ([`e3564a7`](https://github.com/taskforcesh/bullmq/commit/e3564a7eb07a217015521ef31f2a1951305f1c0a)) +* remove repeatable with obliterate \([1c5e581](https://github.com/taskforcesh/bullmq/commit/1c5e581a619ba707863c2a6e9f3e5f6eadfbe64f)\) -* chore: refactor options fix #17 ([`c0016db`](https://github.com/taskforcesh/bullmq/commit/c0016db4f6a459d96c1362f75390a1c8f0d71f5c)) +# [1.19.0](https://github.com/taskforcesh/bullmq/compare/v1.18.2...v1.19.0) \(2021-04-19\) -* chore: moved opts to local variable ([`ec07491`](https://github.com/taskforcesh/bullmq/commit/ec0749163f86d41374756c7c7e0673bf98e4bd48)) +### Features -* chore: refactor opts ([`b060bf7`](https://github.com/taskforcesh/bullmq/commit/b060bf73ec9947050f131b4271339197ab74b9c8)) +* add workerDelay option to limiter \([9b6ab8a](https://github.com/taskforcesh/bullmq/commit/9b6ab8ad4bc0a94068f3bc707ad9c0ed01596068)\) -* chore: merge upstream ([`69bd8d1`](https://github.com/taskforcesh/bullmq/commit/69bd8d1f1baf45bd64cb23eec4913088407da110)) +## [1.18.2](https://github.com/taskforcesh/bullmq/compare/v1.18.1...v1.18.2) \(2021-04-16\) -* chore: merge development-4.0 into feat-bull3-compat-api-v2 ([`e47cc87`](https://github.com/taskforcesh/bullmq/commit/e47cc87583aadbad11c01fee7384c0628add49b8)) +### Bug Fixes -* chore: rename append to add ([`6bbbdd2`](https://github.com/taskforcesh/bullmq/commit/6bbbdd281e733eccabf8262c0661daeb51f8afad)) +* add parentKey property to Job \([febc60d](https://github.com/taskforcesh/bullmq/commit/febc60dba94c29b85be3e1bc2547fa83ed932806)\) -* chore: remove empty method since it is a duplicate ([`bb518ae`](https://github.com/taskforcesh/bullmq/commit/bb518ae06ffcf025eb48416a5f8b3849bb2dcb24)) +## [1.18.1](https://github.com/taskforcesh/bullmq/compare/v1.18.0...v1.18.1) \(2021-04-16\) -* chore: rename queue keeper to scheduler ([`b7a35a4`](https://github.com/taskforcesh/bullmq/commit/b7a35a452033262f887ffe713ae8f461978719f7)) +### Bug Fixes -* chore: rename to scheduler opts ([`91c1697`](https://github.com/taskforcesh/bullmq/commit/91c1697eb5d35dff223dcd8624be407bb4897bd4)) +* rename Flow to FlowProducer class \([c64321d](https://github.com/taskforcesh/bullmq/commit/c64321d03e2af7cee88eaf6df6cd2e5b7840ae64)\) -* chore: cleanup, rm unnecessary changes, apply changes requested in #3 ([`82d4c4e`](https://github.com/taskforcesh/bullmq/commit/82d4c4eae592a6921a3f8bb6251085404cc29491)) +# [1.18.0](https://github.com/taskforcesh/bullmq/compare/v1.17.0...v1.18.0) \(2021-04-16\) -* chore: use await instead of then ([`85302c4`](https://github.com/taskforcesh/bullmq/commit/85302c467a42552573fcbe5cfc802459a001cf4e)) +### Features -* chore: remove several logs and minor cosmetic fixes ([`bc022d5`](https://github.com/taskforcesh/bullmq/commit/bc022d57030de447bc98088808577050a8b89d21)) +* add remove support for flows \([4e8a7ef](https://github.com/taskforcesh/bullmq/commit/4e8a7efd53f918937478ae13f5da7dee9ea9d8b3)\) -* chore: rename queue-keeper to queue-scheduler ([`ac76bb1`](https://github.com/taskforcesh/bullmq/commit/ac76bb19abe264993ba35501488240f4c22c570f)) +# [1.17.0](https://github.com/taskforcesh/bullmq/compare/v1.16.2...v1.17.0) \(2021-04-16\) -* chore: remove outcommented code ([`23d8dcc`](https://github.com/taskforcesh/bullmq/commit/23d8dcce148ee05c57bda44e8c187f693239b777)) +### Features -* chore: merge master ([`d8e6b1f`](https://github.com/taskforcesh/bullmq/commit/d8e6b1f5d2f3367afcc859f35f3790ac08dd1a82)) +* **job:** consider waiting-children state \([2916dd5](https://github.com/taskforcesh/bullmq/commit/2916dd5d7ba9438d2eae66436899d32ec8ac0e91)\) -* chore: add scafolding ([`b0b2863`](https://github.com/taskforcesh/bullmq/commit/b0b286352f0f91348c4e1e892f5a75d79ca17aff)) +## [1.16.2](https://github.com/taskforcesh/bullmq/compare/v1.16.1...v1.16.2) \(2021-04-14\) -### Ci +### Bug Fixes -* ci: upgrade dependencies ([`5c0eb6f`](https://github.com/taskforcesh/bullmq/commit/5c0eb6f0970c92b5bc629bf2b13c08acbbdc7198)) +* read lua scripts serially \([69e73b8](https://github.com/taskforcesh/bullmq/commit/69e73b87bc6855623240a7b1a45368a7914b23b7)\) -* ci: upgrade dependencies ([`96d82ef`](https://github.com/taskforcesh/bullmq/commit/96d82ef45ab4c7cf9c821f8e39d0a1ff316cde91)) +## [1.16.1](https://github.com/taskforcesh/bullmq/compare/v1.16.0...v1.16.1) \(2021-04-12\) -* ci: upgrade dependencies ([`34370df`](https://github.com/taskforcesh/bullmq/commit/34370df19c41edad96c1f39fc57462df8f75343b)) +### Bug Fixes -* ci: add test watch mode ([`7ff72a7`](https://github.com/taskforcesh/bullmq/commit/7ff72a7b5751d14fd43a31c747c8310413fe2ef7)) +* **flow:** relative dependency path fixes [\#466](https://github.com/taskforcesh/bullmq/issues/466) \([d104bf8](https://github.com/taskforcesh/bullmq/commit/d104bf802d6d1000ac1ccd781fa7a07bce2fe140)\) -* ci: upgrade semver ([`e9ad1e4`](https://github.com/taskforcesh/bullmq/commit/e9ad1e4dfb590ea4a4d5ae94afb034bff7a76d3b)) +# [1.16.0](https://github.com/taskforcesh/bullmq/compare/v1.15.1...v1.16.0) \(2021-04-12\) -* ci: remove package-lock.json ([`bb628b9`](https://github.com/taskforcesh/bullmq/commit/bb628b9f38077b89e73a0629cb2a5d893cf3486c)) +### Features -* ci: add yarn.lock ([`2aab767`](https://github.com/taskforcesh/bullmq/commit/2aab7670405c6fe87a4c503e1381ca3dd12ef711)) +* add support for flows \(parent-child dependencies\) \([\#454](https://github.com/taskforcesh/bullmq/issues/454)\) \([362212c](https://github.com/taskforcesh/bullmq/commit/362212c58c4be36b5435df862503699deb8bb79c)\) -* ci: add husky ([`a4b4eb8`](https://github.com/taskforcesh/bullmq/commit/a4b4eb84a5b12a8db6536c2999293419bf9000ed)) +## [1.15.1](https://github.com/taskforcesh/bullmq/compare/v1.15.0...v1.15.1) \(2021-03-19\) -* ci: add commitling config ([`13025b4`](https://github.com/taskforcesh/bullmq/commit/13025b452e2e7b708d5453706e0ef2dd84469931)) +### Bug Fixes -* ci: ignore yarn.lock ([`e67a911`](https://github.com/taskforcesh/bullmq/commit/e67a911acd20023b6b3355987d0469302858e0cc)) +* **obliterate:** safer implementation \([82f571f](https://github.com/taskforcesh/bullmq/commit/82f571f2548c61c776b897fd1c5050bb09c8afca)\) -* ci: deprecated node 6 & added node 12 ([`75deb60`](https://github.com/taskforcesh/bullmq/commit/75deb60f491d454c99deddd0a6414069e10bdfcc)) +# [1.15.0](https://github.com/taskforcesh/bullmq/compare/v1.14.8...v1.15.0) \(2021-03-18\) -* ci: add linter step to travis ([`33774fb`](https://github.com/taskforcesh/bullmq/commit/33774fb81fea305b5a23a4101b6ad03554582e07)) +### Features -* ci: remove unnecessary "--" ([`30287d7`](https://github.com/taskforcesh/bullmq/commit/30287d7314976a4733957896aaffe90f1003b1cf)) +* add method to "obliterate" a queue, fixes [\#430](https://github.com/taskforcesh/bullmq/issues/430) \([624be0e](https://github.com/taskforcesh/bullmq/commit/624be0ed48159c2aa405025938925a723330e0c2)\) -* ci: remove yarn lock ([`9129a56`](https://github.com/taskforcesh/bullmq/commit/9129a56a1fc12ae1d06f9b9a1d357362bf505aac)) +## [1.14.8](https://github.com/taskforcesh/bullmq/compare/v1.14.7...v1.14.8) \(2021-03-06\) -* ci: upgrade dependencies ([`5f07618`](https://github.com/taskforcesh/bullmq/commit/5f07618d5a4c7462a01f9bb4818e57b4a9340ee8)) +### Bug Fixes -### Documentation +* specify promise type to make TS 4.1 and 4.2 happy. \([\#418](https://github.com/taskforcesh/bullmq/issues/418)\) \([702f609](https://github.com/taskforcesh/bullmq/commit/702f609b410d8b0652c2d0504a8a67526966fdc3)\) -* docs: add missing colon ([`c3a71f9`](https://github.com/taskforcesh/bullmq/commit/c3a71f993d3c1e8177b64f884910fb7c167ec9c4)) +## [1.14.7](https://github.com/taskforcesh/bullmq/compare/v1.14.6...v1.14.7) \(2021-02-16\) -* docs: redirect changelog correctly ([`efb05ca`](https://github.com/taskforcesh/bullmq/commit/efb05ca431f79058297bad4ca994bf12d681b8fa)) +### Bug Fixes -* docs: move gitbook documentation ([`2d2d98f`](https://github.com/taskforcesh/bullmq/commit/2d2d98f2eba2bdf4cbe789a03ac18fa8893672f5)) +* remove "client" property of QueueBaseOptions \([\#324](https://github.com/taskforcesh/bullmq/issues/324)\) \([e0b9e71](https://github.com/taskforcesh/bullmq/commit/e0b9e71c4da4a93af54c4386af461c61ab5f146c)\) -* docs: updated README ([`06ae5cc`](https://github.com/taskforcesh/bullmq/commit/06ae5cc4fa654ba436fefed6aeaf533d498a004c)) +## [1.14.6](https://github.com/taskforcesh/bullmq/compare/v1.14.5...v1.14.6) \(2021-02-16\) -### Feature +### Bug Fixes -* feat: implement close in redis connection fixes #8 ([`6de8b48`](https://github.com/taskforcesh/bullmq/commit/6de8b48c9612ea39bb28db5f4130cb2a2bb5ee90)) +* remove next job in removeRepeatableByKey fixes [\#165](https://github.com/taskforcesh/bullmq/issues/165) \([fb3a7c2](https://github.com/taskforcesh/bullmq/commit/fb3a7c2f429d535dd9f038687d7230d61201defc)\) -* feat(workers): support for async backoffs ([`c555837`](https://github.com/taskforcesh/bullmq/commit/c55583701e5bdd4e6436a61c833e506bc05749de)) +## [1.14.5](https://github.com/taskforcesh/bullmq/compare/v1.14.4...v1.14.5) \(2021-02-16\) -* feat: move async initialization to constructors ([`3fbacd0`](https://github.com/taskforcesh/bullmq/commit/3fbacd088bc3bfbd61ed8ff173e4401193ce48ec)) +### Bug Fixes -* feat: automatically trim events ([`279bbba`](https://github.com/taskforcesh/bullmq/commit/279bbbab7e96ad8676ed3bd68663cb199067ea67)) +* add jobId support to repeatable jobs fixes [\#396](https://github.com/taskforcesh/bullmq/issues/396) \([c2dc669](https://github.com/taskforcesh/bullmq/commit/c2dc6693a4546e547245bc7ec1e71b4841829619)\) -* feat: add trimEvents method to queue client ([`b7da7c4`](https://github.com/taskforcesh/bullmq/commit/b7da7c4de2de81282aa41f8b7624b9030edf7d15)) +## [1.14.4](https://github.com/taskforcesh/bullmq/compare/v1.14.3...v1.14.4) \(2021-02-08\) -* feat: add script to generate typedocs ([`d0a8cb3`](https://github.com/taskforcesh/bullmq/commit/d0a8cb32ef9090652017f8fbf2ca42f0960687f7)) +### Bug Fixes -* feat: emit global stalled event fixes #10 ([`241f229`](https://github.com/taskforcesh/bullmq/commit/241f229761691b9ac17124da005f91594a78273d)) +* reconnect at start fixes [\#337](https://github.com/taskforcesh/bullmq/issues/337) \([fb33772](https://github.com/taskforcesh/bullmq/commit/fb3377280b3bda04a15a62d2901bdd78b869e08c)\) -* feat: trim option to event stream #21 & fix #17 ([`7eae653`](https://github.com/taskforcesh/bullmq/commit/7eae65340820043101fadf1f87802f506020d553)) +## [1.14.3](https://github.com/taskforcesh/bullmq/compare/v1.14.2...v1.14.3) \(2021-02-07\) -* feat: add support for adding jobs in bulk ([`b62bddc`](https://github.com/taskforcesh/bullmq/commit/b62bddc054b266a809b4b1646558a095a276d6d1)) +### Bug Fixes -* feat: add cleaned event ([`c544775`](https://github.com/taskforcesh/bullmq/commit/c544775803626b5f03cf6f7c3cf18ed1d92debab)) +* **worker:** avoid possible infinite loop fixes [\#389](https://github.com/taskforcesh/bullmq/issues/389) \([d05566e](https://github.com/taskforcesh/bullmq/commit/d05566ec0153f31a1257f7338399fdb55c959487)\) -* feat: support global:progress event ([`60f4d85`](https://github.com/taskforcesh/bullmq/commit/60f4d85d332b3be4a80db7aa179f3a9ceeb1d6f8)) +## [1.14.2](https://github.com/taskforcesh/bullmq/compare/v1.14.1...v1.14.2) \(2021-02-02\) -* feat: make delay in backoffs optional ([`30d59e5`](https://github.com/taskforcesh/bullmq/commit/30d59e519794780a8198222d0bbd88779c623275)) +### Bug Fixes -* feat: add retry errors ([`f6a7990`](https://github.com/taskforcesh/bullmq/commit/f6a7990fb74585985729c5d95e2238acde6cf74a)) +* improve job timeout notification by giving the job name and id in the error message \([\#387](https://github.com/taskforcesh/bullmq/issues/387)\) \([ca886b1](https://github.com/taskforcesh/bullmq/commit/ca886b1f854051aed0888f5b872a64b052b2383e)\) -* feat: add empty method ([`4376112`](https://github.com/taskforcesh/bullmq/commit/4376112369d869c0a5c7ab4a543cfc50200e1414)) +## [1.14.1](https://github.com/taskforcesh/bullmq/compare/v1.14.0...v1.14.1) \(2021-02-01\) -* feat: remove support of bull3 config format in compat class ([`d909486`](https://github.com/taskforcesh/bullmq/commit/d9094868e34c2af21f810aaef4542951a509ccf8)) +### Bug Fixes -* feat: add some new tests for compat class, more minor fixes ([`bc0f653`](https://github.com/taskforcesh/bullmq/commit/bc0f653ecf7aedd5a46eee6f912ecd6849395dca)) +* job finish queue events race condition \([355bca5](https://github.com/taskforcesh/bullmq/commit/355bca5ee128bf4ff37608746f9c6f7cca580eb0)\) -* feat: get rid of Job3 in favor of bullmq Job class ([`7590cea`](https://github.com/taskforcesh/bullmq/commit/7590ceae7abe32a8824e4a265f95fef2f9a6665f)) +# [1.14.0](https://github.com/taskforcesh/bullmq/compare/v1.13.0...v1.14.0) \(2021-01-06\) -* feat: port more features from bull 3.x ([`75bd261`](https://github.com/taskforcesh/bullmq/commit/75bd26158678ee45a14e04fd7c3a1f96219979a2)) +### Features -* feat: ported tests and functionality from bull 3 ([`1b6b192`](https://github.com/taskforcesh/bullmq/commit/1b6b1927c7e8e6b6f1bf0bbd6c74eb59cc17deb6)) +* **job:** expose extendLock as a public method \([17e8431](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)\) -* feat: port a lot of functionality from bull 3.x ([`ec9f3d2`](https://github.com/taskforcesh/bullmq/commit/ec9f3d266c1aca0c27cb600f056d813c81259b4c)) +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) \(2020-12-30\) -### Fix +### Features -* fix(connections): reused connections ([`1e808d2`](https://github.com/taskforcesh/bullmq/commit/1e808d24018a29f6611f4fccd2f5754de0fa3e39)) +* add support for manually processing jobs fixes [\#327](https://github.com/taskforcesh/bullmq/issues/327) \([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)\) -* fix: do not trim if maxEvents is undefined ([`7edd8f4`](https://github.com/taskforcesh/bullmq/commit/7edd8f47b392c8b3a7369196befdafa4b29421d1)) +## [1.12.3](https://github.com/taskforcesh/bullmq/compare/v1.12.2...v1.12.3) \(2020-12-28\) -* fix: reworked initialization of redis clients ([`c17d4be`](https://github.com/taskforcesh/bullmq/commit/c17d4be5a2ecdda3efcdc6b9d7aecdfaccd06d83)) +### Bug Fixes -* fix: add extra client to worker fixes #34 ([`90bd891`](https://github.com/taskforcesh/bullmq/commit/90bd891c7514f5e9e397d7aad15069ee55bebacd)) +* correctly handle "falsy" data values fixes [\#264](https://github.com/taskforcesh/bullmq/issues/264) \([becad91](https://github.com/taskforcesh/bullmq/commit/becad91350fd4ac01037e5b0d4a8a93724dd8dbd)\) +* **worker:** setname on worker blocking connection \([645b633](https://github.com/taskforcesh/bullmq/commit/645b6338f5883b0c21ae78007777d86b45422615)\) -* fix: make ioredis typings a normal dependency ([`fb80b90`](https://github.com/taskforcesh/bullmq/commit/fb80b90b12931a12a1a93c5e204dbf90eed4f48f)) +## [1.12.2](https://github.com/taskforcesh/bullmq/compare/v1.12.1...v1.12.2) \(2020-12-23\) -* fix: fix compiling error ([`3cf2617`](https://github.com/taskforcesh/bullmq/commit/3cf261703292d263d1e2017ae30eb490121dab4e)) +### Bug Fixes -* fix: fix several floating promises ([`590a4a9`](https://github.com/taskforcesh/bullmq/commit/590a4a925167a7c7d6c0d9764bbb5ab69235beb7)) +* catch errors from Repeat \([\#348](https://github.com/taskforcesh/bullmq/issues/348)\) \([09a1a98](https://github.com/taskforcesh/bullmq/commit/09a1a98fc42dc1a9ae98bfb29c0cca3fac02013f)\) -* fix: initialize events comsumption in constructor ([`dbb66cd`](https://github.com/taskforcesh/bullmq/commit/dbb66cda9722d44eca806fa6ad1cabdaabac846a)) +## [1.12.1](https://github.com/taskforcesh/bullmq/compare/v1.12.0...v1.12.1) \(2020-12-21\) -* fix: replace init by waitUntilReady ([`4336161`](https://github.com/taskforcesh/bullmq/commit/43361610de5b1a993a1c65f3f21ac745b8face21)) +### Bug Fixes -* fix: several fixes to make the lib work on other ts projects ([`3cac1b0`](https://github.com/taskforcesh/bullmq/commit/3cac1b0715613d9df51cb1ed6fe0859bcfbb8e9b)) +* correctly handle "falsy" data values fixes [\#264](https://github.com/taskforcesh/bullmq/issues/264) \([cf1dbaf](https://github.com/taskforcesh/bullmq/commit/cf1dbaf7e60d74fc8443a5f8a537455f28a8dba3)\) -* fix: improve disconnection for queue events ([`56b53a1`](https://github.com/taskforcesh/bullmq/commit/56b53a1aca1e527b50f04d906653060fe8ca644e)) +# [1.12.0](https://github.com/taskforcesh/bullmq/compare/v1.11.2...v1.12.0) \(2020-12-16\) -* fix: do not exec if closing ([`b1d1c08`](https://github.com/taskforcesh/bullmq/commit/b1d1c08a2948088eeb3dd65de78085329bac671b)) +### Features -* fix: default opts ([`333c73b`](https://github.com/taskforcesh/bullmq/commit/333c73b5819a263ae92bdb54f0406c19db5cb64f)) +* add ability to get if queue is paused or not \([e98b7d8](https://github.com/taskforcesh/bullmq/commit/e98b7d8973df830cc29e0afc5d86e82c9a7ce76f)\) -* fix: check closing after resuming from pause ([`7b2cef3`](https://github.com/taskforcesh/bullmq/commit/7b2cef3677e2b3af0370e0023aec4b971ad313fe)) +## [1.11.2](https://github.com/taskforcesh/bullmq/compare/v1.11.1...v1.11.2) \(2020-12-15\) -* fix: do not block if blockTime is zero ([`13b2df2`](https://github.com/taskforcesh/bullmq/commit/13b2df20cf045c069b8b581751e117722681dcd4)) +### Bug Fixes -* fix: throw error messages instead of codes ([`9267541`](https://github.com/taskforcesh/bullmq/commit/92675413f1c3b9564574dc264ffcab0d6089e70e)) +* promote jobs to the right "list" when paused \([d3df615](https://github.com/taskforcesh/bullmq/commit/d3df615d37b1114c02eacb45f23643ee2f05374d)\) -* fix: remove unused dependencies ([`34293c8`](https://github.com/taskforcesh/bullmq/commit/34293c84bb0ed54f18d70c86821c3ac627d376a5)) +## [1.11.1](https://github.com/taskforcesh/bullmq/compare/v1.11.0...v1.11.1) \(2020-12-15\) -* fix: add missing dependency ([`b92e330`](https://github.com/taskforcesh/bullmq/commit/b92e330aad35ae54f43376f92ad1b41209012b76)) +### Bug Fixes -* fix: remove buggy close() on redis-connection (fixes 5 failing tests) ([`64c2ede`](https://github.com/taskforcesh/bullmq/commit/64c2edec5e738f43676d0f4ca61bdea8609203fc)) +* clientCommandMessageReg to support GCP memorystore v5 \([8408dda](https://github.com/taskforcesh/bullmq/commit/8408dda9fa64fc0b968e88fb2726e0a30f717ed7)\) -* fix: fix retry functionality ([`ec41ea4`](https://github.com/taskforcesh/bullmq/commit/ec41ea4e0bd88b10b1ba434ef5ceb0952bb59f7b)) +# [1.11.0](https://github.com/taskforcesh/bullmq/compare/v1.10.0...v1.11.0) \(2020-11-24\) -* fix: add compilation step before running tests ([`64abc13`](https://github.com/taskforcesh/bullmq/commit/64abc13681f8735fb3ee5add5b271bb4da618047)) +### Bug Fixes -* fix: fixed reprocess lua script ([`b78296f`](https://github.com/taskforcesh/bullmq/commit/b78296f33517b8c5d79b300fef920edd03149d2f)) +* add generic type to processor \([d4f6501](https://github.com/taskforcesh/bullmq/commit/d4f650120804bd6161f0eeda5162ad5a96811a05)\) -* fix: improve concurrency mechanism ([`a3f6148`](https://github.com/taskforcesh/bullmq/commit/a3f61489e3c9891f42749ff85bd41064943c62dc)) +### Features -* fix: fix progress script ([`4228e27`](https://github.com/taskforcesh/bullmq/commit/4228e2768c0cf404e09642ebb4053147d0badb56)) +* add name and return types to queue, worker and processor \([4879715](https://github.com/taskforcesh/bullmq/commit/4879715ec7c917f11e3a0ac3c5f5126029340ed3)\) -* fix: properly emit event for progress ([`3f70175`](https://github.com/taskforcesh/bullmq/commit/3f701750b1c957027825ee90b58141cd2556694f)) +# [1.10.0](https://github.com/taskforcesh/bullmq/compare/v1.9.0...v1.10.0) \(2020-10-20\) -* fix: parse progres and return value in events ([`9e43d0e`](https://github.com/taskforcesh/bullmq/commit/9e43d0e30ab90a290942418718cde1f5bfbdcf56)) +### Bug Fixes -* fix: waitUntilFinished improvements ([`18d4afe`](https://github.com/taskforcesh/bullmq/commit/18d4afef08f04d19cb8d931e02fff8f962d07ee7)) +* **job:** remove listeners before resolving promise \([563ce92](https://github.com/taskforcesh/bullmq/commit/563ce9218f5dd81f2bc836f9e8ccdedc549f09dd)\) +* **worker:** continue processing if handleFailed fails. fixes [\#286](https://github.com/taskforcesh/bullmq/issues/286) \([4ef1cbc](https://github.com/taskforcesh/bullmq/commit/4ef1cbc13d53897b57ae3d271afbaa1b213824aa)\) +* **worker:** fix memory leak on Promise.race \([\#282](https://github.com/taskforcesh/bullmq/issues/282)\) \([a78ab2b](https://github.com/taskforcesh/bullmq/commit/a78ab2b362e54f897eec6c8b16f16ecccf7875c2)\) +* **worker:** setname on worker blocking connection \([\#291](https://github.com/taskforcesh/bullmq/issues/291)\) \([50a87fc](https://github.com/taskforcesh/bullmq/commit/50a87fcb1dab976a6a0273d2b0cc4b31b63c015f)\) +* remove async for loop in child pool fixes [\#229](https://github.com/taskforcesh/bullmq/issues/229) \([d77505e](https://github.com/taskforcesh/bullmq/commit/d77505e989cd1395465c5222613555f79e4d9720)\) -* fix: minor fixes ([`7791cda`](https://github.com/taskforcesh/bullmq/commit/7791cdac2bfb6a7fbbab9c95c5d89b1eae226a4c)) +### Features -* fix: update tests after merge ([`51f75a4`](https://github.com/taskforcesh/bullmq/commit/51f75a4929e7ae2704e42fa9035e335fe60d8dc0)) +* **sandbox:** kill child workers gracefully \([\#243](https://github.com/taskforcesh/bullmq/issues/243)\) \([4262837](https://github.com/taskforcesh/bullmq/commit/4262837bc67e007fe44606670dce48ee7fec65cd)\) -* fix: fix a couple of job tests ([`e66b97b`](https://github.com/taskforcesh/bullmq/commit/e66b97be4577d5ab373fff0f3f45d73de7842a37)) +# [1.9.0](https://github.com/taskforcesh/bullmq/compare/v1.8.14...v1.9.0) \(2020-07-19\) -* fix: reduce drain delay to 5 seconds ([`c6cfe7c`](https://github.com/taskforcesh/bullmq/commit/c6cfe7c0b50cabe5e5eb31f4b631a8b1d3706611)) +### Features -* fix: fix more tests ([`6a07b35`](https://github.com/taskforcesh/bullmq/commit/6a07b3518f856e8f7158be032110c925ed5c924f)) +* add grouped rate limiting \([3a958dd](https://github.com/taskforcesh/bullmq/commit/3a958dd30d09a049b0d761679d3b8d92709e815e)\) -* fix: emit wait event in add job ([`39cba31`](https://github.com/taskforcesh/bullmq/commit/39cba31a30b7ef762a8d55d4bc34efec636207bf)) +## [1.8.14](https://github.com/taskforcesh/bullmq/compare/v1.8.13...v1.8.14) \(2020-07-03\) -* fix: wait until ready before trying to get jobs ([`f3b768f`](https://github.com/taskforcesh/bullmq/commit/f3b768f251ddafa207466af552376065b35bec8f)) +### Bug Fixes -### Test +* **typescript:** fix typings, upgrade ioredis dependencies \([\#220](https://github.com/taskforcesh/bullmq/issues/220)\) \([7059f20](https://github.com/taskforcesh/bullmq/commit/7059f2089553a206ab3937f7fd0d0b9de96aa7b7)\) +* **worker:** return this.closing when calling close \([b68c845](https://github.com/taskforcesh/bullmq/commit/b68c845c77de6b2973ec31d2f22958ab60ad87aa)\) -* test: fix tests for node 12 ([`edefbbf`](https://github.com/taskforcesh/bullmq/commit/edefbbf9d2fdbf54f5c869016f18333736a5cf75)) +## [1.8.13](https://github.com/taskforcesh/bullmq/compare/v1.8.12...v1.8.13) \(2020-06-05\) -* test: listen before adding in pause test ([`df8f86f`](https://github.com/taskforcesh/bullmq/commit/df8f86f2a49ac4a0073a1c68ccdaa1332e6d9089)) +### Bug Fixes -* test: add small delay for failing test ([`b30e00b`](https://github.com/taskforcesh/bullmq/commit/b30e00b7637605f27b7f9039775227a75b72d29a)) +* **redis-connection:** run the load command for reused redis client \([fab9bba](https://github.com/taskforcesh/bullmq/commit/fab9bba4caee8fd44523febb3bde588b151e8514)\) -* test: fix drain event tests ([`95b842f`](https://github.com/taskforcesh/bullmq/commit/95b842f20a73bd67d0178b27f1146de5196a6caa)) +## [1.8.12](https://github.com/taskforcesh/bullmq/compare/v1.8.11...v1.8.12) \(2020-06-04\) -* test: minor test fixes ([`2b0d8f3`](https://github.com/taskforcesh/bullmq/commit/2b0d8f3bc2aa153003001bb54fd59f3fcba9ed99)) +### Bug Fixes -* test: some minor test fixes ([`d41fd97`](https://github.com/taskforcesh/bullmq/commit/d41fd9796947a25cf2b870d6470c9caa03ff9b5f)) +* remove unused options \([23aadc3](https://github.com/taskforcesh/bullmq/commit/23aadc300b947693f4afb22296d236a924bd11ca)\) -* test: multiple clean ups ([`7b49aa7`](https://github.com/taskforcesh/bullmq/commit/7b49aa74e47f0b2aa789e49d7aee50e32ec49a0c)) +## [1.8.11](https://github.com/taskforcesh/bullmq/compare/v1.8.10...v1.8.11) \(2020-05-29\) -* test: add workers test ([`74cf2d2`](https://github.com/taskforcesh/bullmq/commit/74cf2d2fa931658761df7a721adba581bd2f9b23)) +### Bug Fixes -* test: add stalled jobs tests ([`ba1e4a4`](https://github.com/taskforcesh/bullmq/commit/ba1e4a4bca5ed5f3ff21419b040137c8cbd2d5c7)) +* **scheduler:** remove unnecessary division by 4096 \([4d25e95](https://github.com/taskforcesh/bullmq/commit/4d25e95f9522388bd85e932e04b6668e3da57686)\) -* test: fix broken tests related to worker closing connection ([`a4e1cae`](https://github.com/taskforcesh/bullmq/commit/a4e1cae8a2c686243a8bc0ea432d7030ad469255)) +## [1.8.10](https://github.com/taskforcesh/bullmq/compare/v1.8.9...v1.8.10) \(2020-05-28\) -* test: fix test title ([`ea01775`](https://github.com/taskforcesh/bullmq/commit/ea0177504193c544510b991df7e755b1d7073d77)) +### Bug Fixes -* test: reorder test code ([`1425df0`](https://github.com/taskforcesh/bullmq/commit/1425df0dd611791590f3823ee8ba5333f9d0b723)) +* **scheduler:** divide timestamp by 4096 in update set fixes [\#168](https://github.com/taskforcesh/bullmq/issues/168) \([0c5db83](https://github.com/taskforcesh/bullmq/commit/0c5db8391bb8994bee19f25a33efb9dfee792d7b)\) -* test: add queue clean tests ([`4bba23a`](https://github.com/taskforcesh/bullmq/commit/4bba23a5ce5d8171c6dc5640effd8a9efa0393bf)) +## [1.8.9](https://github.com/taskforcesh/bullmq/compare/v1.8.8...v1.8.9) \(2020-05-25\) -* test: fix style ([`45be9f3`](https://github.com/taskforcesh/bullmq/commit/45be9f37d2590646deac46592bdaa8af2ecabd33)) +### Bug Fixes -* test: add several tests for workers ([`f8125a6`](https://github.com/taskforcesh/bullmq/commit/f8125a690752e284480fdf0fe5cce66cf53564d3)) +* **scheduler:** divide next timestamp by 4096 \([\#204](https://github.com/taskforcesh/bullmq/issues/204)\) \([9562d74](https://github.com/taskforcesh/bullmq/commit/9562d74625e20b7b6de8750339c85345ba027357)\) -* test: fix failing test ([`9b78d4b`](https://github.com/taskforcesh/bullmq/commit/9b78d4bba401b1138af2849611f03191985bb3bb)) +## [1.8.8](https://github.com/taskforcesh/bullmq/compare/v1.8.7...v1.8.8) \(2020-05-25\) -* test: fix repeat related tests ([`0dbbde8`](https://github.com/taskforcesh/bullmq/commit/0dbbde8593e64d6ce2e2158eff809de8ce29d30b)) +### Bug Fixes -* test: skip failing test ([`f7c8b60`](https://github.com/taskforcesh/bullmq/commit/f7c8b604af13b999aab217a91a040fa9bbf0ee99)) +* **queue-base:** error event is passed through \([ad14e77](https://github.com/taskforcesh/bullmq/commit/ad14e777171c0c44b7e50752d9847dec23f46158)\) +* **redis-connection:** error event is passed through \([a15b1a1](https://github.com/taskforcesh/bullmq/commit/a15b1a1824c6863ecf3e5132e22924fc3ff161f6)\) +* **worker:** error event is passed through \([d7f0374](https://github.com/taskforcesh/bullmq/commit/d7f03749ce300e917399a435a3f426e66145dd8c)\) -* test: minor fixes ([`3aaf069`](https://github.com/taskforcesh/bullmq/commit/3aaf0694f7766fb89843025b7085a4cfa65525b1)) +## [1.8.7](https://github.com/taskforcesh/bullmq/compare/v1.8.6...v1.8.7) \(2020-04-10\) -### Unknown +### Bug Fixes -* Merge pull request #46 from taskforcesh/chore/add-semantic-release-plugins +* **worker:** do not use global child pool fixes [\#172](https://github.com/taskforcesh/bullmq/issues/172) \([bc65f26](https://github.com/taskforcesh/bullmq/commit/bc65f26dd47c59d0a7277ac947140405557be9a5)\) -chore: add missing dependency ([`d30413a`](https://github.com/taskforcesh/bullmq/commit/d30413a655605ef351f03ce1d5f69fba52d5e91d)) +## [1.8.6](https://github.com/taskforcesh/bullmq/compare/v1.8.5...v1.8.6) \(2020-04-10\) -* Merge branch 'master' into chore/add-semantic-release-plugins ([`dedf5ae`](https://github.com/taskforcesh/bullmq/commit/dedf5aebabdadb31379874741704b88d5fa10154)) +### Bug Fixes -* Merge branch 'master' into fix-cleanup-dependencies ([`ff2fbd2`](https://github.com/taskforcesh/bullmq/commit/ff2fbd2c353f1d3580697082599504bca769556d)) +* **workers:** do not call super.close\(\) \([ebd2ae1](https://github.com/taskforcesh/bullmq/commit/ebd2ae1a5613d71643c5a7ba3f685d77585de68e)\) +* make sure closing is returned in every close call \([88c5948](https://github.com/taskforcesh/bullmq/commit/88c5948d33a9a7b7a4f4f64f3183727b87d80207)\) +* **scheduler:** duplicate connections fixes [\#174](https://github.com/taskforcesh/bullmq/issues/174) \([011b8ac](https://github.com/taskforcesh/bullmq/commit/011b8acfdec54737d94a9fead2423e060e3364db)\) +* **worker:** return this.closing when calling close \([06d3d4f](https://github.com/taskforcesh/bullmq/commit/06d3d4f476444a2d2af8538d60cb2561a1915868)\) -* Merge pull request #45 from taskforcesh/chore/add-semantic-release-plugins +## [1.8.5](https://github.com/taskforcesh/bullmq/compare/v1.8.4...v1.8.5) \(2020-04-05\) -chore: add missing dependencies ([`5e06e66`](https://github.com/taskforcesh/bullmq/commit/5e06e66f74d4bb334e6354b6a1840c5844a20472)) +### Bug Fixes -* Merge branch 'master' into chore/add-semantic-release-plugins ([`b81f6fd`](https://github.com/taskforcesh/bullmq/commit/b81f6fd7366f9de943615f99298189f791ab43fa)) +* removed deprecated and unused node-uuid \([c810579](https://github.com/taskforcesh/bullmq/commit/c810579029d33ef47d5a7563e63126a69c62fd87)\) -* Merge pull request #44 from taskforcesh/chore/add-semantic-release-plugins +## [1.8.4](https://github.com/taskforcesh/bullmq/compare/v1.8.3...v1.8.4) \(2020-03-17\) -chore: add semantic release plugins ([`0466161`](https://github.com/taskforcesh/bullmq/commit/0466161c2e66a17ad8b64e3c4165eb231629cfd9)) +### Bug Fixes -* Merge branch 'master' into chore/add-semantic-release-plugins ([`695f595`](https://github.com/taskforcesh/bullmq/commit/695f5954fdd971c32ca644701bdf59c795884dea)) +* **job:** added nullable/optional properties \([cef134f](https://github.com/taskforcesh/bullmq/commit/cef134f7c4d87e1b80ba42a5e06c3877956ff4cc)\) -* Merge branch 'master' into fix-cleanup-dependencies ([`81bbf55`](https://github.com/taskforcesh/bullmq/commit/81bbf55aee9f75d188a23702e29ff55064bba285)) +## [1.8.3](https://github.com/taskforcesh/bullmq/compare/v1.8.2...v1.8.3) \(2020-03-13\) -* Merge pull request #41 from taskforcesh/feat/support-async-backoffs +### Bug Fixes -Feat/support async backoffs ([`c0b4618`](https://github.com/taskforcesh/bullmq/commit/c0b46181366be8e0a9d52fa5503b49ac33a4aa9d)) +* **sandbox:** If the child process is killed, remove it from the pool. \([8fb0fb5](https://github.com/taskforcesh/bullmq/commit/8fb0fb569a0236b37d3bae06bf58a2a1da3221c6)\) -* Merge branch 'master' into fix-cleanup-dependencies ([`4bfc011`](https://github.com/taskforcesh/bullmq/commit/4bfc011fb64e76f5a93a2ca59bfe883efd52d2d6)) +## [1.8.2](https://github.com/taskforcesh/bullmq/compare/v1.8.1...v1.8.2) \(2020-03-03\) -* Merge branch 'master' into feat/support-async-backoffs ([`1f009d5`](https://github.com/taskforcesh/bullmq/commit/1f009d508d81e2c038b509bac1cb480a540e28c6)) +### Bug Fixes -* Merge pull request #42 from taskforcesh/feat/implement-connection-close +* restore the Job timestamp when deserializing JSON data \([\#138](https://github.com/taskforcesh/bullmq/issues/138)\) \([\#152](https://github.com/taskforcesh/bullmq/issues/152)\) \([c171bd4](https://github.com/taskforcesh/bullmq/commit/c171bd47f7b75378e75307a1decdc0f630ac1cd6)\) -feat: implement close in redis connection fixes #8 ([`84c7ba9`](https://github.com/taskforcesh/bullmq/commit/84c7ba9f7ec079c22f27e50983656f267ea92983)) +## [1.8.1](https://github.com/taskforcesh/bullmq/compare/v1.8.0...v1.8.1) \(2020-03-02\) -* Merge branch 'master' into feat/support-async-backoffs ([`74ae600`](https://github.com/taskforcesh/bullmq/commit/74ae60079abeb97eef794816a99bbaf417c8d11b)) +### Bug Fixes -* Merge pull request #40 from taskforcesh/fix/fix-handling-reused-connections +* modified imports to work when esModuleInterop is disabled \([\#132](https://github.com/taskforcesh/bullmq/issues/132)\) \([01681f2](https://github.com/taskforcesh/bullmq/commit/01681f282bafac2df2c602edb51d6bde3483896c)\) -fix(connections): reused connections ([`cc8d38e`](https://github.com/taskforcesh/bullmq/commit/cc8d38e74fbe4b95b836c66a70f421e40bdc3775)) +# [1.8.0](https://github.com/taskforcesh/bullmq/compare/v1.7.0...v1.8.0) \(2020-03-02\) -* Merge branch 'master' into fix/fix-handling-reused-connections ([`8bece44`](https://github.com/taskforcesh/bullmq/commit/8bece44a218978df8447c5af0931df18eac9a45d)) +### Bug Fixes -* GitBook: [master] one page modified ([`69545e1`](https://github.com/taskforcesh/bullmq/commit/69545e1d1914e1b25d826b7eb1d785425dc79ad2)) +* cleanup signatures for queue add and addBulk \([\#127](https://github.com/taskforcesh/bullmq/issues/127)\) \([48e221b](https://github.com/taskforcesh/bullmq/commit/48e221b53909079a4def9c48c1b69cebabd0ed74)\) +* exit code 12 when using inspect with child process \([\#137](https://github.com/taskforcesh/bullmq/issues/137)\) \([43ebc67](https://github.com/taskforcesh/bullmq/commit/43ebc67cec3e8f283f9a555b4466cf918226687b)\) -* GitBook: [master] 9 pages modified ([`45b91c5`](https://github.com/taskforcesh/bullmq/commit/45b91c56346ffafc4e46c2e1275c1ed236f88318)) +### Features -* GitBook: [master] 2 pages modified ([`5c396a4`](https://github.com/taskforcesh/bullmq/commit/5c396a4e1bbc7c8ee4d73ee68675190ad0a1813b)) +* **types:** add sandboxed job processor types \([\#114](https://github.com/taskforcesh/bullmq/issues/114)\) \([a50a88c](https://github.com/taskforcesh/bullmq/commit/a50a88cd1658fa9d568235283a4c23a74eb8ed2a)\) -* Merge branch 'master' into fix-cleanup-dependencies ([`36fc8fb`](https://github.com/taskforcesh/bullmq/commit/36fc8fb2ad9fc9b9fe0a04d3908386f97cf5e8a6)) +# [1.7.0](https://github.com/taskforcesh/bullmq/compare/v1.6.8...v1.7.0) \(2020-03-02\) -* GitBook: [master] 9 pages modified ([`7af1ecf`](https://github.com/taskforcesh/bullmq/commit/7af1ecf8cb303e8e5eeccd24b7fe50327d95c35a)) +### Features -* GitBook: [master] 6 pages and one asset modified ([`85b331b`](https://github.com/taskforcesh/bullmq/commit/85b331bd565b507d47c3e4e929474de477404d8b)) +* made queue name publicly readable for [\#140](https://github.com/taskforcesh/bullmq/issues/140) \([f2bba2e](https://github.com/taskforcesh/bullmq/commit/f2bba2efd9d85986b01bb35c847a232b5c42ae57)\) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`6a99814`](https://github.com/taskforcesh/bullmq/commit/6a99814f30702414e28044f66588c3a9f8d8a293)) +## [1.6.8](https://github.com/taskforcesh/bullmq/compare/v1.6.7...v1.6.8) \(2020-02-22\) -* Rename changelog.md to CHANGELOG.md ([`d6845f8`](https://github.com/taskforcesh/bullmq/commit/d6845f82b2052f9f3983de503b6680b2c6d27872)) +### Bug Fixes -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`4e6f8ed`](https://github.com/taskforcesh/bullmq/commit/4e6f8ed2e798ced02f7b9ff9b6bed5e243aa17d4)) +* modified QueueGetters.getJob and Job.fromId to also return null to \([65183fc](https://github.com/taskforcesh/bullmq/commit/65183fcf542d0227ec1d4d6637b46b5381331787)\) +* modified QueueGetters.getJob and Job.fromId to return undefined \([ede352b](https://github.com/taskforcesh/bullmq/commit/ede352be75ffe05bf633516db9eda88467c562bf)\) -* Update changelog.md ([`2b9d863`](https://github.com/taskforcesh/bullmq/commit/2b9d8637ca663dbb734421c7511195fe09a09bd7)) +## [1.6.7](https://github.com/taskforcesh/bullmq/compare/v1.6.6...v1.6.7) \(2020-01-16\) -* GitBook: [master] 22 pages and one asset modified ([`00a3490`](https://github.com/taskforcesh/bullmq/commit/00a34903b0961a5f34f5bcaa25bc2406c000748f)) +### Bug Fixes -* Create changelog.md ([`4738be2`](https://github.com/taskforcesh/bullmq/commit/4738be2bdb1a8612ac5f1097505770d31e3e1988)) +* don't fail a job when the worker already lost the lock \([23c0bf7](https://github.com/taskforcesh/bullmq/commit/23c0bf70eab6d166b0483336f103323d1bf2ca64)\) -* Merge branch 'master' of github.com:taskforcesh/bullmq ([`1caec42`](https://github.com/taskforcesh/bullmq/commit/1caec42910a808b5b38166e96852ce59c3546bd2)) +## [1.6.6](https://github.com/taskforcesh/bullmq/compare/v1.6.5...v1.6.6) \(2020-01-05\) -* 4.0.0-beta.2 ([`0cf1b2c`](https://github.com/taskforcesh/bullmq/commit/0cf1b2c3a9179c94804d49fb7c49a9cc5d0bbc6e)) +### Bug Fixes -* Merge pull request #35 from taskforcesh/fix/34-extra-connection-for-workers +* remove duplicate active entry \([1d2cca3](https://github.com/taskforcesh/bullmq/commit/1d2cca38ee61289adcee4899a91f7dcbc93a7c05)\) -Fix/#34 extra connection for workers ([`2604753`](https://github.com/taskforcesh/bullmq/commit/2604753984a03d079ece28db0686d734ee10ba52)) +## [1.6.5](https://github.com/taskforcesh/bullmq/compare/v1.6.4...v1.6.5) \(2020-01-05\) -* Merge branch 'fix/34-extra-connection-for-workers' of github.com:taskforcesh/bullmq into fix/34-extra-connection-for-workers ([`91cd22a`](https://github.com/taskforcesh/bullmq/commit/91cd22a8b7f821cb0c7f7734dc6456e743668f3e)) +### Bug Fixes -* Merge branch 'master' into fix/34-extra-connection-for-workers ([`f201f8b`](https://github.com/taskforcesh/bullmq/commit/f201f8b2c07e597810763671e53f4fa47538cc08)) +* get rid of flushdb/flushall in tests \([550c67b](https://github.com/taskforcesh/bullmq/commit/550c67b25de5f6d800e5e317398044cd16b85924)\) -* Update README.md ([`968f276`](https://github.com/taskforcesh/bullmq/commit/968f27696e860617dc8978f3b2c11323a99ce8a4)) +## [1.6.4](https://github.com/taskforcesh/bullmq/compare/v1.6.3...v1.6.4) \(2020-01-05\) -* Merge pull request #33 from taskforcesh/chore/move-ioredis-typings-as-dependency +### Bug Fixes -fix: make ioredis typings a normal dependency ([`5d35db5`](https://github.com/taskforcesh/bullmq/commit/5d35db5a8238dccb0f7e09a0e4d2bdd63ab7e837)) +* delete logs when cleaning jobs in set \([b11c6c7](https://github.com/taskforcesh/bullmq/commit/b11c6c7c9f4f1c49eac93b98fdc93ac8f861c8b2)\) -* Update README.md ([`1e960c0`](https://github.com/taskforcesh/bullmq/commit/1e960c029de75c29d6b2389d66a121dd37f52e7d)) +## [1.6.3](https://github.com/taskforcesh/bullmq/compare/v1.6.2...v1.6.3) \(2020-01-01\) -* Merge pull request #27 from taskforcesh/feat/add-trim-option-#21 +### Bug Fixes -Feat/add trim option #21 ([`47fd1ea`](https://github.com/taskforcesh/bullmq/commit/47fd1ea5eec49dcb9d74293b8f99ed5aecc01239)) +* add tslib dependency fixes [\#65](https://github.com/taskforcesh/bullmq/issues/65) \([7ad7995](https://github.com/taskforcesh/bullmq/commit/7ad799544a9c30b30aa96df8864119159c9a1185)\) -* Merge branch 'feat/add-trim-option-#21' of github.com:taskforcesh/bullmq into feat/add-trim-option-#21 ([`d0c24cf`](https://github.com/taskforcesh/bullmq/commit/d0c24cf6c235e2a845a8a63a3cf9b8ee2aa8357d)) +## [1.6.2](https://github.com/taskforcesh/bullmq/compare/v1.6.1...v1.6.2) \(2019-12-16\) -* Merge branch 'master' into feat/add-trim-option-#21 ([`dd53469`](https://github.com/taskforcesh/bullmq/commit/dd53469ad41ef1b4e1e8c8bcb91327f7f29b34e0)) +### Bug Fixes -* Update README.md ([`b695e36`](https://github.com/taskforcesh/bullmq/commit/b695e36f66095edc50a06874247e383e522dad85)) +* change default QueueEvents lastEventId to $ \([3c5b01d](https://github.com/taskforcesh/bullmq/commit/3c5b01d16ee1442f5802a0fe4e7675c14f7a7f1f)\) +* ensure QE ready before adding test events \([fd190f4](https://github.com/taskforcesh/bullmq/commit/fd190f4be792b03273481c8aaf73be5ca42663d1)\) +* explicitly test the behavior of .on and .once \([ea11087](https://github.com/taskforcesh/bullmq/commit/ea11087b292d9325105707b53f92ac61c334a147)\) -* Merge branch 'master' into feat/add-trim-option-#21 ([`63d344f`](https://github.com/taskforcesh/bullmq/commit/63d344f33cad87ddb3a60d8887c9ef1bfec81740)) +## [1.6.1](https://github.com/taskforcesh/bullmq/compare/v1.6.0...v1.6.1) \(2019-12-16\) -* Update README.md ([`3f15dde`](https://github.com/taskforcesh/bullmq/commit/3f15dde1c8764090c33c382f059db2f6c181506e)) +### Bug Fixes -* Update README.md ([`4f3311d`](https://github.com/taskforcesh/bullmq/commit/4f3311d6664f476ea8109bcfd838f9aae1571ca3)) +* check of existing redis instance \([dd466b3](https://github.com/taskforcesh/bullmq/commit/dd466b332b03b430108126531d59ff9e66ce9521)\) -* Update README.md ([`6e50b31`](https://github.com/taskforcesh/bullmq/commit/6e50b31fa4c152d4b5fba552bfb5fdfa400f2c8e)) +# [1.6.0](https://github.com/taskforcesh/bullmq/compare/v1.5.0...v1.6.0) \(2019-12-12\) -* Merge branch 'master' into feat/add-trim-option-#21 ([`90277f4`](https://github.com/taskforcesh/bullmq/commit/90277f47eafa140b2bba0476fbddd79a2421bafe)) +### Features -* Merge pull request #26 from taskforcesh/manast-patch-1 +* add generic type to job data and return value \([87c0531](https://github.com/taskforcesh/bullmq/commit/87c0531efc2716db37f8a0886848cdb786709554)\) -Update README.md ([`99c9513`](https://github.com/taskforcesh/bullmq/commit/99c9513772efc78be0ecdd811e8e136cc9aaeffd)) +# [1.5.0](https://github.com/taskforcesh/bullmq/compare/v1.4.3...v1.5.0) \(2019-11-22\) -* Merge branch 'master' into feat/add-trim-option-#21 ([`9c13107`](https://github.com/taskforcesh/bullmq/commit/9c131075fc83ccdc0a0c6d3f1211d4b7226f8ee5)) +### Features -* Update README.md ([`d742889`](https://github.com/taskforcesh/bullmq/commit/d742889f90176f32d7768352a9d77f3e558b0cee)) +* remove delay dependency \([97e1a30](https://github.com/taskforcesh/bullmq/commit/97e1a3015d853e615ddd623af07f12a194ccab2c)\) +* remove dependence on Bluebird.delay [\#67](https://github.com/taskforcesh/bullmq/issues/67) \([bedbaf2](https://github.com/taskforcesh/bullmq/commit/bedbaf25af6479e387cd7548e246dca7c72fc140)\) -* Merge pull request #25 from taskforcesh/manast-patch-1 +## [1.4.3](https://github.com/taskforcesh/bullmq/compare/v1.4.2...v1.4.3) \(2019-11-21\) -Update README.md ([`e21a98a`](https://github.com/taskforcesh/bullmq/commit/e21a98a1e95016f72ad0109150f56a6fe8e00a17)) +### Bug Fixes -* Merge branch 'manast-patch-1' of github.com:taskforcesh/bullmq into manast-patch-1 ([`d0a533e`](https://github.com/taskforcesh/bullmq/commit/d0a533eab0136784de9c0285232d6129a37e140a)) +* check in moveToFinished to use default val for opts.maxLenEvents \([d1118aa](https://github.com/taskforcesh/bullmq/commit/d1118aab77f755b4a65e3dd8ea2e195baf3d2602)\) -* Update README.md ([`007c3d5`](https://github.com/taskforcesh/bullmq/commit/007c3d5c3a6449a864b4c1292f8f7203d99c573f)) +## [1.4.2](https://github.com/taskforcesh/bullmq/compare/v1.4.1...v1.4.2) \(2019-11-21\) -* Merge pull request #20 from taskforcesh/feat/development-4.0 +### Bug Fixes -Feat/development 4.0 ([`e4a9614`](https://github.com/taskforcesh/bullmq/commit/e4a9614b843caacd4dc01e7266daaae036cc12e9)) +* avoid Job<->Queue circular json error \([5752727](https://github.com/taskforcesh/bullmq/commit/5752727a6294e1b8d35f6a49e4953375510e10e6)\) +* avoid the .toJSON serializer interface [\#70](https://github.com/taskforcesh/bullmq/issues/70) \([5941b82](https://github.com/taskforcesh/bullmq/commit/5941b82b646e46d53970197a404e5ea54f09d008)\) -* Merge pull request #7 from taskforcesh/feat-bull3-compat-api-v2 +## [1.4.1](https://github.com/taskforcesh/bullmq/compare/v1.4.0...v1.4.1) \(2019-11-08\) -Compatibility class implementing bull3 api in bullmq ([`da7af7a`](https://github.com/taskforcesh/bullmq/commit/da7af7a319dd3f12acad7794f8fc27a251838d87)) +### Bug Fixes -* Merge branch 'development-4.0' into feat-bull3-compat-api-v2 ([`70e00ec`](https://github.com/taskforcesh/bullmq/commit/70e00ec1f347ab24a06bfaea25f31305e36667a0)) +* default job settings [\#58](https://github.com/taskforcesh/bullmq/issues/58) \([667fc6e](https://github.com/taskforcesh/bullmq/commit/667fc6e00ae4d6da639d285a104fb67e01c95bbd)\) -* Merge branch 'development-4.0' into feat-bull3-compat-api-v2 ([`33b19bd`](https://github.com/taskforcesh/bullmq/commit/33b19bd8cee85af0efef743c62098a64ce0b8bf7)) +# [1.4.0](https://github.com/taskforcesh/bullmq/compare/v1.3.0...v1.4.0) \(2019-11-06\) -* Merge branch 'development-4.0' of github.com:taskforcesh/bullmq into development-4.0 ([`65ea27b`](https://github.com/taskforcesh/bullmq/commit/65ea27b551af70508a8262a9774c38035863382f)) +### Features -* Merge pull request #3 from taskforcesh/feat-port-sandbox-processing +* job.progress\(\) return last progress for sandboxed processors \([5c4b146](https://github.com/taskforcesh/bullmq/commit/5c4b146ca8e42c8a29f9db87326a17deac30e10e)\) -port sandbox processors implementation and tests from bull 3.x ([`88a72e4`](https://github.com/taskforcesh/bullmq/commit/88a72e40eadef581a704bb5235e839184b435fb8)) +# [1.3.0](https://github.com/taskforcesh/bullmq/compare/v1.2.0...v1.3.0) \(2019-11-05\) -* npm install sinon (spies tool for tests) ([`c1778af`](https://github.com/taskforcesh/bullmq/commit/c1778af865c9d014a1091e3cd3027a6ca9cef317)) +### Features -* implement close() on our RedisConnection ([`db3aba9`](https://github.com/taskforcesh/bullmq/commit/db3aba9a97e2a2c01cf99846f22a448e3b9939d2)) +* test worker extends job lock while job is active \([577efdf](https://github.com/taskforcesh/bullmq/commit/577efdfb1d2d3140be78dee3bd658b5ce969b16d)\) -* adapt some tests from v3 for compat class ([`24a2abe`](https://github.com/taskforcesh/bullmq/commit/24a2abec5309860ef71e64315873483833cc2216)) +# [1.2.0](https://github.com/taskforcesh/bullmq/compare/v1.1.0...v1.2.0) \(2019-11-03\) -* make prettier ([`4886fa2`](https://github.com/taskforcesh/bullmq/commit/4886fa2a7eba3beaf1c5e41c50093972cf0c80e0)) +### Bug Fixes -* minor fixes in compat class ([`bf6c69f`](https://github.com/taskforcesh/bullmq/commit/bf6c69f460356a784ae6a0fe0661874241f24eef)) +* only run coveralls after success \([bd51893](https://github.com/taskforcesh/bullmq/commit/bd51893c35793657b65246a2f5a06469488c8a06)\) -* add suffix to defs from bull3 instead of V4 prefix on bullmq classes ([`f3a0601`](https://github.com/taskforcesh/bullmq/commit/f3a06012fc0587396b7378b9d39af35932921c4c)) +### Features -* add support of local and global events ([`e62bca1`](https://github.com/taskforcesh/bullmq/commit/e62bca1ad73a18ea4192168134129ac8993d6a93)) +* added code coverage and coveralls \([298cfc4](https://github.com/taskforcesh/bullmq/commit/298cfc48e35e648e6a22ac0d1633ac16c7b6e3de)\) +* added missing deps for coverage \([6f3ab8d](https://github.com/taskforcesh/bullmq/commit/6f3ab8d78ba8503a76447f0db5abf0c1c4f8e185)\) +* ignore commitlint file in coverage \([f874441](https://github.com/taskforcesh/bullmq/commit/f8744411a1b20b95e568502be15ec50cf8520926)\) +* only upload coverage once after all tests pass \([a7f73ec](https://github.com/taskforcesh/bullmq/commit/a7f73ecc2f51544f1d810de046ba073cb7aa5663)\) -* implement job methods where possible; forward props access to inner v4Job ([`278bc77`](https://github.com/taskforcesh/bullmq/commit/278bc77bb9e9fc14c295316fa52f004a81c83a80)) +# [1.1.0](https://github.com/taskforcesh/bullmq/compare/v1.0.1...v1.1.0) \(2019-11-01\) -* use v4 prefix for wrapped objects to better separate them ([`aa49369`](https://github.com/taskforcesh/bullmq/commit/aa49369d4b53e44e189df7ba2219af714144b5cc)) +### Bug Fixes -* implement queue.add() ([`d6c9ebd`](https://github.com/taskforcesh/bullmq/commit/d6c9ebd58f98452860fb4e1988fdd0403ef1add5)) +* failing build \([bb21d53](https://github.com/taskforcesh/bullmq/commit/bb21d53b199885dcc97e7fe20f60caf65e55e782)\) +* fix failing tests \([824eb6b](https://github.com/taskforcesh/bullmq/commit/824eb6bfb2b750b823d057c894797ccb336245d8)\) -* implement some more getters +### Features -getJobs, getJobCounts, getJobCountByTypes, getCompletedCount, getFailedCount, -getDelayedCount, getWaitingCount, getPausedCount, getActiveCount, getRepeatableCount, -getWorkers, base64Name, clientName, parseClientList ([`e78e9bf`](https://github.com/taskforcesh/bullmq/commit/e78e9bf75dd2aff39e7d226087dcafb6dc1109bf)) +* initial version of job locking mechanism \([1d4fa38](https://github.com/taskforcesh/bullmq/commit/1d4fa383e39f4f5dcb69a71a1359dd5dea75544c)\) -* implement job getters and repeatable jobs functions ([`29eeb4c`](https://github.com/taskforcesh/bullmq/commit/29eeb4c1bcb2f7ceb9769b4681cae953b83ea6c4)) +## [1.0.1](https://github.com/taskforcesh/bullmq/compare/v1.0.0...v1.0.1) \(2019-10-27\) -* implement implement pause, resume, count, close and getJob ([`4f43bb1`](https://github.com/taskforcesh/bullmq/commit/4f43bb1ed0f22f4877fe66fd6fe382c2217a23f2)) +### Bug Fixes -* implement queue.process() ([`1017ea6`](https://github.com/taskforcesh/bullmq/commit/1017ea63ac0add1b66ddfbfc39598669703c330b)) +* save job stacktrace on failure \([85dfe52](https://github.com/taskforcesh/bullmq/commit/85dfe525079a5f89c1901dbf35c7ddc6663afc24)\) +* simplify logic for stackTraceLimit \([296bd89](https://github.com/taskforcesh/bullmq/commit/296bd89514d430a499afee934dcae2aec41cffa2)\) -* implement queue/job options converters ([`736c1e0`](https://github.com/taskforcesh/bullmq/commit/736c1e03fa1d087f57ac15cdc5da3172907902c5)) +# 1.0.0 \(2019-10-20\) -* implement queue constructor ([`6dc880d`](https://github.com/taskforcesh/bullmq/commit/6dc880d03bf06d25f948200fc166a75f97b75281)) +### Bug Fixes -* restore queue constructor (only call with supported for now) ([`1d1a761`](https://github.com/taskforcesh/bullmq/commit/1d1a761fb6218d75ad3515725174aa5b3acc435f)) +* add compilation step before running tests \([64abc13](https://github.com/taskforcesh/bullmq/commit/64abc13681f8735fb3ee5add5b271bb4da618047)\) +* add extra client to worker fixes [\#34](https://github.com/taskforcesh/bullmq/issues/34) \([90bd891](https://github.com/taskforcesh/bullmq/commit/90bd891c7514f5e9e397d7aad15069ee55bebacd)\) +* add missing dependency \([b92e330](https://github.com/taskforcesh/bullmq/commit/b92e330aad35ae54f43376f92ad1b41209012b76)\) +* check closing after resuming from pause \([7b2cef3](https://github.com/taskforcesh/bullmq/commit/7b2cef3677e2b3af0370e0023aec4b971ad313fe)\) +* default opts \([333c73b](https://github.com/taskforcesh/bullmq/commit/333c73b5819a263ae92bdb54f0406c19db5cb64f)\) +* do not block if blockTime is zero \([13b2df2](https://github.com/taskforcesh/bullmq/commit/13b2df20cf045c069b8b581751e117722681dcd4)\) +* do not exec if closing \([b1d1c08](https://github.com/taskforcesh/bullmq/commit/b1d1c08a2948088eeb3dd65de78085329bac671b)\) +* do not trim if maxEvents is undefined \([7edd8f4](https://github.com/taskforcesh/bullmq/commit/7edd8f47b392c8b3a7369196befdafa4b29421d1)\) +* emit wait event in add job \([39cba31](https://github.com/taskforcesh/bullmq/commit/39cba31a30b7ef762a8d55d4bc34efec636207bf)\) +* fix a couple of job tests \([e66b97b](https://github.com/taskforcesh/bullmq/commit/e66b97be4577d5ab373fff0f3f45d73de7842a37)\) +* fix compiling error \([3cf2617](https://github.com/taskforcesh/bullmq/commit/3cf261703292d263d1e2017ae30eb490121dab4e)\) +* fix more tests \([6a07b35](https://github.com/taskforcesh/bullmq/commit/6a07b3518f856e8f7158be032110c925ed5c924f)\) +* fix progress script \([4228e27](https://github.com/taskforcesh/bullmq/commit/4228e2768c0cf404e09642ebb4053147d0badb56)\) +* fix retry functionality \([ec41ea4](https://github.com/taskforcesh/bullmq/commit/ec41ea4e0bd88b10b1ba434ef5ceb0952bb59f7b)\) +* fix several floating promises \([590a4a9](https://github.com/taskforcesh/bullmq/commit/590a4a925167a7c7d6c0d9764bbb5ab69235beb7)\) +* fixed reprocess lua script \([b78296f](https://github.com/taskforcesh/bullmq/commit/b78296f33517b8c5d79b300fef920edd03149d2f)\) +* improve concurrency mechanism \([a3f6148](https://github.com/taskforcesh/bullmq/commit/a3f61489e3c9891f42749ff85bd41064943c62dc)\) +* improve disconnection for queue events \([56b53a1](https://github.com/taskforcesh/bullmq/commit/56b53a1aca1e527b50f04d906653060fe8ca644e)\) +* initialize events comsumption in constructor \([dbb66cd](https://github.com/taskforcesh/bullmq/commit/dbb66cda9722d44eca806fa6ad1cabdaabac846a)\) +* make ioredis typings a normal dependency \([fb80b90](https://github.com/taskforcesh/bullmq/commit/fb80b90b12931a12a1a93c5e204dbf90eed4f48f)\) +* minor fixes \([7791cda](https://github.com/taskforcesh/bullmq/commit/7791cdac2bfb6a7fbbab9c95c5d89b1eae226a4c)\) +* parse progres and return value in events \([9e43d0e](https://github.com/taskforcesh/bullmq/commit/9e43d0e30ab90a290942418718cde1f5bfbdcf56)\) +* properly emit event for progress \([3f70175](https://github.com/taskforcesh/bullmq/commit/3f701750b1c957027825ee90b58141cd2556694f)\) +* reduce drain delay to 5 seconds \([c6cfe7c](https://github.com/taskforcesh/bullmq/commit/c6cfe7c0b50cabe5e5eb31f4b631a8b1d3706611)\) +* remove buggy close\(\) on redis-connection \(fixes 5 failing tests\) \([64c2ede](https://github.com/taskforcesh/bullmq/commit/64c2edec5e738f43676d0f4ca61bdea8609203fc)\) +* remove unused dependencies \([34293c8](https://github.com/taskforcesh/bullmq/commit/34293c84bb0ed54f18d70c86821c3ac627d376a5)\) +* replace init by waitUntilReady \([4336161](https://github.com/taskforcesh/bullmq/commit/43361610de5b1a993a1c65f3f21ac745b8face21)\) +* reworked initialization of redis clients \([c17d4be](https://github.com/taskforcesh/bullmq/commit/c17d4be5a2ecdda3efcdc6b9d7aecdfaccd06d83)\) +* several fixes to make the lib work on other ts projects \([3cac1b0](https://github.com/taskforcesh/bullmq/commit/3cac1b0715613d9df51cb1ed6fe0859bcfbb8e9b)\) +* throw error messages instead of codes \([9267541](https://github.com/taskforcesh/bullmq/commit/92675413f1c3b9564574dc264ffcab0d6089e70e)\) +* update tests after merge \([51f75a4](https://github.com/taskforcesh/bullmq/commit/51f75a4929e7ae2704e42fa9035e335fe60d8dc0)\) +* wait until ready before trying to get jobs \([f3b768f](https://github.com/taskforcesh/bullmq/commit/f3b768f251ddafa207466af552376065b35bec8f)\) +* **connections:** reused connections \([1e808d2](https://github.com/taskforcesh/bullmq/commit/1e808d24018a29f6611f4fccd2f5754de0fa3e39)\) +* waitUntilFinished improvements \([18d4afe](https://github.com/taskforcesh/bullmq/commit/18d4afef08f04d19cb8d931e02fff8f962d07ee7)\) -* stub implementations for job and queue objects ([`cc51ac3`](https://github.com/taskforcesh/bullmq/commit/cc51ac3b6d38926d061cfed9e6f3e2241f318e88)) +### Features -* reorganize structure of compat.ts ([`926f653`](https://github.com/taskforcesh/bullmq/commit/926f653f784cdcde3e0bc07a8fa87149fc54f74c)) +* add cleaned event \([c544775](https://github.com/taskforcesh/bullmq/commit/c544775803626b5f03cf6f7c3cf18ed1d92debab)\) +* add empty method \([4376112](https://github.com/taskforcesh/bullmq/commit/4376112369d869c0a5c7ab4a543cfc50200e1414)\) +* add retry errors \([f6a7990](https://github.com/taskforcesh/bullmq/commit/f6a7990fb74585985729c5d95e2238acde6cf74a)\) +* add script to generate typedocs \([d0a8cb3](https://github.com/taskforcesh/bullmq/commit/d0a8cb32ef9090652017f8fbf2ca42f0960687f7)\) +* add some new tests for compat class, more minor fixes \([bc0f653](https://github.com/taskforcesh/bullmq/commit/bc0f653ecf7aedd5a46eee6f912ecd6849395dca)\) +* add support for adding jobs in bulk \([b62bddc](https://github.com/taskforcesh/bullmq/commit/b62bddc054b266a809b4b1646558a095a276d6d1)\) +* add trimEvents method to queue client \([b7da7c4](https://github.com/taskforcesh/bullmq/commit/b7da7c4de2de81282aa41f8b7624b9030edf7d15)\) +* automatically trim events \([279bbba](https://github.com/taskforcesh/bullmq/commit/279bbbab7e96ad8676ed3bd68663cb199067ea67)\) +* emit global stalled event fixes [\#10](https://github.com/taskforcesh/bullmq/issues/10) \([241f229](https://github.com/taskforcesh/bullmq/commit/241f229761691b9ac17124da005f91594a78273d)\) +* get rid of Job3 in favor of bullmq Job class \([7590cea](https://github.com/taskforcesh/bullmq/commit/7590ceae7abe32a8824e4a265f95fef2f9a6665f)\) +* implement close in redis connection fixes [\#8](https://github.com/taskforcesh/bullmq/issues/8) \([6de8b48](https://github.com/taskforcesh/bullmq/commit/6de8b48c9612ea39bb28db5f4130cb2a2bb5ee90)\) +* make delay in backoffs optional \([30d59e5](https://github.com/taskforcesh/bullmq/commit/30d59e519794780a8198222d0bbd88779c623275)\) +* move async initialization to constructors \([3fbacd0](https://github.com/taskforcesh/bullmq/commit/3fbacd088bc3bfbd61ed8ff173e4401193ce48ec)\) +* port a lot of functionality from bull 3.x \([ec9f3d2](https://github.com/taskforcesh/bullmq/commit/ec9f3d266c1aca0c27cb600f056d813c81259b4c)\) +* port more features from bull 3.x \([75bd261](https://github.com/taskforcesh/bullmq/commit/75bd26158678ee45a14e04fd7c3a1f96219979a2)\) +* ported tests and functionality from bull 3 \([1b6b192](https://github.com/taskforcesh/bullmq/commit/1b6b1927c7e8e6b6f1bf0bbd6c74eb59cc17deb6)\) +* **workers:** support for async backoffs \([c555837](https://github.com/taskforcesh/bullmq/commit/c55583701e5bdd4e6436a61c833e506bc05749de)\) +* remove support of bull3 config format in compat class \([d909486](https://github.com/taskforcesh/bullmq/commit/d9094868e34c2af21f810aaef4542951a509ccf8)\) +* support global:progress event \([60f4d85](https://github.com/taskforcesh/bullmq/commit/60f4d85d332b3be4a80db7aa179f3a9ceeb1d6f8)\) +* trim option to event stream [\#21](https://github.com/taskforcesh/bullmq/issues/21) & fix [\#17](https://github.com/taskforcesh/bullmq/issues/17) \([7eae653](https://github.com/taskforcesh/bullmq/commit/7eae65340820043101fadf1f87802f506020d553)\) -* import existing typescript definitions from dt project (master) +## Changelog -source: https://github.com/DefinitelyTyped/DefinitelyTyped ([`87e0ef1`](https://github.com/taskforcesh/bullmq/commit/87e0ef182189e458a55c2e38e72893aa84b26aa6)) +## 4.0.0-beta.2 -* rewrite master.js in typescript ([`5ced75d`](https://github.com/taskforcesh/bullmq/commit/5ced75d7a51003bee3040fba45396b5efc4c10cf)) +### Fixed -* replace promise chains with async/await ([`548c911`](https://github.com/taskforcesh/bullmq/commit/548c91163a253e0a1dcddfcb376a1a604850849b)) +* Removed humans, they weren't doing fine with animals. -* finally fixed test for sandboxed processors ([`67d4ebe`](https://github.com/taskforcesh/bullmq/commit/67d4ebe3bbf7e37567da8bb403399b34997d198c)) +### Changed -* merge changes from development-4.0 ([`bd05c1a`](https://github.com/taskforcesh/bullmq/commit/bd05c1aee275673033fd9b2597fbdf0173132b8e)) +* Animals are now super cute, all of them. -* run prettier ([`44cb575`](https://github.com/taskforcesh/bullmq/commit/44cb5756020fa7a5906904068ff90712634597bc)) +## 4.0.0-beta.1 -* port sandbox processors implementation and tests from bull 3.x ([`8658e61`](https://github.com/taskforcesh/bullmq/commit/8658e614bf80e802684c7d771f6dcd6b969dde49)) +### Added -* GitBook: [master] 2 pages modified ([`4d28ad5`](https://github.com/taskforcesh/bullmq/commit/4d28ad514e2d13e0badbec08ad9ea3d518e55982)) +* Introduced animals into the world, we believe they're going to be a neat addition. -* Initial commit ([`43e5efc`](https://github.com/taskforcesh/bullmq/commit/43e5efcd9bc60505d111715df23090d3e91d5bf7)) +## 4.0.0-beta.0 From 167f5ed99ec3c9003988d39a3d226e9785709c4a Mon Sep 17 00:00:00 2001 From: roggervalf Date: Fri, 21 Jul 2023 12:09:17 -0500 Subject: [PATCH 252/322] ci(python): print next release version --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a47e49eb51..4a98ad7c2c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -59,7 +59,7 @@ jobs: pip install python-semantic-release git config --global user.email "manast@taskforce.sh" git config --global user.name "manast" - export VERSION=$(semantic-release -vv --noop version --print) + export VERSION=$(semantic-release version --print) if [ ! -z "$VERSION" ]; then GH_TOKEN=${{ secrets.GITHUB_TOKEN }} semantic-release publish fi From a594f39642fc0e8b7e86edcd85bba8cf7fc90802 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Fri, 21 Jul 2023 12:14:32 -0500 Subject: [PATCH 253/322] ci(python): set version_toml as a tuple --- python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index 951e0436c9..cfdd8dc11f 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -45,7 +45,7 @@ bullmq = ["commands/*.lua", "types/*"] [tool.semantic_release] version_variables = ["bullmq/__init__.py:__version__"] -version_toml = "pyproject.toml:project.version" +version_toml = ["pyproject.toml:project.version"] build_command = "python3 setup.py sdist" tag_format = "vpy{version}" version_source = "commit" From badab78d6df5c8067636b3fe3d684d3e2ec9c16e Mon Sep 17 00:00:00 2001 From: roggervalf Date: Fri, 21 Jul 2023 12:21:45 -0500 Subject: [PATCH 254/322] ci(python): use directory setting --- .github/workflows/release.yml | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4a98ad7c2c..57928cff99 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,15 +54,10 @@ jobs: flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Python Semantic Release if: ${{ contains(env.commitmsg, '(python)') }} - run: | - cd python - pip install python-semantic-release - git config --global user.email "manast@taskforce.sh" - git config --global user.name "manast" - export VERSION=$(semantic-release version --print) - if [ ! -z "$VERSION" ]; then - GH_TOKEN=${{ secrets.GITHUB_TOKEN }} semantic-release publish - fi + uses: python-semantic-release/python-semantic-release@master + with: + directory: ./python + github_token: ${{ secrets.GITHUB_TOKEN }} - name: Publish package distributions to PyPI id: pypi-publish if: ${{ contains(env.commitmsg, '(python)') }} From 59d4d1dd67a0efbab6ff252b2a042fc61c3f4df2 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 21 Jul 2023 17:25:30 +0000 Subject: [PATCH 255/322] 1.10.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 5348 +++++++++++++++++++++++++++++- python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 5258 insertions(+), 94 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index a94f7a69b3..205a00a8f1 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -1,156 +1,5320 @@ -# Changelog +# CHANGELOG - -## v1.9.0 (2023-07-18) + +## vpy1.10.0 (2023-07-21) + +### Chore + +* chore(release): 4.6.0 [skip ci] + +# [4.6.0](https://github.com/taskforcesh/bullmq/compare/v4.5.0...v4.6.0) (2023-07-19) + +### Features + +* **queue:** add promoteJobs to promote all delayed jobs ([6074592](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) ([`39b2565`](https://github.com/taskforcesh/bullmq/commit/39b2565325a56b1df87f49dfe3a1ba9deb0ea174)) + +### Ci + +* ci(python): use directory setting ([`badab78`](https://github.com/taskforcesh/bullmq/commit/badab78d6df5c8067636b3fe3d684d3e2ec9c16e)) + +* ci(python): set version_toml as a tuple ([`a594f39`](https://github.com/taskforcesh/bullmq/commit/a594f39642fc0e8b7e86edcd85bba8cf7fc90802)) + +* ci(python): print next release version ([`167f5ed`](https://github.com/taskforcesh/bullmq/commit/167f5ed99ec3c9003988d39a3d226e9785709c4a)) + +* ci(python): move into python directory ([`0939f1a`](https://github.com/taskforcesh/bullmq/commit/0939f1a55ff7c842d46cef0f0bf8360ee2431103)) + +### Documentation + +* docs(retry): add stop retrying jobs pattern (#2080) ref #1571 ([`dd40cf1`](https://github.com/taskforcesh/bullmq/commit/dd40cf1eaf13767ddcd5e68c4f33d974b65e6f18)) + +* docs(api): remove old api files in favor of typedoc (#2078) ([`75a594f`](https://github.com/taskforcesh/bullmq/commit/75a594f36a2e8c62e16f55d917d1b8f906d18a8c)) + +### Fix + +* fix(python): upgrade semver to prevent warnings (#2074) ([`fc7f92b`](https://github.com/taskforcesh/bullmq/commit/fc7f92bc3cd5208e79405d4573a1b64f692c3be2)) + + +## vpy1.9.0 (2023-07-18) + +### Chore + +* chore(release): 4.5.0 [skip ci] + +# [4.5.0](https://github.com/taskforcesh/bullmq/compare/v4.4.0...v4.5.0) (2023-07-18) + +### Bug Fixes + +* **python:** respect concurrency in worker ([#2062](https://github.com/taskforcesh/bullmq/issues/2062)) fixes [#2063](https://github.com/taskforcesh/bullmq/issues/2063) ([1b95185](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) + +### Features + +* **job:** add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([841dc87](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) ([`2b31259`](https://github.com/taskforcesh/bullmq/commit/2b31259878b5c6d46429502e1fadf51b74d8872c)) + ### Feature -* **job:** Add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([`841dc87`](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) -## v1.8.0 (2023-07-17) +* feat(job): add option for removing children in remove method (python) (#2064) ([`841dc87`](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) + + +## vpy1.8.0 (2023-07-17) + +### Chore + +* chore(release): 4.4.0 [skip ci] + +# [4.4.0](https://github.com/taskforcesh/bullmq/compare/v4.3.0...v4.4.0) (2023-07-17) + +### Features + +* **job:** add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([ffd49e2](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) +* **python:** add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([808ee72](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) ([`38ed54a`](https://github.com/taskforcesh/bullmq/commit/38ed54a879ecff97fab9757a5ebf6583d6d161fb)) + +* chore(deps): update coverallsapp/github-action digest to 95b1a23 (#2065) + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`a1577fa`](https://github.com/taskforcesh/bullmq/commit/a1577fa28870939101b1a7e31e04ae53005b9a46)) + +* chore(deps): update dependency dev/setuptools to v68 (#2038) + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`0bdabcd`](https://github.com/taskforcesh/bullmq/commit/0bdabcd4ccf4fb16cc57c7fa67c8ccfe41031bf4)) + ### Feature -* **job:** Add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([`ffd49e2`](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) + +* feat(job): add removeDependencyOnFailure option (#1953) ([`ffd49e2`](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) ### Fix -* **python:** Respect concurrency in worker (#2062) fixes #2063 ([`1b95185`](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) -## v1.7.0 (2023-07-14) +* fix(python): respect concurrency in worker (#2062) fixes #2063 ([`1b95185`](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) + + +## vpy1.7.0 (2023-07-14) + +### Chore + +* chore(release): 4.3.0 [skip ci] + +# [4.3.0](https://github.com/taskforcesh/bullmq/compare/v4.2.1...v4.3.0) (2023-07-14) + +### Features + +* **worker:** add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([e255356](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) ([`3b6f33e`](https://github.com/taskforcesh/bullmq/commit/3b6f33eb85f68cff97eb61253884cf540cfb4908)) + +* chore(deps): update dependency dev/setuptools to v63.4.3 (#2034) + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`f0b823a`](https://github.com/taskforcesh/bullmq/commit/f0b823a2bb078ea9b1fe953f6f068cbfe3eab757)) + +* chore(release): 4.2.1 [skip ci] + +## [4.2.1](https://github.com/taskforcesh/bullmq/compare/v4.2.0...v4.2.1) (2023-07-10) + +### Bug Fixes + +* **flow:** emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([f419ff1](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) +* **python:** add requires-python config ([#2056](https://github.com/taskforcesh/bullmq/issues/2056)) fixes [#1979](https://github.com/taskforcesh/bullmq/issues/1979) ([a557970](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) +* **python:** fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([7ec1c5b](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) + +### Features + +* **python:** add moveToWaitingChildren job method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([6d0e224](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) ([`fc69da9`](https://github.com/taskforcesh/bullmq/commit/fc69da91d109d713ff16efca0a968466b7868f6c)) + ### Feature -* **python:** Add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([`808ee72`](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) -* **worker:** Add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([`e255356`](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) + +* feat(python): add remove method in queue (#2066) ([`808ee72`](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) + +* feat(worker): add id as part of token (#2061) ([`e255356`](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) ### Fix -* **flow:** Emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([`f419ff1`](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) -### Documentation -* **stalled:** Add pattern reference for manual fetching jobs ([`a82401c`](https://github.com/taskforcesh/bullmq/commit/a82401c00cc7378cdf8206b5c74afeaaead39c2c)) -* **bullmq-pro:** Update changelog to v6.0.5 ([`37c203c`](https://github.com/taskforcesh/bullmq/commit/37c203c303e00a2aa4d8933bc5e68239547b1aca)) +* fix(flow): emit delayed event when parent is moved to delayed (#2055) ([`f419ff1`](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) + + +## vpy1.6.1 (2023-07-10) + +### Chore + +* chore(deps): update dependency pipenv to v2023.7.4 (#2042) + +Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`7508633`](https://github.com/taskforcesh/bullmq/commit/750863373adb9d8a528713a168d03b2dc3173eb1)) + +* chore(deps): update dependency dev/types-redis to v4.6.0.2 (#2046) ([`b47d622`](https://github.com/taskforcesh/bullmq/commit/b47d622fee8fa4363b23cff7969ac275d5b4b9ba)) -## v1.6.1 (2023-07-10) ### Fix -* **pyproject:** Add requires-python config (#2056) fixes #1979 ([`a557970`](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) -## v1.6.0 (2023-07-06) +* fix(python): add requires-python config (#2056) fixes #1979 ([`a557970`](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) + +### Unknown + +* doc(python): add python tabs in getters and step jobs pattern ([`f1ca525`](https://github.com/taskforcesh/bullmq/commit/f1ca52541eecbd610b0161b21fe696decd38ee7b)) + + +## vpy1.6.0 (2023-07-06) + +### Ci + +* ci(api): add docs-api branch logic (#2045) ([`6303148`](https://github.com/taskforcesh/bullmq/commit/63031484387a8cd8595da7ff0d2721c57b54d7e4)) + +### Feature + +* feat(python): add moveToWaitingChildren job method (#2049) ([`6d0e224`](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) + + +## vpy1.5.0 (2023-07-04) + +### Chore + +* chore(release): 4.2.0 [skip ci] + +# [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) + +### Bug Fixes + +* **python:** add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([d03ffc9](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) +* **python:** nuild egg-info at the root location ([3c2d06e](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) + +### Features + +* **common:** add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([ca17364](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) +* **python:** add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([57b2b72](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) +* **python:** add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([3e9db5e](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) +* **python:** add getFailedCount queue method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([92d7227](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) +* **python:** add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([8d5d6c1](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) +* **python:** add getJobState queue method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([8ec9ed6](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) ([`5e2a343`](https://github.com/taskforcesh/bullmq/commit/5e2a3430b320f0b28147e7695d8defd59e6a6a8e)) + +* chore(deps): update dependency dev/types-redis to v4.6.0.1 (#2035) ([`6e5d992`](https://github.com/taskforcesh/bullmq/commit/6e5d99213785c4988184fe70bf9dff6daf021880)) + +* chore(deps): update coverallsapp/github-action digest to 3b7440a (#2039) ([`cbc489b`](https://github.com/taskforcesh/bullmq/commit/cbc489bd59f689ced93c2c6a4162cde487475a28)) + ### Feature -* **job:** Add moveToWaitingChildren method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([`6d0e224`](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) -## v1.5.0 (2023-07-04) +* feat(common): add option to change repeatable jobs redis key hash algorithm (#2023) ([`ca17364`](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) + ### Fix -* **queue:** Fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([`7ec1c5b`](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) -## v1.4.0 (2023-06-30) +* fix(python): fix isPaused method when custom prefix is present (#2047) ([`7ec1c5b`](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) + + +## vpy1.4.0 (2023-06-30) + ### Feature -* **queue:** Add getJobState method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([`8ec9ed6`](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) -## v1.3.1 (2023-06-29) +* feat(python): add getJobState queue method (#2040) ([`8ec9ed6`](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) + + +## vpy1.3.1 (2023-06-29) + +### Chore + +* chore: update python changelog ([`4994bd7`](https://github.com/taskforcesh/bullmq/commit/4994bd7626cd5996eaec77a75a008591cc35980b)) + ### Fix -* **pyproject:** Build egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) -## v1.3.0 (2023-06-29) +* fix(python): nuild egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) + + +## vpy1.3.0 (2023-06-29) + +### Chore + +* chore(python): delete license key ([`d6e6449`](https://github.com/taskforcesh/bullmq/commit/d6e64493c979147a351f848212db5fa2282d3852)) + +### Documentation + +* docs(changelogs): update changelogs (#2028) ([`667de07`](https://github.com/taskforcesh/bullmq/commit/667de075f4762ab72dbaa5567bbacfd5147d4770)) + +* docs: update broken patterns link in the readme (#2025) ([`0e6e836`](https://github.com/taskforcesh/bullmq/commit/0e6e836376dc89d432f384e5ada0c9356d57252a)) + ### Feature -* **queue:** Add getFailedCount method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([`92d7227`](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) -* **queue:** Add getCompletedCount method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) + +* feat(python): add getFailedCount queue method (#2036) ([`92d7227`](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) + +* feat(python): add getCompleted queue method (#2033) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) ### Fix -* **release:** Add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) -## v1.2.0 (2023-06-24) +* fix(python): add recommended pyproject.toml configuration (#2029) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) + + +## vpy1.2.0 (2023-06-24) + ### Feature -* **queue:** Add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) -## v1.1.0 (2023-06-23) +* feat(python): add get job methods by state (#2012) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) + + +## vpy1.1.0 (2023-06-23) + +### Chore + +* chore(release): 4.1.0 [skip ci] + +# [4.1.0](https://github.com/taskforcesh/bullmq/compare/v4.0.0...v4.1.0) (2023-06-23) + +### Features + +* **queue:** add getPrioritized and getPrioritizedCount methods ([#2005](https://github.com/taskforcesh/bullmq/issues/2005)) ([7363abe](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) ([`65184e3`](https://github.com/taskforcesh/bullmq/commit/65184e3f1388083e63ff956dea4ad62a1addf710)) + +* chore(deps): update github/codeql-action digest to f6e388e (#2003) ([`ef2aab9`](https://github.com/taskforcesh/bullmq/commit/ef2aab97592dd55431e413f39b3d97b3db0e5ed4)) + ### Feature -* **queue:** Add getJobs method ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) -## v1.0.0 (2023-06-21) -### Breaking -* priority is separeted in its own zset, no duplication needed ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) +* feat(python): add getJobs method in queue class (#2011) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) + +* feat(queue): add getPrioritized and getPrioritizedCount methods (#2005) ([`7363abe`](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) + + +## vpy1.0.0 (2023-06-21) + +### Chore + +* chore(release): 4.0.0 [skip ci] + +# [4.0.0](https://github.com/taskforcesh/bullmq/compare/v3.15.8...v4.0.0) (2023-06-21) + +### Bug Fixes + +* **python:** pass right params to xtrim method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([a55fd77](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) + +### Performance Improvements + +* **priority:** add prioritized as a new state ([#1984](https://github.com/taskforcesh/bullmq/issues/1984)) (python) ([42a890a](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) + +### BREAKING CHANGES + +* **priority:** priority is separeted in its own zset, no duplication needed + +* feat(queue): add removeDeprecatedPriorityKey method + +* refactor: change job method name update to updateData + +ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ([`e0ab7e6`](https://github.com/taskforcesh/bullmq/commit/e0ab7e6fd62487884096ed8fc6164a0be0c4d581)) ### Performance -* **priority:** Add prioritized as a new state (#1984) (python) ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) -## v0.5.6 (2023-06-21) -### Fix -* **queue:** Pass right params to trimEvents method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([`a55fd77`](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) +* perf(priority): add prioritized as a new state (#1984) (python) + +decouple priority to keep one zset + +BREAKING CHANGE: priority is separeted in its own zset, no duplication needed + +* feat(queue): add removeDeprecatedPriorityKey method + +* refactor: change job method name update to updateData + +ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) + + +## vpy0.5.6 (2023-06-21) + +### Chore + +* chore(deps): update dependency pipenv to v2023.6.18 (#1997) ([`fc3f746`](https://github.com/taskforcesh/bullmq/commit/fc3f746441d43ebbc86256583f9b446e2ea874e5)) + +* chore(deps): update dependency virtualenv to v20.23.1 (#1993) ([`86f8aed`](https://github.com/taskforcesh/bullmq/commit/86f8aed9702baf3be6078c6b92e1f358c888adc6)) + +* chore(deps): update dependency semver to v7.5.2 (#1987) ([`93005e6`](https://github.com/taskforcesh/bullmq/commit/93005e6a6001b78b6c86e8cc4f463e3152621005)) ### Documentation -* **update:** Add job data section ([#1999](https://github.com/taskforcesh/bullmq/issues/1999)) ([`854b1ca`](https://github.com/taskforcesh/bullmq/commit/854b1cabd082c1df4d55e7973f0e0b0cd4aefb79)) -## v0.5.5 (2023-06-16) +* docs(update): add job data section (#1999) ([`854b1ca`](https://github.com/taskforcesh/bullmq/commit/854b1cabd082c1df4d55e7973f0e0b0cd4aefb79)) + ### Fix -* **rate-limit:** Keep priority fifo order (#1991) fixes #1929 (python) ([`56bd7ad`](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) -* **worker:** Set redis version always in initialization (#1989) fixes #1988 ([`a1544a8`](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) -## v0.5.4 (2023-06-14) +* fix(python): pass right params to xtrim method (#2004) ([`a55fd77`](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) + + +## vpy0.5.5 (2023-06-16) + +### Chore + +* chore(release): 3.15.8 [skip ci] + +## [3.15.8](https://github.com/taskforcesh/bullmq/compare/v3.15.7...v3.15.8) (2023-06-16) + +### Bug Fixes + +* **rate-limit:** keep priority fifo order ([#1991](https://github.com/taskforcesh/bullmq/issues/1991)) fixes [#1929](https://github.com/taskforcesh/bullmq/issues/1929) (python) ([56bd7ad](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) ([`5c36ae3`](https://github.com/taskforcesh/bullmq/commit/5c36ae318766741a00a07af587255a5e951bd731)) + +* chore(release): 3.15.7 [skip ci] + +## [3.15.7](https://github.com/taskforcesh/bullmq/compare/v3.15.6...v3.15.7) (2023-06-16) + +### Bug Fixes + +* **python:** add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([7c5ee20](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) +* **worker:** set redis version always in initialization ([#1989](https://github.com/taskforcesh/bullmq/issues/1989)) fixes [#1988](https://github.com/taskforcesh/bullmq/issues/1988) ([a1544a8](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) ([`90c34c3`](https://github.com/taskforcesh/bullmq/commit/90c34c37605134c72d560ed0fc6aa03a63b6cbca)) + ### Fix -* **connection:** Add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([`7c5ee20`](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) -## v0.5.3 (2023-06-13) +* fix(rate-limit): keep priority fifo order (#1991) fixes #1929 (python) ([`56bd7ad`](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) + +* fix(worker): set redis version always in initialization (#1989) fixes #1988 ([`a1544a8`](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) + + +## vpy0.5.4 (2023-06-14) + +### Chore + +* chore: fix python CHANGELOG ref ([`67e5df9`](https://github.com/taskforcesh/bullmq/commit/67e5df913f65ed94dc3500480bee785a7d01f57b)) + +* chore: update python changelog ([`fbedf2c`](https://github.com/taskforcesh/bullmq/commit/fbedf2c45ea0c0030eff26de6fb432c68e7697a9)) + ### Fix -* **worker:** Use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([`0df6afa`](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) + +* fix(python): add retry strategy in connection (#1975) ([`7c5ee20`](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) + +### Unknown + +* GITBOOK-163: docs(removing-jobs): add code tabs for python ([`234e3ad`](https://github.com/taskforcesh/bullmq/commit/234e3ad7f9dfc68540fb6c118dc6ff12ac8f6c25)) + + +## vpy0.5.3 (2023-06-13) + +### Chore + +* chore(release): 3.15.6 [skip ci] + +## [3.15.6](https://github.com/taskforcesh/bullmq/compare/v3.15.5...v3.15.6) (2023-06-13) + +### Bug Fixes + +* **worker:** use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([0df6afa](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) ([`7f42665`](https://github.com/taskforcesh/bullmq/commit/7f42665640b0cec1eaf32b4fec15ff1955164f8b)) ### Documentation -* **changelog:** Add missing version sections ([#1974](https://github.com/taskforcesh/bullmq/issues/1974)) ([`77b4de7`](https://github.com/taskforcesh/bullmq/commit/77b4de7c3b41ae63e311a2c373e0d2fc787f2f53)) -## v0.5.2 (2023-06-11) -### Fix -* **retry-job:** Consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([`e753855`](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) +* docs(python): add missing version sections (#1974) ([`77b4de7`](https://github.com/taskforcesh/bullmq/commit/77b4de7c3b41ae63e311a2c373e0d2fc787f2f53)) -## v0.5.1 (2023-06-09) ### Fix -* **python:** Include lua scripts when releasing ([`bb4f3b2`](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) -## v0.5.0 (2023-06-09) -### Feature -* **python:** Add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) +* fix(worker): use timeout as integer for redis lower than v6.0.0 (python) (#1981) ([`0df6afa`](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) -## v0.4.4 (2023-06-08) -### Fix -* **deps:** Downgrade python-semantic-release to avoid version issue -## v0.4.3 (2023-06-07) -### Feature -* Add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([`945bcd3`](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) +## vpy0.5.2 (2023-06-11) + +### Chore + +* chore(release): 3.15.5 [skip ci] + +## [3.15.5](https://github.com/taskforcesh/bullmq/compare/v3.15.4...v3.15.5) (2023-06-11) + +### Bug Fixes + +* **python:** include lua scripts when releasing ([bb4f3b2](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) +* **retry-job:** consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([e753855](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) + +### Features + +* **python:** add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([6a172e9](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) ([`69b94aa`](https://github.com/taskforcesh/bullmq/commit/69b94aae13033a385bccd93f82601a0c7c4f45a0)) + +* chore(deps): update actions/checkout digest to c85c95e (#1968) ([`85d8767`](https://github.com/taskforcesh/bullmq/commit/85d8767e96d17dc013c2553dd41e88e2c32c31f0)) ### Fix -* **rate-limit:** Consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([`d97864a`](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) -## v0.4.2 (2023-06-01) +* fix(retry-job): consider priority when moving job to wait (python) (#1969) ([`e753855`](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) + + +## vpy0.5.1 (2023-06-09) + +### Ci + +* ci(python): add build execution before python release ([`fdaaff0`](https://github.com/taskforcesh/bullmq/commit/fdaaff0d51aaf8d1b585c88071aabf9749cceeb2)) + +* ci(python): check command files ([`1531db4`](https://github.com/taskforcesh/bullmq/commit/1531db4ed74b218b08f7379e0e97e5a3fe709e63)) + ### Fix -* **deps:** Fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([`ce86ece`](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) -## v0.4.1 (2023-05-29) -### Feature -* **job:** Add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([`f0867a6`](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) +* fix(python): include lua scripts when releasing ([`bb4f3b2`](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) + + +## vpy0.5.0 (2023-06-09) + +### Chore + +* chore(release): 3.15.4 [skip ci] + +## [3.15.4](https://github.com/taskforcesh/bullmq/compare/v3.15.3...v3.15.4) (2023-06-08) + +### Bug Fixes + +* **job:** import right reference of QueueEvents ([#1964](https://github.com/taskforcesh/bullmq/issues/1964)) ([689c845](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) ([`2ea7483`](https://github.com/taskforcesh/bullmq/commit/2ea74830cf0363ea39b077258d70f996f255a519)) + +### Ci + +* ci(python): install packaging module ([`ef0f7ed`](https://github.com/taskforcesh/bullmq/commit/ef0f7ed1d4e9e1b4f8bf7aecd79bc677c956ff67)) -## [v0.4.0](https://github.com/taskforcesh/bullmq/compare/46d6f94...01b621f) (2023-05-18) ### Feature -* **connection:** accept redis options as string ([`01f549e`](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) -* **job:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([`5bebf8d`](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) -* **job:** Add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([`870da45`](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) -* **job:** Add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([`800b8c4`](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) -* **job:** Add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([`e1e1aa2`](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) -* **job:** Save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([`0b538ce`](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) -* Support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([`b044a03`](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) + +* feat(python): add remove job method (#1965) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) ### Fix -* **retry:** Consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([`01b621f`](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) -* **worker:** Stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([`514699c`](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) -## [v0.3.0](https://github.com/taskforcesh/bullmq/compare/ca48163...46d6f94) (2023-04-18) -### Feature -* **queue:** Add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([`46d6f94`](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) -* Improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([`ec7c49e`](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) +* fix(job): import right reference of QueueEvents (#1964) ([`689c845`](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) + + +## vpy0.4.4 (2023-06-08) + +### Chore + +* chore(release): 3.15.3 [skip ci] + +## [3.15.3](https://github.com/taskforcesh/bullmq/compare/v3.15.2...v3.15.3) (2023-06-08) + +### Bug Fixes + +* **job:** use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([881848c](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) ([`0db3d46`](https://github.com/taskforcesh/bullmq/commit/0db3d46690acdf4b8b703427ba3fbed0893724e1)) + +### Ci + +* ci(python): set user git information ([`38d23ae`](https://github.com/taskforcesh/bullmq/commit/38d23aed22ca0eb16171a013c37b51cdb403e8be)) + +* ci(python): downgrade python-semantic-release to avoid version issue ([`8a7cd62`](https://github.com/taskforcesh/bullmq/commit/8a7cd621d57aaceb1e432445fb86598dfb12cb55)) + +* ci(python): use version_source as commit ([`8002570`](https://github.com/taskforcesh/bullmq/commit/8002570555b1dfdfed3d3d331de23173d9cc67c8)) + +* ci(python): use version_source ([`973a9d3`](https://github.com/taskforcesh/bullmq/commit/973a9d357fc954ea6c44b2e14e18aef766208129)) + +* ci(python): move into python subfolder when releasing ([`d15581d`](https://github.com/taskforcesh/bullmq/commit/d15581d21bc9e5ed826c92b26cbe2f2b82c1c416)) + +* ci(python): use contains method instead of startsWith ([`646707b`](https://github.com/taskforcesh/bullmq/commit/646707bf5559ce5ee129527b8c5905922af4002d)) + +* ci(python): add python-semantic-release (#1957) ([`83cd060`](https://github.com/taskforcesh/bullmq/commit/83cd06049ead23a4a6ab4ac6dbb53371ca678ab5)) ### Fix -* Correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([`ef0c5d6`](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) -* Fix scripts typing on array2obj function ([#1786](https://github.com/taskforcesh/bullmq/issues/1786)) ([`134f6ab`](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) -* Pass maxMetricsSize as empty string when it is not provided fixes ([#1754](https://github.com/taskforcesh/bullmq/issues/1754)) ([`6bda2b2`](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) -## [v0.2.0](https://github.com/taskforcesh/bullmq/compare/a97b22f...ca48163) (2023-03-29) -### Feature -* Add trimEvents method ([#1695](https://github.com/taskforcesh/bullmq/issues/1695)) ([`ca48163`](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) -* **queue:** Add retryJobs method ([#1688](https://github.com/taskforcesh/bullmq/issues/1688)) ([`2745327`](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) +* fix(job): use QueueEvents type for waitUntilFinished (#1958) ([`881848c`](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) -## v0.1.0 (2023-02-15) -### Feature -* Initial python package ([`a97b22f`](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) + +## vpy0.4.3 (2023-06-07) + +### Breaking + +* feat(rate-limit): remove group key support and improve global rate limit + +BREAKING CHANGE: limit by group keys has been removed in favor +of a much simpler and efficent rate-limit implementation. ([`81f780a`](https://github.com/taskforcesh/bullmq/commit/81f780aeed81e670107d01d01265d407a30e2a62)) + +* fix(backoff): handle backoff strategy as function (#1463) + +BREAKING CHANGE: object mapping is replaced by single function ([`3640269`](https://github.com/taskforcesh/bullmq/commit/36402691a3c7fa500f07e2e11a28318099bdb909)) + +* fix(compat): remove Queue3 class (#1421) + +BREAKING CHANGE: +The compatibility class for Bullv3 is no longer available. ([`fc797f7`](https://github.com/taskforcesh/bullmq/commit/fc797f7cd334c19a95cb1290ddb6611cd3417179)) + +* feat: improve delayed jobs and remove QueueScheduler + +BREAKING CHANGE: +The QueueScheduler class is removed since it is not necessary anymore. +Delayed jobs are now handled in a much simpler and +robust way, without the need of a separate process. ([`1f66e5a`](https://github.com/taskforcesh/bullmq/commit/1f66e5a6c891d52e0671e58a685dbca511e45e7e)) + +* feat: move stalled jobs check and handling to Worker class from QueueScheduler + +BREAKING CHANGE: +failed and stalled events are now produced by the Worker class instead of by the QueueScheduler. ([`13769cb`](https://github.com/taskforcesh/bullmq/commit/13769cbe38ba22793cbc66e9706a6be28a7f1512)) + +### Build + +* build(types): build types only once (#1652) ([`a104eb1`](https://github.com/taskforcesh/bullmq/commit/a104eb15adada64e3a2e79525baa335a6f2fa4d1)) + +### Chore + +* chore(python): bump to version 0.4.3 ([`8ad2e12`](https://github.com/taskforcesh/bullmq/commit/8ad2e124ea75a110981779b1fddb082f6210ac54)) + +* chore(release): 3.15.2 [skip ci] + +## [3.15.2](https://github.com/taskforcesh/bullmq/compare/v3.15.1...v3.15.2) (2023-06-06) + +### Bug Fixes + +* **worker:** better worker client naming ([c5f63af](https://github.com/taskforcesh/bullmq/commit/c5f63affe72f7b6616f4c5f3aafde858dcc0b200)) ([`492f686`](https://github.com/taskforcesh/bullmq/commit/492f686e685744511e3f817bf5f1d503e8094392)) + +* chore(release): 3.15.1 [skip ci] + +## [3.15.1](https://github.com/taskforcesh/bullmq/compare/v3.15.0...v3.15.1) (2023-06-05) + +### Bug Fixes + +* **rate-limit:** consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) + +### Features + +* **python:** add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) ([`b1097c9`](https://github.com/taskforcesh/bullmq/commit/b1097c9d72dbe2cde7e2e5f6019d49e34d69b6b5)) + +* chore(deps): update actions/setup-python digest to bd6b4b6 (#1916) ([`bcc8030`](https://github.com/taskforcesh/bullmq/commit/bcc8030799907340f2f3db03edb2d83c77a52fb0)) + +* chore(release): 3.15.0 [skip ci] + +# [3.15.0](https://github.com/taskforcesh/bullmq/compare/v3.14.2...v3.15.0) (2023-05-31) + +### Features + +* **job:** add changePriority method ([#1901](https://github.com/taskforcesh/bullmq/issues/1901)) ref [#1899](https://github.com/taskforcesh/bullmq/issues/1899) ([9485ad5](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) ([`1ccf486`](https://github.com/taskforcesh/bullmq/commit/1ccf4864c957b85f244e45673513cea239796ea4)) + +* chore(release): 3.14.2 [skip ci] + +## [3.14.2](https://github.com/taskforcesh/bullmq/compare/v3.14.1...v3.14.2) (2023-05-30) + +### Bug Fixes + +* **python:** fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) +* **rate-limit:** take in count priority ([#1919](https://github.com/taskforcesh/bullmq/issues/1919)) fixes [#1915](https://github.com/taskforcesh/bullmq/issues/1915) ([b8157a3](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) ([`6f4fb3c`](https://github.com/taskforcesh/bullmq/commit/6f4fb3cac980a06816660bbc7339b81db801f4d7)) + +* chore(python): bump to v0.4.1 ([`7509642`](https://github.com/taskforcesh/bullmq/commit/75096429d7a46d1f7babccdd4914f707eac32770)) + +* chore(python): add missing types to package + +Include types directory ([`7bc4f0b`](https://github.com/taskforcesh/bullmq/commit/7bc4f0bd02cf85be6e3ec9e363657d0260b826d6)) + +* chore(release): 3.14.1 [skip ci] + +## [3.14.1](https://github.com/taskforcesh/bullmq/compare/v3.14.0...v3.14.1) (2023-05-27) + +### Features + +* **python:** add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) + +### Performance Improvements + +* **retry-job:** get target queue list once ([#1921](https://github.com/taskforcesh/bullmq/issues/1921)) ([8a7a9dd](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) ([`5b1c5e9`](https://github.com/taskforcesh/bullmq/commit/5b1c5e9ccf2b01e2367582bd3214f9abdccea602)) + +* chore(release): 3.14.0 [skip ci] + +# [3.14.0](https://github.com/taskforcesh/bullmq/compare/v3.13.4...v3.14.0) (2023-05-22) + +### Features + +* **worker:** make extendLocks overridable ([7b1386b](https://github.com/taskforcesh/bullmq/commit/7b1386bb823562d9666a1ad6e206e1deb63e57ec)) ([`5beaf52`](https://github.com/taskforcesh/bullmq/commit/5beaf5285bb06d457dceb7ae636ecefff80ed881)) + +* chore(deps): update dependency tslib to v2.5.2 (#1905) ([`02594d6`](https://github.com/taskforcesh/bullmq/commit/02594d67e73c0bfe43d0045e8f988beff27d5c0d)) + +* chore(python): bump to version 0.4.0 ([`5d8f57f`](https://github.com/taskforcesh/bullmq/commit/5d8f57fc1b967fe33f1cb561bb907c720bf4a286)) + +* chore(deps): update coverallsapp/github-action digest to 059e56d (#1907) ([`b600624`](https://github.com/taskforcesh/bullmq/commit/b60062445a5b1f918e5a62d04576c8cac96719dc)) + +* chore(bullmq-pro): update changelog (#1902) ([`d164fa8`](https://github.com/taskforcesh/bullmq/commit/d164fa8745514fe46bfb3feb02d24884e4ea4697)) + +* chore(deps): update dependency redis to v4.5.5 (#1883) ([`5b94b1c`](https://github.com/taskforcesh/bullmq/commit/5b94b1ca3d23e1cfa6d3efb73e042670d0421c39)) + +* chore(release): 3.13.4 [skip ci] + +## [3.13.4](https://github.com/taskforcesh/bullmq/compare/v3.13.3...v3.13.4) (2023-05-11) + +### Performance Improvements + +* **rate-limit:** call pttl in script moveJobFromActiveToWait ([#1889](https://github.com/taskforcesh/bullmq/issues/1889)) ([e0d2992](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) ([`d7e640c`](https://github.com/taskforcesh/bullmq/commit/d7e640c6368a714f611920be849648348052de05)) + +* chore(release): 3.13.3 [skip ci] + +## [3.13.3](https://github.com/taskforcesh/bullmq/compare/v3.13.2...v3.13.3) (2023-05-10) + +### Bug Fixes + +* **child:** use named import for EventEmitter ([#1887](https://github.com/taskforcesh/bullmq/issues/1887)) ([1db396d](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) ([`64658c0`](https://github.com/taskforcesh/bullmq/commit/64658c024508fe91e85a291116ed899bbea0d564)) + +* chore(release): 3.13.2 [skip ci] + +## [3.13.2](https://github.com/taskforcesh/bullmq/compare/v3.13.1...v3.13.2) (2023-05-09) + +### Bug Fixes + +* **rate-limit:** consider paused queue when dynamic rate limit ([#1884](https://github.com/taskforcesh/bullmq/issues/1884)) ([a23f37e](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) ([`ce8059d`](https://github.com/taskforcesh/bullmq/commit/ce8059d5c6620acc9f8a090e447c610f80913af4)) + +* chore(release): 3.13.1 [skip ci] + +## [3.13.1](https://github.com/taskforcesh/bullmq/compare/v3.13.0...v3.13.1) (2023-05-07) + +### Bug Fixes + +* **retry:** consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([01b621f](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) ([`a880069`](https://github.com/taskforcesh/bullmq/commit/a880069ca02c1b9eb64fb42a0d269b3e98aa91c3)) + +* chore(release): 3.13.0 [skip ci] + +# [3.13.0](https://github.com/taskforcesh/bullmq/compare/v3.12.1...v3.13.0) (2023-05-06) + +### Features + +* **worker:** add worker threads support ([0820985](https://github.com/taskforcesh/bullmq/commit/0820985e073582fdf841affad38ecc7ab64691ec)) ([`dd1803f`](https://github.com/taskforcesh/bullmq/commit/dd1803f866ff249f2c19691dc1c020a69125a88f)) + +* chore(release): 3.12.1 [skip ci] + +## [3.12.1](https://github.com/taskforcesh/bullmq/compare/v3.12.0...v3.12.1) (2023-05-05) + +### Bug Fixes + +* **python:** stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) +* **worker:** close open handles after closing ([#1861](https://github.com/taskforcesh/bullmq/issues/1861)) fixes [#1312](https://github.com/taskforcesh/bullmq/issues/1312) ([39286e8](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) + +### Features + +* **python:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) +* **python:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) +* **python:** add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([870da45](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) +* **python:** add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) +* **python:** add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) +* **python:** save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) +* **python:** support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) ([`8f02061`](https://github.com/taskforcesh/bullmq/commit/8f020618d364c5706aca63086effe993fd437bbc)) + +* chore(deps): update github/codeql-action digest to 29b1f65 (#1876) ([`e81e94a`](https://github.com/taskforcesh/bullmq/commit/e81e94aeef1a07a975235c1c330f297c2bf8c9f5)) + +* chore(worker): remove out-commented code ([`332672b`](https://github.com/taskforcesh/bullmq/commit/332672b5d589f624db7c7dbd4a130536a011cb83)) + +* chore(python): update python version ([`3ae441a`](https://github.com/taskforcesh/bullmq/commit/3ae441a904f1e5555754f116cb7f5f0ef38930f6)) + +* chore(deps): lock file maintenance (#1864) ([`f2f1f2c`](https://github.com/taskforcesh/bullmq/commit/f2f1f2ca9c53ea8dd7e7d44557d039d822ddb9b9)) + +* chore(deps): lock file maintenance (#1851) ([`083b4d5`](https://github.com/taskforcesh/bullmq/commit/083b4d55ea67c75ae2a40c0545157cecd8e50508)) + +* chore(python): replace staticmethod function with decorator (#1826) ([`475a188`](https://github.com/taskforcesh/bullmq/commit/475a18863b678e72f4d3ba65af70e9d15c199333)) + +* chore(deps): update actions/setup-python digest to 57ded4d ([`182b4bb`](https://github.com/taskforcesh/bullmq/commit/182b4bb06a398b3a61ea070a7256d68cb77b86e6)) + +* chore(python): move types into a subfolder (#1828) ([`5428ecb`](https://github.com/taskforcesh/bullmq/commit/5428ecb6524ddcf880402108e7daa73ed4c4807a)) + +* chore(release): 3.12.0 [skip ci] + +# [3.12.0](https://github.com/taskforcesh/bullmq/compare/v3.11.0...v3.12.0) (2023-04-20) + +### Features + +* upgrade ioredis to 5.3.2 ([375b1be](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) ([`fc66096`](https://github.com/taskforcesh/bullmq/commit/fc66096d79734ad543562dfdbd6739c080f7102f)) + +* chore(deps): update coverallsapp/github-action digest to d2cf009 (#1842) ([`c72bc17`](https://github.com/taskforcesh/bullmq/commit/c72bc1756faec43b7b67528f0f0bdacef193e005)) + +* chore(release): 3.11.0 [skip ci] + +# [3.11.0](https://github.com/taskforcesh/bullmq/compare/v3.10.4...v3.11.0) (2023-04-17) + +### Bug Fixes + +* **python:** correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([ef0c5d6](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) + +### Features + +* **python:** add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([46d6f94](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) +* **python:** improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([ec7c49e](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) +* **upstash:** don't throw an error when detecting an upstash host ([2e06bca](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) ([`1a3113b`](https://github.com/taskforcesh/bullmq/commit/1a3113b97106eebd63883dc8865b7c6a3f028765)) + +* chore(python): replace is operator (#1819) ([`cd15d7d`](https://github.com/taskforcesh/bullmq/commit/cd15d7d46626511231f50f86c11898c6fa551c5b)) + +* chore(python): remove unnecessary semicolons (#1801) ([`b4729e9`](https://github.com/taskforcesh/bullmq/commit/b4729e99622a802a09db9f8007b1039b4001b8fb)) + +* chore(python): add JobOptions to add method (#1798) ([`8d0cbda`](https://github.com/taskforcesh/bullmq/commit/8d0cbdad4006394be080f8dc6ffdf5f193afc5aa)) + +* chore(python): add QueueOptions (#1797) ([`7478049`](https://github.com/taskforcesh/bullmq/commit/74780498a76849b7157af7688ea5b9c37c1c09dd)) + +* chore(python): add JobOptions (#1796) ([`893f71a`](https://github.com/taskforcesh/bullmq/commit/893f71a9d0309aef924fba4ec605d9fb4f6c0f68)) + +* chore(python): add WorkerOptions typed dict (#1795) ([`4843634`](https://github.com/taskforcesh/bullmq/commit/48436341230b495d9400948626c20db40761e2d1)) + +* chore(deps): pin actions/setup-python action to d27e3f3 ([`17ccf4f`](https://github.com/taskforcesh/bullmq/commit/17ccf4ff807179c9f65a9f4087fbb6671212f07c)) + +* chore(python): update python docs comments (#1790) ([`cb145ce`](https://github.com/taskforcesh/bullmq/commit/cb145cef8cc655deafbe10edef2f9540d1ca53cc)) + +* chore(release): 3.10.4 [skip ci] + +## [3.10.4](https://github.com/taskforcesh/bullmq/compare/v3.10.3...v3.10.4) (2023-04-05) + +### Bug Fixes + +* **flow:** do not remove completed children results ([#1788](https://github.com/taskforcesh/bullmq/issues/1788)) fixes [#1778](https://github.com/taskforcesh/bullmq/issues/1778) ([04b547a](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) +* **python:** fix scripts typing on array2obj function ([#1786](https://github.com/taskforcesh/bullmq/issues/1786)) ([134f6ab](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) ([`86f5774`](https://github.com/taskforcesh/bullmq/commit/86f57742e3233853b944ae8616c1cfa5a16706c3)) + +* chore(python): add missing typings in python (#1789) ([`9e22393`](https://github.com/taskforcesh/bullmq/commit/9e22393a66dee10d339225e453b4a52cdd9f2104)) + +* chore(deps): update dependency msgpack to v1.0.5 (#1731) ([`7ca07dd`](https://github.com/taskforcesh/bullmq/commit/7ca07ddfd46383863fbcdb383dcc800e05bd000a)) + +* chore(release): 3.10.3 [skip ci] + +## [3.10.3](https://github.com/taskforcesh/bullmq/compare/v3.10.2...v3.10.3) (2023-03-30) + +### Bug Fixes + +* **flow:** consider removing dependency on removeOnFail true ([#1753](https://github.com/taskforcesh/bullmq/issues/1753)) ([de5a299](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) +* **python:** pass maxMetricsSize as empty string when it is not provided fixes [#1754](https://github.com/taskforcesh/bullmq/issues/1754) ([6bda2b2](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) ([`8c34cc7`](https://github.com/taskforcesh/bullmq/commit/8c34cc7dcb71413a77b1e9f5bdb157d5b6d7a0ac)) + +* chore(python): update README ([`4ea9642`](https://github.com/taskforcesh/bullmq/commit/4ea9642193e3a9ac9852314a6e3f21558eaa267b)) + +* chore(release): 3.10.2 [skip ci] + +## [3.10.2](https://github.com/taskforcesh/bullmq/compare/v3.10.1...v3.10.2) (2023-03-22) + +### Bug Fixes + +* **job:** avoid error when job is moved when processing ([#1354](https://github.com/taskforcesh/bullmq/issues/1354)) fixes [#1343](https://github.com/taskforcesh/bullmq/issues/1343) [#1602](https://github.com/taskforcesh/bullmq/issues/1602) ([78085e4](https://github.com/taskforcesh/bullmq/commit/78085e4304357dd3695df61057f91e706c3a52bf)) ([`358ab2a`](https://github.com/taskforcesh/bullmq/commit/358ab2a9179155659800d48edee0f1f77309bff1)) + +* chore(release): 3.10.1 [skip ci] + +## [3.10.1](https://github.com/taskforcesh/bullmq/compare/v3.10.0...v3.10.1) (2023-03-06) + +### Bug Fixes + +* **worker:** throw error with invalid concurrency fixes [#1723](https://github.com/taskforcesh/bullmq/issues/1723) ([2a1cdbe](https://github.com/taskforcesh/bullmq/commit/2a1cdbe3e871309f460aadc14b4d632238c32aa9)) ([`5849cf6`](https://github.com/taskforcesh/bullmq/commit/5849cf686064bfb5f28ccb735ec47fb44553c5a8)) + +* chore(release): 3.10.0 [skip ci] + +# [3.10.0](https://github.com/taskforcesh/bullmq/compare/v3.9.0...v3.10.0) (2023-03-02) + +### Bug Fixes + +* **worker:** close lock extended timer ([7995f18](https://github.com/taskforcesh/bullmq/commit/7995f18bb7712bd50d0fa3d17c4ab565b16ab379)) +* **worker:** correct lock extender logic ([6aa3569](https://github.com/taskforcesh/bullmq/commit/6aa3569db0fe0137790e61a4b5982d2b35ee5646)) +* **worker:** start stalled check timer ([4763be0](https://github.com/taskforcesh/bullmq/commit/4763be028b0c7b0460fd0804d4569c446a06ef4a)) + +### Features + +* **worker:** replace Promise.race with efficient an async fifo ([0d94e35](https://github.com/taskforcesh/bullmq/commit/0d94e35e805b09c3b4c7404b8a2eeb71a1aff5c4)) +* **worker:** simplify lock extension to one call independent of concurrency ([ebf1aeb](https://github.com/taskforcesh/bullmq/commit/ebf1aeb2400383d0ae90ab68aeb4822aea03ba44)) + +### Performance Improvements + +* **scripts:** reuse keys array to avoid allocations ([feac7b4](https://github.com/taskforcesh/bullmq/commit/feac7b4070a6a3720597af36c43d095e9ea37173)) +* **worker:** improve worker memory consumption ([4846cf1](https://github.com/taskforcesh/bullmq/commit/4846cf1fe3f9ea35f58a679c11706e1a7101c898)) ([`4cb5250`](https://github.com/taskforcesh/bullmq/commit/4cb5250886f8f454a7ee4ee4d2b1754cd83df59b)) + +* chore(release): 3.9.0 [skip ci] + +# [3.9.0](https://github.com/taskforcesh/bullmq/compare/v3.8.0...v3.9.0) (2023-02-25) + +### Features + +* **worker:** add remove on complete and fail options ([#1703](https://github.com/taskforcesh/bullmq/issues/1703)) ([cf13494](https://github.com/taskforcesh/bullmq/commit/cf1349471dcbf0e43feea9972eaa71d2299d619f)) ([`3dc3b55`](https://github.com/taskforcesh/bullmq/commit/3dc3b55b787b49701dcf7aa74e85a216c774c231)) + +* chore(deps): bump json5 from 1.0.1 to 1.0.2 (#1613) ([`b58c6f3`](https://github.com/taskforcesh/bullmq/commit/b58c6f302b363720c2004dd2c1f7a7dfecf6640b)) + +* chore(release): 3.8.0 [skip ci] + +# [3.8.0](https://github.com/taskforcesh/bullmq/compare/v3.7.2...v3.8.0) (2023-02-23) + +### Bug Fixes + +* **worker:** run stalled check directly first time ([f71ec03](https://github.com/taskforcesh/bullmq/commit/f71ec03111a22897cbf2fad39073185e4aeac6d6)) + +### Features + +* **worker:** add a public method to run the stalled checker ([3159266](https://github.com/taskforcesh/bullmq/commit/3159266ccb002d4fc71b7ee7ac63c465c536dbd1)) +* **worker:** add support to disable stalled checks ([49e860c](https://github.com/taskforcesh/bullmq/commit/49e860c6675853971e992c2945b445660504e3b2)) ([`aa74246`](https://github.com/taskforcesh/bullmq/commit/aa742463f7dfbec433d166a42dfefd5b9248a544)) + +* chore(release): 3.7.2 [skip ci] + +## [3.7.2](https://github.com/taskforcesh/bullmq/compare/v3.7.1...v3.7.2) (2023-02-23) + +### Bug Fixes + +* **worker:** restore failed event job parameter typing ([#1707](https://github.com/taskforcesh/bullmq/issues/1707)) ([44c2203](https://github.com/taskforcesh/bullmq/commit/44c2203ab65d406be9a913254600fe07c83e62d5)) ([`3ecb8f7`](https://github.com/taskforcesh/bullmq/commit/3ecb8f7fbb736e223aa73bbbf8f07629892902fa)) + +* chore(release): 3.7.1 [skip ci] + +## [3.7.1](https://github.com/taskforcesh/bullmq/compare/v3.7.0...v3.7.1) (2023-02-22) + +### Bug Fixes + +* **worker:** failed event receives an optional job parameter ([#1702](https://github.com/taskforcesh/bullmq/issues/1702)) fixes [#1690](https://github.com/taskforcesh/bullmq/issues/1690) ([6009906](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) + +### Features + +* **python:** add retryJobs method ([#1688](https://github.com/taskforcesh/bullmq/issues/1688)) ([2745327](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) +* **python:** add trimEvents ([#1695](https://github.com/taskforcesh/bullmq/issues/1695)) ([ca48163](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) ([`e465b55`](https://github.com/taskforcesh/bullmq/commit/e465b5574a19013868250658740b0fdda1d2c6f6)) + +* chore(deps): update dependency virtualenv to v20.19.0 (#1686) ([`2397d00`](https://github.com/taskforcesh/bullmq/commit/2397d0068f9fdf4036abddb0aca205f9e5ca8d54)) + +* chore(release): 3.7.0 [skip ci] + +# [3.7.0](https://github.com/taskforcesh/bullmq/compare/v3.6.6...v3.7.0) (2023-02-16) + +### Features + +* initial python package ([#1673](https://github.com/taskforcesh/bullmq/issues/1673)) ([a97b22f](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) ([`3b63c3e`](https://github.com/taskforcesh/bullmq/commit/3b63c3e629c1d63b6692f823fd83888f60a3a834)) + +* chore: prevent npm releases from python changes ([`3c2dacb`](https://github.com/taskforcesh/bullmq/commit/3c2dacb0952190afdf9d7262502c7df6dd1376c4)) + +* chore(release): 3.6.6 [skip ci] + +## [3.6.6](https://github.com/taskforcesh/bullmq/compare/v3.6.5...v3.6.6) (2023-02-15) + +### Bug Fixes + +* **job:** check jobKey when saving stacktrace ([#1681](https://github.com/taskforcesh/bullmq/issues/1681)) fixes [#1676](https://github.com/taskforcesh/bullmq/issues/1676) ([1856c76](https://github.com/taskforcesh/bullmq/commit/1856c7684c377ca4fd36294cca8e128404be27b8)) ([`488f943`](https://github.com/taskforcesh/bullmq/commit/488f9437977f9aeb5a03b96a41dbb664dbfe2775)) + +* chore(deps): lock file maintenance (#1657) ([`762fd28`](https://github.com/taskforcesh/bullmq/commit/762fd28e8a64448c7cd054fac3507cefeecebf40)) + +* chore(release): 3.6.5 [skip ci] + +## [3.6.5](https://github.com/taskforcesh/bullmq/compare/v3.6.4...v3.6.5) (2023-02-11) + +### Bug Fixes + +* infinite worker process spawned for invalid JS file ([a445ba8](https://github.com/taskforcesh/bullmq/commit/a445ba8b7a261b370dec7d88091ae5f5af8b2728)) ([`dfa431e`](https://github.com/taskforcesh/bullmq/commit/dfa431ebb22cebbf85247abcf8226946ad297ec5)) + +* chore(release): 3.6.4 [skip ci] + +## [3.6.4](https://github.com/taskforcesh/bullmq/compare/v3.6.3...v3.6.4) (2023-02-09) + +### Bug Fixes + +* add a maximum block time ([1a2618b](https://github.com/taskforcesh/bullmq/commit/1a2618bc5473288a62dddb85e3cb78d6cdb4f39f)) ([`00ec4e8`](https://github.com/taskforcesh/bullmq/commit/00ec4e8d2d741df1246fb4e90ff876377fad7d16)) + +* chore(release): 3.6.3 [skip ci] + +## [3.6.3](https://github.com/taskforcesh/bullmq/compare/v3.6.2...v3.6.3) (2023-02-07) + +### Bug Fixes + +* **master:** copy type declaration ([23ade6e](https://github.com/taskforcesh/bullmq/commit/23ade6e3e45df14bd3fbc2c3e7be47307b642872)) ([`bf8589a`](https://github.com/taskforcesh/bullmq/commit/bf8589ae1b95b705e921f597644becdd1752b04f)) + +* chore(release): 3.6.2 [skip ci] + +## [3.6.2](https://github.com/taskforcesh/bullmq/compare/v3.6.1...v3.6.2) (2023-02-03) + +### Bug Fixes + +* **redis:** increase minimum default retry time ([d521531](https://github.com/taskforcesh/bullmq/commit/d521531e22ba9eda8ad8d6e8eddf450fdc3f50f4)) ([`b08f95d`](https://github.com/taskforcesh/bullmq/commit/b08f95d9b87ec03b645af866ac869f771a42e1f1)) + +* chore(release): 3.6.1 [skip ci] + +## [3.6.1](https://github.com/taskforcesh/bullmq/compare/v3.6.0...v3.6.1) (2023-01-31) + +### Bug Fixes + +* **connection:** apply console.warn in noeviction message ([95f171c](https://github.com/taskforcesh/bullmq/commit/95f171cbc8cdd7d04865618b715dd21229f36a4a)) ([`75092f5`](https://github.com/taskforcesh/bullmq/commit/75092f50169154bfbbc704d8a1971b2ac0a03187)) + +* chore(release): 3.6.0 [skip ci] + +# [3.6.0](https://github.com/taskforcesh/bullmq/compare/v3.5.11...v3.6.0) (2023-01-31) + +### Features + +* **job:** allow clearing job's log ([#1600](https://github.com/taskforcesh/bullmq/issues/1600)) ([0ded2d7](https://github.com/taskforcesh/bullmq/commit/0ded2d7709322bf105e0decac44d801ece5615f2)) ([`ce19e6d`](https://github.com/taskforcesh/bullmq/commit/ce19e6db253e03d5817b555abaa773a7bdf06171)) + +* chore(deps): update actions/checkout digest to ac59398 (#1582) ([`acebda8`](https://github.com/taskforcesh/bullmq/commit/acebda86b1e40e0a04dd3784b5fc3b7f1a662641)) + +* chore(deps): update peaceiris/actions-gh-pages digest to bd8c6b0 (#1632) ([`84e057e`](https://github.com/taskforcesh/bullmq/commit/84e057e3a84518be62607b8d8f9a7866aa3cd306)) + +* chore(release): 3.5.11 [skip ci] + +## [3.5.11](https://github.com/taskforcesh/bullmq/compare/v3.5.10...v3.5.11) (2023-01-27) + +### Bug Fixes + +* **error:** remove global prototype toJSON ([#1642](https://github.com/taskforcesh/bullmq/issues/1642)) fixes [#1414](https://github.com/taskforcesh/bullmq/issues/1414) ([d4e7108](https://github.com/taskforcesh/bullmq/commit/d4e7108a37aeabdd3085a26c9daf09cea5976f3e)) ([`94b293e`](https://github.com/taskforcesh/bullmq/commit/94b293e6011bed3f8b6905b202f7a45d0d1d863b)) + +* chore(release): 3.5.10 [skip ci] + +## [3.5.10](https://github.com/taskforcesh/bullmq/compare/v3.5.9...v3.5.10) (2023-01-24) + +### Bug Fixes + +* **move-to-finished:** return correct delayUntil ([#1643](https://github.com/taskforcesh/bullmq/issues/1643)) ([c4bf9fa](https://github.com/taskforcesh/bullmq/commit/c4bf9fa6563eda1630d8eb2189b16e9324b01c7f)) ([`c66c03d`](https://github.com/taskforcesh/bullmq/commit/c66c03d377d6b5363231ec65117a8b045f136f86)) + +* chore(release): 3.5.9 [skip ci] + +## [3.5.9](https://github.com/taskforcesh/bullmq/compare/v3.5.8...v3.5.9) (2023-01-19) + +### Bug Fixes + +* **worker:** fix delayed jobs with concurrency fixes [#1627](https://github.com/taskforcesh/bullmq/issues/1627) ([99a8e6d](https://github.com/taskforcesh/bullmq/commit/99a8e6d3a339be51fb46f69c8afac4ecdebff6d3)) ([`3714760`](https://github.com/taskforcesh/bullmq/commit/3714760ee4be056826e66baaec62bb97d60a53e3)) + +* chore(release): 3.5.8 [skip ci] + +## [3.5.8](https://github.com/taskforcesh/bullmq/compare/v3.5.7...v3.5.8) (2023-01-18) + +### Bug Fixes + +* **move-to-active:** delete marker when it is moved to active ([#1634](https://github.com/taskforcesh/bullmq/issues/1634)) ([ad1fcea](https://github.com/taskforcesh/bullmq/commit/ad1fcea4500d4ceed51d5d5b0a03dbb5e1735a42)) ([`5c761ae`](https://github.com/taskforcesh/bullmq/commit/5c761ae994c48402b27a6b3530a882b0720e4025)) + +* chore(release): 3.5.7 [skip ci] + +## [3.5.7](https://github.com/taskforcesh/bullmq/compare/v3.5.6...v3.5.7) (2023-01-17) + +### Bug Fixes + +* **move-to-active:** validate next marker and return delayUntil ([#1630](https://github.com/taskforcesh/bullmq/issues/1630)) ([3cd3305](https://github.com/taskforcesh/bullmq/commit/3cd33052fc711a9ba560c9a431630be5cdd02193)) ([`f2c1775`](https://github.com/taskforcesh/bullmq/commit/f2c1775dc150e3f1fd972beed39dcdd2b12e8ea1)) + +* chore(deps): bump luxon from 3.1.1 to 3.2.1 (#1621) ([`b203d0f`](https://github.com/taskforcesh/bullmq/commit/b203d0f80ff020242ee94e61899f7510e7d18b4d)) + +* chore(release): 3.5.6 [skip ci] + +## [3.5.6](https://github.com/taskforcesh/bullmq/compare/v3.5.5...v3.5.6) (2023-01-13) + +### Bug Fixes + +* **worker:** add max concurrency from the beginning ([#1597](https://github.com/taskforcesh/bullmq/issues/1597)) fixes [#1589](https://github.com/taskforcesh/bullmq/issues/1589) ([6f49db3](https://github.com/taskforcesh/bullmq/commit/6f49db3fb15119d13f99cd83d49f2a7bdcb614cd)) ([`4de7f3c`](https://github.com/taskforcesh/bullmq/commit/4de7f3cf740ad1f96f07bdfcd50e372257df4514)) + +* chore(release): 3.5.5 [skip ci] + +## [3.5.5](https://github.com/taskforcesh/bullmq/compare/v3.5.4...v3.5.5) (2023-01-10) + +### Bug Fixes + +* circular references ([#1622](https://github.com/taskforcesh/bullmq/issues/1622)) ([f607ec7](https://github.com/taskforcesh/bullmq/commit/f607ec7530fb4430e8cab7ed325583bd9d171ccf)) ([`5a78f58`](https://github.com/taskforcesh/bullmq/commit/5a78f58ead461192069e78bf1ee34d84012e8077)) + +* chore(release): 3.5.4 [skip ci] + +## [3.5.4](https://github.com/taskforcesh/bullmq/compare/v3.5.3...v3.5.4) (2023-01-09) + +### Bug Fixes + +* [#1603](https://github.com/taskforcesh/bullmq/issues/1603) performance issues in `remove()` ([#1607](https://github.com/taskforcesh/bullmq/issues/1607)) ([2541215](https://github.com/taskforcesh/bullmq/commit/2541215bcf81dcd52eaefa02530c3812a5135fbf)) ([`9fdac55`](https://github.com/taskforcesh/bullmq/commit/9fdac5578795900b85c99b4ef8c2e71583802417)) + +* chore(release): 3.5.3 [skip ci] + +## [3.5.3](https://github.com/taskforcesh/bullmq/compare/v3.5.2...v3.5.3) (2023-01-07) + +### Bug Fixes + +* **delayed:** remove marker after being consumed ([#1620](https://github.com/taskforcesh/bullmq/issues/1620)) fixes [#1615](https://github.com/taskforcesh/bullmq/issues/1615) ([9fce0f0](https://github.com/taskforcesh/bullmq/commit/9fce0f05e5acc1918a276b03e8cb9c16083cb509)) ([`2061624`](https://github.com/taskforcesh/bullmq/commit/2061624f0baebd5e5018136934346b65750c0323)) + +* chore(deps): update peaceiris/actions-gh-pages digest to 64b46b4 (#1619) ([`4a6db4d`](https://github.com/taskforcesh/bullmq/commit/4a6db4db9bfcbe4a67b07b25b389f5bd1bee51ca)) + +* chore(release): 3.5.2 [skip ci] + +## [3.5.2](https://github.com/taskforcesh/bullmq/compare/v3.5.1...v3.5.2) (2023-01-04) + +### Performance Improvements + +* **get-dependencies:** replace slow object destructuring with single object ([#1612](https://github.com/taskforcesh/bullmq/issues/1612)) ([621748e](https://github.com/taskforcesh/bullmq/commit/621748ec7727b46ce57eb9d2b46ef981874cdf4c)) ([`5b34b8b`](https://github.com/taskforcesh/bullmq/commit/5b34b8ba09e14bc78aeed03824b4fbd419e0e18e)) + +* chore(release): 3.5.1 [skip ci] + +## [3.5.1](https://github.com/taskforcesh/bullmq/compare/v3.5.0...v3.5.1) (2022-12-23) + +### Bug Fixes + +* **connection:** throw exception if using keyPrefix in ioredis ([eb6a130](https://github.com/taskforcesh/bullmq/commit/eb6a1305541547725e1717eefe2b678bc445f4d0)) +* **connection:** use includes to check for upstash more reliably ([12efb5c](https://github.com/taskforcesh/bullmq/commit/12efb5c539cb6f031ea6f3a80e4128d2e556e627)) ([`1e8786a`](https://github.com/taskforcesh/bullmq/commit/1e8786a8dd2f08de6f84e08aeb252b304ebbca73)) + +* chore(release): 3.5.0 [skip ci] + +# [3.5.0](https://github.com/taskforcesh/bullmq/compare/v3.4.2...v3.5.0) (2022-12-20) + +### Bug Fixes + +* **job:** fetch parent before job moves to complete ([#1580](https://github.com/taskforcesh/bullmq/issues/1580)) ([6a6c0dc](https://github.com/taskforcesh/bullmq/commit/6a6c0dca30bb0a2417e0c62d4c80202c750322dd)) +* **sandbox:** throw error when no exported function ([#1588](https://github.com/taskforcesh/bullmq/issues/1588)) fixes [#1587](https://github.com/taskforcesh/bullmq/issues/1587) ([c031891](https://github.com/taskforcesh/bullmq/commit/c03189184c8eeeb324f005b86e93d114abbe2154)) + +### Features + +* **queue:** add getJobState method ([#1593](https://github.com/taskforcesh/bullmq/issues/1593)) ref [#1532](https://github.com/taskforcesh/bullmq/issues/1532) ([b741e84](https://github.com/taskforcesh/bullmq/commit/b741e8456f262b51aa7c68f571c76a3c54d02d37)) ([`ffb0851`](https://github.com/taskforcesh/bullmq/commit/ffb08512271be681204a803508cd4d5ece0bb71b)) + +* chore(deps): lock file maintenance (#1568) ([`a426e49`](https://github.com/taskforcesh/bullmq/commit/a426e499299f9782128106127285ddba2444ff58)) + +* chore(release): 3.4.2 [skip ci] + +## [3.4.2](https://github.com/taskforcesh/bullmq/compare/v3.4.1...v3.4.2) (2022-12-15) + +### Performance Improvements + +* **counts:** delete delayed marker when needed ([#1583](https://github.com/taskforcesh/bullmq/issues/1583)) ([cc26f1c](https://github.com/taskforcesh/bullmq/commit/cc26f1cd550de76c7588d3a98187b80ee78c40c4)) +* **get-children-values:** replace slow object destructuring with single object ([#1586](https://github.com/taskforcesh/bullmq/issues/1586)) ([857d403](https://github.com/taskforcesh/bullmq/commit/857d40377a6eb2c0101e6d16d9085ecd4b52b016)) ([`91bbde9`](https://github.com/taskforcesh/bullmq/commit/91bbde9472ea3b38e1b9ee94ef1ec56733eeb3fa)) + +* chore(release): 3.4.1 [skip ci] + +## [3.4.1](https://github.com/taskforcesh/bullmq/compare/v3.4.0...v3.4.1) (2022-12-10) + +### Bug Fixes + +* **exponential:** respect exponential backoff delay ([#1581](https://github.com/taskforcesh/bullmq/issues/1581)) ([145dd32](https://github.com/taskforcesh/bullmq/commit/145dd329bb9f8254b404f4c5fbf7a50359202d37)) +* **get-jobs:** filter marker ([#1551](https://github.com/taskforcesh/bullmq/issues/1551)) ([4add0ef](https://github.com/taskforcesh/bullmq/commit/4add0efa7857cc2f7b6d3c0c78a7f82cb7a46933)) ([`df604c4`](https://github.com/taskforcesh/bullmq/commit/df604c48bfeec2b621fd9d52d97b316f477e79a2)) + +* chore(release): 3.4.0 [skip ci] + +# [3.4.0](https://github.com/taskforcesh/bullmq/compare/v3.3.5...v3.4.0) (2022-12-09) + +### Features + +* **worker:** add ready event for blockingConnection ([#1577](https://github.com/taskforcesh/bullmq/issues/1577)) ([992cc9e](https://github.com/taskforcesh/bullmq/commit/992cc9e9b3046185d3b67f2cc956f30337f458e1)) ([`6d9dada`](https://github.com/taskforcesh/bullmq/commit/6d9dadaedf016267255e2412ff4ca40d44001630)) + +* chore(release): 3.3.5 [skip ci] + +## [3.3.5](https://github.com/taskforcesh/bullmq/compare/v3.3.4...v3.3.5) (2022-12-08) + +### Bug Fixes + +* **worker:** add token postfix ([#1575](https://github.com/taskforcesh/bullmq/issues/1575)) ([1d3e368](https://github.com/taskforcesh/bullmq/commit/1d3e368021041bb9861761c86fe3e04914b0c52f)) ([`865c9ca`](https://github.com/taskforcesh/bullmq/commit/865c9ca8ce99860a4a0c72b7a2ec4a5733395d10)) + +* chore(release): 3.3.4 [skip ci] + +## [3.3.4](https://github.com/taskforcesh/bullmq/compare/v3.3.3...v3.3.4) (2022-12-07) + +### Bug Fixes + +* **worker:** try catch setname call ([#1576](https://github.com/taskforcesh/bullmq/issues/1576)) fixes [#1574](https://github.com/taskforcesh/bullmq/issues/1574) ([0c42fd8](https://github.com/taskforcesh/bullmq/commit/0c42fd8c07dbac7ace81e97e45440af93fc622a5)) ([`bbe29ee`](https://github.com/taskforcesh/bullmq/commit/bbe29ee8546242a839b41ae0eccd5c9acc592e9a)) + +* chore(release): 3.3.3 [skip ci] + +## [3.3.3](https://github.com/taskforcesh/bullmq/compare/v3.3.2...v3.3.3) (2022-12-07) + +### Bug Fixes + +* do not allow move from active to wait if not owner of the job ([dc1a307](https://github.com/taskforcesh/bullmq/commit/dc1a3077d1521c5dc99824a7fc05d17da03906bc)) ([`0f119cb`](https://github.com/taskforcesh/bullmq/commit/0f119cb7eac550ad6a5a08f6561b65a72d06ae91)) + +* chore(release): 3.3.2 [skip ci] + +## [3.3.2](https://github.com/taskforcesh/bullmq/compare/v3.3.1...v3.3.2) (2022-12-05) + +### Bug Fixes + +* floor pexpire to integer ([1d5de42](https://github.com/taskforcesh/bullmq/commit/1d5de425a19ebf879a8f9a7e0543d87a4d358be1)) ([`b469dcc`](https://github.com/taskforcesh/bullmq/commit/b469dcc4bafee0bc21a6fc51772ce958947ce516)) + +* chore(release): 3.3.1 [skip ci] + +## [3.3.1](https://github.com/taskforcesh/bullmq/compare/v3.3.0...v3.3.1) (2022-12-05) + +### Bug Fixes + +* **get-workers:** set name when ready event in connection ([#1564](https://github.com/taskforcesh/bullmq/issues/1564)) ([de93c17](https://github.com/taskforcesh/bullmq/commit/de93c172901650e1666c48423a39076f2c7b9c7b)) +* **job:** console warn custom job ids when they represent integers ([#1569](https://github.com/taskforcesh/bullmq/issues/1569)) ([6e677d2](https://github.com/taskforcesh/bullmq/commit/6e677d2800957b368bef4247b8e4328c5758f262)) ([`1e0625e`](https://github.com/taskforcesh/bullmq/commit/1e0625eb72400891b126483e1201431bbb7fd161)) + +* chore(release): 3.3.0 [skip ci] + +# [3.3.0](https://github.com/taskforcesh/bullmq/compare/v3.2.5...v3.3.0) (2022-12-04) + +### Features + +* **queue-events:** support duplicated event ([#1549](https://github.com/taskforcesh/bullmq/issues/1549)) ([18bc4eb](https://github.com/taskforcesh/bullmq/commit/18bc4eb50432f8aa27f2395750a7617317b66ca1)) ([`aa753dd`](https://github.com/taskforcesh/bullmq/commit/aa753dd3680964bf0fe7ab650734c12525020ef2)) + +* chore(release): 3.2.5 [skip ci] + +## [3.2.5](https://github.com/taskforcesh/bullmq/compare/v3.2.4...v3.2.5) (2022-12-04) + +### Bug Fixes + +* **add-job:** throw error when jobId represents an integer ([#1556](https://github.com/taskforcesh/bullmq/issues/1556)) ([db617d7](https://github.com/taskforcesh/bullmq/commit/db617d79e8f55b5c9e0df4b6bfd4247612016da1)) ([`75ebd85`](https://github.com/taskforcesh/bullmq/commit/75ebd8558853969df094d8c37b12b66685108eb9)) + +* chore(release): 3.2.4 [skip ci] + +## [3.2.4](https://github.com/taskforcesh/bullmq/compare/v3.2.3...v3.2.4) (2022-11-29) + +### Bug Fixes + +* **add-job:** do not update job that already exist ([#1550](https://github.com/taskforcesh/bullmq/issues/1550)) ([26f6311](https://github.com/taskforcesh/bullmq/commit/26f6311cd0d2b936e404d0abebca9637f314a209)) ([`4387d0c`](https://github.com/taskforcesh/bullmq/commit/4387d0c959d563eaaba2719d3f9566e992ba0914)) + +* chore(release): 3.2.3 [skip ci] + +## [3.2.3](https://github.com/taskforcesh/bullmq/compare/v3.2.2...v3.2.3) (2022-11-29) + +### Bug Fixes + +* **rate-limit:** delete rateLimiterKey when 0 ([#1553](https://github.com/taskforcesh/bullmq/issues/1553)) ([0b88e5b](https://github.com/taskforcesh/bullmq/commit/0b88e5b94b4a0dc0d4000f7fd4b327f402248ad2)) ([`a6b7498`](https://github.com/taskforcesh/bullmq/commit/a6b74988e38ff74049df9b30215fb6ddab73e844)) + +* chore(deps): lock file maintenance (#1491) ([`e67c057`](https://github.com/taskforcesh/bullmq/commit/e67c0575f855202bad47eb6616c35c07513fa1a7)) + +* chore(release): 3.2.2 [skip ci] + +## [3.2.2](https://github.com/taskforcesh/bullmq/compare/v3.2.1...v3.2.2) (2022-11-15) + +### Bug Fixes + +* **rate-limit:** check job is active before moving to wait ([9502167](https://github.com/taskforcesh/bullmq/commit/9502167bb0d9008fc8811ff7980dc8126fbc5ac2)) ([`4226070`](https://github.com/taskforcesh/bullmq/commit/4226070d9905fb052a2ec00f17ee4210bf931fbd)) + +* chore(release): 3.2.1 [skip ci] + +## [3.2.1](https://github.com/taskforcesh/bullmq/compare/v3.2.0...v3.2.1) (2022-11-15) + +### Bug Fixes + +* **worker:** consider removed jobs in failed event ([#1500](https://github.com/taskforcesh/bullmq/issues/1500)) ([8704b9a](https://github.com/taskforcesh/bullmq/commit/8704b9a10575fd7df738296f7156057123592b86)) ([`0301a7a`](https://github.com/taskforcesh/bullmq/commit/0301a7ab2b110670804de0dae63a04c7a314ee5a)) + +* chore(release): 3.2.0 [skip ci] + +# [3.2.0](https://github.com/taskforcesh/bullmq/compare/v3.1.3...v3.2.0) (2022-11-09) + +### Features + +* **flow:** move parent to delayed when delay option is provided ([#1501](https://github.com/taskforcesh/bullmq/issues/1501)) ([2f3e5d5](https://github.com/taskforcesh/bullmq/commit/2f3e5d54f0797bf0d1adf14dbb2b51ad9f9183ca)) ([`f05e098`](https://github.com/taskforcesh/bullmq/commit/f05e098a6dad2038c720d77d71a66b387b53bcb1)) + +* chore(move-to-finished): remove debug statement (#1524) ([`65189dc`](https://github.com/taskforcesh/bullmq/commit/65189dc45b9f96d8b56cf44a5e6debaa4344a746)) + +* chore(release): 3.1.3 [skip ci] + +## [3.1.3](https://github.com/taskforcesh/bullmq/compare/v3.1.2...v3.1.3) (2022-11-04) + +### Bug Fixes + +* **delayed:** better handling of marker id ([816376e](https://github.com/taskforcesh/bullmq/commit/816376e7880ae0eafe85a1f9a5aef9fdfe3031a9)) +* **delayed:** notify workers a delayed job is closer in time fixes [#1505](https://github.com/taskforcesh/bullmq/issues/1505) ([6ced4d0](https://github.com/taskforcesh/bullmq/commit/6ced4d06c5c9c8342c9e4f7920a21826871eac1b)) +* **job:** better error message in moveToFailed ([4e9f5bb](https://github.com/taskforcesh/bullmq/commit/4e9f5bb90f87c66eca959ffc9b7a09e05908c2d9)) +* **moveToFinish:** always promote delayed jobs ([7610cc3](https://github.com/taskforcesh/bullmq/commit/7610cc37d4695a885043c251990e153d4ce4440f)) +* **moveToFinished:** revert move promoteDelayedJobs ([7d780db](https://github.com/taskforcesh/bullmq/commit/7d780dbc1d7728ab7b762a5578871b31f27ff80c)) ([`f87858c`](https://github.com/taskforcesh/bullmq/commit/f87858caa382b56e34cc8015ad1a2706f2bcda8e)) + +* chore(release): 3.1.2 [skip ci] + +## [3.1.2](https://github.com/taskforcesh/bullmq/compare/v3.1.1...v3.1.2) (2022-11-04) + +### Bug Fixes + +* **repeat:** allow easy migration from bullmq <3 to >=3 ([e17b886](https://github.com/taskforcesh/bullmq/commit/e17b886d3e2978e25f23f1a99b88562537a08576)) ([`be39c09`](https://github.com/taskforcesh/bullmq/commit/be39c090684ccf720bcc6adc3279d7bb1d0a5ed5)) + +* chore(release): 3.1.1 [skip ci] + +## [3.1.1](https://github.com/taskforcesh/bullmq/compare/v3.1.0...v3.1.1) (2022-11-03) + +### Bug Fixes + +* **change-delay:** remove delayed stream ([#1509](https://github.com/taskforcesh/bullmq/issues/1509)) ([6e4809e](https://github.com/taskforcesh/bullmq/commit/6e4809e5d8f7ef35bc0871d21bfcdcb0f1f316c6)) +* **worker:** restore dynamic concurrency change ([#1515](https://github.com/taskforcesh/bullmq/issues/1515)) ([fdac5c2](https://github.com/taskforcesh/bullmq/commit/fdac5c27607dfaaaad1c1256c47f2ae448efcd21)) ([`ad70396`](https://github.com/taskforcesh/bullmq/commit/ad7039625d3adb334f07bb015068d57982252615)) + +* chore(deps): update github/codeql-action digest to 18fe527 (#1499) ([`fca6640`](https://github.com/taskforcesh/bullmq/commit/fca66406f1890a268f1948b457eb4b9dbdc1f393)) + +* chore(release): 3.1.0 [skip ci] + +# [3.1.0](https://github.com/taskforcesh/bullmq/compare/v3.0.1...v3.1.0) (2022-11-02) + +### Features + +* **workers:** better error message for missing lock ([bf1d086](https://github.com/taskforcesh/bullmq/commit/bf1d0860c70bcc2b604d02ca47e5db64f962d71d)) ([`94c4862`](https://github.com/taskforcesh/bullmq/commit/94c4862fcb8de9676df20d3b002f8f13fddf658a)) + +* chore(release): 3.0.1 [skip ci] + +## [3.0.1](https://github.com/taskforcesh/bullmq/compare/v3.0.0...v3.0.1) (2022-11-02) + +### Bug Fixes + +* **move-to-delayed:** consider promoting delayed jobs ([#1493](https://github.com/taskforcesh/bullmq/issues/1493)) ([909da2b](https://github.com/taskforcesh/bullmq/commit/909da2bc2718a588379b3fdd9791bc8e51ad1dad)) +* **retry-job:** consider promoting delayed jobs ([#1508](https://github.com/taskforcesh/bullmq/issues/1508)) ([d0b3412](https://github.com/taskforcesh/bullmq/commit/d0b3412d222449c24ab36068a791d08ea19ed922)) ([`c3c565d`](https://github.com/taskforcesh/bullmq/commit/c3c565dad2d7267e3bb1aa2a4d540f0c826def1a)) + +* chore(deps): update actions/setup-node digest to 8c91899 (#1473) ([`89bad09`](https://github.com/taskforcesh/bullmq/commit/89bad097edf1692dba19eec938da82b6f2be7430)) + +* chore(release): 3.0.0 [skip ci] + +# [3.0.0](https://github.com/taskforcesh/bullmq/compare/v2.4.0...v3.0.0) (2022-10-25) + +### Bug Fixes + +* **backoff:** handle backoff strategy as function ([#1463](https://github.com/taskforcesh/bullmq/issues/1463)) ([3640269](https://github.com/taskforcesh/bullmq/commit/36402691a3c7fa500f07e2e11a28318099bdb909)) +* **repeat:** remove cron in favor of pattern option ([#1456](https://github.com/taskforcesh/bullmq/issues/1456)) ([3cc150e](https://github.com/taskforcesh/bullmq/commit/3cc150e32cb5971ad4ba6ff91246aaf75296c165)) + +### Features + +* add support for dynamic rate limiting ([2d51d2b](https://github.com/taskforcesh/bullmq/commit/2d51d2b33ef49059503e1bca7a582c71f6861ef4)) +* **rate-limit:** remove group key support and improve global rate limit ([81f780a](https://github.com/taskforcesh/bullmq/commit/81f780aeed81e670107d01d01265d407a30e2a62)) + +### BREAKING CHANGES + +* **rate-limit:** limit by group keys has been removed in favor +of a much simpler and efficent rate-limit implementation. +* **backoff:** object mapping is replaced by single function ([`a252282`](https://github.com/taskforcesh/bullmq/commit/a2522822210d200ff66576d3a71bf3cc7c1a7622)) + +* chore(release): 2.4.0 [skip ci] + +# [2.4.0](https://github.com/taskforcesh/bullmq/compare/v2.3.2...v2.4.0) (2022-10-24) + +### Features + +* **flows:** allow parent on root jobs in addBulk method ([#1488](https://github.com/taskforcesh/bullmq/issues/1488)) ref [#1480](https://github.com/taskforcesh/bullmq/issues/1480) ([92308e5](https://github.com/taskforcesh/bullmq/commit/92308e53acf14e0ce108d94ecd616633ac93e35d)) ([`65ce37a`](https://github.com/taskforcesh/bullmq/commit/65ce37ac10648e48e55a102eb0f59fce104fbcb9)) + +* chore(deps): update peaceiris/actions-gh-pages digest to de7ea6f (#1490) ([`6191040`](https://github.com/taskforcesh/bullmq/commit/61910409b9c9250cd371e805ead7f876127744a9)) + +* chore(deps): update github/codeql-action digest to cc7986c (#1482) ([`14ed954`](https://github.com/taskforcesh/bullmq/commit/14ed9545418b23a82921f98f94facd78b56f588c)) + +* chore(release): 2.3.2 [skip ci] + +## [2.3.2](https://github.com/taskforcesh/bullmq/compare/v2.3.1...v2.3.2) (2022-10-18) + +### Bug Fixes + +* **job:** send failed event when failParentOnFailure ([#1481](https://github.com/taskforcesh/bullmq/issues/1481)) fixes [#1469](https://github.com/taskforcesh/bullmq/issues/1469) ([b20eb6f](https://github.com/taskforcesh/bullmq/commit/b20eb6f65c7e2c4593d5f9f4d4b940f780bf26d2)) ([`583bde4`](https://github.com/taskforcesh/bullmq/commit/583bde47ff0fa9366db968eca35e30b2fe89f4ad)) + +* chore(release): 2.3.1 [skip ci] + +## [2.3.1](https://github.com/taskforcesh/bullmq/compare/v2.3.0...v2.3.1) (2022-10-13) + +### Bug Fixes + +* **redis:** replace throw exception by console.error ([fafa2f8](https://github.com/taskforcesh/bullmq/commit/fafa2f89e796796f950e6c4abbdda4d3d71ad1b0)) ([`0fb2964`](https://github.com/taskforcesh/bullmq/commit/0fb2964151166f2aece0270c54c8cb4f4e2eb898)) + +* chore(release): 2.3.0 [skip ci] + +# [2.3.0](https://github.com/taskforcesh/bullmq/compare/v2.2.1...v2.3.0) (2022-10-13) + +### Features + +* **redis-connection:** allow providing scripts for extension ([#1472](https://github.com/taskforcesh/bullmq/issues/1472)) ([f193cfb](https://github.com/taskforcesh/bullmq/commit/f193cfb1830e127f9fd47a969baad30011a0e3a4)) ([`005539f`](https://github.com/taskforcesh/bullmq/commit/005539f2c34eff7ee92aeba1b34801fc69a05018)) + +* chore(release): 2.2.1 [skip ci] + +## [2.2.1](https://github.com/taskforcesh/bullmq/compare/v2.2.0...v2.2.1) (2022-10-11) + +### Performance Improvements + +* **scripts:** pre-build scripts ([#1441](https://github.com/taskforcesh/bullmq/issues/1441)) ([7f72603](https://github.com/taskforcesh/bullmq/commit/7f72603d463f705d0617898cb221f832c49a4aa3)) ([`547a20f`](https://github.com/taskforcesh/bullmq/commit/547a20f652960472500940c71363fe65b111737e)) + +* chore(deps): lock file maintenance (#1457) ([`c2bdeef`](https://github.com/taskforcesh/bullmq/commit/c2bdeefab4a1cae920e38bed25dd47238e6163de)) + +* chore(release): 2.2.0 [skip ci] + +# [2.2.0](https://github.com/taskforcesh/bullmq/compare/v2.1.3...v2.2.0) (2022-10-10) + +### Bug Fixes + +* **connection:** validate array of strings in Cluster ([#1468](https://github.com/taskforcesh/bullmq/issues/1468)) fixes [#1467](https://github.com/taskforcesh/bullmq/issues/1467) ([8355182](https://github.com/taskforcesh/bullmq/commit/8355182a372b68ec62e9c3953bacbd69e0abfc74)) + +### Features + +* **flow-producer:** allow parent opts in root job when adding a flow ([#1110](https://github.com/taskforcesh/bullmq/issues/1110)) ref [#1097](https://github.com/taskforcesh/bullmq/issues/1097) ([3c3ac71](https://github.com/taskforcesh/bullmq/commit/3c3ac718ad84f6bd0cc1575013c948e767b46f38)) ([`68f5b6f`](https://github.com/taskforcesh/bullmq/commit/68f5b6fedb1012926bd121df8ee62ddd32285b08)) + +* chore(deps): update github/codeql-action digest to 8075783 (#1465) ([`b85c24d`](https://github.com/taskforcesh/bullmq/commit/b85c24d95750e912a1c1a1e1826e8abb6ff49de8)) + +* chore(deps): update github/codeql-action digest to e0e5ded (#1398) ([`6ec5dab`](https://github.com/taskforcesh/bullmq/commit/6ec5dab961b25cc1103010004880a198cf240cb3)) + +* chore(release): 2.1.3 [skip ci] + +## [2.1.3](https://github.com/taskforcesh/bullmq/compare/v2.1.2...v2.1.3) (2022-09-30) + +### Bug Fixes + +* **worker:** clear stalled jobs timer when closing worker ([1567a0d](https://github.com/taskforcesh/bullmq/commit/1567a0df0ca3c8d43a18990fe488888f4ff68040)) ([`ad3889c`](https://github.com/taskforcesh/bullmq/commit/ad3889c674da4eb8e772c47b7841d1c65fecb65e)) + +* chore(release): 2.1.2 [skip ci] + +## [2.1.2](https://github.com/taskforcesh/bullmq/compare/v2.1.1...v2.1.2) (2022-09-29) + +### Bug Fixes + +* **getters:** fix return type of getJobLogs ([d452927](https://github.com/taskforcesh/bullmq/commit/d4529278c59b2c94eee604c7d4455acc490679e9)) ([`18d91d1`](https://github.com/taskforcesh/bullmq/commit/18d91d1786955bae0921577dbd93a2bdbe6e4e68)) + +* chore(deps): lock file maintenance (#1445) ([`0cd64a6`](https://github.com/taskforcesh/bullmq/commit/0cd64a673679f7b532fb2adb85c0364713bc6908)) + +* chore(release): 2.1.1 [skip ci] + +## [2.1.1](https://github.com/taskforcesh/bullmq/compare/v2.1.0...v2.1.1) (2022-09-28) + +### Bug Fixes + +* **sandbox:** get open port using built-in module instead of get-port ([#1446](https://github.com/taskforcesh/bullmq/issues/1446)) ([6db6288](https://github.com/taskforcesh/bullmq/commit/6db628868a9d64c5a3e47d1c9201017e6d05c1ae)) ([`4eb5a9a`](https://github.com/taskforcesh/bullmq/commit/4eb5a9a5c9cf9bf19de60cbef2ff90fde5a11a03)) + +* chore(release): 2.1.0 [skip ci] + +# [2.1.0](https://github.com/taskforcesh/bullmq/compare/v2.0.2...v2.1.0) (2022-09-23) + +### Features + +* **job-options:** add failParentOnFailure option ([#1339](https://github.com/taskforcesh/bullmq/issues/1339)) ([65e5c36](https://github.com/taskforcesh/bullmq/commit/65e5c3678771f26555c9128bdb908dd62e3584f9)) ([`af1a066`](https://github.com/taskforcesh/bullmq/commit/af1a0664168a183250b56759cfb19b58be672b62)) + +* chore(release): 2.0.2 [skip ci] + +## [2.0.2](https://github.com/taskforcesh/bullmq/compare/v2.0.1...v2.0.2) (2022-09-22) + +### Bug Fixes + +* **job:** update delay value when moving to wait ([#1436](https://github.com/taskforcesh/bullmq/issues/1436)) ([9560915](https://github.com/taskforcesh/bullmq/commit/95609158c1800cf661f22ad7995541fb9474826a)) ([`2eeb081`](https://github.com/taskforcesh/bullmq/commit/2eeb0812c007fd67adc6f54be7fe94d47ea06219)) + +* chore(release): 2.0.1 [skip ci] + +## [2.0.1](https://github.com/taskforcesh/bullmq/compare/v2.0.0...v2.0.1) (2022-09-21) + +### Bug Fixes + +* **connection:** throw error when no noeviction policy ([3468390](https://github.com/taskforcesh/bullmq/commit/3468390dd6331291f4cf71a54c32028a06d1d99e)) + +### Performance Improvements + +* **events:** remove data and opts from added event ([e13d4b8](https://github.com/taskforcesh/bullmq/commit/e13d4b8e0c4f99203f4249ccc86e369d124ff483)) ([`0e26d88`](https://github.com/taskforcesh/bullmq/commit/0e26d88a6afee6becfa4f318a044f1177456b177)) + +* chore(release): 2.0.0 [skip ci] + +# [2.0.0](https://github.com/taskforcesh/bullmq/compare/v1.91.1...v2.0.0) (2022-09-21) + +### Bug Fixes + +* **compat:** remove Queue3 class ([#1421](https://github.com/taskforcesh/bullmq/issues/1421)) ([fc797f7](https://github.com/taskforcesh/bullmq/commit/fc797f7cd334c19a95cb1290ddb6611cd3417179)) +* **delayed:** promote delayed jobs instead of picking one by one ([1b938af](https://github.com/taskforcesh/bullmq/commit/1b938af75069d69772ddf2b03f95db7f53eada68)) +* **getters:** compensate for "mark" job id ([231b9aa](https://github.com/taskforcesh/bullmq/commit/231b9aa0f4781e4493d3ea272c33b27c0b7dc0ab)) +* **promote:** remove marker when promoting delayed job ([1aea0dc](https://github.com/taskforcesh/bullmq/commit/1aea0dcc5fb29086cef3d0c432c387d6f8261963)) +* **sandbox:** remove progress method ([b43267b](https://github.com/taskforcesh/bullmq/commit/b43267be50f9eade8233500d189d46940a01cc29)) +* **stalled-jobs:** handle job id 0 ([829e6e0](https://github.com/taskforcesh/bullmq/commit/829e6e0252e78bf2cbc55ab1d3bd153faa0cee4c)) +* **worker:** do not allow stalledInterval to be less than zero ([831ffc5](https://github.com/taskforcesh/bullmq/commit/831ffc520ccd3c6ea63af6b04ddddc9f7829c667)) +* **workers:** use connection closing to determine closing status ([fe1d173](https://github.com/taskforcesh/bullmq/commit/fe1d17321f1eb49bd872c52965392add22729941)) + +### Features + +* improve delayed jobs and remove QueueScheduler ([1f66e5a](https://github.com/taskforcesh/bullmq/commit/1f66e5a6c891d52e0671e58a685dbca511e45e7e)) +* move stalled jobs check and handling to Worker class from QueueScheduler ([13769cb](https://github.com/taskforcesh/bullmq/commit/13769cbe38ba22793cbc66e9706a6be28a7f1512)) + +### BREAKING CHANGES + +* **compat:** The compatibility class for Bullv3 is no longer available. +* The QueueScheduler class is removed since it is not necessary anymore. +Delayed jobs are now handled in a much simpler and +robust way, without the need of a separate process. +* failed and stalled events are now produced by the Worker class instead of by the QueueScheduler. ([`5f3c316`](https://github.com/taskforcesh/bullmq/commit/5f3c31609b60589ed9e78317bf212dd407fad55b)) + +* chore(release): 1.91.1 [skip ci] + +## [1.91.1](https://github.com/taskforcesh/bullmq/compare/v1.91.0...v1.91.1) (2022-09-18) + +### Bug Fixes + +* **drain:** consider empty active list ([#1412](https://github.com/taskforcesh/bullmq/issues/1412)) ([f919a50](https://github.com/taskforcesh/bullmq/commit/f919a50b2f4972dcb9ecd5848b0f7fd9a0e137ea)) ([`5f3338c`](https://github.com/taskforcesh/bullmq/commit/5f3338c1c125e08c3f2be86e51dc81ddce8daae5)) + +* chore(release): 1.91.0 [skip ci] + +# [1.91.0](https://github.com/taskforcesh/bullmq/compare/v1.90.2...v1.91.0) (2022-09-16) + +### Features + +* **sandbox:** support update method ([#1416](https://github.com/taskforcesh/bullmq/issues/1416)) ([606b75d](https://github.com/taskforcesh/bullmq/commit/606b75d53e12dfc109f01eda38736c07e829e9b7)) ([`ca33621`](https://github.com/taskforcesh/bullmq/commit/ca336213a0fdba07d9abbdae7fa42bc4c52fa8a1)) + +* chore(release): 1.90.2 [skip ci] + +## [1.90.2](https://github.com/taskforcesh/bullmq/compare/v1.90.1...v1.90.2) (2022-09-12) + +### Performance Improvements + +* **script-loader:** use cache to read script once ([#1410](https://github.com/taskforcesh/bullmq/issues/1410)) ([f956e93](https://github.com/taskforcesh/bullmq/commit/f956e937ae3488cdcd0e2eacbe3e096c8066ebd1)) ([`31c3297`](https://github.com/taskforcesh/bullmq/commit/31c3297592cf4fb550007e06cf8da8f99a4a2580)) + +* chore(release): 1.90.1 [skip ci] + +## [1.90.1](https://github.com/taskforcesh/bullmq/compare/v1.90.0...v1.90.1) (2022-09-02) + +### Performance Improvements + +* **add-job:** handle parent split on js ([#1397](https://github.com/taskforcesh/bullmq/issues/1397)) ([566f074](https://github.com/taskforcesh/bullmq/commit/566f0747110679e5b07e7642fef793744565fffe)) ([`632d9b6`](https://github.com/taskforcesh/bullmq/commit/632d9b6b94b1d0fc6082d519defc70c8329c7f3f)) + +* chore(release): 1.90.0 [skip ci] + +# [1.90.0](https://github.com/taskforcesh/bullmq/compare/v1.89.2...v1.90.0) (2022-08-30) + +### Features + +* **repeat:** allow passing a cron strategy ([#1248](https://github.com/taskforcesh/bullmq/issues/1248)) ref [#1245](https://github.com/taskforcesh/bullmq/issues/1245) ([7f0534f](https://github.com/taskforcesh/bullmq/commit/7f0534f72449ae14a7415fa17a2eb2a70136a8b0)) ([`0a18c0f`](https://github.com/taskforcesh/bullmq/commit/0a18c0f2f4368c5a716b7147556f545e340f7c12)) + +* chore(release): 1.89.2 [skip ci] + +## [1.89.2](https://github.com/taskforcesh/bullmq/compare/v1.89.1...v1.89.2) (2022-08-23) + +### Bug Fixes + +* **job:** update delay when changeDelay ([#1389](https://github.com/taskforcesh/bullmq/issues/1389)) fixes [#1160](https://github.com/taskforcesh/bullmq/issues/1160) ([d9b100d](https://github.com/taskforcesh/bullmq/commit/d9b100d04112c518ef2efbcf5586aa1226ccccab)) ([`9d2355a`](https://github.com/taskforcesh/bullmq/commit/9d2355a8f30838d4638f75568f9bb879ce4aac6d)) + +* chore(release): 1.89.1 [skip ci] + +## [1.89.1](https://github.com/taskforcesh/bullmq/compare/v1.89.0...v1.89.1) (2022-08-19) + +### Bug Fixes + +* revert "chore: allow esm imports through exports field" ([#1388](https://github.com/taskforcesh/bullmq/issues/1388)) ([8e51272](https://github.com/taskforcesh/bullmq/commit/8e512724b1e8145bceb0152b70a934decf6d6864)) ([`db9d1ad`](https://github.com/taskforcesh/bullmq/commit/db9d1ad98628c6023fa05f2f86c09a528405aee7)) + +* chore(release): 1.89.0 [skip ci] + +# [1.89.0](https://github.com/taskforcesh/bullmq/compare/v1.88.2...v1.89.0) (2022-08-18) + +### Features + +* **job:** expose delay in instance ([#1386](https://github.com/taskforcesh/bullmq/issues/1386)) ([d4d0d2e](https://github.com/taskforcesh/bullmq/commit/d4d0d2e737c7ceb5eb34a2c50d53bd1081e0ad4a)) ([`3ee4f5e`](https://github.com/taskforcesh/bullmq/commit/3ee4f5e0063077e40526b3d3315c2ca76e71657d)) + +* chore(release): 1.88.2 [skip ci] + +## [1.88.2](https://github.com/taskforcesh/bullmq/compare/v1.88.1...v1.88.2) (2022-08-18) + +### Bug Fixes + +* revert "feat(sandbox): experimental support ESM" ([#1384](https://github.com/taskforcesh/bullmq/issues/1384)) ([7d180eb](https://github.com/taskforcesh/bullmq/commit/7d180eb18daa41062dcbca72213bc9d9f40153db)) ([`77cfec5`](https://github.com/taskforcesh/bullmq/commit/77cfec58bc2096df7e945b9a811d1341a3f85d65)) + +* chore(release): 1.88.1 [skip ci] + +## [1.88.1](https://github.com/taskforcesh/bullmq/compare/v1.88.0...v1.88.1) (2022-08-17) + +### Bug Fixes + +* fix husky install ([edee918](https://github.com/taskforcesh/bullmq/commit/edee918e84ba895ed4ef63cabcc26b97d9c52d8d)) ([`d08566c`](https://github.com/taskforcesh/bullmq/commit/d08566c05dc6d036c689fd4164e15d20e1bfc74f)) + +* chore(release): 1.88.0 [skip ci] + +# [1.88.0](https://github.com/taskforcesh/bullmq/compare/v1.87.2...v1.88.0) (2022-08-17) + +### Bug Fixes + +* **clean:** consider priority when cleaning waiting jobs ([#1357](https://github.com/taskforcesh/bullmq/issues/1357)) ([ced5be1](https://github.com/taskforcesh/bullmq/commit/ced5be1c9531953baa9cf87d6bda3faa5863270d)) +* **parent-priority-check:** use tonumber on priority ([#1370](https://github.com/taskforcesh/bullmq/issues/1370)) ([e2043c6](https://github.com/taskforcesh/bullmq/commit/e2043c6f4b8ad5faea8c13edde76aea60612fec6)) + +### Features + +* **sandbox:** experimental support ESM ([ed0faff](https://github.com/taskforcesh/bullmq/commit/ed0faff3c67c436116eb625ffacb03e435caee3f)) ([`e30b0c9`](https://github.com/taskforcesh/bullmq/commit/e30b0c974d2fc2eedeb434afaf17a80cc2eab5bf)) + +* chore: disable husky in semantic release (#1377) ([`c3cbea5`](https://github.com/taskforcesh/bullmq/commit/c3cbea554a2b507a1551ed960c16568d14cc1642)) + +* chore: upgrade get-port without deprecating node12 (#1374) ([`c9bd025`](https://github.com/taskforcesh/bullmq/commit/c9bd02540e4577b39f819673b80d82a0bd854894)) + +* chore(compat): use some unused types properly (#1360) ([`1916516`](https://github.com/taskforcesh/bullmq/commit/19165160c6184757fb160aac38bb6f22c80188f8)) + +* chore(deps): add renovate.json ([`d8c3b0a`](https://github.com/taskforcesh/bullmq/commit/d8c3b0abe04248721c64c5dc3f4b26c47826db9f)) + +* chore(release): 1.87.2 [skip ci] + +## [1.87.2](https://github.com/taskforcesh/bullmq/compare/v1.87.1...v1.87.2) (2022-08-13) + +### Bug Fixes + +* **move-parent-to-wait:** emit waiting instead of active event ([#1356](https://github.com/taskforcesh/bullmq/issues/1356)) ([53578dd](https://github.com/taskforcesh/bullmq/commit/53578dd1cbe31b49361a833b1aca449486f3b925)) ([`19c0da8`](https://github.com/taskforcesh/bullmq/commit/19c0da8aa7cd2fe891364dc0cf1b6b26bd77adee)) + +* chore(release): 1.87.1 [skip ci] + +## [1.87.1](https://github.com/taskforcesh/bullmq/compare/v1.87.0...v1.87.1) (2022-08-09) + +### Bug Fixes + +* **job:** declare discarded as protected ([#1352](https://github.com/taskforcesh/bullmq/issues/1352)) ([870e01c](https://github.com/taskforcesh/bullmq/commit/870e01c4ab602c1e6e351cc369f3eac5f7afa083)) ([`380c56e`](https://github.com/taskforcesh/bullmq/commit/380c56e43bf59895ffc2ca0ed5a2ade79803a872)) + +* chore(release): 1.87.0 [skip ci] + +# [1.87.0](https://github.com/taskforcesh/bullmq/compare/v1.86.10...v1.87.0) (2022-08-05) + +### Features + +* **flow:** consider priority when parent is moved ([#1286](https://github.com/taskforcesh/bullmq/issues/1286)) ([d49760d](https://github.com/taskforcesh/bullmq/commit/d49760d09420c5fcc99ab06c8fe36168755fd397)) ([`d19a712`](https://github.com/taskforcesh/bullmq/commit/d19a71229b6ddaf8b44b9ad41152f052ff1aeadd)) + +* chore(scripts): generate raw scripts (#1209) ([`d07deb1`](https://github.com/taskforcesh/bullmq/commit/d07deb1cb16180fea6a31922a92c658dc5ebb868)) + +* chore(release): 1.86.10 [skip ci] + +## [1.86.10](https://github.com/taskforcesh/bullmq/compare/v1.86.9...v1.86.10) (2022-07-29) + +### Performance Improvements + +* **clean-jobs-in-set:** use ZRANGEBYSCORE when limit > 0 ([#1338](https://github.com/taskforcesh/bullmq/issues/1338)) ([f0d9985](https://github.com/taskforcesh/bullmq/commit/f0d998541f03778ca2a092080a19e6bf7b7d0af1)) ([`7251dd7`](https://github.com/taskforcesh/bullmq/commit/7251dd7259ab0d2e1c6343e3fc491ad41195816f)) + +* chore(release): 1.86.9 [skip ci] + +## [1.86.9](https://github.com/taskforcesh/bullmq/compare/v1.86.8...v1.86.9) (2022-07-27) + +### Bug Fixes + +* **get-flow:** consider groupKey ([#1336](https://github.com/taskforcesh/bullmq/issues/1336)) fixes [#1334](https://github.com/taskforcesh/bullmq/issues/1334) ([9f31272](https://github.com/taskforcesh/bullmq/commit/9f31272fa8b3f5b8ab26f15e21bd80537c5baef0)) ([`9c14458`](https://github.com/taskforcesh/bullmq/commit/9c14458ca130171c38af82d2d0bd51b8779f21cc)) + +* chore(release): 1.86.8 [skip ci] + +## [1.86.8](https://github.com/taskforcesh/bullmq/compare/v1.86.7...v1.86.8) (2022-07-26) + +### Bug Fixes + +* **promote:** consider empty queue when paused ([#1335](https://github.com/taskforcesh/bullmq/issues/1335)) ([9f742e8](https://github.com/taskforcesh/bullmq/commit/9f742e88d6338ce9ac7e0413bdac411ab6cf675c)) ([`19b34bd`](https://github.com/taskforcesh/bullmq/commit/19b34bd3005e0dc21a6a181ac6771142bf8454eb)) + +* chore(release): 1.86.7 [skip ci] + +## [1.86.7](https://github.com/taskforcesh/bullmq/compare/v1.86.6...v1.86.7) (2022-07-15) + +### Bug Fixes + +* **sandboxed-process:** consider UnrecoverableError ([#1320](https://github.com/taskforcesh/bullmq/issues/1320)) fixes [#1317](https://github.com/taskforcesh/bullmq/issues/1317) ([c1269cc](https://github.com/taskforcesh/bullmq/commit/c1269cc772c6cec84d82ff790b9a7c9cc4242dcb)) ([`306543a`](https://github.com/taskforcesh/bullmq/commit/306543a7e055c22faa6c34c1bb7190060691458f)) + +* chore(release): 1.86.6 [skip ci] + +## [1.86.6](https://github.com/taskforcesh/bullmq/compare/v1.86.5...v1.86.6) (2022-07-14) + +### Bug Fixes + +* **retry-jobs:** consider paused queue ([#1321](https://github.com/taskforcesh/bullmq/issues/1321)) ([3e9703d](https://github.com/taskforcesh/bullmq/commit/3e9703d17fc9dc601d5d77e999f3e9a137f20843)) ([`970bb87`](https://github.com/taskforcesh/bullmq/commit/970bb87eff67fce0fb4d37609182ad47d3e9309e)) + +* chore(deps-dev): bump moment from 2.29.2 to 2.29.4 (#1315) ([`e50bd88`](https://github.com/taskforcesh/bullmq/commit/e50bd884707777d60f039e223572cdfb8be11c0d)) + +* chore(release): 1.86.5 [skip ci] + +## [1.86.5](https://github.com/taskforcesh/bullmq/compare/v1.86.4...v1.86.5) (2022-07-09) + +### Bug Fixes + +* **retry-job:** consider paused queue ([#1314](https://github.com/taskforcesh/bullmq/issues/1314)) ([907ae1d](https://github.com/taskforcesh/bullmq/commit/907ae1d7e3504f31c625ec8a09e32785f08357ff)) ([`4c182df`](https://github.com/taskforcesh/bullmq/commit/4c182df13c2223b2d6615506844999c474adf1bd)) + +* chore(release): 1.86.4 [skip ci] + +## [1.86.4](https://github.com/taskforcesh/bullmq/compare/v1.86.3...v1.86.4) (2022-06-29) + +### Bug Fixes + +* **parent:** emit waiting event when no pending children ([#1296](https://github.com/taskforcesh/bullmq/issues/1296)) ([aa8fa3f](https://github.com/taskforcesh/bullmq/commit/aa8fa3f8cd5ab6d7d309d87ae45c558249b1c29c)) ([`868bb00`](https://github.com/taskforcesh/bullmq/commit/868bb00213626fdfa3c8594c8f8dfea9b47cd7b1)) + +* chore(release): 1.86.3 [skip ci] + +## [1.86.3](https://github.com/taskforcesh/bullmq/compare/v1.86.2...v1.86.3) (2022-06-26) + +### Bug Fixes + +* avoid calling delay() if queue is being closed ([#1295](https://github.com/taskforcesh/bullmq/issues/1295)) ([52a5045](https://github.com/taskforcesh/bullmq/commit/52a5045b903ed6e0e73dd747748787a6389f12f7)) ([`9dc1420`](https://github.com/taskforcesh/bullmq/commit/9dc1420f08e094df821085412e55a4e0dbac36ec)) + +* chore(release): 1.86.2 [skip ci] + +## [1.86.2](https://github.com/taskforcesh/bullmq/compare/v1.86.1...v1.86.2) (2022-06-16) + +### Bug Fixes + +* **queue:** get rid of repeat options from defaultJobOptions ([#1284](https://github.com/taskforcesh/bullmq/issues/1284)) ([cdd2a20](https://github.com/taskforcesh/bullmq/commit/cdd2a20c2c4ca47042ecd1da525ecb72941e4910)) ([`88095f6`](https://github.com/taskforcesh/bullmq/commit/88095f6261ca57cf13eba5582cb71d7b69ab2339)) + +* chore(release): 1.86.1 [skip ci] + +## [1.86.1](https://github.com/taskforcesh/bullmq/compare/v1.86.0...v1.86.1) (2022-06-12) + +### Bug Fixes + +* unpack empty metrics in batches ([96829db](https://github.com/taskforcesh/bullmq/commit/96829db839fad4489415f7dbb047abdca5566e78)) ([`1769ce1`](https://github.com/taskforcesh/bullmq/commit/1769ce15d907269c34be1b26671ab5e71fae43d1)) + +* chore(release): 1.86.0 [skip ci] + +# [1.86.0](https://github.com/taskforcesh/bullmq/compare/v1.85.4...v1.86.0) (2022-06-10) + +### Features + +* **repeat:** save repeatJobKey reference ([#1214](https://github.com/taskforcesh/bullmq/issues/1214)) ([4d5a8e3](https://github.com/taskforcesh/bullmq/commit/4d5a8e33b614cf099369c18298e5b2963b434b1b)) ([`363f6c0`](https://github.com/taskforcesh/bullmq/commit/363f6c05f0ca64db9fc7a028b57b9a301a9a8808)) + +* chore(release): 1.85.4 [skip ci] + +## [1.85.4](https://github.com/taskforcesh/bullmq/compare/v1.85.3...v1.85.4) (2022-06-08) + +### Bug Fixes + +* **error-prototype:** define custom name for toJSON method ([#1272](https://github.com/taskforcesh/bullmq/issues/1272)) ([66d80da](https://github.com/taskforcesh/bullmq/commit/66d80da4a6043755c7d296addb31857816ea4da3)) ([`9dbec4a`](https://github.com/taskforcesh/bullmq/commit/9dbec4a7329f650931abd198940b5a8c926fd6c1)) + +* chore(deps): bump semver-regex from 3.1.3 to 3.1.4 (#1269) ([`90592a2`](https://github.com/taskforcesh/bullmq/commit/90592a2f2b123fd2565ffc679a0efeaff83bde0d)) + +* chore(release): 1.85.3 [skip ci] + +## [1.85.3](https://github.com/taskforcesh/bullmq/compare/v1.85.2...v1.85.3) (2022-06-03) + +### Bug Fixes + +* **queue:** fix addBulk signature ResultType ([#1268](https://github.com/taskforcesh/bullmq/issues/1268)) ([f6770cc](https://github.com/taskforcesh/bullmq/commit/f6770cc383b68bf7b2fa655cd9eda713a06835aa)) ([`7ad899b`](https://github.com/taskforcesh/bullmq/commit/7ad899b55d35cc911afbbdd67b68bd06b001e39c)) + +* chore(release): 1.85.2 [skip ci] + +## [1.85.2](https://github.com/taskforcesh/bullmq/compare/v1.85.1...v1.85.2) (2022-06-01) + +### Bug Fixes + +* **job:** save finishedOn attribute on instance ([#1267](https://github.com/taskforcesh/bullmq/issues/1267)) ([4cf6a63](https://github.com/taskforcesh/bullmq/commit/4cf6a63d197e6095841bb87cef297a9533ac79c3)) ([`137cd8e`](https://github.com/taskforcesh/bullmq/commit/137cd8e755a255db1083424c47bad2c183a0b2cc)) + +* chore(release): 1.85.1 [skip ci] + +## [1.85.1](https://github.com/taskforcesh/bullmq/compare/v1.85.0...v1.85.1) (2022-05-31) + +### Performance Improvements + +* **remove-job:** send prefix key instead of jobKey ([#1252](https://github.com/taskforcesh/bullmq/issues/1252)) ([452856a](https://github.com/taskforcesh/bullmq/commit/452856a6c8c6e67ffda595c26c30988a15c1c1a4)) ([`d77bacc`](https://github.com/taskforcesh/bullmq/commit/d77baccd72ef904c415bf5d94b615d9d07770275)) + +* chore(release): 1.85.0 [skip ci] + +# [1.85.0](https://github.com/taskforcesh/bullmq/compare/v1.84.1...v1.85.0) (2022-05-30) + +### Features + +* **worker:** change the number of concurrent processes ([#1256](https://github.com/taskforcesh/bullmq/issues/1256)) ref [#22](https://github.com/taskforcesh/bullmq/issues/22) ([940dc8f](https://github.com/taskforcesh/bullmq/commit/940dc8f34d9a46dc9c8384661461bf0558e97600)) ([`9cfda3d`](https://github.com/taskforcesh/bullmq/commit/9cfda3d2dd640350d7b41f2449cd89318a237610)) + +* chore(release): 1.84.1 [skip ci] + +## [1.84.1](https://github.com/taskforcesh/bullmq/compare/v1.84.0...v1.84.1) (2022-05-27) + +### Bug Fixes + +* **waiting-children:** pass right timestamp value in moveToWaitingChildren ([#1260](https://github.com/taskforcesh/bullmq/issues/1260)) ([0f993f7](https://github.com/taskforcesh/bullmq/commit/0f993f71ed481b02a3f859a2109177352336cb9a)) ([`5d68aef`](https://github.com/taskforcesh/bullmq/commit/5d68aef2715d2ba474893bd343a34753f1e0eccb)) + +* chore(release): 1.84.0 [skip ci] + +# [1.84.0](https://github.com/taskforcesh/bullmq/compare/v1.83.2...v1.84.0) (2022-05-26) + +### Features + +* **flow-producer:** add event listener types ([#1257](https://github.com/taskforcesh/bullmq/issues/1257)) ([19ed099](https://github.com/taskforcesh/bullmq/commit/19ed099905cbb4f071370b2b6d67d9a378e3a8f8)) ([`0dac923`](https://github.com/taskforcesh/bullmq/commit/0dac92327328838730cdee8ca33918611e05d5d9)) + +* chore(release): 1.83.2 [skip ci] + +## [1.83.2](https://github.com/taskforcesh/bullmq/compare/v1.83.1...v1.83.2) (2022-05-24) + +### Bug Fixes + +* **close:** emit ioredis:close event instead of error ([#1251](https://github.com/taskforcesh/bullmq/issues/1251)) fixes [#1231](https://github.com/taskforcesh/bullmq/issues/1231) ([74c1c38](https://github.com/taskforcesh/bullmq/commit/74c1c38f7ff468da1adc63aff160e31940d682a9)) ([`eb38636`](https://github.com/taskforcesh/bullmq/commit/eb38636346b5b679f6967671fbb3ca84fda68fd8)) + +* chore(release): 1.83.1 [skip ci] + +## [1.83.1](https://github.com/taskforcesh/bullmq/compare/v1.83.0...v1.83.1) (2022-05-24) + +### Bug Fixes + +* **get-workers:** use blockingConnection client to set clientName ([#1255](https://github.com/taskforcesh/bullmq/issues/1255)) fixes [#1254](https://github.com/taskforcesh/bullmq/issues/1254) ([df796bd](https://github.com/taskforcesh/bullmq/commit/df796bd0c085aff72cef001395809b3f1a8045e4)) ([`41cc7f1`](https://github.com/taskforcesh/bullmq/commit/41cc7f1cade5410664873ffacb8569f37f6a409f)) + +* chore(release): 1.83.0 [skip ci] + +# [1.83.0](https://github.com/taskforcesh/bullmq/compare/v1.82.3...v1.83.0) (2022-05-20) + +### Features + +* **flow-producer:** easier to build extension ([#1250](https://github.com/taskforcesh/bullmq/issues/1250)) ([aaf637e](https://github.com/taskforcesh/bullmq/commit/aaf637e74b9610651fd9e4efc5ff349971b7bb26)) ([`44ee7cf`](https://github.com/taskforcesh/bullmq/commit/44ee7cff2e3570acda6ded8836fca91a11db3d15)) + +* chore(release): 1.82.3 [skip ci] + +## [1.82.3](https://github.com/taskforcesh/bullmq/compare/v1.82.2...v1.82.3) (2022-05-19) + +### Bug Fixes + +* **redis-connection:** save cluster opts and coerse redis version ([#1247](https://github.com/taskforcesh/bullmq/issues/1247)) ref [#1246](https://github.com/taskforcesh/bullmq/issues/1246) fixes [#1243](https://github.com/taskforcesh/bullmq/issues/1243) ([acb69b5](https://github.com/taskforcesh/bullmq/commit/acb69b57d7a6417b8ca9fe1576a94d16e41f12d7)) ([`cd8ffa4`](https://github.com/taskforcesh/bullmq/commit/cd8ffa4958bba16b389114c8c37c847f8a6cf17a)) + +* chore(release): 1.82.2 [skip ci] + +## [1.82.2](https://github.com/taskforcesh/bullmq/compare/v1.82.1...v1.82.2) (2022-05-17) + +### Bug Fixes + +* **job:** add job helper attribute for extension ([#1242](https://github.com/taskforcesh/bullmq/issues/1242)) ([4d7ae9e](https://github.com/taskforcesh/bullmq/commit/4d7ae9e3fda23650e802ebac6b33ff3350f116f6)) ([`5d77e15`](https://github.com/taskforcesh/bullmq/commit/5d77e15a498e9d25349beabe55b4fa8e025f9c6d)) + +* chore(release): 1.82.1 [skip ci] + +## [1.82.1](https://github.com/taskforcesh/bullmq/compare/v1.82.0...v1.82.1) (2022-05-16) + +### Bug Fixes + +* **remove-job:** pass right prev param in removed event ([#1237](https://github.com/taskforcesh/bullmq/issues/1237)) ([54df47e](https://github.com/taskforcesh/bullmq/commit/54df47edf715a0a2a42687bf827e0a62c03951a5)) ([`547a853`](https://github.com/taskforcesh/bullmq/commit/547a85368ffedab4f642dea70813945050e53cf4)) + +* chore(release): 1.82.0 [skip ci] + +# [1.82.0](https://github.com/taskforcesh/bullmq/compare/v1.81.4...v1.82.0) (2022-05-11) + +### Features + +* **remove-repeatable:** return boolean depending on job existence ([#1239](https://github.com/taskforcesh/bullmq/issues/1239)) ref [#1235](https://github.com/taskforcesh/bullmq/issues/1235) ([59b0da7](https://github.com/taskforcesh/bullmq/commit/59b0da7d0e979e4f9e8a5b042acbdce433790611)) ([`a0b179c`](https://github.com/taskforcesh/bullmq/commit/a0b179cba0349f166dc20f2bac28e1ea7f715592)) + +* chore(release): 1.81.4 [skip ci] + +## [1.81.4](https://github.com/taskforcesh/bullmq/compare/v1.81.3...v1.81.4) (2022-05-05) + +### Bug Fixes + +* **repeatable:** emit removed event when removing ([#1229](https://github.com/taskforcesh/bullmq/issues/1229)) ([7d2de8d](https://github.com/taskforcesh/bullmq/commit/7d2de8d075e5ee7774501429c5177b729c430c20)) ([`7edc886`](https://github.com/taskforcesh/bullmq/commit/7edc886fd2bc7ec18640e30e9eabaf1ea0ef6493)) + +* chore(release): 1.81.3 [skip ci] + +## [1.81.3](https://github.com/taskforcesh/bullmq/compare/v1.81.2...v1.81.3) (2022-05-04) + +### Bug Fixes + +* **remove-parent:** check removed record from waiting-children ([#1227](https://github.com/taskforcesh/bullmq/issues/1227)) ([e7b25d0](https://github.com/taskforcesh/bullmq/commit/e7b25d00acb860ee3df36c6214a7162b2cf79635)) ([`6cc16d6`](https://github.com/taskforcesh/bullmq/commit/6cc16d66fe5afd79ca9d2e3af9a135c8f47ca758)) + +* chore(release): 1.81.2 [skip ci] + +## [1.81.2](https://github.com/taskforcesh/bullmq/compare/v1.81.1...v1.81.2) (2022-05-03) + +### Bug Fixes + +* **stalled:** consider removeOnFail when failing jobs ([#1225](https://github.com/taskforcesh/bullmq/issues/1225)) fixes [#1171](https://github.com/taskforcesh/bullmq/issues/1171) ([38486cb](https://github.com/taskforcesh/bullmq/commit/38486cb4d7cbfc78bd64d71f19d8bfbc908f3fc7)) ([`c175c13`](https://github.com/taskforcesh/bullmq/commit/c175c13c25f32987d65f2195fca6bba1840ed5c7)) + +* chore(release): 1.81.1 [skip ci] + +## [1.81.1](https://github.com/taskforcesh/bullmq/compare/v1.81.0...v1.81.1) (2022-04-29) + +### Bug Fixes + +* **add-bulk:** use for loop and throw if error is present ([#1223](https://github.com/taskforcesh/bullmq/issues/1223)) fixes [#1222](https://github.com/taskforcesh/bullmq/issues/1222) ([564de4f](https://github.com/taskforcesh/bullmq/commit/564de4f907648f5a5667a845c5366f73cff1d384)) ([`22fae96`](https://github.com/taskforcesh/bullmq/commit/22fae96f2b03ace7b9d00390ef451c12ea14e3b4)) + +* chore(release): 1.81.0 [skip ci] + +# [1.81.0](https://github.com/taskforcesh/bullmq/compare/v1.80.6...v1.81.0) (2022-04-26) + +### Features + +* **move-to-delayed:** allow passing token ([#1213](https://github.com/taskforcesh/bullmq/issues/1213)) ([14f0e4a](https://github.com/taskforcesh/bullmq/commit/14f0e4a33d9ddfbaa1f86dbe7598e20a516a9d09)) ([`b01db23`](https://github.com/taskforcesh/bullmq/commit/b01db23ecf4947011d09870c5a2a7e76753cf3c4)) + +* chore(release): 1.80.6 [skip ci] + +## [1.80.6](https://github.com/taskforcesh/bullmq/compare/v1.80.5...v1.80.6) (2022-04-22) + +### Bug Fixes + +* **job:** delete token when moving to delayed ([#1208](https://github.com/taskforcesh/bullmq/issues/1208)) ([37acf41](https://github.com/taskforcesh/bullmq/commit/37acf4109d17090dfaef992267e48130d34f7187)) ([`86a1874`](https://github.com/taskforcesh/bullmq/commit/86a1874699bfe9bd9214344d6d4c451e148582b2)) + +* chore(release): 1.80.5 [skip ci] + +## [1.80.5](https://github.com/taskforcesh/bullmq/compare/v1.80.4...v1.80.5) (2022-04-21) + +### Bug Fixes + +* **queue-base:** emit close error when no closing ([#1203](https://github.com/taskforcesh/bullmq/issues/1203)) fixes [#1205](https://github.com/taskforcesh/bullmq/issues/1205) ([4d76582](https://github.com/taskforcesh/bullmq/commit/4d7658272af94b57a09486e1141b0e15a7bac3ba)) ([`6cd3a19`](https://github.com/taskforcesh/bullmq/commit/6cd3a19a68ee308ad2d8e1c79b34ffee55efdf30)) + +* chore(release): 1.80.4 [skip ci] + +## [1.80.4](https://github.com/taskforcesh/bullmq/compare/v1.80.3...v1.80.4) (2022-04-19) + +### Bug Fixes + +* **queue-scheduler:** apply isNotConnectionError ([#1189](https://github.com/taskforcesh/bullmq/issues/1189)) fixes [#1181](https://github.com/taskforcesh/bullmq/issues/1181) ([605d685](https://github.com/taskforcesh/bullmq/commit/605d68595d8fa1d9d47348a3fa9e0d7a4e28c706)) ([`d48fe2a`](https://github.com/taskforcesh/bullmq/commit/d48fe2a35b20cdbcd4d84861bc3fb607f64631b7)) + +* chore(release): 1.80.3 [skip ci] + +## [1.80.3](https://github.com/taskforcesh/bullmq/compare/v1.80.2...v1.80.3) (2022-04-15) + +### Bug Fixes + +* **cluster:** check correct Upstash host ([#1195](https://github.com/taskforcesh/bullmq/issues/1195)) fixes [#1193](https://github.com/taskforcesh/bullmq/issues/1193) ([69f2863](https://github.com/taskforcesh/bullmq/commit/69f28632408c741219c1ba49304d36f49cf5cb83)) ([`e347cdb`](https://github.com/taskforcesh/bullmq/commit/e347cdbabcb142060592e541f35aa94730196700)) + +* chore(release): 1.80.2 [skip ci] + +## [1.80.2](https://github.com/taskforcesh/bullmq/compare/v1.80.1...v1.80.2) (2022-04-15) + +### Bug Fixes + +* **job:** remove Error from Promise return in moveToWaitingChildren ([#1197](https://github.com/taskforcesh/bullmq/issues/1197)) ([180a8bf](https://github.com/taskforcesh/bullmq/commit/180a8bf8fb2fe62b9929765a6dfd084574c77936)) ([`d83842d`](https://github.com/taskforcesh/bullmq/commit/d83842dc346f9308f52cf7dfda5ad2fc050eef4e)) + +* chore(release): 1.80.1 [skip ci] + +## [1.80.1](https://github.com/taskforcesh/bullmq/compare/v1.80.0...v1.80.1) (2022-04-14) + +### Bug Fixes + +* **worker:** restore worker suffix to empty string ([#1194](https://github.com/taskforcesh/bullmq/issues/1194)) fixes [#1185](https://github.com/taskforcesh/bullmq/issues/1185) ([2666ea5](https://github.com/taskforcesh/bullmq/commit/2666ea5b8532645da24482cf01c5692da5f2ceda)) ([`3901472`](https://github.com/taskforcesh/bullmq/commit/3901472f30c090d8c26a34ccc1fb666193a91ca0)) + +* chore(release): 1.80.0 [skip ci] + +# [1.80.0](https://github.com/taskforcesh/bullmq/compare/v1.79.1...v1.80.0) (2022-04-12) + +### Features + +* **worker-listener:** use generics in events ([#1190](https://github.com/taskforcesh/bullmq/issues/1190)) ref [#1188](https://github.com/taskforcesh/bullmq/issues/1188) ([2821193](https://github.com/taskforcesh/bullmq/commit/28211937d9ed405330eede5ad7d4b0b817accf39)) ([`3ac9dd0`](https://github.com/taskforcesh/bullmq/commit/3ac9dd002f0dcedf83312708222c39041d23c2c0)) + +* chore(release): 1.79.1 [skip ci] + +## [1.79.1](https://github.com/taskforcesh/bullmq/compare/v1.79.0...v1.79.1) (2022-04-12) + +### Bug Fixes + +* **connection:** remove Queue reconnect overrides ([#1119](https://github.com/taskforcesh/bullmq/issues/1119)) ([83f1c79](https://github.com/taskforcesh/bullmq/commit/83f1c797b8a5272028c8d78d5ce464236e90909e)) ([`56ffa3c`](https://github.com/taskforcesh/bullmq/commit/56ffa3c918c1c642f0ffeae4952fc57cfbd13abd)) + +* chore(deps-dev): bump moment from 2.29.1 to 2.29.2 (#1184) ([`e27986e`](https://github.com/taskforcesh/bullmq/commit/e27986e06dc39c1ee983733deb8188fa78c797d1)) + +* chore(release): 1.79.0 [skip ci] + +# [1.79.0](https://github.com/taskforcesh/bullmq/compare/v1.78.2...v1.79.0) (2022-04-08) + +### Features + +* **queue-getters:** add getQueueEvents ([#1085](https://github.com/taskforcesh/bullmq/issues/1085)) ([f10a20a](https://github.com/taskforcesh/bullmq/commit/f10a20a90ab6dbf2d9f3f75ba99dacbdc797c329)) ([`cb46ff7`](https://github.com/taskforcesh/bullmq/commit/cb46ff78e1f22b7ae94e37adfcc91f2ed4041355)) + +* chore(redis-connection): coerce redis version to standard semver format ([`3828767`](https://github.com/taskforcesh/bullmq/commit/382876791c9d2a8cb8f3550f7c6eab97bb30d899)) + +* chore(release): 1.78.2 [skip ci] + +## [1.78.2](https://github.com/taskforcesh/bullmq/compare/v1.78.1...v1.78.2) (2022-03-31) + +### Bug Fixes + +* **clean:** consider processedOn and finishedOn attributes ([#1158](https://github.com/taskforcesh/bullmq/issues/1158)) ([8c3cb72](https://github.com/taskforcesh/bullmq/commit/8c3cb72235ec6123da389553f37433c2943e0f57)) ([`3c75df5`](https://github.com/taskforcesh/bullmq/commit/3c75df5c9bc8f7ba5db9638b0aaeefb00903105d)) + +* chore(release): 1.78.1 [skip ci] + +## [1.78.1](https://github.com/taskforcesh/bullmq/compare/v1.78.0...v1.78.1) (2022-03-24) + +### Bug Fixes + +* **queue:** close repeat connection when calling close ([#1154](https://github.com/taskforcesh/bullmq/issues/1154)) ([7d79616](https://github.com/taskforcesh/bullmq/commit/7d796167229048ec79660ca5d3ac8a7c85d125e7)) ([`04d0992`](https://github.com/taskforcesh/bullmq/commit/04d09929a8cd2a79d335e27f97543b62ca105191)) + +* chore(release): 1.78.0 [skip ci] + +# [1.78.0](https://github.com/taskforcesh/bullmq/compare/v1.77.3...v1.78.0) (2022-03-23) + +### Features + +* **cron-parser:** upgrades version to 4.2.1 ([#1149](https://github.com/taskforcesh/bullmq/issues/1149)) fixes [#1147](https://github.com/taskforcesh/bullmq/issues/1147) ([88a6c9c](https://github.com/taskforcesh/bullmq/commit/88a6c9c437172035173628842909f5170eb481f7)) ([`cc5c695`](https://github.com/taskforcesh/bullmq/commit/cc5c695b689df2e319c519aae316e4df2bf194b5)) + +* chore(release): 1.77.3 [skip ci] + +## [1.77.3](https://github.com/taskforcesh/bullmq/compare/v1.77.2...v1.77.3) (2022-03-22) + +### Bug Fixes + +* **async-send:** check proc.send type ([#1150](https://github.com/taskforcesh/bullmq/issues/1150)) ([4f44173](https://github.com/taskforcesh/bullmq/commit/4f44173f0a3cc54705ca9a7e1730aeff26ea1c5a)) ([`fd8742b`](https://github.com/taskforcesh/bullmq/commit/fd8742b1746443a670789b5dbf668e84425f5897)) + +* chore(release): 1.77.2 [skip ci] + +## [1.77.2](https://github.com/taskforcesh/bullmq/compare/v1.77.1...v1.77.2) (2022-03-20) + +### Bug Fixes + +* **trim-events:** consider maxLenEvents as 0 ([#1137](https://github.com/taskforcesh/bullmq/issues/1137)) ([bc58a49](https://github.com/taskforcesh/bullmq/commit/bc58a49fba1b6f4e3595a0371ecf8410000a9021)) + +### Performance Improvements + +* **clean:** speed up clean operation using deletion marker ([#1144](https://github.com/taskforcesh/bullmq/issues/1144)) ([5fb32ef](https://github.com/taskforcesh/bullmq/commit/5fb32ef2c60843d8d1f2cbc000aacf4df3388b7e)) ([`41ba863`](https://github.com/taskforcesh/bullmq/commit/41ba8631c76477a46af4a23cfad5365d78d77409)) + +* chore(release): 1.77.1 [skip ci] + +## [1.77.1](https://github.com/taskforcesh/bullmq/compare/v1.77.0...v1.77.1) (2022-03-17) + +### Bug Fixes + +* **flow:** remove processed children ([#1060](https://github.com/taskforcesh/bullmq/issues/1060)) fixes [#1056](https://github.com/taskforcesh/bullmq/issues/1056) ([6b54e86](https://github.com/taskforcesh/bullmq/commit/6b54e86c12f287a13da036f3ec7801b8656f0434)) ([`ed9dd80`](https://github.com/taskforcesh/bullmq/commit/ed9dd801533d714baacc64c469b8b94564a22b98)) + +* chore(release): 1.77.0 [skip ci] + +# [1.77.0](https://github.com/taskforcesh/bullmq/compare/v1.76.6...v1.77.0) (2022-03-16) + +### Features + +* allow QueueScheduler to be extended ([289beb8](https://github.com/taskforcesh/bullmq/commit/289beb87d2ef3e3dd7583159f7be2b5450f7de3c)) ([`a178ae4`](https://github.com/taskforcesh/bullmq/commit/a178ae4c2fa6d7ece5ebda79c11164be761968a5)) + +* chore(release): 1.76.6 [skip ci] + +## [1.76.6](https://github.com/taskforcesh/bullmq/compare/v1.76.5...v1.76.6) (2022-03-15) + +### Bug Fixes + +* **master:** do not export master file ([#1136](https://github.com/taskforcesh/bullmq/issues/1136)) fixes [#1125](https://github.com/taskforcesh/bullmq/issues/1125) ref [#1129](https://github.com/taskforcesh/bullmq/issues/1129) ([6aa2f96](https://github.com/taskforcesh/bullmq/commit/6aa2f9657b8787aa791ab5af7267a6d27d7d7869)) ([`96de7b4`](https://github.com/taskforcesh/bullmq/commit/96de7b43fd01a94b28991f9af24b4e6b2a6c0fc2)) + +* chore(release): 1.76.5 [skip ci] + +## [1.76.5](https://github.com/taskforcesh/bullmq/compare/v1.76.4...v1.76.5) (2022-03-15) + +### Bug Fixes + +* **queue:** sanitize job types in getJobs and getJobsCount ([#1113](https://github.com/taskforcesh/bullmq/issues/1113)) fixes [#1112](https://github.com/taskforcesh/bullmq/issues/1112) ([d452b29](https://github.com/taskforcesh/bullmq/commit/d452b29773cead153a73b8322adda3164fb610d8)) ([`0e74cfa`](https://github.com/taskforcesh/bullmq/commit/0e74cfac4efe7a2d62460ed8e646593f8b48a850)) + +* chore(release): 1.76.4 [skip ci] + +## [1.76.4](https://github.com/taskforcesh/bullmq/compare/v1.76.3...v1.76.4) (2022-03-13) + +### Performance Improvements + +* **move-to-finished:** avoid an extra roundtrip when using rate limit ([#1131](https://github.com/taskforcesh/bullmq/issues/1131)) ([1711547](https://github.com/taskforcesh/bullmq/commit/171154707bf5cbcb750ea9d2a9957128c1abc044)) ([`f713474`](https://github.com/taskforcesh/bullmq/commit/f71347415f4fd04c9a59a94a24ceac11ab320e01)) + +* chore(release): 1.76.3 [skip ci] + +## [1.76.3](https://github.com/taskforcesh/bullmq/compare/v1.76.2...v1.76.3) (2022-03-10) + +### Bug Fixes + +* **drained:** emit event only once when queue has drained the waiting list ([#1123](https://github.com/taskforcesh/bullmq/issues/1123)) fixes [#1121](https://github.com/taskforcesh/bullmq/issues/1121) ref [#1070](https://github.com/taskforcesh/bullmq/issues/1070) ([b89b4e8](https://github.com/taskforcesh/bullmq/commit/b89b4e8a83fe4c9349ac5a9c439fc07374ff1e63)) ([`e37f6f8`](https://github.com/taskforcesh/bullmq/commit/e37f6f8eed5589b69ed7a2ed27e951846fbfbb0c)) + +* chore(release): 1.76.2 [skip ci] + +## [1.76.2](https://github.com/taskforcesh/bullmq/compare/v1.76.1...v1.76.2) (2022-03-09) + +### Bug Fixes + +* **utils:** fix proc.send type ([#1122](https://github.com/taskforcesh/bullmq/issues/1122)) fixes [#1120](https://github.com/taskforcesh/bullmq/issues/1120) ([da23977](https://github.com/taskforcesh/bullmq/commit/da239774379825d9f0a51c118740bc0fefa568bd)) ([`88ac8e5`](https://github.com/taskforcesh/bullmq/commit/88ac8e551574bdd00cbd644aa1ea5bf75f03fa5e)) + +* chore(release): 1.76.1 [skip ci] + +## [1.76.1](https://github.com/taskforcesh/bullmq/compare/v1.76.0...v1.76.1) (2022-03-04) + +### Bug Fixes + +* **get-waiting-children-count:** consider waiting-children status only ([#1117](https://github.com/taskforcesh/bullmq/issues/1117)) ([1820df7](https://github.com/taskforcesh/bullmq/commit/1820df73c17ce119d2fdb0f526fc95f99845a5ec)) ([`485def0`](https://github.com/taskforcesh/bullmq/commit/485def0cbb9970e5b85775a549a132016ddef6f4)) + +* chore(release): 1.76.0 [skip ci] + +# [1.76.0](https://github.com/taskforcesh/bullmq/compare/v1.75.1...v1.76.0) (2022-03-02) + +### Features + +* **metrics:** add metrics support ([ab51326](https://github.com/taskforcesh/bullmq/commit/ab51326cf318b4b48e37a1a77f5609e405eecb45)) ([`359e4e5`](https://github.com/taskforcesh/bullmq/commit/359e4e54b633237ec01107e862c109e8712824dc)) + +* chore(release): 1.75.1 [skip ci] + +## [1.75.1](https://github.com/taskforcesh/bullmq/compare/v1.75.0...v1.75.1) (2022-02-26) + +### Bug Fixes + +* **rate-limiter:** move job to wait after retry when groupKey is missed ([#1103](https://github.com/taskforcesh/bullmq/issues/1103)) fixes [#1084](https://github.com/taskforcesh/bullmq/issues/1084) ([8aeab37](https://github.com/taskforcesh/bullmq/commit/8aeab37ac5a5c1c760be21bff2ba8752a485577c)) ([`779f6db`](https://github.com/taskforcesh/bullmq/commit/779f6db7b5b0da0324a187f4b735ec6762abc9ad)) + +* chore(release): 1.75.0 [skip ci] + +# [1.75.0](https://github.com/taskforcesh/bullmq/compare/v1.74.3...v1.75.0) (2022-02-24) + +### Bug Fixes + +* **cluster:** check for host presence in Upstash validation ([#1102](https://github.com/taskforcesh/bullmq/issues/1102)) fixes [#1101](https://github.com/taskforcesh/bullmq/issues/1101) ([54d4eac](https://github.com/taskforcesh/bullmq/commit/54d4eac52cfe13d4be99410932c0226c8d06d5d5)) + +### Features + +* **retry-jobs:** allow to retry completed jobs ([#1082](https://github.com/taskforcesh/bullmq/issues/1082)) ([e17b3f2](https://github.com/taskforcesh/bullmq/commit/e17b3f21606757a16630988a69c9607e8c843bd2)) ([`7f11b7d`](https://github.com/taskforcesh/bullmq/commit/7f11b7d741f32101e1dc895ca931647fe9d4c81f)) + +* chore(release): 1.74.3 [skip ci] + +## [1.74.3](https://github.com/taskforcesh/bullmq/compare/v1.74.2...v1.74.3) (2022-02-24) + +### Bug Fixes + +* **connection:** throw error when Upstash host is provided ([#1098](https://github.com/taskforcesh/bullmq/issues/1098)) fixes [#1087](https://github.com/taskforcesh/bullmq/issues/1087) ([5156d0a](https://github.com/taskforcesh/bullmq/commit/5156d0a4812d8c649a3b41bd98e3e0efb41d0491)) ([`df2fa62`](https://github.com/taskforcesh/bullmq/commit/df2fa62064c9bc1a21b9410e48042257e0a1c57b)) + +* chore(release): 1.74.2 [skip ci] + +## [1.74.2](https://github.com/taskforcesh/bullmq/compare/v1.74.1...v1.74.2) (2022-02-23) + +### Bug Fixes + +* **move-to-finished:** increment attemptsMade when moving job to active ([#1095](https://github.com/taskforcesh/bullmq/issues/1095)) fixes [#1094](https://github.com/taskforcesh/bullmq/issues/1094) ([321b0e1](https://github.com/taskforcesh/bullmq/commit/321b0e1d515d01c5b3f1ca9f404cd571e3f753b7)) ([`023cf74`](https://github.com/taskforcesh/bullmq/commit/023cf745e92c318b21251e4cedbedf3949c57abe)) + +* chore(release): 1.74.1 [skip ci] + +## [1.74.1](https://github.com/taskforcesh/bullmq/compare/v1.74.0...v1.74.1) (2022-02-20) + +### Bug Fixes + +* **flow:** respect defaultJobOptions from queue opts ([#1080](https://github.com/taskforcesh/bullmq/issues/1080)) fixes [#1034](https://github.com/taskforcesh/bullmq/issues/1034) ([0aca072](https://github.com/taskforcesh/bullmq/commit/0aca072f805302e660b6675fd4097ba893c91eb0)) ([`cf0710c`](https://github.com/taskforcesh/bullmq/commit/cf0710cfe322eb2147f439364b425763b4d5c592)) + +* chore(release): 1.74.0 [skip ci] + +# [1.74.0](https://github.com/taskforcesh/bullmq/compare/v1.73.0...v1.74.0) (2022-02-19) + +### Features + +* **retry-jobs:** pass timestamp as option ([#1054](https://github.com/taskforcesh/bullmq/issues/1054)) ([1522359](https://github.com/taskforcesh/bullmq/commit/15223590b235f749af9cb229fc784760d4b3add2)) ([`2bf08ef`](https://github.com/taskforcesh/bullmq/commit/2bf08efda8a938e86be2d09ae2dbbdd81b8181b7)) + +* chore(release): 1.73.0 [skip ci] + +# [1.73.0](https://github.com/taskforcesh/bullmq/compare/v1.72.0...v1.73.0) (2022-02-16) + +### Features + +* **job:** add prefix getter ([#1077](https://github.com/taskforcesh/bullmq/issues/1077)) ([db9ef10](https://github.com/taskforcesh/bullmq/commit/db9ef105a7a524d7502664d52bd9f9c7dfa9477f)) +* **queue-getters:** add getQueueSchedulers ([#1078](https://github.com/taskforcesh/bullmq/issues/1078)) ref [#1075](https://github.com/taskforcesh/bullmq/issues/1075) ([0b3b1c4](https://github.com/taskforcesh/bullmq/commit/0b3b1c4382de34bd68733d162c2fa2ba9417f79c)) ([`19845bd`](https://github.com/taskforcesh/bullmq/commit/19845bd017c3b508aeaa59a50abdf4df0e4dae0f)) + +* chore(release): 1.72.0 [skip ci] + +# [1.72.0](https://github.com/taskforcesh/bullmq/compare/v1.71.0...v1.72.0) (2022-02-15) + +### Features + +* **backoff:** validate UnrecoverableError presence ([#1074](https://github.com/taskforcesh/bullmq/issues/1074)) ([1defeac](https://github.com/taskforcesh/bullmq/commit/1defeac3f251a13aad57f3027d8eb8f857e40acb)) ([`efe9bb7`](https://github.com/taskforcesh/bullmq/commit/efe9bb7239d9554407e8d0cf40fe74cae83abea5)) + +* chore(release): 1.71.0 [skip ci] + +# [1.71.0](https://github.com/taskforcesh/bullmq/compare/v1.70.0...v1.71.0) (2022-02-14) + +### Features + +* **get-job-counts:** add default values ([#1068](https://github.com/taskforcesh/bullmq/issues/1068)) ([1c7f841](https://github.com/taskforcesh/bullmq/commit/1c7f841a52b3ea18fa7878f10986b362ccc6c4fe)) ([`cdb1de2`](https://github.com/taskforcesh/bullmq/commit/cdb1de2fca81df5b18fb3312d821bc1cdae19066)) + +* chore(release): 1.70.0 [skip ci] + +# [1.70.0](https://github.com/taskforcesh/bullmq/compare/v1.69.1...v1.70.0) (2022-02-11) + +### Features + +* **sandbox:** pass parent property ([#1065](https://github.com/taskforcesh/bullmq/issues/1065)) ([1fd33f6](https://github.com/taskforcesh/bullmq/commit/1fd33f6fd3a3af17753de8c4d48e14ef86c7409c)) ([`9cd593f`](https://github.com/taskforcesh/bullmq/commit/9cd593fefc5b08fa13de7d4119327db7202fdd4b)) + +* chore(release): 1.69.1 [skip ci] + +## [1.69.1](https://github.com/taskforcesh/bullmq/compare/v1.69.0...v1.69.1) (2022-02-10) + +### Bug Fixes + +* **move-to-finished:** validate lock first ([#1064](https://github.com/taskforcesh/bullmq/issues/1064)) ([9da1b29](https://github.com/taskforcesh/bullmq/commit/9da1b29486c6c6e2b097ec2f6107494a36525495)) ([`8216ce2`](https://github.com/taskforcesh/bullmq/commit/8216ce26c28e79307dc0c4eb3f79c0eb582260b8)) + +* chore(release): 1.69.0 [skip ci] + +# [1.69.0](https://github.com/taskforcesh/bullmq/compare/v1.68.4...v1.69.0) (2022-02-08) + +### Features + +* **job:** pass queueName into sandbox ([#1053](https://github.com/taskforcesh/bullmq/issues/1053)) fixes [#1050](https://github.com/taskforcesh/bullmq/issues/1050) ref [#1051](https://github.com/taskforcesh/bullmq/issues/1051) ([12bb19c](https://github.com/taskforcesh/bullmq/commit/12bb19c1586d8755b973a80be97f407630827d4f)) ([`64e01fb`](https://github.com/taskforcesh/bullmq/commit/64e01fbbe9e76c663477ef18e84a37dfd90e667a)) + +* chore(release): 1.68.4 [skip ci] + +## [1.68.4](https://github.com/taskforcesh/bullmq/compare/v1.68.3...v1.68.4) (2022-02-05) + +### Bug Fixes + +* **clean:** consider checking parent jobs when cleaning ([#1048](https://github.com/taskforcesh/bullmq/issues/1048)) ([0708a24](https://github.com/taskforcesh/bullmq/commit/0708a24c7f4cb6d1cda776ed983d3f20fc3261f1)) ([`8fc4b7e`](https://github.com/taskforcesh/bullmq/commit/8fc4b7e358d8188983eb7c4a714c57d80be2b9b4)) + +* chore(release): 1.68.3 [skip ci] + +## [1.68.3](https://github.com/taskforcesh/bullmq/compare/v1.68.2...v1.68.3) (2022-02-04) + +### Bug Fixes + +* **drain:** delete priority queueKey ([#1049](https://github.com/taskforcesh/bullmq/issues/1049)) ([2e6129a](https://github.com/taskforcesh/bullmq/commit/2e6129a4a08783eeafa2f0b69c10ac810f53d085)) ([`7685091`](https://github.com/taskforcesh/bullmq/commit/76850916ceb3c693b2c7e32549ccd9dde6d374d9)) + +* chore(release): 1.68.2 [skip ci] + +## [1.68.2](https://github.com/taskforcesh/bullmq/compare/v1.68.1...v1.68.2) (2022-02-03) + +### Performance Improvements + +* **remove-parent-dependency:** do not emit wait event in hard deletions ([#1045](https://github.com/taskforcesh/bullmq/issues/1045)) ([4069821](https://github.com/taskforcesh/bullmq/commit/40698218d13a880615f832a9926f0f057b1c33f9)) ([`dfc01bb`](https://github.com/taskforcesh/bullmq/commit/dfc01bb3bedbcc676ffa2f40381477c51b2fd956)) + +* chore(release): 1.68.1 [skip ci] + +## [1.68.1](https://github.com/taskforcesh/bullmq/compare/v1.68.0...v1.68.1) (2022-02-01) + +### Bug Fixes + +* **update:** throw error when missing job key ([#1042](https://github.com/taskforcesh/bullmq/issues/1042)) ([a00ae5c](https://github.com/taskforcesh/bullmq/commit/a00ae5c9b3f6d51cb0229adca29d13d932fc5601)) ([`2c2da6f`](https://github.com/taskforcesh/bullmq/commit/2c2da6ffa0744447f7cad9760cc0ff7f7d13c0e7)) + +* chore(release): 1.68.0 [skip ci] + +# [1.68.0](https://github.com/taskforcesh/bullmq/compare/v1.67.3...v1.68.0) (2022-01-29) + +### Features + +* **queue:** add retryJobs method for failed jobs ([#1024](https://github.com/taskforcesh/bullmq/issues/1024)) ([310a730](https://github.com/taskforcesh/bullmq/commit/310a730ed322501cc19cdd5cf5244bc8eee6fee2)) + +### Performance Improvements + +* **lua:** call del command with multiple keys ([#1035](https://github.com/taskforcesh/bullmq/issues/1035)) ([9cfaab8](https://github.com/taskforcesh/bullmq/commit/9cfaab8965d0c9f92460d31d6c3083839c36447f)) ([`317c095`](https://github.com/taskforcesh/bullmq/commit/317c0953043e3eb2242eb330d8e8e2071c131c37)) + +* chore(release): 1.67.3 [skip ci] + +## [1.67.3](https://github.com/taskforcesh/bullmq/compare/v1.67.2...v1.67.3) (2022-01-28) + +### Bug Fixes + +* **drain:** consider checking parent jobs when draining ([#992](https://github.com/taskforcesh/bullmq/issues/992)) ([81b7221](https://github.com/taskforcesh/bullmq/commit/81b72213a9ff31d6b297825391de77557598ebd1)) ([`e45a0f7`](https://github.com/taskforcesh/bullmq/commit/e45a0f7e18b28385022eaafd678fbe5edb82eb4f)) + +* chore(release): 1.67.2 [skip ci] + +## [1.67.2](https://github.com/taskforcesh/bullmq/compare/v1.67.1...v1.67.2) (2022-01-28) + +### Bug Fixes + +* **repeat:** consider immediately option with cron ([#1030](https://github.com/taskforcesh/bullmq/issues/1030)) fixes [#1020](https://github.com/taskforcesh/bullmq/issues/1020) ([b9e7488](https://github.com/taskforcesh/bullmq/commit/b9e748870385a88b2384df40f50df3144c11d7e0)) ([`e55ff35`](https://github.com/taskforcesh/bullmq/commit/e55ff358ca23bb4ea3d70bfb136feb27be3fe79c)) + +* chore(release): 1.67.1 [skip ci] + +## [1.67.1](https://github.com/taskforcesh/bullmq/compare/v1.67.0...v1.67.1) (2022-01-27) + +### Bug Fixes + +* **retry:** pass state in error message ([#1027](https://github.com/taskforcesh/bullmq/issues/1027)) ([c646a45](https://github.com/taskforcesh/bullmq/commit/c646a45377fdfaff340185d1f7bedceb80c214c2)) + +### Performance Improvements + +* **retry:** delete props in retryJob lua script ([#1016](https://github.com/taskforcesh/bullmq/issues/1016)) ([547cedd](https://github.com/taskforcesh/bullmq/commit/547cedd5ecd30c9a73d37e4053b9e518cb3fbe53)) ([`a440be9`](https://github.com/taskforcesh/bullmq/commit/a440be95518ebf037a5879decad282249e651180)) + +* chore(release): 1.67.0 [skip ci] + +# [1.67.0](https://github.com/taskforcesh/bullmq/compare/v1.66.1...v1.67.0) (2022-01-26) + +### Features + +* add support for removeOn based on time ([6c4ac75](https://github.com/taskforcesh/bullmq/commit/6c4ac75bb3ac239cc83ef6144d69c04b2bba1311)) ([`8c5fcea`](https://github.com/taskforcesh/bullmq/commit/8c5fcea765682e7d3d3e189a89217ed5d7838da8)) + +* chore(release): 1.66.1 [skip ci] + +## [1.66.1](https://github.com/taskforcesh/bullmq/compare/v1.66.0...v1.66.1) (2022-01-25) + +### Bug Fixes + +* **job:** increase attemptsMade when moving job to active ([#1009](https://github.com/taskforcesh/bullmq/issues/1009)) fixes [#1002](https://github.com/taskforcesh/bullmq/issues/1002) ([0974ae0](https://github.com/taskforcesh/bullmq/commit/0974ae0ff6db73c223be4b18fb2aab53b6a23c88)) ([`30a9bc6`](https://github.com/taskforcesh/bullmq/commit/30a9bc6c3b719c469396c80f14e8249d7e7ce85b)) + +* chore(deps): bump node-fetch from 2.6.1 to 2.6.7 (#1014) ([`07735a0`](https://github.com/taskforcesh/bullmq/commit/07735a01b090c435e3e9ed27a3c41957632545ba)) + +* chore(release): 1.66.0 [skip ci] + +# [1.66.0](https://github.com/taskforcesh/bullmq/compare/v1.65.1...v1.66.0) (2022-01-23) + +### Features + +* **queue-events:** add retries-exhausted event ([#1010](https://github.com/taskforcesh/bullmq/issues/1010)) ([e476f35](https://github.com/taskforcesh/bullmq/commit/e476f35f5c3f9b1baf2bbc3d46712b8ba597f73c)) ([`9945a03`](https://github.com/taskforcesh/bullmq/commit/9945a03b0b3673c1cf981573b2b8669f0e4026c5)) + +* chore(release): 1.65.1 [skip ci] + +## [1.65.1](https://github.com/taskforcesh/bullmq/compare/v1.65.0...v1.65.1) (2022-01-21) + +### Bug Fixes + +* dont loop through empty modules paths ([#1013](https://github.com/taskforcesh/bullmq/issues/1013)) fixes [#1012](https://github.com/taskforcesh/bullmq/issues/1012) ([86e84df](https://github.com/taskforcesh/bullmq/commit/86e84df933c2662380b00a11b5f4000f2618d218)) ([`3677295`](https://github.com/taskforcesh/bullmq/commit/36772957fcf865e8fd7dba92d594f8800c4b1e6f)) + +* chore(release): 1.65.0 [skip ci] + +# [1.65.0](https://github.com/taskforcesh/bullmq/compare/v1.64.4...v1.65.0) (2022-01-21) + +### Features + +* **queue:** add JobType and JobState unions for better typing ([#1011](https://github.com/taskforcesh/bullmq/issues/1011)) ([3b9b79d](https://github.com/taskforcesh/bullmq/commit/3b9b79dbdd754ab66c3948e7e16380f2d5513262)) ([`7f0245d`](https://github.com/taskforcesh/bullmq/commit/7f0245dce512e30e33559df219af3c227a6228e4)) + +* chore(deps): bump trim-off-newlines from 1.0.1 to 1.0.3 (#1008) ([`2dfb7ae`](https://github.com/taskforcesh/bullmq/commit/2dfb7aef39c0f7699a030298a377658bb9acda6b)) + +* chore(release): 1.64.4 [skip ci] + +## [1.64.4](https://github.com/taskforcesh/bullmq/compare/v1.64.3...v1.64.4) (2022-01-19) + +### Bug Fixes + +* **queue:** use 0 as initial value for getJobCountByTypes reducer ([#1005](https://github.com/taskforcesh/bullmq/issues/1005)) ([f0e23ef](https://github.com/taskforcesh/bullmq/commit/f0e23ef01b97d36c775db0bf8c9dd2f63f6cb194)) ([`43ea8c5`](https://github.com/taskforcesh/bullmq/commit/43ea8c5a6a1cff364c00e3a0a1bc9dae92ab469f)) + +* chore(release): 1.64.3 [skip ci] + +## [1.64.3](https://github.com/taskforcesh/bullmq/compare/v1.64.2...v1.64.3) (2022-01-17) + +### Bug Fixes + +* **worker:** blockTime must be integer on older Redis ([6fedc0a](https://github.com/taskforcesh/bullmq/commit/6fedc0a03bdb217ef0dbae60d49fccb0f2a5dbdb)) ([`70001de`](https://github.com/taskforcesh/bullmq/commit/70001de2c4c039bf9448a5cc25037f517fd25915)) + +* chore(release): 1.64.2 [skip ci] + +## [1.64.2](https://github.com/taskforcesh/bullmq/compare/v1.64.1...v1.64.2) (2022-01-14) + +### Bug Fixes + +* **remove-job:** consider removing parent dependency key in lua scripts ([#990](https://github.com/taskforcesh/bullmq/issues/990)) ([661abf0](https://github.com/taskforcesh/bullmq/commit/661abf0921e663c9ea2fa7d59c12da35950637dc)) ([`1791390`](https://github.com/taskforcesh/bullmq/commit/17913908c816cfa480a34a80bb13eb16db455168)) + +* chore(release): 1.64.1 [skip ci] + +## [1.64.1](https://github.com/taskforcesh/bullmq/compare/v1.64.0...v1.64.1) (2022-01-14) + +### Bug Fixes + +* **sandbox:** exit uncaughtException instead of throwing error ([013d6a5](https://github.com/taskforcesh/bullmq/commit/013d6a5ee0c70266ae740abfa596ca9e506de71b)) ([`aea20b4`](https://github.com/taskforcesh/bullmq/commit/aea20b48af275a2ab3fb9b3f3234af8ca4ce76bc)) + +* chore: update docker-compose config (#986) ([`21c5a51`](https://github.com/taskforcesh/bullmq/commit/21c5a51680527fea0845f87151bca34054ce29af)) + +* chore(release): 1.64.0 [skip ci] + +# [1.64.0](https://github.com/taskforcesh/bullmq/compare/v1.63.3...v1.64.0) (2022-01-07) + +### Features + +* **sanboxed-process:** support .cjs files ([#984](https://github.com/taskforcesh/bullmq/issues/984)) ([531e4de](https://github.com/taskforcesh/bullmq/commit/531e4de1525f2cf322e0b97f5537ed43276ff72b)) ([`b918676`](https://github.com/taskforcesh/bullmq/commit/b91867653564a97a5ced04f36dac1a4e1c96e21b)) + +* chore(release): 1.63.3 [skip ci] + +## [1.63.3](https://github.com/taskforcesh/bullmq/compare/v1.63.2...v1.63.3) (2022-01-06) + +### Bug Fixes + +* **job:** throw error when delay and repeat are provided together ([#983](https://github.com/taskforcesh/bullmq/issues/983)) ([07b0082](https://github.com/taskforcesh/bullmq/commit/07b008273ead9360fc43564fa9ff1a7503616ceb)) ([`282a402`](https://github.com/taskforcesh/bullmq/commit/282a4029bc9985056508f83deb5040b830dc3c82)) + +* chore(scripts): add generics in methods (#981) ([`8807b5e`](https://github.com/taskforcesh/bullmq/commit/8807b5eef1114dd866060b1f9571675fc3e1a36d)) + +* chore(release): 1.63.2 [skip ci] + +## [1.63.2](https://github.com/taskforcesh/bullmq/compare/v1.63.1...v1.63.2) (2022-01-04) + +### Bug Fixes + +* **queue:** add missing error event typing ([#979](https://github.com/taskforcesh/bullmq/issues/979)) ([afdaac6](https://github.com/taskforcesh/bullmq/commit/afdaac6b072c7af5973222cc7fb69f3f138f3b0b)) ([`1f3b1cb`](https://github.com/taskforcesh/bullmq/commit/1f3b1cb0fe1857a6cc4581611f8aeda371d04f2e)) + +* chore(release): 1.63.1 [skip ci] + +## [1.63.1](https://github.com/taskforcesh/bullmq/compare/v1.63.0...v1.63.1) (2022-01-04) + +### Bug Fixes + +* **update-progress:** throw error if job key is missing ([#978](https://github.com/taskforcesh/bullmq/issues/978)) ref [#977](https://github.com/taskforcesh/bullmq/issues/977) ([b03aaf1](https://github.com/taskforcesh/bullmq/commit/b03aaf10ca694745d143def2129f952b9bac18a6)) ([`1763af8`](https://github.com/taskforcesh/bullmq/commit/1763af8eb35fe5b48cbe1a6a1a066524edb59232)) + +* chore(release): 1.63.0 [skip ci] + +# [1.63.0](https://github.com/taskforcesh/bullmq/compare/v1.62.0...v1.63.0) (2021-12-31) + +### Features + +* **job:** use generic types for static methods ([#975](https://github.com/taskforcesh/bullmq/issues/975)) ([f78f4d0](https://github.com/taskforcesh/bullmq/commit/f78f4d0f75adb5c73558b3e8cf511db22f972791)) ([`4cfa4f9`](https://github.com/taskforcesh/bullmq/commit/4cfa4f9c0d97a29b89ab342a5f41de5e4e3ecbd2)) + +* chore(release): 1.62.0 [skip ci] + +# [1.62.0](https://github.com/taskforcesh/bullmq/compare/v1.61.0...v1.62.0) (2021-12-31) + +### Bug Fixes + +* add deprecated tag in progress and Queue3 class ([#973](https://github.com/taskforcesh/bullmq/issues/973)) ([6abdf5b](https://github.com/taskforcesh/bullmq/commit/6abdf5b66717cc8bc8ddb048029f7d9b92509942)) + +### Features + +* **queue:** add better event typing ([#971](https://github.com/taskforcesh/bullmq/issues/971)) ([596fd7b](https://github.com/taskforcesh/bullmq/commit/596fd7b260f2e95607f0eb4ff9553fb35137ec54)) ([`abe3f59`](https://github.com/taskforcesh/bullmq/commit/abe3f594b412c924ae9eb42e450bd2a356df7654)) + +* chore(release): 1.61.0 [skip ci] + +# [1.61.0](https://github.com/taskforcesh/bullmq/compare/v1.60.0...v1.61.0) (2021-12-29) + +### Features + +* **queue:** reuse generic typing for jobs ([5c10818](https://github.com/taskforcesh/bullmq/commit/5c10818d90724cccdf510f0358c01233aeac77e4)) +* **worker:** reuse generic typing for jobs ([9adcdb7](https://github.com/taskforcesh/bullmq/commit/9adcdb798b4ee55835123a9f3d04c1397b176dc1)) ([`06176e3`](https://github.com/taskforcesh/bullmq/commit/06176e32579611f06569a9e05a26832c02a0e6f4)) + +* chore(release): 1.60.0 [skip ci] + +# [1.60.0](https://github.com/taskforcesh/bullmq/compare/v1.59.4...v1.60.0) (2021-12-29) + +### Features + +* **queue-scheduler:** add better event typing ([#963](https://github.com/taskforcesh/bullmq/issues/963)) ([b23c006](https://github.com/taskforcesh/bullmq/commit/b23c006e2bfce8a0709f0eb8e8739261b68c2f48)) ([`0caa042`](https://github.com/taskforcesh/bullmq/commit/0caa042725325a5b682d9ce53a5346a1131486a2)) + +* chore(release): 1.59.4 [skip ci] + +## [1.59.4](https://github.com/taskforcesh/bullmq/compare/v1.59.3...v1.59.4) (2021-12-21) + +### Bug Fixes + +* downgrade typescript to 3.9.10 fixes [#917](https://github.com/taskforcesh/bullmq/issues/917) ([#960](https://github.com/taskforcesh/bullmq/issues/960)) ([4e51fe0](https://github.com/taskforcesh/bullmq/commit/4e51fe00751092ee8f521039a3f2b41d881b71ae)) ([`fbecbef`](https://github.com/taskforcesh/bullmq/commit/fbecbef96a2f8b7d037d8ffaca7c0f710be9b518)) + +* chore(release): 1.59.3 [skip ci] + +## [1.59.3](https://github.com/taskforcesh/bullmq/compare/v1.59.2...v1.59.3) (2021-12-21) + +### Bug Fixes + +* **worker:** fix undefined moveToActive ([87e8cab](https://github.com/taskforcesh/bullmq/commit/87e8cab16dad6f8bd9e9ec369ef7e79f471180be)) ([`28ccfa9`](https://github.com/taskforcesh/bullmq/commit/28ccfa91f9fac99abd6f2d448d7f2e8d10b78806)) + +* chore(release): 1.59.2 [skip ci] + +## [1.59.2](https://github.com/taskforcesh/bullmq/compare/v1.59.1...v1.59.2) (2021-12-17) + +### Bug Fixes + +* **package:** add jsnext:main prop ([#953](https://github.com/taskforcesh/bullmq/issues/953)) ([1a92bf7](https://github.com/taskforcesh/bullmq/commit/1a92bf7d41860f758841c5a833c1192d9a84a25f)) ([`7a950f5`](https://github.com/taskforcesh/bullmq/commit/7a950f5b336702f79058952c14bb2bf573818158)) + +* chore(release): 1.59.1 [skip ci] + +## [1.59.1](https://github.com/taskforcesh/bullmq/compare/v1.59.0...v1.59.1) (2021-12-17) + +### Bug Fixes + +* copy lua files to correct location ([2be1120](https://github.com/taskforcesh/bullmq/commit/2be1120974692ee57ec00e30d6dbbef670d88a1e)) ([`192f093`](https://github.com/taskforcesh/bullmq/commit/192f093af11f0faf6ae946c4a464059d6e48c015)) + +* chore(release): 1.59.0 [skip ci] + +# [1.59.0](https://github.com/taskforcesh/bullmq/compare/v1.58.0...v1.59.0) (2021-12-17) + +### Bug Fixes + +* correct dist path ([067d4c2](https://github.com/taskforcesh/bullmq/commit/067d4c2009b877f8bf6e6145507a41a53e5f7af3)) + +### Features + +* also export bullmq as an ESM ([e97e5b5](https://github.com/taskforcesh/bullmq/commit/e97e5b52b079adf2ed79f7cb61699e40a91e34e8)) ([`0d3a222`](https://github.com/taskforcesh/bullmq/commit/0d3a222859b8b66dbe0aad8c8475b31c4fac93d2)) + +* chore(release): 1.58.0 [skip ci] + +# [1.58.0](https://github.com/taskforcesh/bullmq/compare/v1.57.4...v1.58.0) (2021-12-15) + +### Features + +* **worker:** add better event typing ([#940](https://github.com/taskforcesh/bullmq/issues/940)) ([a326d4f](https://github.com/taskforcesh/bullmq/commit/a326d4f27e96ffa462a908ac14356d29839ff073)) ([`e2ffaaf`](https://github.com/taskforcesh/bullmq/commit/e2ffaafc54df02e9a9d7d0cd7e110407753c1ba9)) + +* chore(release): 1.57.4 [skip ci] + +## [1.57.4](https://github.com/taskforcesh/bullmq/compare/v1.57.3...v1.57.4) (2021-12-14) + +### Bug Fixes + +* **move-to-active:** add try catch in moveToActive call ([#933](https://github.com/taskforcesh/bullmq/issues/933)) ([bab45b0](https://github.com/taskforcesh/bullmq/commit/bab45b05d08c625557e2df65921e12f48081d39c)) +* **redis-connection:** consider cluster redisOptions config ([#934](https://github.com/taskforcesh/bullmq/issues/934)) ([5130f63](https://github.com/taskforcesh/bullmq/commit/5130f63ad969efa9649ab8f9abf36a72e8f553f4)) ([`9d2d62c`](https://github.com/taskforcesh/bullmq/commit/9d2d62c2c33b981ac5071d7122cd50da1d272d5c)) + +* chore: delete extra test directory (#931) ([`9ccc200`](https://github.com/taskforcesh/bullmq/commit/9ccc200bf26a60523cda85871cf1743fc288cb66)) + +* chore(release): 1.57.3 [skip ci] + +## [1.57.3](https://github.com/taskforcesh/bullmq/compare/v1.57.2...v1.57.3) (2021-12-14) + +### Bug Fixes + +* remove debug console.error ([#932](https://github.com/taskforcesh/bullmq/issues/932)) ([271aac3](https://github.com/taskforcesh/bullmq/commit/271aac3417bc7f76ac02435b456552677b2847db)) ([`cf57730`](https://github.com/taskforcesh/bullmq/commit/cf57730ae41fb9d6185a78ec47f4ae95aa8dcd88)) + +* chore(release): 1.57.2 [skip ci] + +## [1.57.2](https://github.com/taskforcesh/bullmq/compare/v1.57.1...v1.57.2) (2021-12-11) + +### Bug Fixes + +* **connection:** check instance options to console log deprecation message ([#927](https://github.com/taskforcesh/bullmq/issues/927)) ([fc1e2b9](https://github.com/taskforcesh/bullmq/commit/fc1e2b9f3f20db53f9dc7ecdfa4644f02acc9f83)) + +### Performance Improvements + +* **add-job:** save parent data as json ([#859](https://github.com/taskforcesh/bullmq/issues/859)) ([556d4ee](https://github.com/taskforcesh/bullmq/commit/556d4ee427090f60270945a7fd438e2595bb43e9)) ([`d9fd74f`](https://github.com/taskforcesh/bullmq/commit/d9fd74f8eae499ce2aeb02c7a0e5fcae5e4795bd)) + +* chore(release): 1.57.1 [skip ci] + +## [1.57.1](https://github.com/taskforcesh/bullmq/compare/v1.57.0...v1.57.1) (2021-12-11) + +### Bug Fixes + +* **worker:** better handling of block timeout ([be4c933](https://github.com/taskforcesh/bullmq/commit/be4c933ae0a7a790d24a081b2ed4e7e1c0216e47)) ([`8aa6e36`](https://github.com/taskforcesh/bullmq/commit/8aa6e36a806f51903620d397f821ef55763c6ff4)) + +* chore(release): 1.57.0 [skip ci] + +# [1.57.0](https://github.com/taskforcesh/bullmq/compare/v1.56.0...v1.57.0) (2021-12-08) + +### Features + +* **queue-events:** add better event typing ([#919](https://github.com/taskforcesh/bullmq/issues/919)) ([e980080](https://github.com/taskforcesh/bullmq/commit/e980080767bc56ae09a5c5cf33728a85a023bb42)) ([`7ea381b`](https://github.com/taskforcesh/bullmq/commit/7ea381b2936b93d86752e5f4b773fa04b3d8a7cd)) + +* chore(release): 1.56.0 [skip ci] + +# [1.56.0](https://github.com/taskforcesh/bullmq/compare/v1.55.1...v1.56.0) (2021-12-06) + +### Bug Fixes + +* emit drain event if no jobs left when completing ([9ad78a9](https://github.com/taskforcesh/bullmq/commit/9ad78a91c0a4a74cf84bd77d351d98195104f0b6)) +* **worker:** use client for setting worker name ([af65c2c](https://github.com/taskforcesh/bullmq/commit/af65c2cd0d3fb232c617b018d4991f3276db11ea)) + +### Features + +* **worker:** make moveToActive protected ([d2897ee](https://github.com/taskforcesh/bullmq/commit/d2897ee7bbf4aee5251ac4fb28705f2bebbe7bfe)) ([`bf37a32`](https://github.com/taskforcesh/bullmq/commit/bf37a324273dd1a2f606ff2dcb08c6166cc86ae9)) + +* chore(release): 1.55.1 [skip ci] + +## [1.55.1](https://github.com/taskforcesh/bullmq/compare/v1.55.0...v1.55.1) (2021-12-03) + +### Bug Fixes + +* **worker:** always try to move to active after waiting for job ([#914](https://github.com/taskforcesh/bullmq/issues/914)) ([97b7084](https://github.com/taskforcesh/bullmq/commit/97b708451bf4ce14a461a50f8a24d14b0e40dd4b)) ([`5327a96`](https://github.com/taskforcesh/bullmq/commit/5327a9618932ffe5ffc632c13c73b8c26302074c)) + +* chore(release): 1.55.0 [skip ci] + +# [1.55.0](https://github.com/taskforcesh/bullmq/compare/v1.54.6...v1.55.0) (2021-12-02) + +### Features + +* **script-loader:** lua script loader with include support ([#897](https://github.com/taskforcesh/bullmq/issues/897)) ([64b6ccf](https://github.com/taskforcesh/bullmq/commit/64b6ccf2a373b40d7ea763b3d35cf34f36ba11da)) ([`ae90c44`](https://github.com/taskforcesh/bullmq/commit/ae90c44e2ef79661440abbb9aae29345ca4e40ad)) + +* chore(release): 1.54.6 [skip ci] + +## [1.54.6](https://github.com/taskforcesh/bullmq/compare/v1.54.5...v1.54.6) (2021-11-30) + +### Bug Fixes + +* **stalled:** save finidhedOn when job stalled more than allowable limit ([#900](https://github.com/taskforcesh/bullmq/issues/900)) ([eb89edf](https://github.com/taskforcesh/bullmq/commit/eb89edf2f4eb85dedb1485de32e79331940a654f)) ([`0c0be5e`](https://github.com/taskforcesh/bullmq/commit/0c0be5e2c4b1192c45dcea16f3f0fdd725aa40fc)) + +* chore(release): 1.54.5 [skip ci] + +## [1.54.5](https://github.com/taskforcesh/bullmq/compare/v1.54.4...v1.54.5) (2021-11-26) + +### Bug Fixes + +* **tsconfig:** only include node types ([#895](https://github.com/taskforcesh/bullmq/issues/895)) ([5f4fdca](https://github.com/taskforcesh/bullmq/commit/5f4fdca5f416f2cd9d83eb0fba84e56c24320b63)) ([`f178fa9`](https://github.com/taskforcesh/bullmq/commit/f178fa984a7d53c8f92ea123ad476d92d153ab0f)) + +* chore(release): 1.54.4 [skip ci] + +## [1.54.4](https://github.com/taskforcesh/bullmq/compare/v1.54.3...v1.54.4) (2021-11-24) + +### Bug Fixes + +* **child-processor:** add deprecation warning for progress method ([#890](https://github.com/taskforcesh/bullmq/issues/890)) ([f80b19a](https://github.com/taskforcesh/bullmq/commit/f80b19a5aa85413b8906aa0fac1bfd09bec990cb)) ([`9469c36`](https://github.com/taskforcesh/bullmq/commit/9469c36cdbeb67491534f580f05f704d7c325d4b)) + +* chore(release): 1.54.3 [skip ci] + +## [1.54.3](https://github.com/taskforcesh/bullmq/compare/v1.54.2...v1.54.3) (2021-11-22) + +### Bug Fixes + +* **clean:** use range values in lua script ([#885](https://github.com/taskforcesh/bullmq/issues/885)) ([02ef63a](https://github.com/taskforcesh/bullmq/commit/02ef63a8163e627a270a1c1bd74989a67c3f15f7)) ([`22eabe5`](https://github.com/taskforcesh/bullmq/commit/22eabe5e7d515a501f427b4dca05b2b398f60412)) + +* chore(release): 1.54.2 [skip ci] + +## [1.54.2](https://github.com/taskforcesh/bullmq/compare/v1.54.1...v1.54.2) (2021-11-20) + +### Bug Fixes + +* **job:** use this when use new operators ([#884](https://github.com/taskforcesh/bullmq/issues/884)) ([7b84283](https://github.com/taskforcesh/bullmq/commit/7b842839e1d30967ebf15b901033e3b31e929df8)) ([`03f6eb3`](https://github.com/taskforcesh/bullmq/commit/03f6eb3d536dc4dd00c0d75338eb72678f397a69)) + +* chore(release): 1.54.1 [skip ci] + +## [1.54.1](https://github.com/taskforcesh/bullmq/compare/v1.54.0...v1.54.1) (2021-11-19) + +### Bug Fixes + +* **job:** change private attributes to protected for extensions ([#882](https://github.com/taskforcesh/bullmq/issues/882)) ([ffcc3f0](https://github.com/taskforcesh/bullmq/commit/ffcc3f083c23e6de3587c38fb7aacb2e19085351)) ([`5024c18`](https://github.com/taskforcesh/bullmq/commit/5024c186b4bafaa6c416799c782331934fa19eb1)) + +* chore(release): 1.54.0 [skip ci] + +# [1.54.0](https://github.com/taskforcesh/bullmq/compare/v1.53.0...v1.54.0) (2021-11-17) + +### Features + +* **load-includes:** export includes to be reused in extensions ([#877](https://github.com/taskforcesh/bullmq/issues/877)) ([b56c4a9](https://github.com/taskforcesh/bullmq/commit/b56c4a9cf2ecebb44481618026589162be61680a)) ([`d6519f1`](https://github.com/taskforcesh/bullmq/commit/d6519f1a185decdd544667115657e00239c9d6ee)) + +* chore(release): 1.53.0 [skip ci] + +# [1.53.0](https://github.com/taskforcesh/bullmq/compare/v1.52.2...v1.53.0) (2021-11-16) + +### Features + +* **queue-events:** add cleaned event ([#865](https://github.com/taskforcesh/bullmq/issues/865)) ([b3aebad](https://github.com/taskforcesh/bullmq/commit/b3aebad8a62311e135d53be2e7c5e47740547465)) ([`14e4f31`](https://github.com/taskforcesh/bullmq/commit/14e4f318e3c4ca2eb3fd065d79f1813c6ed7f8eb)) + +* chore(release): 1.52.2 [skip ci] + +## [1.52.2](https://github.com/taskforcesh/bullmq/compare/v1.52.1...v1.52.2) (2021-11-14) + +### Bug Fixes + +* **worker:** change private attributes to protected for pro extension ([#874](https://github.com/taskforcesh/bullmq/issues/874)) ([1c73881](https://github.com/taskforcesh/bullmq/commit/1c738819b49f206688ed7b3b9d103077045e1b05)) ([`e73580b`](https://github.com/taskforcesh/bullmq/commit/e73580ba747b304924643ba9c710449e9b254716)) + +* chore(release): 1.52.1 [skip ci] + +## [1.52.1](https://github.com/taskforcesh/bullmq/compare/v1.52.0...v1.52.1) (2021-11-12) + +### Performance Improvements + +* **clean:** speed up clean method when called with limit param ([#864](https://github.com/taskforcesh/bullmq/issues/864)) ([09b5cb4](https://github.com/taskforcesh/bullmq/commit/09b5cb45a79c4bc53a52d540918c22477a066e16)) ([`d59475c`](https://github.com/taskforcesh/bullmq/commit/d59475ce4d3ad1181dde613e47e7318812f23110)) + +* chore(deps): apply rimraf to delete extra published files (#873) ([`e84620c`](https://github.com/taskforcesh/bullmq/commit/e84620c785f388ed14742c86d78dd78fb05218de)) + +* chore(release): 1.52.0 [skip ci] + +# [1.52.0](https://github.com/taskforcesh/bullmq/compare/v1.51.3...v1.52.0) (2021-11-11) + +### Features + +* **queue:** add waiting event type declaration ([#872](https://github.com/taskforcesh/bullmq/issues/872)) ([f29925d](https://github.com/taskforcesh/bullmq/commit/f29925da3b12f573582ea188ec386e86023cefc9)) ([`2048a9b`](https://github.com/taskforcesh/bullmq/commit/2048a9b47f69166805858fdc3a18c940deb42049)) + +* chore(deps): upgrade @semantic-release/github (#867) to 8.0.2 ([`9621383`](https://github.com/taskforcesh/bullmq/commit/96213838121f4a52d71ce07928f2c5f9cb46fa9c)) + +* chore(release): 1.51.3 [skip ci] + +## [1.51.3](https://github.com/taskforcesh/bullmq/compare/v1.51.2...v1.51.3) (2021-11-04) + +### Bug Fixes + +* **move-to-failed:** delete closing check that prevents script execution ([#858](https://github.com/taskforcesh/bullmq/issues/858)) fixes [#834](https://github.com/taskforcesh/bullmq/issues/834) ([d50814f](https://github.com/taskforcesh/bullmq/commit/d50814f864448c10fec8e93651a2095fa4ef3f4e)) ([`be186d9`](https://github.com/taskforcesh/bullmq/commit/be186d9e6f3c3bf1d4afb0e1423935190681de34)) + +* chore(release): 1.51.2 [skip ci] + +## [1.51.2](https://github.com/taskforcesh/bullmq/compare/v1.51.1...v1.51.2) (2021-11-03) + +### Bug Fixes + +* **flow:** remove repeat option from FlowJob opts ([#853](https://github.com/taskforcesh/bullmq/issues/853)) fixes [#851](https://github.com/taskforcesh/bullmq/issues/851) ([c9ee2f1](https://github.com/taskforcesh/bullmq/commit/c9ee2f100a23aa24034598b7d452c69720d7aabd)) ([`8c8a5df`](https://github.com/taskforcesh/bullmq/commit/8c8a5df4121560a7325bbbadb8ec77b59fad3505)) + +* chore(deps): add npm-run-all into dev-dependencies (#847) ([`315d5dd`](https://github.com/taskforcesh/bullmq/commit/315d5dda39bcfb3223976d1a6da8e11d0a4902a5)) + +* chore(release): 1.51.1 [skip ci] + +## [1.51.1](https://github.com/taskforcesh/bullmq/compare/v1.51.0...v1.51.1) (2021-10-29) + +### Bug Fixes + +* **commands:** copy includes lua scripts ([#843](https://github.com/taskforcesh/bullmq/issues/843)) fixes [#837](https://github.com/taskforcesh/bullmq/issues/837) ([cab33e0](https://github.com/taskforcesh/bullmq/commit/cab33e08bc78bd3c45b86158a818100beeb06d81)) ([`1c99cc7`](https://github.com/taskforcesh/bullmq/commit/1c99cc7f00097ee77669378c6e1c291677b330df)) + +* chore(release): 1.51.0 [skip ci] + +# [1.51.0](https://github.com/taskforcesh/bullmq/compare/v1.50.7...v1.51.0) (2021-10-28) + +### Features + +* **flow:** consider continually adding jobs ([#828](https://github.com/taskforcesh/bullmq/issues/828)) fixes [#826](https://github.com/taskforcesh/bullmq/issues/826) ([b0fde69](https://github.com/taskforcesh/bullmq/commit/b0fde69f4370160a891e4654485c09745066b80b)) ([`8231052`](https://github.com/taskforcesh/bullmq/commit/82310524849b8aaae0ab8e427f4a0637fadaa2de)) + +* chore(release): 1.50.7 [skip ci] + +## [1.50.7](https://github.com/taskforcesh/bullmq/compare/v1.50.6...v1.50.7) (2021-10-28) + +### Bug Fixes + +* override enableReadyCheck, maxRetriesPerRequest fixes reconnection ([09ba358](https://github.com/taskforcesh/bullmq/commit/09ba358b6f761bdc52b0f5b2aa315cc6c2a9db6e)) +* **queue-base:** deprecation warning on missing connection ([2f79802](https://github.com/taskforcesh/bullmq/commit/2f79802378d7e015b5d0702945a71c1c2073251e)) ([`da1add8`](https://github.com/taskforcesh/bullmq/commit/da1add8d2970216b953406d1c1109b36bfa05c5c)) + +* chore: remove some lodash functions (#835) ([`fcc48e3`](https://github.com/taskforcesh/bullmq/commit/fcc48e3fb4263950f355e9fd9a233a20fe18f380)) + +* chore(release): 1.50.6 [skip ci] + +## [1.50.6](https://github.com/taskforcesh/bullmq/compare/v1.50.5...v1.50.6) (2021-10-28) + +### Bug Fixes + +* **queue-base:** show connection deprecation warning ([#832](https://github.com/taskforcesh/bullmq/issues/832)) fixes [#829](https://github.com/taskforcesh/bullmq/issues/829) ([5d023fe](https://github.com/taskforcesh/bullmq/commit/5d023fe7b671a2547398fd68995ccd85216cc7a5)) ([`2c191b0`](https://github.com/taskforcesh/bullmq/commit/2c191b0e079bf412f292617c88917eec3c9b00de)) + +* chore(release): 1.50.5 [skip ci] + +## [1.50.5](https://github.com/taskforcesh/bullmq/compare/v1.50.4...v1.50.5) (2021-10-21) + +### Bug Fixes + +* **child-pool:** pipe process stdout and stderr([#822](https://github.com/taskforcesh/bullmq/issues/822)) fixes [#821](https://github.com/taskforcesh/bullmq/issues/821) ([13f5c62](https://github.com/taskforcesh/bullmq/commit/13f5c62174925e4638acda6a9de379668048189d)) ([`7dcbe43`](https://github.com/taskforcesh/bullmq/commit/7dcbe43ccc3c69625e6fba72f80d71dd755690b3)) + +* chore(release): 1.50.4 [skip ci] + +## [1.50.4](https://github.com/taskforcesh/bullmq/compare/v1.50.3...v1.50.4) (2021-10-20) + +### Bug Fixes + +* properly pass sharedConnection option to worker base class ([56557f1](https://github.com/taskforcesh/bullmq/commit/56557f1c0c3fb04bc3dd8824819c2d4367324c3b)) ([`fdc76ff`](https://github.com/taskforcesh/bullmq/commit/fdc76ff9b8781a1735933514a8b2b5eac510b789)) + +* chore(release): 1.50.3 [skip ci] + +## [1.50.3](https://github.com/taskforcesh/bullmq/compare/v1.50.2...v1.50.3) (2021-10-18) + +### Bug Fixes + +* **msgpackr:** upgrade version to 1.4.6 to support esm bundlers ([#818](https://github.com/taskforcesh/bullmq/issues/818)) fixes [#813](https://github.com/taskforcesh/bullmq/issues/813) ([913d7a9](https://github.com/taskforcesh/bullmq/commit/913d7a9a892d2c7e2fa5822367355c2dee888583)) ([`19da60a`](https://github.com/taskforcesh/bullmq/commit/19da60a6006d0df9e0cb81ea810d3c2673e46350)) + +* chore(release): 1.50.2 [skip ci] + +## [1.50.2](https://github.com/taskforcesh/bullmq/compare/v1.50.1...v1.50.2) (2021-10-12) + +### Bug Fixes + +* **msgpack:** replace msgpack by msgpackr ([dc13a75](https://github.com/taskforcesh/bullmq/commit/dc13a75374bbd29fefbf3e56f822e763df3712d9)) ([`23c02b2`](https://github.com/taskforcesh/bullmq/commit/23c02b2eee3c4e27e0370317779b1620b195e2f5)) + +* chore(release): 1.50.1 [skip ci] + +## [1.50.1](https://github.com/taskforcesh/bullmq/compare/v1.50.0...v1.50.1) (2021-10-12) + +### Bug Fixes + +* **queue-getters:** only getting the first 2 jobs ([653873a](https://github.com/taskforcesh/bullmq/commit/653873a6a86dd6c3e1afc3142efbe11014d80557)) ([`4768d7b`](https://github.com/taskforcesh/bullmq/commit/4768d7b1f843dcac14bef62edbfab3d1242dec64)) + +* chore(release): 1.50.0 [skip ci] + +# [1.50.0](https://github.com/taskforcesh/bullmq/compare/v1.49.0...v1.50.0) (2021-10-12) + +### Features + +* easier to build extensions on top of BullMQ ([b1a9e64](https://github.com/taskforcesh/bullmq/commit/b1a9e64a9184addc0b8245a04013e1c896e9c2bc)) ([`2d646d1`](https://github.com/taskforcesh/bullmq/commit/2d646d169f9ad084b6fc8c47316aaa77821126ea)) + +* chore(release): 1.49.0 [skip ci] + +# [1.49.0](https://github.com/taskforcesh/bullmq/compare/v1.48.3...v1.49.0) (2021-10-08) + +### Features + +* **sandboxed-process:** handle init-failed error ([#797](https://github.com/taskforcesh/bullmq/issues/797)) ([5d2f553](https://github.com/taskforcesh/bullmq/commit/5d2f55342b19ee99d34f8d8003f09359cfe17d4f)) ([`daaa73e`](https://github.com/taskforcesh/bullmq/commit/daaa73e2016948e715f11e67fac1bf261dadb33a)) + +* chore(release): 1.48.3 [skip ci] + +## [1.48.3](https://github.com/taskforcesh/bullmq/compare/v1.48.2...v1.48.3) (2021-10-05) + +### Bug Fixes + +* **change-delay:** add current time to delay ([#789](https://github.com/taskforcesh/bullmq/issues/789)) fixes [#787](https://github.com/taskforcesh/bullmq/issues/787) ([4a70def](https://github.com/taskforcesh/bullmq/commit/4a70def6e85cf9ea384ec5f38c3c4f83e4eb523c)) ([`4e09a2a`](https://github.com/taskforcesh/bullmq/commit/4e09a2a97bb9eab6c5c3db1294aa1aa4fd3730b0)) + +* chore(semantic-release): upgrade to 17.4.7 (#778) ([`477bdae`](https://github.com/taskforcesh/bullmq/commit/477bdae9d037a92f9d94457c9476b2b3aba6c671)) + +* chore(release): 1.48.2 [skip ci] + +## [1.48.2](https://github.com/taskforcesh/bullmq/compare/v1.48.1...v1.48.2) (2021-09-24) + +### Performance Improvements + +* **obliterate:** do not pass unused variables ([#766](https://github.com/taskforcesh/bullmq/issues/766)) ([e9abfa6](https://github.com/taskforcesh/bullmq/commit/e9abfa6f821064901770a9b72adfb00cac96154c)) ([`1b5317a`](https://github.com/taskforcesh/bullmq/commit/1b5317a5f5488fefe367550c518e5c2584ced300)) + +* chore(release): 1.48.1 [skip ci] + +## [1.48.1](https://github.com/taskforcesh/bullmq/compare/v1.48.0...v1.48.1) (2021-09-23) + +### Bug Fixes + +* **obliterate:** consider dependencies and processed keys ([#765](https://github.com/taskforcesh/bullmq/issues/765)) ([fd6bad8](https://github.com/taskforcesh/bullmq/commit/fd6bad8c7444c21e6f1d67611a28f8e4aace293d)) ([`1fbb80d`](https://github.com/taskforcesh/bullmq/commit/1fbb80ded6dd22b755757b4699667351eda0b106)) + +* chore(release): 1.48.0 [skip ci] + +# [1.48.0](https://github.com/taskforcesh/bullmq/compare/v1.47.2...v1.48.0) (2021-09-23) + +### Features + +* **queue:** add drain lua script ([#764](https://github.com/taskforcesh/bullmq/issues/764)) ([2daa698](https://github.com/taskforcesh/bullmq/commit/2daa698a7cc5dc8a6cd087b2d29356bc02fb4944)) ([`4c91ad5`](https://github.com/taskforcesh/bullmq/commit/4c91ad549830ccf10d0dc599aabbeaf3466fdb26)) + +* chore(release): 1.47.2 [skip ci] + +## [1.47.2](https://github.com/taskforcesh/bullmq/compare/v1.47.1...v1.47.2) (2021-09-22) + +### Bug Fixes + +* **flow-producer:** use default prefix in add method ([#763](https://github.com/taskforcesh/bullmq/issues/763)) fixes [#762](https://github.com/taskforcesh/bullmq/issues/762) ([fffdb55](https://github.com/taskforcesh/bullmq/commit/fffdb55f37917776494a4471673ef4564e0faab5)) ([`375f7c1`](https://github.com/taskforcesh/bullmq/commit/375f7c18432b36802bc521bfa78855278a834963)) + +* chore(deps): bump semver-regex from 3.1.2 to 3.1.3 (#761) ([`4586cda`](https://github.com/taskforcesh/bullmq/commit/4586cdab0ca52f28e12449ff6f82f7c6124a2c12)) + +* chore(release): 1.47.1 [skip ci] + +## [1.47.1](https://github.com/taskforcesh/bullmq/compare/v1.47.0...v1.47.1) (2021-09-17) + +### Bug Fixes + +* **running:** move running attribute before first async call ([#756](https://github.com/taskforcesh/bullmq/issues/756)) ([f7f0660](https://github.com/taskforcesh/bullmq/commit/f7f066076bbe6cbcbf716ae622d55c6c1ae9b270)) ([`9c2dfab`](https://github.com/taskforcesh/bullmq/commit/9c2dfab132eb3366af69a5c2f1585d4b7150eadb)) + +* chore(release): 1.47.0 [skip ci] + +# [1.47.0](https://github.com/taskforcesh/bullmq/compare/v1.46.7...v1.47.0) (2021-09-16) + +### Features + +* **queue-events:** launch without launching process ([#750](https://github.com/taskforcesh/bullmq/issues/750)) ([23a2360](https://github.com/taskforcesh/bullmq/commit/23a23606e727ca13b24924a1e867c6b557d6a09d)) ([`7600f1b`](https://github.com/taskforcesh/bullmq/commit/7600f1b4f9c78e0933ab25f6d285381443c07c91)) + +* chore(release): 1.46.7 [skip ci] + +## [1.46.7](https://github.com/taskforcesh/bullmq/compare/v1.46.6...v1.46.7) (2021-09-16) + +### Bug Fixes + +* **wait-for-job:** add catch block and emit error ([#749](https://github.com/taskforcesh/bullmq/issues/749)) ([b407f9a](https://github.com/taskforcesh/bullmq/commit/b407f9ac429c825984856eebca58bbfd16feb9d3)) ([`e1cd8bb`](https://github.com/taskforcesh/bullmq/commit/e1cd8bb2b69cb3efff9e6f379462bbefe4e0cf1d)) + +* chore(release): 1.46.6 [skip ci] + +## [1.46.6](https://github.com/taskforcesh/bullmq/compare/v1.46.5...v1.46.6) (2021-09-15) + +### Bug Fixes + +* **connection:** fail only if redis connection does not recover ([#751](https://github.com/taskforcesh/bullmq/issues/751)) ([8d59ced](https://github.com/taskforcesh/bullmq/commit/8d59ced27831a636f40ed4233eba3d4ac0654534)) ([`8dc5463`](https://github.com/taskforcesh/bullmq/commit/8dc54632c55db21231a359f53c43bd89d8db18f3)) + +* chore(release): 1.46.5 [skip ci] + +## [1.46.5](https://github.com/taskforcesh/bullmq/compare/v1.46.4...v1.46.5) (2021-09-12) + +### Bug Fixes + +* **is-finished:** reject when missing job key ([#746](https://github.com/taskforcesh/bullmq/issues/746)) fixes [#85](https://github.com/taskforcesh/bullmq/issues/85) ([bd49bd2](https://github.com/taskforcesh/bullmq/commit/bd49bd20492676559072e5e16adb6d4e47afb22b)) ([`4b80319`](https://github.com/taskforcesh/bullmq/commit/4b8031963b745334e53e492ae9b028173bb3d0be)) + +* chore(release): 1.46.4 [skip ci] + +## [1.46.4](https://github.com/taskforcesh/bullmq/compare/v1.46.3...v1.46.4) (2021-09-10) + +### Bug Fixes + +* **wait-until-finished:** isFinished return failedReason or returnValue ([#743](https://github.com/taskforcesh/bullmq/issues/743)) fixes [#555](https://github.com/taskforcesh/bullmq/issues/555) ([63acae9](https://github.com/taskforcesh/bullmq/commit/63acae98cb083ec978ea17833819d1a21086be33)) ([`1c92551`](https://github.com/taskforcesh/bullmq/commit/1c92551fb6d7dcbca2d12fb8576cd8988cdccb55)) + +* chore(release): 1.46.3 [skip ci] + +## [1.46.3](https://github.com/taskforcesh/bullmq/compare/v1.46.2...v1.46.3) (2021-09-08) + +### Bug Fixes + +* **add-job:** throw error when missing parent key ([#739](https://github.com/taskforcesh/bullmq/issues/739)) ([d751070](https://github.com/taskforcesh/bullmq/commit/d751070f4ab6553c782341270574ccd253d309b8)) ([`1fab5c2`](https://github.com/taskforcesh/bullmq/commit/1fab5c28c6eace6505b271bb00133f8c59be08ce)) + +* chore(release): 1.46.2 [skip ci] + +## [1.46.2](https://github.com/taskforcesh/bullmq/compare/v1.46.1...v1.46.2) (2021-09-07) + +### Bug Fixes + +* **queue-events:** duplicate connection ([#733](https://github.com/taskforcesh/bullmq/issues/733)) fixes [#726](https://github.com/taskforcesh/bullmq/issues/726) ([e2531ed](https://github.com/taskforcesh/bullmq/commit/e2531ed0c1dc195f210f8cf996e9ffe04c9e4b7d)) ([`8a677ef`](https://github.com/taskforcesh/bullmq/commit/8a677ef958950ca392d97fa4904ea37023605eab)) + +* chore(release): 1.46.1 [skip ci] + +## [1.46.1](https://github.com/taskforcesh/bullmq/compare/v1.46.0...v1.46.1) (2021-09-06) + +### Bug Fixes + +* **redis-connection:** improve closing fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([9d8eb03](https://github.com/taskforcesh/bullmq/commit/9d8eb0306ef5e63c9d34ffd5c96fc15491da639d)) ([`ef9bcc3`](https://github.com/taskforcesh/bullmq/commit/ef9bcc3c80dc3c8705b63d9457397b368d5c611b)) + +* chore(release): 1.46.0 [skip ci] + +# [1.46.0](https://github.com/taskforcesh/bullmq/compare/v1.45.0...v1.46.0) (2021-09-02) + +### Features + +* **worker:** launch without launching process ([#724](https://github.com/taskforcesh/bullmq/issues/724)) ([af689e4](https://github.com/taskforcesh/bullmq/commit/af689e4e3945b9bc68bfc08c8f0ad57644206c5b)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) ([`543cae0`](https://github.com/taskforcesh/bullmq/commit/543cae02b5a98a166a942f1f977e02aa0b75058e)) + +* chore(release): 1.45.0 [skip ci] + +# [1.45.0](https://github.com/taskforcesh/bullmq/compare/v1.44.3...v1.45.0) (2021-09-02) + +### Features + +* **queue-scheduler:** launch without launching process ([#729](https://github.com/taskforcesh/bullmq/issues/729)) ([f1932a7](https://github.com/taskforcesh/bullmq/commit/f1932a789af13da9b705a72d6f633f984a218862)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) ([`f13757c`](https://github.com/taskforcesh/bullmq/commit/f13757ca06daa52402371fb2a458a990503c0bff)) + +* chore(release): 1.44.3 [skip ci] + +## [1.44.3](https://github.com/taskforcesh/bullmq/compare/v1.44.2...v1.44.3) (2021-09-02) + +### Bug Fixes + +* **queuescheduler:** handle shared connections fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([32a2b2e](https://github.com/taskforcesh/bullmq/commit/32a2b2eccfa3ba1516eacd71e334cae6c787ce4c)) ([`4b551fa`](https://github.com/taskforcesh/bullmq/commit/4b551faaa5b02c572e4f6d36c5d2c2b8c79ff954)) + +* chore(deps): bump tar from 6.1.3 to 6.1.11 (#728) ([`e4c37fe`](https://github.com/taskforcesh/bullmq/commit/e4c37fec13e85ea69cd2051ed56f03942e4e10e8)) + +* chore(deps): bump path-parse from 1.0.6 to 1.0.7 (#680) ([`a1845fc`](https://github.com/taskforcesh/bullmq/commit/a1845fcc393ef607401ff72a98916e571c5e33df)) + +* chore(release): 1.44.2 [skip ci] + +## [1.44.2](https://github.com/taskforcesh/bullmq/compare/v1.44.1...v1.44.2) (2021-08-29) + +### Bug Fixes + +* **worker:** use spread operator in processing map keys ([#720](https://github.com/taskforcesh/bullmq/issues/720)) ([32f1e57](https://github.com/taskforcesh/bullmq/commit/32f1e570a9a3369174a228f729f1d1330dcb6965)) ([`c27b97f`](https://github.com/taskforcesh/bullmq/commit/c27b97f5200481b70a6c05131d2fc34db2425d45)) + +* chore(release): 1.44.1 [skip ci] + +## [1.44.1](https://github.com/taskforcesh/bullmq/compare/v1.44.0...v1.44.1) (2021-08-29) + +### Bug Fixes + +* **retry:** throw error when retry non failed job ([#717](https://github.com/taskforcesh/bullmq/issues/717)) ([bb9b192](https://github.com/taskforcesh/bullmq/commit/bb9b192e9a1a4f3c25374fcb8c0fb2159eb3f779)) ([`2a8c476`](https://github.com/taskforcesh/bullmq/commit/2a8c4766c674dd132f7592cc9b0b4213b9f33611)) + +* chore(deps): bump normalize-url from 6.0.0 to 6.0.1 (#587) ([`1e7cef3`](https://github.com/taskforcesh/bullmq/commit/1e7cef36c5ae7d93c86b49e0aa9484dfc470247a)) + +* chore(deps): upgrade dependencies (#713) ([`ae5cafd`](https://github.com/taskforcesh/bullmq/commit/ae5cafd987d1d494944c850c6317db46292f5a05)) + +* chore(release): 1.44.0 [skip ci] + +# [1.44.0](https://github.com/taskforcesh/bullmq/compare/v1.43.0...v1.44.0) (2021-08-27) + +### Features + +* **queue-events:** add waiting-children event ([#704](https://github.com/taskforcesh/bullmq/issues/704)) ([18b0b79](https://github.com/taskforcesh/bullmq/commit/18b0b7954313274a61fcc058380bfb9d682c059d)) ([`a41952f`](https://github.com/taskforcesh/bullmq/commit/a41952fa8a17441275dd4bf1c675e8a81b4f54a0)) + +* chore(release): 1.43.0 [skip ci] + +# [1.43.0](https://github.com/taskforcesh/bullmq/compare/v1.42.1...v1.43.0) (2021-08-25) + +### Features + +* **events:** add added event when job is created ([#699](https://github.com/taskforcesh/bullmq/issues/699)) ([f533cc5](https://github.com/taskforcesh/bullmq/commit/f533cc55a43cf6ea78a60e85102f15b1c1ff69a0)) ([`dd7efc3`](https://github.com/taskforcesh/bullmq/commit/dd7efc3390e4a9a90f1b3ee0c3e3c74deb1f0369)) + +* chore(release): 1.42.1 [skip ci] + +## [1.42.1](https://github.com/taskforcesh/bullmq/compare/v1.42.0...v1.42.1) (2021-08-23) + +### Bug Fixes + +* protect emit calls with throw/catch ([79f879b](https://github.com/taskforcesh/bullmq/commit/79f879bf1bca1acea19485def361cc36f1d13b7e)) ([`55606f7`](https://github.com/taskforcesh/bullmq/commit/55606f79cc6accf07d45fe2c4ffa81817108d7bc)) + +* chore(release): 1.42.0 [skip ci] + +# [1.42.0](https://github.com/taskforcesh/bullmq/compare/v1.41.0...v1.42.0) (2021-08-20) + +### Features + +* **flows:** add queuesOptions for rate limit ([#692](https://github.com/taskforcesh/bullmq/issues/692)) ([6689ec3](https://github.com/taskforcesh/bullmq/commit/6689ec3fadd21904d9935f932c047f540ed8caf0)), closes [#621](https://github.com/taskforcesh/bullmq/issues/621) ([`f1472da`](https://github.com/taskforcesh/bullmq/commit/f1472dab64c04a7db694a4af3d78f45a96d8922f)) + +* chore(release): 1.41.0 [skip ci] + +# [1.41.0](https://github.com/taskforcesh/bullmq/compare/v1.40.4...v1.41.0) (2021-08-20) + +### Features + +* **flow:** add bulk ([dc59fe6](https://github.com/taskforcesh/bullmq/commit/dc59fe62e57b6e761fe4d2ab6179a69dc4792399)) ([`874b1a4`](https://github.com/taskforcesh/bullmq/commit/874b1a48d1480ee19e57c362f978e13e9f34b1bd)) + +* chore(flow): remove unneeded updateIds (#684) ([`1b44359`](https://github.com/taskforcesh/bullmq/commit/1b44359ca298dc5195be7046bb5a5c939c91f3cd)) + +* chore(release): 1.40.4 [skip ci] + +## [1.40.4](https://github.com/taskforcesh/bullmq/compare/v1.40.3...v1.40.4) (2021-08-06) + +### Bug Fixes + +* **rate-limiter:** check groupKey is not undefined ([999b918](https://github.com/taskforcesh/bullmq/commit/999b91868814caf4c5c1ddee40798178b71e0ea8)) ([`76dff91`](https://github.com/taskforcesh/bullmq/commit/76dff919c89b6eef13bd3109d5b84c89436f427a)) + +* chore(release): 1.40.3 [skip ci] + +## [1.40.3](https://github.com/taskforcesh/bullmq/compare/v1.40.2...v1.40.3) (2021-08-06) + +### Bug Fixes + +* **redis-connection:** add error event in waitUntilReady ([ac4101e](https://github.com/taskforcesh/bullmq/commit/ac4101e3e798110c022d6c9f10f3b98f5e86b151)) ([`40f9d14`](https://github.com/taskforcesh/bullmq/commit/40f9d14f6ff6d64664748eb723d3a827bd2de337)) + +* chore(deps): bump tar from 6.1.0 to 6.1.3 + +Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.3. +- [Release notes](https://github.com/npm/node-tar/releases) +- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md) +- [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.3) + +--- +updated-dependencies: +- dependency-name: tar + dependency-type: indirect +... + +Signed-off-by: dependabot[bot] <support@github.com> ([`242ed66`](https://github.com/taskforcesh/bullmq/commit/242ed664fdbd3dab58a363d886b63a56bc024170)) + +* chore(release): 1.40.2 [skip ci] + +## [1.40.2](https://github.com/taskforcesh/bullmq/compare/v1.40.1...v1.40.2) (2021-08-06) + +### Bug Fixes + +* move clientCommandMessageReg to utils ([dd5d555](https://github.com/taskforcesh/bullmq/commit/dd5d5553fe768eb18b17b53c7f75e7066024e382)) ([`5a83df7`](https://github.com/taskforcesh/bullmq/commit/5a83df7fac77ee5dac4e97813f5feaaf0b3246b8)) + +* chore(release): 1.40.1 [skip ci] + +## [1.40.1](https://github.com/taskforcesh/bullmq/compare/v1.40.0...v1.40.1) (2021-07-24) + +### Bug Fixes + +* connection hangs with failed connection fixes [#656](https://github.com/taskforcesh/bullmq/issues/656) ([c465611](https://github.com/taskforcesh/bullmq/commit/c465611ed76afd2adfd0e05a8babd6e369f5c310)) ([`e2502ca`](https://github.com/taskforcesh/bullmq/commit/e2502ca390aff42d8580474376492b80a273bae3)) + +* chore(release): 1.40.0 [skip ci] + +# [1.40.0](https://github.com/taskforcesh/bullmq/compare/v1.39.5...v1.40.0) (2021-07-22) + +### Features + +* **worker:** retry with delay errors in run loop ([409fe7f](https://github.com/taskforcesh/bullmq/commit/409fe7fc09b87b7916a3362a463bb9e0f17ecea8)) ([`a4984ee`](https://github.com/taskforcesh/bullmq/commit/a4984ee9b3afb5c999fcef6f60b07279e85770a6)) + +* chore(release): 1.39.5 [skip ci] + +## [1.39.5](https://github.com/taskforcesh/bullmq/compare/v1.39.4...v1.39.5) (2021-07-21) + +### Bug Fixes + +* **move-to-finished:** remove stalled jobs when finishing ([3867126](https://github.com/taskforcesh/bullmq/commit/38671261ccc00ca7fefa677663e45a40a92df555)) ([`4000c34`](https://github.com/taskforcesh/bullmq/commit/4000c34716609ca60c324635c4850bbe5c363b90)) + +* chore(release): 1.39.4 [skip ci] + +## [1.39.4](https://github.com/taskforcesh/bullmq/compare/v1.39.3...v1.39.4) (2021-07-21) + +### Bug Fixes + +* **repeatable:** validate endDate when adding next repeatable job ([1324cbb](https://github.com/taskforcesh/bullmq/commit/1324cbb4effd55e98c29d95a21afca7cd045b46c)) ([`a6eefeb`](https://github.com/taskforcesh/bullmq/commit/a6eefebfb33aaa376e241c27ff242adb6a78e44b)) + +* chore(release): 1.39.3 [skip ci] + +## [1.39.3](https://github.com/taskforcesh/bullmq/compare/v1.39.2...v1.39.3) (2021-07-16) + +### Bug Fixes + +* connect if redis client has status "wait" ([f711717](https://github.com/taskforcesh/bullmq/commit/f711717f56822aef43c9fd0440e30fad0876ba62)) ([`6774a2a`](https://github.com/taskforcesh/bullmq/commit/6774a2a6dd061055ef470229e43e896754e06c64)) + +* chore(release): 1.39.2 [skip ci] + +## [1.39.2](https://github.com/taskforcesh/bullmq/compare/v1.39.1...v1.39.2) (2021-07-15) + +### Bug Fixes + +* **queue:** ensure the Queue constructor doesn't try to set queue options if the client is closed ([b40c6eb](https://github.com/taskforcesh/bullmq/commit/b40c6eb931a71d0ae9f6454eb70d84259a6981b7)) ([`451365c`](https://github.com/taskforcesh/bullmq/commit/451365ce939e43e71fd45c3614103ad409c8a90d)) + +* chore(release): 1.39.1 [skip ci] + +## [1.39.1](https://github.com/taskforcesh/bullmq/compare/v1.39.0...v1.39.1) (2021-07-15) + +### Bug Fixes + +* **sandbox:** use updateProgress method name ([27d62c3](https://github.com/taskforcesh/bullmq/commit/27d62c32b2fac091b2700d6077de593c9fda4c22)) ([`a3bdce2`](https://github.com/taskforcesh/bullmq/commit/a3bdce292486b983305e6e324427adee9d4199ef)) + +* chore(release): 1.39.0 [skip ci] + +# [1.39.0](https://github.com/taskforcesh/bullmq/compare/v1.38.1...v1.39.0) (2021-07-13) + +### Features + +* **worker+scheduler:** add a "running" attribute for healthchecking ([aae358e](https://github.com/taskforcesh/bullmq/commit/aae358e067a0b6f20124751cffcdeaebac6eb7fd)) ([`c718d36`](https://github.com/taskforcesh/bullmq/commit/c718d365d0a1882154130d096988f3294fe8c66f)) + +* chore(release): 1.38.1 [skip ci] + +## [1.38.1](https://github.com/taskforcesh/bullmq/compare/v1.38.0...v1.38.1) (2021-07-12) + +### Bug Fixes + +* **reprocess:** do not store job.id in added list ([9c0605e](https://github.com/taskforcesh/bullmq/commit/9c0605e10f0bbdce94153d3f318d56c23bfd3269)) ([`9a4e496`](https://github.com/taskforcesh/bullmq/commit/9a4e496489b292821c746d14f413aff25f134bfd)) + +* chore(release): 1.38.0 [skip ci] + +# [1.38.0](https://github.com/taskforcesh/bullmq/compare/v1.37.1...v1.38.0) (2021-07-12) + +### Features + +* **queue:** add missing events typings ([b42e78c](https://github.com/taskforcesh/bullmq/commit/b42e78c36cb6a6579a4c7cce1d7e969b230ff5b6)) ([`c234af2`](https://github.com/taskforcesh/bullmq/commit/c234af2ae548c4bed6ed6553a368c555d65b249e)) + +* chore(release): 1.37.1 [skip ci] + +## [1.37.1](https://github.com/taskforcesh/bullmq/compare/v1.37.0...v1.37.1) (2021-07-02) + +### Bug Fixes + +* **stalled-jobs:** move stalled jobs to wait in batches ([a23fcb8](https://github.com/taskforcesh/bullmq/commit/a23fcb82d4ca20cbc4b8cd8b544b2d2eaddd86c3)), closes [#422](https://github.com/taskforcesh/bullmq/issues/422) ([`ff8cde6`](https://github.com/taskforcesh/bullmq/commit/ff8cde6cb8ed13d6bca19802348979caa3669ee6)) + +* chore(release): 1.37.0 [skip ci] + +# [1.37.0](https://github.com/taskforcesh/bullmq/compare/v1.36.1...v1.37.0) (2021-06-30) + +### Features + +* **job:** add changeDelay method for delayed jobs ([f0a9f9c](https://github.com/taskforcesh/bullmq/commit/f0a9f9c6479062413abc0ac9a6f744329571a618)) ([`57f95e0`](https://github.com/taskforcesh/bullmq/commit/57f95e078eb8176973eea0670c56c9f2e3ec524c)) + +* chore(deps): add commitizen + +this is a helper for semantic-release commit messages ([`eacd59b`](https://github.com/taskforcesh/bullmq/commit/eacd59bd67b7c356614d9acd2cc59a8b92f9b396)) + +* chore(release): 1.36.1 [skip ci] + +## [1.36.1](https://github.com/taskforcesh/bullmq/compare/v1.36.0...v1.36.1) (2021-06-22) + +### Bug Fixes + +* **worker:** change active event typing ([220b4f6](https://github.com/taskforcesh/bullmq/commit/220b4f619b30a8f04979e9abd0139e46d89b424d)) ([`5bed98a`](https://github.com/taskforcesh/bullmq/commit/5bed98aa4204d6e6cf7d17233b6ea2d4ab9fcb3c)) + +* chore(release): 1.36.0 [skip ci] + +# [1.36.0](https://github.com/taskforcesh/bullmq/compare/v1.35.0...v1.36.0) (2021-06-20) + +### Bug Fixes + +* **queue-events:** fix drained typing ([9cf711d](https://github.com/taskforcesh/bullmq/commit/9cf711d4d4e7d8214dfd93a243c35d0bf135cdaf)) + +### Features + +* **worker:** add active event typing ([5508cdf](https://github.com/taskforcesh/bullmq/commit/5508cdf7cf372ae2f4af0ef576016eb901580671)) +* **worker:** add progress event typing ([119cb7c](https://github.com/taskforcesh/bullmq/commit/119cb7cd7a91c0f1866f5957faf2850afadbe709)) ([`8d40ddb`](https://github.com/taskforcesh/bullmq/commit/8d40ddbaf1f48dc08e459e085fbe196361bba9a3)) + +* chore(release): 1.35.0 [skip ci] + +# [1.35.0](https://github.com/taskforcesh/bullmq/compare/v1.34.2...v1.35.0) (2021-06-19) + +### Features + +* **worker:** add drained event typing ([ed5f315](https://github.com/taskforcesh/bullmq/commit/ed5f3155415693d2a6dbfb779397d53d74b704e2)) ([`499fe50`](https://github.com/taskforcesh/bullmq/commit/499fe5088aba2f265213b730fd79f3ad6f63b1b9)) + +* chore(release): 1.34.2 [skip ci] + +## [1.34.2](https://github.com/taskforcesh/bullmq/compare/v1.34.1...v1.34.2) (2021-06-18) + +### Bug Fixes + +* **worker:** await for processing functions ([0566804](https://github.com/taskforcesh/bullmq/commit/056680470283f134b447a8ba39afa29e1e113585)) ([`4882e01`](https://github.com/taskforcesh/bullmq/commit/4882e01379efad9b3fe7bff48bb7fbe70f115873)) + +* chore(release): 1.34.1 [skip ci] + +## [1.34.1](https://github.com/taskforcesh/bullmq/compare/v1.34.0...v1.34.1) (2021-06-18) + +### Bug Fixes + +* **redis-connection:** remove error event listener from client ([2d70fe7](https://github.com/taskforcesh/bullmq/commit/2d70fe7cc7d43673674ec2ba0204c10661b34e95)) ([`2b21440`](https://github.com/taskforcesh/bullmq/commit/2b21440f5befd4b95d6be3d8e8235b31279ce0c6)) + +* chore(release): 1.34.0 [skip ci] + +# [1.34.0](https://github.com/taskforcesh/bullmq/compare/v1.33.1...v1.34.0) (2021-06-11) + +### Features + +* **job:** expose queueName ([8683bd4](https://github.com/taskforcesh/bullmq/commit/8683bd470cc7304f087d646fd40c5bc3acc1263c)) ([`a3342b2`](https://github.com/taskforcesh/bullmq/commit/a3342b2aa23ed0606fe97f4aeadad5263038a703)) + +* chore(release): 1.33.1 [skip ci] + +## [1.33.1](https://github.com/taskforcesh/bullmq/compare/v1.33.0...v1.33.1) (2021-06-10) + +### Bug Fixes + +* **job:** destructure default opts for pagination ([73363a5](https://github.com/taskforcesh/bullmq/commit/73363a551f56608f8936ad1f730d0a9c778aafd2)) ([`7dfb343`](https://github.com/taskforcesh/bullmq/commit/7dfb343219737c1a3bef72c5121803b4e7e4fdd6)) + +* chore(release): 1.33.0 [skip ci] + +# [1.33.0](https://github.com/taskforcesh/bullmq/compare/v1.32.0...v1.33.0) (2021-06-10) + +### Features + +* **job:** add getDependenciesCount method ([ae39a4c](https://github.com/taskforcesh/bullmq/commit/ae39a4c77a958242cb445dbb32ae27b15a953653)) ([`a4efbb5`](https://github.com/taskforcesh/bullmq/commit/a4efbb57e29315b7255780569ef2c6c11b4dad6d)) + +* chore(release): 1.32.0 [skip ci] + +# [1.32.0](https://github.com/taskforcesh/bullmq/compare/v1.31.1...v1.32.0) (2021-06-07) + +### Features + +* **flow-producer:** add getFlow method ([ce93d04](https://github.com/taskforcesh/bullmq/commit/ce93d04c962686aff34f670f2decadadbf1cf4ca)) ([`87b3603`](https://github.com/taskforcesh/bullmq/commit/87b360323ed3ab4d43ccd3e278413137479cdf3b)) + +* chore(release): 1.31.1 [skip ci] + +## [1.31.1](https://github.com/taskforcesh/bullmq/compare/v1.31.0...v1.31.1) (2021-06-07) + +### Bug Fixes + +* **worker:** remove processed key when removeOnComplete ([4ec1b73](https://github.com/taskforcesh/bullmq/commit/4ec1b739d6aeeb2fc21887b58f5978027ddcdb50)) ([`7068d4c`](https://github.com/taskforcesh/bullmq/commit/7068d4c2297468714ce1034b16bc9a32e9571d70)) + +* chore(release): 1.31.0 [skip ci] + +# [1.31.0](https://github.com/taskforcesh/bullmq/compare/v1.30.2...v1.31.0) (2021-06-04) + +### Features + +* **job:** extend getDependencies to support pagination ([9b61bbb](https://github.com/taskforcesh/bullmq/commit/9b61bbb9160358f629cd458fa8dc4c9b6ebcd9f5)) ([`d8c67c2`](https://github.com/taskforcesh/bullmq/commit/d8c67c26483c1e38554abdbde240a29b90f1766a)) + +* chore(release): 1.30.2 [skip ci] + +## [1.30.2](https://github.com/taskforcesh/bullmq/compare/v1.30.1...v1.30.2) (2021-06-03) + +### Bug Fixes + +* **job:** parse results in getDependencies for processed jobs ([6fdc701](https://github.com/taskforcesh/bullmq/commit/6fdc7011ba910e5ca9c6d87926cc523ef38ef3ca)) ([`d3335ce`](https://github.com/taskforcesh/bullmq/commit/d3335cee83c3ad93a36066b06111a350b34d0621)) + +* chore(release): 1.30.1 [skip ci] + +## [1.30.1](https://github.com/taskforcesh/bullmq/compare/v1.30.0...v1.30.1) (2021-06-02) + +### Bug Fixes + +* **move-to-waiting-children:** make opts optional ([33bd76a](https://github.com/taskforcesh/bullmq/commit/33bd76a2cac9be450b5d76c6cfe16751c7569ceb)) ([`46e35c3`](https://github.com/taskforcesh/bullmq/commit/46e35c39141573daf0401c8ab79957c84424f1a7)) + +* chore(release): 1.30.0 [skip ci] + +# [1.30.0](https://github.com/taskforcesh/bullmq/compare/v1.29.1...v1.30.0) (2021-06-02) + +### Features + +* add some event typing ([934c004](https://github.com/taskforcesh/bullmq/commit/934c0040b0802bb67f44a979584405d795a8ab5e)) ([`bf17c7b`](https://github.com/taskforcesh/bullmq/commit/bf17c7bf5b30e6c9c566e565400aa0c8f32220ab)) + +* chore(release): 1.29.1 [skip ci] + +## [1.29.1](https://github.com/taskforcesh/bullmq/compare/v1.29.0...v1.29.1) (2021-05-31) + +### Bug Fixes + +* **move-stalled-jobs-to-wait:** send failedReason to queueEvents ([7c510b5](https://github.com/taskforcesh/bullmq/commit/7c510b542558bd4b1330371b73331f37b97a818d)) ([`2b43133`](https://github.com/taskforcesh/bullmq/commit/2b43133875ed67189ca9f6cf1222bf726a941a85)) + +* chore(release): 1.29.0 [skip ci] + +# [1.29.0](https://github.com/taskforcesh/bullmq/compare/v1.28.2...v1.29.0) (2021-05-31) + +### Features + +* add move to waiting children for manual processing ([#477](https://github.com/taskforcesh/bullmq/issues/477)) ([f312f29](https://github.com/taskforcesh/bullmq/commit/f312f293b8cac79af9c14848ffd1b11b65a806c3)) ([`00a8352`](https://github.com/taskforcesh/bullmq/commit/00a8352c7e772df7f0a42812a330b98e50f45de3)) + +* chore(release): 1.28.2 [skip ci] + +## [1.28.2](https://github.com/taskforcesh/bullmq/compare/v1.28.1...v1.28.2) (2021-05-31) + +### Bug Fixes + +* **obliterate:** remove job logs ([ea91895](https://github.com/taskforcesh/bullmq/commit/ea918950d7696241047a23773cc13cd675209c4b)) ([`499bb93`](https://github.com/taskforcesh/bullmq/commit/499bb93c303052af0a2629dbaddd8916dc020fc4)) + +* chore(release): 1.28.1 [skip ci] + +## [1.28.1](https://github.com/taskforcesh/bullmq/compare/v1.28.0...v1.28.1) (2021-05-31) + +### Bug Fixes + +* **get-workers:** use strict equality on name fixes [#564](https://github.com/taskforcesh/bullmq/issues/564) ([4becfa6](https://github.com/taskforcesh/bullmq/commit/4becfa66e09dacf9830804898c45cb3317dcf438)) ([`f8c3a37`](https://github.com/taskforcesh/bullmq/commit/f8c3a3793d25696fd472ad963441836529f356e7)) + +* chore(release): 1.28.0 [skip ci] + +# [1.28.0](https://github.com/taskforcesh/bullmq/compare/v1.27.0...v1.28.0) (2021-05-24) + +### Features + +* **flow-producer:** expose client connection ([17d4263](https://github.com/taskforcesh/bullmq/commit/17d4263abfa57797535cd8773c4cc316ff5149d2)) ([`a3aa689`](https://github.com/taskforcesh/bullmq/commit/a3aa6892fde7fd81e3ad78d664ffd29bca6be249)) + +* chore(release): 1.27.0 [skip ci] + +# [1.27.0](https://github.com/taskforcesh/bullmq/compare/v1.26.5...v1.27.0) (2021-05-24) + +### Features + +* **repeat:** add immediately opt for repeat ([d095573](https://github.com/taskforcesh/bullmq/commit/d095573f8e7ce5911f777df48368382eceb99d6a)) ([`9bad41e`](https://github.com/taskforcesh/bullmq/commit/9bad41e6947f1b16e33839742f055b6c5c2c5bc5)) + +* chore(release): 1.26.5 [skip ci] + +## [1.26.5](https://github.com/taskforcesh/bullmq/compare/v1.26.4...v1.26.5) (2021-05-21) + +### Bug Fixes + +* **movetofinished:** use parent queue for events ([1b17b62](https://github.com/taskforcesh/bullmq/commit/1b17b62a794728a318f1079e73d07e33fe65c9c7)) ([`a283a2b`](https://github.com/taskforcesh/bullmq/commit/a283a2b78a325eb8e7a0531bfe50f726326741c8)) + +* chore(release): 1.26.4 [skip ci] + +## [1.26.4](https://github.com/taskforcesh/bullmq/compare/v1.26.3...v1.26.4) (2021-05-20) + +### Bug Fixes + +* **removejob:** delete processed hash ([a2a5058](https://github.com/taskforcesh/bullmq/commit/a2a5058f18ab77ed4d0114d48f47e6144d632cbf)) ([`c3887d6`](https://github.com/taskforcesh/bullmq/commit/c3887d6ced3035f9a8c2221bd2403427db816fb3)) + +* chore(release): 1.26.3 [skip ci] + +## [1.26.3](https://github.com/taskforcesh/bullmq/compare/v1.26.2...v1.26.3) (2021-05-19) + +### Bug Fixes + +* ensure connection reconnects when pausing fixes [#160](https://github.com/taskforcesh/bullmq/issues/160) ([f38fee8](https://github.com/taskforcesh/bullmq/commit/f38fee84def75dd8a38cbb8bfb5aa662485ddf91)) ([`0eb67d5`](https://github.com/taskforcesh/bullmq/commit/0eb67d5b7b41ca92de35ea24b49e05870fd863b1)) + +* chore(release): 1.26.2 [skip ci] + +## [1.26.2](https://github.com/taskforcesh/bullmq/compare/v1.26.1...v1.26.2) (2021-05-18) + +### Bug Fixes + +* **getjoblogs:** no reversed pagination ([fb0c3a5](https://github.com/taskforcesh/bullmq/commit/fb0c3a50f0d37851a8f35cb4c478259a63d93461)) ([`09bf324`](https://github.com/taskforcesh/bullmq/commit/09bf324ef30d8f6b11ff2e6cb547da467d612d74)) + +* chore: rename CHANGELOG ([`018f10b`](https://github.com/taskforcesh/bullmq/commit/018f10b00d229b0c7fc218a4546670ee9b47e40d)) + +* chore(release): 1.26.1 [skip ci] + +## [1.26.1](https://github.com/taskforcesh/bullmq/compare/v1.26.0...v1.26.1) (2021-05-17) + +### Bug Fixes + +* **flow-producer:** use custom jobId as parentId for children, fixes [#552](https://github.com/taskforcesh/bullmq/issues/552) ([645b576](https://github.com/taskforcesh/bullmq/commit/645b576c1aabd8426ab77a68c199a594867cd729)) ([`a907c6e`](https://github.com/taskforcesh/bullmq/commit/a907c6e56c76b601e0f7ae3db64db7e08355d717)) + +* chore(release): 1.26.0 [skip ci] + +# [1.26.0](https://github.com/taskforcesh/bullmq/compare/v1.25.2...v1.26.0) (2021-05-17) + +### Features + +* **custombackoff:** provide job as third parameter ([ddaf8dc](https://github.com/taskforcesh/bullmq/commit/ddaf8dc2f95ca336cb117a540edd4640d5d579e4)) ([`2656566`](https://github.com/taskforcesh/bullmq/commit/26565660b410c9c38adee13ecbe274b934d2cd64)) + +* chore(release): 1.25.2 [skip ci] + +## [1.25.2](https://github.com/taskforcesh/bullmq/compare/v1.25.1...v1.25.2) (2021-05-17) + +### Bug Fixes + +* **flow-producer:** process parent with children as empty array, fixes [#547](https://github.com/taskforcesh/bullmq/issues/547) ([48168f0](https://github.com/taskforcesh/bullmq/commit/48168f07cbaed7ed522c68d127a0c7d5e4cb380e)) ([`f7601d7`](https://github.com/taskforcesh/bullmq/commit/f7601d7edb36398cf7070c927709c191cabbaebe)) + +* chore: fix changelog file ([`5a9d530`](https://github.com/taskforcesh/bullmq/commit/5a9d530b027bbb8d44af82b2e4f954e8a013d6da)) + +* chore(release): 1.25.1 [skip ci] + +## [1.25.1](https://github.com/taskforcesh/bullmq/compare/v1.25.0...v1.25.1) (2021-05-13) + +### Bug Fixes + +* **addbulk:** should not consider repeat option ([c85357e](https://github.com/taskforcesh/bullmq/commit/c85357e415b9ea66f845f751a4943b5c48c2bb18)) ([`0c50dbf`](https://github.com/taskforcesh/bullmq/commit/0c50dbf958d5778293bfdde5dc2a22c60f6658c3)) + +* chore(release): 1.25.0 [skip ci] + +# [1.25.0](https://github.com/taskforcesh/bullmq/compare/v1.24.5...v1.25.0) (2021-05-11) + +### Features + +* **job:** add sizeLimit option when creating a job ([f10aeeb](https://github.com/taskforcesh/bullmq/commit/f10aeeb62520d20b31d35440524d147ac4adcc9c)) ([`c687877`](https://github.com/taskforcesh/bullmq/commit/c687877156b49feb5228e472750ad8274a454630)) + +* chore(release): 1.24.5 [skip ci] + +## [1.24.5](https://github.com/taskforcesh/bullmq/compare/v1.24.4...v1.24.5) (2021-05-08) + +### Bug Fixes + +* **deps:** upgrading lodash to 4.17.21 ([6e90c3f](https://github.com/taskforcesh/bullmq/commit/6e90c3f0a3d2735875ebf44457b342629aa14572)) ([`d7f8e47`](https://github.com/taskforcesh/bullmq/commit/d7f8e4704feff803399be8a4771967fdc0dd8f3c)) + +* chore(release): 1.24.4 [skip ci] + +## [1.24.4](https://github.com/taskforcesh/bullmq/compare/v1.24.3...v1.24.4) (2021-05-07) + +### Bug Fixes + +* **cluster:** add redis cluster support ([5a7dd14](https://github.com/taskforcesh/bullmq/commit/5a7dd145bd3ae11850cac6d1b4fb9b01af0e6766)) +* **redisclient:** not reference types from import ([022fc04](https://github.com/taskforcesh/bullmq/commit/022fc042a17c1754af7d74acabb7dd5c397576ab)) ([`4c55cfd`](https://github.com/taskforcesh/bullmq/commit/4c55cfdc011101ec2a9598bf470d0113949f1281)) + +* chore(release): 1.24.3 [skip ci] + +## [1.24.3](https://github.com/taskforcesh/bullmq/compare/v1.24.2...v1.24.3) (2021-05-05) + +### Bug Fixes + +* **sandbox:** properly redirect stdout ([#525](https://github.com/taskforcesh/bullmq/issues/525)) ([c8642a0](https://github.com/taskforcesh/bullmq/commit/c8642a0724dc3d2f77abc4b5d6d24efa67c1e592)) ([`caacaee`](https://github.com/taskforcesh/bullmq/commit/caacaeef3147871f9dc1e9849dbffbfd6e8101b4)) + +* chore(release): 1.24.2 [skip ci] + +## [1.24.2](https://github.com/taskforcesh/bullmq/compare/v1.24.1...v1.24.2) (2021-05-05) + +### Bug Fixes + +* **sandbox:** handle broken processor files ([2326983](https://github.com/taskforcesh/bullmq/commit/23269839af0be2f7cf2a4f6062563d30904bc259)) ([`6bdacb8`](https://github.com/taskforcesh/bullmq/commit/6bdacb8a37b85c0d98fdbf501b044aab97f90e28)) + +* chore(release): 1.24.1 [skip ci] + +## [1.24.1](https://github.com/taskforcesh/bullmq/compare/v1.24.0...v1.24.1) (2021-05-05) + +### Bug Fixes + +* **queueevents:** add active type fixes [#519](https://github.com/taskforcesh/bullmq/issues/519) ([10af883](https://github.com/taskforcesh/bullmq/commit/10af883db849cf9392b26724903f88752d9be92c)) ([`7679ada`](https://github.com/taskforcesh/bullmq/commit/7679ada2038ae6c3a3bc66a0f46604e1e47e4950)) + +* chore: replace tslint with eslint ([`5770aef`](https://github.com/taskforcesh/bullmq/commit/5770aef2cc8fd450b619f154236b77b1a0181605)) + +* chore(release): 1.24.0 [skip ci] + +# [1.24.0](https://github.com/taskforcesh/bullmq/compare/v1.23.1...v1.24.0) (2021-05-03) + +### Features + +* add option for non-blocking getNextJob ([13ce2cf](https://github.com/taskforcesh/bullmq/commit/13ce2cfd4ccd64f45567df31de11af95b0fe67d9)) ([`b75b4f1`](https://github.com/taskforcesh/bullmq/commit/b75b4f1b0d63a83f93870c539201aae486782756)) + +* chore(release): 1.23.1 [skip ci] + +## [1.23.1](https://github.com/taskforcesh/bullmq/compare/v1.23.0...v1.23.1) (2021-05-03) + +### Bug Fixes + +* add return type for job.waitUntilFinished() ([59ede97](https://github.com/taskforcesh/bullmq/commit/59ede976061a738503f70d9eb0c92a4b1d6ae4a3)) ([`ed35d24`](https://github.com/taskforcesh/bullmq/commit/ed35d24d1f1e8f810a0a4825c6d7e3732772d7c8)) + +* chore(release): 1.23.0 [skip ci] + +# [1.23.0](https://github.com/taskforcesh/bullmq/compare/v1.22.2...v1.23.0) (2021-04-30) + +### Features + +* **job:** pass parent opts to addBulk ([7f21615](https://github.com/taskforcesh/bullmq/commit/7f216153293e45c4f33f2592561c925ca4464d44)) ([`3283af2`](https://github.com/taskforcesh/bullmq/commit/3283af26c1fead3c3395bf2fc82790cb0772380f)) + +* chore(release): 1.22.2 [skip ci] + +## [1.22.2](https://github.com/taskforcesh/bullmq/compare/v1.22.1...v1.22.2) (2021-04-29) + +### Bug Fixes + +* add missing Redis Cluster types fixes [#406](https://github.com/taskforcesh/bullmq/issues/406) ([07743ff](https://github.com/taskforcesh/bullmq/commit/07743ff310ad716802afdd5bdc6844eb5296318e)) ([`277997d`](https://github.com/taskforcesh/bullmq/commit/277997d0162761921870828e6bf0073d177dc1a4)) + +* chore(release): 1.22.1 [skip ci] + +## [1.22.1](https://github.com/taskforcesh/bullmq/compare/v1.22.0...v1.22.1) (2021-04-28) + +### Bug Fixes + +* **addjob:** fix redis cluster CROSSSLOT ([a5fd1d7](https://github.com/taskforcesh/bullmq/commit/a5fd1d7a0713585d11bd862bfe2d426d5242bd3c)) ([`b34ccd1`](https://github.com/taskforcesh/bullmq/commit/b34ccd1a91f20354ec7a517c54ba4b0ea708f3d3)) + +* chore: barrel export of FlowJob interface ([`c13da36`](https://github.com/taskforcesh/bullmq/commit/c13da36f939f42b8e72a499c5d0b495d7fde8a14)) + +* chore(release): 1.22.0 [skip ci] + +# [1.22.0](https://github.com/taskforcesh/bullmq/compare/v1.21.0...v1.22.0) (2021-04-28) + +### Features + +* **jobcreate:** allow passing parent in job.create ([ede3626](https://github.com/taskforcesh/bullmq/commit/ede3626b65fb5d3f4cebc55c813e9fa4b482b887)) ([`a7cb577`](https://github.com/taskforcesh/bullmq/commit/a7cb57704e4662b15a49228bbee56b346ee56d06)) + +* chore(release): 1.21.0 [skip ci] + +# [1.21.0](https://github.com/taskforcesh/bullmq/compare/v1.20.6...v1.21.0) (2021-04-26) + +### Features + +* add typing for addNextRepeatableJob ([a3be937](https://github.com/taskforcesh/bullmq/commit/a3be9379e29ae3e01264e2269e8b03aa614fd42c)) ([`f4d89f0`](https://github.com/taskforcesh/bullmq/commit/f4d89f0d6b8b5461e3738a71f4554f12d68db4e9)) + +* chore(release): 1.20.6 [skip ci] + +## [1.20.6](https://github.com/taskforcesh/bullmq/compare/v1.20.5...v1.20.6) (2021-04-25) + +### Bug Fixes + +* **movetocompleted:** should not complete before children ([812ff66](https://github.com/taskforcesh/bullmq/commit/812ff664b3e162dd87831ca04ebfdb783cc7ae5b)) ([`7320304`](https://github.com/taskforcesh/bullmq/commit/73203048a5ff085a5d6fe006a1173ca179b8fd5a)) + +* chore(release): 1.20.5 [skip ci] + +## [1.20.5](https://github.com/taskforcesh/bullmq/compare/v1.20.4...v1.20.5) (2021-04-23) + +### Bug Fixes + +* **obliterate:** correctly remove many jobs ([b5ae4ce](https://github.com/taskforcesh/bullmq/commit/b5ae4ce92aeaf000408ffbbcd22d829cee20f2f8)) ([`dacd0c6`](https://github.com/taskforcesh/bullmq/commit/dacd0c66efdba779875239fcab3d18dd6a45e052)) + +* chore(release): 1.20.4 [skip ci] + +## [1.20.4](https://github.com/taskforcesh/bullmq/compare/v1.20.3...v1.20.4) (2021-04-23) + +### Bug Fixes + +* remove internal deps on barrel fixes [#469](https://github.com/taskforcesh/bullmq/issues/469) ([#495](https://github.com/taskforcesh/bullmq/issues/495)) ([60dbeed](https://github.com/taskforcesh/bullmq/commit/60dbeed7ff1d9b6cb0e35590713fee8a7be09477)) ([`9cf71f6`](https://github.com/taskforcesh/bullmq/commit/9cf71f66b965a7cd4d92faf239a0750065b53e1d)) + +* chore(release): 1.20.3 [skip ci] + +## [1.20.3](https://github.com/taskforcesh/bullmq/compare/v1.20.2...v1.20.3) (2021-04-23) + +### Bug Fixes + +* **flows:** correct typings fixes [#492](https://github.com/taskforcesh/bullmq/issues/492) ([a77f80b](https://github.com/taskforcesh/bullmq/commit/a77f80bc07e7627f512323f0dcc9141fe408809e)) ([`3b7c038`](https://github.com/taskforcesh/bullmq/commit/3b7c038a7db24f63b48cbd1d231a6740fef4ea70)) + +* chore(release): 1.20.2 [skip ci] + +## [1.20.2](https://github.com/taskforcesh/bullmq/compare/v1.20.1...v1.20.2) (2021-04-22) + +### Bug Fixes + +* **movetodelayed:** check if job is in active state ([4e63f70](https://github.com/taskforcesh/bullmq/commit/4e63f70aac367d4dd695bbe07c72a08a82a65d97)) ([`582ae51`](https://github.com/taskforcesh/bullmq/commit/582ae517b979d9d07a9c7937c6ff6d3f449c74e9)) + +* chore(release): 1.20.1 [skip ci] + +## [1.20.1](https://github.com/taskforcesh/bullmq/compare/v1.20.0...v1.20.1) (2021-04-22) + +### Bug Fixes + +* **worker:** make token optional in processor function fixes [#490](https://github.com/taskforcesh/bullmq/issues/490) ([3940bd7](https://github.com/taskforcesh/bullmq/commit/3940bd71c6faf3bd5fce572b9c1f11cb5b5d2123)) ([`77cc94b`](https://github.com/taskforcesh/bullmq/commit/77cc94b528f1efb35639eef4a2960c8703f9120b)) + +* chore(npm): just publish dist files (#486) ([`1b06de3`](https://github.com/taskforcesh/bullmq/commit/1b06de395d36a86a9d8e4227e822eb014dafad2c)) + +* chore(release): 1.20.0 [skip ci] + +# [1.20.0](https://github.com/taskforcesh/bullmq/compare/v1.19.3...v1.20.0) (2021-04-21) + +### Features + +* **worker:** passing token in processor function ([2249724](https://github.com/taskforcesh/bullmq/commit/2249724b1bc6fbf40b0291400011f201fd02dab3)) ([`c96032a`](https://github.com/taskforcesh/bullmq/commit/c96032a425a155a8a94c9532d61c70617e4a62d5)) + +* chore(release): 1.19.3 [skip ci] + +## [1.19.3](https://github.com/taskforcesh/bullmq/compare/v1.19.2...v1.19.3) (2021-04-20) + +### Bug Fixes + +* **movetocompleted:** throw an error if job is not in active state ([c2fe5d2](https://github.com/taskforcesh/bullmq/commit/c2fe5d292fcf8ac2e53906c30282df69d43321b1)) ([`0faf083`](https://github.com/taskforcesh/bullmq/commit/0faf08379d6604973686ea1e3643a9603661823c)) + +* chore(release): 1.19.2 [skip ci] + +## [1.19.2](https://github.com/taskforcesh/bullmq/compare/v1.19.1...v1.19.2) (2021-04-19) + +### Bug Fixes + +* **worker:** close base class connection [#451](https://github.com/taskforcesh/bullmq/issues/451) ([0875306](https://github.com/taskforcesh/bullmq/commit/0875306ae801a7cbfe04758dc2481cb86ca2ef69)) ([`7521543`](https://github.com/taskforcesh/bullmq/commit/75215430ab1eb1ac11d447621e42579e026a26b5)) + +* chore(release): 1.19.1 [skip ci] + +## [1.19.1](https://github.com/taskforcesh/bullmq/compare/v1.19.0...v1.19.1) (2021-04-19) + +### Bug Fixes + +* remove repeatable with obliterate ([1c5e581](https://github.com/taskforcesh/bullmq/commit/1c5e581a619ba707863c2a6e9f3e5f6eadfbe64f)) ([`8bccbc3`](https://github.com/taskforcesh/bullmq/commit/8bccbc39412da0c6ff9a2279df7031a3b40763f8)) + +* chore(deps): bump ssri from 6.0.1 to 6.0.2 + +Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2. +- [Release notes](https://github.com/npm/ssri/releases) +- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md) +- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2) + +Signed-off-by: dependabot[bot] <support@github.com> ([`14b2d5e`](https://github.com/taskforcesh/bullmq/commit/14b2d5e2a882f38158b5037eae8ab0e55494bcdb)) + +* chore(release): 1.19.0 [skip ci] + +# [1.19.0](https://github.com/taskforcesh/bullmq/compare/v1.18.2...v1.19.0) (2021-04-19) + +### Features + +* add workerDelay option to limiter ([9b6ab8a](https://github.com/taskforcesh/bullmq/commit/9b6ab8ad4bc0a94068f3bc707ad9c0ed01596068)) ([`cee7a02`](https://github.com/taskforcesh/bullmq/commit/cee7a02d8b08fea11bdff26c896fd2afcc82468d)) + +* chore(release): 1.18.2 [skip ci] + +## [1.18.2](https://github.com/taskforcesh/bullmq/compare/v1.18.1...v1.18.2) (2021-04-16) + +### Bug Fixes + +* add parentKey property to Job ([febc60d](https://github.com/taskforcesh/bullmq/commit/febc60dba94c29b85be3e1bc2547fa83ed932806)) ([`bc66de0`](https://github.com/taskforcesh/bullmq/commit/bc66de0678ccf93ff8add2e20e4b70870e7b641a)) + +* chore(release): 1.18.1 [skip ci] + +## [1.18.1](https://github.com/taskforcesh/bullmq/compare/v1.18.0...v1.18.1) (2021-04-16) + +### Bug Fixes + +* rename Flow to FlowProducer class ([c64321d](https://github.com/taskforcesh/bullmq/commit/c64321d03e2af7cee88eaf6df6cd2e5b7840ae64)) ([`b43431c`](https://github.com/taskforcesh/bullmq/commit/b43431c47defe0b9a68d64fab8c9e09c953281c3)) + +* chore(release): 1.18.0 [skip ci] + +# [1.18.0](https://github.com/taskforcesh/bullmq/compare/v1.17.0...v1.18.0) (2021-04-16) + +### Features + +* add remove support for flows ([4e8a7ef](https://github.com/taskforcesh/bullmq/commit/4e8a7efd53f918937478ae13f5da7dee9ea9d8b3)) ([`301e0fb`](https://github.com/taskforcesh/bullmq/commit/301e0fb9acc1c21ae129bc7e574ad88a4c53b577)) + +* chore(release): 1.17.0 [skip ci] + +# [1.17.0](https://github.com/taskforcesh/bullmq/compare/v1.16.2...v1.17.0) (2021-04-16) + +### Features + +* **job:** consider waiting-children state ([2916dd5](https://github.com/taskforcesh/bullmq/commit/2916dd5d7ba9438d2eae66436899d32ec8ac0e91)) ([`dcb5f5b`](https://github.com/taskforcesh/bullmq/commit/dcb5f5b12b133a60b4ed09cc083915187c84ed2d)) + +* chore(release): 1.16.2 [skip ci] + +## [1.16.2](https://github.com/taskforcesh/bullmq/compare/v1.16.1...v1.16.2) (2021-04-14) + +### Bug Fixes + +* read lua scripts serially ([69e73b8](https://github.com/taskforcesh/bullmq/commit/69e73b87bc6855623240a7b1a45368a7914b23b7)) ([`ca5db26`](https://github.com/taskforcesh/bullmq/commit/ca5db266d7f2407e16c5edb8d068d5d374a902f8)) + +* chore(release): 1.16.1 [skip ci] + +## [1.16.1](https://github.com/taskforcesh/bullmq/compare/v1.16.0...v1.16.1) (2021-04-12) + +### Bug Fixes + +* **flow:** relative dependency path fixes [#466](https://github.com/taskforcesh/bullmq/issues/466) ([d104bf8](https://github.com/taskforcesh/bullmq/commit/d104bf802d6d1000ac1ccd781fa7a07bce2fe140)) ([`c1b5211`](https://github.com/taskforcesh/bullmq/commit/c1b5211fc6455c2b256094b87bffa3f84ff03c12)) + +* chore(release): 1.16.0 [skip ci] + +# [1.16.0](https://github.com/taskforcesh/bullmq/compare/v1.15.1...v1.16.0) (2021-04-12) + +### Features + +* add support for flows (parent-child dependencies) ([#454](https://github.com/taskforcesh/bullmq/issues/454)) ([362212c](https://github.com/taskforcesh/bullmq/commit/362212c58c4be36b5435df862503699deb8bb79c)) ([`d1254fa`](https://github.com/taskforcesh/bullmq/commit/d1254fadc1060260f82490de9aa4d874d6ddcd52)) + +* chore(deps): upgrade ioredis to 4.25.0 ([`bc533ca`](https://github.com/taskforcesh/bullmq/commit/bc533ca119600f92caca020dd280c1011e849417)) + +* chore(release): 1.15.1 [skip ci] + +## [1.15.1](https://github.com/taskforcesh/bullmq/compare/v1.15.0...v1.15.1) (2021-03-19) + +### Bug Fixes + +* **obliterate:** safer implementation ([82f571f](https://github.com/taskforcesh/bullmq/commit/82f571f2548c61c776b897fd1c5050bb09c8afca)) ([`0e0540e`](https://github.com/taskforcesh/bullmq/commit/0e0540e311abcc366f377f70abf68ede78a279ba)) + +* chore(release): 1.15.0 [skip ci] + +# [1.15.0](https://github.com/taskforcesh/bullmq/compare/v1.14.8...v1.15.0) (2021-03-18) + +### Features + +* add method to "obliterate" a queue, fixes [#430](https://github.com/taskforcesh/bullmq/issues/430) ([624be0e](https://github.com/taskforcesh/bullmq/commit/624be0ed48159c2aa405025938925a723330e0c2)) ([`61d39d5`](https://github.com/taskforcesh/bullmq/commit/61d39d55967037378710c811a2cbb837950e220c)) + +* chore(release): 1.14.8 [skip ci] + +## [1.14.8](https://github.com/taskforcesh/bullmq/compare/v1.14.7...v1.14.8) (2021-03-06) + +### Bug Fixes + +* specify promise type to make TS 4.1 and 4.2 happy. ([#418](https://github.com/taskforcesh/bullmq/issues/418)) ([702f609](https://github.com/taskforcesh/bullmq/commit/702f609b410d8b0652c2d0504a8a67526966fdc3)) ([`cd4d02b`](https://github.com/taskforcesh/bullmq/commit/cd4d02bd8b44366ac3060ebbd00bafcf1c2cea3a)) + +* chore(release): 1.14.7 [skip ci] + +## [1.14.7](https://github.com/taskforcesh/bullmq/compare/v1.14.6...v1.14.7) (2021-02-16) + +### Bug Fixes + +* remove "client" property of QueueBaseOptions ([#324](https://github.com/taskforcesh/bullmq/issues/324)) ([e0b9e71](https://github.com/taskforcesh/bullmq/commit/e0b9e71c4da4a93af54c4386af461c61ab5f146c)) ([`9d0f6e7`](https://github.com/taskforcesh/bullmq/commit/9d0f6e76dfc4f918e039986d9666d5ed485f4904)) + +* chore(release): 1.14.6 [skip ci] + +## [1.14.6](https://github.com/taskforcesh/bullmq/compare/v1.14.5...v1.14.6) (2021-02-16) + +### Bug Fixes + +* remove next job in removeRepeatableByKey fixes [#165](https://github.com/taskforcesh/bullmq/issues/165) ([fb3a7c2](https://github.com/taskforcesh/bullmq/commit/fb3a7c2f429d535dd9f038687d7230d61201defc)) ([`5e6631e`](https://github.com/taskforcesh/bullmq/commit/5e6631e7c3f40b7857d2f73b48abfd3f9d072b35)) + +* chore(release): 1.14.5 [skip ci] + +## [1.14.5](https://github.com/taskforcesh/bullmq/compare/v1.14.4...v1.14.5) (2021-02-16) + +### Bug Fixes + +* add jobId support to repeatable jobs fixes [#396](https://github.com/taskforcesh/bullmq/issues/396) ([c2dc669](https://github.com/taskforcesh/bullmq/commit/c2dc6693a4546e547245bc7ec1e71b4841829619)) ([`c5e3a2a`](https://github.com/taskforcesh/bullmq/commit/c5e3a2a73e0714649a3d975d15a45cbcb255db45)) + +* chore(release): 1.14.4 [skip ci] + +## [1.14.4](https://github.com/taskforcesh/bullmq/compare/v1.14.3...v1.14.4) (2021-02-08) + +### Bug Fixes + +* reconnect at start fixes [#337](https://github.com/taskforcesh/bullmq/issues/337) ([fb33772](https://github.com/taskforcesh/bullmq/commit/fb3377280b3bda04a15a62d2901bdd78b869e08c)) ([`e0f56b3`](https://github.com/taskforcesh/bullmq/commit/e0f56b3ce656cf5b609996905b14caf4d1fcb3ab)) + +* chore(release): 1.14.3 [skip ci] + +## [1.14.3](https://github.com/taskforcesh/bullmq/compare/v1.14.2...v1.14.3) (2021-02-07) + +### Bug Fixes + +* **worker:** avoid possible infinite loop fixes [#389](https://github.com/taskforcesh/bullmq/issues/389) ([d05566e](https://github.com/taskforcesh/bullmq/commit/d05566ec0153f31a1257f7338399fdb55c959487)) ([`8266fcc`](https://github.com/taskforcesh/bullmq/commit/8266fccc4bbac63a2a0509e4df749a2b07fc72d9)) + +* chore(release): 1.14.2 [skip ci] + +## [1.14.2](https://github.com/taskforcesh/bullmq/compare/v1.14.1...v1.14.2) (2021-02-02) + +### Bug Fixes + +* improve job timeout notification by giving the job name and id in the error message ([#387](https://github.com/taskforcesh/bullmq/issues/387)) ([ca886b1](https://github.com/taskforcesh/bullmq/commit/ca886b1f854051aed0888f5b872a64b052b2383e)) ([`c76d3f9`](https://github.com/taskforcesh/bullmq/commit/c76d3f9547fc88c286b171982ff07ce4e6c0ff33)) + +* chore(release): 1.14.1 [skip ci] + +## [1.14.1](https://github.com/taskforcesh/bullmq/compare/v1.14.0...v1.14.1) (2021-02-01) + +### Bug Fixes + +* job finish queue events race condition ([355bca5](https://github.com/taskforcesh/bullmq/commit/355bca5ee128bf4ff37608746f9c6f7cca580eb0)) ([`a14e1ad`](https://github.com/taskforcesh/bullmq/commit/a14e1ada63c884d2a7a4e4f8539ef68230f83bea)) + +* chore(redis-connection): add explicit promise type + +Silences a typescript warning when viewing the file. ([`12441ca`](https://github.com/taskforcesh/bullmq/commit/12441caee941226a6b60b8a8763a7b7edd7d6cc3)) + +* chore(release): 1.14.0 [skip ci] + +# [1.14.0](https://github.com/taskforcesh/bullmq/compare/v1.13.0...v1.14.0) (2021-01-06) + +### Features + +* **job:** expose extendLock as a public method ([17e8431](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)) + +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api + +api-extractor 7.12.1 - https://api-extractor.com/ + +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 + +API Extractor completed with warnings + +api-documenter 7.12.1 - https://api-extractor.com/ + +Reading bullmq.api.json + +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 5.00s. ([`8a2a748`](https://github.com/taskforcesh/bullmq/commit/8a2a748a86ca799fcd72d4b00fc9a10048e46d4c)) + +* chore(release): 1.13.0 [skip ci] + +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) + +### Features + +* **job:** expose extendLock as a public method ([17e8431](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)) +* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) + +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api + +api-extractor 7.12.1 - https://api-extractor.com/ + +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 + +API Extractor completed with warnings + +api-documenter 7.12.1 - https://api-extractor.com/ + +Reading bullmq.api.json + +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 4.76s. ([`a75f4d5`](https://github.com/taskforcesh/bullmq/commit/a75f4d5fc1fa30ea0d537f0a07fbbbbd6f838275)) + +* chore(release): 1.13.0 [skip ci] + +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) + +### Features + +* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) + +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api + +api-extractor 7.12.1 - https://api-extractor.com/ + +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 + +API Extractor completed with warnings + +api-documenter 7.12.1 - https://api-extractor.com/ + +Reading bullmq.api.json + +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 5.09s. ([`6e9a359`](https://github.com/taskforcesh/bullmq/commit/6e9a359a729a7deefa0a7a9a636ae9b8bd2dcf8e)) + +* chore(release): 1.13.0 [skip ci] + +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) + +### Features + +* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) + +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api + +api-extractor 7.12.1 - https://api-extractor.com/ + +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 + +API Extractor completed with warnings + +api-documenter 7.12.1 - https://api-extractor.com/ + +Reading bullmq.api.json + +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 4.75s. ([`8504d5b`](https://github.com/taskforcesh/bullmq/commit/8504d5b9d76bac9f3962e2362df32591b366fdcf)) + +* chore(release): 1.13.0 [skip ci] + +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) + +### Features + +* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) + +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api + +api-extractor 7.12.1 - https://api-extractor.com/ + +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 + +API Extractor completed with warnings + +api-documenter 7.12.1 - https://api-extractor.com/ + +Reading bullmq.api.json + +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 5.06s. ([`1d83485`](https://github.com/taskforcesh/bullmq/commit/1d83485e284033d702ef3364e5436880966fb95a)) + +* chore(release): 1.13.0 [skip ci] + +# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2020-12-30) + +### Features + +* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) + +yarn run v1.22.5 +$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api + +api-extractor 7.12.1 - https://api-extractor.com/ + +Using configuration from ./config/api-extractor.json +Analysis will use the bundled TypeScript version 4.0.5 + +API Extractor completed with warnings + +api-documenter 7.12.1 - https://api-extractor.com/ + +Reading bullmq.api.json + +Deleting old output from docs/gitbook/api +Writing bullmq package +Done in 4.57s. ([`57b37ea`](https://github.com/taskforcesh/bullmq/commit/57b37ea886c9d86912f49d2d8d77cf3f97eda265)) + +* chore: remove api symlink ([`6731f8a`](https://github.com/taskforcesh/bullmq/commit/6731f8a36e2ea88f448034194347ffbeb857d17c)) + +* chore: add api-extractor config ([`6850f87`](https://github.com/taskforcesh/bullmq/commit/6850f874d4b1bcac6fad5df3bc6f5b6f427c2370)) + +* chore(deps-dev): bump semantic-release from 15.14.0 to 17.2.3 + +Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 15.14.0 to 17.2.3. +- [Release notes](https://github.com/semantic-release/semantic-release/releases) +- [Commits](https://github.com/semantic-release/semantic-release/compare/v15.14.0...v17.2.3) + +Signed-off-by: dependabot[bot] <support@github.com> ([`d0b23c7`](https://github.com/taskforcesh/bullmq/commit/d0b23c7f408a8a7b99eaa1215847f4addef9f635)) + +* chore(release): 1.12.3 [skip ci]nn## [1.12.3](https://github.com/taskforcesh/bullmq/compare/v1.12.2...v1.12.3) (2020-12-28) + +### Bug Fixes + +* correctly handle "falsy" data values fixes [#264](https://github.com/taskforcesh/bullmq/issues/264) ([becad91](https://github.com/taskforcesh/bullmq/commit/becad91350fd4ac01037e5b0d4a8a93724dd8dbd)) +* **worker:** setname on worker blocking connection ([645b633](https://github.com/taskforcesh/bullmq/commit/645b6338f5883b0c21ae78007777d86b45422615)) ([`7e84155`](https://github.com/taskforcesh/bullmq/commit/7e841558d9406d4acd6210b4c7e9181fc2b5835b)) + +* chore(release): 1.12.2 [skip ci]nn## [1.12.2](https://github.com/taskforcesh/bullmq/compare/v1.12.1...v1.12.2) (2020-12-23) + +### Bug Fixes + +* catch errors from Repeat ([#348](https://github.com/taskforcesh/bullmq/issues/348)) ([09a1a98](https://github.com/taskforcesh/bullmq/commit/09a1a98fc42dc1a9ae98bfb29c0cca3fac02013f)) ([`971a079`](https://github.com/taskforcesh/bullmq/commit/971a079b1b9e3c1b962821bf759dc8c7c9792a94)) + +* chore(release): 1.12.1 [skip ci]nn## [1.12.1](https://github.com/taskforcesh/bullmq/compare/v1.12.0...v1.12.1) (2020-12-21) + +### Bug Fixes + +* correctly handle "falsy" data values fixes [#264](https://github.com/taskforcesh/bullmq/issues/264) ([cf1dbaf](https://github.com/taskforcesh/bullmq/commit/cf1dbaf7e60d74fc8443a5f8a537455f28a8dba3)) ([`cc1471e`](https://github.com/taskforcesh/bullmq/commit/cc1471ed703b80da8324b7f29404a1120f27d826)) + +* chore(release): 1.12.0 [skip ci]nn# [1.12.0](https://github.com/taskforcesh/bullmq/compare/v1.11.2...v1.12.0) (2020-12-16) + +### Features + +* add ability to get if queue is paused or not ([e98b7d8](https://github.com/taskforcesh/bullmq/commit/e98b7d8973df830cc29e0afc5d86e82c9a7ce76f)) ([`c853787`](https://github.com/taskforcesh/bullmq/commit/c85378794f58574d4b382001f457388e5af8f90b)) + +* chore(release): 1.11.2 [skip ci]nn## [1.11.2](https://github.com/taskforcesh/bullmq/compare/v1.11.1...v1.11.2) (2020-12-15) + +### Bug Fixes + +* promote jobs to the right "list" when paused ([d3df615](https://github.com/taskforcesh/bullmq/commit/d3df615d37b1114c02eacb45f23643ee2f05374d)) ([`49fe957`](https://github.com/taskforcesh/bullmq/commit/49fe95787794e5778bbffd04afe9ba23dc9c9db8)) + +* chore(release): 1.11.1 [skip ci]nn## [1.11.1](https://github.com/taskforcesh/bullmq/compare/v1.11.0...v1.11.1) (2020-12-15) + +### Bug Fixes + +* clientCommandMessageReg to support GCP memorystore v5 ([8408dda](https://github.com/taskforcesh/bullmq/commit/8408dda9fa64fc0b968e88fb2726e0a30f717ed7)) ([`9aba722`](https://github.com/taskforcesh/bullmq/commit/9aba722f41b390b5a5eeeeeba7c51b4f87cd87c7)) + +* chore(deps): bump ini from 1.3.5 to 1.3.7 + +Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. +- [Release notes](https://github.com/isaacs/ini/releases) +- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) + +Signed-off-by: dependabot[bot] <support@github.com> ([`b0121b2`](https://github.com/taskforcesh/bullmq/commit/b0121b216a5853acd88c7948541d2f8678a4a91f)) + +* chore(release): 1.11.0 [skip ci]nn# [1.11.0](https://github.com/taskforcesh/bullmq/compare/v1.10.0...v1.11.0) (2020-11-24) + +### Bug Fixes + +* add generic type to processor ([d4f6501](https://github.com/taskforcesh/bullmq/commit/d4f650120804bd6161f0eeda5162ad5a96811a05)) + +### Features + +* add name and return types to queue, worker and processor ([4879715](https://github.com/taskforcesh/bullmq/commit/4879715ec7c917f11e3a0ac3c5f5126029340ed3)) ([`4495e1d`](https://github.com/taskforcesh/bullmq/commit/4495e1d301e2c16310afabc42ebd284b9ad20363)) + +* chore(release): 1.10.0 [skip ci]nn# [1.10.0](https://github.com/taskforcesh/bullmq/compare/v1.9.0...v1.10.0) (2020-10-20) + +### Bug Fixes + +* **job:** remove listeners before resolving promise ([563ce92](https://github.com/taskforcesh/bullmq/commit/563ce9218f5dd81f2bc836f9e8ccdedc549f09dd)) +* **worker:** continue processing if handleFailed fails. fixes [#286](https://github.com/taskforcesh/bullmq/issues/286) ([4ef1cbc](https://github.com/taskforcesh/bullmq/commit/4ef1cbc13d53897b57ae3d271afbaa1b213824aa)) +* **worker:** fix memory leak on Promise.race ([#282](https://github.com/taskforcesh/bullmq/issues/282)) ([a78ab2b](https://github.com/taskforcesh/bullmq/commit/a78ab2b362e54f897eec6c8b16f16ecccf7875c2)) +* **worker:** setname on worker blocking connection ([#291](https://github.com/taskforcesh/bullmq/issues/291)) ([50a87fc](https://github.com/taskforcesh/bullmq/commit/50a87fcb1dab976a6a0273d2b0cc4b31b63c015f)) +* remove async for loop in child pool fixes [#229](https://github.com/taskforcesh/bullmq/issues/229) ([d77505e](https://github.com/taskforcesh/bullmq/commit/d77505e989cd1395465c5222613555f79e4d9720)) + +### Features + +* **sandbox:** kill child workers gracefully ([#243](https://github.com/taskforcesh/bullmq/issues/243)) ([4262837](https://github.com/taskforcesh/bullmq/commit/4262837bc67e007fe44606670dce48ee7fec65cd)) ([`c03219c`](https://github.com/taskforcesh/bullmq/commit/c03219c38fcf42957b705384dd1fb4bfaa86b075)) + +* chore(release): 1.9.0 [skip ci]nn# [1.9.0](https://github.com/taskforcesh/bullmq/compare/v1.8.14...v1.9.0) (2020-07-19) + +### Features + +* add grouped rate limiting ([3a958dd](https://github.com/taskforcesh/bullmq/commit/3a958dd30d09a049b0d761679d3b8d92709e815e)) ([`30aa033`](https://github.com/taskforcesh/bullmq/commit/30aa0330dd2a8fbe3f692b3e3fc6091a4f0593af)) + +* chore(deps): bump lodash from 4.17.15 to 4.17.19 + +Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. +- [Release notes](https://github.com/lodash/lodash/releases) +- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) + +Signed-off-by: dependabot[bot] <support@github.com> ([`7f986fc`](https://github.com/taskforcesh/bullmq/commit/7f986fc17c067263238fbe1e285ff0ef08570445)) + +* chore(release): 1.8.14 [skip ci]nn## [1.8.14](https://github.com/taskforcesh/bullmq/compare/v1.8.13...v1.8.14) (2020-07-03) + +### Bug Fixes + +* **typescript:** fix typings, upgrade ioredis dependencies ([#220](https://github.com/taskforcesh/bullmq/issues/220)) ([7059f20](https://github.com/taskforcesh/bullmq/commit/7059f2089553a206ab3937f7fd0d0b9de96aa7b7)) +* **worker:** return this.closing when calling close ([b68c845](https://github.com/taskforcesh/bullmq/commit/b68c845c77de6b2973ec31d2f22958ab60ad87aa)) ([`3f3f2a9`](https://github.com/taskforcesh/bullmq/commit/3f3f2a9563387312e7dd14a0efaa5f87ff3b71c3)) + +* chore(release): 1.8.13 [skip ci]nn## [1.8.13](https://github.com/taskforcesh/bullmq/compare/v1.8.12...v1.8.13) (2020-06-05) + +### Bug Fixes + +* **redis-connection:** run the load command for reused redis client ([fab9bba](https://github.com/taskforcesh/bullmq/commit/fab9bba4caee8fd44523febb3bde588b151e8514)) ([`47d0827`](https://github.com/taskforcesh/bullmq/commit/47d0827b225bab4420647bfcd5eb551db0175269)) + +* chore(release): 1.8.12 [skip ci]nn## [1.8.12](https://github.com/taskforcesh/bullmq/compare/v1.8.11...v1.8.12) (2020-06-04) + +### Bug Fixes + +* remove unused options ([23aadc3](https://github.com/taskforcesh/bullmq/commit/23aadc300b947693f4afb22296d236a924bd11ca)) ([`5e808ad`](https://github.com/taskforcesh/bullmq/commit/5e808ad92ab510400b4f5f223db3e0b4ed6af09c)) + +* chore(release): 1.8.11 [skip ci]nn## [1.8.11](https://github.com/taskforcesh/bullmq/compare/v1.8.10...v1.8.11) (2020-05-29) + +### Bug Fixes + +* **scheduler:** remove unnecessary division by 4096 ([4d25e95](https://github.com/taskforcesh/bullmq/commit/4d25e95f9522388bd85e932e04b6668e3da57686)) ([`c608a3f`](https://github.com/taskforcesh/bullmq/commit/c608a3fdf7e7c9031998a5695d387eb2a7797b6f)) + +* chore(release): 1.8.10 [skip ci]nn## [1.8.10](https://github.com/taskforcesh/bullmq/compare/v1.8.9...v1.8.10) (2020-05-28) + +### Bug Fixes + +* **scheduler:** divide timestamp by 4096 in update set fixes [#168](https://github.com/taskforcesh/bullmq/issues/168) ([0c5db83](https://github.com/taskforcesh/bullmq/commit/0c5db8391bb8994bee19f25a33efb9dfee792d7b)) ([`183137a`](https://github.com/taskforcesh/bullmq/commit/183137a8f4c9dafada20096ee07aba4bd1ecb35a)) + +* chore(release): 1.8.9 [skip ci]nn## [1.8.9](https://github.com/taskforcesh/bullmq/compare/v1.8.8...v1.8.9) (2020-05-25) + +### Bug Fixes + +* **scheduler:** divide next timestamp by 4096 ([#204](https://github.com/taskforcesh/bullmq/issues/204)) ([9562d74](https://github.com/taskforcesh/bullmq/commit/9562d74625e20b7b6de8750339c85345ba027357)) ([`e126c25`](https://github.com/taskforcesh/bullmq/commit/e126c25e61b36f484a7b4b753be4789001b8dcf8)) + +* chore(deps): bump jquery from 3.4.1 to 3.5.1 + +Bumps [jquery](https://github.com/jquery/jquery) from 3.4.1 to 3.5.1. +- [Release notes](https://github.com/jquery/jquery/releases) +- [Commits](https://github.com/jquery/jquery/compare/3.4.1...3.5.1) + +Signed-off-by: dependabot[bot] <support@github.com> ([`6ec5517`](https://github.com/taskforcesh/bullmq/commit/6ec5517d5de6a55482f0fb598367b64c1c65cdef)) + +* chore(release): 1.8.8 [skip ci]nn## [1.8.8](https://github.com/taskforcesh/bullmq/compare/v1.8.7...v1.8.8) (2020-05-25) + +### Bug Fixes + +* **queue-base:** error event is passed through ([ad14e77](https://github.com/taskforcesh/bullmq/commit/ad14e777171c0c44b7e50752d9847dec23f46158)) +* **redis-connection:** error event is passed through ([a15b1a1](https://github.com/taskforcesh/bullmq/commit/a15b1a1824c6863ecf3e5132e22924fc3ff161f6)) +* **worker:** error event is passed through ([d7f0374](https://github.com/taskforcesh/bullmq/commit/d7f03749ce300e917399a435a3f426e66145dd8c)) ([`75eeef2`](https://github.com/taskforcesh/bullmq/commit/75eeef2031fb862fd35b769cf81d12642bad811c)) + +* chore(release): 1.8.7 [skip ci]nn## [1.8.7](https://github.com/taskforcesh/bullmq/compare/v1.8.6...v1.8.7) (2020-04-10) + +### Bug Fixes + +* **worker:** do not use global child pool fixes [#172](https://github.com/taskforcesh/bullmq/issues/172) ([bc65f26](https://github.com/taskforcesh/bullmq/commit/bc65f26dd47c59d0a7277ac947140405557be9a5)) ([`5ef3e12`](https://github.com/taskforcesh/bullmq/commit/5ef3e12afc936b0db23de6787cf62ec9bd262f42)) + +* chore(release): 1.8.6 [skip ci]nn## [1.8.6](https://github.com/taskforcesh/bullmq/compare/v1.8.5...v1.8.6) (2020-04-10) + +### Bug Fixes + +* **workers:** do not call super.close() ([ebd2ae1](https://github.com/taskforcesh/bullmq/commit/ebd2ae1a5613d71643c5a7ba3f685d77585de68e)) +* make sure closing is returned in every close call ([88c5948](https://github.com/taskforcesh/bullmq/commit/88c5948d33a9a7b7a4f4f64f3183727b87d80207)) +* **scheduler:** duplicate connections fixes [#174](https://github.com/taskforcesh/bullmq/issues/174) ([011b8ac](https://github.com/taskforcesh/bullmq/commit/011b8acfdec54737d94a9fead2423e060e3364db)) +* **worker:** return this.closing when calling close ([06d3d4f](https://github.com/taskforcesh/bullmq/commit/06d3d4f476444a2d2af8538d60cb2561a1915868)) ([`4654721`](https://github.com/taskforcesh/bullmq/commit/46547217fe04853b50d29b83d95c1e6f29a184de)) + +* chore(release): 1.8.5 [skip ci]nn## [1.8.5](https://github.com/taskforcesh/bullmq/compare/v1.8.4...v1.8.5) (2020-04-05) + +### Bug Fixes + +* removed deprecated and unused node-uuid ([c810579](https://github.com/taskforcesh/bullmq/commit/c810579029d33ef47d5a7563e63126a69c62fd87)) ([`88ef30b`](https://github.com/taskforcesh/bullmq/commit/88ef30b1ff2ec0a037bf2cd69e8558687bbeb70e)) + +* chore(release): 1.8.4 [skip ci]nn## [1.8.4](https://github.com/taskforcesh/bullmq/compare/v1.8.3...v1.8.4) (2020-03-17) + +### Bug Fixes + +* **job:** added nullable/optional properties ([cef134f](https://github.com/taskforcesh/bullmq/commit/cef134f7c4d87e1b80ba42a5e06c3877956ff4cc)) ([`5c656cb`](https://github.com/taskforcesh/bullmq/commit/5c656cb231e0d001f3c18937cfb6b11b1f4f480d)) + +* chore(release): 1.8.3 [skip ci]nn## [1.8.3](https://github.com/taskforcesh/bullmq/compare/v1.8.2...v1.8.3) (2020-03-13) + +### Bug Fixes + +* **sandbox:** If the child process is killed, remove it from the pool. ([8fb0fb5](https://github.com/taskforcesh/bullmq/commit/8fb0fb569a0236b37d3bae06bf58a2a1da3221c6)) ([`acf3159`](https://github.com/taskforcesh/bullmq/commit/acf3159650b9afabc23db4db6d8a445e3ec02b72)) + +* chore(release): 1.8.2 [skip ci]nn## [1.8.2](https://github.com/taskforcesh/bullmq/compare/v1.8.1...v1.8.2) (2020-03-03) + +### Bug Fixes + +* restore the Job timestamp when deserializing JSON data ([#138](https://github.com/taskforcesh/bullmq/issues/138)) ([#152](https://github.com/taskforcesh/bullmq/issues/152)) ([c171bd4](https://github.com/taskforcesh/bullmq/commit/c171bd47f7b75378e75307a1decdc0f630ac1cd6)) ([`b96f5ba`](https://github.com/taskforcesh/bullmq/commit/b96f5ba3e9c36182174300af629b34fe43c62ecd)) + +* chore(release): 1.8.1 [skip ci]nn## [1.8.1](https://github.com/taskforcesh/bullmq/compare/v1.8.0...v1.8.1) (2020-03-02) + +### Bug Fixes + +* modified imports to work when esModuleInterop is disabled ([#132](https://github.com/taskforcesh/bullmq/issues/132)) ([01681f2](https://github.com/taskforcesh/bullmq/commit/01681f282bafac2df2c602edb51d6bde3483896c)) ([`fccacee`](https://github.com/taskforcesh/bullmq/commit/fccacee7164155ea1fdf5bee163dd56103cfb223)) + +* chore(release): 1.8.0 [skip ci]nn# [1.8.0](https://github.com/taskforcesh/bullmq/compare/v1.7.0...v1.8.0) (2020-03-02) + +### Bug Fixes + +* cleanup signatures for queue add and addBulk ([#127](https://github.com/taskforcesh/bullmq/issues/127)) ([48e221b](https://github.com/taskforcesh/bullmq/commit/48e221b53909079a4def9c48c1b69cebabd0ed74)) +* exit code 12 when using inspect with child process ([#137](https://github.com/taskforcesh/bullmq/issues/137)) ([43ebc67](https://github.com/taskforcesh/bullmq/commit/43ebc67cec3e8f283f9a555b4466cf918226687b)) + +### Features + +* **types:** add sandboxed job processor types ([#114](https://github.com/taskforcesh/bullmq/issues/114)) ([a50a88c](https://github.com/taskforcesh/bullmq/commit/a50a88cd1658fa9d568235283a4c23a74eb8ed2a)) ([`5cde2fa`](https://github.com/taskforcesh/bullmq/commit/5cde2faa699344ffa3c948aea2214723eeda37d1)) + +* chore(release): 1.7.0 [skip ci]nn# [1.7.0](https://github.com/taskforcesh/bullmq/compare/v1.6.8...v1.7.0) (2020-03-02) + +### Features + +* made queue name publicly readable for [#140](https://github.com/taskforcesh/bullmq/issues/140) ([f2bba2e](https://github.com/taskforcesh/bullmq/commit/f2bba2efd9d85986b01bb35c847a232b5c42ae57)) ([`dbf19de`](https://github.com/taskforcesh/bullmq/commit/dbf19de422b889574aa055ad08f677050bffb762)) + +* chore(release): 1.6.8 [skip ci]nn## [1.6.8](https://github.com/taskforcesh/bullmq/compare/v1.6.7...v1.6.8) (2020-02-22) + +### Bug Fixes + +* modified QueueGetters.getJob and Job.fromId to also return null to ([65183fc](https://github.com/taskforcesh/bullmq/commit/65183fcf542d0227ec1d4d6637b46b5381331787)) +* modified QueueGetters.getJob and Job.fromId to return undefined ([ede352b](https://github.com/taskforcesh/bullmq/commit/ede352be75ffe05bf633516db9eda88467c562bf)) ([`293ef56`](https://github.com/taskforcesh/bullmq/commit/293ef569460d076bdedc62f60e3d520fa6ccab33)) + +* chore(release): 1.6.7 [skip ci]nn## [1.6.7](https://github.com/taskforcesh/bullmq/compare/v1.6.6...v1.6.7) (2020-01-16) + +### Bug Fixes + +* don't fail a job when the worker already lost the lock ([23c0bf7](https://github.com/taskforcesh/bullmq/commit/23c0bf70eab6d166b0483336f103323d1bf2ca64)) ([`9d796a1`](https://github.com/taskforcesh/bullmq/commit/9d796a14258061e4b52063150e1d307799ce9019)) + +* chore(release): 1.6.6 [skip ci]nn## [1.6.6](https://github.com/taskforcesh/bullmq/compare/v1.6.5...v1.6.6) (2020-01-05) + +### Bug Fixes + +* remove duplicate active entry ([1d2cca3](https://github.com/taskforcesh/bullmq/commit/1d2cca38ee61289adcee4899a91f7dcbc93a7c05)) ([`6553a20`](https://github.com/taskforcesh/bullmq/commit/6553a204dbd9c08e84fc4e173b5363610a789ad5)) + +* chore(release): 1.6.5 [skip ci]nn## [1.6.5](https://github.com/taskforcesh/bullmq/compare/v1.6.4...v1.6.5) (2020-01-05) + +### Bug Fixes + +* get rid of flushdb/flushall in tests ([550c67b](https://github.com/taskforcesh/bullmq/commit/550c67b25de5f6d800e5e317398044cd16b85924)) ([`0097592`](https://github.com/taskforcesh/bullmq/commit/00975929ec559594bafb8fa1c4c7e75f87db912a)) + +* chore(release): 1.6.4 [skip ci]nn## [1.6.4](https://github.com/taskforcesh/bullmq/compare/v1.6.3...v1.6.4) (2020-01-05) + +### Bug Fixes + +* delete logs when cleaning jobs in set ([b11c6c7](https://github.com/taskforcesh/bullmq/commit/b11c6c7c9f4f1c49eac93b98fdc93ac8f861c8b2)) ([`d3b0ab0`](https://github.com/taskforcesh/bullmq/commit/d3b0ab09b5aeb3bc88b42f9e38efab0724dfa08f)) + +* chore(release): 1.6.3 [skip ci]nn## [1.6.3](https://github.com/taskforcesh/bullmq/compare/v1.6.2...v1.6.3) (2020-01-01) + +### Bug Fixes + +* add tslib dependency fixes [#65](https://github.com/taskforcesh/bullmq/issues/65) ([7ad7995](https://github.com/taskforcesh/bullmq/commit/7ad799544a9c30b30aa96df8864119159c9a1185)) ([`e4c47ae`](https://github.com/taskforcesh/bullmq/commit/e4c47aefb16df401e0a8a84981e2cce233a550ec)) + +* chore(release): 1.6.2 [skip ci]nn## [1.6.2](https://github.com/taskforcesh/bullmq/compare/v1.6.1...v1.6.2) (2019-12-16) + +### Bug Fixes + +* change default QueueEvents lastEventId to $ ([3c5b01d](https://github.com/taskforcesh/bullmq/commit/3c5b01d16ee1442f5802a0fe4e7675c14f7a7f1f)) +* ensure QE ready before adding test events ([fd190f4](https://github.com/taskforcesh/bullmq/commit/fd190f4be792b03273481c8aaf73be5ca42663d1)) +* explicitly test the behavior of .on and .once ([ea11087](https://github.com/taskforcesh/bullmq/commit/ea11087b292d9325105707b53f92ac61c334a147)) ([`9b4042d`](https://github.com/taskforcesh/bullmq/commit/9b4042da2977178d007cb4f07686be897172792b)) + +* chore(release): 1.6.1 [skip ci]nn## [1.6.1](https://github.com/taskforcesh/bullmq/compare/v1.6.0...v1.6.1) (2019-12-16) + +### Bug Fixes + +* check of existing redis instance ([dd466b3](https://github.com/taskforcesh/bullmq/commit/dd466b332b03b430108126531d59ff9e66ce9521)) ([`5410d23`](https://github.com/taskforcesh/bullmq/commit/5410d23b2cf7d19bf14c4c089874b9630237fa42)) + +* chore(deps): bump npm from 6.12.0 to 6.13.4 + +Bumps [npm](https://github.com/npm/cli) from 6.12.0 to 6.13.4. +- [Release notes](https://github.com/npm/cli/releases) +- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md) +- [Commits](https://github.com/npm/cli/compare/v6.12.0...v6.13.4) + +Signed-off-by: dependabot[bot] <support@github.com> ([`4780be2`](https://github.com/taskforcesh/bullmq/commit/4780be24fe8233f778fbb871bef2cafe9a0c37fe)) + +* chore(release): 1.6.0 [skip ci]nn# [1.6.0](https://github.com/taskforcesh/bullmq/compare/v1.5.0...v1.6.0) (2019-12-12) + +### Features + +* add generic type to job data and return value ([87c0531](https://github.com/taskforcesh/bullmq/commit/87c0531efc2716db37f8a0886848cdb786709554)) ([`fd5e524`](https://github.com/taskforcesh/bullmq/commit/fd5e524d7435df6ad0c1c805b9ed56293fc39101)) + +* chore(release): 1.5.0 [skip ci]nn# [1.5.0](https://github.com/taskforcesh/bullmq/compare/v1.4.3...v1.5.0) (2019-11-22) + +### Features + +* remove delay dependency ([97e1a30](https://github.com/taskforcesh/bullmq/commit/97e1a3015d853e615ddd623af07f12a194ccab2c)) +* remove dependence on Bluebird.delay [#67](https://github.com/taskforcesh/bullmq/issues/67) ([bedbaf2](https://github.com/taskforcesh/bullmq/commit/bedbaf25af6479e387cd7548e246dca7c72fc140)) ([`e8e37cf`](https://github.com/taskforcesh/bullmq/commit/e8e37cf2da26d1f67f21e3bd94da65025e7bde8f)) + +* chore(release): 1.4.3 [skip ci]nn## [1.4.3](https://github.com/taskforcesh/bullmq/compare/v1.4.2...v1.4.3) (2019-11-21) + +### Bug Fixes + +* check in moveToFinished to use default val for opts.maxLenEvents ([d1118aa](https://github.com/taskforcesh/bullmq/commit/d1118aab77f755b4a65e3dd8ea2e195baf3d2602)) ([`136f087`](https://github.com/taskforcesh/bullmq/commit/136f0879bb28d4b6c2e860f11fc6d65446ac6900)) + +* chore(release): 1.4.2 [skip ci]nn## [1.4.2](https://github.com/taskforcesh/bullmq/compare/v1.4.1...v1.4.2) (2019-11-21) + +### Bug Fixes + +* avoid Job<->Queue circular json error ([5752727](https://github.com/taskforcesh/bullmq/commit/5752727a6294e1b8d35f6a49e4953375510e10e6)) +* avoid the .toJSON serializer interface [#70](https://github.com/taskforcesh/bullmq/issues/70) ([5941b82](https://github.com/taskforcesh/bullmq/commit/5941b82b646e46d53970197a404e5ea54f09d008)) ([`371ef07`](https://github.com/taskforcesh/bullmq/commit/371ef07fbb61c5ad490061c9571dbd8df9f6ab47)) + +* chore(release): 1.4.1 [skip ci]nn## [1.4.1](https://github.com/taskforcesh/bullmq/compare/v1.4.0...v1.4.1) (2019-11-08) + +### Bug Fixes + +* default job settings [#58](https://github.com/taskforcesh/bullmq/issues/58) ([667fc6e](https://github.com/taskforcesh/bullmq/commit/667fc6e00ae4d6da639d285a104fb67e01c95bbd)) ([`ad1fc3c`](https://github.com/taskforcesh/bullmq/commit/ad1fc3c19d5c02382989a7e1cb72b807b743465c)) + +* chore(release): 1.4.0 [skip ci]nn# [1.4.0](https://github.com/taskforcesh/bullmq/compare/v1.3.0...v1.4.0) (2019-11-06) + +### Features + +* job.progress() return last progress for sandboxed processors ([5c4b146](https://github.com/taskforcesh/bullmq/commit/5c4b146ca8e42c8a29f9db87326a17deac30e10e)) ([`5e9e0b3`](https://github.com/taskforcesh/bullmq/commit/5e9e0b33cd548952a6968151db94325f299ae3c4)) + +* chore(release): 1.3.0 [skip ci]nn# [1.3.0](https://github.com/taskforcesh/bullmq/compare/v1.2.0...v1.3.0) (2019-11-05) + +### Features + +* test worker extends job lock while job is active ([577efdf](https://github.com/taskforcesh/bullmq/commit/577efdfb1d2d3140be78dee3bd658b5ce969b16d)) ([`c6b1e65`](https://github.com/taskforcesh/bullmq/commit/c6b1e65b424f0feb700468564276786895acec70)) + +* chore(release): 1.2.0 [skip ci]nn# [1.2.0](https://github.com/taskforcesh/bullmq/compare/v1.1.0...v1.2.0) (2019-11-03) + +### Bug Fixes + +* only run coveralls after success ([bd51893](https://github.com/taskforcesh/bullmq/commit/bd51893c35793657b65246a2f5a06469488c8a06)) + +### Features + +* added code coverage and coveralls ([298cfc4](https://github.com/taskforcesh/bullmq/commit/298cfc48e35e648e6a22ac0d1633ac16c7b6e3de)) +* added missing deps for coverage ([6f3ab8d](https://github.com/taskforcesh/bullmq/commit/6f3ab8d78ba8503a76447f0db5abf0c1c4f8e185)) +* ignore commitlint file in coverage ([f874441](https://github.com/taskforcesh/bullmq/commit/f8744411a1b20b95e568502be15ec50cf8520926)) +* only upload coverage once after all tests pass ([a7f73ec](https://github.com/taskforcesh/bullmq/commit/a7f73ecc2f51544f1d810de046ba073cb7aa5663)) ([`89bb554`](https://github.com/taskforcesh/bullmq/commit/89bb554b3e8dcc7f8e2376f1a4557ef3d8e0c96f)) + +* chore(release): 1.1.0 [skip ci]nn# [1.1.0](https://github.com/taskforcesh/bullmq/compare/v1.0.1...v1.1.0) (2019-11-01) + +### Bug Fixes + +* failing build ([bb21d53](https://github.com/taskforcesh/bullmq/commit/bb21d53b199885dcc97e7fe20f60caf65e55e782)) +* fix failing tests ([824eb6b](https://github.com/taskforcesh/bullmq/commit/824eb6bfb2b750b823d057c894797ccb336245d8)) + +### Features + +* initial version of job locking mechanism ([1d4fa38](https://github.com/taskforcesh/bullmq/commit/1d4fa383e39f4f5dcb69a71a1359dd5dea75544c)) ([`1f55fa2`](https://github.com/taskforcesh/bullmq/commit/1f55fa26be8834ac970a219485e3c5c681390b75)) + +* chore(release): 1.0.1 [skip ci]nn## [1.0.1](https://github.com/taskforcesh/bullmq/compare/v1.0.0...v1.0.1) (2019-10-27) + +### Bug Fixes + +* save job stacktrace on failure ([85dfe52](https://github.com/taskforcesh/bullmq/commit/85dfe525079a5f89c1901dbf35c7ddc6663afc24)) +* simplify logic for stackTraceLimit ([296bd89](https://github.com/taskforcesh/bullmq/commit/296bd89514d430a499afee934dcae2aec41cffa2)) ([`72f3669`](https://github.com/taskforcesh/bullmq/commit/72f36694139163009bc237a9ee25ea0070946dfb)) + +* chore(release): 1.0.0 [skip ci]nn# 1.0.0 (2019-10-20) + +### Bug Fixes + +* add compilation step before running tests ([64abc13](https://github.com/taskforcesh/bullmq/commit/64abc13681f8735fb3ee5add5b271bb4da618047)) +* add extra client to worker fixes [#34](https://github.com/taskforcesh/bullmq/issues/34) ([90bd891](https://github.com/taskforcesh/bullmq/commit/90bd891c7514f5e9e397d7aad15069ee55bebacd)) +* add missing dependency ([b92e330](https://github.com/taskforcesh/bullmq/commit/b92e330aad35ae54f43376f92ad1b41209012b76)) +* check closing after resuming from pause ([7b2cef3](https://github.com/taskforcesh/bullmq/commit/7b2cef3677e2b3af0370e0023aec4b971ad313fe)) +* default opts ([333c73b](https://github.com/taskforcesh/bullmq/commit/333c73b5819a263ae92bdb54f0406c19db5cb64f)) +* do not block if blockTime is zero ([13b2df2](https://github.com/taskforcesh/bullmq/commit/13b2df20cf045c069b8b581751e117722681dcd4)) +* do not exec if closing ([b1d1c08](https://github.com/taskforcesh/bullmq/commit/b1d1c08a2948088eeb3dd65de78085329bac671b)) +* do not trim if maxEvents is undefined ([7edd8f4](https://github.com/taskforcesh/bullmq/commit/7edd8f47b392c8b3a7369196befdafa4b29421d1)) +* emit wait event in add job ([39cba31](https://github.com/taskforcesh/bullmq/commit/39cba31a30b7ef762a8d55d4bc34efec636207bf)) +* fix a couple of job tests ([e66b97b](https://github.com/taskforcesh/bullmq/commit/e66b97be4577d5ab373fff0f3f45d73de7842a37)) +* fix compiling error ([3cf2617](https://github.com/taskforcesh/bullmq/commit/3cf261703292d263d1e2017ae30eb490121dab4e)) +* fix more tests ([6a07b35](https://github.com/taskforcesh/bullmq/commit/6a07b3518f856e8f7158be032110c925ed5c924f)) +* fix progress script ([4228e27](https://github.com/taskforcesh/bullmq/commit/4228e2768c0cf404e09642ebb4053147d0badb56)) +* fix retry functionality ([ec41ea4](https://github.com/taskforcesh/bullmq/commit/ec41ea4e0bd88b10b1ba434ef5ceb0952bb59f7b)) +* fix several floating promises ([590a4a9](https://github.com/taskforcesh/bullmq/commit/590a4a925167a7c7d6c0d9764bbb5ab69235beb7)) +* fixed reprocess lua script ([b78296f](https://github.com/taskforcesh/bullmq/commit/b78296f33517b8c5d79b300fef920edd03149d2f)) +* improve concurrency mechanism ([a3f6148](https://github.com/taskforcesh/bullmq/commit/a3f61489e3c9891f42749ff85bd41064943c62dc)) +* improve disconnection for queue events ([56b53a1](https://github.com/taskforcesh/bullmq/commit/56b53a1aca1e527b50f04d906653060fe8ca644e)) +* initialize events comsumption in constructor ([dbb66cd](https://github.com/taskforcesh/bullmq/commit/dbb66cda9722d44eca806fa6ad1cabdaabac846a)) +* make ioredis typings a normal dependency ([fb80b90](https://github.com/taskforcesh/bullmq/commit/fb80b90b12931a12a1a93c5e204dbf90eed4f48f)) +* minor fixes ([7791cda](https://github.com/taskforcesh/bullmq/commit/7791cdac2bfb6a7fbbab9c95c5d89b1eae226a4c)) +* parse progres and return value in events ([9e43d0e](https://github.com/taskforcesh/bullmq/commit/9e43d0e30ab90a290942418718cde1f5bfbdcf56)) +* properly emit event for progress ([3f70175](https://github.com/taskforcesh/bullmq/commit/3f701750b1c957027825ee90b58141cd2556694f)) +* reduce drain delay to 5 seconds ([c6cfe7c](https://github.com/taskforcesh/bullmq/commit/c6cfe7c0b50cabe5e5eb31f4b631a8b1d3706611)) +* remove buggy close() on redis-connection (fixes 5 failing tests) ([64c2ede](https://github.com/taskforcesh/bullmq/commit/64c2edec5e738f43676d0f4ca61bdea8609203fc)) +* remove unused dependencies ([34293c8](https://github.com/taskforcesh/bullmq/commit/34293c84bb0ed54f18d70c86821c3ac627d376a5)) +* replace init by waitUntilReady ([4336161](https://github.com/taskforcesh/bullmq/commit/43361610de5b1a993a1c65f3f21ac745b8face21)) +* reworked initialization of redis clients ([c17d4be](https://github.com/taskforcesh/bullmq/commit/c17d4be5a2ecdda3efcdc6b9d7aecdfaccd06d83)) +* several fixes to make the lib work on other ts projects ([3cac1b0](https://github.com/taskforcesh/bullmq/commit/3cac1b0715613d9df51cb1ed6fe0859bcfbb8e9b)) +* throw error messages instead of codes ([9267541](https://github.com/taskforcesh/bullmq/commit/92675413f1c3b9564574dc264ffcab0d6089e70e)) +* update tests after merge ([51f75a4](https://github.com/taskforcesh/bullmq/commit/51f75a4929e7ae2704e42fa9035e335fe60d8dc0)) +* wait until ready before trying to get jobs ([f3b768f](https://github.com/taskforcesh/bullmq/commit/f3b768f251ddafa207466af552376065b35bec8f)) +* **connections:** reused connections ([1e808d2](https://github.com/taskforcesh/bullmq/commit/1e808d24018a29f6611f4fccd2f5754de0fa3e39)) +* waitUntilFinished improvements ([18d4afe](https://github.com/taskforcesh/bullmq/commit/18d4afef08f04d19cb8d931e02fff8f962d07ee7)) + +### Features + +* add cleaned event ([c544775](https://github.com/taskforcesh/bullmq/commit/c544775803626b5f03cf6f7c3cf18ed1d92debab)) +* add empty method ([4376112](https://github.com/taskforcesh/bullmq/commit/4376112369d869c0a5c7ab4a543cfc50200e1414)) +* add retry errors ([f6a7990](https://github.com/taskforcesh/bullmq/commit/f6a7990fb74585985729c5d95e2238acde6cf74a)) +* add script to generate typedocs ([d0a8cb3](https://github.com/taskforcesh/bullmq/commit/d0a8cb32ef9090652017f8fbf2ca42f0960687f7)) +* add some new tests for compat class, more minor fixes ([bc0f653](https://github.com/taskforcesh/bullmq/commit/bc0f653ecf7aedd5a46eee6f912ecd6849395dca)) +* add support for adding jobs in bulk ([b62bddc](https://github.com/taskforcesh/bullmq/commit/b62bddc054b266a809b4b1646558a095a276d6d1)) +* add trimEvents method to queue client ([b7da7c4](https://github.com/taskforcesh/bullmq/commit/b7da7c4de2de81282aa41f8b7624b9030edf7d15)) +* automatically trim events ([279bbba](https://github.com/taskforcesh/bullmq/commit/279bbbab7e96ad8676ed3bd68663cb199067ea67)) +* emit global stalled event fixes [#10](https://github.com/taskforcesh/bullmq/issues/10) ([241f229](https://github.com/taskforcesh/bullmq/commit/241f229761691b9ac17124da005f91594a78273d)) +* get rid of Job3 in favor of bullmq Job class ([7590cea](https://github.com/taskforcesh/bullmq/commit/7590ceae7abe32a8824e4a265f95fef2f9a6665f)) +* implement close in redis connection fixes [#8](https://github.com/taskforcesh/bullmq/issues/8) ([6de8b48](https://github.com/taskforcesh/bullmq/commit/6de8b48c9612ea39bb28db5f4130cb2a2bb5ee90)) +* make delay in backoffs optional ([30d59e5](https://github.com/taskforcesh/bullmq/commit/30d59e519794780a8198222d0bbd88779c623275)) +* move async initialization to constructors ([3fbacd0](https://github.com/taskforcesh/bullmq/commit/3fbacd088bc3bfbd61ed8ff173e4401193ce48ec)) +* port a lot of functionality from bull 3.x ([ec9f3d2](https://github.com/taskforcesh/bullmq/commit/ec9f3d266c1aca0c27cb600f056d813c81259b4c)) +* port more features from bull 3.x ([75bd261](https://github.com/taskforcesh/bullmq/commit/75bd26158678ee45a14e04fd7c3a1f96219979a2)) +* ported tests and functionality from bull 3 ([1b6b192](https://github.com/taskforcesh/bullmq/commit/1b6b1927c7e8e6b6f1bf0bbd6c74eb59cc17deb6)) +* **workers:** support for async backoffs ([c555837](https://github.com/taskforcesh/bullmq/commit/c55583701e5bdd4e6436a61c833e506bc05749de)) +* remove support of bull3 config format in compat class ([d909486](https://github.com/taskforcesh/bullmq/commit/d9094868e34c2af21f810aaef4542951a509ccf8)) +* support global:progress event ([60f4d85](https://github.com/taskforcesh/bullmq/commit/60f4d85d332b3be4a80db7aa179f3a9ceeb1d6f8)) +* trim option to event stream [#21](https://github.com/taskforcesh/bullmq/issues/21) & fix [#17](https://github.com/taskforcesh/bullmq/issues/17) ([7eae653](https://github.com/taskforcesh/bullmq/commit/7eae65340820043101fadf1f87802f506020d553)) ([`e2e2d8d`](https://github.com/taskforcesh/bullmq/commit/e2e2d8d186c97a4762ce146887b7c3db6841a23e)) + +### Ci + +* ci(python): fix commitmsg env reference ([`822f7a9`](https://github.com/taskforcesh/bullmq/commit/822f7a904e3f91c6b95f9faf40288427d7c20f43)) + +* ci(python): fix conditional step by startsWith ([`eb3d1d4`](https://github.com/taskforcesh/bullmq/commit/eb3d1d499b64c07f8385dc6db99370588977f9cf)) + +* ci(python): echo commit message ([`7510c22`](https://github.com/taskforcesh/bullmq/commit/7510c226a5094ae3042f3d15225708c1e1d83709)) + +* ci(python): retry lint with flake8 python ([`10191ef`](https://github.com/taskforcesh/bullmq/commit/10191ef0b2e6e578dbf3c5ab243bf1958c6a2383)) + +* ci(python): retry install dependencies python ([`1261fc4`](https://github.com/taskforcesh/bullmq/commit/1261fc487a88ee9df924f275c4eae45e7e8c62ee)) + +* ci(python): retry setup python ([`980796c`](https://github.com/taskforcesh/bullmq/commit/980796c9540e4603907e49b095bbd3b328aec29f)) + +* ci(python): remove setup python ([`23c6207`](https://github.com/taskforcesh/bullmq/commit/23c6207db9be71aef1827737a461b43c39eb05e8)) + +* ci(python): delete install dependencies python step ([`8d03ba1`](https://github.com/taskforcesh/bullmq/commit/8d03ba1daf5008fff8d6689ec5e335b25b9fbe2b)) + +* ci(python): delete flake8 step ([`e94bd83`](https://github.com/taskforcesh/bullmq/commit/e94bd835dc798ea60fcf4ce7942542f12cf42ed8)) + +* ci(python): delete commitmsg variable ([`2441eaf`](https://github.com/taskforcesh/bullmq/commit/2441eaf8ea52d12b1cf645051be5592e48a8e855)) + +* ci(python): delete Release Python step ([`3bf5e8d`](https://github.com/taskforcesh/bullmq/commit/3bf5e8dec40c40fd46a3f5fe551e7992804a51df)) + +* ci(python): try to save commit message for python action ([`d3673a1`](https://github.com/taskforcesh/bullmq/commit/d3673a1b79dbb1629d0b19f3fd9abcfdb32b32e0)) + +* ci: harden release and test permissions (#1554) ([`cc37e76`](https://github.com/taskforcesh/bullmq/commit/cc37e7608cb44c0ee4dd975c48b423ad789fdb6e)) + +* ci(build): copy lua scripts (#1476) ([`b96991e`](https://github.com/taskforcesh/bullmq/commit/b96991e0828cceb062b40f4e68625d422d84e146)) + +* ci(scripts): generate scripts before docs (#1470) ([`6947180`](https://github.com/taskforcesh/bullmq/commit/694718012788f1ddd207aa62d1e4dc857b716de2)) + +* ci(redis): run tests in different redis versions (#999) ([`8c22da5`](https://github.com/taskforcesh/bullmq/commit/8c22da5c1225ba090ab0f7af063b05b1f69c69ce)) + +* ci(node-workflow): allow run tests in next branch (#852) ([`6009054`](https://github.com/taskforcesh/bullmq/commit/6009054c53ef447d02173f6a7a88fe6a7eb03581)) + +* ci(github): set test job and cache (#820) ([`d810465`](https://github.com/taskforcesh/bullmq/commit/d810465a4549da871e53d8bed496118afda61fb0)) + +### Documentation + +* docs(events): add listener api references (#1913) ([`864b5e5`](https://github.com/taskforcesh/bullmq/commit/864b5e56afb1fb1a92f41d06b155529f8f701838)) + +* docs(bullmq-pro): update changelog (#1888) ([`0acfb79`](https://github.com/taskforcesh/bullmq/commit/0acfb79f779c6dcffca946f843290ae7bc4066e7)) + +* docs(python): add changelog (#1868) ([`e83f7d0`](https://github.com/taskforcesh/bullmq/commit/e83f7d0447471c24a753f0ad3e302a1eb85382d5)) + +* docs(repeatable): fix invalid cron expression in example (#1867) ([`4f31730`](https://github.com/taskforcesh/bullmq/commit/4f3173003464d3ef468271ad2394c1ca613f6077)) + +* docs(bullmq-pro): update changelog (#1838) ([`13e838a`](https://github.com/taskforcesh/bullmq/commit/13e838a6cf3ccf2209cffdf09b9e2e53b8121e3e)) + +* docs(clean): fix typo/grammar (#1812) ([`65c12df`](https://github.com/taskforcesh/bullmq/commit/65c12df09c2364f5b722da532825af918e3e1a59)) + +* docs(flows): add warning about queues configurations (#1805) ([`3bdde0f`](https://github.com/taskforcesh/bullmq/commit/3bdde0fed601e335a2f0b3f814c394eeaecad85d)) + +* docs(pattern): add adding bulks section (#1782) ([`7785102`](https://github.com/taskforcesh/bullmq/commit/7785102c6905965c8e6bf39ee8c4992e6ed40ee7)) + +* docs(step-jobs): enhance documentation when throwing errors (#1774) ([`649aa6c`](https://github.com/taskforcesh/bullmq/commit/649aa6c7298083c808b73ce79ffa52351e9ec716)) + +* docs(flow-producer): add usage of addBulk method (#1773) ([`229c87e`](https://github.com/taskforcesh/bullmq/commit/229c87e9db144e26d23776b2e00ceb5467c0f0fb)) + +* docs(step-jobs): add how to import errors (#1748) ([`d0cbb76`](https://github.com/taskforcesh/bullmq/commit/d0cbb7616853c2d9f5f87d4c61c39c02c7080855)) + +* docs: expose async-fifo-queue (#1743) ([`922d118`](https://github.com/taskforcesh/bullmq/commit/922d118d4629e765e2f32e2bc5dae836a3e34f8b)) + +* docs(auto-removal): add worker auto-removal examples (#1715) ([`4069344`](https://github.com/taskforcesh/bullmq/commit/40693440b473cd311da6a33ce591e8094fd9fc92)) + +* docs(connections): make keyPrefix warning more pronounced (#1679) ([`422e9fc`](https://github.com/taskforcesh/bullmq/commit/422e9fcbcdf014c14c65b1811b3a8000230c1a91)) + +* docs(nestjs): add flow producer documentation (#1674) ([`6dc75a3`](https://github.com/taskforcesh/bullmq/commit/6dc75a3233de5c702e5dec10a8d202259b5e8637)) + +* docs(stalled): fix typos (#1672) ([`31c6896`](https://github.com/taskforcesh/bullmq/commit/31c6896b816776404e160b4b2bbe45e03fcc220a)) + +* docs(nestjs-bullmq-pro): add producers section (#1661) ([`94f2fd7`](https://github.com/taskforcesh/bullmq/commit/94f2fd749c132b463816a04727269c9fca32498c)) + +* docs(nestjs): add nestjs-bullmq-pro changelog (#1655) ([`d681c22`](https://github.com/taskforcesh/bullmq/commit/d681c22982d1e5ca0d65fc2dd9e26de6f4370015)) + +* docs(readme): use foo as queueName in example (#1651) ([`e3ba746`](https://github.com/taskforcesh/bullmq/commit/e3ba7465fa887afff99281167663f69e861feefc)) + +* docs(nestjs): add nestjs-bullmq-pro api reference (#1646) ([`3e8fb1a`](https://github.com/taskforcesh/bullmq/commit/3e8fb1a8fa7a35ec2418b7326b139d73baed23cd)) + +* docs(bullmq-pro): add nestjs-bullmq-pro module documentation (#1636) ([`9a0a83e`](https://github.com/taskforcesh/bullmq/commit/9a0a83ed97b3093451c6487cd59d515a9c676713)) + +* docs(guide): nestjs section (#1610) ([`1276e2b`](https://github.com/taskforcesh/bullmq/commit/1276e2bc62e39db3b24e0ba3f0824904ca4b595e)) + +* docs(bullmq): add manual rate-limit section (#1590) ([`3fa5d33`](https://github.com/taskforcesh/bullmq/commit/3fa5d33861e99c1405a576b5ef7171daae4c16bb)) + +* docs: add api references (#1584) ([`a3df041`](https://github.com/taskforcesh/bullmq/commit/a3df04109d64bc2b5de30f7b4fb95d5a836df949)) + +* docs(base-job-options): fix grammar + +Change grammar "an number" should be "a number" ([`3451b59`](https://github.com/taskforcesh/bullmq/commit/3451b591a2158b6e2ae57a369389e23f4d4376e7)) + +* docs: fix Object.values usage in flows guide (#1466) ([`74cbcc2`](https://github.com/taskforcesh/bullmq/commit/74cbcc2514b18bb94e0067618ba7d83d57f00c87)) + +* docs: update Queue Scheduler API Reference + +The html page is no longer generated by typedoc since v2 ([`89bb53f`](https://github.com/taskforcesh/bullmq/commit/89bb53fb193e291f90b4be219507cdd7c7b04dba)) + +* docs(readme): fix incorrect typescript example (#1329) ([`4646f3b`](https://github.com/taskforcesh/bullmq/commit/4646f3b292788e824b15b1cb670fee9a341e6d24)) + +* docs(bullmq-pro): add ttl per job name description (#1276) ([`2d59174`](https://github.com/taskforcesh/bullmq/commit/2d59174986c55fce334999fdb2905e06a948edb5)) + +* docs(concurrency): add concurrency update description (#1264) ([`7249012`](https://github.com/taskforcesh/bullmq/commit/7249012f189632957ee1ec62f563e1a7445f1cdb)) + +* docs(step-jobs): fix waiting children step (#1261) ([`35b0283`](https://github.com/taskforcesh/bullmq/commit/35b028356e41ef3b646db44e1cfe7a1cf64d3f3e)) + +* docs(bullmq-pro): update changelog (#1244) ([`1e4e1bc`](https://github.com/taskforcesh/bullmq/commit/1e4e1bc729208fb0d2c423694e9e686418ed5aab)) + +* docs(bullmq-pro): add changelog (#1234) ([`fb1ece0`](https://github.com/taskforcesh/bullmq/commit/fb1ece0c534250b90452bcf021bc77779a7f35a3)) + +* docs: add new api based on typedoc ([`8e56db5`](https://github.com/taskforcesh/bullmq/commit/8e56db551e1f0f187c2ae56c22b70342f9106822)) + +* docs(readme): add curri in "used by" ([`931a932`](https://github.com/taskforcesh/bullmq/commit/931a932e25cee430cbe5a126fd8dd6f7e704756a)) + +* docs: misspelled rate limited (#1165) ([`f33d0a9`](https://github.com/taskforcesh/bullmq/commit/f33d0a957525ec1bc3986e4bb57624d5ac0a4bc1)) + +* docs(worker): add autorun example (#1161) ([`ad159ad`](https://github.com/taskforcesh/bullmq/commit/ad159ad6a4bda3703ce1686b4989e1fae7dcaef8)) + +* docs: clarify jobs priority order (#1124) ([`7721ac3`](https://github.com/taskforcesh/bullmq/commit/7721ac3a01ca5071bcf4b51df3ca0ad0a896659b)) + +* docs: add mermaid diagrams as comments(#1116) ([`1d69619`](https://github.com/taskforcesh/bullmq/commit/1d69619fcc70c24cca8a5d30451886b6cb487e5c)) + +* docs: add read more section (#1114) ([`3ba05f7`](https://github.com/taskforcesh/bullmq/commit/3ba05f7ff80b152cd99167b13546d6d76654d3ed)) + +* docs(guide): add link references to classes (#1111) ([`350234e`](https://github.com/taskforcesh/bullmq/commit/350234e816783ff7a4e91d4839d81ac4fe2b2a1d)) + +* docs(procesador): add pattern for named processor (#1096) ([`dd1e63c`](https://github.com/taskforcesh/bullmq/commit/dd1e63c623a6a1958ff8de983adc668e452aed52)) + +* docs: add obliterateOpts description (#1086) ([`7f7dc34`](https://github.com/taskforcesh/bullmq/commit/7f7dc34789abc8a7fb59dd79a3170c4fb94c202d)) + +* docs(flow): update README.md example description (#1076) ([`ca38bfb`](https://github.com/taskforcesh/bullmq/commit/ca38bfb797ccd37db511d1e02b9a72a42ad4e894)) + +* docs(step-jobs): pattern to wait children when adding children at runtime (#1069) ([`d53a800`](https://github.com/taskforcesh/bullmq/commit/d53a800473ac5556211408d526df92aba686fff1)) + +* docs(process-step-jobs): add new pattern (#1044) ([`e988cf5`](https://github.com/taskforcesh/bullmq/commit/e988cf5589783cf3ba7b4785d8b63df632c0fe37)) + +* docs(flow-job): add description into FlowOpts (#1047) ([`734f5fe`](https://github.com/taskforcesh/bullmq/commit/734f5fe8257a29b7790fa848173f2a1a35cbe605)) + +* docs(worker): specify error parameter in failed event (#1043) fixes #1038 ([`42114f5`](https://github.com/taskforcesh/bullmq/commit/42114f53058229e24127e0b649f4a7ec5a847b01)) + +* docs(wait-until-finished): update docs to match behavior (#1033) ref #1031 ([`d3e0d09`](https://github.com/taskforcesh/bullmq/commit/d3e0d09b6147940eb9074c9ee0f53bc3e76670a6)) + +* docs(job): add params docs in waitUntilFinished (#1000) ref #996 ([`32e7948`](https://github.com/taskforcesh/bullmq/commit/32e7948408f6e12bfe913db1d7c3be7cabb0a5ef)) + +* docs(readme): add Bullmq-Pro in comparison table (#993) ([`9d35cb4`](https://github.com/taskforcesh/bullmq/commit/9d35cb49ac6f4172f13832e136fc68cd22426491)) + +* docs: delete duplicated parent-child explanation (#980) ([`9fb8b72`](https://github.com/taskforcesh/bullmq/commit/9fb8b72885bab40e3980418a6367859435397733)) + +* docs(flow): add getFlow into guide structure (#976) ([`db1224a`](https://github.com/taskforcesh/bullmq/commit/db1224a6aa674288b7ad879f53c9e1e063b7e9f7)) + +* docs(throttle-jobs): fix definition in patterns (#961) fixes #689 ([`e184d4d`](https://github.com/taskforcesh/bullmq/commit/e184d4d88c37f1e9b2d3c4fddf00130556a9f8df)) + +* docs: update debounce-jobs.md (#950) ([`424b54a`](https://github.com/taskforcesh/bullmq/commit/424b54af7c549150197a647fe898c67ff9d87aa4)) + +* docs(bullmq-pro): add missing line in install instructions (#905) ([`53ba7b7`](https://github.com/taskforcesh/bullmq/commit/53ba7b798d75ead036b417c4644a7eab59b81cb4)) + +* docs(job): use defaultValue tag (#903) ([`3133599`](https://github.com/taskforcesh/bullmq/commit/3133599e982071fd1dfe7871f20b87eb6461cbf2)) + +* docs: add missing returned types (#889) ([`3c76dc4`](https://github.com/taskforcesh/bullmq/commit/3c76dc4fa3558fa83161537751bc68eeb65e9d4a)) + +* docs: use implements for declaration types (#845) ([`2446cea`](https://github.com/taskforcesh/bullmq/commit/2446cea3d99d9b1bd738e7a8480c395984f8f17c)) + +* docs(remove): fix id typo (#805) ([`51eebc4`](https://github.com/taskforcesh/bullmq/commit/51eebc4ca25f3cada743f5e0a3e7e8878b82bc7e)) + +* docs(child-pool): add link to process exit codes (#799) ([`1f12295`](https://github.com/taskforcesh/bullmq/commit/1f122952a0f161c754b5ddbba75db2880a4554c8)) + +* docs(change-delay): add param in docs (#792) ([`58a803f`](https://github.com/taskforcesh/bullmq/commit/58a803ff2e6a1815b4000dc16584663e33dace09)) + +* docs(readme): add semantic-release badge (#795) ([`2f1b141`](https://github.com/taskforcesh/bullmq/commit/2f1b14197786282292ce5150c008a61a7f44f19e)) + +* docs(events): update completed and failed events docs (#785) ([`3712537`](https://github.com/taskforcesh/bullmq/commit/371253744ec89f8edcc868ee9236681deab62dbf)) + +* docs: correct bird's name & comparative adjective for repeatable frequency ([`cb4292c`](https://github.com/taskforcesh/bullmq/commit/cb4292ca13af145140eedb5960ccbff87644953f)) + +* docs(autorun): add documentation (#769) ref #263 ([`b016344`](https://github.com/taskforcesh/bullmq/commit/b016344caedc8915052cea43948901f3b77b6ece)) + +* docs(feature-comparison): fix parent-child checks (#759) ([`b2c6bcc`](https://github.com/taskforcesh/bullmq/commit/b2c6bccfabc265c3ed2beb1d677933c67177e90f)) + +* docs(readme): add feature comparison (#758) ([`60b608d`](https://github.com/taskforcesh/bullmq/commit/60b608db589da0fa82f8edce388525c3d4bca9a8)) + +* docs(prioritized): rename file (#757) ([`31ba505`](https://github.com/taskforcesh/bullmq/commit/31ba5055983c085019f96c8223fbffe22b88df1c)) + +* docs(retry): increase awareness of needing QueueScheduler instance (#747) ([`99f2efb`](https://github.com/taskforcesh/bullmq/commit/99f2efbca906cb0de4b7673a2886e02423c084c6)) + +* docs(changelog): fix format (#732) ([`45aaa39`](https://github.com/taskforcesh/bullmq/commit/45aaa39241be269fcd68fd59632f47b0b072e80b)) + +* docs(prioritized): fix typo (#715) ([`919994c`](https://github.com/taskforcesh/bullmq/commit/919994cd4d200e83d77950ca94a44303e634a81a)) + +* docs(changelog): fix format (#712) ([`a1c8e00`](https://github.com/taskforcesh/bullmq/commit/a1c8e001431dc516ab74c1c8b054f15dd77634fc)) + +* docs(queue-events): update progress event typing (#618) ([`8c2f253`](https://github.com/taskforcesh/bullmq/commit/8c2f25382c3673a280210eca487517128279b950)) + +* docs: fix typo in bullmq.ratelimiteroptions.md (#683) ([`0190699`](https://github.com/taskforcesh/bullmq/commit/0190699f482705e664b9697223fca6c9fb875484)) + +* docs: add example of adding retry rules to queue's default options ([`1f53172`](https://github.com/taskforcesh/bullmq/commit/1f53172351b81dff9b3d4dc6daa83de6d8249dec)) + +* docs: define exponential and fixed backoffs ([`d621359`](https://github.com/taskforcesh/bullmq/commit/d62135967e1d9a8c001faddde42238e4e96e5212)) + +* docs: reword sentences in stalled.md ([`b679dd6`](https://github.com/taskforcesh/bullmq/commit/b679dd6904ca82432887f5ccd6636afc2ae43428)) + +* docs: fix job type in sandbox-processors guide fixes #539 ([`81bbf4a`](https://github.com/taskforcesh/bullmq/commit/81bbf4a7b7d929936ad9c27ead7fc25fb570654a)) + +* docs(gitook): fix typo in queuescheduler.md ([`f942364`](https://github.com/taskforcesh/bullmq/commit/f94236431aba016a2dbe957bf9e01573eb2e0cdd)) + +* docs: fix typo (#395) ([`e5a29bf`](https://github.com/taskforcesh/bullmq/commit/e5a29bf17dad2d9f75fbeb0db33353ddf49f1643)) + +* docs: add doc for debounce usecase (#335) ([`067e32a`](https://github.com/taskforcesh/bullmq/commit/067e32aff24955b6d5bfe9c4196820f60fe21888)) + +* docs(interfaces): use block comments; add references and descriptions + +- Block comments for IDE support / "intellisense" +- Add links to the docs for further reading +- For links, I used the format described at https://tsdoc.org/pages/tags/see/ ([`87297b8`](https://github.com/taskforcesh/bullmq/commit/87297b8b0aef281636e174b6e925eedb440df841)) + +* docs: generate api documentation ([`ec6634f`](https://github.com/taskforcesh/bullmq/commit/ec6634ff96877c2629ace25827f4462f6894751d)) + +* docs: replace link to crontab generator, which used the wrong format. (#307) ([`de99a07`](https://github.com/taskforcesh/bullmq/commit/de99a07c33b2c893466e81b0ed724b3e3e5ffbcd)) + +* docs: fix typo (#350) ([`3f3cd11`](https://github.com/taskforcesh/bullmq/commit/3f3cd1181817dcaa45d2f81798f5b6a965e2bbbd)) + +* docs: fix a typo in guide/workers.md (#328) ([`1c17c02`](https://github.com/taskforcesh/bullmq/commit/1c17c02de0036e434f2900142eb87a92daac36d9)) + +* docs: add a remark about scheduler for retries to work (#316) ([`6e29fcd`](https://github.com/taskforcesh/bullmq/commit/6e29fcd2d79aff5e400d9bee83a597b8cf57d39c)) + +* docs: update README.md (#217) ([`55fff7f`](https://github.com/taskforcesh/bullmq/commit/55fff7f7c370186752710e20534ded3e17962cf8)) + +* docs: improve QueueScheduler docs + +I know that this looks obvious but it was not so direct to find it on the docs ([`873ec2f`](https://github.com/taskforcesh/bullmq/commit/873ec2f44eaf522c645241af3fed071ded5a2c43)) + +* docs: add github link to what-is-bullmq.md (#80) ([`4adf856`](https://github.com/taskforcesh/bullmq/commit/4adf85680028bafe2f7f1ac7a350f2d83a3fb58f)) + +### Feature + +* feat(python): add changePriority method (#1943) ([`945bcd3`](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) + +* feat(job): add changePriority method (#1901) ref #1899 ([`9485ad5`](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) + +* feat(python): add getState method (#1906) ([`f0867a6`](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) + +* feat(python): add retry method into job (#1877) ([`870da45`](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) + +* feat(python): add updateData method (#1871) ([`800b8c4`](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) + +* feat(python): support retryJob logic (#1869) ([`b044a03`](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) + +* feat(python): save stacktrace when job fails (#1859) ([`0b538ce`](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) + +* feat(python): add moveToDelayed job method (#1849) ([`5bebf8d`](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) + +* feat(python): add updateProgress method in job class(#1830) ([`e1e1aa2`](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) + +* feat(python): accept redis options as string ([`01f549e`](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) + +* feat: upgrade ioredis to 5.3.2 ([`375b1be`](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) + +* feat(upstash): don't throw an error when detecting an upstash host + +Upstash is currently rolling out redis streams to all regions and will be compatible with bullmq. ([`2e06bca`](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) + +* feat(python): add getJobCounts method (#1807) ([`46d6f94`](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) + +* feat(python): improve worker concurrency (#1809) ([`ec7c49e`](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) + +* feat(worker): add remove on complete and fail options (#1703) ([`cf13494`](https://github.com/taskforcesh/bullmq/commit/cf1349471dcbf0e43feea9972eaa71d2299d619f)) + +* feat(python): add trimEvents (#1695) ([`ca48163`](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) + +* feat(python): add retryJobs method (#1688) ([`2745327`](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) + +* feat: initial python package (#1673) + +* feat: initial python package + +* chore: correct python actions + +* style: delete white spaces + +* feat(python): add isPaused method + +* chore: add missing async + +* feat(python): add more features to the python package + +* chore: avoid trigger npm releases for python changes + +* chore(python): better module handling + +* fix(python): some lint errors + +--------- + +Co-authored-by: rogger andrÊ valverde flores <rogger.valverde@uni.pe> ([`a97b22f`](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) + +* feat(job): allow clearing job's log (#1600) ([`0ded2d7`](https://github.com/taskforcesh/bullmq/commit/0ded2d7709322bf105e0decac44d801ece5615f2)) + +* feat(queue): add getJobState method (#1593) ref #1532 ([`b741e84`](https://github.com/taskforcesh/bullmq/commit/b741e8456f262b51aa7c68f571c76a3c54d02d37)) + +* feat(worker): add ready event for blockingConnection (#1577) ([`992cc9e`](https://github.com/taskforcesh/bullmq/commit/992cc9e9b3046185d3b67f2cc956f30337f458e1)) + +* feat(queue-events): support duplicated event (#1549) ([`18bc4eb`](https://github.com/taskforcesh/bullmq/commit/18bc4eb50432f8aa27f2395750a7617317b66ca1)) + +* feat(flow): move parent to delayed when delay option is provided (#1501) ([`2f3e5d5`](https://github.com/taskforcesh/bullmq/commit/2f3e5d54f0797bf0d1adf14dbb2b51ad9f9183ca)) + +* feat(flows): allow parent on root jobs in addBulk method (#1488) ref #1480 ([`92308e5`](https://github.com/taskforcesh/bullmq/commit/92308e53acf14e0ce108d94ecd616633ac93e35d)) + +* feat(redis-connection): allow providing scripts for extension (#1472) ([`f193cfb`](https://github.com/taskforcesh/bullmq/commit/f193cfb1830e127f9fd47a969baad30011a0e3a4)) + +* feat(flow-producer): allow parent opts in root job when adding a flow (#1110) ref #1097 ([`3c3ac71`](https://github.com/taskforcesh/bullmq/commit/3c3ac718ad84f6bd0cc1575013c948e767b46f38)) + +* feat(job-options): add failParentOnFailure option (#1339) ([`65e5c36`](https://github.com/taskforcesh/bullmq/commit/65e5c3678771f26555c9128bdb908dd62e3584f9)) + +* feat(sandbox): support update method (#1416) ([`606b75d`](https://github.com/taskforcesh/bullmq/commit/606b75d53e12dfc109f01eda38736c07e829e9b7)) + +* feat(repeat): allow passing a cron strategy (#1248) ref #1245 ([`7f0534f`](https://github.com/taskforcesh/bullmq/commit/7f0534f72449ae14a7415fa17a2eb2a70136a8b0)) + +* feat(job): expose delay in instance (#1386) ([`d4d0d2e`](https://github.com/taskforcesh/bullmq/commit/d4d0d2e737c7ceb5eb34a2c50d53bd1081e0ad4a)) + +* feat(sandbox): experimental support ESM ([`ed0faff`](https://github.com/taskforcesh/bullmq/commit/ed0faff3c67c436116eb625ffacb03e435caee3f)) + +* feat(flow): consider priority when parent is moved (#1286) ([`d49760d`](https://github.com/taskforcesh/bullmq/commit/d49760d09420c5fcc99ab06c8fe36168755fd397)) + +* feat(repeat): save repeatJobKey reference (#1214) ([`4d5a8e3`](https://github.com/taskforcesh/bullmq/commit/4d5a8e33b614cf099369c18298e5b2963b434b1b)) + +* feat(worker): change the number of concurrent processes (#1256) ref #22 ([`940dc8f`](https://github.com/taskforcesh/bullmq/commit/940dc8f34d9a46dc9c8384661461bf0558e97600)) + +* feat(flow-producer): add event listener types (#1257) ([`19ed099`](https://github.com/taskforcesh/bullmq/commit/19ed099905cbb4f071370b2b6d67d9a378e3a8f8)) + +* feat(flow-producer): easier to build extension (#1250) ([`aaf637e`](https://github.com/taskforcesh/bullmq/commit/aaf637e74b9610651fd9e4efc5ff349971b7bb26)) + +* feat(remove-repeatable): return boolean depending on job existence (#1239) ref #1235 ([`59b0da7`](https://github.com/taskforcesh/bullmq/commit/59b0da7d0e979e4f9e8a5b042acbdce433790611)) + +* feat(move-to-delayed): allow passing token (#1213) + +fix(move-to-waiting-children): delete lock ([`14f0e4a`](https://github.com/taskforcesh/bullmq/commit/14f0e4a33d9ddfbaa1f86dbe7598e20a516a9d09)) + +* feat(worker-listener): use generics in events (#1190) ref #1188 ([`2821193`](https://github.com/taskforcesh/bullmq/commit/28211937d9ed405330eede5ad7d4b0b817accf39)) + +* feat(queue-getters): add getQueueEvents (#1085) ([`f10a20a`](https://github.com/taskforcesh/bullmq/commit/f10a20a90ab6dbf2d9f3f75ba99dacbdc797c329)) + +* feat(cron-parser): upgrades version to 4.2.1 (#1149) fixes #1147 ([`88a6c9c`](https://github.com/taskforcesh/bullmq/commit/88a6c9c437172035173628842909f5170eb481f7)) + +* feat: allow QueueScheduler to be extended ([`289beb8`](https://github.com/taskforcesh/bullmq/commit/289beb87d2ef3e3dd7583159f7be2b5450f7de3c)) + +* feat(metrics): add metrics support ([`ab51326`](https://github.com/taskforcesh/bullmq/commit/ab51326cf318b4b48e37a1a77f5609e405eecb45)) + +* feat(retry-jobs): allow to retry completed jobs (#1082) ([`e17b3f2`](https://github.com/taskforcesh/bullmq/commit/e17b3f21606757a16630988a69c9607e8c843bd2)) + +* feat(retry-jobs): pass timestamp as option (#1054) ([`1522359`](https://github.com/taskforcesh/bullmq/commit/15223590b235f749af9cb229fc784760d4b3add2)) + +* feat(queue-getters): add getQueueSchedulers (#1078) ref #1075 ([`0b3b1c4`](https://github.com/taskforcesh/bullmq/commit/0b3b1c4382de34bd68733d162c2fa2ba9417f79c)) + +* feat(job): add prefix getter (#1077) ([`db9ef10`](https://github.com/taskforcesh/bullmq/commit/db9ef105a7a524d7502664d52bd9f9c7dfa9477f)) + +* feat(backoff): validate UnrecoverableError presence (#1074) ([`1defeac`](https://github.com/taskforcesh/bullmq/commit/1defeac3f251a13aad57f3027d8eb8f857e40acb)) + +* feat(get-job-counts): add default values (#1068) ([`1c7f841`](https://github.com/taskforcesh/bullmq/commit/1c7f841a52b3ea18fa7878f10986b362ccc6c4fe)) + +* feat(sandbox): pass parent property (#1065) ([`1fd33f6`](https://github.com/taskforcesh/bullmq/commit/1fd33f6fd3a3af17753de8c4d48e14ef86c7409c)) + +* feat(job): pass queueName into sandbox (#1053) fixes #1050 ref #1051 ([`12bb19c`](https://github.com/taskforcesh/bullmq/commit/12bb19c1586d8755b973a80be97f407630827d4f)) + +* feat(queue): add retryJobs method for failed jobs (#1024) ([`310a730`](https://github.com/taskforcesh/bullmq/commit/310a730ed322501cc19cdd5cf5244bc8eee6fee2)) + +* feat(queue-events): add retries-exhausted event (#1010) ([`e476f35`](https://github.com/taskforcesh/bullmq/commit/e476f35f5c3f9b1baf2bbc3d46712b8ba597f73c)) + +* feat(queue): add JobType and JobState unions for better typing (#1011) ([`3b9b79d`](https://github.com/taskforcesh/bullmq/commit/3b9b79dbdd754ab66c3948e7e16380f2d5513262)) + +* feat(sanboxed-process): support .cjs files (#984) ([`531e4de`](https://github.com/taskforcesh/bullmq/commit/531e4de1525f2cf322e0b97f5537ed43276ff72b)) + +* feat(job): use generic types for static methods (#975) ([`f78f4d0`](https://github.com/taskforcesh/bullmq/commit/f78f4d0f75adb5c73558b3e8cf511db22f972791)) + +* feat(queue): add better event typing (#971) ([`596fd7b`](https://github.com/taskforcesh/bullmq/commit/596fd7b260f2e95607f0eb4ff9553fb35137ec54)) + +* feat(queue-scheduler): add better event typing (#963) ([`b23c006`](https://github.com/taskforcesh/bullmq/commit/b23c006e2bfce8a0709f0eb8e8739261b68c2f48)) + +* feat(worker): add better event typing (#940) ([`a326d4f`](https://github.com/taskforcesh/bullmq/commit/a326d4f27e96ffa462a908ac14356d29839ff073)) + +* feat(queue-events): add better event typing (#919) ([`e980080`](https://github.com/taskforcesh/bullmq/commit/e980080767bc56ae09a5c5cf33728a85a023bb42)) + +* feat(script-loader): lua script loader with include support (#897) ([`64b6ccf`](https://github.com/taskforcesh/bullmq/commit/64b6ccf2a373b40d7ea763b3d35cf34f36ba11da)) + +* feat(load-includes): export includes to be reused in extensions (#877) ([`b56c4a9`](https://github.com/taskforcesh/bullmq/commit/b56c4a9cf2ecebb44481618026589162be61680a)) + +* feat(queue-events): add cleaned event (#865) ([`b3aebad`](https://github.com/taskforcesh/bullmq/commit/b3aebad8a62311e135d53be2e7c5e47740547465)) + +* feat(queue): add waiting event type declaration (#872) ([`f29925d`](https://github.com/taskforcesh/bullmq/commit/f29925da3b12f573582ea188ec386e86023cefc9)) + +* feat(flow): consider continually adding jobs (#828) fixes #826 ([`b0fde69`](https://github.com/taskforcesh/bullmq/commit/b0fde69f4370160a891e4654485c09745066b80b)) + +* feat: easier to build extensions on top of BullMQ ([`b1a9e64`](https://github.com/taskforcesh/bullmq/commit/b1a9e64a9184addc0b8245a04013e1c896e9c2bc)) + +* feat(sandboxed-process): handle init-failed error (#797) ([`5d2f553`](https://github.com/taskforcesh/bullmq/commit/5d2f55342b19ee99d34f8d8003f09359cfe17d4f)) + +* feat(queue): add drain lua script (#764) ([`2daa698`](https://github.com/taskforcesh/bullmq/commit/2daa698a7cc5dc8a6cd087b2d29356bc02fb4944)) + +* feat(queue-events): launch without launching process (#750) ([`23a2360`](https://github.com/taskforcesh/bullmq/commit/23a23606e727ca13b24924a1e867c6b557d6a09d)) + +* feat(worker): launch without launching process (#724) + +re #436 ([`af689e4`](https://github.com/taskforcesh/bullmq/commit/af689e4e3945b9bc68bfc08c8f0ad57644206c5b)) + +* feat(queue-scheduler): launch without launching process (#729) + +re #436 ([`f1932a7`](https://github.com/taskforcesh/bullmq/commit/f1932a789af13da9b705a72d6f633f984a218862)) + +* feat(queue-events): add waiting-children event (#704) ([`18b0b79`](https://github.com/taskforcesh/bullmq/commit/18b0b7954313274a61fcc058380bfb9d682c059d)) + +* feat(events): add added event when job is created (#699) ([`f533cc5`](https://github.com/taskforcesh/bullmq/commit/f533cc55a43cf6ea78a60e85102f15b1c1ff69a0)) + +* feat(flows): add queuesOptions for rate limit (#692) + +re #621 ([`6689ec3`](https://github.com/taskforcesh/bullmq/commit/6689ec3fadd21904d9935f932c047f540ed8caf0)) + +* feat(flow): add bulk ([`dc59fe6`](https://github.com/taskforcesh/bullmq/commit/dc59fe62e57b6e761fe4d2ab6179a69dc4792399)) + +* feat(queue): add missing events typings ([`b42e78c`](https://github.com/taskforcesh/bullmq/commit/b42e78c36cb6a6579a4c7cce1d7e969b230ff5b6)) + +* feat(job): add changeDelay method for delayed jobs ([`f0a9f9c`](https://github.com/taskforcesh/bullmq/commit/f0a9f9c6479062413abc0ac9a6f744329571a618)) + +* feat(flow-producer): add getFlow method ([`ce93d04`](https://github.com/taskforcesh/bullmq/commit/ce93d04c962686aff34f670f2decadadbf1cf4ca)) + +* feat(job): extend getDependencies to support pagination ([`9b61bbb`](https://github.com/taskforcesh/bullmq/commit/9b61bbb9160358f629cd458fa8dc4c9b6ebcd9f5)) + +* feat: add some event typing ([`934c004`](https://github.com/taskforcesh/bullmq/commit/934c0040b0802bb67f44a979584405d795a8ab5e)) + +* feat: add move to waiting children for manual processing (#477) ([`f312f29`](https://github.com/taskforcesh/bullmq/commit/f312f293b8cac79af9c14848ffd1b11b65a806c3)) + +* feat(custombackoff): provide job as third parameter ([`ddaf8dc`](https://github.com/taskforcesh/bullmq/commit/ddaf8dc2f95ca336cb117a540edd4640d5d579e4)) + +* feat(job): add sizeLimit option when creating a job ([`f10aeeb`](https://github.com/taskforcesh/bullmq/commit/f10aeeb62520d20b31d35440524d147ac4adcc9c)) + +* feat: add option for non-blocking getNextJob ([`13ce2cf`](https://github.com/taskforcesh/bullmq/commit/13ce2cfd4ccd64f45567df31de11af95b0fe67d9)) + +* feat(job): pass parent opts to addBulk ([`7f21615`](https://github.com/taskforcesh/bullmq/commit/7f216153293e45c4f33f2592561c925ca4464d44)) + +* feat(jobcreate): allow passing parent in job.create ([`ede3626`](https://github.com/taskforcesh/bullmq/commit/ede3626b65fb5d3f4cebc55c813e9fa4b482b887)) + +* feat(worker): passing token in processor function ([`2249724`](https://github.com/taskforcesh/bullmq/commit/2249724b1bc6fbf40b0291400011f201fd02dab3)) + +* feat: add support for flows (parent-child dependencies) (#454) ([`362212c`](https://github.com/taskforcesh/bullmq/commit/362212c58c4be36b5435df862503699deb8bb79c)) + +* feat: add support for manually processing jobs fixes #327 ([`e42bfd2`](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) + +* feat(sandbox): kill child workers gracefully (#243) ([`4262837`](https://github.com/taskforcesh/bullmq/commit/4262837bc67e007fe44606670dce48ee7fec65cd)) + +* feat: add grouped rate limiting ([`3a958dd`](https://github.com/taskforcesh/bullmq/commit/3a958dd30d09a049b0d761679d3b8d92709e815e)) + +* feat(types): add sandboxed job processor types (#114) ([`a50a88c`](https://github.com/taskforcesh/bullmq/commit/a50a88cd1658fa9d568235283a4c23a74eb8ed2a)) + +* feat: remove delay dependency + +this commit uses delay from utils in typescript and adds a simple +test/fixtures/delay.js for use in javascript fixtures. this change also +allowed the ts compiler to identify a promise that was not `await`ed in +src/test/test_worker.ts ([`97e1a30`](https://github.com/taskforcesh/bullmq/commit/97e1a3015d853e615ddd623af07f12a194ccab2c)) + +* feat: remove dependence on Bluebird.delay #67 + +This approach uses a simple setTimeout-based delay in the only production +usage (src/classes/queue-events.ts), defined in src/util.ts, and since +there was already a devDependency on a library called +[delay](https://www.npmjs.com/package/delay), this commit uses that in +test contexts. It should be easy to replace that dep with a +`(ms:number) => new Promise(r => setTimeout(r, ms))` as well. + +Closes #67 ([`bedbaf2`](https://github.com/taskforcesh/bullmq/commit/bedbaf25af6479e387cd7548e246dca7c72fc140)) + +* feat: job.progress() return last progress for sandboxed processors + +ported from Bull3 (https://github.com/OptimalBits/bull/pull/1536) ([`5c4b146`](https://github.com/taskforcesh/bullmq/commit/5c4b146ca8e42c8a29f9db87326a17deac30e10e)) + +### Fix + +* fix(rate-limit): consider paused queue (#1931) ([`d97864a`](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) + +* fix(rate-limit): take in count priority (#1919) fixes #1915 ([`b8157a3`](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) + +* fix(python): fix 'install_requires' to include semver (#1927) ([`ce86ece`](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) + +* fix(child): use named import for EventEmitter (#1887) ([`1db396d`](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) + +* fix(rate-limit): consider paused queue when dynamic rate limit (#1884) ([`a23f37e`](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) + +* fix(retry): consider when queue is paused (#1880) ([`01b621f`](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) + +* fix(worker): close open handles after closing (#1861) fixes #1312 ([`39286e8`](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) + +* fix(python): stop processes when force stop (#1837) ([`514699c`](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) + +* fix(python): correct condition so that the worker keeps processing jobs indefinitely (#1800) ([`ef0c5d6`](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) + +* fix(flow): do not remove completed children results (#1788) fixes #1778 ([`04b547a`](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) + +* fix(python): fix scripts typing on array2obj function (#1786) ([`134f6ab`](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) + +* fix(flow): consider removing dependency on removeOnFail true (#1753) ([`de5a299`](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) + +* fix(python): pass maxMetricsSize as empty string when it is not provided fixes #1754 ([`6bda2b2`](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) + +* fix(job): avoid error when job is moved when processing (#1354) fixes #1343 #1602 ([`78085e4`](https://github.com/taskforcesh/bullmq/commit/78085e4304357dd3695df61057f91e706c3a52bf)) + +* fix(worker): restore failed event job parameter typing (#1707) ([`44c2203`](https://github.com/taskforcesh/bullmq/commit/44c2203ab65d406be9a913254600fe07c83e62d5)) + +* fix(worker): failed event receives an optional job parameter (#1702) fixes #1690 ([`6009906`](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) + +* fix(job): check jobKey when saving stacktrace (#1681) fixes #1676 ([`1856c76`](https://github.com/taskforcesh/bullmq/commit/1856c7684c377ca4fd36294cca8e128404be27b8)) + +* fix(error): remove global prototype toJSON (#1642) fixes #1414 ([`d4e7108`](https://github.com/taskforcesh/bullmq/commit/d4e7108a37aeabdd3085a26c9daf09cea5976f3e)) + +* fix(move-to-finished): return correct delayUntil (#1643) ([`c4bf9fa`](https://github.com/taskforcesh/bullmq/commit/c4bf9fa6563eda1630d8eb2189b16e9324b01c7f)) + +* fix(move-to-active): delete marker when it is moved to active (#1634) ([`ad1fcea`](https://github.com/taskforcesh/bullmq/commit/ad1fcea4500d4ceed51d5d5b0a03dbb5e1735a42)) + +* fix(move-to-active): validate next marker and return delayUntil (#1630) ([`3cd3305`](https://github.com/taskforcesh/bullmq/commit/3cd33052fc711a9ba560c9a431630be5cdd02193)) + +* fix(worker): add max concurrency from the beginning (#1597) fixes #1589 ([`6f49db3`](https://github.com/taskforcesh/bullmq/commit/6f49db3fb15119d13f99cd83d49f2a7bdcb614cd)) + +* fix: circular references (#1622) ([`f607ec7`](https://github.com/taskforcesh/bullmq/commit/f607ec7530fb4430e8cab7ed325583bd9d171ccf)) + +* fix: #1603 performance issues in `remove()` (#1607) ([`2541215`](https://github.com/taskforcesh/bullmq/commit/2541215bcf81dcd52eaefa02530c3812a5135fbf)) + +* fix(delayed): remove marker after being consumed (#1620) fixes #1615 ([`9fce0f0`](https://github.com/taskforcesh/bullmq/commit/9fce0f05e5acc1918a276b03e8cb9c16083cb509)) + +* fix(sandbox): throw error when no exported function (#1588) fixes #1587 ([`c031891`](https://github.com/taskforcesh/bullmq/commit/c03189184c8eeeb324f005b86e93d114abbe2154)) + +* fix(job): fetch parent before job moves to complete (#1580) ([`6a6c0dc`](https://github.com/taskforcesh/bullmq/commit/6a6c0dca30bb0a2417e0c62d4c80202c750322dd)) + +* fix(get-jobs): filter marker (#1551) ([`4add0ef`](https://github.com/taskforcesh/bullmq/commit/4add0efa7857cc2f7b6d3c0c78a7f82cb7a46933)) + +* fix(exponential): respect exponential backoff delay (#1581) ([`145dd32`](https://github.com/taskforcesh/bullmq/commit/145dd329bb9f8254b404f4c5fbf7a50359202d37)) + +* fix(worker): add token postfix (#1575) ([`1d3e368`](https://github.com/taskforcesh/bullmq/commit/1d3e368021041bb9861761c86fe3e04914b0c52f)) + +* fix(worker): try catch setname call (#1576) fixes #1574 ([`0c42fd8`](https://github.com/taskforcesh/bullmq/commit/0c42fd8c07dbac7ace81e97e45440af93fc622a5)) + +* fix(get-workers): set name when ready event in connection (#1564) ([`de93c17`](https://github.com/taskforcesh/bullmq/commit/de93c172901650e1666c48423a39076f2c7b9c7b)) + +* fix(job): console warn custom job ids when they represent integers (#1569) ([`6e677d2`](https://github.com/taskforcesh/bullmq/commit/6e677d2800957b368bef4247b8e4328c5758f262)) + +* fix(add-job): throw error when jobId represents an integer (#1556) ([`db617d7`](https://github.com/taskforcesh/bullmq/commit/db617d79e8f55b5c9e0df4b6bfd4247612016da1)) + +* fix(add-job): do not update job that already exist (#1550) ([`26f6311`](https://github.com/taskforcesh/bullmq/commit/26f6311cd0d2b936e404d0abebca9637f314a209)) + +* fix(rate-limit): delete rateLimiterKey when 0 (#1553) ([`0b88e5b`](https://github.com/taskforcesh/bullmq/commit/0b88e5b94b4a0dc0d4000f7fd4b327f402248ad2)) + +* fix(worker): consider removed jobs in failed event (#1500) ([`8704b9a`](https://github.com/taskforcesh/bullmq/commit/8704b9a10575fd7df738296f7156057123592b86)) + +* fix(change-delay): remove delayed stream (#1509) ([`6e4809e`](https://github.com/taskforcesh/bullmq/commit/6e4809e5d8f7ef35bc0871d21bfcdcb0f1f316c6)) + +* fix(worker): restore dynamic concurrency change (#1515) ([`fdac5c2`](https://github.com/taskforcesh/bullmq/commit/fdac5c27607dfaaaad1c1256c47f2ae448efcd21)) + +* fix(retry-job): consider promoting delayed jobs (#1508) ([`d0b3412`](https://github.com/taskforcesh/bullmq/commit/d0b3412d222449c24ab36068a791d08ea19ed922)) + +* fix(move-to-delayed): consider promoting delayed jobs (#1493) ([`909da2b`](https://github.com/taskforcesh/bullmq/commit/909da2bc2718a588379b3fdd9791bc8e51ad1dad)) + +* fix(repeat): remove cron in favor of pattern option (#1456) ([`3cc150e`](https://github.com/taskforcesh/bullmq/commit/3cc150e32cb5971ad4ba6ff91246aaf75296c165)) + +* fix(job): send failed event when failParentOnFailure (#1481) fixes #1469 ([`b20eb6f`](https://github.com/taskforcesh/bullmq/commit/b20eb6f65c7e2c4593d5f9f4d4b940f780bf26d2)) + +* fix(connection): validate array of strings in Cluster (#1468) fixes #1467 ([`8355182`](https://github.com/taskforcesh/bullmq/commit/8355182a372b68ec62e9c3953bacbd69e0abfc74)) + +* fix(sandbox): get open port using built-in module instead of get-port (#1446) ([`6db6288`](https://github.com/taskforcesh/bullmq/commit/6db628868a9d64c5a3e47d1c9201017e6d05c1ae)) + +* fix(job): update delay value when moving to wait (#1436) ([`9560915`](https://github.com/taskforcesh/bullmq/commit/95609158c1800cf661f22ad7995541fb9474826a)) + +* fix(drain): consider empty active list (#1412) ([`f919a50`](https://github.com/taskforcesh/bullmq/commit/f919a50b2f4972dcb9ecd5848b0f7fd9a0e137ea)) + +* fix(job): update delay when changeDelay (#1389) fixes #1160 ([`d9b100d`](https://github.com/taskforcesh/bullmq/commit/d9b100d04112c518ef2efbcf5586aa1226ccccab)) + +* fix: revert "chore: allow esm imports through exports field" (#1388) ([`8e51272`](https://github.com/taskforcesh/bullmq/commit/8e512724b1e8145bceb0152b70a934decf6d6864)) + +* fix: revert "feat(sandbox): experimental support ESM" (#1384) + +This reverts commit ed0faff3c67c436116eb625ffacb03e435caee3f. ([`7d180eb`](https://github.com/taskforcesh/bullmq/commit/7d180eb18daa41062dcbca72213bc9d9f40153db)) + +* fix(clean): consider priority when cleaning waiting jobs (#1357) ([`ced5be1`](https://github.com/taskforcesh/bullmq/commit/ced5be1c9531953baa9cf87d6bda3faa5863270d)) + +* fix(parent-priority-check): use tonumber on priority (#1370) ([`e2043c6`](https://github.com/taskforcesh/bullmq/commit/e2043c6f4b8ad5faea8c13edde76aea60612fec6)) + +* fix(move-parent-to-wait): emit waiting instead of active event (#1356) ([`53578dd`](https://github.com/taskforcesh/bullmq/commit/53578dd1cbe31b49361a833b1aca449486f3b925)) + +* fix(job): declare discarded as protected (#1352) ([`870e01c`](https://github.com/taskforcesh/bullmq/commit/870e01c4ab602c1e6e351cc369f3eac5f7afa083)) + +* fix(get-flow): consider groupKey (#1336) fixes #1334 ([`9f31272`](https://github.com/taskforcesh/bullmq/commit/9f31272fa8b3f5b8ab26f15e21bd80537c5baef0)) + +* fix(promote): consider empty queue when paused (#1335) ([`9f742e8`](https://github.com/taskforcesh/bullmq/commit/9f742e88d6338ce9ac7e0413bdac411ab6cf675c)) + +* fix(sandboxed-process): consider UnrecoverableError (#1320) fixes #1317 ([`c1269cc`](https://github.com/taskforcesh/bullmq/commit/c1269cc772c6cec84d82ff790b9a7c9cc4242dcb)) + +* fix(retry-jobs): consider paused queue (#1321) ([`3e9703d`](https://github.com/taskforcesh/bullmq/commit/3e9703d17fc9dc601d5d77e999f3e9a137f20843)) + +* fix(retry-job): consider paused queue (#1314) ([`907ae1d`](https://github.com/taskforcesh/bullmq/commit/907ae1d7e3504f31c625ec8a09e32785f08357ff)) + +* fix(parent): emit waiting event when no pending children (#1296) ([`aa8fa3f`](https://github.com/taskforcesh/bullmq/commit/aa8fa3f8cd5ab6d7d309d87ae45c558249b1c29c)) + +* fix: avoid calling delay() if queue is being closed (#1295) ([`52a5045`](https://github.com/taskforcesh/bullmq/commit/52a5045b903ed6e0e73dd747748787a6389f12f7)) + +* fix(queue): get rid of repeat options from defaultJobOptions (#1284) ([`cdd2a20`](https://github.com/taskforcesh/bullmq/commit/cdd2a20c2c4ca47042ecd1da525ecb72941e4910)) + +* fix(error-prototype): define custom name for toJSON method (#1272) ([`66d80da`](https://github.com/taskforcesh/bullmq/commit/66d80da4a6043755c7d296addb31857816ea4da3)) + +* fix(queue): fix addBulk signature ResultType (#1268) ([`f6770cc`](https://github.com/taskforcesh/bullmq/commit/f6770cc383b68bf7b2fa655cd9eda713a06835aa)) + +* fix(job): save finishedOn attribute on instance (#1267) ([`4cf6a63`](https://github.com/taskforcesh/bullmq/commit/4cf6a63d197e6095841bb87cef297a9533ac79c3)) + +* fix(waiting-children): pass right timestamp value in moveToWaitingChildren (#1260) ([`0f993f7`](https://github.com/taskforcesh/bullmq/commit/0f993f71ed481b02a3f859a2109177352336cb9a)) + +* fix(close): emit ioredis:close event instead of error (#1251) fixes #1231 ([`74c1c38`](https://github.com/taskforcesh/bullmq/commit/74c1c38f7ff468da1adc63aff160e31940d682a9)) + +* fix(get-workers): use blockingConnection client to set clientName (#1255) fixes #1254 ([`df796bd`](https://github.com/taskforcesh/bullmq/commit/df796bd0c085aff72cef001395809b3f1a8045e4)) + +* fix(redis-connection): save cluster opts and coerse redis version (#1247) ref #1246 fixes #1243 ([`acb69b5`](https://github.com/taskforcesh/bullmq/commit/acb69b57d7a6417b8ca9fe1576a94d16e41f12d7)) + +* fix(job): add job helper attribute for extension (#1242) ([`4d7ae9e`](https://github.com/taskforcesh/bullmq/commit/4d7ae9e3fda23650e802ebac6b33ff3350f116f6)) + +* fix(remove-job): pass right prev param in removed event (#1237) ([`54df47e`](https://github.com/taskforcesh/bullmq/commit/54df47edf715a0a2a42687bf827e0a62c03951a5)) + +* fix(repeatable): emit removed event when removing (#1229) ([`7d2de8d`](https://github.com/taskforcesh/bullmq/commit/7d2de8d075e5ee7774501429c5177b729c430c20)) + +* fix(remove-parent): check removed record from waiting-children (#1227) ([`e7b25d0`](https://github.com/taskforcesh/bullmq/commit/e7b25d00acb860ee3df36c6214a7162b2cf79635)) + +* fix(stalled): consider removeOnFail when failing jobs (#1225) fixes #1171 ([`38486cb`](https://github.com/taskforcesh/bullmq/commit/38486cb4d7cbfc78bd64d71f19d8bfbc908f3fc7)) + +* fix(add-bulk): use for loop and throw if error is present (#1223) fixes #1222 ([`564de4f`](https://github.com/taskforcesh/bullmq/commit/564de4f907648f5a5667a845c5366f73cff1d384)) + +* fix(job): delete token when moving to delayed (#1208) ([`37acf41`](https://github.com/taskforcesh/bullmq/commit/37acf4109d17090dfaef992267e48130d34f7187)) + +* fix(queue-base): emit close error when no closing (#1203) fixes #1205 ([`4d76582`](https://github.com/taskforcesh/bullmq/commit/4d7658272af94b57a09486e1141b0e15a7bac3ba)) + +* fix(queue-scheduler): apply isNotConnectionError (#1189) fixes #1181 ([`605d685`](https://github.com/taskforcesh/bullmq/commit/605d68595d8fa1d9d47348a3fa9e0d7a4e28c706)) + +* fix(cluster): check correct Upstash host (#1195) fixes #1193 ([`69f2863`](https://github.com/taskforcesh/bullmq/commit/69f28632408c741219c1ba49304d36f49cf5cb83)) + +* fix(job): remove Error from Promise return in moveToWaitingChildren (#1197) ([`180a8bf`](https://github.com/taskforcesh/bullmq/commit/180a8bf8fb2fe62b9929765a6dfd084574c77936)) + +* fix(worker): restore worker suffix to empty string (#1194) fixes #1185 ([`2666ea5`](https://github.com/taskforcesh/bullmq/commit/2666ea5b8532645da24482cf01c5692da5f2ceda)) + +* fix(connection): remove Queue reconnect overrides (#1119) ([`83f1c79`](https://github.com/taskforcesh/bullmq/commit/83f1c797b8a5272028c8d78d5ce464236e90909e)) + +* fix(clean): consider processedOn and finishedOn attributes (#1158) ([`8c3cb72`](https://github.com/taskforcesh/bullmq/commit/8c3cb72235ec6123da389553f37433c2943e0f57)) + +* fix(queue): close repeat connection when calling close (#1154) ([`7d79616`](https://github.com/taskforcesh/bullmq/commit/7d796167229048ec79660ca5d3ac8a7c85d125e7)) + +* fix(async-send): check proc.send type (#1150) ([`4f44173`](https://github.com/taskforcesh/bullmq/commit/4f44173f0a3cc54705ca9a7e1730aeff26ea1c5a)) + +* fix(trim-events): consider maxLenEvents as 0 (#1137) ([`bc58a49`](https://github.com/taskforcesh/bullmq/commit/bc58a49fba1b6f4e3595a0371ecf8410000a9021)) + +* fix(flow): remove processed children (#1060) fixes #1056 ([`6b54e86`](https://github.com/taskforcesh/bullmq/commit/6b54e86c12f287a13da036f3ec7801b8656f0434)) + +* fix(master): do not export master file (#1136) fixes #1125 ref #1129 ([`6aa2f96`](https://github.com/taskforcesh/bullmq/commit/6aa2f9657b8787aa791ab5af7267a6d27d7d7869)) + +* fix(queue): sanitize job types in getJobs and getJobsCount (#1113) fixes #1112 ([`d452b29`](https://github.com/taskforcesh/bullmq/commit/d452b29773cead153a73b8322adda3164fb610d8)) + +* fix(drained): emit event only once when queue has drained the waiting list (#1123) fixes #1121 ref #1070 ([`b89b4e8`](https://github.com/taskforcesh/bullmq/commit/b89b4e8a83fe4c9349ac5a9c439fc07374ff1e63)) + +* fix(utils): fix proc.send type (#1122) fixes #1120 ([`da23977`](https://github.com/taskforcesh/bullmq/commit/da239774379825d9f0a51c118740bc0fefa568bd)) + +* fix(get-waiting-children-count): consider waiting-children status only (#1117) ([`1820df7`](https://github.com/taskforcesh/bullmq/commit/1820df73c17ce119d2fdb0f526fc95f99845a5ec)) + +* fix(rate-limiter): move job to wait after retry when groupKey is missed (#1103) fixes #1084 ([`8aeab37`](https://github.com/taskforcesh/bullmq/commit/8aeab37ac5a5c1c760be21bff2ba8752a485577c)) + +* fix(cluster): check for host presence in Upstash validation (#1102) fixes #1101 ([`54d4eac`](https://github.com/taskforcesh/bullmq/commit/54d4eac52cfe13d4be99410932c0226c8d06d5d5)) + +* fix(connection): throw error when Upstash host is provided (#1098) fixes #1087 ([`5156d0a`](https://github.com/taskforcesh/bullmq/commit/5156d0a4812d8c649a3b41bd98e3e0efb41d0491)) + +* fix(move-to-finished): increment attemptsMade when moving job to active (#1095) fixes #1094 ([`321b0e1`](https://github.com/taskforcesh/bullmq/commit/321b0e1d515d01c5b3f1ca9f404cd571e3f753b7)) + +* fix(flow): respect defaultJobOptions from queue opts (#1080) fixes #1034 + + + +* docs(flow): add descriptions of opts param ([`0aca072`](https://github.com/taskforcesh/bullmq/commit/0aca072f805302e660b6675fd4097ba893c91eb0)) + +* fix(move-to-finished): validate lock first (#1064) ([`9da1b29`](https://github.com/taskforcesh/bullmq/commit/9da1b29486c6c6e2b097ec2f6107494a36525495)) + +* fix(clean): consider checking parent jobs when cleaning (#1048) ([`0708a24`](https://github.com/taskforcesh/bullmq/commit/0708a24c7f4cb6d1cda776ed983d3f20fc3261f1)) + +* fix(drain): delete priority queueKey (#1049) ([`2e6129a`](https://github.com/taskforcesh/bullmq/commit/2e6129a4a08783eeafa2f0b69c10ac810f53d085)) + +* fix(update): throw error when missing job key (#1042) ([`a00ae5c`](https://github.com/taskforcesh/bullmq/commit/a00ae5c9b3f6d51cb0229adca29d13d932fc5601)) + +* fix(drain): consider checking parent jobs when draining (#992) ([`81b7221`](https://github.com/taskforcesh/bullmq/commit/81b72213a9ff31d6b297825391de77557598ebd1)) + +* fix(repeat): consider immediately option with cron (#1030) fixes #1020 ([`b9e7488`](https://github.com/taskforcesh/bullmq/commit/b9e748870385a88b2384df40f50df3144c11d7e0)) + +* fix(retry): pass state in error message (#1027) ([`c646a45`](https://github.com/taskforcesh/bullmq/commit/c646a45377fdfaff340185d1f7bedceb80c214c2)) + +* fix(job): increase attemptsMade when moving job to active (#1009) fixes #1002 ([`0974ae0`](https://github.com/taskforcesh/bullmq/commit/0974ae0ff6db73c223be4b18fb2aab53b6a23c88)) + +* fix: dont loop through empty modules paths (#1013) fixes #1012 ([`86e84df`](https://github.com/taskforcesh/bullmq/commit/86e84df933c2662380b00a11b5f4000f2618d218)) + +* fix(queue): use 0 as initial value for getJobCountByTypes reducer (#1005) ([`f0e23ef`](https://github.com/taskforcesh/bullmq/commit/f0e23ef01b97d36c775db0bf8c9dd2f63f6cb194)) + +* fix(remove-job): consider removing parent dependency key in lua scripts (#990) ([`661abf0`](https://github.com/taskforcesh/bullmq/commit/661abf0921e663c9ea2fa7d59c12da35950637dc)) + +* fix(job): throw error when delay and repeat are provided together (#983) ([`07b0082`](https://github.com/taskforcesh/bullmq/commit/07b008273ead9360fc43564fa9ff1a7503616ceb)) + +* fix(queue): add missing error event typing (#979) ([`afdaac6`](https://github.com/taskforcesh/bullmq/commit/afdaac6b072c7af5973222cc7fb69f3f138f3b0b)) + +* fix(update-progress): throw error if job key is missing (#978) ref #977 ([`b03aaf1`](https://github.com/taskforcesh/bullmq/commit/b03aaf10ca694745d143def2129f952b9bac18a6)) + +* fix: add deprecated tag in progress and Queue3 class (#973) ([`6abdf5b`](https://github.com/taskforcesh/bullmq/commit/6abdf5b66717cc8bc8ddb048029f7d9b92509942)) + +* fix: downgrade typescript to 3.9.10 fixes #917 (#960) ([`4e51fe0`](https://github.com/taskforcesh/bullmq/commit/4e51fe00751092ee8f521039a3f2b41d881b71ae)) + +* fix(package): add jsnext:main prop (#953) ([`1a92bf7`](https://github.com/taskforcesh/bullmq/commit/1a92bf7d41860f758841c5a833c1192d9a84a25f)) + +* fix(redis-connection): consider cluster redisOptions config (#934) ([`5130f63`](https://github.com/taskforcesh/bullmq/commit/5130f63ad969efa9649ab8f9abf36a72e8f553f4)) + +* fix(move-to-active): add try catch in moveToActive call (#933) ([`bab45b0`](https://github.com/taskforcesh/bullmq/commit/bab45b05d08c625557e2df65921e12f48081d39c)) + +* fix: remove debug console.error (#932) ([`271aac3`](https://github.com/taskforcesh/bullmq/commit/271aac3417bc7f76ac02435b456552677b2847db)) + +* fix(connection): check instance options to console log deprecation message (#927) ([`fc1e2b9`](https://github.com/taskforcesh/bullmq/commit/fc1e2b9f3f20db53f9dc7ecdfa4644f02acc9f83)) + +* fix(worker): better handling of block timeout ([`be4c933`](https://github.com/taskforcesh/bullmq/commit/be4c933ae0a7a790d24a081b2ed4e7e1c0216e47)) + +* fix(worker): always try to move to active after waiting for job (#914) ([`97b7084`](https://github.com/taskforcesh/bullmq/commit/97b708451bf4ce14a461a50f8a24d14b0e40dd4b)) + +* fix(stalled): save finidhedOn when job stalled more than allowable limit (#900) ([`eb89edf`](https://github.com/taskforcesh/bullmq/commit/eb89edf2f4eb85dedb1485de32e79331940a654f)) + +* fix(tsconfig): only include node types (#895) ([`5f4fdca`](https://github.com/taskforcesh/bullmq/commit/5f4fdca5f416f2cd9d83eb0fba84e56c24320b63)) + +* fix(child-processor): add deprecation warning for progress method (#890) ([`f80b19a`](https://github.com/taskforcesh/bullmq/commit/f80b19a5aa85413b8906aa0fac1bfd09bec990cb)) + +* fix(clean): use range values in lua script (#885) ([`02ef63a`](https://github.com/taskforcesh/bullmq/commit/02ef63a8163e627a270a1c1bd74989a67c3f15f7)) + +* fix(job): use this when use new operators (#884) ([`7b84283`](https://github.com/taskforcesh/bullmq/commit/7b842839e1d30967ebf15b901033e3b31e929df8)) + +* fix(job): change private attributes to protected for extensions (#882) ([`ffcc3f0`](https://github.com/taskforcesh/bullmq/commit/ffcc3f083c23e6de3587c38fb7aacb2e19085351)) + +* fix(worker): change private attributes to protected for pro extension (#874) ([`1c73881`](https://github.com/taskforcesh/bullmq/commit/1c738819b49f206688ed7b3b9d103077045e1b05)) + +* fix(move-to-failed): delete closing check that prevents script execution (#858) fixes #834 ([`d50814f`](https://github.com/taskforcesh/bullmq/commit/d50814f864448c10fec8e93651a2095fa4ef3f4e)) + +* fix(flow): remove repeat option from FlowJob opts (#853) fixes #851 ([`c9ee2f1`](https://github.com/taskforcesh/bullmq/commit/c9ee2f100a23aa24034598b7d452c69720d7aabd)) + +* fix(commands): copy includes lua scripts (#843) fixes #837 ([`cab33e0`](https://github.com/taskforcesh/bullmq/commit/cab33e08bc78bd3c45b86158a818100beeb06d81)) + +* fix(queue-base): show connection deprecation warning (#832) fixes #829 ([`5d023fe`](https://github.com/taskforcesh/bullmq/commit/5d023fe7b671a2547398fd68995ccd85216cc7a5)) + +* fix(child-pool): pipe process stdout and stderr(#822) fixes #821 ([`13f5c62`](https://github.com/taskforcesh/bullmq/commit/13f5c62174925e4638acda6a9de379668048189d)) + +* fix(msgpackr): upgrade version to 1.4.6 to support esm bundlers (#818) fixes #813 ([`913d7a9`](https://github.com/taskforcesh/bullmq/commit/913d7a9a892d2c7e2fa5822367355c2dee888583)) + +* fix(change-delay): add current time to delay (#789) fixes #787 ([`4a70def`](https://github.com/taskforcesh/bullmq/commit/4a70def6e85cf9ea384ec5f38c3c4f83e4eb523c)) + +* fix(obliterate): consider dependencies and processed keys (#765) ([`fd6bad8`](https://github.com/taskforcesh/bullmq/commit/fd6bad8c7444c21e6f1d67611a28f8e4aace293d)) + +* fix(flow-producer): use default prefix in add method (#763) fixes #762 ([`fffdb55`](https://github.com/taskforcesh/bullmq/commit/fffdb55f37917776494a4471673ef4564e0faab5)) + +* fix(running): move running attribute before first async call (#756) ([`f7f0660`](https://github.com/taskforcesh/bullmq/commit/f7f066076bbe6cbcbf716ae622d55c6c1ae9b270)) + +* fix(wait-for-job): add catch block and emit error (#749) ([`b407f9a`](https://github.com/taskforcesh/bullmq/commit/b407f9ac429c825984856eebca58bbfd16feb9d3)) + +* fix(connection): fail only if redis connection does not recover (#751) ([`8d59ced`](https://github.com/taskforcesh/bullmq/commit/8d59ced27831a636f40ed4233eba3d4ac0654534)) + +* fix(is-finished): reject when missing job key (#746) fixes #85 ([`bd49bd2`](https://github.com/taskforcesh/bullmq/commit/bd49bd20492676559072e5e16adb6d4e47afb22b)) + +* fix(wait-until-finished): isFinished return failedReason or returnValue (#743) fixes #555 ([`63acae9`](https://github.com/taskforcesh/bullmq/commit/63acae98cb083ec978ea17833819d1a21086be33)) + +* fix(add-job): throw error when missing parent key (#739) ([`d751070`](https://github.com/taskforcesh/bullmq/commit/d751070f4ab6553c782341270574ccd253d309b8)) + +* fix(queue-events): duplicate connection (#733) fixes #726 ([`e2531ed`](https://github.com/taskforcesh/bullmq/commit/e2531ed0c1dc195f210f8cf996e9ffe04c9e4b7d)) + +* fix(worker): use spread operator in processing map keys (#720) ([`32f1e57`](https://github.com/taskforcesh/bullmq/commit/32f1e570a9a3369174a228f729f1d1330dcb6965)) + +* fix(retry): throw error when retry non failed job (#717) ([`bb9b192`](https://github.com/taskforcesh/bullmq/commit/bb9b192e9a1a4f3c25374fcb8c0fb2159eb3f779)) + +* fix: connect if redis client has status "wait" + +Summary: When supplying your own IORedis instance and `lazyConnect` is true, the RedisConnection instance will not connect on its own because it does not check if it's `status` is "wait". While this may be intended behavior, there is no direct way to call `connect` on the duplicated Redis instance causing it to never connect and indefinitely wait until ready. ([`f711717`](https://github.com/taskforcesh/bullmq/commit/f711717f56822aef43c9fd0440e30fad0876ba62)) + +* fix(queue): ensure the Queue constructor doesn't try to set queue options if the client is closed + +In my app we disconnect queues sometimes quite quickly after constructing them, and see this error every so often in our CI logs: + +``` +/app/node_modules/bullmq/node_modules/ioredis/built/redis/index.js:620 + command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG)); + ^ +Error: Connection is closed. + at Redis.sendCommand (/app/node_modules/bullmq/node_modules/ioredis/built/redis/index.js:620:24) + at Redis.hset (/app/node_modules/bullmq/node_modules/ioredis/built/commander.js:111:25) + at /app/node_modules/bullmq/src/classes/queue.ts:29:14 +``` + +I am not exactly sure why it only happens sometimes but not others, but regardless, I think it's a good idea not to try to run the floating `hset` in the queue constructor if the client has been closed. This prevents that by first checking if the client has been closed before doing this floating work. ([`b40c6eb`](https://github.com/taskforcesh/bullmq/commit/b40c6eb931a71d0ae9f6454eb70d84259a6981b7)) + +* fix(sandbox): use updateProgress method name ([`27d62c3`](https://github.com/taskforcesh/bullmq/commit/27d62c32b2fac091b2700d6077de593c9fda4c22)) + +* fix(reprocess): do not store job.id in added list ([`9c0605e`](https://github.com/taskforcesh/bullmq/commit/9c0605e10f0bbdce94153d3f318d56c23bfd3269)) + +* fix(stalled-jobs): move stalled jobs to wait in batches + +re #422 ([`a23fcb8`](https://github.com/taskforcesh/bullmq/commit/a23fcb82d4ca20cbc4b8cd8b544b2d2eaddd86c3)) + +* fix(redis-connection): remove error event listener from client ([`2d70fe7`](https://github.com/taskforcesh/bullmq/commit/2d70fe7cc7d43673674ec2ba0204c10661b34e95)) + +* fix(worker): remove processed key when removeOnComplete ([`4ec1b73`](https://github.com/taskforcesh/bullmq/commit/4ec1b739d6aeeb2fc21887b58f5978027ddcdb50)) + +* fix(move-to-waiting-children): make opts optional ([`33bd76a`](https://github.com/taskforcesh/bullmq/commit/33bd76a2cac9be450b5d76c6cfe16751c7569ceb)) + +* fix(move-stalled-jobs-to-wait): send failedReason to queueEvents ([`7c510b5`](https://github.com/taskforcesh/bullmq/commit/7c510b542558bd4b1330371b73331f37b97a818d)) + +* fix(removejob): delete processed hash ([`a2a5058`](https://github.com/taskforcesh/bullmq/commit/a2a5058f18ab77ed4d0114d48f47e6144d632cbf)) + +* fix: ensure connection reconnects when pausing fixes #160 ([`f38fee8`](https://github.com/taskforcesh/bullmq/commit/f38fee84def75dd8a38cbb8bfb5aa662485ddf91)) + +* fix(getjoblogs): no reversed pagination ([`fb0c3a5`](https://github.com/taskforcesh/bullmq/commit/fb0c3a50f0d37851a8f35cb4c478259a63d93461)) + +* fix(flow-producer): use custom jobId as parentId for children, fixes #552 ([`645b576`](https://github.com/taskforcesh/bullmq/commit/645b576c1aabd8426ab77a68c199a594867cd729)) + +* fix(flow-producer): process parent with children as empty array, fixes #547 ([`48168f0`](https://github.com/taskforcesh/bullmq/commit/48168f07cbaed7ed522c68d127a0c7d5e4cb380e)) + +* fix(cluster): add redis cluster support ([`5a7dd14`](https://github.com/taskforcesh/bullmq/commit/5a7dd145bd3ae11850cac6d1b4fb9b01af0e6766)) + +* fix(sandbox): properly redirect stdout (#525) ([`c8642a0`](https://github.com/taskforcesh/bullmq/commit/c8642a0724dc3d2f77abc4b5d6d24efa67c1e592)) + +* fix(sandbox): handle broken processor files ([`2326983`](https://github.com/taskforcesh/bullmq/commit/23269839af0be2f7cf2a4f6062563d30904bc259)) + +* fix(queueevents): add active type fixes #519 ([`10af883`](https://github.com/taskforcesh/bullmq/commit/10af883db849cf9392b26724903f88752d9be92c)) + +* fix: add missing Redis Cluster types fixes #406 ([`07743ff`](https://github.com/taskforcesh/bullmq/commit/07743ff310ad716802afdd5bdc6844eb5296318e)) + +* fix(addjob): fix redis cluster CROSSSLOT ([`a5fd1d7`](https://github.com/taskforcesh/bullmq/commit/a5fd1d7a0713585d11bd862bfe2d426d5242bd3c)) + +* fix(movetocompleted): should not complete before children ([`812ff66`](https://github.com/taskforcesh/bullmq/commit/812ff664b3e162dd87831ca04ebfdb783cc7ae5b)) + +* fix: remove internal deps on barrel fixes #469 (#495) ([`60dbeed`](https://github.com/taskforcesh/bullmq/commit/60dbeed7ff1d9b6cb0e35590713fee8a7be09477)) + +* fix(flows): correct typings fixes #492 ([`a77f80b`](https://github.com/taskforcesh/bullmq/commit/a77f80bc07e7627f512323f0dcc9141fe408809e)) + +* fix(movetodelayed): check if job is in active state ([`4e63f70`](https://github.com/taskforcesh/bullmq/commit/4e63f70aac367d4dd695bbe07c72a08a82a65d97)) + +* fix(obliterate): safer implementation ([`82f571f`](https://github.com/taskforcesh/bullmq/commit/82f571f2548c61c776b897fd1c5050bb09c8afca)) + +* fix: specify promise type to make TS 4.1 and 4.2 happy. (#418) ([`702f609`](https://github.com/taskforcesh/bullmq/commit/702f609b410d8b0652c2d0504a8a67526966fdc3)) + +* fix: improve job timeout notification by giving the job name and id in the error message (#387) ([`ca886b1`](https://github.com/taskforcesh/bullmq/commit/ca886b1f854051aed0888f5b872a64b052b2383e)) + +* fix: job finish queue events race condition ([`355bca5`](https://github.com/taskforcesh/bullmq/commit/355bca5ee128bf4ff37608746f9c6f7cca580eb0)) + +* fix: catch errors from Repeat (#348) ([`09a1a98`](https://github.com/taskforcesh/bullmq/commit/09a1a98fc42dc1a9ae98bfb29c0cca3fac02013f)) + +* fix: correctly handle "falsy" data values fixes #264 ([`cf1dbaf`](https://github.com/taskforcesh/bullmq/commit/cf1dbaf7e60d74fc8443a5f8a537455f28a8dba3)) + +* fix: promote jobs to the right "list" when paused ([`d3df615`](https://github.com/taskforcesh/bullmq/commit/d3df615d37b1114c02eacb45f23643ee2f05374d)) + +* fix: clientCommandMessageReg to support GCP memorystore v5 ([`8408dda`](https://github.com/taskforcesh/bullmq/commit/8408dda9fa64fc0b968e88fb2726e0a30f717ed7)) + +* fix(worker): setname on worker blocking connection (#291) ([`50a87fc`](https://github.com/taskforcesh/bullmq/commit/50a87fcb1dab976a6a0273d2b0cc4b31b63c015f)) + +* fix(worker): continue processing if handleFailed fails. fixes #286 ([`4ef1cbc`](https://github.com/taskforcesh/bullmq/commit/4ef1cbc13d53897b57ae3d271afbaa1b213824aa)) + +* fix: remove async for loop in child pool fixes #229 ([`d77505e`](https://github.com/taskforcesh/bullmq/commit/d77505e989cd1395465c5222613555f79e4d9720)) + +* fix(typescript): fix typings, upgrade ioredis dependencies (#220) ([`7059f20`](https://github.com/taskforcesh/bullmq/commit/7059f2089553a206ab3937f7fd0d0b9de96aa7b7)) + +* fix: remove unused options ([`23aadc3`](https://github.com/taskforcesh/bullmq/commit/23aadc300b947693f4afb22296d236a924bd11ca)) + +* fix(scheduler): remove unnecessary division by 4096 ([`4d25e95`](https://github.com/taskforcesh/bullmq/commit/4d25e95f9522388bd85e932e04b6668e3da57686)) + +* fix(scheduler): divide timestamp by 4096 in update set fixes #168 ([`0c5db83`](https://github.com/taskforcesh/bullmq/commit/0c5db8391bb8994bee19f25a33efb9dfee792d7b)) + +* fix(scheduler): divide next timestamp by 4096 (#204) + +authored-by: Boris Dorofeev <bdorofeev@bdorofeev-laptop.corp.ps.kz> ([`9562d74`](https://github.com/taskforcesh/bullmq/commit/9562d74625e20b7b6de8750339c85345ba027357)) + +* fix(queue-base): error event is passed through + +Existing code doesn't seem to pass 'error' event through in a right way. ([`ad14e77`](https://github.com/taskforcesh/bullmq/commit/ad14e777171c0c44b7e50752d9847dec23f46158)) + +* fix(worker): do not use global child pool fixes #172 ([`bc65f26`](https://github.com/taskforcesh/bullmq/commit/bc65f26dd47c59d0a7277ac947140405557be9a5)) + +* fix(job): added nullable/optional properties + +Marked finishedOn and processedOn as nullable/optional ([`cef134f`](https://github.com/taskforcesh/bullmq/commit/cef134f7c4d87e1b80ba42a5e06c3877956ff4cc)) + +* fix: restore the Job timestamp when deserializing JSON data (#138) (#152) ([`c171bd4`](https://github.com/taskforcesh/bullmq/commit/c171bd47f7b75378e75307a1decdc0f630ac1cd6)) + +* fix: modified imports to work when esModuleInterop is disabled (#132) + +fixes https://github.com/taskforcesh/bullmq/issues/129 ([`01681f2`](https://github.com/taskforcesh/bullmq/commit/01681f282bafac2df2c602edb51d6bde3483896c)) + +* fix: exit code 12 when using inspect with child process (#137) ([`43ebc67`](https://github.com/taskforcesh/bullmq/commit/43ebc67cec3e8f283f9a555b4466cf918226687b)) + +* fix: cleanup signatures for queue add and addBulk (#127) + +The addBulk signature was missing the data type and the name parameter +did not match between the two functions. ([`48e221b`](https://github.com/taskforcesh/bullmq/commit/48e221b53909079a4def9c48c1b69cebabd0ed74)) + +* fix: modified QueueGetters.getJob and Job.fromId to return undefined +instead of null ([`ede352b`](https://github.com/taskforcesh/bullmq/commit/ede352be75ffe05bf633516db9eda88467c562bf)) + +* fix: modified QueueGetters.getJob and Job.fromId to also return null to +maintain consistency with v3 API. ([`65183fc`](https://github.com/taskforcesh/bullmq/commit/65183fcf542d0227ec1d4d6637b46b5381331787)) + +* fix: avoid the .toJSON serializer interface #70 + +renames Job#toJSON to Job#asJSON and adds a test ([`5941b82`](https://github.com/taskforcesh/bullmq/commit/5941b82b646e46d53970197a404e5ea54f09d008)) + +* fix: default job settings #58 + +I updated job options merging in order to override default job options when options are provided at job level. +Maybe a deep merge between the two objects could be even better. ([`667fc6e`](https://github.com/taskforcesh/bullmq/commit/667fc6e00ae4d6da639d285a104fb67e01c95bbd)) + +### Performance + +* perf(retry-job): get target queue list once (#1921) ([`8a7a9dd`](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) + +* perf(rate-limit): call pttl in script moveJobFromActiveToWait (#1889) ([`e0d2992`](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) + +* perf(get-dependencies): replace slow object destructuring with single object (#1612) ([`621748e`](https://github.com/taskforcesh/bullmq/commit/621748ec7727b46ce57eb9d2b46ef981874cdf4c)) + +* perf(counts): delete delayed marker when needed (#1583) ([`cc26f1c`](https://github.com/taskforcesh/bullmq/commit/cc26f1cd550de76c7588d3a98187b80ee78c40c4)) + +* perf(get-children-values): replace slow object destructuring with single object (#1586) ([`857d403`](https://github.com/taskforcesh/bullmq/commit/857d40377a6eb2c0101e6d16d9085ecd4b52b016)) + +* perf(scripts): pre-build scripts (#1441) ([`7f72603`](https://github.com/taskforcesh/bullmq/commit/7f72603d463f705d0617898cb221f832c49a4aa3)) + +* perf(script-loader): use cache to read script once (#1410) ([`f956e93`](https://github.com/taskforcesh/bullmq/commit/f956e937ae3488cdcd0e2eacbe3e096c8066ebd1)) + +* perf(add-job): handle parent split on js (#1397) ([`566f074`](https://github.com/taskforcesh/bullmq/commit/566f0747110679e5b07e7642fef793744565fffe)) + +* perf(clean-jobs-in-set): use ZRANGEBYSCORE when limit > 0 (#1338) ([`f0d9985`](https://github.com/taskforcesh/bullmq/commit/f0d998541f03778ca2a092080a19e6bf7b7d0af1)) + +* perf(remove-job): send prefix key instead of jobKey (#1252) ([`452856a`](https://github.com/taskforcesh/bullmq/commit/452856a6c8c6e67ffda595c26c30988a15c1c1a4)) + +* perf(clean): speed up clean operation using deletion marker (#1144) ([`5fb32ef`](https://github.com/taskforcesh/bullmq/commit/5fb32ef2c60843d8d1f2cbc000aacf4df3388b7e)) + +* perf(move-to-finished): avoid an extra roundtrip when using rate limit (#1131) ([`1711547`](https://github.com/taskforcesh/bullmq/commit/171154707bf5cbcb750ea9d2a9957128c1abc044)) + +* perf(remove-parent-dependency): do not emit wait event in hard deletions (#1045) ([`4069821`](https://github.com/taskforcesh/bullmq/commit/40698218d13a880615f832a9926f0f057b1c33f9)) + +* perf(lua): call del command with multiple keys (#1035) ([`9cfaab8`](https://github.com/taskforcesh/bullmq/commit/9cfaab8965d0c9f92460d31d6c3083839c36447f)) + +* perf(retry): delete props in retryJob lua script (#1016) ([`547cedd`](https://github.com/taskforcesh/bullmq/commit/547cedd5ecd30c9a73d37e4053b9e518cb3fbe53)) + +* perf(add-job): save parent data as json (#859) ([`556d4ee`](https://github.com/taskforcesh/bullmq/commit/556d4ee427090f60270945a7fd438e2595bb43e9)) + +* perf(clean): speed up clean method when called with limit param (#864) ([`09b5cb4`](https://github.com/taskforcesh/bullmq/commit/09b5cb45a79c4bc53a52d540918c22477a066e16)) + +* perf(obliterate): do not pass unused variables (#766) ([`e9abfa6`](https://github.com/taskforcesh/bullmq/commit/e9abfa6f821064901770a9b72adfb00cac96154c)) + +### Refactor + +* refactor(move-to-finished): return 4 values to prevent python errors when destructuring (#1936) ([`f391f2a`](https://github.com/taskforcesh/bullmq/commit/f391f2a27d5c2959c2a591d14578b9ae125c35f6)) + +* refactor(finished-on): save finishedOn on job methods (#1857) ([`5039369`](https://github.com/taskforcesh/bullmq/commit/503936909e004423536667720952e87fee90cff0)) + +* refactor(python): update getCompleted return type (#1820) ([`ac8a96b`](https://github.com/taskforcesh/bullmq/commit/ac8a96bafa72542ffc2c632a1059a1403e282bc6)) + +* refactor(python): type hinting, remove white space, semicolon etc.. (#1818) ([`2dbb1ab`](https://github.com/taskforcesh/bullmq/commit/2dbb1ab74b11e2c894b96f44e64fe405a9126884)) + +* refactor(python): replace string concatenation with string formatting ([`ba26f64`](https://github.com/taskforcesh/bullmq/commit/ba26f64932d4b90861c001ee54bd60bcc158e6c9)) + +* refactor(lodash): replace flatten and fromPairs functions (#854) ([`34431f9`](https://github.com/taskforcesh/bullmq/commit/34431f90e025cc2d8f0eb88a04c21e4f41d43487)) + +* refactor(promote): reuse addJobWithPriority include (#1485) ([`899d3d0`](https://github.com/taskforcesh/bullmq/commit/899d3d05f5369d40d7ff22165c05fee412678a7a)) + +* refactor(job): replace slow object destructuring with single object in getDependencies (#1324) fixes #1323 ([`ec8afcc`](https://github.com/taskforcesh/bullmq/commit/ec8afcc54a7fc6feeb9fcd124b5c69392909b8d3)) + +* refactor(clean-jobs-in-set): split script into include functions (#1271) ([`f3fc053`](https://github.com/taskforcesh/bullmq/commit/f3fc053b33df2deb2cfa1f89d0c774e94c6d61d2)) + +* refactor(scripts): create class instance to handle scripts call (#1240) ([`87a16f0`](https://github.com/taskforcesh/bullmq/commit/87a16f0570d17e4db33fc5deb0131d4c8209704a)) + +* refactor(remove-jobs): remove timestamp param from removeJobsByMaxCount (#1233) ([`83465ff`](https://github.com/taskforcesh/bullmq/commit/83465ff391ea2ba050adc62bba5630d311f66fab)) + +* refactor(get-workers): add worker suffix (#1176) ([`8376f4c`](https://github.com/taskforcesh/bullmq/commit/8376f4c055fc134bb51d6605a4ddffbffdf5130e)) + +* refactor(backoff-options): improve IntelliSense for backoff types (#1168) ([`1633c5b`](https://github.com/taskforcesh/bullmq/commit/1633c5b85555a3c7f90e535dd8dcfce2e2127b86)) + +* refactor(move-to-finished): pass some args using pack (#1128) ([`b60ac86`](https://github.com/taskforcesh/bullmq/commit/b60ac86b4684ee6cc3b931238b59d3aecf1af44f)) + +* refactor: extract trimEvents as include (#1071) ([`6ded7ba`](https://github.com/taskforcesh/bullmq/commit/6ded7bae22b0f369ebb68960d48780f547d43346)) + +* refactor(move-to-finished): reuse removeJob include (#1061) ([`e48aec6`](https://github.com/taskforcesh/bullmq/commit/e48aec6ced3989995a78c581222c9798a50087eb)) + +* refactor(retry-jobs): create getZSetItems include script (#1052) ([`5ab8525`](https://github.com/taskforcesh/bullmq/commit/5ab85256d1b4e1fad75c86626f03864be0f3cd30)) + +* refactor: clean some interfaces references (#974) ([`92da59e`](https://github.com/taskforcesh/bullmq/commit/92da59ec7e9932377cb1b6a2ba1422ec50e24158)) + +* refactor(get-state): add checkItemInList include (#964) ([`9df25c1`](https://github.com/taskforcesh/bullmq/commit/9df25c1f1310186e0516e0bb02abba527a819480)) + +* refactor(repeat): move removeRepeatable to Script (#939) ([`60ed941`](https://github.com/taskforcesh/bullmq/commit/60ed941a69b6de3d29f29214133c542268d41984)) + +* refactor(reprocess-job): change error messages (#768) ([`5cbd3b6`](https://github.com/taskforcesh/bullmq/commit/5cbd3b6aea64fb1eeee6a8d5c51797eb02b63d73)) + +* refactor(utils): add handleError (#752) ([`e07afb3`](https://github.com/taskforcesh/bullmq/commit/e07afb3f3873e5d517b4db8737b5af2a9a7f22ad)) + +* refactor(error-codes): add error-codes enum (#716) ([`3070102`](https://github.com/taskforcesh/bullmq/commit/30701023b05d8cd11a1c40dc4098dee882c341d6)) + +* refactor: import CONNECTION_CLOSED_ERROR_MSG from ioredis + +It's possible to import `CONNECTION_CLOSED_ERROR_MSG` from `ioredis`, but it isn't available on the main export and isn't defined in the library type declarations. ([`f217219`](https://github.com/taskforcesh/bullmq/commit/f217219bc3b37de375bf44511acdf94f85b31e32)) + +* refactor(getstate): adding getState script ([`a044124`](https://github.com/taskforcesh/bullmq/commit/a044124a88c23ab43746026486eac41432d37ff7)) + +* refactor(timer-manager): use Map to store timers + +Typed map of timers instead of a plain object and type "any". ([`fb9e959`](https://github.com/taskforcesh/bullmq/commit/fb9e959cc789a708a0c9ccd6036c57a3ff33311a)) + +### Style + +* style: restore eslint deps (#1383) ([`5f813c3`](https://github.com/taskforcesh/bullmq/commit/5f813c32150122a596a0a44c527c26964189e0a0)) + +* style: fix styled github warnings (#904) ([`a008c2b`](https://github.com/taskforcesh/bullmq/commit/a008c2be6bc8fe73360ac97a6deabced04382ab4)) + +* style: remove unused variables (#771) ([`044250b`](https://github.com/taskforcesh/bullmq/commit/044250b370565cfbcd6f9628e3c4e289dd5937e9)) + +### Test + +* test(job): do not save stacktrace when job key is missing (#1918) ref #1914 ([`b2d79cd`](https://github.com/taskforcesh/bullmq/commit/b2d79cdee63152b85228b5002f60c82127b9e630)) + +* test(repeat): validate delayed records are deleted when removing repeatable (#1781) ([`3df8afb`](https://github.com/taskforcesh/bullmq/commit/3df8afb55725ac8e92a37ee132513fb5c7dc0051)) + +* test(connection): expect ioredis prefix errors (#1601) ([`d1b6920`](https://github.com/taskforcesh/bullmq/commit/d1b69204ddede7c80c9e327228d39506c60a797d)) + +* test(repeat): fix flaky tests (#1578) ([`8f9eefd`](https://github.com/taskforcesh/bullmq/commit/8f9eefda9f932535de8e452c926029eb6fdae435)) + +* test(rate-limit): split tests (#1400) ([`f2d00c3`](https://github.com/taskforcesh/bullmq/commit/f2d00c328ce0578dd5837fb37ce471d166d1e246)) + +* test(rate-limit): add cases when promoting jobs (#1135) fixes #1083 ([`51343c9`](https://github.com/taskforcesh/bullmq/commit/51343c95f4823fedd7d7295d59ad5a092ae8dcbf)) + +* test: pass shared connection into Queue in test case (#1029) ([`da587c2`](https://github.com/taskforcesh/bullmq/commit/da587c2844763a5e7035f799541ce0d6e09aa296)) + +* test(worker): add case when sharing connection (#955) ([`2325ff7`](https://github.com/taskforcesh/bullmq/commit/2325ff791aae19cd98f8d27b645afade07b4c4fc)) + +* test: add next tick into processor (#967) ([`c636528`](https://github.com/taskforcesh/bullmq/commit/c636528d07161ed68ad017a65867aa1c9172c5d5)) + +* test(repeat): call nextTick in processor (#966) ([`2aaae88`](https://github.com/taskforcesh/bullmq/commit/2aaae88b58def78718e13ceea1a3ec9ab069b69b)) + +* test: fix test reference (#913) ([`c67aa6c`](https://github.com/taskforcesh/bullmq/commit/c67aa6c235ff7830c643e2fb291d1145b11b9de2)) + +* test(worker): check finishedOn value passed in completed event (#866) ref #863 ([`ef47aa9`](https://github.com/taskforcesh/bullmq/commit/ef47aa93b0808f3027c85e17aee3be12e716ff8c)) + +* test(flow): add backoff strategy case (#827) ([`a0cae58`](https://github.com/taskforcesh/bullmq/commit/a0cae58ca0c3c489309c6ad626fb5d6147bdf92d)) + +* test(sandboxed-process): add test case where process.env is shared (#793) ([`479c425`](https://github.com/taskforcesh/bullmq/commit/479c425aeac01e218de661f6ba357d0ed2f116aa)) + +* test(compat): fix flaky test when global drained event is emitted (#760) ([`fb25aee`](https://github.com/taskforcesh/bullmq/commit/fb25aee5c17a139d54b7b99549a853d422d6a078)) + +* test: cover more lines for coverage (#741) ([`8383b14`](https://github.com/taskforcesh/bullmq/commit/8383b14c6185fb498a110bf61079bdb630345f6d)) + +* test(nyc): watch src files only (#740) ([`d439631`](https://github.com/taskforcesh/bullmq/commit/d4396318bddac6521cbafed8d7cc87671c92827d)) + +* test: improve some types (#736) ([`ce0646c`](https://github.com/taskforcesh/bullmq/commit/ce0646c578e58003959c2a2a4b2f98d88bed3ebf)) + +* test(flow-producer): add test case using priority option (#735) ([`88c374a`](https://github.com/taskforcesh/bullmq/commit/88c374a10f6eb5cba7d7aa215a3397491f8be697)) + +* test: close instances (#730) ([`f5ff4a7`](https://github.com/taskforcesh/bullmq/commit/f5ff4a756f438676471f06878bcc9c12bf33ba02)) + +* test: add missing close calls(#725) ([`df27ae9`](https://github.com/taskforcesh/bullmq/commit/df27ae9d11630c4e817c098e5bff70cffcdf5b67)) + +* test(repeat): restore test (#723) ([`ceaa7de`](https://github.com/taskforcesh/bullmq/commit/ceaa7dece47bbef99c6e289bbfed41860991b4c9)) + +* test(repeat): restore skipped test case (#719) ([`d8b1063`](https://github.com/taskforcesh/bullmq/commit/d8b106350ed51a0bb36bb568557a16132aa9e841)) + +* test: use rejectedWith (#718) ([`3c170f3`](https://github.com/taskforcesh/bullmq/commit/3c170f3cc46ba33ea27c9c308929314d19c4fa9d)) + +* test: clean redis db after finishing test cases (#714) ([`54f2f2c`](https://github.com/taskforcesh/bullmq/commit/54f2f2c8517ae5484cbcbb472a6ab9ad9ffa4d61)) + +* test(repeat): add test when removeOnComplete is true + +re #515 ([`265ff3f`](https://github.com/taskforcesh/bullmq/commit/265ff3fbc5811f2911a1ebafae1825869f9e9283)) + +* test(mocha): no exclusive tests ([`2e9af30`](https://github.com/taskforcesh/bullmq/commit/2e9af3071f445a7118823dfeb79d8eb355ba5def)) + +* test(worker): fix flaky test related to getDependencies ([`f512823`](https://github.com/taskforcesh/bullmq/commit/f512823a847d7a464cf7253fed3fad2563945fbc)) + +* test: increase timeout on child retain tests (#293) ([`0c72e08`](https://github.com/taskforcesh/bullmq/commit/0c72e0884b3e0b66d86a2fb94ff98b1def240b3e)) + +* test(getters): check length of get failed jobs ([`9296516`](https://github.com/taskforcesh/bullmq/commit/9296516cbb212d6a24422cc9a76109e89c12915e)) + +* test: fix broken connection test ([`230664c`](https://github.com/taskforcesh/bullmq/commit/230664cf0565e2d5351299d64d3a8bef70289b0f)) + +### Unknown + +* Merge pull request #1706 from taskforcesh/feat/simplified-lock-extension + +feat/several-memory-optimizations ([`0881eb1`](https://github.com/taskforcesh/bullmq/commit/0881eb1345d7c50da181b1ba73162174da50db53)) + +* Merge pull request #1423 from taskforcesh/feat/removed-queue-scheduler + +feat: eliminate the need of having a QueueScheduler ([`7b069ea`](https://github.com/taskforcesh/bullmq/commit/7b069ea9fbb5469c6f1e6ca2e339136170950e11)) + +* feat(job): add getDependenciesCount method ([`ae39a4c`](https://github.com/taskforcesh/bullmq/commit/ae39a4c77a958242cb445dbb32ae27b15a953653)) + +* fix(job): parse results in getDependencies for processed jobs ([`6fdc701`](https://github.com/taskforcesh/bullmq/commit/6fdc7011ba910e5ca9c6d87926cc523ef38ef3ca)) + +* fix(get-workers): use strict equality on name fixes #564 ([`4becfa6`](https://github.com/taskforcesh/bullmq/commit/4becfa66e09dacf9830804898c45cb3317dcf438)) + +* feat(repeat): add immediately opt for repeat ([`d095573`](https://github.com/taskforcesh/bullmq/commit/d095573f8e7ce5911f777df48368382eceb99d6a)) + +* update events.md + +Correctly instantiate the `Worker` class, ([`2a439fb`](https://github.com/taskforcesh/bullmq/commit/2a439fbe44e0e08544d1d34d78dd8999cd4ca83b)) + +* Second Argument for worker is missing + +I am not sure exactly the options here, but definitely this will work. It also appears that some sort of resolution might occur if a string is passed, but I can't figure that one out. ([`8ee4d68`](https://github.com/taskforcesh/bullmq/commit/8ee4d685dec7a92f050d752f29375b5f58cc6c72)) + +* fix(scheduler): duplicate connections fixes #174 ([`011b8ac`](https://github.com/taskforcesh/bullmq/commit/011b8acfdec54737d94a9fead2423e060e3364db)) + +* Merge pull request #141 from bobdercole/queue-name + +feat: made queue name publicly readable for #140 ([`def0eb6`](https://github.com/taskforcesh/bullmq/commit/def0eb658821d3eb44e3b69d71cb58e05d251f70)) + +* Merge pull request #133 from bobdercole/get-job-type + +fix: modified QueueGetters.getJob and Job.fromId to also return null ([`10f493e`](https://github.com/taskforcesh/bullmq/commit/10f493e8dfdd4fbf13a288482d8578ba895a1323)) + +* Merge pull request #125 from snacqs/docs-improvements + +docs: minor improvements ([`36726bf`](https://github.com/taskforcesh/bullmq/commit/36726bfb01430af8ec606f36423fc187e4a06fb4)) + +* Merge pull request #123 from rhinodavid/queue_events_doc + +docs: fix QueueEvents examples in quick start guide ([`195e877`](https://github.com/taskforcesh/bullmq/commit/195e8777f35032f106732adc7e5e74dc952f3aa8)) + +* Merge pull request #107 from wavyapp/fix-71 + +fix: don't fail a job when the worker already lost the lock ([`da8cdb4`](https://github.com/taskforcesh/bullmq/commit/da8cdb42827c22fea12b9c2f4c0c80fbad786b98)) + +* Merge pull request #99 from chrisabrams/fix-dup-entry + +[fix] Remove duplicate active entry ([`bddaf44`](https://github.com/taskforcesh/bullmq/commit/bddaf4467dea4ff8583cd6e9cbbb83a6e5330893)) + +* Merge pull request #103 from taskforcesh/fix-102-get-rid-of-flushdb-in-tests + +fix: get rid of flushdb/flushall in tests ([`725ad01`](https://github.com/taskforcesh/bullmq/commit/725ad0179f615b9d53d939619210d26d8a5ec4a0)) + +* Merge pull request #98 from taskforcesh/fix/delete-jobs-when-cleaning-in-set + +Fix/delete jobs when cleaning in set ([`ab8d860`](https://github.com/taskforcesh/bullmq/commit/ab8d860c8f16867a2a46c620da742db43944d0a7)) + +* Merge pull request #96 from taskforcesh/fix/fix-tslib-dep + +Fix/fix tslib dep ([`f84cd9b`](https://github.com/taskforcesh/bullmq/commit/f84cd9bc875fedad25bd387e382ebb2ab4751e57)) + +* Merge pull request #93 from ericcarboni/patch-1 + +docs: fix typo ([`d8bf244`](https://github.com/taskforcesh/bullmq/commit/d8bf244fbbb43b1975e89434c546e7bdabf91702)) + +* Merge pull request #82 from jbr/dollarsign-as-default-queue-event-id + +$ as default queue event id #76 ([`7a6b2ee`](https://github.com/taskforcesh/bullmq/commit/7a6b2ee593d76718f45075556e6e7eb53251ca52)) + +* Merge pull request #91 from Embraser01/fix-#90 + +fix: check of existing redis instance ([`6ebae9e`](https://github.com/taskforcesh/bullmq/commit/6ebae9e111d27f423e7736776735c750ed475c20)) + +* Merge pull request #92 from taskforcesh/dependabot/npm_and_yarn/npm-6.13.4 + +chore(deps): bump npm from 6.12.0 to 6.13.4 ([`763ca72`](https://github.com/taskforcesh/bullmq/commit/763ca72f0a9ca866deea99648a5161b1aedd7998)) + +* Merge pull request #88 from taskforcesh/feat/add-generic-type-to-job-data + +feat: add generic type to job data and return value ([`3f9eaec`](https://github.com/taskforcesh/bullmq/commit/3f9eaeceef002e13bf9d995256282c0bb0863cd1)) + +* Merge pull request #78 from ericcarboni/patch-1 + +Docs: update quick start page ([`36604f5`](https://github.com/taskforcesh/bullmq/commit/36604f5c53d5984e48170ebb937dd9d2fc7c1875)) + +* Merge pull request #75 from jbr/feat-67-remove-bluebird-dependency + +feat: remove dependence on Bluebird and delay #67 ([`8d38bfa`](https://github.com/taskforcesh/bullmq/commit/8d38bfa77d1c1249ec9f95a754327491ef001e28)) + +* Merge pull request #73 from taskforcesh/fix-72-default-maxLenEvents-in-move-to-finished-lua + +fix: check in moveToFinished to use default val for opts.maxLenEvents ([`f79e5ad`](https://github.com/taskforcesh/bullmq/commit/f79e5ad83398bd858dd082f7b12639a9f38e7f49)) + +* Merge pull request #74 from jbr/fix-70-job-tojson + +fix: avoid changing Job property types through JSON serialization/deserialization #70 ([`344a887`](https://github.com/taskforcesh/bullmq/commit/344a887e924048d7a2ab2036b6adfcdd99a6f466)) + +* Merge pull request #58 from HNicolas/patch-1 + +Fix #57 ([`f67d306`](https://github.com/taskforcesh/bullmq/commit/f67d3063f2296325e2d753600dbf633960034195)) + +* Merge pull request #60 from taskforcesh/feat-job-progress-getter-for-sanboxed-processors + +job.progress() return last progress for sandboxed processors ([`11bfae6`](https://github.com/taskforcesh/bullmq/commit/11bfae63ac64bfa24df1e51ff5343447863e0095)) + +* Merge pull request #61 from taskforcesh/feat-test-worker-extends-job-lock + +Test worker extends job lock while job is active ([`0cf504f`](https://github.com/taskforcesh/bullmq/commit/0cf504f5fca2240e5e27eb95475d2f221bf3bfc9)) + +* Merge pull request #55 from MichielDeMey/feature/coveralls + +Feat/coveralls Adds code coverage with Coveralls integration ([`4deb7d4`](https://github.com/taskforcesh/bullmq/commit/4deb7d43db5ee459cb8536e5202d2e4bb3811af3)) + +* Merge pull request #52 from taskforcesh/feat-47-job-locking + +Job locking mechanism ([`dd502b2`](https://github.com/taskforcesh/bullmq/commit/dd502b21952cba180f419a542c319414372177b1)) + +* Merge pull request #54 from root-io/patch-1 + +doc: use correct connection property ([`f3336de`](https://github.com/taskforcesh/bullmq/commit/f3336de43567e859905795517e5bf1aa4936e60d)) + +* Merge pull request #51 from taskforcesh/fix-31-stacktrace-missing-after-job-failure + +Save job stacktrace on failure ([`855560a`](https://github.com/taskforcesh/bullmq/commit/855560a675dd40cc9d51bcc2bcad70bc3c44373d)) + +* Merge pull request #39 from taskforcesh/fix-cleanup-dependencies + +Replace deprecated node-uuid with uuid, move lodash to runtime dependencies ([`3a3a21b`](https://github.com/taskforcesh/bullmq/commit/3a3a21b3da21485c7ff73ee7e297b14ec9f01bab)) + +* Merge pull request #46 from taskforcesh/chore/add-semantic-release-plugins + +chore: add missing dependency ([`d30413a`](https://github.com/taskforcesh/bullmq/commit/d30413a655605ef351f03ce1d5f69fba52d5e91d)) + +* Merge pull request #45 from taskforcesh/chore/add-semantic-release-plugins + +chore: add missing dependencies ([`5e06e66`](https://github.com/taskforcesh/bullmq/commit/5e06e66f74d4bb334e6354b6a1840c5844a20472)) + +* Merge pull request #44 from taskforcesh/chore/add-semantic-release-plugins + +chore: add semantic release plugins ([`0466161`](https://github.com/taskforcesh/bullmq/commit/0466161c2e66a17ad8b64e3c4165eb231629cfd9)) + +* Merge pull request #41 from taskforcesh/feat/support-async-backoffs + +Feat/support async backoffs ([`c0b4618`](https://github.com/taskforcesh/bullmq/commit/c0b46181366be8e0a9d52fa5503b49ac33a4aa9d)) + +* Merge pull request #42 from taskforcesh/feat/implement-connection-close + +feat: implement close in redis connection fixes #8 ([`84c7ba9`](https://github.com/taskforcesh/bullmq/commit/84c7ba9f7ec079c22f27e50983656f267ea92983)) + +* Merge pull request #40 from taskforcesh/fix/fix-handling-reused-connections + +fix(connections): reused connections ([`cc8d38e`](https://github.com/taskforcesh/bullmq/commit/cc8d38e74fbe4b95b836c66a70f421e40bdc3775)) + +* Merge pull request #35 from taskforcesh/fix/34-extra-connection-for-workers + +Fix/#34 extra connection for workers ([`2604753`](https://github.com/taskforcesh/bullmq/commit/2604753984a03d079ece28db0686d734ee10ba52)) + +* Merge pull request #33 from taskforcesh/chore/move-ioredis-typings-as-dependency + +fix: make ioredis typings a normal dependency ([`5d35db5`](https://github.com/taskforcesh/bullmq/commit/5d35db5a8238dccb0f7e09a0e4d2bdd63ab7e837)) + +* Merge pull request #27 from taskforcesh/feat/add-trim-option-#21 + +Feat/add trim option #21 ([`47fd1ea`](https://github.com/taskforcesh/bullmq/commit/47fd1ea5eec49dcb9d74293b8f99ed5aecc01239)) + +* Merge pull request #26 from taskforcesh/manast-patch-1 + +Update README.md ([`99c9513`](https://github.com/taskforcesh/bullmq/commit/99c9513772efc78be0ecdd811e8e136cc9aaeffd)) + +* Merge pull request #25 from taskforcesh/manast-patch-1 + +Update README.md ([`e21a98a`](https://github.com/taskforcesh/bullmq/commit/e21a98a1e95016f72ad0109150f56a6fe8e00a17)) + +* Merge pull request #20 from taskforcesh/feat/development-4.0 + +Feat/development 4.0 ([`e4a9614`](https://github.com/taskforcesh/bullmq/commit/e4a9614b843caacd4dc01e7266daaae036cc12e9)) + +* Merge pull request #7 from taskforcesh/feat-bull3-compat-api-v2 + +Compatibility class implementing bull3 api in bullmq ([`da7af7a`](https://github.com/taskforcesh/bullmq/commit/da7af7a319dd3f12acad7794f8fc27a251838d87)) + +* Merge pull request #3 from taskforcesh/feat-port-sandbox-processing + +port sandbox processors implementation and tests from bull 3.x ([`88a72e4`](https://github.com/taskforcesh/bullmq/commit/88a72e40eadef581a704bb5235e839184b435fb8)) + +* implement some more getters + +getJobs, getJobCounts, getJobCountByTypes, getCompletedCount, getFailedCount, +getDelayedCount, getWaitingCount, getPausedCount, getActiveCount, getRepeatableCount, +getWorkers, base64Name, clientName, parseClientList ([`e78e9bf`](https://github.com/taskforcesh/bullmq/commit/e78e9bf75dd2aff39e7d226087dcafb6dc1109bf)) + +* import existing typescript definitions from dt project (master) + +source: https://github.com/DefinitelyTyped/DefinitelyTyped ([`87e0ef1`](https://github.com/taskforcesh/bullmq/commit/87e0ef182189e458a55c2e38e72893aa84b26aa6)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 18746d9b97..8be5e1570c 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.9.0" +__version__ = "1.10.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index cfdd8dc11f..b44dc537c1 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.9.0" +version = "1.10.0" description='BullMQ for Python' readme="README.md" authors = [ From 6ffb50b8e9b082c06bedd1ab6247e4ce9bbc356a Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Sat, 22 Jul 2023 17:30:49 +0000 Subject: [PATCH 256/322] GITBOOK-177: change request with no subject merged in GitBook --- docs/gitbook/guide/jobs/stalled.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/docs/gitbook/guide/jobs/stalled.md b/docs/gitbook/guide/jobs/stalled.md index bc02ca0539..2c2922a45d 100644 --- a/docs/gitbook/guide/jobs/stalled.md +++ b/docs/gitbook/guide/jobs/stalled.md @@ -1,12 +1,7 @@ # Stalled -{% hint style="info" %} -Stalled jobs checks will only work if there is at least one [`QueueScheduler`](../queuescheduler.md) instance configured in the Queue. -{% endhint %} - {% hint style="danger" %} -From BullMQ 2.0 and onwards, the QueueScheduler is not needed anymore. -For manually fetching jobs check this [pattern](https://docs.bullmq.io/patterns/manually-fetching-jobs#checking-for-stalled-jobs) +From BullMQ 2.0 and onwards, the QueueScheduler is not needed anymore. For manually fetching jobs check this [pattern](https://docs.bullmq.io/patterns/manually-fetching-jobs#checking-for-stalled-jobs) {% endhint %} When a job is in an active state, i.e., it is being processed by a worker, it needs to continuously update the queue to notify that the worker is still working on the job. This mechanism prevents a worker that crashes or enters an endless loop from keeping a job in an active state forever. @@ -17,9 +12,11 @@ When a worker is not able to notify the queue that it is still working on a give There is not a 'stalled' state, only a 'stalled' event emitted when a job is automatically moved from active to waiting state. {% endhint %} +If a job stalls more than a predefined limit (see the maxStalledCount option [https://api.docs.bullmq.io/interfaces/v4.WorkerOptions.html#maxStalledCount](https://api.docs.bullmq.io/interfaces/v4.WorkerOptions.html#maxStalledCount)), the job will be failed permanently with the error "_job stalled more than allowable limit_". The default is 1, as stalled jobs should be a rare occurrence, but you can increase this number if needed. + In order to avoid stalled jobs, make sure that your worker does not keep Node.js event loop too busy, the default max stalled check duration is 30 seconds, so as long as you do not perform CPU operations exceeding that value you should not get stalled jobs. -Another way to reduce the chance for stalled jobs is using so called "sandboxed" processors. In this case, the workers will spawn new separate Node.js processes, running separately from the main process. +Another way to reduce the chance of stalled jobs is using so-called "sandboxed" processors. In this case, the workers will spawn new separate Node.js processes, running separately from the main process. {% code title="main.ts" %} ```typescript From f43ea5ed9910e91f9e4aaaba31e6f3da61555a02 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Sun, 23 Jul 2023 23:54:49 -0600 Subject: [PATCH 257/322] docs: restore python changelog (#2089) --- docs/gitbook/python/changelog.md | 5348 +----------------------------- python/bullmq/__init__.py | 2 +- python/pyproject.toml | 9 +- 3 files changed, 89 insertions(+), 5270 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 205a00a8f1..022f75a1da 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -1,5320 +1,146 @@ -# CHANGELOG +# Changelog + - -## vpy1.10.0 (2023-07-21) - -### Chore - -* chore(release): 4.6.0 [skip ci] - -# [4.6.0](https://github.com/taskforcesh/bullmq/compare/v4.5.0...v4.6.0) (2023-07-19) - -### Features - -* **queue:** add promoteJobs to promote all delayed jobs ([6074592](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) ([`39b2565`](https://github.com/taskforcesh/bullmq/commit/39b2565325a56b1df87f49dfe3a1ba9deb0ea174)) - -### Ci - -* ci(python): use directory setting ([`badab78`](https://github.com/taskforcesh/bullmq/commit/badab78d6df5c8067636b3fe3d684d3e2ec9c16e)) - -* ci(python): set version_toml as a tuple ([`a594f39`](https://github.com/taskforcesh/bullmq/commit/a594f39642fc0e8b7e86edcd85bba8cf7fc90802)) - -* ci(python): print next release version ([`167f5ed`](https://github.com/taskforcesh/bullmq/commit/167f5ed99ec3c9003988d39a3d226e9785709c4a)) - -* ci(python): move into python directory ([`0939f1a`](https://github.com/taskforcesh/bullmq/commit/0939f1a55ff7c842d46cef0f0bf8360ee2431103)) - -### Documentation - -* docs(retry): add stop retrying jobs pattern (#2080) ref #1571 ([`dd40cf1`](https://github.com/taskforcesh/bullmq/commit/dd40cf1eaf13767ddcd5e68c4f33d974b65e6f18)) - -* docs(api): remove old api files in favor of typedoc (#2078) ([`75a594f`](https://github.com/taskforcesh/bullmq/commit/75a594f36a2e8c62e16f55d917d1b8f906d18a8c)) - -### Fix - -* fix(python): upgrade semver to prevent warnings (#2074) ([`fc7f92b`](https://github.com/taskforcesh/bullmq/commit/fc7f92bc3cd5208e79405d4573a1b64f692c3be2)) - - -## vpy1.9.0 (2023-07-18) - -### Chore - -* chore(release): 4.5.0 [skip ci] - -# [4.5.0](https://github.com/taskforcesh/bullmq/compare/v4.4.0...v4.5.0) (2023-07-18) - -### Bug Fixes - -* **python:** respect concurrency in worker ([#2062](https://github.com/taskforcesh/bullmq/issues/2062)) fixes [#2063](https://github.com/taskforcesh/bullmq/issues/2063) ([1b95185](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) - -### Features - -* **job:** add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([841dc87](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) ([`2b31259`](https://github.com/taskforcesh/bullmq/commit/2b31259878b5c6d46429502e1fadf51b74d8872c)) - -### Feature - -* feat(job): add option for removing children in remove method (python) (#2064) ([`841dc87`](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) - - -## vpy1.8.0 (2023-07-17) - -### Chore - -* chore(release): 4.4.0 [skip ci] - -# [4.4.0](https://github.com/taskforcesh/bullmq/compare/v4.3.0...v4.4.0) (2023-07-17) - -### Features - -* **job:** add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([ffd49e2](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) -* **python:** add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([808ee72](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) ([`38ed54a`](https://github.com/taskforcesh/bullmq/commit/38ed54a879ecff97fab9757a5ebf6583d6d161fb)) - -* chore(deps): update coverallsapp/github-action digest to 95b1a23 (#2065) - -Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`a1577fa`](https://github.com/taskforcesh/bullmq/commit/a1577fa28870939101b1a7e31e04ae53005b9a46)) - -* chore(deps): update dependency dev/setuptools to v68 (#2038) - -Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`0bdabcd`](https://github.com/taskforcesh/bullmq/commit/0bdabcd4ccf4fb16cc57c7fa67c8ccfe41031bf4)) - +## v1.9.0 (2023-07-18) ### Feature +* **job:** Add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([`841dc87`](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) -* feat(job): add removeDependencyOnFailure option (#1953) ([`ffd49e2`](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) - +## v1.8.0 (2023-07-17) ### Fix +* **python:** Respect concurrency in worker (#2062) fixes #2063 ([`1b95185`](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) -* fix(python): respect concurrency in worker (#2062) fixes #2063 ([`1b95185`](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) - - -## vpy1.7.0 (2023-07-14) - -### Chore - -* chore(release): 4.3.0 [skip ci] - -# [4.3.0](https://github.com/taskforcesh/bullmq/compare/v4.2.1...v4.3.0) (2023-07-14) - -### Features - -* **worker:** add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([e255356](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) ([`3b6f33e`](https://github.com/taskforcesh/bullmq/commit/3b6f33eb85f68cff97eb61253884cf540cfb4908)) - -* chore(deps): update dependency dev/setuptools to v63.4.3 (#2034) - -Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`f0b823a`](https://github.com/taskforcesh/bullmq/commit/f0b823a2bb078ea9b1fe953f6f068cbfe3eab757)) - -* chore(release): 4.2.1 [skip ci] - -## [4.2.1](https://github.com/taskforcesh/bullmq/compare/v4.2.0...v4.2.1) (2023-07-10) - -### Bug Fixes - -* **flow:** emit delayed event when parent is moved to delayed ([#2055](https://github.com/taskforcesh/bullmq/issues/2055)) ([f419ff1](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) -* **python:** add requires-python config ([#2056](https://github.com/taskforcesh/bullmq/issues/2056)) fixes [#1979](https://github.com/taskforcesh/bullmq/issues/1979) ([a557970](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) -* **python:** fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([7ec1c5b](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) - -### Features - -* **python:** add moveToWaitingChildren job method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([6d0e224](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) ([`fc69da9`](https://github.com/taskforcesh/bullmq/commit/fc69da91d109d713ff16efca0a968466b7868f6c)) - +## v1.7.0 (2023-07-14) ### Feature +* **python:** Add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([`808ee72`](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) +* **worker:** Add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([`e255356`](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) -* feat(python): add remove method in queue (#2066) ([`808ee72`](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) - -* feat(worker): add id as part of token (#2061) ([`e255356`](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) - -### Fix - -* fix(flow): emit delayed event when parent is moved to delayed (#2055) ([`f419ff1`](https://github.com/taskforcesh/bullmq/commit/f419ff1ec5cb34986fe4b79402c727a6487e949c)) - - -## vpy1.6.1 (2023-07-10) - -### Chore - -* chore(deps): update dependency pipenv to v2023.7.4 (#2042) - -Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> ([`7508633`](https://github.com/taskforcesh/bullmq/commit/750863373adb9d8a528713a168d03b2dc3173eb1)) - -* chore(deps): update dependency dev/types-redis to v4.6.0.2 (#2046) ([`b47d622`](https://github.com/taskforcesh/bullmq/commit/b47d622fee8fa4363b23cff7969ac275d5b4b9ba)) - +## v1.6.1 (2023-07-10) ### Fix +* **pyproject:** Add requires-python config (#2056) fixes #1979 ([`a557970`](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) -* fix(python): add requires-python config (#2056) fixes #1979 ([`a557970`](https://github.com/taskforcesh/bullmq/commit/a557970c755d370ed23850e2f32af35774002bc9)) - -### Unknown - -* doc(python): add python tabs in getters and step jobs pattern ([`f1ca525`](https://github.com/taskforcesh/bullmq/commit/f1ca52541eecbd610b0161b21fe696decd38ee7b)) - - -## vpy1.6.0 (2023-07-06) - -### Ci - -* ci(api): add docs-api branch logic (#2045) ([`6303148`](https://github.com/taskforcesh/bullmq/commit/63031484387a8cd8595da7ff0d2721c57b54d7e4)) - -### Feature - -* feat(python): add moveToWaitingChildren job method (#2049) ([`6d0e224`](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) - - -## vpy1.5.0 (2023-07-04) - -### Chore - -* chore(release): 4.2.0 [skip ci] - -# [4.2.0](https://github.com/taskforcesh/bullmq/compare/v4.1.0...v4.2.0) (2023-07-03) - -### Bug Fixes - -* **python:** add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([d03ffc9](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) -* **python:** nuild egg-info at the root location ([3c2d06e](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) - -### Features - -* **common:** add option to change repeatable jobs redis key hash algorithm ([#2023](https://github.com/taskforcesh/bullmq/issues/2023)) ([ca17364](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) -* **python:** add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([57b2b72](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) -* **python:** add getCompleted queue method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([3e9db5e](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) -* **python:** add getFailedCount queue method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([92d7227](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) -* **python:** add getJobs method in queue class ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([8d5d6c1](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) -* **python:** add getJobState queue method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([8ec9ed6](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) ([`5e2a343`](https://github.com/taskforcesh/bullmq/commit/5e2a3430b320f0b28147e7695d8defd59e6a6a8e)) - -* chore(deps): update dependency dev/types-redis to v4.6.0.1 (#2035) ([`6e5d992`](https://github.com/taskforcesh/bullmq/commit/6e5d99213785c4988184fe70bf9dff6daf021880)) - -* chore(deps): update coverallsapp/github-action digest to 3b7440a (#2039) ([`cbc489b`](https://github.com/taskforcesh/bullmq/commit/cbc489bd59f689ced93c2c6a4162cde487475a28)) - +## v1.6.0 (2023-07-06) ### Feature +* **job:** Add moveToWaitingChildren method ([#2049](https://github.com/taskforcesh/bullmq/issues/2049)) ([`6d0e224`](https://github.com/taskforcesh/bullmq/commit/6d0e224cd985069055786f447b0ba7c394a76b8a)) -* feat(common): add option to change repeatable jobs redis key hash algorithm (#2023) ([`ca17364`](https://github.com/taskforcesh/bullmq/commit/ca17364cc2a52f6577fb66f09ec3168bbf9f1e07)) - +## v1.5.0 (2023-07-04) ### Fix +* **queue:** Fix isPaused method when custom prefix is present ([#2047](https://github.com/taskforcesh/bullmq/issues/2047)) ([`7ec1c5b`](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) -* fix(python): fix isPaused method when custom prefix is present (#2047) ([`7ec1c5b`](https://github.com/taskforcesh/bullmq/commit/7ec1c5b2ccbd575ecd50d339f5377e204ca7aa16)) - - -## vpy1.4.0 (2023-06-30) - +## v1.4.0 (2023-06-30) ### Feature +* **queue:** Add getJobState method ([#2040](https://github.com/taskforcesh/bullmq/issues/2040)) ([`8ec9ed6`](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) -* feat(python): add getJobState queue method (#2040) ([`8ec9ed6`](https://github.com/taskforcesh/bullmq/commit/8ec9ed67d2803224a3b866c51f67239a5c4b7042)) - - -## vpy1.3.1 (2023-06-29) - -### Chore - -* chore: update python changelog ([`4994bd7`](https://github.com/taskforcesh/bullmq/commit/4994bd7626cd5996eaec77a75a008591cc35980b)) - +## v1.3.1 (2023-06-29) ### Fix +* **pyproject:** Build egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) -* fix(python): nuild egg-info at the root location ([`3c2d06e`](https://github.com/taskforcesh/bullmq/commit/3c2d06e7e6e0944135fe6bd8045d08dd43fe7d9c)) - - -## vpy1.3.0 (2023-06-29) - -### Chore - -* chore(python): delete license key ([`d6e6449`](https://github.com/taskforcesh/bullmq/commit/d6e64493c979147a351f848212db5fa2282d3852)) - -### Documentation - -* docs(changelogs): update changelogs (#2028) ([`667de07`](https://github.com/taskforcesh/bullmq/commit/667de075f4762ab72dbaa5567bbacfd5147d4770)) - -* docs: update broken patterns link in the readme (#2025) ([`0e6e836`](https://github.com/taskforcesh/bullmq/commit/0e6e836376dc89d432f384e5ada0c9356d57252a)) - +## v1.3.0 (2023-06-29) ### Feature - -* feat(python): add getFailedCount queue method (#2036) ([`92d7227`](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) - -* feat(python): add getCompleted queue method (#2033) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) +* **queue:** Add getFailedCount method ([#2036](https://github.com/taskforcesh/bullmq/issues/2036)) ([`92d7227`](https://github.com/taskforcesh/bullmq/commit/92d7227bf5ec63a75b7af3fc7c312d9b4a81d69f)) +* **queue:** Add getCompletedCount method ([#2033](https://github.com/taskforcesh/bullmq/issues/2033)) ([`3e9db5e`](https://github.com/taskforcesh/bullmq/commit/3e9db5ef4d868f8b420e368a711c20c2568a5910)) ### Fix +* **release:** Add recommended pyproject.toml configuration ([#2029](https://github.com/taskforcesh/bullmq/issues/2029)) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) -* fix(python): add recommended pyproject.toml configuration (#2029) ([`d03ffc9`](https://github.com/taskforcesh/bullmq/commit/d03ffc9c98425a96d6e9dd47a6625382556a4cbf)) - - -## vpy1.2.0 (2023-06-24) - +## v1.2.0 (2023-06-24) ### Feature +* **queue:** Add get job methods by state ([#2012](https://github.com/taskforcesh/bullmq/issues/2012)) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) -* feat(python): add get job methods by state (#2012) ([`57b2b72`](https://github.com/taskforcesh/bullmq/commit/57b2b72f79afb683067d49170df5d2eed46e3712)) - - -## vpy1.1.0 (2023-06-23) - -### Chore - -* chore(release): 4.1.0 [skip ci] - -# [4.1.0](https://github.com/taskforcesh/bullmq/compare/v4.0.0...v4.1.0) (2023-06-23) - -### Features - -* **queue:** add getPrioritized and getPrioritizedCount methods ([#2005](https://github.com/taskforcesh/bullmq/issues/2005)) ([7363abe](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) ([`65184e3`](https://github.com/taskforcesh/bullmq/commit/65184e3f1388083e63ff956dea4ad62a1addf710)) - -* chore(deps): update github/codeql-action digest to f6e388e (#2003) ([`ef2aab9`](https://github.com/taskforcesh/bullmq/commit/ef2aab97592dd55431e413f39b3d97b3db0e5ed4)) - +## v1.1.0 (2023-06-23) ### Feature +* **queue:** Add getJobs method ([#2011](https://github.com/taskforcesh/bullmq/issues/2011)) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) -* feat(python): add getJobs method in queue class (#2011) ([`8d5d6c1`](https://github.com/taskforcesh/bullmq/commit/8d5d6c14442b7b967c42cb6ec3907a4d1a5bd575)) - -* feat(queue): add getPrioritized and getPrioritizedCount methods (#2005) ([`7363abe`](https://github.com/taskforcesh/bullmq/commit/7363abebce6e3bcf067fc7c220d845807ebb1489)) - - -## vpy1.0.0 (2023-06-21) - -### Chore - -* chore(release): 4.0.0 [skip ci] - -# [4.0.0](https://github.com/taskforcesh/bullmq/compare/v3.15.8...v4.0.0) (2023-06-21) - -### Bug Fixes - -* **python:** pass right params to xtrim method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([a55fd77](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) - -### Performance Improvements - -* **priority:** add prioritized as a new state ([#1984](https://github.com/taskforcesh/bullmq/issues/1984)) (python) ([42a890a](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) - -### BREAKING CHANGES - -* **priority:** priority is separeted in its own zset, no duplication needed - -* feat(queue): add removeDeprecatedPriorityKey method - -* refactor: change job method name update to updateData - -ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ([`e0ab7e6`](https://github.com/taskforcesh/bullmq/commit/e0ab7e6fd62487884096ed8fc6164a0be0c4d581)) +## v1.0.0 (2023-06-21) +### Breaking +* priority is separeted in its own zset, no duplication needed ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) ### Performance +* **priority:** Add prioritized as a new state (#1984) (python) ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) -* perf(priority): add prioritized as a new state (#1984) (python) - -decouple priority to keep one zset - -BREAKING CHANGE: priority is separeted in its own zset, no duplication needed - -* feat(queue): add removeDeprecatedPriorityKey method - -* refactor: change job method name update to updateData - -ref [faster priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) ([`42a890a`](https://github.com/taskforcesh/bullmq/commit/42a890a2bfe45b29348030f886766400f5d41aa3)) - - -## vpy0.5.6 (2023-06-21) - -### Chore - -* chore(deps): update dependency pipenv to v2023.6.18 (#1997) ([`fc3f746`](https://github.com/taskforcesh/bullmq/commit/fc3f746441d43ebbc86256583f9b446e2ea874e5)) - -* chore(deps): update dependency virtualenv to v20.23.1 (#1993) ([`86f8aed`](https://github.com/taskforcesh/bullmq/commit/86f8aed9702baf3be6078c6b92e1f358c888adc6)) - -* chore(deps): update dependency semver to v7.5.2 (#1987) ([`93005e6`](https://github.com/taskforcesh/bullmq/commit/93005e6a6001b78b6c86e8cc4f463e3152621005)) +## v0.5.6 (2023-06-21) +### Fix +* **queue:** Pass right params to trimEvents method ([#2004](https://github.com/taskforcesh/bullmq/issues/2004)) ([`a55fd77`](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) ### Documentation +* **update:** Add job data section ([#1999](https://github.com/taskforcesh/bullmq/issues/1999)) ([`854b1ca`](https://github.com/taskforcesh/bullmq/commit/854b1cabd082c1df4d55e7973f0e0b0cd4aefb79)) -* docs(update): add job data section (#1999) ([`854b1ca`](https://github.com/taskforcesh/bullmq/commit/854b1cabd082c1df4d55e7973f0e0b0cd4aefb79)) - +## v0.5.5 (2023-06-16) ### Fix +* **rate-limit:** Keep priority fifo order (#1991) fixes #1929 (python) ([`56bd7ad`](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) +* **worker:** Set redis version always in initialization (#1989) fixes #1988 ([`a1544a8`](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) -* fix(python): pass right params to xtrim method (#2004) ([`a55fd77`](https://github.com/taskforcesh/bullmq/commit/a55fd777655f7d4bb7af9e4fa2f7b4f48f559189)) - - -## vpy0.5.5 (2023-06-16) - -### Chore - -* chore(release): 3.15.8 [skip ci] - -## [3.15.8](https://github.com/taskforcesh/bullmq/compare/v3.15.7...v3.15.8) (2023-06-16) - -### Bug Fixes - -* **rate-limit:** keep priority fifo order ([#1991](https://github.com/taskforcesh/bullmq/issues/1991)) fixes [#1929](https://github.com/taskforcesh/bullmq/issues/1929) (python) ([56bd7ad](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) ([`5c36ae3`](https://github.com/taskforcesh/bullmq/commit/5c36ae318766741a00a07af587255a5e951bd731)) - -* chore(release): 3.15.7 [skip ci] - -## [3.15.7](https://github.com/taskforcesh/bullmq/compare/v3.15.6...v3.15.7) (2023-06-16) - -### Bug Fixes - -* **python:** add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([7c5ee20](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) -* **worker:** set redis version always in initialization ([#1989](https://github.com/taskforcesh/bullmq/issues/1989)) fixes [#1988](https://github.com/taskforcesh/bullmq/issues/1988) ([a1544a8](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) ([`90c34c3`](https://github.com/taskforcesh/bullmq/commit/90c34c37605134c72d560ed0fc6aa03a63b6cbca)) - +## v0.5.4 (2023-06-14) ### Fix +* **connection:** Add retry strategy in connection ([#1975](https://github.com/taskforcesh/bullmq/issues/1975)) ([`7c5ee20`](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) -* fix(rate-limit): keep priority fifo order (#1991) fixes #1929 (python) ([`56bd7ad`](https://github.com/taskforcesh/bullmq/commit/56bd7ad8c4daffcfb1f9f199abfc5d6495eb291e)) - -* fix(worker): set redis version always in initialization (#1989) fixes #1988 ([`a1544a8`](https://github.com/taskforcesh/bullmq/commit/a1544a8c0f29522cd33772b14f559969db852d1d)) - - -## vpy0.5.4 (2023-06-14) - -### Chore - -* chore: fix python CHANGELOG ref ([`67e5df9`](https://github.com/taskforcesh/bullmq/commit/67e5df913f65ed94dc3500480bee785a7d01f57b)) - -* chore: update python changelog ([`fbedf2c`](https://github.com/taskforcesh/bullmq/commit/fbedf2c45ea0c0030eff26de6fb432c68e7697a9)) - +## v0.5.3 (2023-06-13) ### Fix - -* fix(python): add retry strategy in connection (#1975) ([`7c5ee20`](https://github.com/taskforcesh/bullmq/commit/7c5ee20471b989d297c8c5e87a6ea497a2077ae6)) - -### Unknown - -* GITBOOK-163: docs(removing-jobs): add code tabs for python ([`234e3ad`](https://github.com/taskforcesh/bullmq/commit/234e3ad7f9dfc68540fb6c118dc6ff12ac8f6c25)) - - -## vpy0.5.3 (2023-06-13) - -### Chore - -* chore(release): 3.15.6 [skip ci] - -## [3.15.6](https://github.com/taskforcesh/bullmq/compare/v3.15.5...v3.15.6) (2023-06-13) - -### Bug Fixes - -* **worker:** use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([0df6afa](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) ([`7f42665`](https://github.com/taskforcesh/bullmq/commit/7f42665640b0cec1eaf32b4fec15ff1955164f8b)) +* **worker:** Use timeout as integer for redis lower than v6.0.0 (python) ([#1981](https://github.com/taskforcesh/bullmq/issues/1981)) ([`0df6afa`](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) ### Documentation +* **changelog:** Add missing version sections ([#1974](https://github.com/taskforcesh/bullmq/issues/1974)) ([`77b4de7`](https://github.com/taskforcesh/bullmq/commit/77b4de7c3b41ae63e311a2c373e0d2fc787f2f53)) -* docs(python): add missing version sections (#1974) ([`77b4de7`](https://github.com/taskforcesh/bullmq/commit/77b4de7c3b41ae63e311a2c373e0d2fc787f2f53)) - +## v0.5.2 (2023-06-11) ### Fix +* **retry-job:** Consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([`e753855`](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) -* fix(worker): use timeout as integer for redis lower than v6.0.0 (python) (#1981) ([`0df6afa`](https://github.com/taskforcesh/bullmq/commit/0df6afad5e71a693b721ba52ffa6be733ee45ccb)) - - -## vpy0.5.2 (2023-06-11) - -### Chore - -* chore(release): 3.15.5 [skip ci] - -## [3.15.5](https://github.com/taskforcesh/bullmq/compare/v3.15.4...v3.15.5) (2023-06-11) - -### Bug Fixes - -* **python:** include lua scripts when releasing ([bb4f3b2](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) -* **retry-job:** consider priority when moving job to wait (python) ([#1969](https://github.com/taskforcesh/bullmq/issues/1969)) ([e753855](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) - -### Features - -* **python:** add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([6a172e9](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) ([`69b94aa`](https://github.com/taskforcesh/bullmq/commit/69b94aae13033a385bccd93f82601a0c7c4f45a0)) - -* chore(deps): update actions/checkout digest to c85c95e (#1968) ([`85d8767`](https://github.com/taskforcesh/bullmq/commit/85d8767e96d17dc013c2553dd41e88e2c32c31f0)) - +## v0.5.1 (2023-06-09) ### Fix +* **python:** Include lua scripts when releasing ([`bb4f3b2`](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) -* fix(retry-job): consider priority when moving job to wait (python) (#1969) ([`e753855`](https://github.com/taskforcesh/bullmq/commit/e753855eef248da73a5e9f6b18f4b79319dc2f86)) - - -## vpy0.5.1 (2023-06-09) - -### Ci - -* ci(python): add build execution before python release ([`fdaaff0`](https://github.com/taskforcesh/bullmq/commit/fdaaff0d51aaf8d1b585c88071aabf9749cceeb2)) - -* ci(python): check command files ([`1531db4`](https://github.com/taskforcesh/bullmq/commit/1531db4ed74b218b08f7379e0e97e5a3fe709e63)) +## v0.5.0 (2023-06-09) +### Feature +* **python:** Add remove job method ([#1965](https://github.com/taskforcesh/bullmq/issues/1965)) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) +## v0.4.4 (2023-06-08) ### Fix +* **deps:** Downgrade python-semantic-release to avoid version issue -* fix(python): include lua scripts when releasing ([`bb4f3b2`](https://github.com/taskforcesh/bullmq/commit/bb4f3b2be8e3d5a54a87f0f5d6ba8dfa09900e53)) - - -## vpy0.5.0 (2023-06-09) - -### Chore - -* chore(release): 3.15.4 [skip ci] - -## [3.15.4](https://github.com/taskforcesh/bullmq/compare/v3.15.3...v3.15.4) (2023-06-08) - -### Bug Fixes - -* **job:** import right reference of QueueEvents ([#1964](https://github.com/taskforcesh/bullmq/issues/1964)) ([689c845](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) ([`2ea7483`](https://github.com/taskforcesh/bullmq/commit/2ea74830cf0363ea39b077258d70f996f255a519)) - -### Ci - -* ci(python): install packaging module ([`ef0f7ed`](https://github.com/taskforcesh/bullmq/commit/ef0f7ed1d4e9e1b4f8bf7aecd79bc677c956ff67)) - +## v0.4.3 (2023-06-07) ### Feature - -* feat(python): add remove job method (#1965) ([`6a172e9`](https://github.com/taskforcesh/bullmq/commit/6a172e97e65684f65ee570c2ae9bcc108720d5df)) +* Add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([`945bcd3`](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) ### Fix +* **rate-limit:** Consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([`d97864a`](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) -* fix(job): import right reference of QueueEvents (#1964) ([`689c845`](https://github.com/taskforcesh/bullmq/commit/689c84567f3a9fea51f349ca93b3008d5c187f62)) - - -## vpy0.4.4 (2023-06-08) - -### Chore - -* chore(release): 3.15.3 [skip ci] - -## [3.15.3](https://github.com/taskforcesh/bullmq/compare/v3.15.2...v3.15.3) (2023-06-08) - -### Bug Fixes - -* **job:** use QueueEvents type for waitUntilFinished ([#1958](https://github.com/taskforcesh/bullmq/issues/1958)) ([881848c](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) ([`0db3d46`](https://github.com/taskforcesh/bullmq/commit/0db3d46690acdf4b8b703427ba3fbed0893724e1)) - -### Ci - -* ci(python): set user git information ([`38d23ae`](https://github.com/taskforcesh/bullmq/commit/38d23aed22ca0eb16171a013c37b51cdb403e8be)) - -* ci(python): downgrade python-semantic-release to avoid version issue ([`8a7cd62`](https://github.com/taskforcesh/bullmq/commit/8a7cd621d57aaceb1e432445fb86598dfb12cb55)) - -* ci(python): use version_source as commit ([`8002570`](https://github.com/taskforcesh/bullmq/commit/8002570555b1dfdfed3d3d331de23173d9cc67c8)) - -* ci(python): use version_source ([`973a9d3`](https://github.com/taskforcesh/bullmq/commit/973a9d357fc954ea6c44b2e14e18aef766208129)) - -* ci(python): move into python subfolder when releasing ([`d15581d`](https://github.com/taskforcesh/bullmq/commit/d15581d21bc9e5ed826c92b26cbe2f2b82c1c416)) - -* ci(python): use contains method instead of startsWith ([`646707b`](https://github.com/taskforcesh/bullmq/commit/646707bf5559ce5ee129527b8c5905922af4002d)) - -* ci(python): add python-semantic-release (#1957) ([`83cd060`](https://github.com/taskforcesh/bullmq/commit/83cd06049ead23a4a6ab4ac6dbb53371ca678ab5)) - +## v0.4.2 (2023-06-01) ### Fix +* **deps:** Fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([`ce86ece`](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) -* fix(job): use QueueEvents type for waitUntilFinished (#1958) ([`881848c`](https://github.com/taskforcesh/bullmq/commit/881848c1ee3835dac24daf6807b1f35da967f68b)) - - -## vpy0.4.3 (2023-06-07) - -### Breaking - -* feat(rate-limit): remove group key support and improve global rate limit - -BREAKING CHANGE: limit by group keys has been removed in favor -of a much simpler and efficent rate-limit implementation. ([`81f780a`](https://github.com/taskforcesh/bullmq/commit/81f780aeed81e670107d01d01265d407a30e2a62)) - -* fix(backoff): handle backoff strategy as function (#1463) - -BREAKING CHANGE: object mapping is replaced by single function ([`3640269`](https://github.com/taskforcesh/bullmq/commit/36402691a3c7fa500f07e2e11a28318099bdb909)) - -* fix(compat): remove Queue3 class (#1421) - -BREAKING CHANGE: -The compatibility class for Bullv3 is no longer available. ([`fc797f7`](https://github.com/taskforcesh/bullmq/commit/fc797f7cd334c19a95cb1290ddb6611cd3417179)) - -* feat: improve delayed jobs and remove QueueScheduler - -BREAKING CHANGE: -The QueueScheduler class is removed since it is not necessary anymore. -Delayed jobs are now handled in a much simpler and -robust way, without the need of a separate process. ([`1f66e5a`](https://github.com/taskforcesh/bullmq/commit/1f66e5a6c891d52e0671e58a685dbca511e45e7e)) - -* feat: move stalled jobs check and handling to Worker class from QueueScheduler - -BREAKING CHANGE: -failed and stalled events are now produced by the Worker class instead of by the QueueScheduler. ([`13769cb`](https://github.com/taskforcesh/bullmq/commit/13769cbe38ba22793cbc66e9706a6be28a7f1512)) - -### Build - -* build(types): build types only once (#1652) ([`a104eb1`](https://github.com/taskforcesh/bullmq/commit/a104eb15adada64e3a2e79525baa335a6f2fa4d1)) - -### Chore - -* chore(python): bump to version 0.4.3 ([`8ad2e12`](https://github.com/taskforcesh/bullmq/commit/8ad2e124ea75a110981779b1fddb082f6210ac54)) - -* chore(release): 3.15.2 [skip ci] - -## [3.15.2](https://github.com/taskforcesh/bullmq/compare/v3.15.1...v3.15.2) (2023-06-06) - -### Bug Fixes - -* **worker:** better worker client naming ([c5f63af](https://github.com/taskforcesh/bullmq/commit/c5f63affe72f7b6616f4c5f3aafde858dcc0b200)) ([`492f686`](https://github.com/taskforcesh/bullmq/commit/492f686e685744511e3f817bf5f1d503e8094392)) - -* chore(release): 3.15.1 [skip ci] - -## [3.15.1](https://github.com/taskforcesh/bullmq/compare/v3.15.0...v3.15.1) (2023-06-05) - -### Bug Fixes - -* **rate-limit:** consider paused queue ([#1931](https://github.com/taskforcesh/bullmq/issues/1931)) ([d97864a](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) - -### Features - -* **python:** add changePriority method ([#1943](https://github.com/taskforcesh/bullmq/issues/1943)) ([945bcd3](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) ([`b1097c9`](https://github.com/taskforcesh/bullmq/commit/b1097c9d72dbe2cde7e2e5f6019d49e34d69b6b5)) +## v0.4.1 (2023-05-29) +### Feature +* **job:** Add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([`f0867a6`](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) -* chore(deps): update actions/setup-python digest to bd6b4b6 (#1916) ([`bcc8030`](https://github.com/taskforcesh/bullmq/commit/bcc8030799907340f2f3db03edb2d83c77a52fb0)) +## [v0.4.0](https://github.com/taskforcesh/bullmq/compare/46d6f94...01b621f) (2023-05-18) +### Feature +* **connection:** accept redis options as string ([`01f549e`](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) +* **job:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([`5bebf8d`](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) +* **job:** Add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([`870da45`](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) +* **job:** Add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([`800b8c4`](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) +* **job:** Add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([`e1e1aa2`](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) +* **job:** Save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([`0b538ce`](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) +* Support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([`b044a03`](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) -* chore(release): 3.15.0 [skip ci] +### Fix +* **retry:** Consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([`01b621f`](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) +* **worker:** Stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([`514699c`](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) -# [3.15.0](https://github.com/taskforcesh/bullmq/compare/v3.14.2...v3.15.0) (2023-05-31) +## [v0.3.0](https://github.com/taskforcesh/bullmq/compare/ca48163...46d6f94) (2023-04-18) +### Feature +* **queue:** Add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([`46d6f94`](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) +* Improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([`ec7c49e`](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) -### Features +### Fix +* Correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([`ef0c5d6`](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) +* Fix scripts typing on array2obj function ([#1786](https://github.com/taskforcesh/bullmq/issues/1786)) ([`134f6ab`](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) +* Pass maxMetricsSize as empty string when it is not provided fixes ([#1754](https://github.com/taskforcesh/bullmq/issues/1754)) ([`6bda2b2`](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) -* **job:** add changePriority method ([#1901](https://github.com/taskforcesh/bullmq/issues/1901)) ref [#1899](https://github.com/taskforcesh/bullmq/issues/1899) ([9485ad5](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) ([`1ccf486`](https://github.com/taskforcesh/bullmq/commit/1ccf4864c957b85f244e45673513cea239796ea4)) +## [v0.2.0](https://github.com/taskforcesh/bullmq/compare/a97b22f...ca48163) (2023-03-29) +### Feature +* Add trimEvents method ([#1695](https://github.com/taskforcesh/bullmq/issues/1695)) ([`ca48163`](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) +* **queue:** Add retryJobs method ([#1688](https://github.com/taskforcesh/bullmq/issues/1688)) ([`2745327`](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) -* chore(release): 3.14.2 [skip ci] - -## [3.14.2](https://github.com/taskforcesh/bullmq/compare/v3.14.1...v3.14.2) (2023-05-30) - -### Bug Fixes - -* **python:** fix 'install_requires' to include semver ([#1927](https://github.com/taskforcesh/bullmq/issues/1927)) ([ce86ece](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) -* **rate-limit:** take in count priority ([#1919](https://github.com/taskforcesh/bullmq/issues/1919)) fixes [#1915](https://github.com/taskforcesh/bullmq/issues/1915) ([b8157a3](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) ([`6f4fb3c`](https://github.com/taskforcesh/bullmq/commit/6f4fb3cac980a06816660bbc7339b81db801f4d7)) - -* chore(python): bump to v0.4.1 ([`7509642`](https://github.com/taskforcesh/bullmq/commit/75096429d7a46d1f7babccdd4914f707eac32770)) - -* chore(python): add missing types to package - -Include types directory ([`7bc4f0b`](https://github.com/taskforcesh/bullmq/commit/7bc4f0bd02cf85be6e3ec9e363657d0260b826d6)) - -* chore(release): 3.14.1 [skip ci] - -## [3.14.1](https://github.com/taskforcesh/bullmq/compare/v3.14.0...v3.14.1) (2023-05-27) - -### Features - -* **python:** add getState method ([#1906](https://github.com/taskforcesh/bullmq/issues/1906)) ([f0867a6](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) - -### Performance Improvements - -* **retry-job:** get target queue list once ([#1921](https://github.com/taskforcesh/bullmq/issues/1921)) ([8a7a9dd](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) ([`5b1c5e9`](https://github.com/taskforcesh/bullmq/commit/5b1c5e9ccf2b01e2367582bd3214f9abdccea602)) - -* chore(release): 3.14.0 [skip ci] - -# [3.14.0](https://github.com/taskforcesh/bullmq/compare/v3.13.4...v3.14.0) (2023-05-22) - -### Features - -* **worker:** make extendLocks overridable ([7b1386b](https://github.com/taskforcesh/bullmq/commit/7b1386bb823562d9666a1ad6e206e1deb63e57ec)) ([`5beaf52`](https://github.com/taskforcesh/bullmq/commit/5beaf5285bb06d457dceb7ae636ecefff80ed881)) - -* chore(deps): update dependency tslib to v2.5.2 (#1905) ([`02594d6`](https://github.com/taskforcesh/bullmq/commit/02594d67e73c0bfe43d0045e8f988beff27d5c0d)) - -* chore(python): bump to version 0.4.0 ([`5d8f57f`](https://github.com/taskforcesh/bullmq/commit/5d8f57fc1b967fe33f1cb561bb907c720bf4a286)) - -* chore(deps): update coverallsapp/github-action digest to 059e56d (#1907) ([`b600624`](https://github.com/taskforcesh/bullmq/commit/b60062445a5b1f918e5a62d04576c8cac96719dc)) - -* chore(bullmq-pro): update changelog (#1902) ([`d164fa8`](https://github.com/taskforcesh/bullmq/commit/d164fa8745514fe46bfb3feb02d24884e4ea4697)) - -* chore(deps): update dependency redis to v4.5.5 (#1883) ([`5b94b1c`](https://github.com/taskforcesh/bullmq/commit/5b94b1ca3d23e1cfa6d3efb73e042670d0421c39)) - -* chore(release): 3.13.4 [skip ci] - -## [3.13.4](https://github.com/taskforcesh/bullmq/compare/v3.13.3...v3.13.4) (2023-05-11) - -### Performance Improvements - -* **rate-limit:** call pttl in script moveJobFromActiveToWait ([#1889](https://github.com/taskforcesh/bullmq/issues/1889)) ([e0d2992](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) ([`d7e640c`](https://github.com/taskforcesh/bullmq/commit/d7e640c6368a714f611920be849648348052de05)) - -* chore(release): 3.13.3 [skip ci] - -## [3.13.3](https://github.com/taskforcesh/bullmq/compare/v3.13.2...v3.13.3) (2023-05-10) - -### Bug Fixes - -* **child:** use named import for EventEmitter ([#1887](https://github.com/taskforcesh/bullmq/issues/1887)) ([1db396d](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) ([`64658c0`](https://github.com/taskforcesh/bullmq/commit/64658c024508fe91e85a291116ed899bbea0d564)) - -* chore(release): 3.13.2 [skip ci] - -## [3.13.2](https://github.com/taskforcesh/bullmq/compare/v3.13.1...v3.13.2) (2023-05-09) - -### Bug Fixes - -* **rate-limit:** consider paused queue when dynamic rate limit ([#1884](https://github.com/taskforcesh/bullmq/issues/1884)) ([a23f37e](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) ([`ce8059d`](https://github.com/taskforcesh/bullmq/commit/ce8059d5c6620acc9f8a090e447c610f80913af4)) - -* chore(release): 3.13.1 [skip ci] - -## [3.13.1](https://github.com/taskforcesh/bullmq/compare/v3.13.0...v3.13.1) (2023-05-07) - -### Bug Fixes - -* **retry:** consider when queue is paused ([#1880](https://github.com/taskforcesh/bullmq/issues/1880)) ([01b621f](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) ([`a880069`](https://github.com/taskforcesh/bullmq/commit/a880069ca02c1b9eb64fb42a0d269b3e98aa91c3)) - -* chore(release): 3.13.0 [skip ci] - -# [3.13.0](https://github.com/taskforcesh/bullmq/compare/v3.12.1...v3.13.0) (2023-05-06) - -### Features - -* **worker:** add worker threads support ([0820985](https://github.com/taskforcesh/bullmq/commit/0820985e073582fdf841affad38ecc7ab64691ec)) ([`dd1803f`](https://github.com/taskforcesh/bullmq/commit/dd1803f866ff249f2c19691dc1c020a69125a88f)) - -* chore(release): 3.12.1 [skip ci] - -## [3.12.1](https://github.com/taskforcesh/bullmq/compare/v3.12.0...v3.12.1) (2023-05-05) - -### Bug Fixes - -* **python:** stop processes when force stop ([#1837](https://github.com/taskforcesh/bullmq/issues/1837)) ([514699c](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) -* **worker:** close open handles after closing ([#1861](https://github.com/taskforcesh/bullmq/issues/1861)) fixes [#1312](https://github.com/taskforcesh/bullmq/issues/1312) ([39286e8](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) - -### Features - -* **python:** accept redis options as string ([01f549e](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) -* **python:** add moveToDelayed job method ([#1849](https://github.com/taskforcesh/bullmq/issues/1849)) ([5bebf8d](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) -* **python:** add retry method into job ([#1877](https://github.com/taskforcesh/bullmq/issues/1877)) ([870da45](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) -* **python:** add updateData method ([#1871](https://github.com/taskforcesh/bullmq/issues/1871)) ([800b8c4](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) -* **python:** add updateProgress method in job class([#1830](https://github.com/taskforcesh/bullmq/issues/1830)) ([e1e1aa2](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) -* **python:** save stacktrace when job fails ([#1859](https://github.com/taskforcesh/bullmq/issues/1859)) ([0b538ce](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) -* **python:** support retryJob logic ([#1869](https://github.com/taskforcesh/bullmq/issues/1869)) ([b044a03](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) ([`8f02061`](https://github.com/taskforcesh/bullmq/commit/8f020618d364c5706aca63086effe993fd437bbc)) - -* chore(deps): update github/codeql-action digest to 29b1f65 (#1876) ([`e81e94a`](https://github.com/taskforcesh/bullmq/commit/e81e94aeef1a07a975235c1c330f297c2bf8c9f5)) - -* chore(worker): remove out-commented code ([`332672b`](https://github.com/taskforcesh/bullmq/commit/332672b5d589f624db7c7dbd4a130536a011cb83)) - -* chore(python): update python version ([`3ae441a`](https://github.com/taskforcesh/bullmq/commit/3ae441a904f1e5555754f116cb7f5f0ef38930f6)) - -* chore(deps): lock file maintenance (#1864) ([`f2f1f2c`](https://github.com/taskforcesh/bullmq/commit/f2f1f2ca9c53ea8dd7e7d44557d039d822ddb9b9)) - -* chore(deps): lock file maintenance (#1851) ([`083b4d5`](https://github.com/taskforcesh/bullmq/commit/083b4d55ea67c75ae2a40c0545157cecd8e50508)) - -* chore(python): replace staticmethod function with decorator (#1826) ([`475a188`](https://github.com/taskforcesh/bullmq/commit/475a18863b678e72f4d3ba65af70e9d15c199333)) - -* chore(deps): update actions/setup-python digest to 57ded4d ([`182b4bb`](https://github.com/taskforcesh/bullmq/commit/182b4bb06a398b3a61ea070a7256d68cb77b86e6)) - -* chore(python): move types into a subfolder (#1828) ([`5428ecb`](https://github.com/taskforcesh/bullmq/commit/5428ecb6524ddcf880402108e7daa73ed4c4807a)) - -* chore(release): 3.12.0 [skip ci] - -# [3.12.0](https://github.com/taskforcesh/bullmq/compare/v3.11.0...v3.12.0) (2023-04-20) - -### Features - -* upgrade ioredis to 5.3.2 ([375b1be](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) ([`fc66096`](https://github.com/taskforcesh/bullmq/commit/fc66096d79734ad543562dfdbd6739c080f7102f)) - -* chore(deps): update coverallsapp/github-action digest to d2cf009 (#1842) ([`c72bc17`](https://github.com/taskforcesh/bullmq/commit/c72bc1756faec43b7b67528f0f0bdacef193e005)) - -* chore(release): 3.11.0 [skip ci] - -# [3.11.0](https://github.com/taskforcesh/bullmq/compare/v3.10.4...v3.11.0) (2023-04-17) - -### Bug Fixes - -* **python:** correct condition so that the worker keeps processing jobs indefinitely ([#1800](https://github.com/taskforcesh/bullmq/issues/1800)) ([ef0c5d6](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) - -### Features - -* **python:** add getJobCounts method ([#1807](https://github.com/taskforcesh/bullmq/issues/1807)) ([46d6f94](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) -* **python:** improve worker concurrency ([#1809](https://github.com/taskforcesh/bullmq/issues/1809)) ([ec7c49e](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) -* **upstash:** don't throw an error when detecting an upstash host ([2e06bca](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) ([`1a3113b`](https://github.com/taskforcesh/bullmq/commit/1a3113b97106eebd63883dc8865b7c6a3f028765)) - -* chore(python): replace is operator (#1819) ([`cd15d7d`](https://github.com/taskforcesh/bullmq/commit/cd15d7d46626511231f50f86c11898c6fa551c5b)) - -* chore(python): remove unnecessary semicolons (#1801) ([`b4729e9`](https://github.com/taskforcesh/bullmq/commit/b4729e99622a802a09db9f8007b1039b4001b8fb)) - -* chore(python): add JobOptions to add method (#1798) ([`8d0cbda`](https://github.com/taskforcesh/bullmq/commit/8d0cbdad4006394be080f8dc6ffdf5f193afc5aa)) - -* chore(python): add QueueOptions (#1797) ([`7478049`](https://github.com/taskforcesh/bullmq/commit/74780498a76849b7157af7688ea5b9c37c1c09dd)) - -* chore(python): add JobOptions (#1796) ([`893f71a`](https://github.com/taskforcesh/bullmq/commit/893f71a9d0309aef924fba4ec605d9fb4f6c0f68)) - -* chore(python): add WorkerOptions typed dict (#1795) ([`4843634`](https://github.com/taskforcesh/bullmq/commit/48436341230b495d9400948626c20db40761e2d1)) - -* chore(deps): pin actions/setup-python action to d27e3f3 ([`17ccf4f`](https://github.com/taskforcesh/bullmq/commit/17ccf4ff807179c9f65a9f4087fbb6671212f07c)) - -* chore(python): update python docs comments (#1790) ([`cb145ce`](https://github.com/taskforcesh/bullmq/commit/cb145cef8cc655deafbe10edef2f9540d1ca53cc)) - -* chore(release): 3.10.4 [skip ci] - -## [3.10.4](https://github.com/taskforcesh/bullmq/compare/v3.10.3...v3.10.4) (2023-04-05) - -### Bug Fixes - -* **flow:** do not remove completed children results ([#1788](https://github.com/taskforcesh/bullmq/issues/1788)) fixes [#1778](https://github.com/taskforcesh/bullmq/issues/1778) ([04b547a](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) -* **python:** fix scripts typing on array2obj function ([#1786](https://github.com/taskforcesh/bullmq/issues/1786)) ([134f6ab](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) ([`86f5774`](https://github.com/taskforcesh/bullmq/commit/86f57742e3233853b944ae8616c1cfa5a16706c3)) - -* chore(python): add missing typings in python (#1789) ([`9e22393`](https://github.com/taskforcesh/bullmq/commit/9e22393a66dee10d339225e453b4a52cdd9f2104)) - -* chore(deps): update dependency msgpack to v1.0.5 (#1731) ([`7ca07dd`](https://github.com/taskforcesh/bullmq/commit/7ca07ddfd46383863fbcdb383dcc800e05bd000a)) - -* chore(release): 3.10.3 [skip ci] - -## [3.10.3](https://github.com/taskforcesh/bullmq/compare/v3.10.2...v3.10.3) (2023-03-30) - -### Bug Fixes - -* **flow:** consider removing dependency on removeOnFail true ([#1753](https://github.com/taskforcesh/bullmq/issues/1753)) ([de5a299](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) -* **python:** pass maxMetricsSize as empty string when it is not provided fixes [#1754](https://github.com/taskforcesh/bullmq/issues/1754) ([6bda2b2](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) ([`8c34cc7`](https://github.com/taskforcesh/bullmq/commit/8c34cc7dcb71413a77b1e9f5bdb157d5b6d7a0ac)) - -* chore(python): update README ([`4ea9642`](https://github.com/taskforcesh/bullmq/commit/4ea9642193e3a9ac9852314a6e3f21558eaa267b)) - -* chore(release): 3.10.2 [skip ci] - -## [3.10.2](https://github.com/taskforcesh/bullmq/compare/v3.10.1...v3.10.2) (2023-03-22) - -### Bug Fixes - -* **job:** avoid error when job is moved when processing ([#1354](https://github.com/taskforcesh/bullmq/issues/1354)) fixes [#1343](https://github.com/taskforcesh/bullmq/issues/1343) [#1602](https://github.com/taskforcesh/bullmq/issues/1602) ([78085e4](https://github.com/taskforcesh/bullmq/commit/78085e4304357dd3695df61057f91e706c3a52bf)) ([`358ab2a`](https://github.com/taskforcesh/bullmq/commit/358ab2a9179155659800d48edee0f1f77309bff1)) - -* chore(release): 3.10.1 [skip ci] - -## [3.10.1](https://github.com/taskforcesh/bullmq/compare/v3.10.0...v3.10.1) (2023-03-06) - -### Bug Fixes - -* **worker:** throw error with invalid concurrency fixes [#1723](https://github.com/taskforcesh/bullmq/issues/1723) ([2a1cdbe](https://github.com/taskforcesh/bullmq/commit/2a1cdbe3e871309f460aadc14b4d632238c32aa9)) ([`5849cf6`](https://github.com/taskforcesh/bullmq/commit/5849cf686064bfb5f28ccb735ec47fb44553c5a8)) - -* chore(release): 3.10.0 [skip ci] - -# [3.10.0](https://github.com/taskforcesh/bullmq/compare/v3.9.0...v3.10.0) (2023-03-02) - -### Bug Fixes - -* **worker:** close lock extended timer ([7995f18](https://github.com/taskforcesh/bullmq/commit/7995f18bb7712bd50d0fa3d17c4ab565b16ab379)) -* **worker:** correct lock extender logic ([6aa3569](https://github.com/taskforcesh/bullmq/commit/6aa3569db0fe0137790e61a4b5982d2b35ee5646)) -* **worker:** start stalled check timer ([4763be0](https://github.com/taskforcesh/bullmq/commit/4763be028b0c7b0460fd0804d4569c446a06ef4a)) - -### Features - -* **worker:** replace Promise.race with efficient an async fifo ([0d94e35](https://github.com/taskforcesh/bullmq/commit/0d94e35e805b09c3b4c7404b8a2eeb71a1aff5c4)) -* **worker:** simplify lock extension to one call independent of concurrency ([ebf1aeb](https://github.com/taskforcesh/bullmq/commit/ebf1aeb2400383d0ae90ab68aeb4822aea03ba44)) - -### Performance Improvements - -* **scripts:** reuse keys array to avoid allocations ([feac7b4](https://github.com/taskforcesh/bullmq/commit/feac7b4070a6a3720597af36c43d095e9ea37173)) -* **worker:** improve worker memory consumption ([4846cf1](https://github.com/taskforcesh/bullmq/commit/4846cf1fe3f9ea35f58a679c11706e1a7101c898)) ([`4cb5250`](https://github.com/taskforcesh/bullmq/commit/4cb5250886f8f454a7ee4ee4d2b1754cd83df59b)) - -* chore(release): 3.9.0 [skip ci] - -# [3.9.0](https://github.com/taskforcesh/bullmq/compare/v3.8.0...v3.9.0) (2023-02-25) - -### Features - -* **worker:** add remove on complete and fail options ([#1703](https://github.com/taskforcesh/bullmq/issues/1703)) ([cf13494](https://github.com/taskforcesh/bullmq/commit/cf1349471dcbf0e43feea9972eaa71d2299d619f)) ([`3dc3b55`](https://github.com/taskforcesh/bullmq/commit/3dc3b55b787b49701dcf7aa74e85a216c774c231)) - -* chore(deps): bump json5 from 1.0.1 to 1.0.2 (#1613) ([`b58c6f3`](https://github.com/taskforcesh/bullmq/commit/b58c6f302b363720c2004dd2c1f7a7dfecf6640b)) - -* chore(release): 3.8.0 [skip ci] - -# [3.8.0](https://github.com/taskforcesh/bullmq/compare/v3.7.2...v3.8.0) (2023-02-23) - -### Bug Fixes - -* **worker:** run stalled check directly first time ([f71ec03](https://github.com/taskforcesh/bullmq/commit/f71ec03111a22897cbf2fad39073185e4aeac6d6)) - -### Features - -* **worker:** add a public method to run the stalled checker ([3159266](https://github.com/taskforcesh/bullmq/commit/3159266ccb002d4fc71b7ee7ac63c465c536dbd1)) -* **worker:** add support to disable stalled checks ([49e860c](https://github.com/taskforcesh/bullmq/commit/49e860c6675853971e992c2945b445660504e3b2)) ([`aa74246`](https://github.com/taskforcesh/bullmq/commit/aa742463f7dfbec433d166a42dfefd5b9248a544)) - -* chore(release): 3.7.2 [skip ci] - -## [3.7.2](https://github.com/taskforcesh/bullmq/compare/v3.7.1...v3.7.2) (2023-02-23) - -### Bug Fixes - -* **worker:** restore failed event job parameter typing ([#1707](https://github.com/taskforcesh/bullmq/issues/1707)) ([44c2203](https://github.com/taskforcesh/bullmq/commit/44c2203ab65d406be9a913254600fe07c83e62d5)) ([`3ecb8f7`](https://github.com/taskforcesh/bullmq/commit/3ecb8f7fbb736e223aa73bbbf8f07629892902fa)) - -* chore(release): 3.7.1 [skip ci] - -## [3.7.1](https://github.com/taskforcesh/bullmq/compare/v3.7.0...v3.7.1) (2023-02-22) - -### Bug Fixes - -* **worker:** failed event receives an optional job parameter ([#1702](https://github.com/taskforcesh/bullmq/issues/1702)) fixes [#1690](https://github.com/taskforcesh/bullmq/issues/1690) ([6009906](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) - -### Features - -* **python:** add retryJobs method ([#1688](https://github.com/taskforcesh/bullmq/issues/1688)) ([2745327](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) -* **python:** add trimEvents ([#1695](https://github.com/taskforcesh/bullmq/issues/1695)) ([ca48163](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) ([`e465b55`](https://github.com/taskforcesh/bullmq/commit/e465b5574a19013868250658740b0fdda1d2c6f6)) - -* chore(deps): update dependency virtualenv to v20.19.0 (#1686) ([`2397d00`](https://github.com/taskforcesh/bullmq/commit/2397d0068f9fdf4036abddb0aca205f9e5ca8d54)) - -* chore(release): 3.7.0 [skip ci] - -# [3.7.0](https://github.com/taskforcesh/bullmq/compare/v3.6.6...v3.7.0) (2023-02-16) - -### Features - -* initial python package ([#1673](https://github.com/taskforcesh/bullmq/issues/1673)) ([a97b22f](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) ([`3b63c3e`](https://github.com/taskforcesh/bullmq/commit/3b63c3e629c1d63b6692f823fd83888f60a3a834)) - -* chore: prevent npm releases from python changes ([`3c2dacb`](https://github.com/taskforcesh/bullmq/commit/3c2dacb0952190afdf9d7262502c7df6dd1376c4)) - -* chore(release): 3.6.6 [skip ci] - -## [3.6.6](https://github.com/taskforcesh/bullmq/compare/v3.6.5...v3.6.6) (2023-02-15) - -### Bug Fixes - -* **job:** check jobKey when saving stacktrace ([#1681](https://github.com/taskforcesh/bullmq/issues/1681)) fixes [#1676](https://github.com/taskforcesh/bullmq/issues/1676) ([1856c76](https://github.com/taskforcesh/bullmq/commit/1856c7684c377ca4fd36294cca8e128404be27b8)) ([`488f943`](https://github.com/taskforcesh/bullmq/commit/488f9437977f9aeb5a03b96a41dbb664dbfe2775)) - -* chore(deps): lock file maintenance (#1657) ([`762fd28`](https://github.com/taskforcesh/bullmq/commit/762fd28e8a64448c7cd054fac3507cefeecebf40)) - -* chore(release): 3.6.5 [skip ci] - -## [3.6.5](https://github.com/taskforcesh/bullmq/compare/v3.6.4...v3.6.5) (2023-02-11) - -### Bug Fixes - -* infinite worker process spawned for invalid JS file ([a445ba8](https://github.com/taskforcesh/bullmq/commit/a445ba8b7a261b370dec7d88091ae5f5af8b2728)) ([`dfa431e`](https://github.com/taskforcesh/bullmq/commit/dfa431ebb22cebbf85247abcf8226946ad297ec5)) - -* chore(release): 3.6.4 [skip ci] - -## [3.6.4](https://github.com/taskforcesh/bullmq/compare/v3.6.3...v3.6.4) (2023-02-09) - -### Bug Fixes - -* add a maximum block time ([1a2618b](https://github.com/taskforcesh/bullmq/commit/1a2618bc5473288a62dddb85e3cb78d6cdb4f39f)) ([`00ec4e8`](https://github.com/taskforcesh/bullmq/commit/00ec4e8d2d741df1246fb4e90ff876377fad7d16)) - -* chore(release): 3.6.3 [skip ci] - -## [3.6.3](https://github.com/taskforcesh/bullmq/compare/v3.6.2...v3.6.3) (2023-02-07) - -### Bug Fixes - -* **master:** copy type declaration ([23ade6e](https://github.com/taskforcesh/bullmq/commit/23ade6e3e45df14bd3fbc2c3e7be47307b642872)) ([`bf8589a`](https://github.com/taskforcesh/bullmq/commit/bf8589ae1b95b705e921f597644becdd1752b04f)) - -* chore(release): 3.6.2 [skip ci] - -## [3.6.2](https://github.com/taskforcesh/bullmq/compare/v3.6.1...v3.6.2) (2023-02-03) - -### Bug Fixes - -* **redis:** increase minimum default retry time ([d521531](https://github.com/taskforcesh/bullmq/commit/d521531e22ba9eda8ad8d6e8eddf450fdc3f50f4)) ([`b08f95d`](https://github.com/taskforcesh/bullmq/commit/b08f95d9b87ec03b645af866ac869f771a42e1f1)) - -* chore(release): 3.6.1 [skip ci] - -## [3.6.1](https://github.com/taskforcesh/bullmq/compare/v3.6.0...v3.6.1) (2023-01-31) - -### Bug Fixes - -* **connection:** apply console.warn in noeviction message ([95f171c](https://github.com/taskforcesh/bullmq/commit/95f171cbc8cdd7d04865618b715dd21229f36a4a)) ([`75092f5`](https://github.com/taskforcesh/bullmq/commit/75092f50169154bfbbc704d8a1971b2ac0a03187)) - -* chore(release): 3.6.0 [skip ci] - -# [3.6.0](https://github.com/taskforcesh/bullmq/compare/v3.5.11...v3.6.0) (2023-01-31) - -### Features - -* **job:** allow clearing job's log ([#1600](https://github.com/taskforcesh/bullmq/issues/1600)) ([0ded2d7](https://github.com/taskforcesh/bullmq/commit/0ded2d7709322bf105e0decac44d801ece5615f2)) ([`ce19e6d`](https://github.com/taskforcesh/bullmq/commit/ce19e6db253e03d5817b555abaa773a7bdf06171)) - -* chore(deps): update actions/checkout digest to ac59398 (#1582) ([`acebda8`](https://github.com/taskforcesh/bullmq/commit/acebda86b1e40e0a04dd3784b5fc3b7f1a662641)) - -* chore(deps): update peaceiris/actions-gh-pages digest to bd8c6b0 (#1632) ([`84e057e`](https://github.com/taskforcesh/bullmq/commit/84e057e3a84518be62607b8d8f9a7866aa3cd306)) - -* chore(release): 3.5.11 [skip ci] - -## [3.5.11](https://github.com/taskforcesh/bullmq/compare/v3.5.10...v3.5.11) (2023-01-27) - -### Bug Fixes - -* **error:** remove global prototype toJSON ([#1642](https://github.com/taskforcesh/bullmq/issues/1642)) fixes [#1414](https://github.com/taskforcesh/bullmq/issues/1414) ([d4e7108](https://github.com/taskforcesh/bullmq/commit/d4e7108a37aeabdd3085a26c9daf09cea5976f3e)) ([`94b293e`](https://github.com/taskforcesh/bullmq/commit/94b293e6011bed3f8b6905b202f7a45d0d1d863b)) - -* chore(release): 3.5.10 [skip ci] - -## [3.5.10](https://github.com/taskforcesh/bullmq/compare/v3.5.9...v3.5.10) (2023-01-24) - -### Bug Fixes - -* **move-to-finished:** return correct delayUntil ([#1643](https://github.com/taskforcesh/bullmq/issues/1643)) ([c4bf9fa](https://github.com/taskforcesh/bullmq/commit/c4bf9fa6563eda1630d8eb2189b16e9324b01c7f)) ([`c66c03d`](https://github.com/taskforcesh/bullmq/commit/c66c03d377d6b5363231ec65117a8b045f136f86)) - -* chore(release): 3.5.9 [skip ci] - -## [3.5.9](https://github.com/taskforcesh/bullmq/compare/v3.5.8...v3.5.9) (2023-01-19) - -### Bug Fixes - -* **worker:** fix delayed jobs with concurrency fixes [#1627](https://github.com/taskforcesh/bullmq/issues/1627) ([99a8e6d](https://github.com/taskforcesh/bullmq/commit/99a8e6d3a339be51fb46f69c8afac4ecdebff6d3)) ([`3714760`](https://github.com/taskforcesh/bullmq/commit/3714760ee4be056826e66baaec62bb97d60a53e3)) - -* chore(release): 3.5.8 [skip ci] - -## [3.5.8](https://github.com/taskforcesh/bullmq/compare/v3.5.7...v3.5.8) (2023-01-18) - -### Bug Fixes - -* **move-to-active:** delete marker when it is moved to active ([#1634](https://github.com/taskforcesh/bullmq/issues/1634)) ([ad1fcea](https://github.com/taskforcesh/bullmq/commit/ad1fcea4500d4ceed51d5d5b0a03dbb5e1735a42)) ([`5c761ae`](https://github.com/taskforcesh/bullmq/commit/5c761ae994c48402b27a6b3530a882b0720e4025)) - -* chore(release): 3.5.7 [skip ci] - -## [3.5.7](https://github.com/taskforcesh/bullmq/compare/v3.5.6...v3.5.7) (2023-01-17) - -### Bug Fixes - -* **move-to-active:** validate next marker and return delayUntil ([#1630](https://github.com/taskforcesh/bullmq/issues/1630)) ([3cd3305](https://github.com/taskforcesh/bullmq/commit/3cd33052fc711a9ba560c9a431630be5cdd02193)) ([`f2c1775`](https://github.com/taskforcesh/bullmq/commit/f2c1775dc150e3f1fd972beed39dcdd2b12e8ea1)) - -* chore(deps): bump luxon from 3.1.1 to 3.2.1 (#1621) ([`b203d0f`](https://github.com/taskforcesh/bullmq/commit/b203d0f80ff020242ee94e61899f7510e7d18b4d)) - -* chore(release): 3.5.6 [skip ci] - -## [3.5.6](https://github.com/taskforcesh/bullmq/compare/v3.5.5...v3.5.6) (2023-01-13) - -### Bug Fixes - -* **worker:** add max concurrency from the beginning ([#1597](https://github.com/taskforcesh/bullmq/issues/1597)) fixes [#1589](https://github.com/taskforcesh/bullmq/issues/1589) ([6f49db3](https://github.com/taskforcesh/bullmq/commit/6f49db3fb15119d13f99cd83d49f2a7bdcb614cd)) ([`4de7f3c`](https://github.com/taskforcesh/bullmq/commit/4de7f3cf740ad1f96f07bdfcd50e372257df4514)) - -* chore(release): 3.5.5 [skip ci] - -## [3.5.5](https://github.com/taskforcesh/bullmq/compare/v3.5.4...v3.5.5) (2023-01-10) - -### Bug Fixes - -* circular references ([#1622](https://github.com/taskforcesh/bullmq/issues/1622)) ([f607ec7](https://github.com/taskforcesh/bullmq/commit/f607ec7530fb4430e8cab7ed325583bd9d171ccf)) ([`5a78f58`](https://github.com/taskforcesh/bullmq/commit/5a78f58ead461192069e78bf1ee34d84012e8077)) - -* chore(release): 3.5.4 [skip ci] - -## [3.5.4](https://github.com/taskforcesh/bullmq/compare/v3.5.3...v3.5.4) (2023-01-09) - -### Bug Fixes - -* [#1603](https://github.com/taskforcesh/bullmq/issues/1603) performance issues in `remove()` ([#1607](https://github.com/taskforcesh/bullmq/issues/1607)) ([2541215](https://github.com/taskforcesh/bullmq/commit/2541215bcf81dcd52eaefa02530c3812a5135fbf)) ([`9fdac55`](https://github.com/taskforcesh/bullmq/commit/9fdac5578795900b85c99b4ef8c2e71583802417)) - -* chore(release): 3.5.3 [skip ci] - -## [3.5.3](https://github.com/taskforcesh/bullmq/compare/v3.5.2...v3.5.3) (2023-01-07) - -### Bug Fixes - -* **delayed:** remove marker after being consumed ([#1620](https://github.com/taskforcesh/bullmq/issues/1620)) fixes [#1615](https://github.com/taskforcesh/bullmq/issues/1615) ([9fce0f0](https://github.com/taskforcesh/bullmq/commit/9fce0f05e5acc1918a276b03e8cb9c16083cb509)) ([`2061624`](https://github.com/taskforcesh/bullmq/commit/2061624f0baebd5e5018136934346b65750c0323)) - -* chore(deps): update peaceiris/actions-gh-pages digest to 64b46b4 (#1619) ([`4a6db4d`](https://github.com/taskforcesh/bullmq/commit/4a6db4db9bfcbe4a67b07b25b389f5bd1bee51ca)) - -* chore(release): 3.5.2 [skip ci] - -## [3.5.2](https://github.com/taskforcesh/bullmq/compare/v3.5.1...v3.5.2) (2023-01-04) - -### Performance Improvements - -* **get-dependencies:** replace slow object destructuring with single object ([#1612](https://github.com/taskforcesh/bullmq/issues/1612)) ([621748e](https://github.com/taskforcesh/bullmq/commit/621748ec7727b46ce57eb9d2b46ef981874cdf4c)) ([`5b34b8b`](https://github.com/taskforcesh/bullmq/commit/5b34b8ba09e14bc78aeed03824b4fbd419e0e18e)) - -* chore(release): 3.5.1 [skip ci] - -## [3.5.1](https://github.com/taskforcesh/bullmq/compare/v3.5.0...v3.5.1) (2022-12-23) - -### Bug Fixes - -* **connection:** throw exception if using keyPrefix in ioredis ([eb6a130](https://github.com/taskforcesh/bullmq/commit/eb6a1305541547725e1717eefe2b678bc445f4d0)) -* **connection:** use includes to check for upstash more reliably ([12efb5c](https://github.com/taskforcesh/bullmq/commit/12efb5c539cb6f031ea6f3a80e4128d2e556e627)) ([`1e8786a`](https://github.com/taskforcesh/bullmq/commit/1e8786a8dd2f08de6f84e08aeb252b304ebbca73)) - -* chore(release): 3.5.0 [skip ci] - -# [3.5.0](https://github.com/taskforcesh/bullmq/compare/v3.4.2...v3.5.0) (2022-12-20) - -### Bug Fixes - -* **job:** fetch parent before job moves to complete ([#1580](https://github.com/taskforcesh/bullmq/issues/1580)) ([6a6c0dc](https://github.com/taskforcesh/bullmq/commit/6a6c0dca30bb0a2417e0c62d4c80202c750322dd)) -* **sandbox:** throw error when no exported function ([#1588](https://github.com/taskforcesh/bullmq/issues/1588)) fixes [#1587](https://github.com/taskforcesh/bullmq/issues/1587) ([c031891](https://github.com/taskforcesh/bullmq/commit/c03189184c8eeeb324f005b86e93d114abbe2154)) - -### Features - -* **queue:** add getJobState method ([#1593](https://github.com/taskforcesh/bullmq/issues/1593)) ref [#1532](https://github.com/taskforcesh/bullmq/issues/1532) ([b741e84](https://github.com/taskforcesh/bullmq/commit/b741e8456f262b51aa7c68f571c76a3c54d02d37)) ([`ffb0851`](https://github.com/taskforcesh/bullmq/commit/ffb08512271be681204a803508cd4d5ece0bb71b)) - -* chore(deps): lock file maintenance (#1568) ([`a426e49`](https://github.com/taskforcesh/bullmq/commit/a426e499299f9782128106127285ddba2444ff58)) - -* chore(release): 3.4.2 [skip ci] - -## [3.4.2](https://github.com/taskforcesh/bullmq/compare/v3.4.1...v3.4.2) (2022-12-15) - -### Performance Improvements - -* **counts:** delete delayed marker when needed ([#1583](https://github.com/taskforcesh/bullmq/issues/1583)) ([cc26f1c](https://github.com/taskforcesh/bullmq/commit/cc26f1cd550de76c7588d3a98187b80ee78c40c4)) -* **get-children-values:** replace slow object destructuring with single object ([#1586](https://github.com/taskforcesh/bullmq/issues/1586)) ([857d403](https://github.com/taskforcesh/bullmq/commit/857d40377a6eb2c0101e6d16d9085ecd4b52b016)) ([`91bbde9`](https://github.com/taskforcesh/bullmq/commit/91bbde9472ea3b38e1b9ee94ef1ec56733eeb3fa)) - -* chore(release): 3.4.1 [skip ci] - -## [3.4.1](https://github.com/taskforcesh/bullmq/compare/v3.4.0...v3.4.1) (2022-12-10) - -### Bug Fixes - -* **exponential:** respect exponential backoff delay ([#1581](https://github.com/taskforcesh/bullmq/issues/1581)) ([145dd32](https://github.com/taskforcesh/bullmq/commit/145dd329bb9f8254b404f4c5fbf7a50359202d37)) -* **get-jobs:** filter marker ([#1551](https://github.com/taskforcesh/bullmq/issues/1551)) ([4add0ef](https://github.com/taskforcesh/bullmq/commit/4add0efa7857cc2f7b6d3c0c78a7f82cb7a46933)) ([`df604c4`](https://github.com/taskforcesh/bullmq/commit/df604c48bfeec2b621fd9d52d97b316f477e79a2)) - -* chore(release): 3.4.0 [skip ci] - -# [3.4.0](https://github.com/taskforcesh/bullmq/compare/v3.3.5...v3.4.0) (2022-12-09) - -### Features - -* **worker:** add ready event for blockingConnection ([#1577](https://github.com/taskforcesh/bullmq/issues/1577)) ([992cc9e](https://github.com/taskforcesh/bullmq/commit/992cc9e9b3046185d3b67f2cc956f30337f458e1)) ([`6d9dada`](https://github.com/taskforcesh/bullmq/commit/6d9dadaedf016267255e2412ff4ca40d44001630)) - -* chore(release): 3.3.5 [skip ci] - -## [3.3.5](https://github.com/taskforcesh/bullmq/compare/v3.3.4...v3.3.5) (2022-12-08) - -### Bug Fixes - -* **worker:** add token postfix ([#1575](https://github.com/taskforcesh/bullmq/issues/1575)) ([1d3e368](https://github.com/taskforcesh/bullmq/commit/1d3e368021041bb9861761c86fe3e04914b0c52f)) ([`865c9ca`](https://github.com/taskforcesh/bullmq/commit/865c9ca8ce99860a4a0c72b7a2ec4a5733395d10)) - -* chore(release): 3.3.4 [skip ci] - -## [3.3.4](https://github.com/taskforcesh/bullmq/compare/v3.3.3...v3.3.4) (2022-12-07) - -### Bug Fixes - -* **worker:** try catch setname call ([#1576](https://github.com/taskforcesh/bullmq/issues/1576)) fixes [#1574](https://github.com/taskforcesh/bullmq/issues/1574) ([0c42fd8](https://github.com/taskforcesh/bullmq/commit/0c42fd8c07dbac7ace81e97e45440af93fc622a5)) ([`bbe29ee`](https://github.com/taskforcesh/bullmq/commit/bbe29ee8546242a839b41ae0eccd5c9acc592e9a)) - -* chore(release): 3.3.3 [skip ci] - -## [3.3.3](https://github.com/taskforcesh/bullmq/compare/v3.3.2...v3.3.3) (2022-12-07) - -### Bug Fixes - -* do not allow move from active to wait if not owner of the job ([dc1a307](https://github.com/taskforcesh/bullmq/commit/dc1a3077d1521c5dc99824a7fc05d17da03906bc)) ([`0f119cb`](https://github.com/taskforcesh/bullmq/commit/0f119cb7eac550ad6a5a08f6561b65a72d06ae91)) - -* chore(release): 3.3.2 [skip ci] - -## [3.3.2](https://github.com/taskforcesh/bullmq/compare/v3.3.1...v3.3.2) (2022-12-05) - -### Bug Fixes - -* floor pexpire to integer ([1d5de42](https://github.com/taskforcesh/bullmq/commit/1d5de425a19ebf879a8f9a7e0543d87a4d358be1)) ([`b469dcc`](https://github.com/taskforcesh/bullmq/commit/b469dcc4bafee0bc21a6fc51772ce958947ce516)) - -* chore(release): 3.3.1 [skip ci] - -## [3.3.1](https://github.com/taskforcesh/bullmq/compare/v3.3.0...v3.3.1) (2022-12-05) - -### Bug Fixes - -* **get-workers:** set name when ready event in connection ([#1564](https://github.com/taskforcesh/bullmq/issues/1564)) ([de93c17](https://github.com/taskforcesh/bullmq/commit/de93c172901650e1666c48423a39076f2c7b9c7b)) -* **job:** console warn custom job ids when they represent integers ([#1569](https://github.com/taskforcesh/bullmq/issues/1569)) ([6e677d2](https://github.com/taskforcesh/bullmq/commit/6e677d2800957b368bef4247b8e4328c5758f262)) ([`1e0625e`](https://github.com/taskforcesh/bullmq/commit/1e0625eb72400891b126483e1201431bbb7fd161)) - -* chore(release): 3.3.0 [skip ci] - -# [3.3.0](https://github.com/taskforcesh/bullmq/compare/v3.2.5...v3.3.0) (2022-12-04) - -### Features - -* **queue-events:** support duplicated event ([#1549](https://github.com/taskforcesh/bullmq/issues/1549)) ([18bc4eb](https://github.com/taskforcesh/bullmq/commit/18bc4eb50432f8aa27f2395750a7617317b66ca1)) ([`aa753dd`](https://github.com/taskforcesh/bullmq/commit/aa753dd3680964bf0fe7ab650734c12525020ef2)) - -* chore(release): 3.2.5 [skip ci] - -## [3.2.5](https://github.com/taskforcesh/bullmq/compare/v3.2.4...v3.2.5) (2022-12-04) - -### Bug Fixes - -* **add-job:** throw error when jobId represents an integer ([#1556](https://github.com/taskforcesh/bullmq/issues/1556)) ([db617d7](https://github.com/taskforcesh/bullmq/commit/db617d79e8f55b5c9e0df4b6bfd4247612016da1)) ([`75ebd85`](https://github.com/taskforcesh/bullmq/commit/75ebd8558853969df094d8c37b12b66685108eb9)) - -* chore(release): 3.2.4 [skip ci] - -## [3.2.4](https://github.com/taskforcesh/bullmq/compare/v3.2.3...v3.2.4) (2022-11-29) - -### Bug Fixes - -* **add-job:** do not update job that already exist ([#1550](https://github.com/taskforcesh/bullmq/issues/1550)) ([26f6311](https://github.com/taskforcesh/bullmq/commit/26f6311cd0d2b936e404d0abebca9637f314a209)) ([`4387d0c`](https://github.com/taskforcesh/bullmq/commit/4387d0c959d563eaaba2719d3f9566e992ba0914)) - -* chore(release): 3.2.3 [skip ci] - -## [3.2.3](https://github.com/taskforcesh/bullmq/compare/v3.2.2...v3.2.3) (2022-11-29) - -### Bug Fixes - -* **rate-limit:** delete rateLimiterKey when 0 ([#1553](https://github.com/taskforcesh/bullmq/issues/1553)) ([0b88e5b](https://github.com/taskforcesh/bullmq/commit/0b88e5b94b4a0dc0d4000f7fd4b327f402248ad2)) ([`a6b7498`](https://github.com/taskforcesh/bullmq/commit/a6b74988e38ff74049df9b30215fb6ddab73e844)) - -* chore(deps): lock file maintenance (#1491) ([`e67c057`](https://github.com/taskforcesh/bullmq/commit/e67c0575f855202bad47eb6616c35c07513fa1a7)) - -* chore(release): 3.2.2 [skip ci] - -## [3.2.2](https://github.com/taskforcesh/bullmq/compare/v3.2.1...v3.2.2) (2022-11-15) - -### Bug Fixes - -* **rate-limit:** check job is active before moving to wait ([9502167](https://github.com/taskforcesh/bullmq/commit/9502167bb0d9008fc8811ff7980dc8126fbc5ac2)) ([`4226070`](https://github.com/taskforcesh/bullmq/commit/4226070d9905fb052a2ec00f17ee4210bf931fbd)) - -* chore(release): 3.2.1 [skip ci] - -## [3.2.1](https://github.com/taskforcesh/bullmq/compare/v3.2.0...v3.2.1) (2022-11-15) - -### Bug Fixes - -* **worker:** consider removed jobs in failed event ([#1500](https://github.com/taskforcesh/bullmq/issues/1500)) ([8704b9a](https://github.com/taskforcesh/bullmq/commit/8704b9a10575fd7df738296f7156057123592b86)) ([`0301a7a`](https://github.com/taskforcesh/bullmq/commit/0301a7ab2b110670804de0dae63a04c7a314ee5a)) - -* chore(release): 3.2.0 [skip ci] - -# [3.2.0](https://github.com/taskforcesh/bullmq/compare/v3.1.3...v3.2.0) (2022-11-09) - -### Features - -* **flow:** move parent to delayed when delay option is provided ([#1501](https://github.com/taskforcesh/bullmq/issues/1501)) ([2f3e5d5](https://github.com/taskforcesh/bullmq/commit/2f3e5d54f0797bf0d1adf14dbb2b51ad9f9183ca)) ([`f05e098`](https://github.com/taskforcesh/bullmq/commit/f05e098a6dad2038c720d77d71a66b387b53bcb1)) - -* chore(move-to-finished): remove debug statement (#1524) ([`65189dc`](https://github.com/taskforcesh/bullmq/commit/65189dc45b9f96d8b56cf44a5e6debaa4344a746)) - -* chore(release): 3.1.3 [skip ci] - -## [3.1.3](https://github.com/taskforcesh/bullmq/compare/v3.1.2...v3.1.3) (2022-11-04) - -### Bug Fixes - -* **delayed:** better handling of marker id ([816376e](https://github.com/taskforcesh/bullmq/commit/816376e7880ae0eafe85a1f9a5aef9fdfe3031a9)) -* **delayed:** notify workers a delayed job is closer in time fixes [#1505](https://github.com/taskforcesh/bullmq/issues/1505) ([6ced4d0](https://github.com/taskforcesh/bullmq/commit/6ced4d06c5c9c8342c9e4f7920a21826871eac1b)) -* **job:** better error message in moveToFailed ([4e9f5bb](https://github.com/taskforcesh/bullmq/commit/4e9f5bb90f87c66eca959ffc9b7a09e05908c2d9)) -* **moveToFinish:** always promote delayed jobs ([7610cc3](https://github.com/taskforcesh/bullmq/commit/7610cc37d4695a885043c251990e153d4ce4440f)) -* **moveToFinished:** revert move promoteDelayedJobs ([7d780db](https://github.com/taskforcesh/bullmq/commit/7d780dbc1d7728ab7b762a5578871b31f27ff80c)) ([`f87858c`](https://github.com/taskforcesh/bullmq/commit/f87858caa382b56e34cc8015ad1a2706f2bcda8e)) - -* chore(release): 3.1.2 [skip ci] - -## [3.1.2](https://github.com/taskforcesh/bullmq/compare/v3.1.1...v3.1.2) (2022-11-04) - -### Bug Fixes - -* **repeat:** allow easy migration from bullmq <3 to >=3 ([e17b886](https://github.com/taskforcesh/bullmq/commit/e17b886d3e2978e25f23f1a99b88562537a08576)) ([`be39c09`](https://github.com/taskforcesh/bullmq/commit/be39c090684ccf720bcc6adc3279d7bb1d0a5ed5)) - -* chore(release): 3.1.1 [skip ci] - -## [3.1.1](https://github.com/taskforcesh/bullmq/compare/v3.1.0...v3.1.1) (2022-11-03) - -### Bug Fixes - -* **change-delay:** remove delayed stream ([#1509](https://github.com/taskforcesh/bullmq/issues/1509)) ([6e4809e](https://github.com/taskforcesh/bullmq/commit/6e4809e5d8f7ef35bc0871d21bfcdcb0f1f316c6)) -* **worker:** restore dynamic concurrency change ([#1515](https://github.com/taskforcesh/bullmq/issues/1515)) ([fdac5c2](https://github.com/taskforcesh/bullmq/commit/fdac5c27607dfaaaad1c1256c47f2ae448efcd21)) ([`ad70396`](https://github.com/taskforcesh/bullmq/commit/ad7039625d3adb334f07bb015068d57982252615)) - -* chore(deps): update github/codeql-action digest to 18fe527 (#1499) ([`fca6640`](https://github.com/taskforcesh/bullmq/commit/fca66406f1890a268f1948b457eb4b9dbdc1f393)) - -* chore(release): 3.1.0 [skip ci] - -# [3.1.0](https://github.com/taskforcesh/bullmq/compare/v3.0.1...v3.1.0) (2022-11-02) - -### Features - -* **workers:** better error message for missing lock ([bf1d086](https://github.com/taskforcesh/bullmq/commit/bf1d0860c70bcc2b604d02ca47e5db64f962d71d)) ([`94c4862`](https://github.com/taskforcesh/bullmq/commit/94c4862fcb8de9676df20d3b002f8f13fddf658a)) - -* chore(release): 3.0.1 [skip ci] - -## [3.0.1](https://github.com/taskforcesh/bullmq/compare/v3.0.0...v3.0.1) (2022-11-02) - -### Bug Fixes - -* **move-to-delayed:** consider promoting delayed jobs ([#1493](https://github.com/taskforcesh/bullmq/issues/1493)) ([909da2b](https://github.com/taskforcesh/bullmq/commit/909da2bc2718a588379b3fdd9791bc8e51ad1dad)) -* **retry-job:** consider promoting delayed jobs ([#1508](https://github.com/taskforcesh/bullmq/issues/1508)) ([d0b3412](https://github.com/taskforcesh/bullmq/commit/d0b3412d222449c24ab36068a791d08ea19ed922)) ([`c3c565d`](https://github.com/taskforcesh/bullmq/commit/c3c565dad2d7267e3bb1aa2a4d540f0c826def1a)) - -* chore(deps): update actions/setup-node digest to 8c91899 (#1473) ([`89bad09`](https://github.com/taskforcesh/bullmq/commit/89bad097edf1692dba19eec938da82b6f2be7430)) - -* chore(release): 3.0.0 [skip ci] - -# [3.0.0](https://github.com/taskforcesh/bullmq/compare/v2.4.0...v3.0.0) (2022-10-25) - -### Bug Fixes - -* **backoff:** handle backoff strategy as function ([#1463](https://github.com/taskforcesh/bullmq/issues/1463)) ([3640269](https://github.com/taskforcesh/bullmq/commit/36402691a3c7fa500f07e2e11a28318099bdb909)) -* **repeat:** remove cron in favor of pattern option ([#1456](https://github.com/taskforcesh/bullmq/issues/1456)) ([3cc150e](https://github.com/taskforcesh/bullmq/commit/3cc150e32cb5971ad4ba6ff91246aaf75296c165)) - -### Features - -* add support for dynamic rate limiting ([2d51d2b](https://github.com/taskforcesh/bullmq/commit/2d51d2b33ef49059503e1bca7a582c71f6861ef4)) -* **rate-limit:** remove group key support and improve global rate limit ([81f780a](https://github.com/taskforcesh/bullmq/commit/81f780aeed81e670107d01d01265d407a30e2a62)) - -### BREAKING CHANGES - -* **rate-limit:** limit by group keys has been removed in favor -of a much simpler and efficent rate-limit implementation. -* **backoff:** object mapping is replaced by single function ([`a252282`](https://github.com/taskforcesh/bullmq/commit/a2522822210d200ff66576d3a71bf3cc7c1a7622)) - -* chore(release): 2.4.0 [skip ci] - -# [2.4.0](https://github.com/taskforcesh/bullmq/compare/v2.3.2...v2.4.0) (2022-10-24) - -### Features - -* **flows:** allow parent on root jobs in addBulk method ([#1488](https://github.com/taskforcesh/bullmq/issues/1488)) ref [#1480](https://github.com/taskforcesh/bullmq/issues/1480) ([92308e5](https://github.com/taskforcesh/bullmq/commit/92308e53acf14e0ce108d94ecd616633ac93e35d)) ([`65ce37a`](https://github.com/taskforcesh/bullmq/commit/65ce37ac10648e48e55a102eb0f59fce104fbcb9)) - -* chore(deps): update peaceiris/actions-gh-pages digest to de7ea6f (#1490) ([`6191040`](https://github.com/taskforcesh/bullmq/commit/61910409b9c9250cd371e805ead7f876127744a9)) - -* chore(deps): update github/codeql-action digest to cc7986c (#1482) ([`14ed954`](https://github.com/taskforcesh/bullmq/commit/14ed9545418b23a82921f98f94facd78b56f588c)) - -* chore(release): 2.3.2 [skip ci] - -## [2.3.2](https://github.com/taskforcesh/bullmq/compare/v2.3.1...v2.3.2) (2022-10-18) - -### Bug Fixes - -* **job:** send failed event when failParentOnFailure ([#1481](https://github.com/taskforcesh/bullmq/issues/1481)) fixes [#1469](https://github.com/taskforcesh/bullmq/issues/1469) ([b20eb6f](https://github.com/taskforcesh/bullmq/commit/b20eb6f65c7e2c4593d5f9f4d4b940f780bf26d2)) ([`583bde4`](https://github.com/taskforcesh/bullmq/commit/583bde47ff0fa9366db968eca35e30b2fe89f4ad)) - -* chore(release): 2.3.1 [skip ci] - -## [2.3.1](https://github.com/taskforcesh/bullmq/compare/v2.3.0...v2.3.1) (2022-10-13) - -### Bug Fixes - -* **redis:** replace throw exception by console.error ([fafa2f8](https://github.com/taskforcesh/bullmq/commit/fafa2f89e796796f950e6c4abbdda4d3d71ad1b0)) ([`0fb2964`](https://github.com/taskforcesh/bullmq/commit/0fb2964151166f2aece0270c54c8cb4f4e2eb898)) - -* chore(release): 2.3.0 [skip ci] - -# [2.3.0](https://github.com/taskforcesh/bullmq/compare/v2.2.1...v2.3.0) (2022-10-13) - -### Features - -* **redis-connection:** allow providing scripts for extension ([#1472](https://github.com/taskforcesh/bullmq/issues/1472)) ([f193cfb](https://github.com/taskforcesh/bullmq/commit/f193cfb1830e127f9fd47a969baad30011a0e3a4)) ([`005539f`](https://github.com/taskforcesh/bullmq/commit/005539f2c34eff7ee92aeba1b34801fc69a05018)) - -* chore(release): 2.2.1 [skip ci] - -## [2.2.1](https://github.com/taskforcesh/bullmq/compare/v2.2.0...v2.2.1) (2022-10-11) - -### Performance Improvements - -* **scripts:** pre-build scripts ([#1441](https://github.com/taskforcesh/bullmq/issues/1441)) ([7f72603](https://github.com/taskforcesh/bullmq/commit/7f72603d463f705d0617898cb221f832c49a4aa3)) ([`547a20f`](https://github.com/taskforcesh/bullmq/commit/547a20f652960472500940c71363fe65b111737e)) - -* chore(deps): lock file maintenance (#1457) ([`c2bdeef`](https://github.com/taskforcesh/bullmq/commit/c2bdeefab4a1cae920e38bed25dd47238e6163de)) - -* chore(release): 2.2.0 [skip ci] - -# [2.2.0](https://github.com/taskforcesh/bullmq/compare/v2.1.3...v2.2.0) (2022-10-10) - -### Bug Fixes - -* **connection:** validate array of strings in Cluster ([#1468](https://github.com/taskforcesh/bullmq/issues/1468)) fixes [#1467](https://github.com/taskforcesh/bullmq/issues/1467) ([8355182](https://github.com/taskforcesh/bullmq/commit/8355182a372b68ec62e9c3953bacbd69e0abfc74)) - -### Features - -* **flow-producer:** allow parent opts in root job when adding a flow ([#1110](https://github.com/taskforcesh/bullmq/issues/1110)) ref [#1097](https://github.com/taskforcesh/bullmq/issues/1097) ([3c3ac71](https://github.com/taskforcesh/bullmq/commit/3c3ac718ad84f6bd0cc1575013c948e767b46f38)) ([`68f5b6f`](https://github.com/taskforcesh/bullmq/commit/68f5b6fedb1012926bd121df8ee62ddd32285b08)) - -* chore(deps): update github/codeql-action digest to 8075783 (#1465) ([`b85c24d`](https://github.com/taskforcesh/bullmq/commit/b85c24d95750e912a1c1a1e1826e8abb6ff49de8)) - -* chore(deps): update github/codeql-action digest to e0e5ded (#1398) ([`6ec5dab`](https://github.com/taskforcesh/bullmq/commit/6ec5dab961b25cc1103010004880a198cf240cb3)) - -* chore(release): 2.1.3 [skip ci] - -## [2.1.3](https://github.com/taskforcesh/bullmq/compare/v2.1.2...v2.1.3) (2022-09-30) - -### Bug Fixes - -* **worker:** clear stalled jobs timer when closing worker ([1567a0d](https://github.com/taskforcesh/bullmq/commit/1567a0df0ca3c8d43a18990fe488888f4ff68040)) ([`ad3889c`](https://github.com/taskforcesh/bullmq/commit/ad3889c674da4eb8e772c47b7841d1c65fecb65e)) - -* chore(release): 2.1.2 [skip ci] - -## [2.1.2](https://github.com/taskforcesh/bullmq/compare/v2.1.1...v2.1.2) (2022-09-29) - -### Bug Fixes - -* **getters:** fix return type of getJobLogs ([d452927](https://github.com/taskforcesh/bullmq/commit/d4529278c59b2c94eee604c7d4455acc490679e9)) ([`18d91d1`](https://github.com/taskforcesh/bullmq/commit/18d91d1786955bae0921577dbd93a2bdbe6e4e68)) - -* chore(deps): lock file maintenance (#1445) ([`0cd64a6`](https://github.com/taskforcesh/bullmq/commit/0cd64a673679f7b532fb2adb85c0364713bc6908)) - -* chore(release): 2.1.1 [skip ci] - -## [2.1.1](https://github.com/taskforcesh/bullmq/compare/v2.1.0...v2.1.1) (2022-09-28) - -### Bug Fixes - -* **sandbox:** get open port using built-in module instead of get-port ([#1446](https://github.com/taskforcesh/bullmq/issues/1446)) ([6db6288](https://github.com/taskforcesh/bullmq/commit/6db628868a9d64c5a3e47d1c9201017e6d05c1ae)) ([`4eb5a9a`](https://github.com/taskforcesh/bullmq/commit/4eb5a9a5c9cf9bf19de60cbef2ff90fde5a11a03)) - -* chore(release): 2.1.0 [skip ci] - -# [2.1.0](https://github.com/taskforcesh/bullmq/compare/v2.0.2...v2.1.0) (2022-09-23) - -### Features - -* **job-options:** add failParentOnFailure option ([#1339](https://github.com/taskforcesh/bullmq/issues/1339)) ([65e5c36](https://github.com/taskforcesh/bullmq/commit/65e5c3678771f26555c9128bdb908dd62e3584f9)) ([`af1a066`](https://github.com/taskforcesh/bullmq/commit/af1a0664168a183250b56759cfb19b58be672b62)) - -* chore(release): 2.0.2 [skip ci] - -## [2.0.2](https://github.com/taskforcesh/bullmq/compare/v2.0.1...v2.0.2) (2022-09-22) - -### Bug Fixes - -* **job:** update delay value when moving to wait ([#1436](https://github.com/taskforcesh/bullmq/issues/1436)) ([9560915](https://github.com/taskforcesh/bullmq/commit/95609158c1800cf661f22ad7995541fb9474826a)) ([`2eeb081`](https://github.com/taskforcesh/bullmq/commit/2eeb0812c007fd67adc6f54be7fe94d47ea06219)) - -* chore(release): 2.0.1 [skip ci] - -## [2.0.1](https://github.com/taskforcesh/bullmq/compare/v2.0.0...v2.0.1) (2022-09-21) - -### Bug Fixes - -* **connection:** throw error when no noeviction policy ([3468390](https://github.com/taskforcesh/bullmq/commit/3468390dd6331291f4cf71a54c32028a06d1d99e)) - -### Performance Improvements - -* **events:** remove data and opts from added event ([e13d4b8](https://github.com/taskforcesh/bullmq/commit/e13d4b8e0c4f99203f4249ccc86e369d124ff483)) ([`0e26d88`](https://github.com/taskforcesh/bullmq/commit/0e26d88a6afee6becfa4f318a044f1177456b177)) - -* chore(release): 2.0.0 [skip ci] - -# [2.0.0](https://github.com/taskforcesh/bullmq/compare/v1.91.1...v2.0.0) (2022-09-21) - -### Bug Fixes - -* **compat:** remove Queue3 class ([#1421](https://github.com/taskforcesh/bullmq/issues/1421)) ([fc797f7](https://github.com/taskforcesh/bullmq/commit/fc797f7cd334c19a95cb1290ddb6611cd3417179)) -* **delayed:** promote delayed jobs instead of picking one by one ([1b938af](https://github.com/taskforcesh/bullmq/commit/1b938af75069d69772ddf2b03f95db7f53eada68)) -* **getters:** compensate for "mark" job id ([231b9aa](https://github.com/taskforcesh/bullmq/commit/231b9aa0f4781e4493d3ea272c33b27c0b7dc0ab)) -* **promote:** remove marker when promoting delayed job ([1aea0dc](https://github.com/taskforcesh/bullmq/commit/1aea0dcc5fb29086cef3d0c432c387d6f8261963)) -* **sandbox:** remove progress method ([b43267b](https://github.com/taskforcesh/bullmq/commit/b43267be50f9eade8233500d189d46940a01cc29)) -* **stalled-jobs:** handle job id 0 ([829e6e0](https://github.com/taskforcesh/bullmq/commit/829e6e0252e78bf2cbc55ab1d3bd153faa0cee4c)) -* **worker:** do not allow stalledInterval to be less than zero ([831ffc5](https://github.com/taskforcesh/bullmq/commit/831ffc520ccd3c6ea63af6b04ddddc9f7829c667)) -* **workers:** use connection closing to determine closing status ([fe1d173](https://github.com/taskforcesh/bullmq/commit/fe1d17321f1eb49bd872c52965392add22729941)) - -### Features - -* improve delayed jobs and remove QueueScheduler ([1f66e5a](https://github.com/taskforcesh/bullmq/commit/1f66e5a6c891d52e0671e58a685dbca511e45e7e)) -* move stalled jobs check and handling to Worker class from QueueScheduler ([13769cb](https://github.com/taskforcesh/bullmq/commit/13769cbe38ba22793cbc66e9706a6be28a7f1512)) - -### BREAKING CHANGES - -* **compat:** The compatibility class for Bullv3 is no longer available. -* The QueueScheduler class is removed since it is not necessary anymore. -Delayed jobs are now handled in a much simpler and -robust way, without the need of a separate process. -* failed and stalled events are now produced by the Worker class instead of by the QueueScheduler. ([`5f3c316`](https://github.com/taskforcesh/bullmq/commit/5f3c31609b60589ed9e78317bf212dd407fad55b)) - -* chore(release): 1.91.1 [skip ci] - -## [1.91.1](https://github.com/taskforcesh/bullmq/compare/v1.91.0...v1.91.1) (2022-09-18) - -### Bug Fixes - -* **drain:** consider empty active list ([#1412](https://github.com/taskforcesh/bullmq/issues/1412)) ([f919a50](https://github.com/taskforcesh/bullmq/commit/f919a50b2f4972dcb9ecd5848b0f7fd9a0e137ea)) ([`5f3338c`](https://github.com/taskforcesh/bullmq/commit/5f3338c1c125e08c3f2be86e51dc81ddce8daae5)) - -* chore(release): 1.91.0 [skip ci] - -# [1.91.0](https://github.com/taskforcesh/bullmq/compare/v1.90.2...v1.91.0) (2022-09-16) - -### Features - -* **sandbox:** support update method ([#1416](https://github.com/taskforcesh/bullmq/issues/1416)) ([606b75d](https://github.com/taskforcesh/bullmq/commit/606b75d53e12dfc109f01eda38736c07e829e9b7)) ([`ca33621`](https://github.com/taskforcesh/bullmq/commit/ca336213a0fdba07d9abbdae7fa42bc4c52fa8a1)) - -* chore(release): 1.90.2 [skip ci] - -## [1.90.2](https://github.com/taskforcesh/bullmq/compare/v1.90.1...v1.90.2) (2022-09-12) - -### Performance Improvements - -* **script-loader:** use cache to read script once ([#1410](https://github.com/taskforcesh/bullmq/issues/1410)) ([f956e93](https://github.com/taskforcesh/bullmq/commit/f956e937ae3488cdcd0e2eacbe3e096c8066ebd1)) ([`31c3297`](https://github.com/taskforcesh/bullmq/commit/31c3297592cf4fb550007e06cf8da8f99a4a2580)) - -* chore(release): 1.90.1 [skip ci] - -## [1.90.1](https://github.com/taskforcesh/bullmq/compare/v1.90.0...v1.90.1) (2022-09-02) - -### Performance Improvements - -* **add-job:** handle parent split on js ([#1397](https://github.com/taskforcesh/bullmq/issues/1397)) ([566f074](https://github.com/taskforcesh/bullmq/commit/566f0747110679e5b07e7642fef793744565fffe)) ([`632d9b6`](https://github.com/taskforcesh/bullmq/commit/632d9b6b94b1d0fc6082d519defc70c8329c7f3f)) - -* chore(release): 1.90.0 [skip ci] - -# [1.90.0](https://github.com/taskforcesh/bullmq/compare/v1.89.2...v1.90.0) (2022-08-30) - -### Features - -* **repeat:** allow passing a cron strategy ([#1248](https://github.com/taskforcesh/bullmq/issues/1248)) ref [#1245](https://github.com/taskforcesh/bullmq/issues/1245) ([7f0534f](https://github.com/taskforcesh/bullmq/commit/7f0534f72449ae14a7415fa17a2eb2a70136a8b0)) ([`0a18c0f`](https://github.com/taskforcesh/bullmq/commit/0a18c0f2f4368c5a716b7147556f545e340f7c12)) - -* chore(release): 1.89.2 [skip ci] - -## [1.89.2](https://github.com/taskforcesh/bullmq/compare/v1.89.1...v1.89.2) (2022-08-23) - -### Bug Fixes - -* **job:** update delay when changeDelay ([#1389](https://github.com/taskforcesh/bullmq/issues/1389)) fixes [#1160](https://github.com/taskforcesh/bullmq/issues/1160) ([d9b100d](https://github.com/taskforcesh/bullmq/commit/d9b100d04112c518ef2efbcf5586aa1226ccccab)) ([`9d2355a`](https://github.com/taskforcesh/bullmq/commit/9d2355a8f30838d4638f75568f9bb879ce4aac6d)) - -* chore(release): 1.89.1 [skip ci] - -## [1.89.1](https://github.com/taskforcesh/bullmq/compare/v1.89.0...v1.89.1) (2022-08-19) - -### Bug Fixes - -* revert "chore: allow esm imports through exports field" ([#1388](https://github.com/taskforcesh/bullmq/issues/1388)) ([8e51272](https://github.com/taskforcesh/bullmq/commit/8e512724b1e8145bceb0152b70a934decf6d6864)) ([`db9d1ad`](https://github.com/taskforcesh/bullmq/commit/db9d1ad98628c6023fa05f2f86c09a528405aee7)) - -* chore(release): 1.89.0 [skip ci] - -# [1.89.0](https://github.com/taskforcesh/bullmq/compare/v1.88.2...v1.89.0) (2022-08-18) - -### Features - -* **job:** expose delay in instance ([#1386](https://github.com/taskforcesh/bullmq/issues/1386)) ([d4d0d2e](https://github.com/taskforcesh/bullmq/commit/d4d0d2e737c7ceb5eb34a2c50d53bd1081e0ad4a)) ([`3ee4f5e`](https://github.com/taskforcesh/bullmq/commit/3ee4f5e0063077e40526b3d3315c2ca76e71657d)) - -* chore(release): 1.88.2 [skip ci] - -## [1.88.2](https://github.com/taskforcesh/bullmq/compare/v1.88.1...v1.88.2) (2022-08-18) - -### Bug Fixes - -* revert "feat(sandbox): experimental support ESM" ([#1384](https://github.com/taskforcesh/bullmq/issues/1384)) ([7d180eb](https://github.com/taskforcesh/bullmq/commit/7d180eb18daa41062dcbca72213bc9d9f40153db)) ([`77cfec5`](https://github.com/taskforcesh/bullmq/commit/77cfec58bc2096df7e945b9a811d1341a3f85d65)) - -* chore(release): 1.88.1 [skip ci] - -## [1.88.1](https://github.com/taskforcesh/bullmq/compare/v1.88.0...v1.88.1) (2022-08-17) - -### Bug Fixes - -* fix husky install ([edee918](https://github.com/taskforcesh/bullmq/commit/edee918e84ba895ed4ef63cabcc26b97d9c52d8d)) ([`d08566c`](https://github.com/taskforcesh/bullmq/commit/d08566c05dc6d036c689fd4164e15d20e1bfc74f)) - -* chore(release): 1.88.0 [skip ci] - -# [1.88.0](https://github.com/taskforcesh/bullmq/compare/v1.87.2...v1.88.0) (2022-08-17) - -### Bug Fixes - -* **clean:** consider priority when cleaning waiting jobs ([#1357](https://github.com/taskforcesh/bullmq/issues/1357)) ([ced5be1](https://github.com/taskforcesh/bullmq/commit/ced5be1c9531953baa9cf87d6bda3faa5863270d)) -* **parent-priority-check:** use tonumber on priority ([#1370](https://github.com/taskforcesh/bullmq/issues/1370)) ([e2043c6](https://github.com/taskforcesh/bullmq/commit/e2043c6f4b8ad5faea8c13edde76aea60612fec6)) - -### Features - -* **sandbox:** experimental support ESM ([ed0faff](https://github.com/taskforcesh/bullmq/commit/ed0faff3c67c436116eb625ffacb03e435caee3f)) ([`e30b0c9`](https://github.com/taskforcesh/bullmq/commit/e30b0c974d2fc2eedeb434afaf17a80cc2eab5bf)) - -* chore: disable husky in semantic release (#1377) ([`c3cbea5`](https://github.com/taskforcesh/bullmq/commit/c3cbea554a2b507a1551ed960c16568d14cc1642)) - -* chore: upgrade get-port without deprecating node12 (#1374) ([`c9bd025`](https://github.com/taskforcesh/bullmq/commit/c9bd02540e4577b39f819673b80d82a0bd854894)) - -* chore(compat): use some unused types properly (#1360) ([`1916516`](https://github.com/taskforcesh/bullmq/commit/19165160c6184757fb160aac38bb6f22c80188f8)) - -* chore(deps): add renovate.json ([`d8c3b0a`](https://github.com/taskforcesh/bullmq/commit/d8c3b0abe04248721c64c5dc3f4b26c47826db9f)) - -* chore(release): 1.87.2 [skip ci] - -## [1.87.2](https://github.com/taskforcesh/bullmq/compare/v1.87.1...v1.87.2) (2022-08-13) - -### Bug Fixes - -* **move-parent-to-wait:** emit waiting instead of active event ([#1356](https://github.com/taskforcesh/bullmq/issues/1356)) ([53578dd](https://github.com/taskforcesh/bullmq/commit/53578dd1cbe31b49361a833b1aca449486f3b925)) ([`19c0da8`](https://github.com/taskforcesh/bullmq/commit/19c0da8aa7cd2fe891364dc0cf1b6b26bd77adee)) - -* chore(release): 1.87.1 [skip ci] - -## [1.87.1](https://github.com/taskforcesh/bullmq/compare/v1.87.0...v1.87.1) (2022-08-09) - -### Bug Fixes - -* **job:** declare discarded as protected ([#1352](https://github.com/taskforcesh/bullmq/issues/1352)) ([870e01c](https://github.com/taskforcesh/bullmq/commit/870e01c4ab602c1e6e351cc369f3eac5f7afa083)) ([`380c56e`](https://github.com/taskforcesh/bullmq/commit/380c56e43bf59895ffc2ca0ed5a2ade79803a872)) - -* chore(release): 1.87.0 [skip ci] - -# [1.87.0](https://github.com/taskforcesh/bullmq/compare/v1.86.10...v1.87.0) (2022-08-05) - -### Features - -* **flow:** consider priority when parent is moved ([#1286](https://github.com/taskforcesh/bullmq/issues/1286)) ([d49760d](https://github.com/taskforcesh/bullmq/commit/d49760d09420c5fcc99ab06c8fe36168755fd397)) ([`d19a712`](https://github.com/taskforcesh/bullmq/commit/d19a71229b6ddaf8b44b9ad41152f052ff1aeadd)) - -* chore(scripts): generate raw scripts (#1209) ([`d07deb1`](https://github.com/taskforcesh/bullmq/commit/d07deb1cb16180fea6a31922a92c658dc5ebb868)) - -* chore(release): 1.86.10 [skip ci] - -## [1.86.10](https://github.com/taskforcesh/bullmq/compare/v1.86.9...v1.86.10) (2022-07-29) - -### Performance Improvements - -* **clean-jobs-in-set:** use ZRANGEBYSCORE when limit > 0 ([#1338](https://github.com/taskforcesh/bullmq/issues/1338)) ([f0d9985](https://github.com/taskforcesh/bullmq/commit/f0d998541f03778ca2a092080a19e6bf7b7d0af1)) ([`7251dd7`](https://github.com/taskforcesh/bullmq/commit/7251dd7259ab0d2e1c6343e3fc491ad41195816f)) - -* chore(release): 1.86.9 [skip ci] - -## [1.86.9](https://github.com/taskforcesh/bullmq/compare/v1.86.8...v1.86.9) (2022-07-27) - -### Bug Fixes - -* **get-flow:** consider groupKey ([#1336](https://github.com/taskforcesh/bullmq/issues/1336)) fixes [#1334](https://github.com/taskforcesh/bullmq/issues/1334) ([9f31272](https://github.com/taskforcesh/bullmq/commit/9f31272fa8b3f5b8ab26f15e21bd80537c5baef0)) ([`9c14458`](https://github.com/taskforcesh/bullmq/commit/9c14458ca130171c38af82d2d0bd51b8779f21cc)) - -* chore(release): 1.86.8 [skip ci] - -## [1.86.8](https://github.com/taskforcesh/bullmq/compare/v1.86.7...v1.86.8) (2022-07-26) - -### Bug Fixes - -* **promote:** consider empty queue when paused ([#1335](https://github.com/taskforcesh/bullmq/issues/1335)) ([9f742e8](https://github.com/taskforcesh/bullmq/commit/9f742e88d6338ce9ac7e0413bdac411ab6cf675c)) ([`19b34bd`](https://github.com/taskforcesh/bullmq/commit/19b34bd3005e0dc21a6a181ac6771142bf8454eb)) - -* chore(release): 1.86.7 [skip ci] - -## [1.86.7](https://github.com/taskforcesh/bullmq/compare/v1.86.6...v1.86.7) (2022-07-15) - -### Bug Fixes - -* **sandboxed-process:** consider UnrecoverableError ([#1320](https://github.com/taskforcesh/bullmq/issues/1320)) fixes [#1317](https://github.com/taskforcesh/bullmq/issues/1317) ([c1269cc](https://github.com/taskforcesh/bullmq/commit/c1269cc772c6cec84d82ff790b9a7c9cc4242dcb)) ([`306543a`](https://github.com/taskforcesh/bullmq/commit/306543a7e055c22faa6c34c1bb7190060691458f)) - -* chore(release): 1.86.6 [skip ci] - -## [1.86.6](https://github.com/taskforcesh/bullmq/compare/v1.86.5...v1.86.6) (2022-07-14) - -### Bug Fixes - -* **retry-jobs:** consider paused queue ([#1321](https://github.com/taskforcesh/bullmq/issues/1321)) ([3e9703d](https://github.com/taskforcesh/bullmq/commit/3e9703d17fc9dc601d5d77e999f3e9a137f20843)) ([`970bb87`](https://github.com/taskforcesh/bullmq/commit/970bb87eff67fce0fb4d37609182ad47d3e9309e)) - -* chore(deps-dev): bump moment from 2.29.2 to 2.29.4 (#1315) ([`e50bd88`](https://github.com/taskforcesh/bullmq/commit/e50bd884707777d60f039e223572cdfb8be11c0d)) - -* chore(release): 1.86.5 [skip ci] - -## [1.86.5](https://github.com/taskforcesh/bullmq/compare/v1.86.4...v1.86.5) (2022-07-09) - -### Bug Fixes - -* **retry-job:** consider paused queue ([#1314](https://github.com/taskforcesh/bullmq/issues/1314)) ([907ae1d](https://github.com/taskforcesh/bullmq/commit/907ae1d7e3504f31c625ec8a09e32785f08357ff)) ([`4c182df`](https://github.com/taskforcesh/bullmq/commit/4c182df13c2223b2d6615506844999c474adf1bd)) - -* chore(release): 1.86.4 [skip ci] - -## [1.86.4](https://github.com/taskforcesh/bullmq/compare/v1.86.3...v1.86.4) (2022-06-29) - -### Bug Fixes - -* **parent:** emit waiting event when no pending children ([#1296](https://github.com/taskforcesh/bullmq/issues/1296)) ([aa8fa3f](https://github.com/taskforcesh/bullmq/commit/aa8fa3f8cd5ab6d7d309d87ae45c558249b1c29c)) ([`868bb00`](https://github.com/taskforcesh/bullmq/commit/868bb00213626fdfa3c8594c8f8dfea9b47cd7b1)) - -* chore(release): 1.86.3 [skip ci] - -## [1.86.3](https://github.com/taskforcesh/bullmq/compare/v1.86.2...v1.86.3) (2022-06-26) - -### Bug Fixes - -* avoid calling delay() if queue is being closed ([#1295](https://github.com/taskforcesh/bullmq/issues/1295)) ([52a5045](https://github.com/taskforcesh/bullmq/commit/52a5045b903ed6e0e73dd747748787a6389f12f7)) ([`9dc1420`](https://github.com/taskforcesh/bullmq/commit/9dc1420f08e094df821085412e55a4e0dbac36ec)) - -* chore(release): 1.86.2 [skip ci] - -## [1.86.2](https://github.com/taskforcesh/bullmq/compare/v1.86.1...v1.86.2) (2022-06-16) - -### Bug Fixes - -* **queue:** get rid of repeat options from defaultJobOptions ([#1284](https://github.com/taskforcesh/bullmq/issues/1284)) ([cdd2a20](https://github.com/taskforcesh/bullmq/commit/cdd2a20c2c4ca47042ecd1da525ecb72941e4910)) ([`88095f6`](https://github.com/taskforcesh/bullmq/commit/88095f6261ca57cf13eba5582cb71d7b69ab2339)) - -* chore(release): 1.86.1 [skip ci] - -## [1.86.1](https://github.com/taskforcesh/bullmq/compare/v1.86.0...v1.86.1) (2022-06-12) - -### Bug Fixes - -* unpack empty metrics in batches ([96829db](https://github.com/taskforcesh/bullmq/commit/96829db839fad4489415f7dbb047abdca5566e78)) ([`1769ce1`](https://github.com/taskforcesh/bullmq/commit/1769ce15d907269c34be1b26671ab5e71fae43d1)) - -* chore(release): 1.86.0 [skip ci] - -# [1.86.0](https://github.com/taskforcesh/bullmq/compare/v1.85.4...v1.86.0) (2022-06-10) - -### Features - -* **repeat:** save repeatJobKey reference ([#1214](https://github.com/taskforcesh/bullmq/issues/1214)) ([4d5a8e3](https://github.com/taskforcesh/bullmq/commit/4d5a8e33b614cf099369c18298e5b2963b434b1b)) ([`363f6c0`](https://github.com/taskforcesh/bullmq/commit/363f6c05f0ca64db9fc7a028b57b9a301a9a8808)) - -* chore(release): 1.85.4 [skip ci] - -## [1.85.4](https://github.com/taskforcesh/bullmq/compare/v1.85.3...v1.85.4) (2022-06-08) - -### Bug Fixes - -* **error-prototype:** define custom name for toJSON method ([#1272](https://github.com/taskforcesh/bullmq/issues/1272)) ([66d80da](https://github.com/taskforcesh/bullmq/commit/66d80da4a6043755c7d296addb31857816ea4da3)) ([`9dbec4a`](https://github.com/taskforcesh/bullmq/commit/9dbec4a7329f650931abd198940b5a8c926fd6c1)) - -* chore(deps): bump semver-regex from 3.1.3 to 3.1.4 (#1269) ([`90592a2`](https://github.com/taskforcesh/bullmq/commit/90592a2f2b123fd2565ffc679a0efeaff83bde0d)) - -* chore(release): 1.85.3 [skip ci] - -## [1.85.3](https://github.com/taskforcesh/bullmq/compare/v1.85.2...v1.85.3) (2022-06-03) - -### Bug Fixes - -* **queue:** fix addBulk signature ResultType ([#1268](https://github.com/taskforcesh/bullmq/issues/1268)) ([f6770cc](https://github.com/taskforcesh/bullmq/commit/f6770cc383b68bf7b2fa655cd9eda713a06835aa)) ([`7ad899b`](https://github.com/taskforcesh/bullmq/commit/7ad899b55d35cc911afbbdd67b68bd06b001e39c)) - -* chore(release): 1.85.2 [skip ci] - -## [1.85.2](https://github.com/taskforcesh/bullmq/compare/v1.85.1...v1.85.2) (2022-06-01) - -### Bug Fixes - -* **job:** save finishedOn attribute on instance ([#1267](https://github.com/taskforcesh/bullmq/issues/1267)) ([4cf6a63](https://github.com/taskforcesh/bullmq/commit/4cf6a63d197e6095841bb87cef297a9533ac79c3)) ([`137cd8e`](https://github.com/taskforcesh/bullmq/commit/137cd8e755a255db1083424c47bad2c183a0b2cc)) - -* chore(release): 1.85.1 [skip ci] - -## [1.85.1](https://github.com/taskforcesh/bullmq/compare/v1.85.0...v1.85.1) (2022-05-31) - -### Performance Improvements - -* **remove-job:** send prefix key instead of jobKey ([#1252](https://github.com/taskforcesh/bullmq/issues/1252)) ([452856a](https://github.com/taskforcesh/bullmq/commit/452856a6c8c6e67ffda595c26c30988a15c1c1a4)) ([`d77bacc`](https://github.com/taskforcesh/bullmq/commit/d77baccd72ef904c415bf5d94b615d9d07770275)) - -* chore(release): 1.85.0 [skip ci] - -# [1.85.0](https://github.com/taskforcesh/bullmq/compare/v1.84.1...v1.85.0) (2022-05-30) - -### Features - -* **worker:** change the number of concurrent processes ([#1256](https://github.com/taskforcesh/bullmq/issues/1256)) ref [#22](https://github.com/taskforcesh/bullmq/issues/22) ([940dc8f](https://github.com/taskforcesh/bullmq/commit/940dc8f34d9a46dc9c8384661461bf0558e97600)) ([`9cfda3d`](https://github.com/taskforcesh/bullmq/commit/9cfda3d2dd640350d7b41f2449cd89318a237610)) - -* chore(release): 1.84.1 [skip ci] - -## [1.84.1](https://github.com/taskforcesh/bullmq/compare/v1.84.0...v1.84.1) (2022-05-27) - -### Bug Fixes - -* **waiting-children:** pass right timestamp value in moveToWaitingChildren ([#1260](https://github.com/taskforcesh/bullmq/issues/1260)) ([0f993f7](https://github.com/taskforcesh/bullmq/commit/0f993f71ed481b02a3f859a2109177352336cb9a)) ([`5d68aef`](https://github.com/taskforcesh/bullmq/commit/5d68aef2715d2ba474893bd343a34753f1e0eccb)) - -* chore(release): 1.84.0 [skip ci] - -# [1.84.0](https://github.com/taskforcesh/bullmq/compare/v1.83.2...v1.84.0) (2022-05-26) - -### Features - -* **flow-producer:** add event listener types ([#1257](https://github.com/taskforcesh/bullmq/issues/1257)) ([19ed099](https://github.com/taskforcesh/bullmq/commit/19ed099905cbb4f071370b2b6d67d9a378e3a8f8)) ([`0dac923`](https://github.com/taskforcesh/bullmq/commit/0dac92327328838730cdee8ca33918611e05d5d9)) - -* chore(release): 1.83.2 [skip ci] - -## [1.83.2](https://github.com/taskforcesh/bullmq/compare/v1.83.1...v1.83.2) (2022-05-24) - -### Bug Fixes - -* **close:** emit ioredis:close event instead of error ([#1251](https://github.com/taskforcesh/bullmq/issues/1251)) fixes [#1231](https://github.com/taskforcesh/bullmq/issues/1231) ([74c1c38](https://github.com/taskforcesh/bullmq/commit/74c1c38f7ff468da1adc63aff160e31940d682a9)) ([`eb38636`](https://github.com/taskforcesh/bullmq/commit/eb38636346b5b679f6967671fbb3ca84fda68fd8)) - -* chore(release): 1.83.1 [skip ci] - -## [1.83.1](https://github.com/taskforcesh/bullmq/compare/v1.83.0...v1.83.1) (2022-05-24) - -### Bug Fixes - -* **get-workers:** use blockingConnection client to set clientName ([#1255](https://github.com/taskforcesh/bullmq/issues/1255)) fixes [#1254](https://github.com/taskforcesh/bullmq/issues/1254) ([df796bd](https://github.com/taskforcesh/bullmq/commit/df796bd0c085aff72cef001395809b3f1a8045e4)) ([`41cc7f1`](https://github.com/taskforcesh/bullmq/commit/41cc7f1cade5410664873ffacb8569f37f6a409f)) - -* chore(release): 1.83.0 [skip ci] - -# [1.83.0](https://github.com/taskforcesh/bullmq/compare/v1.82.3...v1.83.0) (2022-05-20) - -### Features - -* **flow-producer:** easier to build extension ([#1250](https://github.com/taskforcesh/bullmq/issues/1250)) ([aaf637e](https://github.com/taskforcesh/bullmq/commit/aaf637e74b9610651fd9e4efc5ff349971b7bb26)) ([`44ee7cf`](https://github.com/taskforcesh/bullmq/commit/44ee7cff2e3570acda6ded8836fca91a11db3d15)) - -* chore(release): 1.82.3 [skip ci] - -## [1.82.3](https://github.com/taskforcesh/bullmq/compare/v1.82.2...v1.82.3) (2022-05-19) - -### Bug Fixes - -* **redis-connection:** save cluster opts and coerse redis version ([#1247](https://github.com/taskforcesh/bullmq/issues/1247)) ref [#1246](https://github.com/taskforcesh/bullmq/issues/1246) fixes [#1243](https://github.com/taskforcesh/bullmq/issues/1243) ([acb69b5](https://github.com/taskforcesh/bullmq/commit/acb69b57d7a6417b8ca9fe1576a94d16e41f12d7)) ([`cd8ffa4`](https://github.com/taskforcesh/bullmq/commit/cd8ffa4958bba16b389114c8c37c847f8a6cf17a)) - -* chore(release): 1.82.2 [skip ci] - -## [1.82.2](https://github.com/taskforcesh/bullmq/compare/v1.82.1...v1.82.2) (2022-05-17) - -### Bug Fixes - -* **job:** add job helper attribute for extension ([#1242](https://github.com/taskforcesh/bullmq/issues/1242)) ([4d7ae9e](https://github.com/taskforcesh/bullmq/commit/4d7ae9e3fda23650e802ebac6b33ff3350f116f6)) ([`5d77e15`](https://github.com/taskforcesh/bullmq/commit/5d77e15a498e9d25349beabe55b4fa8e025f9c6d)) - -* chore(release): 1.82.1 [skip ci] - -## [1.82.1](https://github.com/taskforcesh/bullmq/compare/v1.82.0...v1.82.1) (2022-05-16) - -### Bug Fixes - -* **remove-job:** pass right prev param in removed event ([#1237](https://github.com/taskforcesh/bullmq/issues/1237)) ([54df47e](https://github.com/taskforcesh/bullmq/commit/54df47edf715a0a2a42687bf827e0a62c03951a5)) ([`547a853`](https://github.com/taskforcesh/bullmq/commit/547a85368ffedab4f642dea70813945050e53cf4)) - -* chore(release): 1.82.0 [skip ci] - -# [1.82.0](https://github.com/taskforcesh/bullmq/compare/v1.81.4...v1.82.0) (2022-05-11) - -### Features - -* **remove-repeatable:** return boolean depending on job existence ([#1239](https://github.com/taskforcesh/bullmq/issues/1239)) ref [#1235](https://github.com/taskforcesh/bullmq/issues/1235) ([59b0da7](https://github.com/taskforcesh/bullmq/commit/59b0da7d0e979e4f9e8a5b042acbdce433790611)) ([`a0b179c`](https://github.com/taskforcesh/bullmq/commit/a0b179cba0349f166dc20f2bac28e1ea7f715592)) - -* chore(release): 1.81.4 [skip ci] - -## [1.81.4](https://github.com/taskforcesh/bullmq/compare/v1.81.3...v1.81.4) (2022-05-05) - -### Bug Fixes - -* **repeatable:** emit removed event when removing ([#1229](https://github.com/taskforcesh/bullmq/issues/1229)) ([7d2de8d](https://github.com/taskforcesh/bullmq/commit/7d2de8d075e5ee7774501429c5177b729c430c20)) ([`7edc886`](https://github.com/taskforcesh/bullmq/commit/7edc886fd2bc7ec18640e30e9eabaf1ea0ef6493)) - -* chore(release): 1.81.3 [skip ci] - -## [1.81.3](https://github.com/taskforcesh/bullmq/compare/v1.81.2...v1.81.3) (2022-05-04) - -### Bug Fixes - -* **remove-parent:** check removed record from waiting-children ([#1227](https://github.com/taskforcesh/bullmq/issues/1227)) ([e7b25d0](https://github.com/taskforcesh/bullmq/commit/e7b25d00acb860ee3df36c6214a7162b2cf79635)) ([`6cc16d6`](https://github.com/taskforcesh/bullmq/commit/6cc16d66fe5afd79ca9d2e3af9a135c8f47ca758)) - -* chore(release): 1.81.2 [skip ci] - -## [1.81.2](https://github.com/taskforcesh/bullmq/compare/v1.81.1...v1.81.2) (2022-05-03) - -### Bug Fixes - -* **stalled:** consider removeOnFail when failing jobs ([#1225](https://github.com/taskforcesh/bullmq/issues/1225)) fixes [#1171](https://github.com/taskforcesh/bullmq/issues/1171) ([38486cb](https://github.com/taskforcesh/bullmq/commit/38486cb4d7cbfc78bd64d71f19d8bfbc908f3fc7)) ([`c175c13`](https://github.com/taskforcesh/bullmq/commit/c175c13c25f32987d65f2195fca6bba1840ed5c7)) - -* chore(release): 1.81.1 [skip ci] - -## [1.81.1](https://github.com/taskforcesh/bullmq/compare/v1.81.0...v1.81.1) (2022-04-29) - -### Bug Fixes - -* **add-bulk:** use for loop and throw if error is present ([#1223](https://github.com/taskforcesh/bullmq/issues/1223)) fixes [#1222](https://github.com/taskforcesh/bullmq/issues/1222) ([564de4f](https://github.com/taskforcesh/bullmq/commit/564de4f907648f5a5667a845c5366f73cff1d384)) ([`22fae96`](https://github.com/taskforcesh/bullmq/commit/22fae96f2b03ace7b9d00390ef451c12ea14e3b4)) - -* chore(release): 1.81.0 [skip ci] - -# [1.81.0](https://github.com/taskforcesh/bullmq/compare/v1.80.6...v1.81.0) (2022-04-26) - -### Features - -* **move-to-delayed:** allow passing token ([#1213](https://github.com/taskforcesh/bullmq/issues/1213)) ([14f0e4a](https://github.com/taskforcesh/bullmq/commit/14f0e4a33d9ddfbaa1f86dbe7598e20a516a9d09)) ([`b01db23`](https://github.com/taskforcesh/bullmq/commit/b01db23ecf4947011d09870c5a2a7e76753cf3c4)) - -* chore(release): 1.80.6 [skip ci] - -## [1.80.6](https://github.com/taskforcesh/bullmq/compare/v1.80.5...v1.80.6) (2022-04-22) - -### Bug Fixes - -* **job:** delete token when moving to delayed ([#1208](https://github.com/taskforcesh/bullmq/issues/1208)) ([37acf41](https://github.com/taskforcesh/bullmq/commit/37acf4109d17090dfaef992267e48130d34f7187)) ([`86a1874`](https://github.com/taskforcesh/bullmq/commit/86a1874699bfe9bd9214344d6d4c451e148582b2)) - -* chore(release): 1.80.5 [skip ci] - -## [1.80.5](https://github.com/taskforcesh/bullmq/compare/v1.80.4...v1.80.5) (2022-04-21) - -### Bug Fixes - -* **queue-base:** emit close error when no closing ([#1203](https://github.com/taskforcesh/bullmq/issues/1203)) fixes [#1205](https://github.com/taskforcesh/bullmq/issues/1205) ([4d76582](https://github.com/taskforcesh/bullmq/commit/4d7658272af94b57a09486e1141b0e15a7bac3ba)) ([`6cd3a19`](https://github.com/taskforcesh/bullmq/commit/6cd3a19a68ee308ad2d8e1c79b34ffee55efdf30)) - -* chore(release): 1.80.4 [skip ci] - -## [1.80.4](https://github.com/taskforcesh/bullmq/compare/v1.80.3...v1.80.4) (2022-04-19) - -### Bug Fixes - -* **queue-scheduler:** apply isNotConnectionError ([#1189](https://github.com/taskforcesh/bullmq/issues/1189)) fixes [#1181](https://github.com/taskforcesh/bullmq/issues/1181) ([605d685](https://github.com/taskforcesh/bullmq/commit/605d68595d8fa1d9d47348a3fa9e0d7a4e28c706)) ([`d48fe2a`](https://github.com/taskforcesh/bullmq/commit/d48fe2a35b20cdbcd4d84861bc3fb607f64631b7)) - -* chore(release): 1.80.3 [skip ci] - -## [1.80.3](https://github.com/taskforcesh/bullmq/compare/v1.80.2...v1.80.3) (2022-04-15) - -### Bug Fixes - -* **cluster:** check correct Upstash host ([#1195](https://github.com/taskforcesh/bullmq/issues/1195)) fixes [#1193](https://github.com/taskforcesh/bullmq/issues/1193) ([69f2863](https://github.com/taskforcesh/bullmq/commit/69f28632408c741219c1ba49304d36f49cf5cb83)) ([`e347cdb`](https://github.com/taskforcesh/bullmq/commit/e347cdbabcb142060592e541f35aa94730196700)) - -* chore(release): 1.80.2 [skip ci] - -## [1.80.2](https://github.com/taskforcesh/bullmq/compare/v1.80.1...v1.80.2) (2022-04-15) - -### Bug Fixes - -* **job:** remove Error from Promise return in moveToWaitingChildren ([#1197](https://github.com/taskforcesh/bullmq/issues/1197)) ([180a8bf](https://github.com/taskforcesh/bullmq/commit/180a8bf8fb2fe62b9929765a6dfd084574c77936)) ([`d83842d`](https://github.com/taskforcesh/bullmq/commit/d83842dc346f9308f52cf7dfda5ad2fc050eef4e)) - -* chore(release): 1.80.1 [skip ci] - -## [1.80.1](https://github.com/taskforcesh/bullmq/compare/v1.80.0...v1.80.1) (2022-04-14) - -### Bug Fixes - -* **worker:** restore worker suffix to empty string ([#1194](https://github.com/taskforcesh/bullmq/issues/1194)) fixes [#1185](https://github.com/taskforcesh/bullmq/issues/1185) ([2666ea5](https://github.com/taskforcesh/bullmq/commit/2666ea5b8532645da24482cf01c5692da5f2ceda)) ([`3901472`](https://github.com/taskforcesh/bullmq/commit/3901472f30c090d8c26a34ccc1fb666193a91ca0)) - -* chore(release): 1.80.0 [skip ci] - -# [1.80.0](https://github.com/taskforcesh/bullmq/compare/v1.79.1...v1.80.0) (2022-04-12) - -### Features - -* **worker-listener:** use generics in events ([#1190](https://github.com/taskforcesh/bullmq/issues/1190)) ref [#1188](https://github.com/taskforcesh/bullmq/issues/1188) ([2821193](https://github.com/taskforcesh/bullmq/commit/28211937d9ed405330eede5ad7d4b0b817accf39)) ([`3ac9dd0`](https://github.com/taskforcesh/bullmq/commit/3ac9dd002f0dcedf83312708222c39041d23c2c0)) - -* chore(release): 1.79.1 [skip ci] - -## [1.79.1](https://github.com/taskforcesh/bullmq/compare/v1.79.0...v1.79.1) (2022-04-12) - -### Bug Fixes - -* **connection:** remove Queue reconnect overrides ([#1119](https://github.com/taskforcesh/bullmq/issues/1119)) ([83f1c79](https://github.com/taskforcesh/bullmq/commit/83f1c797b8a5272028c8d78d5ce464236e90909e)) ([`56ffa3c`](https://github.com/taskforcesh/bullmq/commit/56ffa3c918c1c642f0ffeae4952fc57cfbd13abd)) - -* chore(deps-dev): bump moment from 2.29.1 to 2.29.2 (#1184) ([`e27986e`](https://github.com/taskforcesh/bullmq/commit/e27986e06dc39c1ee983733deb8188fa78c797d1)) - -* chore(release): 1.79.0 [skip ci] - -# [1.79.0](https://github.com/taskforcesh/bullmq/compare/v1.78.2...v1.79.0) (2022-04-08) - -### Features - -* **queue-getters:** add getQueueEvents ([#1085](https://github.com/taskforcesh/bullmq/issues/1085)) ([f10a20a](https://github.com/taskforcesh/bullmq/commit/f10a20a90ab6dbf2d9f3f75ba99dacbdc797c329)) ([`cb46ff7`](https://github.com/taskforcesh/bullmq/commit/cb46ff78e1f22b7ae94e37adfcc91f2ed4041355)) - -* chore(redis-connection): coerce redis version to standard semver format ([`3828767`](https://github.com/taskforcesh/bullmq/commit/382876791c9d2a8cb8f3550f7c6eab97bb30d899)) - -* chore(release): 1.78.2 [skip ci] - -## [1.78.2](https://github.com/taskforcesh/bullmq/compare/v1.78.1...v1.78.2) (2022-03-31) - -### Bug Fixes - -* **clean:** consider processedOn and finishedOn attributes ([#1158](https://github.com/taskforcesh/bullmq/issues/1158)) ([8c3cb72](https://github.com/taskforcesh/bullmq/commit/8c3cb72235ec6123da389553f37433c2943e0f57)) ([`3c75df5`](https://github.com/taskforcesh/bullmq/commit/3c75df5c9bc8f7ba5db9638b0aaeefb00903105d)) - -* chore(release): 1.78.1 [skip ci] - -## [1.78.1](https://github.com/taskforcesh/bullmq/compare/v1.78.0...v1.78.1) (2022-03-24) - -### Bug Fixes - -* **queue:** close repeat connection when calling close ([#1154](https://github.com/taskforcesh/bullmq/issues/1154)) ([7d79616](https://github.com/taskforcesh/bullmq/commit/7d796167229048ec79660ca5d3ac8a7c85d125e7)) ([`04d0992`](https://github.com/taskforcesh/bullmq/commit/04d09929a8cd2a79d335e27f97543b62ca105191)) - -* chore(release): 1.78.0 [skip ci] - -# [1.78.0](https://github.com/taskforcesh/bullmq/compare/v1.77.3...v1.78.0) (2022-03-23) - -### Features - -* **cron-parser:** upgrades version to 4.2.1 ([#1149](https://github.com/taskforcesh/bullmq/issues/1149)) fixes [#1147](https://github.com/taskforcesh/bullmq/issues/1147) ([88a6c9c](https://github.com/taskforcesh/bullmq/commit/88a6c9c437172035173628842909f5170eb481f7)) ([`cc5c695`](https://github.com/taskforcesh/bullmq/commit/cc5c695b689df2e319c519aae316e4df2bf194b5)) - -* chore(release): 1.77.3 [skip ci] - -## [1.77.3](https://github.com/taskforcesh/bullmq/compare/v1.77.2...v1.77.3) (2022-03-22) - -### Bug Fixes - -* **async-send:** check proc.send type ([#1150](https://github.com/taskforcesh/bullmq/issues/1150)) ([4f44173](https://github.com/taskforcesh/bullmq/commit/4f44173f0a3cc54705ca9a7e1730aeff26ea1c5a)) ([`fd8742b`](https://github.com/taskforcesh/bullmq/commit/fd8742b1746443a670789b5dbf668e84425f5897)) - -* chore(release): 1.77.2 [skip ci] - -## [1.77.2](https://github.com/taskforcesh/bullmq/compare/v1.77.1...v1.77.2) (2022-03-20) - -### Bug Fixes - -* **trim-events:** consider maxLenEvents as 0 ([#1137](https://github.com/taskforcesh/bullmq/issues/1137)) ([bc58a49](https://github.com/taskforcesh/bullmq/commit/bc58a49fba1b6f4e3595a0371ecf8410000a9021)) - -### Performance Improvements - -* **clean:** speed up clean operation using deletion marker ([#1144](https://github.com/taskforcesh/bullmq/issues/1144)) ([5fb32ef](https://github.com/taskforcesh/bullmq/commit/5fb32ef2c60843d8d1f2cbc000aacf4df3388b7e)) ([`41ba863`](https://github.com/taskforcesh/bullmq/commit/41ba8631c76477a46af4a23cfad5365d78d77409)) - -* chore(release): 1.77.1 [skip ci] - -## [1.77.1](https://github.com/taskforcesh/bullmq/compare/v1.77.0...v1.77.1) (2022-03-17) - -### Bug Fixes - -* **flow:** remove processed children ([#1060](https://github.com/taskforcesh/bullmq/issues/1060)) fixes [#1056](https://github.com/taskforcesh/bullmq/issues/1056) ([6b54e86](https://github.com/taskforcesh/bullmq/commit/6b54e86c12f287a13da036f3ec7801b8656f0434)) ([`ed9dd80`](https://github.com/taskforcesh/bullmq/commit/ed9dd801533d714baacc64c469b8b94564a22b98)) - -* chore(release): 1.77.0 [skip ci] - -# [1.77.0](https://github.com/taskforcesh/bullmq/compare/v1.76.6...v1.77.0) (2022-03-16) - -### Features - -* allow QueueScheduler to be extended ([289beb8](https://github.com/taskforcesh/bullmq/commit/289beb87d2ef3e3dd7583159f7be2b5450f7de3c)) ([`a178ae4`](https://github.com/taskforcesh/bullmq/commit/a178ae4c2fa6d7ece5ebda79c11164be761968a5)) - -* chore(release): 1.76.6 [skip ci] - -## [1.76.6](https://github.com/taskforcesh/bullmq/compare/v1.76.5...v1.76.6) (2022-03-15) - -### Bug Fixes - -* **master:** do not export master file ([#1136](https://github.com/taskforcesh/bullmq/issues/1136)) fixes [#1125](https://github.com/taskforcesh/bullmq/issues/1125) ref [#1129](https://github.com/taskforcesh/bullmq/issues/1129) ([6aa2f96](https://github.com/taskforcesh/bullmq/commit/6aa2f9657b8787aa791ab5af7267a6d27d7d7869)) ([`96de7b4`](https://github.com/taskforcesh/bullmq/commit/96de7b43fd01a94b28991f9af24b4e6b2a6c0fc2)) - -* chore(release): 1.76.5 [skip ci] - -## [1.76.5](https://github.com/taskforcesh/bullmq/compare/v1.76.4...v1.76.5) (2022-03-15) - -### Bug Fixes - -* **queue:** sanitize job types in getJobs and getJobsCount ([#1113](https://github.com/taskforcesh/bullmq/issues/1113)) fixes [#1112](https://github.com/taskforcesh/bullmq/issues/1112) ([d452b29](https://github.com/taskforcesh/bullmq/commit/d452b29773cead153a73b8322adda3164fb610d8)) ([`0e74cfa`](https://github.com/taskforcesh/bullmq/commit/0e74cfac4efe7a2d62460ed8e646593f8b48a850)) - -* chore(release): 1.76.4 [skip ci] - -## [1.76.4](https://github.com/taskforcesh/bullmq/compare/v1.76.3...v1.76.4) (2022-03-13) - -### Performance Improvements - -* **move-to-finished:** avoid an extra roundtrip when using rate limit ([#1131](https://github.com/taskforcesh/bullmq/issues/1131)) ([1711547](https://github.com/taskforcesh/bullmq/commit/171154707bf5cbcb750ea9d2a9957128c1abc044)) ([`f713474`](https://github.com/taskforcesh/bullmq/commit/f71347415f4fd04c9a59a94a24ceac11ab320e01)) - -* chore(release): 1.76.3 [skip ci] - -## [1.76.3](https://github.com/taskforcesh/bullmq/compare/v1.76.2...v1.76.3) (2022-03-10) - -### Bug Fixes - -* **drained:** emit event only once when queue has drained the waiting list ([#1123](https://github.com/taskforcesh/bullmq/issues/1123)) fixes [#1121](https://github.com/taskforcesh/bullmq/issues/1121) ref [#1070](https://github.com/taskforcesh/bullmq/issues/1070) ([b89b4e8](https://github.com/taskforcesh/bullmq/commit/b89b4e8a83fe4c9349ac5a9c439fc07374ff1e63)) ([`e37f6f8`](https://github.com/taskforcesh/bullmq/commit/e37f6f8eed5589b69ed7a2ed27e951846fbfbb0c)) - -* chore(release): 1.76.2 [skip ci] - -## [1.76.2](https://github.com/taskforcesh/bullmq/compare/v1.76.1...v1.76.2) (2022-03-09) - -### Bug Fixes - -* **utils:** fix proc.send type ([#1122](https://github.com/taskforcesh/bullmq/issues/1122)) fixes [#1120](https://github.com/taskforcesh/bullmq/issues/1120) ([da23977](https://github.com/taskforcesh/bullmq/commit/da239774379825d9f0a51c118740bc0fefa568bd)) ([`88ac8e5`](https://github.com/taskforcesh/bullmq/commit/88ac8e551574bdd00cbd644aa1ea5bf75f03fa5e)) - -* chore(release): 1.76.1 [skip ci] - -## [1.76.1](https://github.com/taskforcesh/bullmq/compare/v1.76.0...v1.76.1) (2022-03-04) - -### Bug Fixes - -* **get-waiting-children-count:** consider waiting-children status only ([#1117](https://github.com/taskforcesh/bullmq/issues/1117)) ([1820df7](https://github.com/taskforcesh/bullmq/commit/1820df73c17ce119d2fdb0f526fc95f99845a5ec)) ([`485def0`](https://github.com/taskforcesh/bullmq/commit/485def0cbb9970e5b85775a549a132016ddef6f4)) - -* chore(release): 1.76.0 [skip ci] - -# [1.76.0](https://github.com/taskforcesh/bullmq/compare/v1.75.1...v1.76.0) (2022-03-02) - -### Features - -* **metrics:** add metrics support ([ab51326](https://github.com/taskforcesh/bullmq/commit/ab51326cf318b4b48e37a1a77f5609e405eecb45)) ([`359e4e5`](https://github.com/taskforcesh/bullmq/commit/359e4e54b633237ec01107e862c109e8712824dc)) - -* chore(release): 1.75.1 [skip ci] - -## [1.75.1](https://github.com/taskforcesh/bullmq/compare/v1.75.0...v1.75.1) (2022-02-26) - -### Bug Fixes - -* **rate-limiter:** move job to wait after retry when groupKey is missed ([#1103](https://github.com/taskforcesh/bullmq/issues/1103)) fixes [#1084](https://github.com/taskforcesh/bullmq/issues/1084) ([8aeab37](https://github.com/taskforcesh/bullmq/commit/8aeab37ac5a5c1c760be21bff2ba8752a485577c)) ([`779f6db`](https://github.com/taskforcesh/bullmq/commit/779f6db7b5b0da0324a187f4b735ec6762abc9ad)) - -* chore(release): 1.75.0 [skip ci] - -# [1.75.0](https://github.com/taskforcesh/bullmq/compare/v1.74.3...v1.75.0) (2022-02-24) - -### Bug Fixes - -* **cluster:** check for host presence in Upstash validation ([#1102](https://github.com/taskforcesh/bullmq/issues/1102)) fixes [#1101](https://github.com/taskforcesh/bullmq/issues/1101) ([54d4eac](https://github.com/taskforcesh/bullmq/commit/54d4eac52cfe13d4be99410932c0226c8d06d5d5)) - -### Features - -* **retry-jobs:** allow to retry completed jobs ([#1082](https://github.com/taskforcesh/bullmq/issues/1082)) ([e17b3f2](https://github.com/taskforcesh/bullmq/commit/e17b3f21606757a16630988a69c9607e8c843bd2)) ([`7f11b7d`](https://github.com/taskforcesh/bullmq/commit/7f11b7d741f32101e1dc895ca931647fe9d4c81f)) - -* chore(release): 1.74.3 [skip ci] - -## [1.74.3](https://github.com/taskforcesh/bullmq/compare/v1.74.2...v1.74.3) (2022-02-24) - -### Bug Fixes - -* **connection:** throw error when Upstash host is provided ([#1098](https://github.com/taskforcesh/bullmq/issues/1098)) fixes [#1087](https://github.com/taskforcesh/bullmq/issues/1087) ([5156d0a](https://github.com/taskforcesh/bullmq/commit/5156d0a4812d8c649a3b41bd98e3e0efb41d0491)) ([`df2fa62`](https://github.com/taskforcesh/bullmq/commit/df2fa62064c9bc1a21b9410e48042257e0a1c57b)) - -* chore(release): 1.74.2 [skip ci] - -## [1.74.2](https://github.com/taskforcesh/bullmq/compare/v1.74.1...v1.74.2) (2022-02-23) - -### Bug Fixes - -* **move-to-finished:** increment attemptsMade when moving job to active ([#1095](https://github.com/taskforcesh/bullmq/issues/1095)) fixes [#1094](https://github.com/taskforcesh/bullmq/issues/1094) ([321b0e1](https://github.com/taskforcesh/bullmq/commit/321b0e1d515d01c5b3f1ca9f404cd571e3f753b7)) ([`023cf74`](https://github.com/taskforcesh/bullmq/commit/023cf745e92c318b21251e4cedbedf3949c57abe)) - -* chore(release): 1.74.1 [skip ci] - -## [1.74.1](https://github.com/taskforcesh/bullmq/compare/v1.74.0...v1.74.1) (2022-02-20) - -### Bug Fixes - -* **flow:** respect defaultJobOptions from queue opts ([#1080](https://github.com/taskforcesh/bullmq/issues/1080)) fixes [#1034](https://github.com/taskforcesh/bullmq/issues/1034) ([0aca072](https://github.com/taskforcesh/bullmq/commit/0aca072f805302e660b6675fd4097ba893c91eb0)) ([`cf0710c`](https://github.com/taskforcesh/bullmq/commit/cf0710cfe322eb2147f439364b425763b4d5c592)) - -* chore(release): 1.74.0 [skip ci] - -# [1.74.0](https://github.com/taskforcesh/bullmq/compare/v1.73.0...v1.74.0) (2022-02-19) - -### Features - -* **retry-jobs:** pass timestamp as option ([#1054](https://github.com/taskforcesh/bullmq/issues/1054)) ([1522359](https://github.com/taskforcesh/bullmq/commit/15223590b235f749af9cb229fc784760d4b3add2)) ([`2bf08ef`](https://github.com/taskforcesh/bullmq/commit/2bf08efda8a938e86be2d09ae2dbbdd81b8181b7)) - -* chore(release): 1.73.0 [skip ci] - -# [1.73.0](https://github.com/taskforcesh/bullmq/compare/v1.72.0...v1.73.0) (2022-02-16) - -### Features - -* **job:** add prefix getter ([#1077](https://github.com/taskforcesh/bullmq/issues/1077)) ([db9ef10](https://github.com/taskforcesh/bullmq/commit/db9ef105a7a524d7502664d52bd9f9c7dfa9477f)) -* **queue-getters:** add getQueueSchedulers ([#1078](https://github.com/taskforcesh/bullmq/issues/1078)) ref [#1075](https://github.com/taskforcesh/bullmq/issues/1075) ([0b3b1c4](https://github.com/taskforcesh/bullmq/commit/0b3b1c4382de34bd68733d162c2fa2ba9417f79c)) ([`19845bd`](https://github.com/taskforcesh/bullmq/commit/19845bd017c3b508aeaa59a50abdf4df0e4dae0f)) - -* chore(release): 1.72.0 [skip ci] - -# [1.72.0](https://github.com/taskforcesh/bullmq/compare/v1.71.0...v1.72.0) (2022-02-15) - -### Features - -* **backoff:** validate UnrecoverableError presence ([#1074](https://github.com/taskforcesh/bullmq/issues/1074)) ([1defeac](https://github.com/taskforcesh/bullmq/commit/1defeac3f251a13aad57f3027d8eb8f857e40acb)) ([`efe9bb7`](https://github.com/taskforcesh/bullmq/commit/efe9bb7239d9554407e8d0cf40fe74cae83abea5)) - -* chore(release): 1.71.0 [skip ci] - -# [1.71.0](https://github.com/taskforcesh/bullmq/compare/v1.70.0...v1.71.0) (2022-02-14) - -### Features - -* **get-job-counts:** add default values ([#1068](https://github.com/taskforcesh/bullmq/issues/1068)) ([1c7f841](https://github.com/taskforcesh/bullmq/commit/1c7f841a52b3ea18fa7878f10986b362ccc6c4fe)) ([`cdb1de2`](https://github.com/taskforcesh/bullmq/commit/cdb1de2fca81df5b18fb3312d821bc1cdae19066)) - -* chore(release): 1.70.0 [skip ci] - -# [1.70.0](https://github.com/taskforcesh/bullmq/compare/v1.69.1...v1.70.0) (2022-02-11) - -### Features - -* **sandbox:** pass parent property ([#1065](https://github.com/taskforcesh/bullmq/issues/1065)) ([1fd33f6](https://github.com/taskforcesh/bullmq/commit/1fd33f6fd3a3af17753de8c4d48e14ef86c7409c)) ([`9cd593f`](https://github.com/taskforcesh/bullmq/commit/9cd593fefc5b08fa13de7d4119327db7202fdd4b)) - -* chore(release): 1.69.1 [skip ci] - -## [1.69.1](https://github.com/taskforcesh/bullmq/compare/v1.69.0...v1.69.1) (2022-02-10) - -### Bug Fixes - -* **move-to-finished:** validate lock first ([#1064](https://github.com/taskforcesh/bullmq/issues/1064)) ([9da1b29](https://github.com/taskforcesh/bullmq/commit/9da1b29486c6c6e2b097ec2f6107494a36525495)) ([`8216ce2`](https://github.com/taskforcesh/bullmq/commit/8216ce26c28e79307dc0c4eb3f79c0eb582260b8)) - -* chore(release): 1.69.0 [skip ci] - -# [1.69.0](https://github.com/taskforcesh/bullmq/compare/v1.68.4...v1.69.0) (2022-02-08) - -### Features - -* **job:** pass queueName into sandbox ([#1053](https://github.com/taskforcesh/bullmq/issues/1053)) fixes [#1050](https://github.com/taskforcesh/bullmq/issues/1050) ref [#1051](https://github.com/taskforcesh/bullmq/issues/1051) ([12bb19c](https://github.com/taskforcesh/bullmq/commit/12bb19c1586d8755b973a80be97f407630827d4f)) ([`64e01fb`](https://github.com/taskforcesh/bullmq/commit/64e01fbbe9e76c663477ef18e84a37dfd90e667a)) - -* chore(release): 1.68.4 [skip ci] - -## [1.68.4](https://github.com/taskforcesh/bullmq/compare/v1.68.3...v1.68.4) (2022-02-05) - -### Bug Fixes - -* **clean:** consider checking parent jobs when cleaning ([#1048](https://github.com/taskforcesh/bullmq/issues/1048)) ([0708a24](https://github.com/taskforcesh/bullmq/commit/0708a24c7f4cb6d1cda776ed983d3f20fc3261f1)) ([`8fc4b7e`](https://github.com/taskforcesh/bullmq/commit/8fc4b7e358d8188983eb7c4a714c57d80be2b9b4)) - -* chore(release): 1.68.3 [skip ci] - -## [1.68.3](https://github.com/taskforcesh/bullmq/compare/v1.68.2...v1.68.3) (2022-02-04) - -### Bug Fixes - -* **drain:** delete priority queueKey ([#1049](https://github.com/taskforcesh/bullmq/issues/1049)) ([2e6129a](https://github.com/taskforcesh/bullmq/commit/2e6129a4a08783eeafa2f0b69c10ac810f53d085)) ([`7685091`](https://github.com/taskforcesh/bullmq/commit/76850916ceb3c693b2c7e32549ccd9dde6d374d9)) - -* chore(release): 1.68.2 [skip ci] - -## [1.68.2](https://github.com/taskforcesh/bullmq/compare/v1.68.1...v1.68.2) (2022-02-03) - -### Performance Improvements - -* **remove-parent-dependency:** do not emit wait event in hard deletions ([#1045](https://github.com/taskforcesh/bullmq/issues/1045)) ([4069821](https://github.com/taskforcesh/bullmq/commit/40698218d13a880615f832a9926f0f057b1c33f9)) ([`dfc01bb`](https://github.com/taskforcesh/bullmq/commit/dfc01bb3bedbcc676ffa2f40381477c51b2fd956)) - -* chore(release): 1.68.1 [skip ci] - -## [1.68.1](https://github.com/taskforcesh/bullmq/compare/v1.68.0...v1.68.1) (2022-02-01) - -### Bug Fixes - -* **update:** throw error when missing job key ([#1042](https://github.com/taskforcesh/bullmq/issues/1042)) ([a00ae5c](https://github.com/taskforcesh/bullmq/commit/a00ae5c9b3f6d51cb0229adca29d13d932fc5601)) ([`2c2da6f`](https://github.com/taskforcesh/bullmq/commit/2c2da6ffa0744447f7cad9760cc0ff7f7d13c0e7)) - -* chore(release): 1.68.0 [skip ci] - -# [1.68.0](https://github.com/taskforcesh/bullmq/compare/v1.67.3...v1.68.0) (2022-01-29) - -### Features - -* **queue:** add retryJobs method for failed jobs ([#1024](https://github.com/taskforcesh/bullmq/issues/1024)) ([310a730](https://github.com/taskforcesh/bullmq/commit/310a730ed322501cc19cdd5cf5244bc8eee6fee2)) - -### Performance Improvements - -* **lua:** call del command with multiple keys ([#1035](https://github.com/taskforcesh/bullmq/issues/1035)) ([9cfaab8](https://github.com/taskforcesh/bullmq/commit/9cfaab8965d0c9f92460d31d6c3083839c36447f)) ([`317c095`](https://github.com/taskforcesh/bullmq/commit/317c0953043e3eb2242eb330d8e8e2071c131c37)) - -* chore(release): 1.67.3 [skip ci] - -## [1.67.3](https://github.com/taskforcesh/bullmq/compare/v1.67.2...v1.67.3) (2022-01-28) - -### Bug Fixes - -* **drain:** consider checking parent jobs when draining ([#992](https://github.com/taskforcesh/bullmq/issues/992)) ([81b7221](https://github.com/taskforcesh/bullmq/commit/81b72213a9ff31d6b297825391de77557598ebd1)) ([`e45a0f7`](https://github.com/taskforcesh/bullmq/commit/e45a0f7e18b28385022eaafd678fbe5edb82eb4f)) - -* chore(release): 1.67.2 [skip ci] - -## [1.67.2](https://github.com/taskforcesh/bullmq/compare/v1.67.1...v1.67.2) (2022-01-28) - -### Bug Fixes - -* **repeat:** consider immediately option with cron ([#1030](https://github.com/taskforcesh/bullmq/issues/1030)) fixes [#1020](https://github.com/taskforcesh/bullmq/issues/1020) ([b9e7488](https://github.com/taskforcesh/bullmq/commit/b9e748870385a88b2384df40f50df3144c11d7e0)) ([`e55ff35`](https://github.com/taskforcesh/bullmq/commit/e55ff358ca23bb4ea3d70bfb136feb27be3fe79c)) - -* chore(release): 1.67.1 [skip ci] - -## [1.67.1](https://github.com/taskforcesh/bullmq/compare/v1.67.0...v1.67.1) (2022-01-27) - -### Bug Fixes - -* **retry:** pass state in error message ([#1027](https://github.com/taskforcesh/bullmq/issues/1027)) ([c646a45](https://github.com/taskforcesh/bullmq/commit/c646a45377fdfaff340185d1f7bedceb80c214c2)) - -### Performance Improvements - -* **retry:** delete props in retryJob lua script ([#1016](https://github.com/taskforcesh/bullmq/issues/1016)) ([547cedd](https://github.com/taskforcesh/bullmq/commit/547cedd5ecd30c9a73d37e4053b9e518cb3fbe53)) ([`a440be9`](https://github.com/taskforcesh/bullmq/commit/a440be95518ebf037a5879decad282249e651180)) - -* chore(release): 1.67.0 [skip ci] - -# [1.67.0](https://github.com/taskforcesh/bullmq/compare/v1.66.1...v1.67.0) (2022-01-26) - -### Features - -* add support for removeOn based on time ([6c4ac75](https://github.com/taskforcesh/bullmq/commit/6c4ac75bb3ac239cc83ef6144d69c04b2bba1311)) ([`8c5fcea`](https://github.com/taskforcesh/bullmq/commit/8c5fcea765682e7d3d3e189a89217ed5d7838da8)) - -* chore(release): 1.66.1 [skip ci] - -## [1.66.1](https://github.com/taskforcesh/bullmq/compare/v1.66.0...v1.66.1) (2022-01-25) - -### Bug Fixes - -* **job:** increase attemptsMade when moving job to active ([#1009](https://github.com/taskforcesh/bullmq/issues/1009)) fixes [#1002](https://github.com/taskforcesh/bullmq/issues/1002) ([0974ae0](https://github.com/taskforcesh/bullmq/commit/0974ae0ff6db73c223be4b18fb2aab53b6a23c88)) ([`30a9bc6`](https://github.com/taskforcesh/bullmq/commit/30a9bc6c3b719c469396c80f14e8249d7e7ce85b)) - -* chore(deps): bump node-fetch from 2.6.1 to 2.6.7 (#1014) ([`07735a0`](https://github.com/taskforcesh/bullmq/commit/07735a01b090c435e3e9ed27a3c41957632545ba)) - -* chore(release): 1.66.0 [skip ci] - -# [1.66.0](https://github.com/taskforcesh/bullmq/compare/v1.65.1...v1.66.0) (2022-01-23) - -### Features - -* **queue-events:** add retries-exhausted event ([#1010](https://github.com/taskforcesh/bullmq/issues/1010)) ([e476f35](https://github.com/taskforcesh/bullmq/commit/e476f35f5c3f9b1baf2bbc3d46712b8ba597f73c)) ([`9945a03`](https://github.com/taskforcesh/bullmq/commit/9945a03b0b3673c1cf981573b2b8669f0e4026c5)) - -* chore(release): 1.65.1 [skip ci] - -## [1.65.1](https://github.com/taskforcesh/bullmq/compare/v1.65.0...v1.65.1) (2022-01-21) - -### Bug Fixes - -* dont loop through empty modules paths ([#1013](https://github.com/taskforcesh/bullmq/issues/1013)) fixes [#1012](https://github.com/taskforcesh/bullmq/issues/1012) ([86e84df](https://github.com/taskforcesh/bullmq/commit/86e84df933c2662380b00a11b5f4000f2618d218)) ([`3677295`](https://github.com/taskforcesh/bullmq/commit/36772957fcf865e8fd7dba92d594f8800c4b1e6f)) - -* chore(release): 1.65.0 [skip ci] - -# [1.65.0](https://github.com/taskforcesh/bullmq/compare/v1.64.4...v1.65.0) (2022-01-21) - -### Features - -* **queue:** add JobType and JobState unions for better typing ([#1011](https://github.com/taskforcesh/bullmq/issues/1011)) ([3b9b79d](https://github.com/taskforcesh/bullmq/commit/3b9b79dbdd754ab66c3948e7e16380f2d5513262)) ([`7f0245d`](https://github.com/taskforcesh/bullmq/commit/7f0245dce512e30e33559df219af3c227a6228e4)) - -* chore(deps): bump trim-off-newlines from 1.0.1 to 1.0.3 (#1008) ([`2dfb7ae`](https://github.com/taskforcesh/bullmq/commit/2dfb7aef39c0f7699a030298a377658bb9acda6b)) - -* chore(release): 1.64.4 [skip ci] - -## [1.64.4](https://github.com/taskforcesh/bullmq/compare/v1.64.3...v1.64.4) (2022-01-19) - -### Bug Fixes - -* **queue:** use 0 as initial value for getJobCountByTypes reducer ([#1005](https://github.com/taskforcesh/bullmq/issues/1005)) ([f0e23ef](https://github.com/taskforcesh/bullmq/commit/f0e23ef01b97d36c775db0bf8c9dd2f63f6cb194)) ([`43ea8c5`](https://github.com/taskforcesh/bullmq/commit/43ea8c5a6a1cff364c00e3a0a1bc9dae92ab469f)) - -* chore(release): 1.64.3 [skip ci] - -## [1.64.3](https://github.com/taskforcesh/bullmq/compare/v1.64.2...v1.64.3) (2022-01-17) - -### Bug Fixes - -* **worker:** blockTime must be integer on older Redis ([6fedc0a](https://github.com/taskforcesh/bullmq/commit/6fedc0a03bdb217ef0dbae60d49fccb0f2a5dbdb)) ([`70001de`](https://github.com/taskforcesh/bullmq/commit/70001de2c4c039bf9448a5cc25037f517fd25915)) - -* chore(release): 1.64.2 [skip ci] - -## [1.64.2](https://github.com/taskforcesh/bullmq/compare/v1.64.1...v1.64.2) (2022-01-14) - -### Bug Fixes - -* **remove-job:** consider removing parent dependency key in lua scripts ([#990](https://github.com/taskforcesh/bullmq/issues/990)) ([661abf0](https://github.com/taskforcesh/bullmq/commit/661abf0921e663c9ea2fa7d59c12da35950637dc)) ([`1791390`](https://github.com/taskforcesh/bullmq/commit/17913908c816cfa480a34a80bb13eb16db455168)) - -* chore(release): 1.64.1 [skip ci] - -## [1.64.1](https://github.com/taskforcesh/bullmq/compare/v1.64.0...v1.64.1) (2022-01-14) - -### Bug Fixes - -* **sandbox:** exit uncaughtException instead of throwing error ([013d6a5](https://github.com/taskforcesh/bullmq/commit/013d6a5ee0c70266ae740abfa596ca9e506de71b)) ([`aea20b4`](https://github.com/taskforcesh/bullmq/commit/aea20b48af275a2ab3fb9b3f3234af8ca4ce76bc)) - -* chore: update docker-compose config (#986) ([`21c5a51`](https://github.com/taskforcesh/bullmq/commit/21c5a51680527fea0845f87151bca34054ce29af)) - -* chore(release): 1.64.0 [skip ci] - -# [1.64.0](https://github.com/taskforcesh/bullmq/compare/v1.63.3...v1.64.0) (2022-01-07) - -### Features - -* **sanboxed-process:** support .cjs files ([#984](https://github.com/taskforcesh/bullmq/issues/984)) ([531e4de](https://github.com/taskforcesh/bullmq/commit/531e4de1525f2cf322e0b97f5537ed43276ff72b)) ([`b918676`](https://github.com/taskforcesh/bullmq/commit/b91867653564a97a5ced04f36dac1a4e1c96e21b)) - -* chore(release): 1.63.3 [skip ci] - -## [1.63.3](https://github.com/taskforcesh/bullmq/compare/v1.63.2...v1.63.3) (2022-01-06) - -### Bug Fixes - -* **job:** throw error when delay and repeat are provided together ([#983](https://github.com/taskforcesh/bullmq/issues/983)) ([07b0082](https://github.com/taskforcesh/bullmq/commit/07b008273ead9360fc43564fa9ff1a7503616ceb)) ([`282a402`](https://github.com/taskforcesh/bullmq/commit/282a4029bc9985056508f83deb5040b830dc3c82)) - -* chore(scripts): add generics in methods (#981) ([`8807b5e`](https://github.com/taskforcesh/bullmq/commit/8807b5eef1114dd866060b1f9571675fc3e1a36d)) - -* chore(release): 1.63.2 [skip ci] - -## [1.63.2](https://github.com/taskforcesh/bullmq/compare/v1.63.1...v1.63.2) (2022-01-04) - -### Bug Fixes - -* **queue:** add missing error event typing ([#979](https://github.com/taskforcesh/bullmq/issues/979)) ([afdaac6](https://github.com/taskforcesh/bullmq/commit/afdaac6b072c7af5973222cc7fb69f3f138f3b0b)) ([`1f3b1cb`](https://github.com/taskforcesh/bullmq/commit/1f3b1cb0fe1857a6cc4581611f8aeda371d04f2e)) - -* chore(release): 1.63.1 [skip ci] - -## [1.63.1](https://github.com/taskforcesh/bullmq/compare/v1.63.0...v1.63.1) (2022-01-04) - -### Bug Fixes - -* **update-progress:** throw error if job key is missing ([#978](https://github.com/taskforcesh/bullmq/issues/978)) ref [#977](https://github.com/taskforcesh/bullmq/issues/977) ([b03aaf1](https://github.com/taskforcesh/bullmq/commit/b03aaf10ca694745d143def2129f952b9bac18a6)) ([`1763af8`](https://github.com/taskforcesh/bullmq/commit/1763af8eb35fe5b48cbe1a6a1a066524edb59232)) - -* chore(release): 1.63.0 [skip ci] - -# [1.63.0](https://github.com/taskforcesh/bullmq/compare/v1.62.0...v1.63.0) (2021-12-31) - -### Features - -* **job:** use generic types for static methods ([#975](https://github.com/taskforcesh/bullmq/issues/975)) ([f78f4d0](https://github.com/taskforcesh/bullmq/commit/f78f4d0f75adb5c73558b3e8cf511db22f972791)) ([`4cfa4f9`](https://github.com/taskforcesh/bullmq/commit/4cfa4f9c0d97a29b89ab342a5f41de5e4e3ecbd2)) - -* chore(release): 1.62.0 [skip ci] - -# [1.62.0](https://github.com/taskforcesh/bullmq/compare/v1.61.0...v1.62.0) (2021-12-31) - -### Bug Fixes - -* add deprecated tag in progress and Queue3 class ([#973](https://github.com/taskforcesh/bullmq/issues/973)) ([6abdf5b](https://github.com/taskforcesh/bullmq/commit/6abdf5b66717cc8bc8ddb048029f7d9b92509942)) - -### Features - -* **queue:** add better event typing ([#971](https://github.com/taskforcesh/bullmq/issues/971)) ([596fd7b](https://github.com/taskforcesh/bullmq/commit/596fd7b260f2e95607f0eb4ff9553fb35137ec54)) ([`abe3f59`](https://github.com/taskforcesh/bullmq/commit/abe3f594b412c924ae9eb42e450bd2a356df7654)) - -* chore(release): 1.61.0 [skip ci] - -# [1.61.0](https://github.com/taskforcesh/bullmq/compare/v1.60.0...v1.61.0) (2021-12-29) - -### Features - -* **queue:** reuse generic typing for jobs ([5c10818](https://github.com/taskforcesh/bullmq/commit/5c10818d90724cccdf510f0358c01233aeac77e4)) -* **worker:** reuse generic typing for jobs ([9adcdb7](https://github.com/taskforcesh/bullmq/commit/9adcdb798b4ee55835123a9f3d04c1397b176dc1)) ([`06176e3`](https://github.com/taskforcesh/bullmq/commit/06176e32579611f06569a9e05a26832c02a0e6f4)) - -* chore(release): 1.60.0 [skip ci] - -# [1.60.0](https://github.com/taskforcesh/bullmq/compare/v1.59.4...v1.60.0) (2021-12-29) - -### Features - -* **queue-scheduler:** add better event typing ([#963](https://github.com/taskforcesh/bullmq/issues/963)) ([b23c006](https://github.com/taskforcesh/bullmq/commit/b23c006e2bfce8a0709f0eb8e8739261b68c2f48)) ([`0caa042`](https://github.com/taskforcesh/bullmq/commit/0caa042725325a5b682d9ce53a5346a1131486a2)) - -* chore(release): 1.59.4 [skip ci] - -## [1.59.4](https://github.com/taskforcesh/bullmq/compare/v1.59.3...v1.59.4) (2021-12-21) - -### Bug Fixes - -* downgrade typescript to 3.9.10 fixes [#917](https://github.com/taskforcesh/bullmq/issues/917) ([#960](https://github.com/taskforcesh/bullmq/issues/960)) ([4e51fe0](https://github.com/taskforcesh/bullmq/commit/4e51fe00751092ee8f521039a3f2b41d881b71ae)) ([`fbecbef`](https://github.com/taskforcesh/bullmq/commit/fbecbef96a2f8b7d037d8ffaca7c0f710be9b518)) - -* chore(release): 1.59.3 [skip ci] - -## [1.59.3](https://github.com/taskforcesh/bullmq/compare/v1.59.2...v1.59.3) (2021-12-21) - -### Bug Fixes - -* **worker:** fix undefined moveToActive ([87e8cab](https://github.com/taskforcesh/bullmq/commit/87e8cab16dad6f8bd9e9ec369ef7e79f471180be)) ([`28ccfa9`](https://github.com/taskforcesh/bullmq/commit/28ccfa91f9fac99abd6f2d448d7f2e8d10b78806)) - -* chore(release): 1.59.2 [skip ci] - -## [1.59.2](https://github.com/taskforcesh/bullmq/compare/v1.59.1...v1.59.2) (2021-12-17) - -### Bug Fixes - -* **package:** add jsnext:main prop ([#953](https://github.com/taskforcesh/bullmq/issues/953)) ([1a92bf7](https://github.com/taskforcesh/bullmq/commit/1a92bf7d41860f758841c5a833c1192d9a84a25f)) ([`7a950f5`](https://github.com/taskforcesh/bullmq/commit/7a950f5b336702f79058952c14bb2bf573818158)) - -* chore(release): 1.59.1 [skip ci] - -## [1.59.1](https://github.com/taskforcesh/bullmq/compare/v1.59.0...v1.59.1) (2021-12-17) - -### Bug Fixes - -* copy lua files to correct location ([2be1120](https://github.com/taskforcesh/bullmq/commit/2be1120974692ee57ec00e30d6dbbef670d88a1e)) ([`192f093`](https://github.com/taskforcesh/bullmq/commit/192f093af11f0faf6ae946c4a464059d6e48c015)) - -* chore(release): 1.59.0 [skip ci] - -# [1.59.0](https://github.com/taskforcesh/bullmq/compare/v1.58.0...v1.59.0) (2021-12-17) - -### Bug Fixes - -* correct dist path ([067d4c2](https://github.com/taskforcesh/bullmq/commit/067d4c2009b877f8bf6e6145507a41a53e5f7af3)) - -### Features - -* also export bullmq as an ESM ([e97e5b5](https://github.com/taskforcesh/bullmq/commit/e97e5b52b079adf2ed79f7cb61699e40a91e34e8)) ([`0d3a222`](https://github.com/taskforcesh/bullmq/commit/0d3a222859b8b66dbe0aad8c8475b31c4fac93d2)) - -* chore(release): 1.58.0 [skip ci] - -# [1.58.0](https://github.com/taskforcesh/bullmq/compare/v1.57.4...v1.58.0) (2021-12-15) - -### Features - -* **worker:** add better event typing ([#940](https://github.com/taskforcesh/bullmq/issues/940)) ([a326d4f](https://github.com/taskforcesh/bullmq/commit/a326d4f27e96ffa462a908ac14356d29839ff073)) ([`e2ffaaf`](https://github.com/taskforcesh/bullmq/commit/e2ffaafc54df02e9a9d7d0cd7e110407753c1ba9)) - -* chore(release): 1.57.4 [skip ci] - -## [1.57.4](https://github.com/taskforcesh/bullmq/compare/v1.57.3...v1.57.4) (2021-12-14) - -### Bug Fixes - -* **move-to-active:** add try catch in moveToActive call ([#933](https://github.com/taskforcesh/bullmq/issues/933)) ([bab45b0](https://github.com/taskforcesh/bullmq/commit/bab45b05d08c625557e2df65921e12f48081d39c)) -* **redis-connection:** consider cluster redisOptions config ([#934](https://github.com/taskforcesh/bullmq/issues/934)) ([5130f63](https://github.com/taskforcesh/bullmq/commit/5130f63ad969efa9649ab8f9abf36a72e8f553f4)) ([`9d2d62c`](https://github.com/taskforcesh/bullmq/commit/9d2d62c2c33b981ac5071d7122cd50da1d272d5c)) - -* chore: delete extra test directory (#931) ([`9ccc200`](https://github.com/taskforcesh/bullmq/commit/9ccc200bf26a60523cda85871cf1743fc288cb66)) - -* chore(release): 1.57.3 [skip ci] - -## [1.57.3](https://github.com/taskforcesh/bullmq/compare/v1.57.2...v1.57.3) (2021-12-14) - -### Bug Fixes - -* remove debug console.error ([#932](https://github.com/taskforcesh/bullmq/issues/932)) ([271aac3](https://github.com/taskforcesh/bullmq/commit/271aac3417bc7f76ac02435b456552677b2847db)) ([`cf57730`](https://github.com/taskforcesh/bullmq/commit/cf57730ae41fb9d6185a78ec47f4ae95aa8dcd88)) - -* chore(release): 1.57.2 [skip ci] - -## [1.57.2](https://github.com/taskforcesh/bullmq/compare/v1.57.1...v1.57.2) (2021-12-11) - -### Bug Fixes - -* **connection:** check instance options to console log deprecation message ([#927](https://github.com/taskforcesh/bullmq/issues/927)) ([fc1e2b9](https://github.com/taskforcesh/bullmq/commit/fc1e2b9f3f20db53f9dc7ecdfa4644f02acc9f83)) - -### Performance Improvements - -* **add-job:** save parent data as json ([#859](https://github.com/taskforcesh/bullmq/issues/859)) ([556d4ee](https://github.com/taskforcesh/bullmq/commit/556d4ee427090f60270945a7fd438e2595bb43e9)) ([`d9fd74f`](https://github.com/taskforcesh/bullmq/commit/d9fd74f8eae499ce2aeb02c7a0e5fcae5e4795bd)) - -* chore(release): 1.57.1 [skip ci] - -## [1.57.1](https://github.com/taskforcesh/bullmq/compare/v1.57.0...v1.57.1) (2021-12-11) - -### Bug Fixes - -* **worker:** better handling of block timeout ([be4c933](https://github.com/taskforcesh/bullmq/commit/be4c933ae0a7a790d24a081b2ed4e7e1c0216e47)) ([`8aa6e36`](https://github.com/taskforcesh/bullmq/commit/8aa6e36a806f51903620d397f821ef55763c6ff4)) - -* chore(release): 1.57.0 [skip ci] - -# [1.57.0](https://github.com/taskforcesh/bullmq/compare/v1.56.0...v1.57.0) (2021-12-08) - -### Features - -* **queue-events:** add better event typing ([#919](https://github.com/taskforcesh/bullmq/issues/919)) ([e980080](https://github.com/taskforcesh/bullmq/commit/e980080767bc56ae09a5c5cf33728a85a023bb42)) ([`7ea381b`](https://github.com/taskforcesh/bullmq/commit/7ea381b2936b93d86752e5f4b773fa04b3d8a7cd)) - -* chore(release): 1.56.0 [skip ci] - -# [1.56.0](https://github.com/taskforcesh/bullmq/compare/v1.55.1...v1.56.0) (2021-12-06) - -### Bug Fixes - -* emit drain event if no jobs left when completing ([9ad78a9](https://github.com/taskforcesh/bullmq/commit/9ad78a91c0a4a74cf84bd77d351d98195104f0b6)) -* **worker:** use client for setting worker name ([af65c2c](https://github.com/taskforcesh/bullmq/commit/af65c2cd0d3fb232c617b018d4991f3276db11ea)) - -### Features - -* **worker:** make moveToActive protected ([d2897ee](https://github.com/taskforcesh/bullmq/commit/d2897ee7bbf4aee5251ac4fb28705f2bebbe7bfe)) ([`bf37a32`](https://github.com/taskforcesh/bullmq/commit/bf37a324273dd1a2f606ff2dcb08c6166cc86ae9)) - -* chore(release): 1.55.1 [skip ci] - -## [1.55.1](https://github.com/taskforcesh/bullmq/compare/v1.55.0...v1.55.1) (2021-12-03) - -### Bug Fixes - -* **worker:** always try to move to active after waiting for job ([#914](https://github.com/taskforcesh/bullmq/issues/914)) ([97b7084](https://github.com/taskforcesh/bullmq/commit/97b708451bf4ce14a461a50f8a24d14b0e40dd4b)) ([`5327a96`](https://github.com/taskforcesh/bullmq/commit/5327a9618932ffe5ffc632c13c73b8c26302074c)) - -* chore(release): 1.55.0 [skip ci] - -# [1.55.0](https://github.com/taskforcesh/bullmq/compare/v1.54.6...v1.55.0) (2021-12-02) - -### Features - -* **script-loader:** lua script loader with include support ([#897](https://github.com/taskforcesh/bullmq/issues/897)) ([64b6ccf](https://github.com/taskforcesh/bullmq/commit/64b6ccf2a373b40d7ea763b3d35cf34f36ba11da)) ([`ae90c44`](https://github.com/taskforcesh/bullmq/commit/ae90c44e2ef79661440abbb9aae29345ca4e40ad)) - -* chore(release): 1.54.6 [skip ci] - -## [1.54.6](https://github.com/taskforcesh/bullmq/compare/v1.54.5...v1.54.6) (2021-11-30) - -### Bug Fixes - -* **stalled:** save finidhedOn when job stalled more than allowable limit ([#900](https://github.com/taskforcesh/bullmq/issues/900)) ([eb89edf](https://github.com/taskforcesh/bullmq/commit/eb89edf2f4eb85dedb1485de32e79331940a654f)) ([`0c0be5e`](https://github.com/taskforcesh/bullmq/commit/0c0be5e2c4b1192c45dcea16f3f0fdd725aa40fc)) - -* chore(release): 1.54.5 [skip ci] - -## [1.54.5](https://github.com/taskforcesh/bullmq/compare/v1.54.4...v1.54.5) (2021-11-26) - -### Bug Fixes - -* **tsconfig:** only include node types ([#895](https://github.com/taskforcesh/bullmq/issues/895)) ([5f4fdca](https://github.com/taskforcesh/bullmq/commit/5f4fdca5f416f2cd9d83eb0fba84e56c24320b63)) ([`f178fa9`](https://github.com/taskforcesh/bullmq/commit/f178fa984a7d53c8f92ea123ad476d92d153ab0f)) - -* chore(release): 1.54.4 [skip ci] - -## [1.54.4](https://github.com/taskforcesh/bullmq/compare/v1.54.3...v1.54.4) (2021-11-24) - -### Bug Fixes - -* **child-processor:** add deprecation warning for progress method ([#890](https://github.com/taskforcesh/bullmq/issues/890)) ([f80b19a](https://github.com/taskforcesh/bullmq/commit/f80b19a5aa85413b8906aa0fac1bfd09bec990cb)) ([`9469c36`](https://github.com/taskforcesh/bullmq/commit/9469c36cdbeb67491534f580f05f704d7c325d4b)) - -* chore(release): 1.54.3 [skip ci] - -## [1.54.3](https://github.com/taskforcesh/bullmq/compare/v1.54.2...v1.54.3) (2021-11-22) - -### Bug Fixes - -* **clean:** use range values in lua script ([#885](https://github.com/taskforcesh/bullmq/issues/885)) ([02ef63a](https://github.com/taskforcesh/bullmq/commit/02ef63a8163e627a270a1c1bd74989a67c3f15f7)) ([`22eabe5`](https://github.com/taskforcesh/bullmq/commit/22eabe5e7d515a501f427b4dca05b2b398f60412)) - -* chore(release): 1.54.2 [skip ci] - -## [1.54.2](https://github.com/taskforcesh/bullmq/compare/v1.54.1...v1.54.2) (2021-11-20) - -### Bug Fixes - -* **job:** use this when use new operators ([#884](https://github.com/taskforcesh/bullmq/issues/884)) ([7b84283](https://github.com/taskforcesh/bullmq/commit/7b842839e1d30967ebf15b901033e3b31e929df8)) ([`03f6eb3`](https://github.com/taskforcesh/bullmq/commit/03f6eb3d536dc4dd00c0d75338eb72678f397a69)) - -* chore(release): 1.54.1 [skip ci] - -## [1.54.1](https://github.com/taskforcesh/bullmq/compare/v1.54.0...v1.54.1) (2021-11-19) - -### Bug Fixes - -* **job:** change private attributes to protected for extensions ([#882](https://github.com/taskforcesh/bullmq/issues/882)) ([ffcc3f0](https://github.com/taskforcesh/bullmq/commit/ffcc3f083c23e6de3587c38fb7aacb2e19085351)) ([`5024c18`](https://github.com/taskforcesh/bullmq/commit/5024c186b4bafaa6c416799c782331934fa19eb1)) - -* chore(release): 1.54.0 [skip ci] - -# [1.54.0](https://github.com/taskforcesh/bullmq/compare/v1.53.0...v1.54.0) (2021-11-17) - -### Features - -* **load-includes:** export includes to be reused in extensions ([#877](https://github.com/taskforcesh/bullmq/issues/877)) ([b56c4a9](https://github.com/taskforcesh/bullmq/commit/b56c4a9cf2ecebb44481618026589162be61680a)) ([`d6519f1`](https://github.com/taskforcesh/bullmq/commit/d6519f1a185decdd544667115657e00239c9d6ee)) - -* chore(release): 1.53.0 [skip ci] - -# [1.53.0](https://github.com/taskforcesh/bullmq/compare/v1.52.2...v1.53.0) (2021-11-16) - -### Features - -* **queue-events:** add cleaned event ([#865](https://github.com/taskforcesh/bullmq/issues/865)) ([b3aebad](https://github.com/taskforcesh/bullmq/commit/b3aebad8a62311e135d53be2e7c5e47740547465)) ([`14e4f31`](https://github.com/taskforcesh/bullmq/commit/14e4f318e3c4ca2eb3fd065d79f1813c6ed7f8eb)) - -* chore(release): 1.52.2 [skip ci] - -## [1.52.2](https://github.com/taskforcesh/bullmq/compare/v1.52.1...v1.52.2) (2021-11-14) - -### Bug Fixes - -* **worker:** change private attributes to protected for pro extension ([#874](https://github.com/taskforcesh/bullmq/issues/874)) ([1c73881](https://github.com/taskforcesh/bullmq/commit/1c738819b49f206688ed7b3b9d103077045e1b05)) ([`e73580b`](https://github.com/taskforcesh/bullmq/commit/e73580ba747b304924643ba9c710449e9b254716)) - -* chore(release): 1.52.1 [skip ci] - -## [1.52.1](https://github.com/taskforcesh/bullmq/compare/v1.52.0...v1.52.1) (2021-11-12) - -### Performance Improvements - -* **clean:** speed up clean method when called with limit param ([#864](https://github.com/taskforcesh/bullmq/issues/864)) ([09b5cb4](https://github.com/taskforcesh/bullmq/commit/09b5cb45a79c4bc53a52d540918c22477a066e16)) ([`d59475c`](https://github.com/taskforcesh/bullmq/commit/d59475ce4d3ad1181dde613e47e7318812f23110)) - -* chore(deps): apply rimraf to delete extra published files (#873) ([`e84620c`](https://github.com/taskforcesh/bullmq/commit/e84620c785f388ed14742c86d78dd78fb05218de)) - -* chore(release): 1.52.0 [skip ci] - -# [1.52.0](https://github.com/taskforcesh/bullmq/compare/v1.51.3...v1.52.0) (2021-11-11) - -### Features - -* **queue:** add waiting event type declaration ([#872](https://github.com/taskforcesh/bullmq/issues/872)) ([f29925d](https://github.com/taskforcesh/bullmq/commit/f29925da3b12f573582ea188ec386e86023cefc9)) ([`2048a9b`](https://github.com/taskforcesh/bullmq/commit/2048a9b47f69166805858fdc3a18c940deb42049)) - -* chore(deps): upgrade @semantic-release/github (#867) to 8.0.2 ([`9621383`](https://github.com/taskforcesh/bullmq/commit/96213838121f4a52d71ce07928f2c5f9cb46fa9c)) - -* chore(release): 1.51.3 [skip ci] - -## [1.51.3](https://github.com/taskforcesh/bullmq/compare/v1.51.2...v1.51.3) (2021-11-04) - -### Bug Fixes - -* **move-to-failed:** delete closing check that prevents script execution ([#858](https://github.com/taskforcesh/bullmq/issues/858)) fixes [#834](https://github.com/taskforcesh/bullmq/issues/834) ([d50814f](https://github.com/taskforcesh/bullmq/commit/d50814f864448c10fec8e93651a2095fa4ef3f4e)) ([`be186d9`](https://github.com/taskforcesh/bullmq/commit/be186d9e6f3c3bf1d4afb0e1423935190681de34)) - -* chore(release): 1.51.2 [skip ci] - -## [1.51.2](https://github.com/taskforcesh/bullmq/compare/v1.51.1...v1.51.2) (2021-11-03) - -### Bug Fixes - -* **flow:** remove repeat option from FlowJob opts ([#853](https://github.com/taskforcesh/bullmq/issues/853)) fixes [#851](https://github.com/taskforcesh/bullmq/issues/851) ([c9ee2f1](https://github.com/taskforcesh/bullmq/commit/c9ee2f100a23aa24034598b7d452c69720d7aabd)) ([`8c8a5df`](https://github.com/taskforcesh/bullmq/commit/8c8a5df4121560a7325bbbadb8ec77b59fad3505)) - -* chore(deps): add npm-run-all into dev-dependencies (#847) ([`315d5dd`](https://github.com/taskforcesh/bullmq/commit/315d5dda39bcfb3223976d1a6da8e11d0a4902a5)) - -* chore(release): 1.51.1 [skip ci] - -## [1.51.1](https://github.com/taskforcesh/bullmq/compare/v1.51.0...v1.51.1) (2021-10-29) - -### Bug Fixes - -* **commands:** copy includes lua scripts ([#843](https://github.com/taskforcesh/bullmq/issues/843)) fixes [#837](https://github.com/taskforcesh/bullmq/issues/837) ([cab33e0](https://github.com/taskforcesh/bullmq/commit/cab33e08bc78bd3c45b86158a818100beeb06d81)) ([`1c99cc7`](https://github.com/taskforcesh/bullmq/commit/1c99cc7f00097ee77669378c6e1c291677b330df)) - -* chore(release): 1.51.0 [skip ci] - -# [1.51.0](https://github.com/taskforcesh/bullmq/compare/v1.50.7...v1.51.0) (2021-10-28) - -### Features - -* **flow:** consider continually adding jobs ([#828](https://github.com/taskforcesh/bullmq/issues/828)) fixes [#826](https://github.com/taskforcesh/bullmq/issues/826) ([b0fde69](https://github.com/taskforcesh/bullmq/commit/b0fde69f4370160a891e4654485c09745066b80b)) ([`8231052`](https://github.com/taskforcesh/bullmq/commit/82310524849b8aaae0ab8e427f4a0637fadaa2de)) - -* chore(release): 1.50.7 [skip ci] - -## [1.50.7](https://github.com/taskforcesh/bullmq/compare/v1.50.6...v1.50.7) (2021-10-28) - -### Bug Fixes - -* override enableReadyCheck, maxRetriesPerRequest fixes reconnection ([09ba358](https://github.com/taskforcesh/bullmq/commit/09ba358b6f761bdc52b0f5b2aa315cc6c2a9db6e)) -* **queue-base:** deprecation warning on missing connection ([2f79802](https://github.com/taskforcesh/bullmq/commit/2f79802378d7e015b5d0702945a71c1c2073251e)) ([`da1add8`](https://github.com/taskforcesh/bullmq/commit/da1add8d2970216b953406d1c1109b36bfa05c5c)) - -* chore: remove some lodash functions (#835) ([`fcc48e3`](https://github.com/taskforcesh/bullmq/commit/fcc48e3fb4263950f355e9fd9a233a20fe18f380)) - -* chore(release): 1.50.6 [skip ci] - -## [1.50.6](https://github.com/taskforcesh/bullmq/compare/v1.50.5...v1.50.6) (2021-10-28) - -### Bug Fixes - -* **queue-base:** show connection deprecation warning ([#832](https://github.com/taskforcesh/bullmq/issues/832)) fixes [#829](https://github.com/taskforcesh/bullmq/issues/829) ([5d023fe](https://github.com/taskforcesh/bullmq/commit/5d023fe7b671a2547398fd68995ccd85216cc7a5)) ([`2c191b0`](https://github.com/taskforcesh/bullmq/commit/2c191b0e079bf412f292617c88917eec3c9b00de)) - -* chore(release): 1.50.5 [skip ci] - -## [1.50.5](https://github.com/taskforcesh/bullmq/compare/v1.50.4...v1.50.5) (2021-10-21) - -### Bug Fixes - -* **child-pool:** pipe process stdout and stderr([#822](https://github.com/taskforcesh/bullmq/issues/822)) fixes [#821](https://github.com/taskforcesh/bullmq/issues/821) ([13f5c62](https://github.com/taskforcesh/bullmq/commit/13f5c62174925e4638acda6a9de379668048189d)) ([`7dcbe43`](https://github.com/taskforcesh/bullmq/commit/7dcbe43ccc3c69625e6fba72f80d71dd755690b3)) - -* chore(release): 1.50.4 [skip ci] - -## [1.50.4](https://github.com/taskforcesh/bullmq/compare/v1.50.3...v1.50.4) (2021-10-20) - -### Bug Fixes - -* properly pass sharedConnection option to worker base class ([56557f1](https://github.com/taskforcesh/bullmq/commit/56557f1c0c3fb04bc3dd8824819c2d4367324c3b)) ([`fdc76ff`](https://github.com/taskforcesh/bullmq/commit/fdc76ff9b8781a1735933514a8b2b5eac510b789)) - -* chore(release): 1.50.3 [skip ci] - -## [1.50.3](https://github.com/taskforcesh/bullmq/compare/v1.50.2...v1.50.3) (2021-10-18) - -### Bug Fixes - -* **msgpackr:** upgrade version to 1.4.6 to support esm bundlers ([#818](https://github.com/taskforcesh/bullmq/issues/818)) fixes [#813](https://github.com/taskforcesh/bullmq/issues/813) ([913d7a9](https://github.com/taskforcesh/bullmq/commit/913d7a9a892d2c7e2fa5822367355c2dee888583)) ([`19da60a`](https://github.com/taskforcesh/bullmq/commit/19da60a6006d0df9e0cb81ea810d3c2673e46350)) - -* chore(release): 1.50.2 [skip ci] - -## [1.50.2](https://github.com/taskforcesh/bullmq/compare/v1.50.1...v1.50.2) (2021-10-12) - -### Bug Fixes - -* **msgpack:** replace msgpack by msgpackr ([dc13a75](https://github.com/taskforcesh/bullmq/commit/dc13a75374bbd29fefbf3e56f822e763df3712d9)) ([`23c02b2`](https://github.com/taskforcesh/bullmq/commit/23c02b2eee3c4e27e0370317779b1620b195e2f5)) - -* chore(release): 1.50.1 [skip ci] - -## [1.50.1](https://github.com/taskforcesh/bullmq/compare/v1.50.0...v1.50.1) (2021-10-12) - -### Bug Fixes - -* **queue-getters:** only getting the first 2 jobs ([653873a](https://github.com/taskforcesh/bullmq/commit/653873a6a86dd6c3e1afc3142efbe11014d80557)) ([`4768d7b`](https://github.com/taskforcesh/bullmq/commit/4768d7b1f843dcac14bef62edbfab3d1242dec64)) - -* chore(release): 1.50.0 [skip ci] - -# [1.50.0](https://github.com/taskforcesh/bullmq/compare/v1.49.0...v1.50.0) (2021-10-12) - -### Features - -* easier to build extensions on top of BullMQ ([b1a9e64](https://github.com/taskforcesh/bullmq/commit/b1a9e64a9184addc0b8245a04013e1c896e9c2bc)) ([`2d646d1`](https://github.com/taskforcesh/bullmq/commit/2d646d169f9ad084b6fc8c47316aaa77821126ea)) - -* chore(release): 1.49.0 [skip ci] - -# [1.49.0](https://github.com/taskforcesh/bullmq/compare/v1.48.3...v1.49.0) (2021-10-08) - -### Features - -* **sandboxed-process:** handle init-failed error ([#797](https://github.com/taskforcesh/bullmq/issues/797)) ([5d2f553](https://github.com/taskforcesh/bullmq/commit/5d2f55342b19ee99d34f8d8003f09359cfe17d4f)) ([`daaa73e`](https://github.com/taskforcesh/bullmq/commit/daaa73e2016948e715f11e67fac1bf261dadb33a)) - -* chore(release): 1.48.3 [skip ci] - -## [1.48.3](https://github.com/taskforcesh/bullmq/compare/v1.48.2...v1.48.3) (2021-10-05) - -### Bug Fixes - -* **change-delay:** add current time to delay ([#789](https://github.com/taskforcesh/bullmq/issues/789)) fixes [#787](https://github.com/taskforcesh/bullmq/issues/787) ([4a70def](https://github.com/taskforcesh/bullmq/commit/4a70def6e85cf9ea384ec5f38c3c4f83e4eb523c)) ([`4e09a2a`](https://github.com/taskforcesh/bullmq/commit/4e09a2a97bb9eab6c5c3db1294aa1aa4fd3730b0)) - -* chore(semantic-release): upgrade to 17.4.7 (#778) ([`477bdae`](https://github.com/taskforcesh/bullmq/commit/477bdae9d037a92f9d94457c9476b2b3aba6c671)) - -* chore(release): 1.48.2 [skip ci] - -## [1.48.2](https://github.com/taskforcesh/bullmq/compare/v1.48.1...v1.48.2) (2021-09-24) - -### Performance Improvements - -* **obliterate:** do not pass unused variables ([#766](https://github.com/taskforcesh/bullmq/issues/766)) ([e9abfa6](https://github.com/taskforcesh/bullmq/commit/e9abfa6f821064901770a9b72adfb00cac96154c)) ([`1b5317a`](https://github.com/taskforcesh/bullmq/commit/1b5317a5f5488fefe367550c518e5c2584ced300)) - -* chore(release): 1.48.1 [skip ci] - -## [1.48.1](https://github.com/taskforcesh/bullmq/compare/v1.48.0...v1.48.1) (2021-09-23) - -### Bug Fixes - -* **obliterate:** consider dependencies and processed keys ([#765](https://github.com/taskforcesh/bullmq/issues/765)) ([fd6bad8](https://github.com/taskforcesh/bullmq/commit/fd6bad8c7444c21e6f1d67611a28f8e4aace293d)) ([`1fbb80d`](https://github.com/taskforcesh/bullmq/commit/1fbb80ded6dd22b755757b4699667351eda0b106)) - -* chore(release): 1.48.0 [skip ci] - -# [1.48.0](https://github.com/taskforcesh/bullmq/compare/v1.47.2...v1.48.0) (2021-09-23) - -### Features - -* **queue:** add drain lua script ([#764](https://github.com/taskforcesh/bullmq/issues/764)) ([2daa698](https://github.com/taskforcesh/bullmq/commit/2daa698a7cc5dc8a6cd087b2d29356bc02fb4944)) ([`4c91ad5`](https://github.com/taskforcesh/bullmq/commit/4c91ad549830ccf10d0dc599aabbeaf3466fdb26)) - -* chore(release): 1.47.2 [skip ci] - -## [1.47.2](https://github.com/taskforcesh/bullmq/compare/v1.47.1...v1.47.2) (2021-09-22) - -### Bug Fixes - -* **flow-producer:** use default prefix in add method ([#763](https://github.com/taskforcesh/bullmq/issues/763)) fixes [#762](https://github.com/taskforcesh/bullmq/issues/762) ([fffdb55](https://github.com/taskforcesh/bullmq/commit/fffdb55f37917776494a4471673ef4564e0faab5)) ([`375f7c1`](https://github.com/taskforcesh/bullmq/commit/375f7c18432b36802bc521bfa78855278a834963)) - -* chore(deps): bump semver-regex from 3.1.2 to 3.1.3 (#761) ([`4586cda`](https://github.com/taskforcesh/bullmq/commit/4586cdab0ca52f28e12449ff6f82f7c6124a2c12)) - -* chore(release): 1.47.1 [skip ci] - -## [1.47.1](https://github.com/taskforcesh/bullmq/compare/v1.47.0...v1.47.1) (2021-09-17) - -### Bug Fixes - -* **running:** move running attribute before first async call ([#756](https://github.com/taskforcesh/bullmq/issues/756)) ([f7f0660](https://github.com/taskforcesh/bullmq/commit/f7f066076bbe6cbcbf716ae622d55c6c1ae9b270)) ([`9c2dfab`](https://github.com/taskforcesh/bullmq/commit/9c2dfab132eb3366af69a5c2f1585d4b7150eadb)) - -* chore(release): 1.47.0 [skip ci] - -# [1.47.0](https://github.com/taskforcesh/bullmq/compare/v1.46.7...v1.47.0) (2021-09-16) - -### Features - -* **queue-events:** launch without launching process ([#750](https://github.com/taskforcesh/bullmq/issues/750)) ([23a2360](https://github.com/taskforcesh/bullmq/commit/23a23606e727ca13b24924a1e867c6b557d6a09d)) ([`7600f1b`](https://github.com/taskforcesh/bullmq/commit/7600f1b4f9c78e0933ab25f6d285381443c07c91)) - -* chore(release): 1.46.7 [skip ci] - -## [1.46.7](https://github.com/taskforcesh/bullmq/compare/v1.46.6...v1.46.7) (2021-09-16) - -### Bug Fixes - -* **wait-for-job:** add catch block and emit error ([#749](https://github.com/taskforcesh/bullmq/issues/749)) ([b407f9a](https://github.com/taskforcesh/bullmq/commit/b407f9ac429c825984856eebca58bbfd16feb9d3)) ([`e1cd8bb`](https://github.com/taskforcesh/bullmq/commit/e1cd8bb2b69cb3efff9e6f379462bbefe4e0cf1d)) - -* chore(release): 1.46.6 [skip ci] - -## [1.46.6](https://github.com/taskforcesh/bullmq/compare/v1.46.5...v1.46.6) (2021-09-15) - -### Bug Fixes - -* **connection:** fail only if redis connection does not recover ([#751](https://github.com/taskforcesh/bullmq/issues/751)) ([8d59ced](https://github.com/taskforcesh/bullmq/commit/8d59ced27831a636f40ed4233eba3d4ac0654534)) ([`8dc5463`](https://github.com/taskforcesh/bullmq/commit/8dc54632c55db21231a359f53c43bd89d8db18f3)) - -* chore(release): 1.46.5 [skip ci] - -## [1.46.5](https://github.com/taskforcesh/bullmq/compare/v1.46.4...v1.46.5) (2021-09-12) - -### Bug Fixes - -* **is-finished:** reject when missing job key ([#746](https://github.com/taskforcesh/bullmq/issues/746)) fixes [#85](https://github.com/taskforcesh/bullmq/issues/85) ([bd49bd2](https://github.com/taskforcesh/bullmq/commit/bd49bd20492676559072e5e16adb6d4e47afb22b)) ([`4b80319`](https://github.com/taskforcesh/bullmq/commit/4b8031963b745334e53e492ae9b028173bb3d0be)) - -* chore(release): 1.46.4 [skip ci] - -## [1.46.4](https://github.com/taskforcesh/bullmq/compare/v1.46.3...v1.46.4) (2021-09-10) - -### Bug Fixes - -* **wait-until-finished:** isFinished return failedReason or returnValue ([#743](https://github.com/taskforcesh/bullmq/issues/743)) fixes [#555](https://github.com/taskforcesh/bullmq/issues/555) ([63acae9](https://github.com/taskforcesh/bullmq/commit/63acae98cb083ec978ea17833819d1a21086be33)) ([`1c92551`](https://github.com/taskforcesh/bullmq/commit/1c92551fb6d7dcbca2d12fb8576cd8988cdccb55)) - -* chore(release): 1.46.3 [skip ci] - -## [1.46.3](https://github.com/taskforcesh/bullmq/compare/v1.46.2...v1.46.3) (2021-09-08) - -### Bug Fixes - -* **add-job:** throw error when missing parent key ([#739](https://github.com/taskforcesh/bullmq/issues/739)) ([d751070](https://github.com/taskforcesh/bullmq/commit/d751070f4ab6553c782341270574ccd253d309b8)) ([`1fab5c2`](https://github.com/taskforcesh/bullmq/commit/1fab5c28c6eace6505b271bb00133f8c59be08ce)) - -* chore(release): 1.46.2 [skip ci] - -## [1.46.2](https://github.com/taskforcesh/bullmq/compare/v1.46.1...v1.46.2) (2021-09-07) - -### Bug Fixes - -* **queue-events:** duplicate connection ([#733](https://github.com/taskforcesh/bullmq/issues/733)) fixes [#726](https://github.com/taskforcesh/bullmq/issues/726) ([e2531ed](https://github.com/taskforcesh/bullmq/commit/e2531ed0c1dc195f210f8cf996e9ffe04c9e4b7d)) ([`8a677ef`](https://github.com/taskforcesh/bullmq/commit/8a677ef958950ca392d97fa4904ea37023605eab)) - -* chore(release): 1.46.1 [skip ci] - -## [1.46.1](https://github.com/taskforcesh/bullmq/compare/v1.46.0...v1.46.1) (2021-09-06) - -### Bug Fixes - -* **redis-connection:** improve closing fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([9d8eb03](https://github.com/taskforcesh/bullmq/commit/9d8eb0306ef5e63c9d34ffd5c96fc15491da639d)) ([`ef9bcc3`](https://github.com/taskforcesh/bullmq/commit/ef9bcc3c80dc3c8705b63d9457397b368d5c611b)) - -* chore(release): 1.46.0 [skip ci] - -# [1.46.0](https://github.com/taskforcesh/bullmq/compare/v1.45.0...v1.46.0) (2021-09-02) - -### Features - -* **worker:** launch without launching process ([#724](https://github.com/taskforcesh/bullmq/issues/724)) ([af689e4](https://github.com/taskforcesh/bullmq/commit/af689e4e3945b9bc68bfc08c8f0ad57644206c5b)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) ([`543cae0`](https://github.com/taskforcesh/bullmq/commit/543cae02b5a98a166a942f1f977e02aa0b75058e)) - -* chore(release): 1.45.0 [skip ci] - -# [1.45.0](https://github.com/taskforcesh/bullmq/compare/v1.44.3...v1.45.0) (2021-09-02) - -### Features - -* **queue-scheduler:** launch without launching process ([#729](https://github.com/taskforcesh/bullmq/issues/729)) ([f1932a7](https://github.com/taskforcesh/bullmq/commit/f1932a789af13da9b705a72d6f633f984a218862)), closes [#436](https://github.com/taskforcesh/bullmq/issues/436) ([`f13757c`](https://github.com/taskforcesh/bullmq/commit/f13757ca06daa52402371fb2a458a990503c0bff)) - -* chore(release): 1.44.3 [skip ci] - -## [1.44.3](https://github.com/taskforcesh/bullmq/compare/v1.44.2...v1.44.3) (2021-09-02) - -### Bug Fixes - -* **queuescheduler:** handle shared connections fixes [#721](https://github.com/taskforcesh/bullmq/issues/721) ([32a2b2e](https://github.com/taskforcesh/bullmq/commit/32a2b2eccfa3ba1516eacd71e334cae6c787ce4c)) ([`4b551fa`](https://github.com/taskforcesh/bullmq/commit/4b551faaa5b02c572e4f6d36c5d2c2b8c79ff954)) - -* chore(deps): bump tar from 6.1.3 to 6.1.11 (#728) ([`e4c37fe`](https://github.com/taskforcesh/bullmq/commit/e4c37fec13e85ea69cd2051ed56f03942e4e10e8)) - -* chore(deps): bump path-parse from 1.0.6 to 1.0.7 (#680) ([`a1845fc`](https://github.com/taskforcesh/bullmq/commit/a1845fcc393ef607401ff72a98916e571c5e33df)) - -* chore(release): 1.44.2 [skip ci] - -## [1.44.2](https://github.com/taskforcesh/bullmq/compare/v1.44.1...v1.44.2) (2021-08-29) - -### Bug Fixes - -* **worker:** use spread operator in processing map keys ([#720](https://github.com/taskforcesh/bullmq/issues/720)) ([32f1e57](https://github.com/taskforcesh/bullmq/commit/32f1e570a9a3369174a228f729f1d1330dcb6965)) ([`c27b97f`](https://github.com/taskforcesh/bullmq/commit/c27b97f5200481b70a6c05131d2fc34db2425d45)) - -* chore(release): 1.44.1 [skip ci] - -## [1.44.1](https://github.com/taskforcesh/bullmq/compare/v1.44.0...v1.44.1) (2021-08-29) - -### Bug Fixes - -* **retry:** throw error when retry non failed job ([#717](https://github.com/taskforcesh/bullmq/issues/717)) ([bb9b192](https://github.com/taskforcesh/bullmq/commit/bb9b192e9a1a4f3c25374fcb8c0fb2159eb3f779)) ([`2a8c476`](https://github.com/taskforcesh/bullmq/commit/2a8c4766c674dd132f7592cc9b0b4213b9f33611)) - -* chore(deps): bump normalize-url from 6.0.0 to 6.0.1 (#587) ([`1e7cef3`](https://github.com/taskforcesh/bullmq/commit/1e7cef36c5ae7d93c86b49e0aa9484dfc470247a)) - -* chore(deps): upgrade dependencies (#713) ([`ae5cafd`](https://github.com/taskforcesh/bullmq/commit/ae5cafd987d1d494944c850c6317db46292f5a05)) - -* chore(release): 1.44.0 [skip ci] - -# [1.44.0](https://github.com/taskforcesh/bullmq/compare/v1.43.0...v1.44.0) (2021-08-27) - -### Features - -* **queue-events:** add waiting-children event ([#704](https://github.com/taskforcesh/bullmq/issues/704)) ([18b0b79](https://github.com/taskforcesh/bullmq/commit/18b0b7954313274a61fcc058380bfb9d682c059d)) ([`a41952f`](https://github.com/taskforcesh/bullmq/commit/a41952fa8a17441275dd4bf1c675e8a81b4f54a0)) - -* chore(release): 1.43.0 [skip ci] - -# [1.43.0](https://github.com/taskforcesh/bullmq/compare/v1.42.1...v1.43.0) (2021-08-25) - -### Features - -* **events:** add added event when job is created ([#699](https://github.com/taskforcesh/bullmq/issues/699)) ([f533cc5](https://github.com/taskforcesh/bullmq/commit/f533cc55a43cf6ea78a60e85102f15b1c1ff69a0)) ([`dd7efc3`](https://github.com/taskforcesh/bullmq/commit/dd7efc3390e4a9a90f1b3ee0c3e3c74deb1f0369)) - -* chore(release): 1.42.1 [skip ci] - -## [1.42.1](https://github.com/taskforcesh/bullmq/compare/v1.42.0...v1.42.1) (2021-08-23) - -### Bug Fixes - -* protect emit calls with throw/catch ([79f879b](https://github.com/taskforcesh/bullmq/commit/79f879bf1bca1acea19485def361cc36f1d13b7e)) ([`55606f7`](https://github.com/taskforcesh/bullmq/commit/55606f79cc6accf07d45fe2c4ffa81817108d7bc)) - -* chore(release): 1.42.0 [skip ci] - -# [1.42.0](https://github.com/taskforcesh/bullmq/compare/v1.41.0...v1.42.0) (2021-08-20) - -### Features - -* **flows:** add queuesOptions for rate limit ([#692](https://github.com/taskforcesh/bullmq/issues/692)) ([6689ec3](https://github.com/taskforcesh/bullmq/commit/6689ec3fadd21904d9935f932c047f540ed8caf0)), closes [#621](https://github.com/taskforcesh/bullmq/issues/621) ([`f1472da`](https://github.com/taskforcesh/bullmq/commit/f1472dab64c04a7db694a4af3d78f45a96d8922f)) - -* chore(release): 1.41.0 [skip ci] - -# [1.41.0](https://github.com/taskforcesh/bullmq/compare/v1.40.4...v1.41.0) (2021-08-20) - -### Features - -* **flow:** add bulk ([dc59fe6](https://github.com/taskforcesh/bullmq/commit/dc59fe62e57b6e761fe4d2ab6179a69dc4792399)) ([`874b1a4`](https://github.com/taskforcesh/bullmq/commit/874b1a48d1480ee19e57c362f978e13e9f34b1bd)) - -* chore(flow): remove unneeded updateIds (#684) ([`1b44359`](https://github.com/taskforcesh/bullmq/commit/1b44359ca298dc5195be7046bb5a5c939c91f3cd)) - -* chore(release): 1.40.4 [skip ci] - -## [1.40.4](https://github.com/taskforcesh/bullmq/compare/v1.40.3...v1.40.4) (2021-08-06) - -### Bug Fixes - -* **rate-limiter:** check groupKey is not undefined ([999b918](https://github.com/taskforcesh/bullmq/commit/999b91868814caf4c5c1ddee40798178b71e0ea8)) ([`76dff91`](https://github.com/taskforcesh/bullmq/commit/76dff919c89b6eef13bd3109d5b84c89436f427a)) - -* chore(release): 1.40.3 [skip ci] - -## [1.40.3](https://github.com/taskforcesh/bullmq/compare/v1.40.2...v1.40.3) (2021-08-06) - -### Bug Fixes - -* **redis-connection:** add error event in waitUntilReady ([ac4101e](https://github.com/taskforcesh/bullmq/commit/ac4101e3e798110c022d6c9f10f3b98f5e86b151)) ([`40f9d14`](https://github.com/taskforcesh/bullmq/commit/40f9d14f6ff6d64664748eb723d3a827bd2de337)) - -* chore(deps): bump tar from 6.1.0 to 6.1.3 - -Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.3. -- [Release notes](https://github.com/npm/node-tar/releases) -- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md) -- [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.3) - ---- -updated-dependencies: -- dependency-name: tar - dependency-type: indirect -... - -Signed-off-by: dependabot[bot] <support@github.com> ([`242ed66`](https://github.com/taskforcesh/bullmq/commit/242ed664fdbd3dab58a363d886b63a56bc024170)) - -* chore(release): 1.40.2 [skip ci] - -## [1.40.2](https://github.com/taskforcesh/bullmq/compare/v1.40.1...v1.40.2) (2021-08-06) - -### Bug Fixes - -* move clientCommandMessageReg to utils ([dd5d555](https://github.com/taskforcesh/bullmq/commit/dd5d5553fe768eb18b17b53c7f75e7066024e382)) ([`5a83df7`](https://github.com/taskforcesh/bullmq/commit/5a83df7fac77ee5dac4e97813f5feaaf0b3246b8)) - -* chore(release): 1.40.1 [skip ci] - -## [1.40.1](https://github.com/taskforcesh/bullmq/compare/v1.40.0...v1.40.1) (2021-07-24) - -### Bug Fixes - -* connection hangs with failed connection fixes [#656](https://github.com/taskforcesh/bullmq/issues/656) ([c465611](https://github.com/taskforcesh/bullmq/commit/c465611ed76afd2adfd0e05a8babd6e369f5c310)) ([`e2502ca`](https://github.com/taskforcesh/bullmq/commit/e2502ca390aff42d8580474376492b80a273bae3)) - -* chore(release): 1.40.0 [skip ci] - -# [1.40.0](https://github.com/taskforcesh/bullmq/compare/v1.39.5...v1.40.0) (2021-07-22) - -### Features - -* **worker:** retry with delay errors in run loop ([409fe7f](https://github.com/taskforcesh/bullmq/commit/409fe7fc09b87b7916a3362a463bb9e0f17ecea8)) ([`a4984ee`](https://github.com/taskforcesh/bullmq/commit/a4984ee9b3afb5c999fcef6f60b07279e85770a6)) - -* chore(release): 1.39.5 [skip ci] - -## [1.39.5](https://github.com/taskforcesh/bullmq/compare/v1.39.4...v1.39.5) (2021-07-21) - -### Bug Fixes - -* **move-to-finished:** remove stalled jobs when finishing ([3867126](https://github.com/taskforcesh/bullmq/commit/38671261ccc00ca7fefa677663e45a40a92df555)) ([`4000c34`](https://github.com/taskforcesh/bullmq/commit/4000c34716609ca60c324635c4850bbe5c363b90)) - -* chore(release): 1.39.4 [skip ci] - -## [1.39.4](https://github.com/taskforcesh/bullmq/compare/v1.39.3...v1.39.4) (2021-07-21) - -### Bug Fixes - -* **repeatable:** validate endDate when adding next repeatable job ([1324cbb](https://github.com/taskforcesh/bullmq/commit/1324cbb4effd55e98c29d95a21afca7cd045b46c)) ([`a6eefeb`](https://github.com/taskforcesh/bullmq/commit/a6eefebfb33aaa376e241c27ff242adb6a78e44b)) - -* chore(release): 1.39.3 [skip ci] - -## [1.39.3](https://github.com/taskforcesh/bullmq/compare/v1.39.2...v1.39.3) (2021-07-16) - -### Bug Fixes - -* connect if redis client has status "wait" ([f711717](https://github.com/taskforcesh/bullmq/commit/f711717f56822aef43c9fd0440e30fad0876ba62)) ([`6774a2a`](https://github.com/taskforcesh/bullmq/commit/6774a2a6dd061055ef470229e43e896754e06c64)) - -* chore(release): 1.39.2 [skip ci] - -## [1.39.2](https://github.com/taskforcesh/bullmq/compare/v1.39.1...v1.39.2) (2021-07-15) - -### Bug Fixes - -* **queue:** ensure the Queue constructor doesn't try to set queue options if the client is closed ([b40c6eb](https://github.com/taskforcesh/bullmq/commit/b40c6eb931a71d0ae9f6454eb70d84259a6981b7)) ([`451365c`](https://github.com/taskforcesh/bullmq/commit/451365ce939e43e71fd45c3614103ad409c8a90d)) - -* chore(release): 1.39.1 [skip ci] - -## [1.39.1](https://github.com/taskforcesh/bullmq/compare/v1.39.0...v1.39.1) (2021-07-15) - -### Bug Fixes - -* **sandbox:** use updateProgress method name ([27d62c3](https://github.com/taskforcesh/bullmq/commit/27d62c32b2fac091b2700d6077de593c9fda4c22)) ([`a3bdce2`](https://github.com/taskforcesh/bullmq/commit/a3bdce292486b983305e6e324427adee9d4199ef)) - -* chore(release): 1.39.0 [skip ci] - -# [1.39.0](https://github.com/taskforcesh/bullmq/compare/v1.38.1...v1.39.0) (2021-07-13) - -### Features - -* **worker+scheduler:** add a "running" attribute for healthchecking ([aae358e](https://github.com/taskforcesh/bullmq/commit/aae358e067a0b6f20124751cffcdeaebac6eb7fd)) ([`c718d36`](https://github.com/taskforcesh/bullmq/commit/c718d365d0a1882154130d096988f3294fe8c66f)) - -* chore(release): 1.38.1 [skip ci] - -## [1.38.1](https://github.com/taskforcesh/bullmq/compare/v1.38.0...v1.38.1) (2021-07-12) - -### Bug Fixes - -* **reprocess:** do not store job.id in added list ([9c0605e](https://github.com/taskforcesh/bullmq/commit/9c0605e10f0bbdce94153d3f318d56c23bfd3269)) ([`9a4e496`](https://github.com/taskforcesh/bullmq/commit/9a4e496489b292821c746d14f413aff25f134bfd)) - -* chore(release): 1.38.0 [skip ci] - -# [1.38.0](https://github.com/taskforcesh/bullmq/compare/v1.37.1...v1.38.0) (2021-07-12) - -### Features - -* **queue:** add missing events typings ([b42e78c](https://github.com/taskforcesh/bullmq/commit/b42e78c36cb6a6579a4c7cce1d7e969b230ff5b6)) ([`c234af2`](https://github.com/taskforcesh/bullmq/commit/c234af2ae548c4bed6ed6553a368c555d65b249e)) - -* chore(release): 1.37.1 [skip ci] - -## [1.37.1](https://github.com/taskforcesh/bullmq/compare/v1.37.0...v1.37.1) (2021-07-02) - -### Bug Fixes - -* **stalled-jobs:** move stalled jobs to wait in batches ([a23fcb8](https://github.com/taskforcesh/bullmq/commit/a23fcb82d4ca20cbc4b8cd8b544b2d2eaddd86c3)), closes [#422](https://github.com/taskforcesh/bullmq/issues/422) ([`ff8cde6`](https://github.com/taskforcesh/bullmq/commit/ff8cde6cb8ed13d6bca19802348979caa3669ee6)) - -* chore(release): 1.37.0 [skip ci] - -# [1.37.0](https://github.com/taskforcesh/bullmq/compare/v1.36.1...v1.37.0) (2021-06-30) - -### Features - -* **job:** add changeDelay method for delayed jobs ([f0a9f9c](https://github.com/taskforcesh/bullmq/commit/f0a9f9c6479062413abc0ac9a6f744329571a618)) ([`57f95e0`](https://github.com/taskforcesh/bullmq/commit/57f95e078eb8176973eea0670c56c9f2e3ec524c)) - -* chore(deps): add commitizen - -this is a helper for semantic-release commit messages ([`eacd59b`](https://github.com/taskforcesh/bullmq/commit/eacd59bd67b7c356614d9acd2cc59a8b92f9b396)) - -* chore(release): 1.36.1 [skip ci] - -## [1.36.1](https://github.com/taskforcesh/bullmq/compare/v1.36.0...v1.36.1) (2021-06-22) - -### Bug Fixes - -* **worker:** change active event typing ([220b4f6](https://github.com/taskforcesh/bullmq/commit/220b4f619b30a8f04979e9abd0139e46d89b424d)) ([`5bed98a`](https://github.com/taskforcesh/bullmq/commit/5bed98aa4204d6e6cf7d17233b6ea2d4ab9fcb3c)) - -* chore(release): 1.36.0 [skip ci] - -# [1.36.0](https://github.com/taskforcesh/bullmq/compare/v1.35.0...v1.36.0) (2021-06-20) - -### Bug Fixes - -* **queue-events:** fix drained typing ([9cf711d](https://github.com/taskforcesh/bullmq/commit/9cf711d4d4e7d8214dfd93a243c35d0bf135cdaf)) - -### Features - -* **worker:** add active event typing ([5508cdf](https://github.com/taskforcesh/bullmq/commit/5508cdf7cf372ae2f4af0ef576016eb901580671)) -* **worker:** add progress event typing ([119cb7c](https://github.com/taskforcesh/bullmq/commit/119cb7cd7a91c0f1866f5957faf2850afadbe709)) ([`8d40ddb`](https://github.com/taskforcesh/bullmq/commit/8d40ddbaf1f48dc08e459e085fbe196361bba9a3)) - -* chore(release): 1.35.0 [skip ci] - -# [1.35.0](https://github.com/taskforcesh/bullmq/compare/v1.34.2...v1.35.0) (2021-06-19) - -### Features - -* **worker:** add drained event typing ([ed5f315](https://github.com/taskforcesh/bullmq/commit/ed5f3155415693d2a6dbfb779397d53d74b704e2)) ([`499fe50`](https://github.com/taskforcesh/bullmq/commit/499fe5088aba2f265213b730fd79f3ad6f63b1b9)) - -* chore(release): 1.34.2 [skip ci] - -## [1.34.2](https://github.com/taskforcesh/bullmq/compare/v1.34.1...v1.34.2) (2021-06-18) - -### Bug Fixes - -* **worker:** await for processing functions ([0566804](https://github.com/taskforcesh/bullmq/commit/056680470283f134b447a8ba39afa29e1e113585)) ([`4882e01`](https://github.com/taskforcesh/bullmq/commit/4882e01379efad9b3fe7bff48bb7fbe70f115873)) - -* chore(release): 1.34.1 [skip ci] - -## [1.34.1](https://github.com/taskforcesh/bullmq/compare/v1.34.0...v1.34.1) (2021-06-18) - -### Bug Fixes - -* **redis-connection:** remove error event listener from client ([2d70fe7](https://github.com/taskforcesh/bullmq/commit/2d70fe7cc7d43673674ec2ba0204c10661b34e95)) ([`2b21440`](https://github.com/taskforcesh/bullmq/commit/2b21440f5befd4b95d6be3d8e8235b31279ce0c6)) - -* chore(release): 1.34.0 [skip ci] - -# [1.34.0](https://github.com/taskforcesh/bullmq/compare/v1.33.1...v1.34.0) (2021-06-11) - -### Features - -* **job:** expose queueName ([8683bd4](https://github.com/taskforcesh/bullmq/commit/8683bd470cc7304f087d646fd40c5bc3acc1263c)) ([`a3342b2`](https://github.com/taskforcesh/bullmq/commit/a3342b2aa23ed0606fe97f4aeadad5263038a703)) - -* chore(release): 1.33.1 [skip ci] - -## [1.33.1](https://github.com/taskforcesh/bullmq/compare/v1.33.0...v1.33.1) (2021-06-10) - -### Bug Fixes - -* **job:** destructure default opts for pagination ([73363a5](https://github.com/taskforcesh/bullmq/commit/73363a551f56608f8936ad1f730d0a9c778aafd2)) ([`7dfb343`](https://github.com/taskforcesh/bullmq/commit/7dfb343219737c1a3bef72c5121803b4e7e4fdd6)) - -* chore(release): 1.33.0 [skip ci] - -# [1.33.0](https://github.com/taskforcesh/bullmq/compare/v1.32.0...v1.33.0) (2021-06-10) - -### Features - -* **job:** add getDependenciesCount method ([ae39a4c](https://github.com/taskforcesh/bullmq/commit/ae39a4c77a958242cb445dbb32ae27b15a953653)) ([`a4efbb5`](https://github.com/taskforcesh/bullmq/commit/a4efbb57e29315b7255780569ef2c6c11b4dad6d)) - -* chore(release): 1.32.0 [skip ci] - -# [1.32.0](https://github.com/taskforcesh/bullmq/compare/v1.31.1...v1.32.0) (2021-06-07) - -### Features - -* **flow-producer:** add getFlow method ([ce93d04](https://github.com/taskforcesh/bullmq/commit/ce93d04c962686aff34f670f2decadadbf1cf4ca)) ([`87b3603`](https://github.com/taskforcesh/bullmq/commit/87b360323ed3ab4d43ccd3e278413137479cdf3b)) - -* chore(release): 1.31.1 [skip ci] - -## [1.31.1](https://github.com/taskforcesh/bullmq/compare/v1.31.0...v1.31.1) (2021-06-07) - -### Bug Fixes - -* **worker:** remove processed key when removeOnComplete ([4ec1b73](https://github.com/taskforcesh/bullmq/commit/4ec1b739d6aeeb2fc21887b58f5978027ddcdb50)) ([`7068d4c`](https://github.com/taskforcesh/bullmq/commit/7068d4c2297468714ce1034b16bc9a32e9571d70)) - -* chore(release): 1.31.0 [skip ci] - -# [1.31.0](https://github.com/taskforcesh/bullmq/compare/v1.30.2...v1.31.0) (2021-06-04) - -### Features - -* **job:** extend getDependencies to support pagination ([9b61bbb](https://github.com/taskforcesh/bullmq/commit/9b61bbb9160358f629cd458fa8dc4c9b6ebcd9f5)) ([`d8c67c2`](https://github.com/taskforcesh/bullmq/commit/d8c67c26483c1e38554abdbde240a29b90f1766a)) - -* chore(release): 1.30.2 [skip ci] - -## [1.30.2](https://github.com/taskforcesh/bullmq/compare/v1.30.1...v1.30.2) (2021-06-03) - -### Bug Fixes - -* **job:** parse results in getDependencies for processed jobs ([6fdc701](https://github.com/taskforcesh/bullmq/commit/6fdc7011ba910e5ca9c6d87926cc523ef38ef3ca)) ([`d3335ce`](https://github.com/taskforcesh/bullmq/commit/d3335cee83c3ad93a36066b06111a350b34d0621)) - -* chore(release): 1.30.1 [skip ci] - -## [1.30.1](https://github.com/taskforcesh/bullmq/compare/v1.30.0...v1.30.1) (2021-06-02) - -### Bug Fixes - -* **move-to-waiting-children:** make opts optional ([33bd76a](https://github.com/taskforcesh/bullmq/commit/33bd76a2cac9be450b5d76c6cfe16751c7569ceb)) ([`46e35c3`](https://github.com/taskforcesh/bullmq/commit/46e35c39141573daf0401c8ab79957c84424f1a7)) - -* chore(release): 1.30.0 [skip ci] - -# [1.30.0](https://github.com/taskforcesh/bullmq/compare/v1.29.1...v1.30.0) (2021-06-02) - -### Features - -* add some event typing ([934c004](https://github.com/taskforcesh/bullmq/commit/934c0040b0802bb67f44a979584405d795a8ab5e)) ([`bf17c7b`](https://github.com/taskforcesh/bullmq/commit/bf17c7bf5b30e6c9c566e565400aa0c8f32220ab)) - -* chore(release): 1.29.1 [skip ci] - -## [1.29.1](https://github.com/taskforcesh/bullmq/compare/v1.29.0...v1.29.1) (2021-05-31) - -### Bug Fixes - -* **move-stalled-jobs-to-wait:** send failedReason to queueEvents ([7c510b5](https://github.com/taskforcesh/bullmq/commit/7c510b542558bd4b1330371b73331f37b97a818d)) ([`2b43133`](https://github.com/taskforcesh/bullmq/commit/2b43133875ed67189ca9f6cf1222bf726a941a85)) - -* chore(release): 1.29.0 [skip ci] - -# [1.29.0](https://github.com/taskforcesh/bullmq/compare/v1.28.2...v1.29.0) (2021-05-31) - -### Features - -* add move to waiting children for manual processing ([#477](https://github.com/taskforcesh/bullmq/issues/477)) ([f312f29](https://github.com/taskforcesh/bullmq/commit/f312f293b8cac79af9c14848ffd1b11b65a806c3)) ([`00a8352`](https://github.com/taskforcesh/bullmq/commit/00a8352c7e772df7f0a42812a330b98e50f45de3)) - -* chore(release): 1.28.2 [skip ci] - -## [1.28.2](https://github.com/taskforcesh/bullmq/compare/v1.28.1...v1.28.2) (2021-05-31) - -### Bug Fixes - -* **obliterate:** remove job logs ([ea91895](https://github.com/taskforcesh/bullmq/commit/ea918950d7696241047a23773cc13cd675209c4b)) ([`499bb93`](https://github.com/taskforcesh/bullmq/commit/499bb93c303052af0a2629dbaddd8916dc020fc4)) - -* chore(release): 1.28.1 [skip ci] - -## [1.28.1](https://github.com/taskforcesh/bullmq/compare/v1.28.0...v1.28.1) (2021-05-31) - -### Bug Fixes - -* **get-workers:** use strict equality on name fixes [#564](https://github.com/taskforcesh/bullmq/issues/564) ([4becfa6](https://github.com/taskforcesh/bullmq/commit/4becfa66e09dacf9830804898c45cb3317dcf438)) ([`f8c3a37`](https://github.com/taskforcesh/bullmq/commit/f8c3a3793d25696fd472ad963441836529f356e7)) - -* chore(release): 1.28.0 [skip ci] - -# [1.28.0](https://github.com/taskforcesh/bullmq/compare/v1.27.0...v1.28.0) (2021-05-24) - -### Features - -* **flow-producer:** expose client connection ([17d4263](https://github.com/taskforcesh/bullmq/commit/17d4263abfa57797535cd8773c4cc316ff5149d2)) ([`a3aa689`](https://github.com/taskforcesh/bullmq/commit/a3aa6892fde7fd81e3ad78d664ffd29bca6be249)) - -* chore(release): 1.27.0 [skip ci] - -# [1.27.0](https://github.com/taskforcesh/bullmq/compare/v1.26.5...v1.27.0) (2021-05-24) - -### Features - -* **repeat:** add immediately opt for repeat ([d095573](https://github.com/taskforcesh/bullmq/commit/d095573f8e7ce5911f777df48368382eceb99d6a)) ([`9bad41e`](https://github.com/taskforcesh/bullmq/commit/9bad41e6947f1b16e33839742f055b6c5c2c5bc5)) - -* chore(release): 1.26.5 [skip ci] - -## [1.26.5](https://github.com/taskforcesh/bullmq/compare/v1.26.4...v1.26.5) (2021-05-21) - -### Bug Fixes - -* **movetofinished:** use parent queue for events ([1b17b62](https://github.com/taskforcesh/bullmq/commit/1b17b62a794728a318f1079e73d07e33fe65c9c7)) ([`a283a2b`](https://github.com/taskforcesh/bullmq/commit/a283a2b78a325eb8e7a0531bfe50f726326741c8)) - -* chore(release): 1.26.4 [skip ci] - -## [1.26.4](https://github.com/taskforcesh/bullmq/compare/v1.26.3...v1.26.4) (2021-05-20) - -### Bug Fixes - -* **removejob:** delete processed hash ([a2a5058](https://github.com/taskforcesh/bullmq/commit/a2a5058f18ab77ed4d0114d48f47e6144d632cbf)) ([`c3887d6`](https://github.com/taskforcesh/bullmq/commit/c3887d6ced3035f9a8c2221bd2403427db816fb3)) - -* chore(release): 1.26.3 [skip ci] - -## [1.26.3](https://github.com/taskforcesh/bullmq/compare/v1.26.2...v1.26.3) (2021-05-19) - -### Bug Fixes - -* ensure connection reconnects when pausing fixes [#160](https://github.com/taskforcesh/bullmq/issues/160) ([f38fee8](https://github.com/taskforcesh/bullmq/commit/f38fee84def75dd8a38cbb8bfb5aa662485ddf91)) ([`0eb67d5`](https://github.com/taskforcesh/bullmq/commit/0eb67d5b7b41ca92de35ea24b49e05870fd863b1)) - -* chore(release): 1.26.2 [skip ci] - -## [1.26.2](https://github.com/taskforcesh/bullmq/compare/v1.26.1...v1.26.2) (2021-05-18) - -### Bug Fixes - -* **getjoblogs:** no reversed pagination ([fb0c3a5](https://github.com/taskforcesh/bullmq/commit/fb0c3a50f0d37851a8f35cb4c478259a63d93461)) ([`09bf324`](https://github.com/taskforcesh/bullmq/commit/09bf324ef30d8f6b11ff2e6cb547da467d612d74)) - -* chore: rename CHANGELOG ([`018f10b`](https://github.com/taskforcesh/bullmq/commit/018f10b00d229b0c7fc218a4546670ee9b47e40d)) - -* chore(release): 1.26.1 [skip ci] - -## [1.26.1](https://github.com/taskforcesh/bullmq/compare/v1.26.0...v1.26.1) (2021-05-17) - -### Bug Fixes - -* **flow-producer:** use custom jobId as parentId for children, fixes [#552](https://github.com/taskforcesh/bullmq/issues/552) ([645b576](https://github.com/taskforcesh/bullmq/commit/645b576c1aabd8426ab77a68c199a594867cd729)) ([`a907c6e`](https://github.com/taskforcesh/bullmq/commit/a907c6e56c76b601e0f7ae3db64db7e08355d717)) - -* chore(release): 1.26.0 [skip ci] - -# [1.26.0](https://github.com/taskforcesh/bullmq/compare/v1.25.2...v1.26.0) (2021-05-17) - -### Features - -* **custombackoff:** provide job as third parameter ([ddaf8dc](https://github.com/taskforcesh/bullmq/commit/ddaf8dc2f95ca336cb117a540edd4640d5d579e4)) ([`2656566`](https://github.com/taskforcesh/bullmq/commit/26565660b410c9c38adee13ecbe274b934d2cd64)) - -* chore(release): 1.25.2 [skip ci] - -## [1.25.2](https://github.com/taskforcesh/bullmq/compare/v1.25.1...v1.25.2) (2021-05-17) - -### Bug Fixes - -* **flow-producer:** process parent with children as empty array, fixes [#547](https://github.com/taskforcesh/bullmq/issues/547) ([48168f0](https://github.com/taskforcesh/bullmq/commit/48168f07cbaed7ed522c68d127a0c7d5e4cb380e)) ([`f7601d7`](https://github.com/taskforcesh/bullmq/commit/f7601d7edb36398cf7070c927709c191cabbaebe)) - -* chore: fix changelog file ([`5a9d530`](https://github.com/taskforcesh/bullmq/commit/5a9d530b027bbb8d44af82b2e4f954e8a013d6da)) - -* chore(release): 1.25.1 [skip ci] - -## [1.25.1](https://github.com/taskforcesh/bullmq/compare/v1.25.0...v1.25.1) (2021-05-13) - -### Bug Fixes - -* **addbulk:** should not consider repeat option ([c85357e](https://github.com/taskforcesh/bullmq/commit/c85357e415b9ea66f845f751a4943b5c48c2bb18)) ([`0c50dbf`](https://github.com/taskforcesh/bullmq/commit/0c50dbf958d5778293bfdde5dc2a22c60f6658c3)) - -* chore(release): 1.25.0 [skip ci] - -# [1.25.0](https://github.com/taskforcesh/bullmq/compare/v1.24.5...v1.25.0) (2021-05-11) - -### Features - -* **job:** add sizeLimit option when creating a job ([f10aeeb](https://github.com/taskforcesh/bullmq/commit/f10aeeb62520d20b31d35440524d147ac4adcc9c)) ([`c687877`](https://github.com/taskforcesh/bullmq/commit/c687877156b49feb5228e472750ad8274a454630)) - -* chore(release): 1.24.5 [skip ci] - -## [1.24.5](https://github.com/taskforcesh/bullmq/compare/v1.24.4...v1.24.5) (2021-05-08) - -### Bug Fixes - -* **deps:** upgrading lodash to 4.17.21 ([6e90c3f](https://github.com/taskforcesh/bullmq/commit/6e90c3f0a3d2735875ebf44457b342629aa14572)) ([`d7f8e47`](https://github.com/taskforcesh/bullmq/commit/d7f8e4704feff803399be8a4771967fdc0dd8f3c)) - -* chore(release): 1.24.4 [skip ci] - -## [1.24.4](https://github.com/taskforcesh/bullmq/compare/v1.24.3...v1.24.4) (2021-05-07) - -### Bug Fixes - -* **cluster:** add redis cluster support ([5a7dd14](https://github.com/taskforcesh/bullmq/commit/5a7dd145bd3ae11850cac6d1b4fb9b01af0e6766)) -* **redisclient:** not reference types from import ([022fc04](https://github.com/taskforcesh/bullmq/commit/022fc042a17c1754af7d74acabb7dd5c397576ab)) ([`4c55cfd`](https://github.com/taskforcesh/bullmq/commit/4c55cfdc011101ec2a9598bf470d0113949f1281)) - -* chore(release): 1.24.3 [skip ci] - -## [1.24.3](https://github.com/taskforcesh/bullmq/compare/v1.24.2...v1.24.3) (2021-05-05) - -### Bug Fixes - -* **sandbox:** properly redirect stdout ([#525](https://github.com/taskforcesh/bullmq/issues/525)) ([c8642a0](https://github.com/taskforcesh/bullmq/commit/c8642a0724dc3d2f77abc4b5d6d24efa67c1e592)) ([`caacaee`](https://github.com/taskforcesh/bullmq/commit/caacaeef3147871f9dc1e9849dbffbfd6e8101b4)) - -* chore(release): 1.24.2 [skip ci] - -## [1.24.2](https://github.com/taskforcesh/bullmq/compare/v1.24.1...v1.24.2) (2021-05-05) - -### Bug Fixes - -* **sandbox:** handle broken processor files ([2326983](https://github.com/taskforcesh/bullmq/commit/23269839af0be2f7cf2a4f6062563d30904bc259)) ([`6bdacb8`](https://github.com/taskforcesh/bullmq/commit/6bdacb8a37b85c0d98fdbf501b044aab97f90e28)) - -* chore(release): 1.24.1 [skip ci] - -## [1.24.1](https://github.com/taskforcesh/bullmq/compare/v1.24.0...v1.24.1) (2021-05-05) - -### Bug Fixes - -* **queueevents:** add active type fixes [#519](https://github.com/taskforcesh/bullmq/issues/519) ([10af883](https://github.com/taskforcesh/bullmq/commit/10af883db849cf9392b26724903f88752d9be92c)) ([`7679ada`](https://github.com/taskforcesh/bullmq/commit/7679ada2038ae6c3a3bc66a0f46604e1e47e4950)) - -* chore: replace tslint with eslint ([`5770aef`](https://github.com/taskforcesh/bullmq/commit/5770aef2cc8fd450b619f154236b77b1a0181605)) - -* chore(release): 1.24.0 [skip ci] - -# [1.24.0](https://github.com/taskforcesh/bullmq/compare/v1.23.1...v1.24.0) (2021-05-03) - -### Features - -* add option for non-blocking getNextJob ([13ce2cf](https://github.com/taskforcesh/bullmq/commit/13ce2cfd4ccd64f45567df31de11af95b0fe67d9)) ([`b75b4f1`](https://github.com/taskforcesh/bullmq/commit/b75b4f1b0d63a83f93870c539201aae486782756)) - -* chore(release): 1.23.1 [skip ci] - -## [1.23.1](https://github.com/taskforcesh/bullmq/compare/v1.23.0...v1.23.1) (2021-05-03) - -### Bug Fixes - -* add return type for job.waitUntilFinished() ([59ede97](https://github.com/taskforcesh/bullmq/commit/59ede976061a738503f70d9eb0c92a4b1d6ae4a3)) ([`ed35d24`](https://github.com/taskforcesh/bullmq/commit/ed35d24d1f1e8f810a0a4825c6d7e3732772d7c8)) - -* chore(release): 1.23.0 [skip ci] - -# [1.23.0](https://github.com/taskforcesh/bullmq/compare/v1.22.2...v1.23.0) (2021-04-30) - -### Features - -* **job:** pass parent opts to addBulk ([7f21615](https://github.com/taskforcesh/bullmq/commit/7f216153293e45c4f33f2592561c925ca4464d44)) ([`3283af2`](https://github.com/taskforcesh/bullmq/commit/3283af26c1fead3c3395bf2fc82790cb0772380f)) - -* chore(release): 1.22.2 [skip ci] - -## [1.22.2](https://github.com/taskforcesh/bullmq/compare/v1.22.1...v1.22.2) (2021-04-29) - -### Bug Fixes - -* add missing Redis Cluster types fixes [#406](https://github.com/taskforcesh/bullmq/issues/406) ([07743ff](https://github.com/taskforcesh/bullmq/commit/07743ff310ad716802afdd5bdc6844eb5296318e)) ([`277997d`](https://github.com/taskforcesh/bullmq/commit/277997d0162761921870828e6bf0073d177dc1a4)) - -* chore(release): 1.22.1 [skip ci] - -## [1.22.1](https://github.com/taskforcesh/bullmq/compare/v1.22.0...v1.22.1) (2021-04-28) - -### Bug Fixes - -* **addjob:** fix redis cluster CROSSSLOT ([a5fd1d7](https://github.com/taskforcesh/bullmq/commit/a5fd1d7a0713585d11bd862bfe2d426d5242bd3c)) ([`b34ccd1`](https://github.com/taskforcesh/bullmq/commit/b34ccd1a91f20354ec7a517c54ba4b0ea708f3d3)) - -* chore: barrel export of FlowJob interface ([`c13da36`](https://github.com/taskforcesh/bullmq/commit/c13da36f939f42b8e72a499c5d0b495d7fde8a14)) - -* chore(release): 1.22.0 [skip ci] - -# [1.22.0](https://github.com/taskforcesh/bullmq/compare/v1.21.0...v1.22.0) (2021-04-28) - -### Features - -* **jobcreate:** allow passing parent in job.create ([ede3626](https://github.com/taskforcesh/bullmq/commit/ede3626b65fb5d3f4cebc55c813e9fa4b482b887)) ([`a7cb577`](https://github.com/taskforcesh/bullmq/commit/a7cb57704e4662b15a49228bbee56b346ee56d06)) - -* chore(release): 1.21.0 [skip ci] - -# [1.21.0](https://github.com/taskforcesh/bullmq/compare/v1.20.6...v1.21.0) (2021-04-26) - -### Features - -* add typing for addNextRepeatableJob ([a3be937](https://github.com/taskforcesh/bullmq/commit/a3be9379e29ae3e01264e2269e8b03aa614fd42c)) ([`f4d89f0`](https://github.com/taskforcesh/bullmq/commit/f4d89f0d6b8b5461e3738a71f4554f12d68db4e9)) - -* chore(release): 1.20.6 [skip ci] - -## [1.20.6](https://github.com/taskforcesh/bullmq/compare/v1.20.5...v1.20.6) (2021-04-25) - -### Bug Fixes - -* **movetocompleted:** should not complete before children ([812ff66](https://github.com/taskforcesh/bullmq/commit/812ff664b3e162dd87831ca04ebfdb783cc7ae5b)) ([`7320304`](https://github.com/taskforcesh/bullmq/commit/73203048a5ff085a5d6fe006a1173ca179b8fd5a)) - -* chore(release): 1.20.5 [skip ci] - -## [1.20.5](https://github.com/taskforcesh/bullmq/compare/v1.20.4...v1.20.5) (2021-04-23) - -### Bug Fixes - -* **obliterate:** correctly remove many jobs ([b5ae4ce](https://github.com/taskforcesh/bullmq/commit/b5ae4ce92aeaf000408ffbbcd22d829cee20f2f8)) ([`dacd0c6`](https://github.com/taskforcesh/bullmq/commit/dacd0c66efdba779875239fcab3d18dd6a45e052)) - -* chore(release): 1.20.4 [skip ci] - -## [1.20.4](https://github.com/taskforcesh/bullmq/compare/v1.20.3...v1.20.4) (2021-04-23) - -### Bug Fixes - -* remove internal deps on barrel fixes [#469](https://github.com/taskforcesh/bullmq/issues/469) ([#495](https://github.com/taskforcesh/bullmq/issues/495)) ([60dbeed](https://github.com/taskforcesh/bullmq/commit/60dbeed7ff1d9b6cb0e35590713fee8a7be09477)) ([`9cf71f6`](https://github.com/taskforcesh/bullmq/commit/9cf71f66b965a7cd4d92faf239a0750065b53e1d)) - -* chore(release): 1.20.3 [skip ci] - -## [1.20.3](https://github.com/taskforcesh/bullmq/compare/v1.20.2...v1.20.3) (2021-04-23) - -### Bug Fixes - -* **flows:** correct typings fixes [#492](https://github.com/taskforcesh/bullmq/issues/492) ([a77f80b](https://github.com/taskforcesh/bullmq/commit/a77f80bc07e7627f512323f0dcc9141fe408809e)) ([`3b7c038`](https://github.com/taskforcesh/bullmq/commit/3b7c038a7db24f63b48cbd1d231a6740fef4ea70)) - -* chore(release): 1.20.2 [skip ci] - -## [1.20.2](https://github.com/taskforcesh/bullmq/compare/v1.20.1...v1.20.2) (2021-04-22) - -### Bug Fixes - -* **movetodelayed:** check if job is in active state ([4e63f70](https://github.com/taskforcesh/bullmq/commit/4e63f70aac367d4dd695bbe07c72a08a82a65d97)) ([`582ae51`](https://github.com/taskforcesh/bullmq/commit/582ae517b979d9d07a9c7937c6ff6d3f449c74e9)) - -* chore(release): 1.20.1 [skip ci] - -## [1.20.1](https://github.com/taskforcesh/bullmq/compare/v1.20.0...v1.20.1) (2021-04-22) - -### Bug Fixes - -* **worker:** make token optional in processor function fixes [#490](https://github.com/taskforcesh/bullmq/issues/490) ([3940bd7](https://github.com/taskforcesh/bullmq/commit/3940bd71c6faf3bd5fce572b9c1f11cb5b5d2123)) ([`77cc94b`](https://github.com/taskforcesh/bullmq/commit/77cc94b528f1efb35639eef4a2960c8703f9120b)) - -* chore(npm): just publish dist files (#486) ([`1b06de3`](https://github.com/taskforcesh/bullmq/commit/1b06de395d36a86a9d8e4227e822eb014dafad2c)) - -* chore(release): 1.20.0 [skip ci] - -# [1.20.0](https://github.com/taskforcesh/bullmq/compare/v1.19.3...v1.20.0) (2021-04-21) - -### Features - -* **worker:** passing token in processor function ([2249724](https://github.com/taskforcesh/bullmq/commit/2249724b1bc6fbf40b0291400011f201fd02dab3)) ([`c96032a`](https://github.com/taskforcesh/bullmq/commit/c96032a425a155a8a94c9532d61c70617e4a62d5)) - -* chore(release): 1.19.3 [skip ci] - -## [1.19.3](https://github.com/taskforcesh/bullmq/compare/v1.19.2...v1.19.3) (2021-04-20) - -### Bug Fixes - -* **movetocompleted:** throw an error if job is not in active state ([c2fe5d2](https://github.com/taskforcesh/bullmq/commit/c2fe5d292fcf8ac2e53906c30282df69d43321b1)) ([`0faf083`](https://github.com/taskforcesh/bullmq/commit/0faf08379d6604973686ea1e3643a9603661823c)) - -* chore(release): 1.19.2 [skip ci] - -## [1.19.2](https://github.com/taskforcesh/bullmq/compare/v1.19.1...v1.19.2) (2021-04-19) - -### Bug Fixes - -* **worker:** close base class connection [#451](https://github.com/taskforcesh/bullmq/issues/451) ([0875306](https://github.com/taskforcesh/bullmq/commit/0875306ae801a7cbfe04758dc2481cb86ca2ef69)) ([`7521543`](https://github.com/taskforcesh/bullmq/commit/75215430ab1eb1ac11d447621e42579e026a26b5)) - -* chore(release): 1.19.1 [skip ci] - -## [1.19.1](https://github.com/taskforcesh/bullmq/compare/v1.19.0...v1.19.1) (2021-04-19) - -### Bug Fixes - -* remove repeatable with obliterate ([1c5e581](https://github.com/taskforcesh/bullmq/commit/1c5e581a619ba707863c2a6e9f3e5f6eadfbe64f)) ([`8bccbc3`](https://github.com/taskforcesh/bullmq/commit/8bccbc39412da0c6ff9a2279df7031a3b40763f8)) - -* chore(deps): bump ssri from 6.0.1 to 6.0.2 - -Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2. -- [Release notes](https://github.com/npm/ssri/releases) -- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md) -- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2) - -Signed-off-by: dependabot[bot] <support@github.com> ([`14b2d5e`](https://github.com/taskforcesh/bullmq/commit/14b2d5e2a882f38158b5037eae8ab0e55494bcdb)) - -* chore(release): 1.19.0 [skip ci] - -# [1.19.0](https://github.com/taskforcesh/bullmq/compare/v1.18.2...v1.19.0) (2021-04-19) - -### Features - -* add workerDelay option to limiter ([9b6ab8a](https://github.com/taskforcesh/bullmq/commit/9b6ab8ad4bc0a94068f3bc707ad9c0ed01596068)) ([`cee7a02`](https://github.com/taskforcesh/bullmq/commit/cee7a02d8b08fea11bdff26c896fd2afcc82468d)) - -* chore(release): 1.18.2 [skip ci] - -## [1.18.2](https://github.com/taskforcesh/bullmq/compare/v1.18.1...v1.18.2) (2021-04-16) - -### Bug Fixes - -* add parentKey property to Job ([febc60d](https://github.com/taskforcesh/bullmq/commit/febc60dba94c29b85be3e1bc2547fa83ed932806)) ([`bc66de0`](https://github.com/taskforcesh/bullmq/commit/bc66de0678ccf93ff8add2e20e4b70870e7b641a)) - -* chore(release): 1.18.1 [skip ci] - -## [1.18.1](https://github.com/taskforcesh/bullmq/compare/v1.18.0...v1.18.1) (2021-04-16) - -### Bug Fixes - -* rename Flow to FlowProducer class ([c64321d](https://github.com/taskforcesh/bullmq/commit/c64321d03e2af7cee88eaf6df6cd2e5b7840ae64)) ([`b43431c`](https://github.com/taskforcesh/bullmq/commit/b43431c47defe0b9a68d64fab8c9e09c953281c3)) - -* chore(release): 1.18.0 [skip ci] - -# [1.18.0](https://github.com/taskforcesh/bullmq/compare/v1.17.0...v1.18.0) (2021-04-16) - -### Features - -* add remove support for flows ([4e8a7ef](https://github.com/taskforcesh/bullmq/commit/4e8a7efd53f918937478ae13f5da7dee9ea9d8b3)) ([`301e0fb`](https://github.com/taskforcesh/bullmq/commit/301e0fb9acc1c21ae129bc7e574ad88a4c53b577)) - -* chore(release): 1.17.0 [skip ci] - -# [1.17.0](https://github.com/taskforcesh/bullmq/compare/v1.16.2...v1.17.0) (2021-04-16) - -### Features - -* **job:** consider waiting-children state ([2916dd5](https://github.com/taskforcesh/bullmq/commit/2916dd5d7ba9438d2eae66436899d32ec8ac0e91)) ([`dcb5f5b`](https://github.com/taskforcesh/bullmq/commit/dcb5f5b12b133a60b4ed09cc083915187c84ed2d)) - -* chore(release): 1.16.2 [skip ci] - -## [1.16.2](https://github.com/taskforcesh/bullmq/compare/v1.16.1...v1.16.2) (2021-04-14) - -### Bug Fixes - -* read lua scripts serially ([69e73b8](https://github.com/taskforcesh/bullmq/commit/69e73b87bc6855623240a7b1a45368a7914b23b7)) ([`ca5db26`](https://github.com/taskforcesh/bullmq/commit/ca5db266d7f2407e16c5edb8d068d5d374a902f8)) - -* chore(release): 1.16.1 [skip ci] - -## [1.16.1](https://github.com/taskforcesh/bullmq/compare/v1.16.0...v1.16.1) (2021-04-12) - -### Bug Fixes - -* **flow:** relative dependency path fixes [#466](https://github.com/taskforcesh/bullmq/issues/466) ([d104bf8](https://github.com/taskforcesh/bullmq/commit/d104bf802d6d1000ac1ccd781fa7a07bce2fe140)) ([`c1b5211`](https://github.com/taskforcesh/bullmq/commit/c1b5211fc6455c2b256094b87bffa3f84ff03c12)) - -* chore(release): 1.16.0 [skip ci] - -# [1.16.0](https://github.com/taskforcesh/bullmq/compare/v1.15.1...v1.16.0) (2021-04-12) - -### Features - -* add support for flows (parent-child dependencies) ([#454](https://github.com/taskforcesh/bullmq/issues/454)) ([362212c](https://github.com/taskforcesh/bullmq/commit/362212c58c4be36b5435df862503699deb8bb79c)) ([`d1254fa`](https://github.com/taskforcesh/bullmq/commit/d1254fadc1060260f82490de9aa4d874d6ddcd52)) - -* chore(deps): upgrade ioredis to 4.25.0 ([`bc533ca`](https://github.com/taskforcesh/bullmq/commit/bc533ca119600f92caca020dd280c1011e849417)) - -* chore(release): 1.15.1 [skip ci] - -## [1.15.1](https://github.com/taskforcesh/bullmq/compare/v1.15.0...v1.15.1) (2021-03-19) - -### Bug Fixes - -* **obliterate:** safer implementation ([82f571f](https://github.com/taskforcesh/bullmq/commit/82f571f2548c61c776b897fd1c5050bb09c8afca)) ([`0e0540e`](https://github.com/taskforcesh/bullmq/commit/0e0540e311abcc366f377f70abf68ede78a279ba)) - -* chore(release): 1.15.0 [skip ci] - -# [1.15.0](https://github.com/taskforcesh/bullmq/compare/v1.14.8...v1.15.0) (2021-03-18) - -### Features - -* add method to "obliterate" a queue, fixes [#430](https://github.com/taskforcesh/bullmq/issues/430) ([624be0e](https://github.com/taskforcesh/bullmq/commit/624be0ed48159c2aa405025938925a723330e0c2)) ([`61d39d5`](https://github.com/taskforcesh/bullmq/commit/61d39d55967037378710c811a2cbb837950e220c)) - -* chore(release): 1.14.8 [skip ci] - -## [1.14.8](https://github.com/taskforcesh/bullmq/compare/v1.14.7...v1.14.8) (2021-03-06) - -### Bug Fixes - -* specify promise type to make TS 4.1 and 4.2 happy. ([#418](https://github.com/taskforcesh/bullmq/issues/418)) ([702f609](https://github.com/taskforcesh/bullmq/commit/702f609b410d8b0652c2d0504a8a67526966fdc3)) ([`cd4d02b`](https://github.com/taskforcesh/bullmq/commit/cd4d02bd8b44366ac3060ebbd00bafcf1c2cea3a)) - -* chore(release): 1.14.7 [skip ci] - -## [1.14.7](https://github.com/taskforcesh/bullmq/compare/v1.14.6...v1.14.7) (2021-02-16) - -### Bug Fixes - -* remove "client" property of QueueBaseOptions ([#324](https://github.com/taskforcesh/bullmq/issues/324)) ([e0b9e71](https://github.com/taskforcesh/bullmq/commit/e0b9e71c4da4a93af54c4386af461c61ab5f146c)) ([`9d0f6e7`](https://github.com/taskforcesh/bullmq/commit/9d0f6e76dfc4f918e039986d9666d5ed485f4904)) - -* chore(release): 1.14.6 [skip ci] - -## [1.14.6](https://github.com/taskforcesh/bullmq/compare/v1.14.5...v1.14.6) (2021-02-16) - -### Bug Fixes - -* remove next job in removeRepeatableByKey fixes [#165](https://github.com/taskforcesh/bullmq/issues/165) ([fb3a7c2](https://github.com/taskforcesh/bullmq/commit/fb3a7c2f429d535dd9f038687d7230d61201defc)) ([`5e6631e`](https://github.com/taskforcesh/bullmq/commit/5e6631e7c3f40b7857d2f73b48abfd3f9d072b35)) - -* chore(release): 1.14.5 [skip ci] - -## [1.14.5](https://github.com/taskforcesh/bullmq/compare/v1.14.4...v1.14.5) (2021-02-16) - -### Bug Fixes - -* add jobId support to repeatable jobs fixes [#396](https://github.com/taskforcesh/bullmq/issues/396) ([c2dc669](https://github.com/taskforcesh/bullmq/commit/c2dc6693a4546e547245bc7ec1e71b4841829619)) ([`c5e3a2a`](https://github.com/taskforcesh/bullmq/commit/c5e3a2a73e0714649a3d975d15a45cbcb255db45)) - -* chore(release): 1.14.4 [skip ci] - -## [1.14.4](https://github.com/taskforcesh/bullmq/compare/v1.14.3...v1.14.4) (2021-02-08) - -### Bug Fixes - -* reconnect at start fixes [#337](https://github.com/taskforcesh/bullmq/issues/337) ([fb33772](https://github.com/taskforcesh/bullmq/commit/fb3377280b3bda04a15a62d2901bdd78b869e08c)) ([`e0f56b3`](https://github.com/taskforcesh/bullmq/commit/e0f56b3ce656cf5b609996905b14caf4d1fcb3ab)) - -* chore(release): 1.14.3 [skip ci] - -## [1.14.3](https://github.com/taskforcesh/bullmq/compare/v1.14.2...v1.14.3) (2021-02-07) - -### Bug Fixes - -* **worker:** avoid possible infinite loop fixes [#389](https://github.com/taskforcesh/bullmq/issues/389) ([d05566e](https://github.com/taskforcesh/bullmq/commit/d05566ec0153f31a1257f7338399fdb55c959487)) ([`8266fcc`](https://github.com/taskforcesh/bullmq/commit/8266fccc4bbac63a2a0509e4df749a2b07fc72d9)) - -* chore(release): 1.14.2 [skip ci] - -## [1.14.2](https://github.com/taskforcesh/bullmq/compare/v1.14.1...v1.14.2) (2021-02-02) - -### Bug Fixes - -* improve job timeout notification by giving the job name and id in the error message ([#387](https://github.com/taskforcesh/bullmq/issues/387)) ([ca886b1](https://github.com/taskforcesh/bullmq/commit/ca886b1f854051aed0888f5b872a64b052b2383e)) ([`c76d3f9`](https://github.com/taskforcesh/bullmq/commit/c76d3f9547fc88c286b171982ff07ce4e6c0ff33)) - -* chore(release): 1.14.1 [skip ci] - -## [1.14.1](https://github.com/taskforcesh/bullmq/compare/v1.14.0...v1.14.1) (2021-02-01) - -### Bug Fixes - -* job finish queue events race condition ([355bca5](https://github.com/taskforcesh/bullmq/commit/355bca5ee128bf4ff37608746f9c6f7cca580eb0)) ([`a14e1ad`](https://github.com/taskforcesh/bullmq/commit/a14e1ada63c884d2a7a4e4f8539ef68230f83bea)) - -* chore(redis-connection): add explicit promise type - -Silences a typescript warning when viewing the file. ([`12441ca`](https://github.com/taskforcesh/bullmq/commit/12441caee941226a6b60b8a8763a7b7edd7d6cc3)) - -* chore(release): 1.14.0 [skip ci] - -# [1.14.0](https://github.com/taskforcesh/bullmq/compare/v1.13.0...v1.14.0) (2021-01-06) - -### Features - -* **job:** expose extendLock as a public method ([17e8431](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)) - -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api - -api-extractor 7.12.1 - https://api-extractor.com/ - -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 - -API Extractor completed with warnings - -api-documenter 7.12.1 - https://api-extractor.com/ - -Reading bullmq.api.json - -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 5.00s. ([`8a2a748`](https://github.com/taskforcesh/bullmq/commit/8a2a748a86ca799fcd72d4b00fc9a10048e46d4c)) - -* chore(release): 1.13.0 [skip ci] - -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) - -### Features - -* **job:** expose extendLock as a public method ([17e8431](https://github.com/taskforcesh/bullmq/commit/17e8431af8bba58612bf9913c63ab5d38afecbb9)) -* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) - -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api - -api-extractor 7.12.1 - https://api-extractor.com/ - -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 - -API Extractor completed with warnings - -api-documenter 7.12.1 - https://api-extractor.com/ - -Reading bullmq.api.json - -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 4.76s. ([`a75f4d5`](https://github.com/taskforcesh/bullmq/commit/a75f4d5fc1fa30ea0d537f0a07fbbbbd6f838275)) - -* chore(release): 1.13.0 [skip ci] - -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) - -### Features - -* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) - -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api - -api-extractor 7.12.1 - https://api-extractor.com/ - -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 - -API Extractor completed with warnings - -api-documenter 7.12.1 - https://api-extractor.com/ - -Reading bullmq.api.json - -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 5.09s. ([`6e9a359`](https://github.com/taskforcesh/bullmq/commit/6e9a359a729a7deefa0a7a9a636ae9b8bd2dcf8e)) - -* chore(release): 1.13.0 [skip ci] - -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) - -### Features - -* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) - -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api - -api-extractor 7.12.1 - https://api-extractor.com/ - -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 - -API Extractor completed with warnings - -api-documenter 7.12.1 - https://api-extractor.com/ - -Reading bullmq.api.json - -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 4.75s. ([`8504d5b`](https://github.com/taskforcesh/bullmq/commit/8504d5b9d76bac9f3962e2362df32591b366fdcf)) - -* chore(release): 1.13.0 [skip ci] - -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2021-01-06) - -### Features - -* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) - -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api - -api-extractor 7.12.1 - https://api-extractor.com/ - -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 - -API Extractor completed with warnings - -api-documenter 7.12.1 - https://api-extractor.com/ - -Reading bullmq.api.json - -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 5.06s. ([`1d83485`](https://github.com/taskforcesh/bullmq/commit/1d83485e284033d702ef3364e5436880966fb95a)) - -* chore(release): 1.13.0 [skip ci] - -# [1.13.0](https://github.com/taskforcesh/bullmq/compare/v1.12.3...v1.13.0) (2020-12-30) - -### Features - -* add support for manually processing jobs fixes [#327](https://github.com/taskforcesh/bullmq/issues/327) ([e42bfd2](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) - -yarn run v1.22.5 -$ (api-extractor run || true) && api-documenter markdown -i ./temp -o docs/gitbook/api - -api-extractor 7.12.1 - https://api-extractor.com/ - -Using configuration from ./config/api-extractor.json -Analysis will use the bundled TypeScript version 4.0.5 - -API Extractor completed with warnings - -api-documenter 7.12.1 - https://api-extractor.com/ - -Reading bullmq.api.json - -Deleting old output from docs/gitbook/api -Writing bullmq package -Done in 4.57s. ([`57b37ea`](https://github.com/taskforcesh/bullmq/commit/57b37ea886c9d86912f49d2d8d77cf3f97eda265)) - -* chore: remove api symlink ([`6731f8a`](https://github.com/taskforcesh/bullmq/commit/6731f8a36e2ea88f448034194347ffbeb857d17c)) - -* chore: add api-extractor config ([`6850f87`](https://github.com/taskforcesh/bullmq/commit/6850f874d4b1bcac6fad5df3bc6f5b6f427c2370)) - -* chore(deps-dev): bump semantic-release from 15.14.0 to 17.2.3 - -Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 15.14.0 to 17.2.3. -- [Release notes](https://github.com/semantic-release/semantic-release/releases) -- [Commits](https://github.com/semantic-release/semantic-release/compare/v15.14.0...v17.2.3) - -Signed-off-by: dependabot[bot] <support@github.com> ([`d0b23c7`](https://github.com/taskforcesh/bullmq/commit/d0b23c7f408a8a7b99eaa1215847f4addef9f635)) - -* chore(release): 1.12.3 [skip ci]nn## [1.12.3](https://github.com/taskforcesh/bullmq/compare/v1.12.2...v1.12.3) (2020-12-28) - -### Bug Fixes - -* correctly handle "falsy" data values fixes [#264](https://github.com/taskforcesh/bullmq/issues/264) ([becad91](https://github.com/taskforcesh/bullmq/commit/becad91350fd4ac01037e5b0d4a8a93724dd8dbd)) -* **worker:** setname on worker blocking connection ([645b633](https://github.com/taskforcesh/bullmq/commit/645b6338f5883b0c21ae78007777d86b45422615)) ([`7e84155`](https://github.com/taskforcesh/bullmq/commit/7e841558d9406d4acd6210b4c7e9181fc2b5835b)) - -* chore(release): 1.12.2 [skip ci]nn## [1.12.2](https://github.com/taskforcesh/bullmq/compare/v1.12.1...v1.12.2) (2020-12-23) - -### Bug Fixes - -* catch errors from Repeat ([#348](https://github.com/taskforcesh/bullmq/issues/348)) ([09a1a98](https://github.com/taskforcesh/bullmq/commit/09a1a98fc42dc1a9ae98bfb29c0cca3fac02013f)) ([`971a079`](https://github.com/taskforcesh/bullmq/commit/971a079b1b9e3c1b962821bf759dc8c7c9792a94)) - -* chore(release): 1.12.1 [skip ci]nn## [1.12.1](https://github.com/taskforcesh/bullmq/compare/v1.12.0...v1.12.1) (2020-12-21) - -### Bug Fixes - -* correctly handle "falsy" data values fixes [#264](https://github.com/taskforcesh/bullmq/issues/264) ([cf1dbaf](https://github.com/taskforcesh/bullmq/commit/cf1dbaf7e60d74fc8443a5f8a537455f28a8dba3)) ([`cc1471e`](https://github.com/taskforcesh/bullmq/commit/cc1471ed703b80da8324b7f29404a1120f27d826)) - -* chore(release): 1.12.0 [skip ci]nn# [1.12.0](https://github.com/taskforcesh/bullmq/compare/v1.11.2...v1.12.0) (2020-12-16) - -### Features - -* add ability to get if queue is paused or not ([e98b7d8](https://github.com/taskforcesh/bullmq/commit/e98b7d8973df830cc29e0afc5d86e82c9a7ce76f)) ([`c853787`](https://github.com/taskforcesh/bullmq/commit/c85378794f58574d4b382001f457388e5af8f90b)) - -* chore(release): 1.11.2 [skip ci]nn## [1.11.2](https://github.com/taskforcesh/bullmq/compare/v1.11.1...v1.11.2) (2020-12-15) - -### Bug Fixes - -* promote jobs to the right "list" when paused ([d3df615](https://github.com/taskforcesh/bullmq/commit/d3df615d37b1114c02eacb45f23643ee2f05374d)) ([`49fe957`](https://github.com/taskforcesh/bullmq/commit/49fe95787794e5778bbffd04afe9ba23dc9c9db8)) - -* chore(release): 1.11.1 [skip ci]nn## [1.11.1](https://github.com/taskforcesh/bullmq/compare/v1.11.0...v1.11.1) (2020-12-15) - -### Bug Fixes - -* clientCommandMessageReg to support GCP memorystore v5 ([8408dda](https://github.com/taskforcesh/bullmq/commit/8408dda9fa64fc0b968e88fb2726e0a30f717ed7)) ([`9aba722`](https://github.com/taskforcesh/bullmq/commit/9aba722f41b390b5a5eeeeeba7c51b4f87cd87c7)) - -* chore(deps): bump ini from 1.3.5 to 1.3.7 - -Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. -- [Release notes](https://github.com/isaacs/ini/releases) -- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) - -Signed-off-by: dependabot[bot] <support@github.com> ([`b0121b2`](https://github.com/taskforcesh/bullmq/commit/b0121b216a5853acd88c7948541d2f8678a4a91f)) - -* chore(release): 1.11.0 [skip ci]nn# [1.11.0](https://github.com/taskforcesh/bullmq/compare/v1.10.0...v1.11.0) (2020-11-24) - -### Bug Fixes - -* add generic type to processor ([d4f6501](https://github.com/taskforcesh/bullmq/commit/d4f650120804bd6161f0eeda5162ad5a96811a05)) - -### Features - -* add name and return types to queue, worker and processor ([4879715](https://github.com/taskforcesh/bullmq/commit/4879715ec7c917f11e3a0ac3c5f5126029340ed3)) ([`4495e1d`](https://github.com/taskforcesh/bullmq/commit/4495e1d301e2c16310afabc42ebd284b9ad20363)) - -* chore(release): 1.10.0 [skip ci]nn# [1.10.0](https://github.com/taskforcesh/bullmq/compare/v1.9.0...v1.10.0) (2020-10-20) - -### Bug Fixes - -* **job:** remove listeners before resolving promise ([563ce92](https://github.com/taskforcesh/bullmq/commit/563ce9218f5dd81f2bc836f9e8ccdedc549f09dd)) -* **worker:** continue processing if handleFailed fails. fixes [#286](https://github.com/taskforcesh/bullmq/issues/286) ([4ef1cbc](https://github.com/taskforcesh/bullmq/commit/4ef1cbc13d53897b57ae3d271afbaa1b213824aa)) -* **worker:** fix memory leak on Promise.race ([#282](https://github.com/taskforcesh/bullmq/issues/282)) ([a78ab2b](https://github.com/taskforcesh/bullmq/commit/a78ab2b362e54f897eec6c8b16f16ecccf7875c2)) -* **worker:** setname on worker blocking connection ([#291](https://github.com/taskforcesh/bullmq/issues/291)) ([50a87fc](https://github.com/taskforcesh/bullmq/commit/50a87fcb1dab976a6a0273d2b0cc4b31b63c015f)) -* remove async for loop in child pool fixes [#229](https://github.com/taskforcesh/bullmq/issues/229) ([d77505e](https://github.com/taskforcesh/bullmq/commit/d77505e989cd1395465c5222613555f79e4d9720)) - -### Features - -* **sandbox:** kill child workers gracefully ([#243](https://github.com/taskforcesh/bullmq/issues/243)) ([4262837](https://github.com/taskforcesh/bullmq/commit/4262837bc67e007fe44606670dce48ee7fec65cd)) ([`c03219c`](https://github.com/taskforcesh/bullmq/commit/c03219c38fcf42957b705384dd1fb4bfaa86b075)) - -* chore(release): 1.9.0 [skip ci]nn# [1.9.0](https://github.com/taskforcesh/bullmq/compare/v1.8.14...v1.9.0) (2020-07-19) - -### Features - -* add grouped rate limiting ([3a958dd](https://github.com/taskforcesh/bullmq/commit/3a958dd30d09a049b0d761679d3b8d92709e815e)) ([`30aa033`](https://github.com/taskforcesh/bullmq/commit/30aa0330dd2a8fbe3f692b3e3fc6091a4f0593af)) - -* chore(deps): bump lodash from 4.17.15 to 4.17.19 - -Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. -- [Release notes](https://github.com/lodash/lodash/releases) -- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) - -Signed-off-by: dependabot[bot] <support@github.com> ([`7f986fc`](https://github.com/taskforcesh/bullmq/commit/7f986fc17c067263238fbe1e285ff0ef08570445)) - -* chore(release): 1.8.14 [skip ci]nn## [1.8.14](https://github.com/taskforcesh/bullmq/compare/v1.8.13...v1.8.14) (2020-07-03) - -### Bug Fixes - -* **typescript:** fix typings, upgrade ioredis dependencies ([#220](https://github.com/taskforcesh/bullmq/issues/220)) ([7059f20](https://github.com/taskforcesh/bullmq/commit/7059f2089553a206ab3937f7fd0d0b9de96aa7b7)) -* **worker:** return this.closing when calling close ([b68c845](https://github.com/taskforcesh/bullmq/commit/b68c845c77de6b2973ec31d2f22958ab60ad87aa)) ([`3f3f2a9`](https://github.com/taskforcesh/bullmq/commit/3f3f2a9563387312e7dd14a0efaa5f87ff3b71c3)) - -* chore(release): 1.8.13 [skip ci]nn## [1.8.13](https://github.com/taskforcesh/bullmq/compare/v1.8.12...v1.8.13) (2020-06-05) - -### Bug Fixes - -* **redis-connection:** run the load command for reused redis client ([fab9bba](https://github.com/taskforcesh/bullmq/commit/fab9bba4caee8fd44523febb3bde588b151e8514)) ([`47d0827`](https://github.com/taskforcesh/bullmq/commit/47d0827b225bab4420647bfcd5eb551db0175269)) - -* chore(release): 1.8.12 [skip ci]nn## [1.8.12](https://github.com/taskforcesh/bullmq/compare/v1.8.11...v1.8.12) (2020-06-04) - -### Bug Fixes - -* remove unused options ([23aadc3](https://github.com/taskforcesh/bullmq/commit/23aadc300b947693f4afb22296d236a924bd11ca)) ([`5e808ad`](https://github.com/taskforcesh/bullmq/commit/5e808ad92ab510400b4f5f223db3e0b4ed6af09c)) - -* chore(release): 1.8.11 [skip ci]nn## [1.8.11](https://github.com/taskforcesh/bullmq/compare/v1.8.10...v1.8.11) (2020-05-29) - -### Bug Fixes - -* **scheduler:** remove unnecessary division by 4096 ([4d25e95](https://github.com/taskforcesh/bullmq/commit/4d25e95f9522388bd85e932e04b6668e3da57686)) ([`c608a3f`](https://github.com/taskforcesh/bullmq/commit/c608a3fdf7e7c9031998a5695d387eb2a7797b6f)) - -* chore(release): 1.8.10 [skip ci]nn## [1.8.10](https://github.com/taskforcesh/bullmq/compare/v1.8.9...v1.8.10) (2020-05-28) - -### Bug Fixes - -* **scheduler:** divide timestamp by 4096 in update set fixes [#168](https://github.com/taskforcesh/bullmq/issues/168) ([0c5db83](https://github.com/taskforcesh/bullmq/commit/0c5db8391bb8994bee19f25a33efb9dfee792d7b)) ([`183137a`](https://github.com/taskforcesh/bullmq/commit/183137a8f4c9dafada20096ee07aba4bd1ecb35a)) - -* chore(release): 1.8.9 [skip ci]nn## [1.8.9](https://github.com/taskforcesh/bullmq/compare/v1.8.8...v1.8.9) (2020-05-25) - -### Bug Fixes - -* **scheduler:** divide next timestamp by 4096 ([#204](https://github.com/taskforcesh/bullmq/issues/204)) ([9562d74](https://github.com/taskforcesh/bullmq/commit/9562d74625e20b7b6de8750339c85345ba027357)) ([`e126c25`](https://github.com/taskforcesh/bullmq/commit/e126c25e61b36f484a7b4b753be4789001b8dcf8)) - -* chore(deps): bump jquery from 3.4.1 to 3.5.1 - -Bumps [jquery](https://github.com/jquery/jquery) from 3.4.1 to 3.5.1. -- [Release notes](https://github.com/jquery/jquery/releases) -- [Commits](https://github.com/jquery/jquery/compare/3.4.1...3.5.1) - -Signed-off-by: dependabot[bot] <support@github.com> ([`6ec5517`](https://github.com/taskforcesh/bullmq/commit/6ec5517d5de6a55482f0fb598367b64c1c65cdef)) - -* chore(release): 1.8.8 [skip ci]nn## [1.8.8](https://github.com/taskforcesh/bullmq/compare/v1.8.7...v1.8.8) (2020-05-25) - -### Bug Fixes - -* **queue-base:** error event is passed through ([ad14e77](https://github.com/taskforcesh/bullmq/commit/ad14e777171c0c44b7e50752d9847dec23f46158)) -* **redis-connection:** error event is passed through ([a15b1a1](https://github.com/taskforcesh/bullmq/commit/a15b1a1824c6863ecf3e5132e22924fc3ff161f6)) -* **worker:** error event is passed through ([d7f0374](https://github.com/taskforcesh/bullmq/commit/d7f03749ce300e917399a435a3f426e66145dd8c)) ([`75eeef2`](https://github.com/taskforcesh/bullmq/commit/75eeef2031fb862fd35b769cf81d12642bad811c)) - -* chore(release): 1.8.7 [skip ci]nn## [1.8.7](https://github.com/taskforcesh/bullmq/compare/v1.8.6...v1.8.7) (2020-04-10) - -### Bug Fixes - -* **worker:** do not use global child pool fixes [#172](https://github.com/taskforcesh/bullmq/issues/172) ([bc65f26](https://github.com/taskforcesh/bullmq/commit/bc65f26dd47c59d0a7277ac947140405557be9a5)) ([`5ef3e12`](https://github.com/taskforcesh/bullmq/commit/5ef3e12afc936b0db23de6787cf62ec9bd262f42)) - -* chore(release): 1.8.6 [skip ci]nn## [1.8.6](https://github.com/taskforcesh/bullmq/compare/v1.8.5...v1.8.6) (2020-04-10) - -### Bug Fixes - -* **workers:** do not call super.close() ([ebd2ae1](https://github.com/taskforcesh/bullmq/commit/ebd2ae1a5613d71643c5a7ba3f685d77585de68e)) -* make sure closing is returned in every close call ([88c5948](https://github.com/taskforcesh/bullmq/commit/88c5948d33a9a7b7a4f4f64f3183727b87d80207)) -* **scheduler:** duplicate connections fixes [#174](https://github.com/taskforcesh/bullmq/issues/174) ([011b8ac](https://github.com/taskforcesh/bullmq/commit/011b8acfdec54737d94a9fead2423e060e3364db)) -* **worker:** return this.closing when calling close ([06d3d4f](https://github.com/taskforcesh/bullmq/commit/06d3d4f476444a2d2af8538d60cb2561a1915868)) ([`4654721`](https://github.com/taskforcesh/bullmq/commit/46547217fe04853b50d29b83d95c1e6f29a184de)) - -* chore(release): 1.8.5 [skip ci]nn## [1.8.5](https://github.com/taskforcesh/bullmq/compare/v1.8.4...v1.8.5) (2020-04-05) - -### Bug Fixes - -* removed deprecated and unused node-uuid ([c810579](https://github.com/taskforcesh/bullmq/commit/c810579029d33ef47d5a7563e63126a69c62fd87)) ([`88ef30b`](https://github.com/taskforcesh/bullmq/commit/88ef30b1ff2ec0a037bf2cd69e8558687bbeb70e)) - -* chore(release): 1.8.4 [skip ci]nn## [1.8.4](https://github.com/taskforcesh/bullmq/compare/v1.8.3...v1.8.4) (2020-03-17) - -### Bug Fixes - -* **job:** added nullable/optional properties ([cef134f](https://github.com/taskforcesh/bullmq/commit/cef134f7c4d87e1b80ba42a5e06c3877956ff4cc)) ([`5c656cb`](https://github.com/taskforcesh/bullmq/commit/5c656cb231e0d001f3c18937cfb6b11b1f4f480d)) - -* chore(release): 1.8.3 [skip ci]nn## [1.8.3](https://github.com/taskforcesh/bullmq/compare/v1.8.2...v1.8.3) (2020-03-13) - -### Bug Fixes - -* **sandbox:** If the child process is killed, remove it from the pool. ([8fb0fb5](https://github.com/taskforcesh/bullmq/commit/8fb0fb569a0236b37d3bae06bf58a2a1da3221c6)) ([`acf3159`](https://github.com/taskforcesh/bullmq/commit/acf3159650b9afabc23db4db6d8a445e3ec02b72)) - -* chore(release): 1.8.2 [skip ci]nn## [1.8.2](https://github.com/taskforcesh/bullmq/compare/v1.8.1...v1.8.2) (2020-03-03) - -### Bug Fixes - -* restore the Job timestamp when deserializing JSON data ([#138](https://github.com/taskforcesh/bullmq/issues/138)) ([#152](https://github.com/taskforcesh/bullmq/issues/152)) ([c171bd4](https://github.com/taskforcesh/bullmq/commit/c171bd47f7b75378e75307a1decdc0f630ac1cd6)) ([`b96f5ba`](https://github.com/taskforcesh/bullmq/commit/b96f5ba3e9c36182174300af629b34fe43c62ecd)) - -* chore(release): 1.8.1 [skip ci]nn## [1.8.1](https://github.com/taskforcesh/bullmq/compare/v1.8.0...v1.8.1) (2020-03-02) - -### Bug Fixes - -* modified imports to work when esModuleInterop is disabled ([#132](https://github.com/taskforcesh/bullmq/issues/132)) ([01681f2](https://github.com/taskforcesh/bullmq/commit/01681f282bafac2df2c602edb51d6bde3483896c)) ([`fccacee`](https://github.com/taskforcesh/bullmq/commit/fccacee7164155ea1fdf5bee163dd56103cfb223)) - -* chore(release): 1.8.0 [skip ci]nn# [1.8.0](https://github.com/taskforcesh/bullmq/compare/v1.7.0...v1.8.0) (2020-03-02) - -### Bug Fixes - -* cleanup signatures for queue add and addBulk ([#127](https://github.com/taskforcesh/bullmq/issues/127)) ([48e221b](https://github.com/taskforcesh/bullmq/commit/48e221b53909079a4def9c48c1b69cebabd0ed74)) -* exit code 12 when using inspect with child process ([#137](https://github.com/taskforcesh/bullmq/issues/137)) ([43ebc67](https://github.com/taskforcesh/bullmq/commit/43ebc67cec3e8f283f9a555b4466cf918226687b)) - -### Features - -* **types:** add sandboxed job processor types ([#114](https://github.com/taskforcesh/bullmq/issues/114)) ([a50a88c](https://github.com/taskforcesh/bullmq/commit/a50a88cd1658fa9d568235283a4c23a74eb8ed2a)) ([`5cde2fa`](https://github.com/taskforcesh/bullmq/commit/5cde2faa699344ffa3c948aea2214723eeda37d1)) - -* chore(release): 1.7.0 [skip ci]nn# [1.7.0](https://github.com/taskforcesh/bullmq/compare/v1.6.8...v1.7.0) (2020-03-02) - -### Features - -* made queue name publicly readable for [#140](https://github.com/taskforcesh/bullmq/issues/140) ([f2bba2e](https://github.com/taskforcesh/bullmq/commit/f2bba2efd9d85986b01bb35c847a232b5c42ae57)) ([`dbf19de`](https://github.com/taskforcesh/bullmq/commit/dbf19de422b889574aa055ad08f677050bffb762)) - -* chore(release): 1.6.8 [skip ci]nn## [1.6.8](https://github.com/taskforcesh/bullmq/compare/v1.6.7...v1.6.8) (2020-02-22) - -### Bug Fixes - -* modified QueueGetters.getJob and Job.fromId to also return null to ([65183fc](https://github.com/taskforcesh/bullmq/commit/65183fcf542d0227ec1d4d6637b46b5381331787)) -* modified QueueGetters.getJob and Job.fromId to return undefined ([ede352b](https://github.com/taskforcesh/bullmq/commit/ede352be75ffe05bf633516db9eda88467c562bf)) ([`293ef56`](https://github.com/taskforcesh/bullmq/commit/293ef569460d076bdedc62f60e3d520fa6ccab33)) - -* chore(release): 1.6.7 [skip ci]nn## [1.6.7](https://github.com/taskforcesh/bullmq/compare/v1.6.6...v1.6.7) (2020-01-16) - -### Bug Fixes - -* don't fail a job when the worker already lost the lock ([23c0bf7](https://github.com/taskforcesh/bullmq/commit/23c0bf70eab6d166b0483336f103323d1bf2ca64)) ([`9d796a1`](https://github.com/taskforcesh/bullmq/commit/9d796a14258061e4b52063150e1d307799ce9019)) - -* chore(release): 1.6.6 [skip ci]nn## [1.6.6](https://github.com/taskforcesh/bullmq/compare/v1.6.5...v1.6.6) (2020-01-05) - -### Bug Fixes - -* remove duplicate active entry ([1d2cca3](https://github.com/taskforcesh/bullmq/commit/1d2cca38ee61289adcee4899a91f7dcbc93a7c05)) ([`6553a20`](https://github.com/taskforcesh/bullmq/commit/6553a204dbd9c08e84fc4e173b5363610a789ad5)) - -* chore(release): 1.6.5 [skip ci]nn## [1.6.5](https://github.com/taskforcesh/bullmq/compare/v1.6.4...v1.6.5) (2020-01-05) - -### Bug Fixes - -* get rid of flushdb/flushall in tests ([550c67b](https://github.com/taskforcesh/bullmq/commit/550c67b25de5f6d800e5e317398044cd16b85924)) ([`0097592`](https://github.com/taskforcesh/bullmq/commit/00975929ec559594bafb8fa1c4c7e75f87db912a)) - -* chore(release): 1.6.4 [skip ci]nn## [1.6.4](https://github.com/taskforcesh/bullmq/compare/v1.6.3...v1.6.4) (2020-01-05) - -### Bug Fixes - -* delete logs when cleaning jobs in set ([b11c6c7](https://github.com/taskforcesh/bullmq/commit/b11c6c7c9f4f1c49eac93b98fdc93ac8f861c8b2)) ([`d3b0ab0`](https://github.com/taskforcesh/bullmq/commit/d3b0ab09b5aeb3bc88b42f9e38efab0724dfa08f)) - -* chore(release): 1.6.3 [skip ci]nn## [1.6.3](https://github.com/taskforcesh/bullmq/compare/v1.6.2...v1.6.3) (2020-01-01) - -### Bug Fixes - -* add tslib dependency fixes [#65](https://github.com/taskforcesh/bullmq/issues/65) ([7ad7995](https://github.com/taskforcesh/bullmq/commit/7ad799544a9c30b30aa96df8864119159c9a1185)) ([`e4c47ae`](https://github.com/taskforcesh/bullmq/commit/e4c47aefb16df401e0a8a84981e2cce233a550ec)) - -* chore(release): 1.6.2 [skip ci]nn## [1.6.2](https://github.com/taskforcesh/bullmq/compare/v1.6.1...v1.6.2) (2019-12-16) - -### Bug Fixes - -* change default QueueEvents lastEventId to $ ([3c5b01d](https://github.com/taskforcesh/bullmq/commit/3c5b01d16ee1442f5802a0fe4e7675c14f7a7f1f)) -* ensure QE ready before adding test events ([fd190f4](https://github.com/taskforcesh/bullmq/commit/fd190f4be792b03273481c8aaf73be5ca42663d1)) -* explicitly test the behavior of .on and .once ([ea11087](https://github.com/taskforcesh/bullmq/commit/ea11087b292d9325105707b53f92ac61c334a147)) ([`9b4042d`](https://github.com/taskforcesh/bullmq/commit/9b4042da2977178d007cb4f07686be897172792b)) - -* chore(release): 1.6.1 [skip ci]nn## [1.6.1](https://github.com/taskforcesh/bullmq/compare/v1.6.0...v1.6.1) (2019-12-16) - -### Bug Fixes - -* check of existing redis instance ([dd466b3](https://github.com/taskforcesh/bullmq/commit/dd466b332b03b430108126531d59ff9e66ce9521)) ([`5410d23`](https://github.com/taskforcesh/bullmq/commit/5410d23b2cf7d19bf14c4c089874b9630237fa42)) - -* chore(deps): bump npm from 6.12.0 to 6.13.4 - -Bumps [npm](https://github.com/npm/cli) from 6.12.0 to 6.13.4. -- [Release notes](https://github.com/npm/cli/releases) -- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md) -- [Commits](https://github.com/npm/cli/compare/v6.12.0...v6.13.4) - -Signed-off-by: dependabot[bot] <support@github.com> ([`4780be2`](https://github.com/taskforcesh/bullmq/commit/4780be24fe8233f778fbb871bef2cafe9a0c37fe)) - -* chore(release): 1.6.0 [skip ci]nn# [1.6.0](https://github.com/taskforcesh/bullmq/compare/v1.5.0...v1.6.0) (2019-12-12) - -### Features - -* add generic type to job data and return value ([87c0531](https://github.com/taskforcesh/bullmq/commit/87c0531efc2716db37f8a0886848cdb786709554)) ([`fd5e524`](https://github.com/taskforcesh/bullmq/commit/fd5e524d7435df6ad0c1c805b9ed56293fc39101)) - -* chore(release): 1.5.0 [skip ci]nn# [1.5.0](https://github.com/taskforcesh/bullmq/compare/v1.4.3...v1.5.0) (2019-11-22) - -### Features - -* remove delay dependency ([97e1a30](https://github.com/taskforcesh/bullmq/commit/97e1a3015d853e615ddd623af07f12a194ccab2c)) -* remove dependence on Bluebird.delay [#67](https://github.com/taskforcesh/bullmq/issues/67) ([bedbaf2](https://github.com/taskforcesh/bullmq/commit/bedbaf25af6479e387cd7548e246dca7c72fc140)) ([`e8e37cf`](https://github.com/taskforcesh/bullmq/commit/e8e37cf2da26d1f67f21e3bd94da65025e7bde8f)) - -* chore(release): 1.4.3 [skip ci]nn## [1.4.3](https://github.com/taskforcesh/bullmq/compare/v1.4.2...v1.4.3) (2019-11-21) - -### Bug Fixes - -* check in moveToFinished to use default val for opts.maxLenEvents ([d1118aa](https://github.com/taskforcesh/bullmq/commit/d1118aab77f755b4a65e3dd8ea2e195baf3d2602)) ([`136f087`](https://github.com/taskforcesh/bullmq/commit/136f0879bb28d4b6c2e860f11fc6d65446ac6900)) - -* chore(release): 1.4.2 [skip ci]nn## [1.4.2](https://github.com/taskforcesh/bullmq/compare/v1.4.1...v1.4.2) (2019-11-21) - -### Bug Fixes - -* avoid Job<->Queue circular json error ([5752727](https://github.com/taskforcesh/bullmq/commit/5752727a6294e1b8d35f6a49e4953375510e10e6)) -* avoid the .toJSON serializer interface [#70](https://github.com/taskforcesh/bullmq/issues/70) ([5941b82](https://github.com/taskforcesh/bullmq/commit/5941b82b646e46d53970197a404e5ea54f09d008)) ([`371ef07`](https://github.com/taskforcesh/bullmq/commit/371ef07fbb61c5ad490061c9571dbd8df9f6ab47)) - -* chore(release): 1.4.1 [skip ci]nn## [1.4.1](https://github.com/taskforcesh/bullmq/compare/v1.4.0...v1.4.1) (2019-11-08) - -### Bug Fixes - -* default job settings [#58](https://github.com/taskforcesh/bullmq/issues/58) ([667fc6e](https://github.com/taskforcesh/bullmq/commit/667fc6e00ae4d6da639d285a104fb67e01c95bbd)) ([`ad1fc3c`](https://github.com/taskforcesh/bullmq/commit/ad1fc3c19d5c02382989a7e1cb72b807b743465c)) - -* chore(release): 1.4.0 [skip ci]nn# [1.4.0](https://github.com/taskforcesh/bullmq/compare/v1.3.0...v1.4.0) (2019-11-06) - -### Features - -* job.progress() return last progress for sandboxed processors ([5c4b146](https://github.com/taskforcesh/bullmq/commit/5c4b146ca8e42c8a29f9db87326a17deac30e10e)) ([`5e9e0b3`](https://github.com/taskforcesh/bullmq/commit/5e9e0b33cd548952a6968151db94325f299ae3c4)) - -* chore(release): 1.3.0 [skip ci]nn# [1.3.0](https://github.com/taskforcesh/bullmq/compare/v1.2.0...v1.3.0) (2019-11-05) - -### Features - -* test worker extends job lock while job is active ([577efdf](https://github.com/taskforcesh/bullmq/commit/577efdfb1d2d3140be78dee3bd658b5ce969b16d)) ([`c6b1e65`](https://github.com/taskforcesh/bullmq/commit/c6b1e65b424f0feb700468564276786895acec70)) - -* chore(release): 1.2.0 [skip ci]nn# [1.2.0](https://github.com/taskforcesh/bullmq/compare/v1.1.0...v1.2.0) (2019-11-03) - -### Bug Fixes - -* only run coveralls after success ([bd51893](https://github.com/taskforcesh/bullmq/commit/bd51893c35793657b65246a2f5a06469488c8a06)) - -### Features - -* added code coverage and coveralls ([298cfc4](https://github.com/taskforcesh/bullmq/commit/298cfc48e35e648e6a22ac0d1633ac16c7b6e3de)) -* added missing deps for coverage ([6f3ab8d](https://github.com/taskforcesh/bullmq/commit/6f3ab8d78ba8503a76447f0db5abf0c1c4f8e185)) -* ignore commitlint file in coverage ([f874441](https://github.com/taskforcesh/bullmq/commit/f8744411a1b20b95e568502be15ec50cf8520926)) -* only upload coverage once after all tests pass ([a7f73ec](https://github.com/taskforcesh/bullmq/commit/a7f73ecc2f51544f1d810de046ba073cb7aa5663)) ([`89bb554`](https://github.com/taskforcesh/bullmq/commit/89bb554b3e8dcc7f8e2376f1a4557ef3d8e0c96f)) - -* chore(release): 1.1.0 [skip ci]nn# [1.1.0](https://github.com/taskforcesh/bullmq/compare/v1.0.1...v1.1.0) (2019-11-01) - -### Bug Fixes - -* failing build ([bb21d53](https://github.com/taskforcesh/bullmq/commit/bb21d53b199885dcc97e7fe20f60caf65e55e782)) -* fix failing tests ([824eb6b](https://github.com/taskforcesh/bullmq/commit/824eb6bfb2b750b823d057c894797ccb336245d8)) - -### Features - -* initial version of job locking mechanism ([1d4fa38](https://github.com/taskforcesh/bullmq/commit/1d4fa383e39f4f5dcb69a71a1359dd5dea75544c)) ([`1f55fa2`](https://github.com/taskforcesh/bullmq/commit/1f55fa26be8834ac970a219485e3c5c681390b75)) - -* chore(release): 1.0.1 [skip ci]nn## [1.0.1](https://github.com/taskforcesh/bullmq/compare/v1.0.0...v1.0.1) (2019-10-27) - -### Bug Fixes - -* save job stacktrace on failure ([85dfe52](https://github.com/taskforcesh/bullmq/commit/85dfe525079a5f89c1901dbf35c7ddc6663afc24)) -* simplify logic for stackTraceLimit ([296bd89](https://github.com/taskforcesh/bullmq/commit/296bd89514d430a499afee934dcae2aec41cffa2)) ([`72f3669`](https://github.com/taskforcesh/bullmq/commit/72f36694139163009bc237a9ee25ea0070946dfb)) - -* chore(release): 1.0.0 [skip ci]nn# 1.0.0 (2019-10-20) - -### Bug Fixes - -* add compilation step before running tests ([64abc13](https://github.com/taskforcesh/bullmq/commit/64abc13681f8735fb3ee5add5b271bb4da618047)) -* add extra client to worker fixes [#34](https://github.com/taskforcesh/bullmq/issues/34) ([90bd891](https://github.com/taskforcesh/bullmq/commit/90bd891c7514f5e9e397d7aad15069ee55bebacd)) -* add missing dependency ([b92e330](https://github.com/taskforcesh/bullmq/commit/b92e330aad35ae54f43376f92ad1b41209012b76)) -* check closing after resuming from pause ([7b2cef3](https://github.com/taskforcesh/bullmq/commit/7b2cef3677e2b3af0370e0023aec4b971ad313fe)) -* default opts ([333c73b](https://github.com/taskforcesh/bullmq/commit/333c73b5819a263ae92bdb54f0406c19db5cb64f)) -* do not block if blockTime is zero ([13b2df2](https://github.com/taskforcesh/bullmq/commit/13b2df20cf045c069b8b581751e117722681dcd4)) -* do not exec if closing ([b1d1c08](https://github.com/taskforcesh/bullmq/commit/b1d1c08a2948088eeb3dd65de78085329bac671b)) -* do not trim if maxEvents is undefined ([7edd8f4](https://github.com/taskforcesh/bullmq/commit/7edd8f47b392c8b3a7369196befdafa4b29421d1)) -* emit wait event in add job ([39cba31](https://github.com/taskforcesh/bullmq/commit/39cba31a30b7ef762a8d55d4bc34efec636207bf)) -* fix a couple of job tests ([e66b97b](https://github.com/taskforcesh/bullmq/commit/e66b97be4577d5ab373fff0f3f45d73de7842a37)) -* fix compiling error ([3cf2617](https://github.com/taskforcesh/bullmq/commit/3cf261703292d263d1e2017ae30eb490121dab4e)) -* fix more tests ([6a07b35](https://github.com/taskforcesh/bullmq/commit/6a07b3518f856e8f7158be032110c925ed5c924f)) -* fix progress script ([4228e27](https://github.com/taskforcesh/bullmq/commit/4228e2768c0cf404e09642ebb4053147d0badb56)) -* fix retry functionality ([ec41ea4](https://github.com/taskforcesh/bullmq/commit/ec41ea4e0bd88b10b1ba434ef5ceb0952bb59f7b)) -* fix several floating promises ([590a4a9](https://github.com/taskforcesh/bullmq/commit/590a4a925167a7c7d6c0d9764bbb5ab69235beb7)) -* fixed reprocess lua script ([b78296f](https://github.com/taskforcesh/bullmq/commit/b78296f33517b8c5d79b300fef920edd03149d2f)) -* improve concurrency mechanism ([a3f6148](https://github.com/taskforcesh/bullmq/commit/a3f61489e3c9891f42749ff85bd41064943c62dc)) -* improve disconnection for queue events ([56b53a1](https://github.com/taskforcesh/bullmq/commit/56b53a1aca1e527b50f04d906653060fe8ca644e)) -* initialize events comsumption in constructor ([dbb66cd](https://github.com/taskforcesh/bullmq/commit/dbb66cda9722d44eca806fa6ad1cabdaabac846a)) -* make ioredis typings a normal dependency ([fb80b90](https://github.com/taskforcesh/bullmq/commit/fb80b90b12931a12a1a93c5e204dbf90eed4f48f)) -* minor fixes ([7791cda](https://github.com/taskforcesh/bullmq/commit/7791cdac2bfb6a7fbbab9c95c5d89b1eae226a4c)) -* parse progres and return value in events ([9e43d0e](https://github.com/taskforcesh/bullmq/commit/9e43d0e30ab90a290942418718cde1f5bfbdcf56)) -* properly emit event for progress ([3f70175](https://github.com/taskforcesh/bullmq/commit/3f701750b1c957027825ee90b58141cd2556694f)) -* reduce drain delay to 5 seconds ([c6cfe7c](https://github.com/taskforcesh/bullmq/commit/c6cfe7c0b50cabe5e5eb31f4b631a8b1d3706611)) -* remove buggy close() on redis-connection (fixes 5 failing tests) ([64c2ede](https://github.com/taskforcesh/bullmq/commit/64c2edec5e738f43676d0f4ca61bdea8609203fc)) -* remove unused dependencies ([34293c8](https://github.com/taskforcesh/bullmq/commit/34293c84bb0ed54f18d70c86821c3ac627d376a5)) -* replace init by waitUntilReady ([4336161](https://github.com/taskforcesh/bullmq/commit/43361610de5b1a993a1c65f3f21ac745b8face21)) -* reworked initialization of redis clients ([c17d4be](https://github.com/taskforcesh/bullmq/commit/c17d4be5a2ecdda3efcdc6b9d7aecdfaccd06d83)) -* several fixes to make the lib work on other ts projects ([3cac1b0](https://github.com/taskforcesh/bullmq/commit/3cac1b0715613d9df51cb1ed6fe0859bcfbb8e9b)) -* throw error messages instead of codes ([9267541](https://github.com/taskforcesh/bullmq/commit/92675413f1c3b9564574dc264ffcab0d6089e70e)) -* update tests after merge ([51f75a4](https://github.com/taskforcesh/bullmq/commit/51f75a4929e7ae2704e42fa9035e335fe60d8dc0)) -* wait until ready before trying to get jobs ([f3b768f](https://github.com/taskforcesh/bullmq/commit/f3b768f251ddafa207466af552376065b35bec8f)) -* **connections:** reused connections ([1e808d2](https://github.com/taskforcesh/bullmq/commit/1e808d24018a29f6611f4fccd2f5754de0fa3e39)) -* waitUntilFinished improvements ([18d4afe](https://github.com/taskforcesh/bullmq/commit/18d4afef08f04d19cb8d931e02fff8f962d07ee7)) - -### Features - -* add cleaned event ([c544775](https://github.com/taskforcesh/bullmq/commit/c544775803626b5f03cf6f7c3cf18ed1d92debab)) -* add empty method ([4376112](https://github.com/taskforcesh/bullmq/commit/4376112369d869c0a5c7ab4a543cfc50200e1414)) -* add retry errors ([f6a7990](https://github.com/taskforcesh/bullmq/commit/f6a7990fb74585985729c5d95e2238acde6cf74a)) -* add script to generate typedocs ([d0a8cb3](https://github.com/taskforcesh/bullmq/commit/d0a8cb32ef9090652017f8fbf2ca42f0960687f7)) -* add some new tests for compat class, more minor fixes ([bc0f653](https://github.com/taskforcesh/bullmq/commit/bc0f653ecf7aedd5a46eee6f912ecd6849395dca)) -* add support for adding jobs in bulk ([b62bddc](https://github.com/taskforcesh/bullmq/commit/b62bddc054b266a809b4b1646558a095a276d6d1)) -* add trimEvents method to queue client ([b7da7c4](https://github.com/taskforcesh/bullmq/commit/b7da7c4de2de81282aa41f8b7624b9030edf7d15)) -* automatically trim events ([279bbba](https://github.com/taskforcesh/bullmq/commit/279bbbab7e96ad8676ed3bd68663cb199067ea67)) -* emit global stalled event fixes [#10](https://github.com/taskforcesh/bullmq/issues/10) ([241f229](https://github.com/taskforcesh/bullmq/commit/241f229761691b9ac17124da005f91594a78273d)) -* get rid of Job3 in favor of bullmq Job class ([7590cea](https://github.com/taskforcesh/bullmq/commit/7590ceae7abe32a8824e4a265f95fef2f9a6665f)) -* implement close in redis connection fixes [#8](https://github.com/taskforcesh/bullmq/issues/8) ([6de8b48](https://github.com/taskforcesh/bullmq/commit/6de8b48c9612ea39bb28db5f4130cb2a2bb5ee90)) -* make delay in backoffs optional ([30d59e5](https://github.com/taskforcesh/bullmq/commit/30d59e519794780a8198222d0bbd88779c623275)) -* move async initialization to constructors ([3fbacd0](https://github.com/taskforcesh/bullmq/commit/3fbacd088bc3bfbd61ed8ff173e4401193ce48ec)) -* port a lot of functionality from bull 3.x ([ec9f3d2](https://github.com/taskforcesh/bullmq/commit/ec9f3d266c1aca0c27cb600f056d813c81259b4c)) -* port more features from bull 3.x ([75bd261](https://github.com/taskforcesh/bullmq/commit/75bd26158678ee45a14e04fd7c3a1f96219979a2)) -* ported tests and functionality from bull 3 ([1b6b192](https://github.com/taskforcesh/bullmq/commit/1b6b1927c7e8e6b6f1bf0bbd6c74eb59cc17deb6)) -* **workers:** support for async backoffs ([c555837](https://github.com/taskforcesh/bullmq/commit/c55583701e5bdd4e6436a61c833e506bc05749de)) -* remove support of bull3 config format in compat class ([d909486](https://github.com/taskforcesh/bullmq/commit/d9094868e34c2af21f810aaef4542951a509ccf8)) -* support global:progress event ([60f4d85](https://github.com/taskforcesh/bullmq/commit/60f4d85d332b3be4a80db7aa179f3a9ceeb1d6f8)) -* trim option to event stream [#21](https://github.com/taskforcesh/bullmq/issues/21) & fix [#17](https://github.com/taskforcesh/bullmq/issues/17) ([7eae653](https://github.com/taskforcesh/bullmq/commit/7eae65340820043101fadf1f87802f506020d553)) ([`e2e2d8d`](https://github.com/taskforcesh/bullmq/commit/e2e2d8d186c97a4762ce146887b7c3db6841a23e)) - -### Ci - -* ci(python): fix commitmsg env reference ([`822f7a9`](https://github.com/taskforcesh/bullmq/commit/822f7a904e3f91c6b95f9faf40288427d7c20f43)) - -* ci(python): fix conditional step by startsWith ([`eb3d1d4`](https://github.com/taskforcesh/bullmq/commit/eb3d1d499b64c07f8385dc6db99370588977f9cf)) - -* ci(python): echo commit message ([`7510c22`](https://github.com/taskforcesh/bullmq/commit/7510c226a5094ae3042f3d15225708c1e1d83709)) - -* ci(python): retry lint with flake8 python ([`10191ef`](https://github.com/taskforcesh/bullmq/commit/10191ef0b2e6e578dbf3c5ab243bf1958c6a2383)) - -* ci(python): retry install dependencies python ([`1261fc4`](https://github.com/taskforcesh/bullmq/commit/1261fc487a88ee9df924f275c4eae45e7e8c62ee)) - -* ci(python): retry setup python ([`980796c`](https://github.com/taskforcesh/bullmq/commit/980796c9540e4603907e49b095bbd3b328aec29f)) - -* ci(python): remove setup python ([`23c6207`](https://github.com/taskforcesh/bullmq/commit/23c6207db9be71aef1827737a461b43c39eb05e8)) - -* ci(python): delete install dependencies python step ([`8d03ba1`](https://github.com/taskforcesh/bullmq/commit/8d03ba1daf5008fff8d6689ec5e335b25b9fbe2b)) - -* ci(python): delete flake8 step ([`e94bd83`](https://github.com/taskforcesh/bullmq/commit/e94bd835dc798ea60fcf4ce7942542f12cf42ed8)) - -* ci(python): delete commitmsg variable ([`2441eaf`](https://github.com/taskforcesh/bullmq/commit/2441eaf8ea52d12b1cf645051be5592e48a8e855)) - -* ci(python): delete Release Python step ([`3bf5e8d`](https://github.com/taskforcesh/bullmq/commit/3bf5e8dec40c40fd46a3f5fe551e7992804a51df)) - -* ci(python): try to save commit message for python action ([`d3673a1`](https://github.com/taskforcesh/bullmq/commit/d3673a1b79dbb1629d0b19f3fd9abcfdb32b32e0)) - -* ci: harden release and test permissions (#1554) ([`cc37e76`](https://github.com/taskforcesh/bullmq/commit/cc37e7608cb44c0ee4dd975c48b423ad789fdb6e)) - -* ci(build): copy lua scripts (#1476) ([`b96991e`](https://github.com/taskforcesh/bullmq/commit/b96991e0828cceb062b40f4e68625d422d84e146)) - -* ci(scripts): generate scripts before docs (#1470) ([`6947180`](https://github.com/taskforcesh/bullmq/commit/694718012788f1ddd207aa62d1e4dc857b716de2)) - -* ci(redis): run tests in different redis versions (#999) ([`8c22da5`](https://github.com/taskforcesh/bullmq/commit/8c22da5c1225ba090ab0f7af063b05b1f69c69ce)) - -* ci(node-workflow): allow run tests in next branch (#852) ([`6009054`](https://github.com/taskforcesh/bullmq/commit/6009054c53ef447d02173f6a7a88fe6a7eb03581)) - -* ci(github): set test job and cache (#820) ([`d810465`](https://github.com/taskforcesh/bullmq/commit/d810465a4549da871e53d8bed496118afda61fb0)) - -### Documentation - -* docs(events): add listener api references (#1913) ([`864b5e5`](https://github.com/taskforcesh/bullmq/commit/864b5e56afb1fb1a92f41d06b155529f8f701838)) - -* docs(bullmq-pro): update changelog (#1888) ([`0acfb79`](https://github.com/taskforcesh/bullmq/commit/0acfb79f779c6dcffca946f843290ae7bc4066e7)) - -* docs(python): add changelog (#1868) ([`e83f7d0`](https://github.com/taskforcesh/bullmq/commit/e83f7d0447471c24a753f0ad3e302a1eb85382d5)) - -* docs(repeatable): fix invalid cron expression in example (#1867) ([`4f31730`](https://github.com/taskforcesh/bullmq/commit/4f3173003464d3ef468271ad2394c1ca613f6077)) - -* docs(bullmq-pro): update changelog (#1838) ([`13e838a`](https://github.com/taskforcesh/bullmq/commit/13e838a6cf3ccf2209cffdf09b9e2e53b8121e3e)) - -* docs(clean): fix typo/grammar (#1812) ([`65c12df`](https://github.com/taskforcesh/bullmq/commit/65c12df09c2364f5b722da532825af918e3e1a59)) - -* docs(flows): add warning about queues configurations (#1805) ([`3bdde0f`](https://github.com/taskforcesh/bullmq/commit/3bdde0fed601e335a2f0b3f814c394eeaecad85d)) - -* docs(pattern): add adding bulks section (#1782) ([`7785102`](https://github.com/taskforcesh/bullmq/commit/7785102c6905965c8e6bf39ee8c4992e6ed40ee7)) - -* docs(step-jobs): enhance documentation when throwing errors (#1774) ([`649aa6c`](https://github.com/taskforcesh/bullmq/commit/649aa6c7298083c808b73ce79ffa52351e9ec716)) - -* docs(flow-producer): add usage of addBulk method (#1773) ([`229c87e`](https://github.com/taskforcesh/bullmq/commit/229c87e9db144e26d23776b2e00ceb5467c0f0fb)) - -* docs(step-jobs): add how to import errors (#1748) ([`d0cbb76`](https://github.com/taskforcesh/bullmq/commit/d0cbb7616853c2d9f5f87d4c61c39c02c7080855)) - -* docs: expose async-fifo-queue (#1743) ([`922d118`](https://github.com/taskforcesh/bullmq/commit/922d118d4629e765e2f32e2bc5dae836a3e34f8b)) - -* docs(auto-removal): add worker auto-removal examples (#1715) ([`4069344`](https://github.com/taskforcesh/bullmq/commit/40693440b473cd311da6a33ce591e8094fd9fc92)) - -* docs(connections): make keyPrefix warning more pronounced (#1679) ([`422e9fc`](https://github.com/taskforcesh/bullmq/commit/422e9fcbcdf014c14c65b1811b3a8000230c1a91)) - -* docs(nestjs): add flow producer documentation (#1674) ([`6dc75a3`](https://github.com/taskforcesh/bullmq/commit/6dc75a3233de5c702e5dec10a8d202259b5e8637)) - -* docs(stalled): fix typos (#1672) ([`31c6896`](https://github.com/taskforcesh/bullmq/commit/31c6896b816776404e160b4b2bbe45e03fcc220a)) - -* docs(nestjs-bullmq-pro): add producers section (#1661) ([`94f2fd7`](https://github.com/taskforcesh/bullmq/commit/94f2fd749c132b463816a04727269c9fca32498c)) - -* docs(nestjs): add nestjs-bullmq-pro changelog (#1655) ([`d681c22`](https://github.com/taskforcesh/bullmq/commit/d681c22982d1e5ca0d65fc2dd9e26de6f4370015)) - -* docs(readme): use foo as queueName in example (#1651) ([`e3ba746`](https://github.com/taskforcesh/bullmq/commit/e3ba7465fa887afff99281167663f69e861feefc)) - -* docs(nestjs): add nestjs-bullmq-pro api reference (#1646) ([`3e8fb1a`](https://github.com/taskforcesh/bullmq/commit/3e8fb1a8fa7a35ec2418b7326b139d73baed23cd)) - -* docs(bullmq-pro): add nestjs-bullmq-pro module documentation (#1636) ([`9a0a83e`](https://github.com/taskforcesh/bullmq/commit/9a0a83ed97b3093451c6487cd59d515a9c676713)) - -* docs(guide): nestjs section (#1610) ([`1276e2b`](https://github.com/taskforcesh/bullmq/commit/1276e2bc62e39db3b24e0ba3f0824904ca4b595e)) - -* docs(bullmq): add manual rate-limit section (#1590) ([`3fa5d33`](https://github.com/taskforcesh/bullmq/commit/3fa5d33861e99c1405a576b5ef7171daae4c16bb)) - -* docs: add api references (#1584) ([`a3df041`](https://github.com/taskforcesh/bullmq/commit/a3df04109d64bc2b5de30f7b4fb95d5a836df949)) - -* docs(base-job-options): fix grammar - -Change grammar "an number" should be "a number" ([`3451b59`](https://github.com/taskforcesh/bullmq/commit/3451b591a2158b6e2ae57a369389e23f4d4376e7)) - -* docs: fix Object.values usage in flows guide (#1466) ([`74cbcc2`](https://github.com/taskforcesh/bullmq/commit/74cbcc2514b18bb94e0067618ba7d83d57f00c87)) - -* docs: update Queue Scheduler API Reference - -The html page is no longer generated by typedoc since v2 ([`89bb53f`](https://github.com/taskforcesh/bullmq/commit/89bb53fb193e291f90b4be219507cdd7c7b04dba)) - -* docs(readme): fix incorrect typescript example (#1329) ([`4646f3b`](https://github.com/taskforcesh/bullmq/commit/4646f3b292788e824b15b1cb670fee9a341e6d24)) - -* docs(bullmq-pro): add ttl per job name description (#1276) ([`2d59174`](https://github.com/taskforcesh/bullmq/commit/2d59174986c55fce334999fdb2905e06a948edb5)) - -* docs(concurrency): add concurrency update description (#1264) ([`7249012`](https://github.com/taskforcesh/bullmq/commit/7249012f189632957ee1ec62f563e1a7445f1cdb)) - -* docs(step-jobs): fix waiting children step (#1261) ([`35b0283`](https://github.com/taskforcesh/bullmq/commit/35b028356e41ef3b646db44e1cfe7a1cf64d3f3e)) - -* docs(bullmq-pro): update changelog (#1244) ([`1e4e1bc`](https://github.com/taskforcesh/bullmq/commit/1e4e1bc729208fb0d2c423694e9e686418ed5aab)) - -* docs(bullmq-pro): add changelog (#1234) ([`fb1ece0`](https://github.com/taskforcesh/bullmq/commit/fb1ece0c534250b90452bcf021bc77779a7f35a3)) - -* docs: add new api based on typedoc ([`8e56db5`](https://github.com/taskforcesh/bullmq/commit/8e56db551e1f0f187c2ae56c22b70342f9106822)) - -* docs(readme): add curri in "used by" ([`931a932`](https://github.com/taskforcesh/bullmq/commit/931a932e25cee430cbe5a126fd8dd6f7e704756a)) - -* docs: misspelled rate limited (#1165) ([`f33d0a9`](https://github.com/taskforcesh/bullmq/commit/f33d0a957525ec1bc3986e4bb57624d5ac0a4bc1)) - -* docs(worker): add autorun example (#1161) ([`ad159ad`](https://github.com/taskforcesh/bullmq/commit/ad159ad6a4bda3703ce1686b4989e1fae7dcaef8)) - -* docs: clarify jobs priority order (#1124) ([`7721ac3`](https://github.com/taskforcesh/bullmq/commit/7721ac3a01ca5071bcf4b51df3ca0ad0a896659b)) - -* docs: add mermaid diagrams as comments(#1116) ([`1d69619`](https://github.com/taskforcesh/bullmq/commit/1d69619fcc70c24cca8a5d30451886b6cb487e5c)) - -* docs: add read more section (#1114) ([`3ba05f7`](https://github.com/taskforcesh/bullmq/commit/3ba05f7ff80b152cd99167b13546d6d76654d3ed)) - -* docs(guide): add link references to classes (#1111) ([`350234e`](https://github.com/taskforcesh/bullmq/commit/350234e816783ff7a4e91d4839d81ac4fe2b2a1d)) - -* docs(procesador): add pattern for named processor (#1096) ([`dd1e63c`](https://github.com/taskforcesh/bullmq/commit/dd1e63c623a6a1958ff8de983adc668e452aed52)) - -* docs: add obliterateOpts description (#1086) ([`7f7dc34`](https://github.com/taskforcesh/bullmq/commit/7f7dc34789abc8a7fb59dd79a3170c4fb94c202d)) - -* docs(flow): update README.md example description (#1076) ([`ca38bfb`](https://github.com/taskforcesh/bullmq/commit/ca38bfb797ccd37db511d1e02b9a72a42ad4e894)) - -* docs(step-jobs): pattern to wait children when adding children at runtime (#1069) ([`d53a800`](https://github.com/taskforcesh/bullmq/commit/d53a800473ac5556211408d526df92aba686fff1)) - -* docs(process-step-jobs): add new pattern (#1044) ([`e988cf5`](https://github.com/taskforcesh/bullmq/commit/e988cf5589783cf3ba7b4785d8b63df632c0fe37)) - -* docs(flow-job): add description into FlowOpts (#1047) ([`734f5fe`](https://github.com/taskforcesh/bullmq/commit/734f5fe8257a29b7790fa848173f2a1a35cbe605)) - -* docs(worker): specify error parameter in failed event (#1043) fixes #1038 ([`42114f5`](https://github.com/taskforcesh/bullmq/commit/42114f53058229e24127e0b649f4a7ec5a847b01)) - -* docs(wait-until-finished): update docs to match behavior (#1033) ref #1031 ([`d3e0d09`](https://github.com/taskforcesh/bullmq/commit/d3e0d09b6147940eb9074c9ee0f53bc3e76670a6)) - -* docs(job): add params docs in waitUntilFinished (#1000) ref #996 ([`32e7948`](https://github.com/taskforcesh/bullmq/commit/32e7948408f6e12bfe913db1d7c3be7cabb0a5ef)) - -* docs(readme): add Bullmq-Pro in comparison table (#993) ([`9d35cb4`](https://github.com/taskforcesh/bullmq/commit/9d35cb49ac6f4172f13832e136fc68cd22426491)) - -* docs: delete duplicated parent-child explanation (#980) ([`9fb8b72`](https://github.com/taskforcesh/bullmq/commit/9fb8b72885bab40e3980418a6367859435397733)) - -* docs(flow): add getFlow into guide structure (#976) ([`db1224a`](https://github.com/taskforcesh/bullmq/commit/db1224a6aa674288b7ad879f53c9e1e063b7e9f7)) - -* docs(throttle-jobs): fix definition in patterns (#961) fixes #689 ([`e184d4d`](https://github.com/taskforcesh/bullmq/commit/e184d4d88c37f1e9b2d3c4fddf00130556a9f8df)) - -* docs: update debounce-jobs.md (#950) ([`424b54a`](https://github.com/taskforcesh/bullmq/commit/424b54af7c549150197a647fe898c67ff9d87aa4)) - -* docs(bullmq-pro): add missing line in install instructions (#905) ([`53ba7b7`](https://github.com/taskforcesh/bullmq/commit/53ba7b798d75ead036b417c4644a7eab59b81cb4)) - -* docs(job): use defaultValue tag (#903) ([`3133599`](https://github.com/taskforcesh/bullmq/commit/3133599e982071fd1dfe7871f20b87eb6461cbf2)) - -* docs: add missing returned types (#889) ([`3c76dc4`](https://github.com/taskforcesh/bullmq/commit/3c76dc4fa3558fa83161537751bc68eeb65e9d4a)) - -* docs: use implements for declaration types (#845) ([`2446cea`](https://github.com/taskforcesh/bullmq/commit/2446cea3d99d9b1bd738e7a8480c395984f8f17c)) - -* docs(remove): fix id typo (#805) ([`51eebc4`](https://github.com/taskforcesh/bullmq/commit/51eebc4ca25f3cada743f5e0a3e7e8878b82bc7e)) - -* docs(child-pool): add link to process exit codes (#799) ([`1f12295`](https://github.com/taskforcesh/bullmq/commit/1f122952a0f161c754b5ddbba75db2880a4554c8)) - -* docs(change-delay): add param in docs (#792) ([`58a803f`](https://github.com/taskforcesh/bullmq/commit/58a803ff2e6a1815b4000dc16584663e33dace09)) - -* docs(readme): add semantic-release badge (#795) ([`2f1b141`](https://github.com/taskforcesh/bullmq/commit/2f1b14197786282292ce5150c008a61a7f44f19e)) - -* docs(events): update completed and failed events docs (#785) ([`3712537`](https://github.com/taskforcesh/bullmq/commit/371253744ec89f8edcc868ee9236681deab62dbf)) - -* docs: correct bird's name & comparative adjective for repeatable frequency ([`cb4292c`](https://github.com/taskforcesh/bullmq/commit/cb4292ca13af145140eedb5960ccbff87644953f)) - -* docs(autorun): add documentation (#769) ref #263 ([`b016344`](https://github.com/taskforcesh/bullmq/commit/b016344caedc8915052cea43948901f3b77b6ece)) - -* docs(feature-comparison): fix parent-child checks (#759) ([`b2c6bcc`](https://github.com/taskforcesh/bullmq/commit/b2c6bccfabc265c3ed2beb1d677933c67177e90f)) - -* docs(readme): add feature comparison (#758) ([`60b608d`](https://github.com/taskforcesh/bullmq/commit/60b608db589da0fa82f8edce388525c3d4bca9a8)) - -* docs(prioritized): rename file (#757) ([`31ba505`](https://github.com/taskforcesh/bullmq/commit/31ba5055983c085019f96c8223fbffe22b88df1c)) - -* docs(retry): increase awareness of needing QueueScheduler instance (#747) ([`99f2efb`](https://github.com/taskforcesh/bullmq/commit/99f2efbca906cb0de4b7673a2886e02423c084c6)) - -* docs(changelog): fix format (#732) ([`45aaa39`](https://github.com/taskforcesh/bullmq/commit/45aaa39241be269fcd68fd59632f47b0b072e80b)) - -* docs(prioritized): fix typo (#715) ([`919994c`](https://github.com/taskforcesh/bullmq/commit/919994cd4d200e83d77950ca94a44303e634a81a)) - -* docs(changelog): fix format (#712) ([`a1c8e00`](https://github.com/taskforcesh/bullmq/commit/a1c8e001431dc516ab74c1c8b054f15dd77634fc)) - -* docs(queue-events): update progress event typing (#618) ([`8c2f253`](https://github.com/taskforcesh/bullmq/commit/8c2f25382c3673a280210eca487517128279b950)) - -* docs: fix typo in bullmq.ratelimiteroptions.md (#683) ([`0190699`](https://github.com/taskforcesh/bullmq/commit/0190699f482705e664b9697223fca6c9fb875484)) - -* docs: add example of adding retry rules to queue's default options ([`1f53172`](https://github.com/taskforcesh/bullmq/commit/1f53172351b81dff9b3d4dc6daa83de6d8249dec)) - -* docs: define exponential and fixed backoffs ([`d621359`](https://github.com/taskforcesh/bullmq/commit/d62135967e1d9a8c001faddde42238e4e96e5212)) - -* docs: reword sentences in stalled.md ([`b679dd6`](https://github.com/taskforcesh/bullmq/commit/b679dd6904ca82432887f5ccd6636afc2ae43428)) - -* docs: fix job type in sandbox-processors guide fixes #539 ([`81bbf4a`](https://github.com/taskforcesh/bullmq/commit/81bbf4a7b7d929936ad9c27ead7fc25fb570654a)) - -* docs(gitook): fix typo in queuescheduler.md ([`f942364`](https://github.com/taskforcesh/bullmq/commit/f94236431aba016a2dbe957bf9e01573eb2e0cdd)) - -* docs: fix typo (#395) ([`e5a29bf`](https://github.com/taskforcesh/bullmq/commit/e5a29bf17dad2d9f75fbeb0db33353ddf49f1643)) - -* docs: add doc for debounce usecase (#335) ([`067e32a`](https://github.com/taskforcesh/bullmq/commit/067e32aff24955b6d5bfe9c4196820f60fe21888)) - -* docs(interfaces): use block comments; add references and descriptions - -- Block comments for IDE support / "intellisense" -- Add links to the docs for further reading -- For links, I used the format described at https://tsdoc.org/pages/tags/see/ ([`87297b8`](https://github.com/taskforcesh/bullmq/commit/87297b8b0aef281636e174b6e925eedb440df841)) - -* docs: generate api documentation ([`ec6634f`](https://github.com/taskforcesh/bullmq/commit/ec6634ff96877c2629ace25827f4462f6894751d)) - -* docs: replace link to crontab generator, which used the wrong format. (#307) ([`de99a07`](https://github.com/taskforcesh/bullmq/commit/de99a07c33b2c893466e81b0ed724b3e3e5ffbcd)) - -* docs: fix typo (#350) ([`3f3cd11`](https://github.com/taskforcesh/bullmq/commit/3f3cd1181817dcaa45d2f81798f5b6a965e2bbbd)) - -* docs: fix a typo in guide/workers.md (#328) ([`1c17c02`](https://github.com/taskforcesh/bullmq/commit/1c17c02de0036e434f2900142eb87a92daac36d9)) - -* docs: add a remark about scheduler for retries to work (#316) ([`6e29fcd`](https://github.com/taskforcesh/bullmq/commit/6e29fcd2d79aff5e400d9bee83a597b8cf57d39c)) - -* docs: update README.md (#217) ([`55fff7f`](https://github.com/taskforcesh/bullmq/commit/55fff7f7c370186752710e20534ded3e17962cf8)) - -* docs: improve QueueScheduler docs - -I know that this looks obvious but it was not so direct to find it on the docs ([`873ec2f`](https://github.com/taskforcesh/bullmq/commit/873ec2f44eaf522c645241af3fed071ded5a2c43)) - -* docs: add github link to what-is-bullmq.md (#80) ([`4adf856`](https://github.com/taskforcesh/bullmq/commit/4adf85680028bafe2f7f1ac7a350f2d83a3fb58f)) - -### Feature - -* feat(python): add changePriority method (#1943) ([`945bcd3`](https://github.com/taskforcesh/bullmq/commit/945bcd39db0f76ef6e9a513304714c120317c7f3)) - -* feat(job): add changePriority method (#1901) ref #1899 ([`9485ad5`](https://github.com/taskforcesh/bullmq/commit/9485ad567e2d8c78d601cc9eb2b7dd37f96d00c9)) - -* feat(python): add getState method (#1906) ([`f0867a6`](https://github.com/taskforcesh/bullmq/commit/f0867a679c75555fa764078481252110c1e7377f)) - -* feat(python): add retry method into job (#1877) ([`870da45`](https://github.com/taskforcesh/bullmq/commit/870da459f419076f03885a12a4ce5a2930c500f3)) - -* feat(python): add updateData method (#1871) ([`800b8c4`](https://github.com/taskforcesh/bullmq/commit/800b8c46e709a8cbc4674d84bd59d5c62251d271)) - -* feat(python): support retryJob logic (#1869) ([`b044a03`](https://github.com/taskforcesh/bullmq/commit/b044a03159bc3a8d8823c71019f64825f318a6c2)) - -* feat(python): save stacktrace when job fails (#1859) ([`0b538ce`](https://github.com/taskforcesh/bullmq/commit/0b538cedf63c3f006838ee3d016e463ee3492f81)) - -* feat(python): add moveToDelayed job method (#1849) ([`5bebf8d`](https://github.com/taskforcesh/bullmq/commit/5bebf8d6560de78448b0413baaabd26f7227575c)) - -* feat(python): add updateProgress method in job class(#1830) ([`e1e1aa2`](https://github.com/taskforcesh/bullmq/commit/e1e1aa2e7a41e5418a5a50af4cea347a38bbc7d1)) - -* feat(python): accept redis options as string ([`01f549e`](https://github.com/taskforcesh/bullmq/commit/01f549e62a33619a7816758910a2d2b5ac75b589)) - -* feat: upgrade ioredis to 5.3.2 ([`375b1be`](https://github.com/taskforcesh/bullmq/commit/375b1be52035e93c5fef6024e0d06aa723f602a9)) - -* feat(upstash): don't throw an error when detecting an upstash host - -Upstash is currently rolling out redis streams to all regions and will be compatible with bullmq. ([`2e06bca`](https://github.com/taskforcesh/bullmq/commit/2e06bca3615aafecd725d093045a510a67053fed)) - -* feat(python): add getJobCounts method (#1807) ([`46d6f94`](https://github.com/taskforcesh/bullmq/commit/46d6f94575454fe2a32be0c5247f16d18739fe27)) - -* feat(python): improve worker concurrency (#1809) ([`ec7c49e`](https://github.com/taskforcesh/bullmq/commit/ec7c49e284fd1ecdd52b96197281247f5222ea34)) - -* feat(worker): add remove on complete and fail options (#1703) ([`cf13494`](https://github.com/taskforcesh/bullmq/commit/cf1349471dcbf0e43feea9972eaa71d2299d619f)) - -* feat(python): add trimEvents (#1695) ([`ca48163`](https://github.com/taskforcesh/bullmq/commit/ca48163263b12a85533563485176c684e548df0b)) - -* feat(python): add retryJobs method (#1688) ([`2745327`](https://github.com/taskforcesh/bullmq/commit/2745327c7a7080f72e8c265bae77429e597cb6d3)) - -* feat: initial python package (#1673) - -* feat: initial python package - -* chore: correct python actions - -* style: delete white spaces - -* feat(python): add isPaused method - -* chore: add missing async - -* feat(python): add more features to the python package - -* chore: avoid trigger npm releases for python changes - -* chore(python): better module handling - -* fix(python): some lint errors - ---------- - -Co-authored-by: rogger andrÊ valverde flores <rogger.valverde@uni.pe> ([`a97b22f`](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) - -* feat(job): allow clearing job's log (#1600) ([`0ded2d7`](https://github.com/taskforcesh/bullmq/commit/0ded2d7709322bf105e0decac44d801ece5615f2)) - -* feat(queue): add getJobState method (#1593) ref #1532 ([`b741e84`](https://github.com/taskforcesh/bullmq/commit/b741e8456f262b51aa7c68f571c76a3c54d02d37)) - -* feat(worker): add ready event for blockingConnection (#1577) ([`992cc9e`](https://github.com/taskforcesh/bullmq/commit/992cc9e9b3046185d3b67f2cc956f30337f458e1)) - -* feat(queue-events): support duplicated event (#1549) ([`18bc4eb`](https://github.com/taskforcesh/bullmq/commit/18bc4eb50432f8aa27f2395750a7617317b66ca1)) - -* feat(flow): move parent to delayed when delay option is provided (#1501) ([`2f3e5d5`](https://github.com/taskforcesh/bullmq/commit/2f3e5d54f0797bf0d1adf14dbb2b51ad9f9183ca)) - -* feat(flows): allow parent on root jobs in addBulk method (#1488) ref #1480 ([`92308e5`](https://github.com/taskforcesh/bullmq/commit/92308e53acf14e0ce108d94ecd616633ac93e35d)) - -* feat(redis-connection): allow providing scripts for extension (#1472) ([`f193cfb`](https://github.com/taskforcesh/bullmq/commit/f193cfb1830e127f9fd47a969baad30011a0e3a4)) - -* feat(flow-producer): allow parent opts in root job when adding a flow (#1110) ref #1097 ([`3c3ac71`](https://github.com/taskforcesh/bullmq/commit/3c3ac718ad84f6bd0cc1575013c948e767b46f38)) - -* feat(job-options): add failParentOnFailure option (#1339) ([`65e5c36`](https://github.com/taskforcesh/bullmq/commit/65e5c3678771f26555c9128bdb908dd62e3584f9)) - -* feat(sandbox): support update method (#1416) ([`606b75d`](https://github.com/taskforcesh/bullmq/commit/606b75d53e12dfc109f01eda38736c07e829e9b7)) - -* feat(repeat): allow passing a cron strategy (#1248) ref #1245 ([`7f0534f`](https://github.com/taskforcesh/bullmq/commit/7f0534f72449ae14a7415fa17a2eb2a70136a8b0)) - -* feat(job): expose delay in instance (#1386) ([`d4d0d2e`](https://github.com/taskforcesh/bullmq/commit/d4d0d2e737c7ceb5eb34a2c50d53bd1081e0ad4a)) - -* feat(sandbox): experimental support ESM ([`ed0faff`](https://github.com/taskforcesh/bullmq/commit/ed0faff3c67c436116eb625ffacb03e435caee3f)) - -* feat(flow): consider priority when parent is moved (#1286) ([`d49760d`](https://github.com/taskforcesh/bullmq/commit/d49760d09420c5fcc99ab06c8fe36168755fd397)) - -* feat(repeat): save repeatJobKey reference (#1214) ([`4d5a8e3`](https://github.com/taskforcesh/bullmq/commit/4d5a8e33b614cf099369c18298e5b2963b434b1b)) - -* feat(worker): change the number of concurrent processes (#1256) ref #22 ([`940dc8f`](https://github.com/taskforcesh/bullmq/commit/940dc8f34d9a46dc9c8384661461bf0558e97600)) - -* feat(flow-producer): add event listener types (#1257) ([`19ed099`](https://github.com/taskforcesh/bullmq/commit/19ed099905cbb4f071370b2b6d67d9a378e3a8f8)) - -* feat(flow-producer): easier to build extension (#1250) ([`aaf637e`](https://github.com/taskforcesh/bullmq/commit/aaf637e74b9610651fd9e4efc5ff349971b7bb26)) - -* feat(remove-repeatable): return boolean depending on job existence (#1239) ref #1235 ([`59b0da7`](https://github.com/taskforcesh/bullmq/commit/59b0da7d0e979e4f9e8a5b042acbdce433790611)) - -* feat(move-to-delayed): allow passing token (#1213) - -fix(move-to-waiting-children): delete lock ([`14f0e4a`](https://github.com/taskforcesh/bullmq/commit/14f0e4a33d9ddfbaa1f86dbe7598e20a516a9d09)) - -* feat(worker-listener): use generics in events (#1190) ref #1188 ([`2821193`](https://github.com/taskforcesh/bullmq/commit/28211937d9ed405330eede5ad7d4b0b817accf39)) - -* feat(queue-getters): add getQueueEvents (#1085) ([`f10a20a`](https://github.com/taskforcesh/bullmq/commit/f10a20a90ab6dbf2d9f3f75ba99dacbdc797c329)) - -* feat(cron-parser): upgrades version to 4.2.1 (#1149) fixes #1147 ([`88a6c9c`](https://github.com/taskforcesh/bullmq/commit/88a6c9c437172035173628842909f5170eb481f7)) - -* feat: allow QueueScheduler to be extended ([`289beb8`](https://github.com/taskforcesh/bullmq/commit/289beb87d2ef3e3dd7583159f7be2b5450f7de3c)) - -* feat(metrics): add metrics support ([`ab51326`](https://github.com/taskforcesh/bullmq/commit/ab51326cf318b4b48e37a1a77f5609e405eecb45)) - -* feat(retry-jobs): allow to retry completed jobs (#1082) ([`e17b3f2`](https://github.com/taskforcesh/bullmq/commit/e17b3f21606757a16630988a69c9607e8c843bd2)) - -* feat(retry-jobs): pass timestamp as option (#1054) ([`1522359`](https://github.com/taskforcesh/bullmq/commit/15223590b235f749af9cb229fc784760d4b3add2)) - -* feat(queue-getters): add getQueueSchedulers (#1078) ref #1075 ([`0b3b1c4`](https://github.com/taskforcesh/bullmq/commit/0b3b1c4382de34bd68733d162c2fa2ba9417f79c)) - -* feat(job): add prefix getter (#1077) ([`db9ef10`](https://github.com/taskforcesh/bullmq/commit/db9ef105a7a524d7502664d52bd9f9c7dfa9477f)) - -* feat(backoff): validate UnrecoverableError presence (#1074) ([`1defeac`](https://github.com/taskforcesh/bullmq/commit/1defeac3f251a13aad57f3027d8eb8f857e40acb)) - -* feat(get-job-counts): add default values (#1068) ([`1c7f841`](https://github.com/taskforcesh/bullmq/commit/1c7f841a52b3ea18fa7878f10986b362ccc6c4fe)) - -* feat(sandbox): pass parent property (#1065) ([`1fd33f6`](https://github.com/taskforcesh/bullmq/commit/1fd33f6fd3a3af17753de8c4d48e14ef86c7409c)) - -* feat(job): pass queueName into sandbox (#1053) fixes #1050 ref #1051 ([`12bb19c`](https://github.com/taskforcesh/bullmq/commit/12bb19c1586d8755b973a80be97f407630827d4f)) - -* feat(queue): add retryJobs method for failed jobs (#1024) ([`310a730`](https://github.com/taskforcesh/bullmq/commit/310a730ed322501cc19cdd5cf5244bc8eee6fee2)) - -* feat(queue-events): add retries-exhausted event (#1010) ([`e476f35`](https://github.com/taskforcesh/bullmq/commit/e476f35f5c3f9b1baf2bbc3d46712b8ba597f73c)) - -* feat(queue): add JobType and JobState unions for better typing (#1011) ([`3b9b79d`](https://github.com/taskforcesh/bullmq/commit/3b9b79dbdd754ab66c3948e7e16380f2d5513262)) - -* feat(sanboxed-process): support .cjs files (#984) ([`531e4de`](https://github.com/taskforcesh/bullmq/commit/531e4de1525f2cf322e0b97f5537ed43276ff72b)) - -* feat(job): use generic types for static methods (#975) ([`f78f4d0`](https://github.com/taskforcesh/bullmq/commit/f78f4d0f75adb5c73558b3e8cf511db22f972791)) - -* feat(queue): add better event typing (#971) ([`596fd7b`](https://github.com/taskforcesh/bullmq/commit/596fd7b260f2e95607f0eb4ff9553fb35137ec54)) - -* feat(queue-scheduler): add better event typing (#963) ([`b23c006`](https://github.com/taskforcesh/bullmq/commit/b23c006e2bfce8a0709f0eb8e8739261b68c2f48)) - -* feat(worker): add better event typing (#940) ([`a326d4f`](https://github.com/taskforcesh/bullmq/commit/a326d4f27e96ffa462a908ac14356d29839ff073)) - -* feat(queue-events): add better event typing (#919) ([`e980080`](https://github.com/taskforcesh/bullmq/commit/e980080767bc56ae09a5c5cf33728a85a023bb42)) - -* feat(script-loader): lua script loader with include support (#897) ([`64b6ccf`](https://github.com/taskforcesh/bullmq/commit/64b6ccf2a373b40d7ea763b3d35cf34f36ba11da)) - -* feat(load-includes): export includes to be reused in extensions (#877) ([`b56c4a9`](https://github.com/taskforcesh/bullmq/commit/b56c4a9cf2ecebb44481618026589162be61680a)) - -* feat(queue-events): add cleaned event (#865) ([`b3aebad`](https://github.com/taskforcesh/bullmq/commit/b3aebad8a62311e135d53be2e7c5e47740547465)) - -* feat(queue): add waiting event type declaration (#872) ([`f29925d`](https://github.com/taskforcesh/bullmq/commit/f29925da3b12f573582ea188ec386e86023cefc9)) - -* feat(flow): consider continually adding jobs (#828) fixes #826 ([`b0fde69`](https://github.com/taskforcesh/bullmq/commit/b0fde69f4370160a891e4654485c09745066b80b)) - -* feat: easier to build extensions on top of BullMQ ([`b1a9e64`](https://github.com/taskforcesh/bullmq/commit/b1a9e64a9184addc0b8245a04013e1c896e9c2bc)) - -* feat(sandboxed-process): handle init-failed error (#797) ([`5d2f553`](https://github.com/taskforcesh/bullmq/commit/5d2f55342b19ee99d34f8d8003f09359cfe17d4f)) - -* feat(queue): add drain lua script (#764) ([`2daa698`](https://github.com/taskforcesh/bullmq/commit/2daa698a7cc5dc8a6cd087b2d29356bc02fb4944)) - -* feat(queue-events): launch without launching process (#750) ([`23a2360`](https://github.com/taskforcesh/bullmq/commit/23a23606e727ca13b24924a1e867c6b557d6a09d)) - -* feat(worker): launch without launching process (#724) - -re #436 ([`af689e4`](https://github.com/taskforcesh/bullmq/commit/af689e4e3945b9bc68bfc08c8f0ad57644206c5b)) - -* feat(queue-scheduler): launch without launching process (#729) - -re #436 ([`f1932a7`](https://github.com/taskforcesh/bullmq/commit/f1932a789af13da9b705a72d6f633f984a218862)) - -* feat(queue-events): add waiting-children event (#704) ([`18b0b79`](https://github.com/taskforcesh/bullmq/commit/18b0b7954313274a61fcc058380bfb9d682c059d)) - -* feat(events): add added event when job is created (#699) ([`f533cc5`](https://github.com/taskforcesh/bullmq/commit/f533cc55a43cf6ea78a60e85102f15b1c1ff69a0)) - -* feat(flows): add queuesOptions for rate limit (#692) - -re #621 ([`6689ec3`](https://github.com/taskforcesh/bullmq/commit/6689ec3fadd21904d9935f932c047f540ed8caf0)) - -* feat(flow): add bulk ([`dc59fe6`](https://github.com/taskforcesh/bullmq/commit/dc59fe62e57b6e761fe4d2ab6179a69dc4792399)) - -* feat(queue): add missing events typings ([`b42e78c`](https://github.com/taskforcesh/bullmq/commit/b42e78c36cb6a6579a4c7cce1d7e969b230ff5b6)) - -* feat(job): add changeDelay method for delayed jobs ([`f0a9f9c`](https://github.com/taskforcesh/bullmq/commit/f0a9f9c6479062413abc0ac9a6f744329571a618)) - -* feat(flow-producer): add getFlow method ([`ce93d04`](https://github.com/taskforcesh/bullmq/commit/ce93d04c962686aff34f670f2decadadbf1cf4ca)) - -* feat(job): extend getDependencies to support pagination ([`9b61bbb`](https://github.com/taskforcesh/bullmq/commit/9b61bbb9160358f629cd458fa8dc4c9b6ebcd9f5)) - -* feat: add some event typing ([`934c004`](https://github.com/taskforcesh/bullmq/commit/934c0040b0802bb67f44a979584405d795a8ab5e)) - -* feat: add move to waiting children for manual processing (#477) ([`f312f29`](https://github.com/taskforcesh/bullmq/commit/f312f293b8cac79af9c14848ffd1b11b65a806c3)) - -* feat(custombackoff): provide job as third parameter ([`ddaf8dc`](https://github.com/taskforcesh/bullmq/commit/ddaf8dc2f95ca336cb117a540edd4640d5d579e4)) - -* feat(job): add sizeLimit option when creating a job ([`f10aeeb`](https://github.com/taskforcesh/bullmq/commit/f10aeeb62520d20b31d35440524d147ac4adcc9c)) - -* feat: add option for non-blocking getNextJob ([`13ce2cf`](https://github.com/taskforcesh/bullmq/commit/13ce2cfd4ccd64f45567df31de11af95b0fe67d9)) - -* feat(job): pass parent opts to addBulk ([`7f21615`](https://github.com/taskforcesh/bullmq/commit/7f216153293e45c4f33f2592561c925ca4464d44)) - -* feat(jobcreate): allow passing parent in job.create ([`ede3626`](https://github.com/taskforcesh/bullmq/commit/ede3626b65fb5d3f4cebc55c813e9fa4b482b887)) - -* feat(worker): passing token in processor function ([`2249724`](https://github.com/taskforcesh/bullmq/commit/2249724b1bc6fbf40b0291400011f201fd02dab3)) - -* feat: add support for flows (parent-child dependencies) (#454) ([`362212c`](https://github.com/taskforcesh/bullmq/commit/362212c58c4be36b5435df862503699deb8bb79c)) - -* feat: add support for manually processing jobs fixes #327 ([`e42bfd2`](https://github.com/taskforcesh/bullmq/commit/e42bfd2814fc5136b175470c3085355090cc2e01)) - -* feat(sandbox): kill child workers gracefully (#243) ([`4262837`](https://github.com/taskforcesh/bullmq/commit/4262837bc67e007fe44606670dce48ee7fec65cd)) - -* feat: add grouped rate limiting ([`3a958dd`](https://github.com/taskforcesh/bullmq/commit/3a958dd30d09a049b0d761679d3b8d92709e815e)) - -* feat(types): add sandboxed job processor types (#114) ([`a50a88c`](https://github.com/taskforcesh/bullmq/commit/a50a88cd1658fa9d568235283a4c23a74eb8ed2a)) - -* feat: remove delay dependency - -this commit uses delay from utils in typescript and adds a simple -test/fixtures/delay.js for use in javascript fixtures. this change also -allowed the ts compiler to identify a promise that was not `await`ed in -src/test/test_worker.ts ([`97e1a30`](https://github.com/taskforcesh/bullmq/commit/97e1a3015d853e615ddd623af07f12a194ccab2c)) - -* feat: remove dependence on Bluebird.delay #67 - -This approach uses a simple setTimeout-based delay in the only production -usage (src/classes/queue-events.ts), defined in src/util.ts, and since -there was already a devDependency on a library called -[delay](https://www.npmjs.com/package/delay), this commit uses that in -test contexts. It should be easy to replace that dep with a -`(ms:number) => new Promise(r => setTimeout(r, ms))` as well. - -Closes #67 ([`bedbaf2`](https://github.com/taskforcesh/bullmq/commit/bedbaf25af6479e387cd7548e246dca7c72fc140)) - -* feat: job.progress() return last progress for sandboxed processors - -ported from Bull3 (https://github.com/OptimalBits/bull/pull/1536) ([`5c4b146`](https://github.com/taskforcesh/bullmq/commit/5c4b146ca8e42c8a29f9db87326a17deac30e10e)) - -### Fix - -* fix(rate-limit): consider paused queue (#1931) ([`d97864a`](https://github.com/taskforcesh/bullmq/commit/d97864a550992aeb8673557c7d8f186ab4ccb5bf)) - -* fix(rate-limit): take in count priority (#1919) fixes #1915 ([`b8157a3`](https://github.com/taskforcesh/bullmq/commit/b8157a3424ceb60e662e80a3b0db918241b87ecc)) - -* fix(python): fix 'install_requires' to include semver (#1927) ([`ce86ece`](https://github.com/taskforcesh/bullmq/commit/ce86eceed40283b5d3276968b65ceae31ce425bb)) - -* fix(child): use named import for EventEmitter (#1887) ([`1db396d`](https://github.com/taskforcesh/bullmq/commit/1db396d1f54154dc94c796ae8b570336fc341f02)) - -* fix(rate-limit): consider paused queue when dynamic rate limit (#1884) ([`a23f37e`](https://github.com/taskforcesh/bullmq/commit/a23f37e4079d34c8589efc85e4d726a62244f0d2)) - -* fix(retry): consider when queue is paused (#1880) ([`01b621f`](https://github.com/taskforcesh/bullmq/commit/01b621fea0cbdae602482ff61361c05646823223)) - -* fix(worker): close open handles after closing (#1861) fixes #1312 ([`39286e8`](https://github.com/taskforcesh/bullmq/commit/39286e87e8ffabf641f229cf2da3db4c280f4637)) - -* fix(python): stop processes when force stop (#1837) ([`514699c`](https://github.com/taskforcesh/bullmq/commit/514699cd8be96db2320bf0f85d4b6593809a09f1)) - -* fix(python): correct condition so that the worker keeps processing jobs indefinitely (#1800) ([`ef0c5d6`](https://github.com/taskforcesh/bullmq/commit/ef0c5d6cae1dcbae607fa02da32d5236069f2339)) - -* fix(flow): do not remove completed children results (#1788) fixes #1778 ([`04b547a`](https://github.com/taskforcesh/bullmq/commit/04b547ad3df02cb94c499f7f26678e19c6797e7e)) - -* fix(python): fix scripts typing on array2obj function (#1786) ([`134f6ab`](https://github.com/taskforcesh/bullmq/commit/134f6ab5f3219ddd7a421e61ace6bac72bb51e6d)) - -* fix(flow): consider removing dependency on removeOnFail true (#1753) ([`de5a299`](https://github.com/taskforcesh/bullmq/commit/de5a299f109834ab0235ae6fb6286fd94fcef961)) - -* fix(python): pass maxMetricsSize as empty string when it is not provided fixes #1754 ([`6bda2b2`](https://github.com/taskforcesh/bullmq/commit/6bda2b24be38a78e5fcfc71ed2913f0150a41dfc)) - -* fix(job): avoid error when job is moved when processing (#1354) fixes #1343 #1602 ([`78085e4`](https://github.com/taskforcesh/bullmq/commit/78085e4304357dd3695df61057f91e706c3a52bf)) - -* fix(worker): restore failed event job parameter typing (#1707) ([`44c2203`](https://github.com/taskforcesh/bullmq/commit/44c2203ab65d406be9a913254600fe07c83e62d5)) - -* fix(worker): failed event receives an optional job parameter (#1702) fixes #1690 ([`6009906`](https://github.com/taskforcesh/bullmq/commit/6009906355765bf00cba5c1505e9e0c6bf8f14db)) - -* fix(job): check jobKey when saving stacktrace (#1681) fixes #1676 ([`1856c76`](https://github.com/taskforcesh/bullmq/commit/1856c7684c377ca4fd36294cca8e128404be27b8)) - -* fix(error): remove global prototype toJSON (#1642) fixes #1414 ([`d4e7108`](https://github.com/taskforcesh/bullmq/commit/d4e7108a37aeabdd3085a26c9daf09cea5976f3e)) - -* fix(move-to-finished): return correct delayUntil (#1643) ([`c4bf9fa`](https://github.com/taskforcesh/bullmq/commit/c4bf9fa6563eda1630d8eb2189b16e9324b01c7f)) - -* fix(move-to-active): delete marker when it is moved to active (#1634) ([`ad1fcea`](https://github.com/taskforcesh/bullmq/commit/ad1fcea4500d4ceed51d5d5b0a03dbb5e1735a42)) - -* fix(move-to-active): validate next marker and return delayUntil (#1630) ([`3cd3305`](https://github.com/taskforcesh/bullmq/commit/3cd33052fc711a9ba560c9a431630be5cdd02193)) - -* fix(worker): add max concurrency from the beginning (#1597) fixes #1589 ([`6f49db3`](https://github.com/taskforcesh/bullmq/commit/6f49db3fb15119d13f99cd83d49f2a7bdcb614cd)) - -* fix: circular references (#1622) ([`f607ec7`](https://github.com/taskforcesh/bullmq/commit/f607ec7530fb4430e8cab7ed325583bd9d171ccf)) - -* fix: #1603 performance issues in `remove()` (#1607) ([`2541215`](https://github.com/taskforcesh/bullmq/commit/2541215bcf81dcd52eaefa02530c3812a5135fbf)) - -* fix(delayed): remove marker after being consumed (#1620) fixes #1615 ([`9fce0f0`](https://github.com/taskforcesh/bullmq/commit/9fce0f05e5acc1918a276b03e8cb9c16083cb509)) - -* fix(sandbox): throw error when no exported function (#1588) fixes #1587 ([`c031891`](https://github.com/taskforcesh/bullmq/commit/c03189184c8eeeb324f005b86e93d114abbe2154)) - -* fix(job): fetch parent before job moves to complete (#1580) ([`6a6c0dc`](https://github.com/taskforcesh/bullmq/commit/6a6c0dca30bb0a2417e0c62d4c80202c750322dd)) - -* fix(get-jobs): filter marker (#1551) ([`4add0ef`](https://github.com/taskforcesh/bullmq/commit/4add0efa7857cc2f7b6d3c0c78a7f82cb7a46933)) - -* fix(exponential): respect exponential backoff delay (#1581) ([`145dd32`](https://github.com/taskforcesh/bullmq/commit/145dd329bb9f8254b404f4c5fbf7a50359202d37)) - -* fix(worker): add token postfix (#1575) ([`1d3e368`](https://github.com/taskforcesh/bullmq/commit/1d3e368021041bb9861761c86fe3e04914b0c52f)) - -* fix(worker): try catch setname call (#1576) fixes #1574 ([`0c42fd8`](https://github.com/taskforcesh/bullmq/commit/0c42fd8c07dbac7ace81e97e45440af93fc622a5)) - -* fix(get-workers): set name when ready event in connection (#1564) ([`de93c17`](https://github.com/taskforcesh/bullmq/commit/de93c172901650e1666c48423a39076f2c7b9c7b)) - -* fix(job): console warn custom job ids when they represent integers (#1569) ([`6e677d2`](https://github.com/taskforcesh/bullmq/commit/6e677d2800957b368bef4247b8e4328c5758f262)) - -* fix(add-job): throw error when jobId represents an integer (#1556) ([`db617d7`](https://github.com/taskforcesh/bullmq/commit/db617d79e8f55b5c9e0df4b6bfd4247612016da1)) - -* fix(add-job): do not update job that already exist (#1550) ([`26f6311`](https://github.com/taskforcesh/bullmq/commit/26f6311cd0d2b936e404d0abebca9637f314a209)) - -* fix(rate-limit): delete rateLimiterKey when 0 (#1553) ([`0b88e5b`](https://github.com/taskforcesh/bullmq/commit/0b88e5b94b4a0dc0d4000f7fd4b327f402248ad2)) - -* fix(worker): consider removed jobs in failed event (#1500) ([`8704b9a`](https://github.com/taskforcesh/bullmq/commit/8704b9a10575fd7df738296f7156057123592b86)) - -* fix(change-delay): remove delayed stream (#1509) ([`6e4809e`](https://github.com/taskforcesh/bullmq/commit/6e4809e5d8f7ef35bc0871d21bfcdcb0f1f316c6)) - -* fix(worker): restore dynamic concurrency change (#1515) ([`fdac5c2`](https://github.com/taskforcesh/bullmq/commit/fdac5c27607dfaaaad1c1256c47f2ae448efcd21)) - -* fix(retry-job): consider promoting delayed jobs (#1508) ([`d0b3412`](https://github.com/taskforcesh/bullmq/commit/d0b3412d222449c24ab36068a791d08ea19ed922)) - -* fix(move-to-delayed): consider promoting delayed jobs (#1493) ([`909da2b`](https://github.com/taskforcesh/bullmq/commit/909da2bc2718a588379b3fdd9791bc8e51ad1dad)) - -* fix(repeat): remove cron in favor of pattern option (#1456) ([`3cc150e`](https://github.com/taskforcesh/bullmq/commit/3cc150e32cb5971ad4ba6ff91246aaf75296c165)) - -* fix(job): send failed event when failParentOnFailure (#1481) fixes #1469 ([`b20eb6f`](https://github.com/taskforcesh/bullmq/commit/b20eb6f65c7e2c4593d5f9f4d4b940f780bf26d2)) - -* fix(connection): validate array of strings in Cluster (#1468) fixes #1467 ([`8355182`](https://github.com/taskforcesh/bullmq/commit/8355182a372b68ec62e9c3953bacbd69e0abfc74)) - -* fix(sandbox): get open port using built-in module instead of get-port (#1446) ([`6db6288`](https://github.com/taskforcesh/bullmq/commit/6db628868a9d64c5a3e47d1c9201017e6d05c1ae)) - -* fix(job): update delay value when moving to wait (#1436) ([`9560915`](https://github.com/taskforcesh/bullmq/commit/95609158c1800cf661f22ad7995541fb9474826a)) - -* fix(drain): consider empty active list (#1412) ([`f919a50`](https://github.com/taskforcesh/bullmq/commit/f919a50b2f4972dcb9ecd5848b0f7fd9a0e137ea)) - -* fix(job): update delay when changeDelay (#1389) fixes #1160 ([`d9b100d`](https://github.com/taskforcesh/bullmq/commit/d9b100d04112c518ef2efbcf5586aa1226ccccab)) - -* fix: revert "chore: allow esm imports through exports field" (#1388) ([`8e51272`](https://github.com/taskforcesh/bullmq/commit/8e512724b1e8145bceb0152b70a934decf6d6864)) - -* fix: revert "feat(sandbox): experimental support ESM" (#1384) - -This reverts commit ed0faff3c67c436116eb625ffacb03e435caee3f. ([`7d180eb`](https://github.com/taskforcesh/bullmq/commit/7d180eb18daa41062dcbca72213bc9d9f40153db)) - -* fix(clean): consider priority when cleaning waiting jobs (#1357) ([`ced5be1`](https://github.com/taskforcesh/bullmq/commit/ced5be1c9531953baa9cf87d6bda3faa5863270d)) - -* fix(parent-priority-check): use tonumber on priority (#1370) ([`e2043c6`](https://github.com/taskforcesh/bullmq/commit/e2043c6f4b8ad5faea8c13edde76aea60612fec6)) - -* fix(move-parent-to-wait): emit waiting instead of active event (#1356) ([`53578dd`](https://github.com/taskforcesh/bullmq/commit/53578dd1cbe31b49361a833b1aca449486f3b925)) - -* fix(job): declare discarded as protected (#1352) ([`870e01c`](https://github.com/taskforcesh/bullmq/commit/870e01c4ab602c1e6e351cc369f3eac5f7afa083)) - -* fix(get-flow): consider groupKey (#1336) fixes #1334 ([`9f31272`](https://github.com/taskforcesh/bullmq/commit/9f31272fa8b3f5b8ab26f15e21bd80537c5baef0)) - -* fix(promote): consider empty queue when paused (#1335) ([`9f742e8`](https://github.com/taskforcesh/bullmq/commit/9f742e88d6338ce9ac7e0413bdac411ab6cf675c)) - -* fix(sandboxed-process): consider UnrecoverableError (#1320) fixes #1317 ([`c1269cc`](https://github.com/taskforcesh/bullmq/commit/c1269cc772c6cec84d82ff790b9a7c9cc4242dcb)) - -* fix(retry-jobs): consider paused queue (#1321) ([`3e9703d`](https://github.com/taskforcesh/bullmq/commit/3e9703d17fc9dc601d5d77e999f3e9a137f20843)) - -* fix(retry-job): consider paused queue (#1314) ([`907ae1d`](https://github.com/taskforcesh/bullmq/commit/907ae1d7e3504f31c625ec8a09e32785f08357ff)) - -* fix(parent): emit waiting event when no pending children (#1296) ([`aa8fa3f`](https://github.com/taskforcesh/bullmq/commit/aa8fa3f8cd5ab6d7d309d87ae45c558249b1c29c)) - -* fix: avoid calling delay() if queue is being closed (#1295) ([`52a5045`](https://github.com/taskforcesh/bullmq/commit/52a5045b903ed6e0e73dd747748787a6389f12f7)) - -* fix(queue): get rid of repeat options from defaultJobOptions (#1284) ([`cdd2a20`](https://github.com/taskforcesh/bullmq/commit/cdd2a20c2c4ca47042ecd1da525ecb72941e4910)) - -* fix(error-prototype): define custom name for toJSON method (#1272) ([`66d80da`](https://github.com/taskforcesh/bullmq/commit/66d80da4a6043755c7d296addb31857816ea4da3)) - -* fix(queue): fix addBulk signature ResultType (#1268) ([`f6770cc`](https://github.com/taskforcesh/bullmq/commit/f6770cc383b68bf7b2fa655cd9eda713a06835aa)) - -* fix(job): save finishedOn attribute on instance (#1267) ([`4cf6a63`](https://github.com/taskforcesh/bullmq/commit/4cf6a63d197e6095841bb87cef297a9533ac79c3)) - -* fix(waiting-children): pass right timestamp value in moveToWaitingChildren (#1260) ([`0f993f7`](https://github.com/taskforcesh/bullmq/commit/0f993f71ed481b02a3f859a2109177352336cb9a)) - -* fix(close): emit ioredis:close event instead of error (#1251) fixes #1231 ([`74c1c38`](https://github.com/taskforcesh/bullmq/commit/74c1c38f7ff468da1adc63aff160e31940d682a9)) - -* fix(get-workers): use blockingConnection client to set clientName (#1255) fixes #1254 ([`df796bd`](https://github.com/taskforcesh/bullmq/commit/df796bd0c085aff72cef001395809b3f1a8045e4)) - -* fix(redis-connection): save cluster opts and coerse redis version (#1247) ref #1246 fixes #1243 ([`acb69b5`](https://github.com/taskforcesh/bullmq/commit/acb69b57d7a6417b8ca9fe1576a94d16e41f12d7)) - -* fix(job): add job helper attribute for extension (#1242) ([`4d7ae9e`](https://github.com/taskforcesh/bullmq/commit/4d7ae9e3fda23650e802ebac6b33ff3350f116f6)) - -* fix(remove-job): pass right prev param in removed event (#1237) ([`54df47e`](https://github.com/taskforcesh/bullmq/commit/54df47edf715a0a2a42687bf827e0a62c03951a5)) - -* fix(repeatable): emit removed event when removing (#1229) ([`7d2de8d`](https://github.com/taskforcesh/bullmq/commit/7d2de8d075e5ee7774501429c5177b729c430c20)) - -* fix(remove-parent): check removed record from waiting-children (#1227) ([`e7b25d0`](https://github.com/taskforcesh/bullmq/commit/e7b25d00acb860ee3df36c6214a7162b2cf79635)) - -* fix(stalled): consider removeOnFail when failing jobs (#1225) fixes #1171 ([`38486cb`](https://github.com/taskforcesh/bullmq/commit/38486cb4d7cbfc78bd64d71f19d8bfbc908f3fc7)) - -* fix(add-bulk): use for loop and throw if error is present (#1223) fixes #1222 ([`564de4f`](https://github.com/taskforcesh/bullmq/commit/564de4f907648f5a5667a845c5366f73cff1d384)) - -* fix(job): delete token when moving to delayed (#1208) ([`37acf41`](https://github.com/taskforcesh/bullmq/commit/37acf4109d17090dfaef992267e48130d34f7187)) - -* fix(queue-base): emit close error when no closing (#1203) fixes #1205 ([`4d76582`](https://github.com/taskforcesh/bullmq/commit/4d7658272af94b57a09486e1141b0e15a7bac3ba)) - -* fix(queue-scheduler): apply isNotConnectionError (#1189) fixes #1181 ([`605d685`](https://github.com/taskforcesh/bullmq/commit/605d68595d8fa1d9d47348a3fa9e0d7a4e28c706)) - -* fix(cluster): check correct Upstash host (#1195) fixes #1193 ([`69f2863`](https://github.com/taskforcesh/bullmq/commit/69f28632408c741219c1ba49304d36f49cf5cb83)) - -* fix(job): remove Error from Promise return in moveToWaitingChildren (#1197) ([`180a8bf`](https://github.com/taskforcesh/bullmq/commit/180a8bf8fb2fe62b9929765a6dfd084574c77936)) - -* fix(worker): restore worker suffix to empty string (#1194) fixes #1185 ([`2666ea5`](https://github.com/taskforcesh/bullmq/commit/2666ea5b8532645da24482cf01c5692da5f2ceda)) - -* fix(connection): remove Queue reconnect overrides (#1119) ([`83f1c79`](https://github.com/taskforcesh/bullmq/commit/83f1c797b8a5272028c8d78d5ce464236e90909e)) - -* fix(clean): consider processedOn and finishedOn attributes (#1158) ([`8c3cb72`](https://github.com/taskforcesh/bullmq/commit/8c3cb72235ec6123da389553f37433c2943e0f57)) - -* fix(queue): close repeat connection when calling close (#1154) ([`7d79616`](https://github.com/taskforcesh/bullmq/commit/7d796167229048ec79660ca5d3ac8a7c85d125e7)) - -* fix(async-send): check proc.send type (#1150) ([`4f44173`](https://github.com/taskforcesh/bullmq/commit/4f44173f0a3cc54705ca9a7e1730aeff26ea1c5a)) - -* fix(trim-events): consider maxLenEvents as 0 (#1137) ([`bc58a49`](https://github.com/taskforcesh/bullmq/commit/bc58a49fba1b6f4e3595a0371ecf8410000a9021)) - -* fix(flow): remove processed children (#1060) fixes #1056 ([`6b54e86`](https://github.com/taskforcesh/bullmq/commit/6b54e86c12f287a13da036f3ec7801b8656f0434)) - -* fix(master): do not export master file (#1136) fixes #1125 ref #1129 ([`6aa2f96`](https://github.com/taskforcesh/bullmq/commit/6aa2f9657b8787aa791ab5af7267a6d27d7d7869)) - -* fix(queue): sanitize job types in getJobs and getJobsCount (#1113) fixes #1112 ([`d452b29`](https://github.com/taskforcesh/bullmq/commit/d452b29773cead153a73b8322adda3164fb610d8)) - -* fix(drained): emit event only once when queue has drained the waiting list (#1123) fixes #1121 ref #1070 ([`b89b4e8`](https://github.com/taskforcesh/bullmq/commit/b89b4e8a83fe4c9349ac5a9c439fc07374ff1e63)) - -* fix(utils): fix proc.send type (#1122) fixes #1120 ([`da23977`](https://github.com/taskforcesh/bullmq/commit/da239774379825d9f0a51c118740bc0fefa568bd)) - -* fix(get-waiting-children-count): consider waiting-children status only (#1117) ([`1820df7`](https://github.com/taskforcesh/bullmq/commit/1820df73c17ce119d2fdb0f526fc95f99845a5ec)) - -* fix(rate-limiter): move job to wait after retry when groupKey is missed (#1103) fixes #1084 ([`8aeab37`](https://github.com/taskforcesh/bullmq/commit/8aeab37ac5a5c1c760be21bff2ba8752a485577c)) - -* fix(cluster): check for host presence in Upstash validation (#1102) fixes #1101 ([`54d4eac`](https://github.com/taskforcesh/bullmq/commit/54d4eac52cfe13d4be99410932c0226c8d06d5d5)) - -* fix(connection): throw error when Upstash host is provided (#1098) fixes #1087 ([`5156d0a`](https://github.com/taskforcesh/bullmq/commit/5156d0a4812d8c649a3b41bd98e3e0efb41d0491)) - -* fix(move-to-finished): increment attemptsMade when moving job to active (#1095) fixes #1094 ([`321b0e1`](https://github.com/taskforcesh/bullmq/commit/321b0e1d515d01c5b3f1ca9f404cd571e3f753b7)) - -* fix(flow): respect defaultJobOptions from queue opts (#1080) fixes #1034 - - - -* docs(flow): add descriptions of opts param ([`0aca072`](https://github.com/taskforcesh/bullmq/commit/0aca072f805302e660b6675fd4097ba893c91eb0)) - -* fix(move-to-finished): validate lock first (#1064) ([`9da1b29`](https://github.com/taskforcesh/bullmq/commit/9da1b29486c6c6e2b097ec2f6107494a36525495)) - -* fix(clean): consider checking parent jobs when cleaning (#1048) ([`0708a24`](https://github.com/taskforcesh/bullmq/commit/0708a24c7f4cb6d1cda776ed983d3f20fc3261f1)) - -* fix(drain): delete priority queueKey (#1049) ([`2e6129a`](https://github.com/taskforcesh/bullmq/commit/2e6129a4a08783eeafa2f0b69c10ac810f53d085)) - -* fix(update): throw error when missing job key (#1042) ([`a00ae5c`](https://github.com/taskforcesh/bullmq/commit/a00ae5c9b3f6d51cb0229adca29d13d932fc5601)) - -* fix(drain): consider checking parent jobs when draining (#992) ([`81b7221`](https://github.com/taskforcesh/bullmq/commit/81b72213a9ff31d6b297825391de77557598ebd1)) - -* fix(repeat): consider immediately option with cron (#1030) fixes #1020 ([`b9e7488`](https://github.com/taskforcesh/bullmq/commit/b9e748870385a88b2384df40f50df3144c11d7e0)) - -* fix(retry): pass state in error message (#1027) ([`c646a45`](https://github.com/taskforcesh/bullmq/commit/c646a45377fdfaff340185d1f7bedceb80c214c2)) - -* fix(job): increase attemptsMade when moving job to active (#1009) fixes #1002 ([`0974ae0`](https://github.com/taskforcesh/bullmq/commit/0974ae0ff6db73c223be4b18fb2aab53b6a23c88)) - -* fix: dont loop through empty modules paths (#1013) fixes #1012 ([`86e84df`](https://github.com/taskforcesh/bullmq/commit/86e84df933c2662380b00a11b5f4000f2618d218)) - -* fix(queue): use 0 as initial value for getJobCountByTypes reducer (#1005) ([`f0e23ef`](https://github.com/taskforcesh/bullmq/commit/f0e23ef01b97d36c775db0bf8c9dd2f63f6cb194)) - -* fix(remove-job): consider removing parent dependency key in lua scripts (#990) ([`661abf0`](https://github.com/taskforcesh/bullmq/commit/661abf0921e663c9ea2fa7d59c12da35950637dc)) - -* fix(job): throw error when delay and repeat are provided together (#983) ([`07b0082`](https://github.com/taskforcesh/bullmq/commit/07b008273ead9360fc43564fa9ff1a7503616ceb)) - -* fix(queue): add missing error event typing (#979) ([`afdaac6`](https://github.com/taskforcesh/bullmq/commit/afdaac6b072c7af5973222cc7fb69f3f138f3b0b)) - -* fix(update-progress): throw error if job key is missing (#978) ref #977 ([`b03aaf1`](https://github.com/taskforcesh/bullmq/commit/b03aaf10ca694745d143def2129f952b9bac18a6)) - -* fix: add deprecated tag in progress and Queue3 class (#973) ([`6abdf5b`](https://github.com/taskforcesh/bullmq/commit/6abdf5b66717cc8bc8ddb048029f7d9b92509942)) - -* fix: downgrade typescript to 3.9.10 fixes #917 (#960) ([`4e51fe0`](https://github.com/taskforcesh/bullmq/commit/4e51fe00751092ee8f521039a3f2b41d881b71ae)) - -* fix(package): add jsnext:main prop (#953) ([`1a92bf7`](https://github.com/taskforcesh/bullmq/commit/1a92bf7d41860f758841c5a833c1192d9a84a25f)) - -* fix(redis-connection): consider cluster redisOptions config (#934) ([`5130f63`](https://github.com/taskforcesh/bullmq/commit/5130f63ad969efa9649ab8f9abf36a72e8f553f4)) - -* fix(move-to-active): add try catch in moveToActive call (#933) ([`bab45b0`](https://github.com/taskforcesh/bullmq/commit/bab45b05d08c625557e2df65921e12f48081d39c)) - -* fix: remove debug console.error (#932) ([`271aac3`](https://github.com/taskforcesh/bullmq/commit/271aac3417bc7f76ac02435b456552677b2847db)) - -* fix(connection): check instance options to console log deprecation message (#927) ([`fc1e2b9`](https://github.com/taskforcesh/bullmq/commit/fc1e2b9f3f20db53f9dc7ecdfa4644f02acc9f83)) - -* fix(worker): better handling of block timeout ([`be4c933`](https://github.com/taskforcesh/bullmq/commit/be4c933ae0a7a790d24a081b2ed4e7e1c0216e47)) - -* fix(worker): always try to move to active after waiting for job (#914) ([`97b7084`](https://github.com/taskforcesh/bullmq/commit/97b708451bf4ce14a461a50f8a24d14b0e40dd4b)) - -* fix(stalled): save finidhedOn when job stalled more than allowable limit (#900) ([`eb89edf`](https://github.com/taskforcesh/bullmq/commit/eb89edf2f4eb85dedb1485de32e79331940a654f)) - -* fix(tsconfig): only include node types (#895) ([`5f4fdca`](https://github.com/taskforcesh/bullmq/commit/5f4fdca5f416f2cd9d83eb0fba84e56c24320b63)) - -* fix(child-processor): add deprecation warning for progress method (#890) ([`f80b19a`](https://github.com/taskforcesh/bullmq/commit/f80b19a5aa85413b8906aa0fac1bfd09bec990cb)) - -* fix(clean): use range values in lua script (#885) ([`02ef63a`](https://github.com/taskforcesh/bullmq/commit/02ef63a8163e627a270a1c1bd74989a67c3f15f7)) - -* fix(job): use this when use new operators (#884) ([`7b84283`](https://github.com/taskforcesh/bullmq/commit/7b842839e1d30967ebf15b901033e3b31e929df8)) - -* fix(job): change private attributes to protected for extensions (#882) ([`ffcc3f0`](https://github.com/taskforcesh/bullmq/commit/ffcc3f083c23e6de3587c38fb7aacb2e19085351)) - -* fix(worker): change private attributes to protected for pro extension (#874) ([`1c73881`](https://github.com/taskforcesh/bullmq/commit/1c738819b49f206688ed7b3b9d103077045e1b05)) - -* fix(move-to-failed): delete closing check that prevents script execution (#858) fixes #834 ([`d50814f`](https://github.com/taskforcesh/bullmq/commit/d50814f864448c10fec8e93651a2095fa4ef3f4e)) - -* fix(flow): remove repeat option from FlowJob opts (#853) fixes #851 ([`c9ee2f1`](https://github.com/taskforcesh/bullmq/commit/c9ee2f100a23aa24034598b7d452c69720d7aabd)) - -* fix(commands): copy includes lua scripts (#843) fixes #837 ([`cab33e0`](https://github.com/taskforcesh/bullmq/commit/cab33e08bc78bd3c45b86158a818100beeb06d81)) - -* fix(queue-base): show connection deprecation warning (#832) fixes #829 ([`5d023fe`](https://github.com/taskforcesh/bullmq/commit/5d023fe7b671a2547398fd68995ccd85216cc7a5)) - -* fix(child-pool): pipe process stdout and stderr(#822) fixes #821 ([`13f5c62`](https://github.com/taskforcesh/bullmq/commit/13f5c62174925e4638acda6a9de379668048189d)) - -* fix(msgpackr): upgrade version to 1.4.6 to support esm bundlers (#818) fixes #813 ([`913d7a9`](https://github.com/taskforcesh/bullmq/commit/913d7a9a892d2c7e2fa5822367355c2dee888583)) - -* fix(change-delay): add current time to delay (#789) fixes #787 ([`4a70def`](https://github.com/taskforcesh/bullmq/commit/4a70def6e85cf9ea384ec5f38c3c4f83e4eb523c)) - -* fix(obliterate): consider dependencies and processed keys (#765) ([`fd6bad8`](https://github.com/taskforcesh/bullmq/commit/fd6bad8c7444c21e6f1d67611a28f8e4aace293d)) - -* fix(flow-producer): use default prefix in add method (#763) fixes #762 ([`fffdb55`](https://github.com/taskforcesh/bullmq/commit/fffdb55f37917776494a4471673ef4564e0faab5)) - -* fix(running): move running attribute before first async call (#756) ([`f7f0660`](https://github.com/taskforcesh/bullmq/commit/f7f066076bbe6cbcbf716ae622d55c6c1ae9b270)) - -* fix(wait-for-job): add catch block and emit error (#749) ([`b407f9a`](https://github.com/taskforcesh/bullmq/commit/b407f9ac429c825984856eebca58bbfd16feb9d3)) - -* fix(connection): fail only if redis connection does not recover (#751) ([`8d59ced`](https://github.com/taskforcesh/bullmq/commit/8d59ced27831a636f40ed4233eba3d4ac0654534)) - -* fix(is-finished): reject when missing job key (#746) fixes #85 ([`bd49bd2`](https://github.com/taskforcesh/bullmq/commit/bd49bd20492676559072e5e16adb6d4e47afb22b)) - -* fix(wait-until-finished): isFinished return failedReason or returnValue (#743) fixes #555 ([`63acae9`](https://github.com/taskforcesh/bullmq/commit/63acae98cb083ec978ea17833819d1a21086be33)) - -* fix(add-job): throw error when missing parent key (#739) ([`d751070`](https://github.com/taskforcesh/bullmq/commit/d751070f4ab6553c782341270574ccd253d309b8)) - -* fix(queue-events): duplicate connection (#733) fixes #726 ([`e2531ed`](https://github.com/taskforcesh/bullmq/commit/e2531ed0c1dc195f210f8cf996e9ffe04c9e4b7d)) - -* fix(worker): use spread operator in processing map keys (#720) ([`32f1e57`](https://github.com/taskforcesh/bullmq/commit/32f1e570a9a3369174a228f729f1d1330dcb6965)) - -* fix(retry): throw error when retry non failed job (#717) ([`bb9b192`](https://github.com/taskforcesh/bullmq/commit/bb9b192e9a1a4f3c25374fcb8c0fb2159eb3f779)) - -* fix: connect if redis client has status "wait" - -Summary: When supplying your own IORedis instance and `lazyConnect` is true, the RedisConnection instance will not connect on its own because it does not check if it's `status` is "wait". While this may be intended behavior, there is no direct way to call `connect` on the duplicated Redis instance causing it to never connect and indefinitely wait until ready. ([`f711717`](https://github.com/taskforcesh/bullmq/commit/f711717f56822aef43c9fd0440e30fad0876ba62)) - -* fix(queue): ensure the Queue constructor doesn't try to set queue options if the client is closed - -In my app we disconnect queues sometimes quite quickly after constructing them, and see this error every so often in our CI logs: - -``` -/app/node_modules/bullmq/node_modules/ioredis/built/redis/index.js:620 - command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG)); - ^ -Error: Connection is closed. - at Redis.sendCommand (/app/node_modules/bullmq/node_modules/ioredis/built/redis/index.js:620:24) - at Redis.hset (/app/node_modules/bullmq/node_modules/ioredis/built/commander.js:111:25) - at /app/node_modules/bullmq/src/classes/queue.ts:29:14 -``` - -I am not exactly sure why it only happens sometimes but not others, but regardless, I think it's a good idea not to try to run the floating `hset` in the queue constructor if the client has been closed. This prevents that by first checking if the client has been closed before doing this floating work. ([`b40c6eb`](https://github.com/taskforcesh/bullmq/commit/b40c6eb931a71d0ae9f6454eb70d84259a6981b7)) - -* fix(sandbox): use updateProgress method name ([`27d62c3`](https://github.com/taskforcesh/bullmq/commit/27d62c32b2fac091b2700d6077de593c9fda4c22)) - -* fix(reprocess): do not store job.id in added list ([`9c0605e`](https://github.com/taskforcesh/bullmq/commit/9c0605e10f0bbdce94153d3f318d56c23bfd3269)) - -* fix(stalled-jobs): move stalled jobs to wait in batches - -re #422 ([`a23fcb8`](https://github.com/taskforcesh/bullmq/commit/a23fcb82d4ca20cbc4b8cd8b544b2d2eaddd86c3)) - -* fix(redis-connection): remove error event listener from client ([`2d70fe7`](https://github.com/taskforcesh/bullmq/commit/2d70fe7cc7d43673674ec2ba0204c10661b34e95)) - -* fix(worker): remove processed key when removeOnComplete ([`4ec1b73`](https://github.com/taskforcesh/bullmq/commit/4ec1b739d6aeeb2fc21887b58f5978027ddcdb50)) - -* fix(move-to-waiting-children): make opts optional ([`33bd76a`](https://github.com/taskforcesh/bullmq/commit/33bd76a2cac9be450b5d76c6cfe16751c7569ceb)) - -* fix(move-stalled-jobs-to-wait): send failedReason to queueEvents ([`7c510b5`](https://github.com/taskforcesh/bullmq/commit/7c510b542558bd4b1330371b73331f37b97a818d)) - -* fix(removejob): delete processed hash ([`a2a5058`](https://github.com/taskforcesh/bullmq/commit/a2a5058f18ab77ed4d0114d48f47e6144d632cbf)) - -* fix: ensure connection reconnects when pausing fixes #160 ([`f38fee8`](https://github.com/taskforcesh/bullmq/commit/f38fee84def75dd8a38cbb8bfb5aa662485ddf91)) - -* fix(getjoblogs): no reversed pagination ([`fb0c3a5`](https://github.com/taskforcesh/bullmq/commit/fb0c3a50f0d37851a8f35cb4c478259a63d93461)) - -* fix(flow-producer): use custom jobId as parentId for children, fixes #552 ([`645b576`](https://github.com/taskforcesh/bullmq/commit/645b576c1aabd8426ab77a68c199a594867cd729)) - -* fix(flow-producer): process parent with children as empty array, fixes #547 ([`48168f0`](https://github.com/taskforcesh/bullmq/commit/48168f07cbaed7ed522c68d127a0c7d5e4cb380e)) - -* fix(cluster): add redis cluster support ([`5a7dd14`](https://github.com/taskforcesh/bullmq/commit/5a7dd145bd3ae11850cac6d1b4fb9b01af0e6766)) - -* fix(sandbox): properly redirect stdout (#525) ([`c8642a0`](https://github.com/taskforcesh/bullmq/commit/c8642a0724dc3d2f77abc4b5d6d24efa67c1e592)) - -* fix(sandbox): handle broken processor files ([`2326983`](https://github.com/taskforcesh/bullmq/commit/23269839af0be2f7cf2a4f6062563d30904bc259)) - -* fix(queueevents): add active type fixes #519 ([`10af883`](https://github.com/taskforcesh/bullmq/commit/10af883db849cf9392b26724903f88752d9be92c)) - -* fix: add missing Redis Cluster types fixes #406 ([`07743ff`](https://github.com/taskforcesh/bullmq/commit/07743ff310ad716802afdd5bdc6844eb5296318e)) - -* fix(addjob): fix redis cluster CROSSSLOT ([`a5fd1d7`](https://github.com/taskforcesh/bullmq/commit/a5fd1d7a0713585d11bd862bfe2d426d5242bd3c)) - -* fix(movetocompleted): should not complete before children ([`812ff66`](https://github.com/taskforcesh/bullmq/commit/812ff664b3e162dd87831ca04ebfdb783cc7ae5b)) - -* fix: remove internal deps on barrel fixes #469 (#495) ([`60dbeed`](https://github.com/taskforcesh/bullmq/commit/60dbeed7ff1d9b6cb0e35590713fee8a7be09477)) - -* fix(flows): correct typings fixes #492 ([`a77f80b`](https://github.com/taskforcesh/bullmq/commit/a77f80bc07e7627f512323f0dcc9141fe408809e)) - -* fix(movetodelayed): check if job is in active state ([`4e63f70`](https://github.com/taskforcesh/bullmq/commit/4e63f70aac367d4dd695bbe07c72a08a82a65d97)) - -* fix(obliterate): safer implementation ([`82f571f`](https://github.com/taskforcesh/bullmq/commit/82f571f2548c61c776b897fd1c5050bb09c8afca)) - -* fix: specify promise type to make TS 4.1 and 4.2 happy. (#418) ([`702f609`](https://github.com/taskforcesh/bullmq/commit/702f609b410d8b0652c2d0504a8a67526966fdc3)) - -* fix: improve job timeout notification by giving the job name and id in the error message (#387) ([`ca886b1`](https://github.com/taskforcesh/bullmq/commit/ca886b1f854051aed0888f5b872a64b052b2383e)) - -* fix: job finish queue events race condition ([`355bca5`](https://github.com/taskforcesh/bullmq/commit/355bca5ee128bf4ff37608746f9c6f7cca580eb0)) - -* fix: catch errors from Repeat (#348) ([`09a1a98`](https://github.com/taskforcesh/bullmq/commit/09a1a98fc42dc1a9ae98bfb29c0cca3fac02013f)) - -* fix: correctly handle "falsy" data values fixes #264 ([`cf1dbaf`](https://github.com/taskforcesh/bullmq/commit/cf1dbaf7e60d74fc8443a5f8a537455f28a8dba3)) - -* fix: promote jobs to the right "list" when paused ([`d3df615`](https://github.com/taskforcesh/bullmq/commit/d3df615d37b1114c02eacb45f23643ee2f05374d)) - -* fix: clientCommandMessageReg to support GCP memorystore v5 ([`8408dda`](https://github.com/taskforcesh/bullmq/commit/8408dda9fa64fc0b968e88fb2726e0a30f717ed7)) - -* fix(worker): setname on worker blocking connection (#291) ([`50a87fc`](https://github.com/taskforcesh/bullmq/commit/50a87fcb1dab976a6a0273d2b0cc4b31b63c015f)) - -* fix(worker): continue processing if handleFailed fails. fixes #286 ([`4ef1cbc`](https://github.com/taskforcesh/bullmq/commit/4ef1cbc13d53897b57ae3d271afbaa1b213824aa)) - -* fix: remove async for loop in child pool fixes #229 ([`d77505e`](https://github.com/taskforcesh/bullmq/commit/d77505e989cd1395465c5222613555f79e4d9720)) - -* fix(typescript): fix typings, upgrade ioredis dependencies (#220) ([`7059f20`](https://github.com/taskforcesh/bullmq/commit/7059f2089553a206ab3937f7fd0d0b9de96aa7b7)) - -* fix: remove unused options ([`23aadc3`](https://github.com/taskforcesh/bullmq/commit/23aadc300b947693f4afb22296d236a924bd11ca)) - -* fix(scheduler): remove unnecessary division by 4096 ([`4d25e95`](https://github.com/taskforcesh/bullmq/commit/4d25e95f9522388bd85e932e04b6668e3da57686)) - -* fix(scheduler): divide timestamp by 4096 in update set fixes #168 ([`0c5db83`](https://github.com/taskforcesh/bullmq/commit/0c5db8391bb8994bee19f25a33efb9dfee792d7b)) - -* fix(scheduler): divide next timestamp by 4096 (#204) - -authored-by: Boris Dorofeev <bdorofeev@bdorofeev-laptop.corp.ps.kz> ([`9562d74`](https://github.com/taskforcesh/bullmq/commit/9562d74625e20b7b6de8750339c85345ba027357)) - -* fix(queue-base): error event is passed through - -Existing code doesn't seem to pass 'error' event through in a right way. ([`ad14e77`](https://github.com/taskforcesh/bullmq/commit/ad14e777171c0c44b7e50752d9847dec23f46158)) - -* fix(worker): do not use global child pool fixes #172 ([`bc65f26`](https://github.com/taskforcesh/bullmq/commit/bc65f26dd47c59d0a7277ac947140405557be9a5)) - -* fix(job): added nullable/optional properties - -Marked finishedOn and processedOn as nullable/optional ([`cef134f`](https://github.com/taskforcesh/bullmq/commit/cef134f7c4d87e1b80ba42a5e06c3877956ff4cc)) - -* fix: restore the Job timestamp when deserializing JSON data (#138) (#152) ([`c171bd4`](https://github.com/taskforcesh/bullmq/commit/c171bd47f7b75378e75307a1decdc0f630ac1cd6)) - -* fix: modified imports to work when esModuleInterop is disabled (#132) - -fixes https://github.com/taskforcesh/bullmq/issues/129 ([`01681f2`](https://github.com/taskforcesh/bullmq/commit/01681f282bafac2df2c602edb51d6bde3483896c)) - -* fix: exit code 12 when using inspect with child process (#137) ([`43ebc67`](https://github.com/taskforcesh/bullmq/commit/43ebc67cec3e8f283f9a555b4466cf918226687b)) - -* fix: cleanup signatures for queue add and addBulk (#127) - -The addBulk signature was missing the data type and the name parameter -did not match between the two functions. ([`48e221b`](https://github.com/taskforcesh/bullmq/commit/48e221b53909079a4def9c48c1b69cebabd0ed74)) - -* fix: modified QueueGetters.getJob and Job.fromId to return undefined -instead of null ([`ede352b`](https://github.com/taskforcesh/bullmq/commit/ede352be75ffe05bf633516db9eda88467c562bf)) - -* fix: modified QueueGetters.getJob and Job.fromId to also return null to -maintain consistency with v3 API. ([`65183fc`](https://github.com/taskforcesh/bullmq/commit/65183fcf542d0227ec1d4d6637b46b5381331787)) - -* fix: avoid the .toJSON serializer interface #70 - -renames Job#toJSON to Job#asJSON and adds a test ([`5941b82`](https://github.com/taskforcesh/bullmq/commit/5941b82b646e46d53970197a404e5ea54f09d008)) - -* fix: default job settings #58 - -I updated job options merging in order to override default job options when options are provided at job level. -Maybe a deep merge between the two objects could be even better. ([`667fc6e`](https://github.com/taskforcesh/bullmq/commit/667fc6e00ae4d6da639d285a104fb67e01c95bbd)) - -### Performance - -* perf(retry-job): get target queue list once (#1921) ([`8a7a9dd`](https://github.com/taskforcesh/bullmq/commit/8a7a9ddd793161a8591485ed18a191ece37026a8)) - -* perf(rate-limit): call pttl in script moveJobFromActiveToWait (#1889) ([`e0d2992`](https://github.com/taskforcesh/bullmq/commit/e0d2992eb757d437dede52054c049470d986ad44)) - -* perf(get-dependencies): replace slow object destructuring with single object (#1612) ([`621748e`](https://github.com/taskforcesh/bullmq/commit/621748ec7727b46ce57eb9d2b46ef981874cdf4c)) - -* perf(counts): delete delayed marker when needed (#1583) ([`cc26f1c`](https://github.com/taskforcesh/bullmq/commit/cc26f1cd550de76c7588d3a98187b80ee78c40c4)) - -* perf(get-children-values): replace slow object destructuring with single object (#1586) ([`857d403`](https://github.com/taskforcesh/bullmq/commit/857d40377a6eb2c0101e6d16d9085ecd4b52b016)) - -* perf(scripts): pre-build scripts (#1441) ([`7f72603`](https://github.com/taskforcesh/bullmq/commit/7f72603d463f705d0617898cb221f832c49a4aa3)) - -* perf(script-loader): use cache to read script once (#1410) ([`f956e93`](https://github.com/taskforcesh/bullmq/commit/f956e937ae3488cdcd0e2eacbe3e096c8066ebd1)) - -* perf(add-job): handle parent split on js (#1397) ([`566f074`](https://github.com/taskforcesh/bullmq/commit/566f0747110679e5b07e7642fef793744565fffe)) - -* perf(clean-jobs-in-set): use ZRANGEBYSCORE when limit > 0 (#1338) ([`f0d9985`](https://github.com/taskforcesh/bullmq/commit/f0d998541f03778ca2a092080a19e6bf7b7d0af1)) - -* perf(remove-job): send prefix key instead of jobKey (#1252) ([`452856a`](https://github.com/taskforcesh/bullmq/commit/452856a6c8c6e67ffda595c26c30988a15c1c1a4)) - -* perf(clean): speed up clean operation using deletion marker (#1144) ([`5fb32ef`](https://github.com/taskforcesh/bullmq/commit/5fb32ef2c60843d8d1f2cbc000aacf4df3388b7e)) - -* perf(move-to-finished): avoid an extra roundtrip when using rate limit (#1131) ([`1711547`](https://github.com/taskforcesh/bullmq/commit/171154707bf5cbcb750ea9d2a9957128c1abc044)) - -* perf(remove-parent-dependency): do not emit wait event in hard deletions (#1045) ([`4069821`](https://github.com/taskforcesh/bullmq/commit/40698218d13a880615f832a9926f0f057b1c33f9)) - -* perf(lua): call del command with multiple keys (#1035) ([`9cfaab8`](https://github.com/taskforcesh/bullmq/commit/9cfaab8965d0c9f92460d31d6c3083839c36447f)) - -* perf(retry): delete props in retryJob lua script (#1016) ([`547cedd`](https://github.com/taskforcesh/bullmq/commit/547cedd5ecd30c9a73d37e4053b9e518cb3fbe53)) - -* perf(add-job): save parent data as json (#859) ([`556d4ee`](https://github.com/taskforcesh/bullmq/commit/556d4ee427090f60270945a7fd438e2595bb43e9)) - -* perf(clean): speed up clean method when called with limit param (#864) ([`09b5cb4`](https://github.com/taskforcesh/bullmq/commit/09b5cb45a79c4bc53a52d540918c22477a066e16)) - -* perf(obliterate): do not pass unused variables (#766) ([`e9abfa6`](https://github.com/taskforcesh/bullmq/commit/e9abfa6f821064901770a9b72adfb00cac96154c)) - -### Refactor - -* refactor(move-to-finished): return 4 values to prevent python errors when destructuring (#1936) ([`f391f2a`](https://github.com/taskforcesh/bullmq/commit/f391f2a27d5c2959c2a591d14578b9ae125c35f6)) - -* refactor(finished-on): save finishedOn on job methods (#1857) ([`5039369`](https://github.com/taskforcesh/bullmq/commit/503936909e004423536667720952e87fee90cff0)) - -* refactor(python): update getCompleted return type (#1820) ([`ac8a96b`](https://github.com/taskforcesh/bullmq/commit/ac8a96bafa72542ffc2c632a1059a1403e282bc6)) - -* refactor(python): type hinting, remove white space, semicolon etc.. (#1818) ([`2dbb1ab`](https://github.com/taskforcesh/bullmq/commit/2dbb1ab74b11e2c894b96f44e64fe405a9126884)) - -* refactor(python): replace string concatenation with string formatting ([`ba26f64`](https://github.com/taskforcesh/bullmq/commit/ba26f64932d4b90861c001ee54bd60bcc158e6c9)) - -* refactor(lodash): replace flatten and fromPairs functions (#854) ([`34431f9`](https://github.com/taskforcesh/bullmq/commit/34431f90e025cc2d8f0eb88a04c21e4f41d43487)) - -* refactor(promote): reuse addJobWithPriority include (#1485) ([`899d3d0`](https://github.com/taskforcesh/bullmq/commit/899d3d05f5369d40d7ff22165c05fee412678a7a)) - -* refactor(job): replace slow object destructuring with single object in getDependencies (#1324) fixes #1323 ([`ec8afcc`](https://github.com/taskforcesh/bullmq/commit/ec8afcc54a7fc6feeb9fcd124b5c69392909b8d3)) - -* refactor(clean-jobs-in-set): split script into include functions (#1271) ([`f3fc053`](https://github.com/taskforcesh/bullmq/commit/f3fc053b33df2deb2cfa1f89d0c774e94c6d61d2)) - -* refactor(scripts): create class instance to handle scripts call (#1240) ([`87a16f0`](https://github.com/taskforcesh/bullmq/commit/87a16f0570d17e4db33fc5deb0131d4c8209704a)) - -* refactor(remove-jobs): remove timestamp param from removeJobsByMaxCount (#1233) ([`83465ff`](https://github.com/taskforcesh/bullmq/commit/83465ff391ea2ba050adc62bba5630d311f66fab)) - -* refactor(get-workers): add worker suffix (#1176) ([`8376f4c`](https://github.com/taskforcesh/bullmq/commit/8376f4c055fc134bb51d6605a4ddffbffdf5130e)) - -* refactor(backoff-options): improve IntelliSense for backoff types (#1168) ([`1633c5b`](https://github.com/taskforcesh/bullmq/commit/1633c5b85555a3c7f90e535dd8dcfce2e2127b86)) - -* refactor(move-to-finished): pass some args using pack (#1128) ([`b60ac86`](https://github.com/taskforcesh/bullmq/commit/b60ac86b4684ee6cc3b931238b59d3aecf1af44f)) - -* refactor: extract trimEvents as include (#1071) ([`6ded7ba`](https://github.com/taskforcesh/bullmq/commit/6ded7bae22b0f369ebb68960d48780f547d43346)) - -* refactor(move-to-finished): reuse removeJob include (#1061) ([`e48aec6`](https://github.com/taskforcesh/bullmq/commit/e48aec6ced3989995a78c581222c9798a50087eb)) - -* refactor(retry-jobs): create getZSetItems include script (#1052) ([`5ab8525`](https://github.com/taskforcesh/bullmq/commit/5ab85256d1b4e1fad75c86626f03864be0f3cd30)) - -* refactor: clean some interfaces references (#974) ([`92da59e`](https://github.com/taskforcesh/bullmq/commit/92da59ec7e9932377cb1b6a2ba1422ec50e24158)) - -* refactor(get-state): add checkItemInList include (#964) ([`9df25c1`](https://github.com/taskforcesh/bullmq/commit/9df25c1f1310186e0516e0bb02abba527a819480)) - -* refactor(repeat): move removeRepeatable to Script (#939) ([`60ed941`](https://github.com/taskforcesh/bullmq/commit/60ed941a69b6de3d29f29214133c542268d41984)) - -* refactor(reprocess-job): change error messages (#768) ([`5cbd3b6`](https://github.com/taskforcesh/bullmq/commit/5cbd3b6aea64fb1eeee6a8d5c51797eb02b63d73)) - -* refactor(utils): add handleError (#752) ([`e07afb3`](https://github.com/taskforcesh/bullmq/commit/e07afb3f3873e5d517b4db8737b5af2a9a7f22ad)) - -* refactor(error-codes): add error-codes enum (#716) ([`3070102`](https://github.com/taskforcesh/bullmq/commit/30701023b05d8cd11a1c40dc4098dee882c341d6)) - -* refactor: import CONNECTION_CLOSED_ERROR_MSG from ioredis - -It's possible to import `CONNECTION_CLOSED_ERROR_MSG` from `ioredis`, but it isn't available on the main export and isn't defined in the library type declarations. ([`f217219`](https://github.com/taskforcesh/bullmq/commit/f217219bc3b37de375bf44511acdf94f85b31e32)) - -* refactor(getstate): adding getState script ([`a044124`](https://github.com/taskforcesh/bullmq/commit/a044124a88c23ab43746026486eac41432d37ff7)) - -* refactor(timer-manager): use Map to store timers - -Typed map of timers instead of a plain object and type "any". ([`fb9e959`](https://github.com/taskforcesh/bullmq/commit/fb9e959cc789a708a0c9ccd6036c57a3ff33311a)) - -### Style - -* style: restore eslint deps (#1383) ([`5f813c3`](https://github.com/taskforcesh/bullmq/commit/5f813c32150122a596a0a44c527c26964189e0a0)) - -* style: fix styled github warnings (#904) ([`a008c2b`](https://github.com/taskforcesh/bullmq/commit/a008c2be6bc8fe73360ac97a6deabced04382ab4)) - -* style: remove unused variables (#771) ([`044250b`](https://github.com/taskforcesh/bullmq/commit/044250b370565cfbcd6f9628e3c4e289dd5937e9)) - -### Test - -* test(job): do not save stacktrace when job key is missing (#1918) ref #1914 ([`b2d79cd`](https://github.com/taskforcesh/bullmq/commit/b2d79cdee63152b85228b5002f60c82127b9e630)) - -* test(repeat): validate delayed records are deleted when removing repeatable (#1781) ([`3df8afb`](https://github.com/taskforcesh/bullmq/commit/3df8afb55725ac8e92a37ee132513fb5c7dc0051)) - -* test(connection): expect ioredis prefix errors (#1601) ([`d1b6920`](https://github.com/taskforcesh/bullmq/commit/d1b69204ddede7c80c9e327228d39506c60a797d)) - -* test(repeat): fix flaky tests (#1578) ([`8f9eefd`](https://github.com/taskforcesh/bullmq/commit/8f9eefda9f932535de8e452c926029eb6fdae435)) - -* test(rate-limit): split tests (#1400) ([`f2d00c3`](https://github.com/taskforcesh/bullmq/commit/f2d00c328ce0578dd5837fb37ce471d166d1e246)) - -* test(rate-limit): add cases when promoting jobs (#1135) fixes #1083 ([`51343c9`](https://github.com/taskforcesh/bullmq/commit/51343c95f4823fedd7d7295d59ad5a092ae8dcbf)) - -* test: pass shared connection into Queue in test case (#1029) ([`da587c2`](https://github.com/taskforcesh/bullmq/commit/da587c2844763a5e7035f799541ce0d6e09aa296)) - -* test(worker): add case when sharing connection (#955) ([`2325ff7`](https://github.com/taskforcesh/bullmq/commit/2325ff791aae19cd98f8d27b645afade07b4c4fc)) - -* test: add next tick into processor (#967) ([`c636528`](https://github.com/taskforcesh/bullmq/commit/c636528d07161ed68ad017a65867aa1c9172c5d5)) - -* test(repeat): call nextTick in processor (#966) ([`2aaae88`](https://github.com/taskforcesh/bullmq/commit/2aaae88b58def78718e13ceea1a3ec9ab069b69b)) - -* test: fix test reference (#913) ([`c67aa6c`](https://github.com/taskforcesh/bullmq/commit/c67aa6c235ff7830c643e2fb291d1145b11b9de2)) - -* test(worker): check finishedOn value passed in completed event (#866) ref #863 ([`ef47aa9`](https://github.com/taskforcesh/bullmq/commit/ef47aa93b0808f3027c85e17aee3be12e716ff8c)) - -* test(flow): add backoff strategy case (#827) ([`a0cae58`](https://github.com/taskforcesh/bullmq/commit/a0cae58ca0c3c489309c6ad626fb5d6147bdf92d)) - -* test(sandboxed-process): add test case where process.env is shared (#793) ([`479c425`](https://github.com/taskforcesh/bullmq/commit/479c425aeac01e218de661f6ba357d0ed2f116aa)) - -* test(compat): fix flaky test when global drained event is emitted (#760) ([`fb25aee`](https://github.com/taskforcesh/bullmq/commit/fb25aee5c17a139d54b7b99549a853d422d6a078)) - -* test: cover more lines for coverage (#741) ([`8383b14`](https://github.com/taskforcesh/bullmq/commit/8383b14c6185fb498a110bf61079bdb630345f6d)) - -* test(nyc): watch src files only (#740) ([`d439631`](https://github.com/taskforcesh/bullmq/commit/d4396318bddac6521cbafed8d7cc87671c92827d)) - -* test: improve some types (#736) ([`ce0646c`](https://github.com/taskforcesh/bullmq/commit/ce0646c578e58003959c2a2a4b2f98d88bed3ebf)) - -* test(flow-producer): add test case using priority option (#735) ([`88c374a`](https://github.com/taskforcesh/bullmq/commit/88c374a10f6eb5cba7d7aa215a3397491f8be697)) - -* test: close instances (#730) ([`f5ff4a7`](https://github.com/taskforcesh/bullmq/commit/f5ff4a756f438676471f06878bcc9c12bf33ba02)) - -* test: add missing close calls(#725) ([`df27ae9`](https://github.com/taskforcesh/bullmq/commit/df27ae9d11630c4e817c098e5bff70cffcdf5b67)) - -* test(repeat): restore test (#723) ([`ceaa7de`](https://github.com/taskforcesh/bullmq/commit/ceaa7dece47bbef99c6e289bbfed41860991b4c9)) - -* test(repeat): restore skipped test case (#719) ([`d8b1063`](https://github.com/taskforcesh/bullmq/commit/d8b106350ed51a0bb36bb568557a16132aa9e841)) - -* test: use rejectedWith (#718) ([`3c170f3`](https://github.com/taskforcesh/bullmq/commit/3c170f3cc46ba33ea27c9c308929314d19c4fa9d)) - -* test: clean redis db after finishing test cases (#714) ([`54f2f2c`](https://github.com/taskforcesh/bullmq/commit/54f2f2c8517ae5484cbcbb472a6ab9ad9ffa4d61)) - -* test(repeat): add test when removeOnComplete is true - -re #515 ([`265ff3f`](https://github.com/taskforcesh/bullmq/commit/265ff3fbc5811f2911a1ebafae1825869f9e9283)) - -* test(mocha): no exclusive tests ([`2e9af30`](https://github.com/taskforcesh/bullmq/commit/2e9af3071f445a7118823dfeb79d8eb355ba5def)) - -* test(worker): fix flaky test related to getDependencies ([`f512823`](https://github.com/taskforcesh/bullmq/commit/f512823a847d7a464cf7253fed3fad2563945fbc)) - -* test: increase timeout on child retain tests (#293) ([`0c72e08`](https://github.com/taskforcesh/bullmq/commit/0c72e0884b3e0b66d86a2fb94ff98b1def240b3e)) - -* test(getters): check length of get failed jobs ([`9296516`](https://github.com/taskforcesh/bullmq/commit/9296516cbb212d6a24422cc9a76109e89c12915e)) - -* test: fix broken connection test ([`230664c`](https://github.com/taskforcesh/bullmq/commit/230664cf0565e2d5351299d64d3a8bef70289b0f)) - -### Unknown - -* Merge pull request #1706 from taskforcesh/feat/simplified-lock-extension - -feat/several-memory-optimizations ([`0881eb1`](https://github.com/taskforcesh/bullmq/commit/0881eb1345d7c50da181b1ba73162174da50db53)) - -* Merge pull request #1423 from taskforcesh/feat/removed-queue-scheduler - -feat: eliminate the need of having a QueueScheduler ([`7b069ea`](https://github.com/taskforcesh/bullmq/commit/7b069ea9fbb5469c6f1e6ca2e339136170950e11)) - -* feat(job): add getDependenciesCount method ([`ae39a4c`](https://github.com/taskforcesh/bullmq/commit/ae39a4c77a958242cb445dbb32ae27b15a953653)) - -* fix(job): parse results in getDependencies for processed jobs ([`6fdc701`](https://github.com/taskforcesh/bullmq/commit/6fdc7011ba910e5ca9c6d87926cc523ef38ef3ca)) - -* fix(get-workers): use strict equality on name fixes #564 ([`4becfa6`](https://github.com/taskforcesh/bullmq/commit/4becfa66e09dacf9830804898c45cb3317dcf438)) - -* feat(repeat): add immediately opt for repeat ([`d095573`](https://github.com/taskforcesh/bullmq/commit/d095573f8e7ce5911f777df48368382eceb99d6a)) - -* update events.md - -Correctly instantiate the `Worker` class, ([`2a439fb`](https://github.com/taskforcesh/bullmq/commit/2a439fbe44e0e08544d1d34d78dd8999cd4ca83b)) - -* Second Argument for worker is missing - -I am not sure exactly the options here, but definitely this will work. It also appears that some sort of resolution might occur if a string is passed, but I can't figure that one out. ([`8ee4d68`](https://github.com/taskforcesh/bullmq/commit/8ee4d685dec7a92f050d752f29375b5f58cc6c72)) - -* fix(scheduler): duplicate connections fixes #174 ([`011b8ac`](https://github.com/taskforcesh/bullmq/commit/011b8acfdec54737d94a9fead2423e060e3364db)) - -* Merge pull request #141 from bobdercole/queue-name - -feat: made queue name publicly readable for #140 ([`def0eb6`](https://github.com/taskforcesh/bullmq/commit/def0eb658821d3eb44e3b69d71cb58e05d251f70)) - -* Merge pull request #133 from bobdercole/get-job-type - -fix: modified QueueGetters.getJob and Job.fromId to also return null ([`10f493e`](https://github.com/taskforcesh/bullmq/commit/10f493e8dfdd4fbf13a288482d8578ba895a1323)) - -* Merge pull request #125 from snacqs/docs-improvements - -docs: minor improvements ([`36726bf`](https://github.com/taskforcesh/bullmq/commit/36726bfb01430af8ec606f36423fc187e4a06fb4)) - -* Merge pull request #123 from rhinodavid/queue_events_doc - -docs: fix QueueEvents examples in quick start guide ([`195e877`](https://github.com/taskforcesh/bullmq/commit/195e8777f35032f106732adc7e5e74dc952f3aa8)) - -* Merge pull request #107 from wavyapp/fix-71 - -fix: don't fail a job when the worker already lost the lock ([`da8cdb4`](https://github.com/taskforcesh/bullmq/commit/da8cdb42827c22fea12b9c2f4c0c80fbad786b98)) - -* Merge pull request #99 from chrisabrams/fix-dup-entry - -[fix] Remove duplicate active entry ([`bddaf44`](https://github.com/taskforcesh/bullmq/commit/bddaf4467dea4ff8583cd6e9cbbb83a6e5330893)) - -* Merge pull request #103 from taskforcesh/fix-102-get-rid-of-flushdb-in-tests - -fix: get rid of flushdb/flushall in tests ([`725ad01`](https://github.com/taskforcesh/bullmq/commit/725ad0179f615b9d53d939619210d26d8a5ec4a0)) - -* Merge pull request #98 from taskforcesh/fix/delete-jobs-when-cleaning-in-set - -Fix/delete jobs when cleaning in set ([`ab8d860`](https://github.com/taskforcesh/bullmq/commit/ab8d860c8f16867a2a46c620da742db43944d0a7)) - -* Merge pull request #96 from taskforcesh/fix/fix-tslib-dep - -Fix/fix tslib dep ([`f84cd9b`](https://github.com/taskforcesh/bullmq/commit/f84cd9bc875fedad25bd387e382ebb2ab4751e57)) - -* Merge pull request #93 from ericcarboni/patch-1 - -docs: fix typo ([`d8bf244`](https://github.com/taskforcesh/bullmq/commit/d8bf244fbbb43b1975e89434c546e7bdabf91702)) - -* Merge pull request #82 from jbr/dollarsign-as-default-queue-event-id - -$ as default queue event id #76 ([`7a6b2ee`](https://github.com/taskforcesh/bullmq/commit/7a6b2ee593d76718f45075556e6e7eb53251ca52)) - -* Merge pull request #91 from Embraser01/fix-#90 - -fix: check of existing redis instance ([`6ebae9e`](https://github.com/taskforcesh/bullmq/commit/6ebae9e111d27f423e7736776735c750ed475c20)) - -* Merge pull request #92 from taskforcesh/dependabot/npm_and_yarn/npm-6.13.4 - -chore(deps): bump npm from 6.12.0 to 6.13.4 ([`763ca72`](https://github.com/taskforcesh/bullmq/commit/763ca72f0a9ca866deea99648a5161b1aedd7998)) - -* Merge pull request #88 from taskforcesh/feat/add-generic-type-to-job-data - -feat: add generic type to job data and return value ([`3f9eaec`](https://github.com/taskforcesh/bullmq/commit/3f9eaeceef002e13bf9d995256282c0bb0863cd1)) - -* Merge pull request #78 from ericcarboni/patch-1 - -Docs: update quick start page ([`36604f5`](https://github.com/taskforcesh/bullmq/commit/36604f5c53d5984e48170ebb937dd9d2fc7c1875)) - -* Merge pull request #75 from jbr/feat-67-remove-bluebird-dependency - -feat: remove dependence on Bluebird and delay #67 ([`8d38bfa`](https://github.com/taskforcesh/bullmq/commit/8d38bfa77d1c1249ec9f95a754327491ef001e28)) - -* Merge pull request #73 from taskforcesh/fix-72-default-maxLenEvents-in-move-to-finished-lua - -fix: check in moveToFinished to use default val for opts.maxLenEvents ([`f79e5ad`](https://github.com/taskforcesh/bullmq/commit/f79e5ad83398bd858dd082f7b12639a9f38e7f49)) - -* Merge pull request #74 from jbr/fix-70-job-tojson - -fix: avoid changing Job property types through JSON serialization/deserialization #70 ([`344a887`](https://github.com/taskforcesh/bullmq/commit/344a887e924048d7a2ab2036b6adfcdd99a6f466)) - -* Merge pull request #58 from HNicolas/patch-1 - -Fix #57 ([`f67d306`](https://github.com/taskforcesh/bullmq/commit/f67d3063f2296325e2d753600dbf633960034195)) - -* Merge pull request #60 from taskforcesh/feat-job-progress-getter-for-sanboxed-processors - -job.progress() return last progress for sandboxed processors ([`11bfae6`](https://github.com/taskforcesh/bullmq/commit/11bfae63ac64bfa24df1e51ff5343447863e0095)) - -* Merge pull request #61 from taskforcesh/feat-test-worker-extends-job-lock - -Test worker extends job lock while job is active ([`0cf504f`](https://github.com/taskforcesh/bullmq/commit/0cf504f5fca2240e5e27eb95475d2f221bf3bfc9)) - -* Merge pull request #55 from MichielDeMey/feature/coveralls - -Feat/coveralls Adds code coverage with Coveralls integration ([`4deb7d4`](https://github.com/taskforcesh/bullmq/commit/4deb7d43db5ee459cb8536e5202d2e4bb3811af3)) - -* Merge pull request #52 from taskforcesh/feat-47-job-locking - -Job locking mechanism ([`dd502b2`](https://github.com/taskforcesh/bullmq/commit/dd502b21952cba180f419a542c319414372177b1)) - -* Merge pull request #54 from root-io/patch-1 - -doc: use correct connection property ([`f3336de`](https://github.com/taskforcesh/bullmq/commit/f3336de43567e859905795517e5bf1aa4936e60d)) - -* Merge pull request #51 from taskforcesh/fix-31-stacktrace-missing-after-job-failure - -Save job stacktrace on failure ([`855560a`](https://github.com/taskforcesh/bullmq/commit/855560a675dd40cc9d51bcc2bcad70bc3c44373d)) - -* Merge pull request #39 from taskforcesh/fix-cleanup-dependencies - -Replace deprecated node-uuid with uuid, move lodash to runtime dependencies ([`3a3a21b`](https://github.com/taskforcesh/bullmq/commit/3a3a21b3da21485c7ff73ee7e297b14ec9f01bab)) - -* Merge pull request #46 from taskforcesh/chore/add-semantic-release-plugins - -chore: add missing dependency ([`d30413a`](https://github.com/taskforcesh/bullmq/commit/d30413a655605ef351f03ce1d5f69fba52d5e91d)) - -* Merge pull request #45 from taskforcesh/chore/add-semantic-release-plugins - -chore: add missing dependencies ([`5e06e66`](https://github.com/taskforcesh/bullmq/commit/5e06e66f74d4bb334e6354b6a1840c5844a20472)) - -* Merge pull request #44 from taskforcesh/chore/add-semantic-release-plugins - -chore: add semantic release plugins ([`0466161`](https://github.com/taskforcesh/bullmq/commit/0466161c2e66a17ad8b64e3c4165eb231629cfd9)) - -* Merge pull request #41 from taskforcesh/feat/support-async-backoffs - -Feat/support async backoffs ([`c0b4618`](https://github.com/taskforcesh/bullmq/commit/c0b46181366be8e0a9d52fa5503b49ac33a4aa9d)) - -* Merge pull request #42 from taskforcesh/feat/implement-connection-close - -feat: implement close in redis connection fixes #8 ([`84c7ba9`](https://github.com/taskforcesh/bullmq/commit/84c7ba9f7ec079c22f27e50983656f267ea92983)) - -* Merge pull request #40 from taskforcesh/fix/fix-handling-reused-connections - -fix(connections): reused connections ([`cc8d38e`](https://github.com/taskforcesh/bullmq/commit/cc8d38e74fbe4b95b836c66a70f421e40bdc3775)) - -* Merge pull request #35 from taskforcesh/fix/34-extra-connection-for-workers - -Fix/#34 extra connection for workers ([`2604753`](https://github.com/taskforcesh/bullmq/commit/2604753984a03d079ece28db0686d734ee10ba52)) - -* Merge pull request #33 from taskforcesh/chore/move-ioredis-typings-as-dependency - -fix: make ioredis typings a normal dependency ([`5d35db5`](https://github.com/taskforcesh/bullmq/commit/5d35db5a8238dccb0f7e09a0e4d2bdd63ab7e837)) - -* Merge pull request #27 from taskforcesh/feat/add-trim-option-#21 - -Feat/add trim option #21 ([`47fd1ea`](https://github.com/taskforcesh/bullmq/commit/47fd1ea5eec49dcb9d74293b8f99ed5aecc01239)) - -* Merge pull request #26 from taskforcesh/manast-patch-1 - -Update README.md ([`99c9513`](https://github.com/taskforcesh/bullmq/commit/99c9513772efc78be0ecdd811e8e136cc9aaeffd)) - -* Merge pull request #25 from taskforcesh/manast-patch-1 - -Update README.md ([`e21a98a`](https://github.com/taskforcesh/bullmq/commit/e21a98a1e95016f72ad0109150f56a6fe8e00a17)) - -* Merge pull request #20 from taskforcesh/feat/development-4.0 - -Feat/development 4.0 ([`e4a9614`](https://github.com/taskforcesh/bullmq/commit/e4a9614b843caacd4dc01e7266daaae036cc12e9)) - -* Merge pull request #7 from taskforcesh/feat-bull3-compat-api-v2 - -Compatibility class implementing bull3 api in bullmq ([`da7af7a`](https://github.com/taskforcesh/bullmq/commit/da7af7a319dd3f12acad7794f8fc27a251838d87)) - -* Merge pull request #3 from taskforcesh/feat-port-sandbox-processing - -port sandbox processors implementation and tests from bull 3.x ([`88a72e4`](https://github.com/taskforcesh/bullmq/commit/88a72e40eadef581a704bb5235e839184b435fb8)) - -* implement some more getters - -getJobs, getJobCounts, getJobCountByTypes, getCompletedCount, getFailedCount, -getDelayedCount, getWaitingCount, getPausedCount, getActiveCount, getRepeatableCount, -getWorkers, base64Name, clientName, parseClientList ([`e78e9bf`](https://github.com/taskforcesh/bullmq/commit/e78e9bf75dd2aff39e7d226087dcafb6dc1109bf)) - -* import existing typescript definitions from dt project (master) - -source: https://github.com/DefinitelyTyped/DefinitelyTyped ([`87e0ef1`](https://github.com/taskforcesh/bullmq/commit/87e0ef182189e458a55c2e38e72893aa84b26aa6)) +## v0.1.0 (2023-02-15) +### Feature +* Initial python package ([`a97b22f`](https://github.com/taskforcesh/bullmq/commit/a97b22f518a9f6c5d9c30a77bfd03cafdcbc57ff)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 8be5e1570c..18746d9b97 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.10.0" +__version__ = "1.9.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index b44dc537c1..2686366971 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.10.0" +version = "1.9.0" description='BullMQ for Python' readme="README.md" authors = [ @@ -53,16 +53,9 @@ upload_to_pypi = true [tool.semantic_release.commit_parser_options] allowed_tags = [ - "build", - "chore", - "ci", - "docs", "feat", "fix", "perf", - "style", - "refactor", - "test", ] minor_tags = ["feat"] patch_tags = ["fix", "perf"] From c1412831903d1fae0955af097e0be049024839fe Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 26 Jul 2023 13:17:57 -0600 Subject: [PATCH 258/322] perf(retry): compare prev state instead of regex expression (#2099) --- docs/gitbook/bullmq-pro/changelog.md | 41 ++++++++++++++++++++++++++++ src/classes/scripts.ts | 6 ++-- src/commands/moveJobsToWait-6.lua | 4 +-- src/commands/moveToFinished-13.lua | 2 +- 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index 7d05cf4239..aed28eaaa7 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,44 @@ +## [6.2.2](https://github.com/taskforcesh/bullmq-pro/compare/v6.2.1...v6.2.2) (2023-07-26) + + +### Bug Fixes + +* **deps:** upgrade bullmq to 4.6.0 ([#167](https://github.com/taskforcesh/bullmq-pro/issues/167)) ([9cf92a6](https://github.com/taskforcesh/bullmq-pro/commit/9cf92a62dc3f1e9316bd4559fde4700ff4d9b12c)) + +## [6.2.1](https://github.com/taskforcesh/bullmq-pro/compare/v6.2.0...v6.2.1) (2023-07-25) + + +### Bug Fixes + +* **flow:** emit delayed event when parent is moved to delayed ([#166](https://github.com/taskforcesh/bullmq-pro/issues/166)) ([38afe1c](https://github.com/taskforcesh/bullmq-pro/commit/38afe1cf3187ddee33d33a39438587d921b8743a)) + +# [6.2.0](https://github.com/taskforcesh/bullmq-pro/compare/v6.1.1...v6.2.0) (2023-07-25) + + +### Features + +* **groups:** support local priorities ([#156](https://github.com/taskforcesh/bullmq-pro/issues/156)) ([260bd24](https://github.com/taskforcesh/bullmq-pro/commit/260bd24a76d703ec87385c05cdd3b4589f142aa8)), closes [taskforcesh/bullmq-pro-support#23](https://github.com/taskforcesh/bullmq-pro-support/issues/23) [taskforcesh/bullmq-pro-support#13](https://github.com/taskforcesh/bullmq-pro-support/issues/13) + +## [6.1.1](https://github.com/taskforcesh/bullmq-pro/compare/v6.1.0...v6.1.1) (2023-07-18) + + +### Bug Fixes + +* add missing error export ([2b8c51f](https://github.com/taskforcesh/bullmq-pro/commit/2b8c51fd43c538fd3eed122ab96d55325da97b90)) + +# [6.1.0](https://github.com/taskforcesh/bullmq-pro/compare/v6.0.5...v6.1.0) (2023-07-18) + + +### Bug Fixes + +* fix the GroupMaxSizeExceededError prototype ([a1b6a96](https://github.com/taskforcesh/bullmq-pro/commit/a1b6a96f1a0b632940177a1057a4995d59957964)) + + +### Features + +* add getGroupStatus ([3bac19d](https://github.com/taskforcesh/bullmq-pro/commit/3bac19d32e9a620a393736152844973951e45d47)) +* add support max sized groups ([7bc654c](https://github.com/taskforcesh/bullmq-pro/commit/7bc654c2191c9a2e8c80f4e0843c4beda7d61565)) + ## [6.0.5](https://github.com/taskforcesh/bullmq-pro/compare/v6.0.4...v6.0.5) (2023-07-11) diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index d6d6acd2a6..50a8cf0f91 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -750,7 +750,7 @@ export class Scripts { ]); } - protected retryJobsArgs( + protected moveJobsToWaitArgs( state: FinishedStatus | 'delayed', count: number, timestamp: number, @@ -776,7 +776,7 @@ export class Scripts { ): Promise { const client = await this.queue.client; - const args = this.retryJobsArgs(state, count, timestamp); + const args = this.moveJobsToWaitArgs(state, count, timestamp); return (client).moveJobsToWait(args); } @@ -784,7 +784,7 @@ export class Scripts { async promoteJobs(count = 1000): Promise { const client = await this.queue.client; - const args = this.retryJobsArgs('delayed', count, Number.MAX_VALUE); + const args = this.moveJobsToWaitArgs('delayed', count, Number.MAX_VALUE); return (client).moveJobsToWait(args); } diff --git a/src/commands/moveJobsToWait-6.lua b/src/commands/moveJobsToWait-6.lua index 03e32a72c8..7cf564807b 100644 --- a/src/commands/moveJobsToWait-6.lua +++ b/src/commands/moveJobsToWait-6.lua @@ -34,12 +34,12 @@ local target = getTargetQueueList(metaKey, KEYS[4], KEYS[5]) local jobs = rcall('ZRANGEBYSCORE', KEYS[3], 0, timestamp, 'LIMIT', 0, maxCount) if (#jobs > 0) then - if KEYS[3]:match("failed$") then + if ARGV[3] == "failed" then for i, key in ipairs(jobs) do local jobKey = KEYS[1] .. key rcall("HDEL", jobKey, "finishedOn", "processedOn", "failedReason") end - elseif KEYS[3]:match("completed$") then + elseif ARGV[3] == "completed" then for i, key in ipairs(jobs) do local jobKey = KEYS[1] .. key rcall("HDEL", jobKey, "finishedOn", "processedOn", "returnvalue") diff --git a/src/commands/moveToFinished-13.lua b/src/commands/moveToFinished-13.lua index a984f1662b..02293cbffd 100644 --- a/src/commands/moveToFinished-13.lua +++ b/src/commands/moveToFinished-13.lua @@ -150,7 +150,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists if rcall("SREM", dependenciesSet, jobIdKey) == 1 then moveParentToWaitIfNeeded(parentQueueKey, dependenciesSet, parentKey, parentId, timestamp) - end + end end end end From 2d64c6e6b0aa06d3b27d01375bd3c3e7822c48b0 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 26 Jul 2023 19:20:22 +0000 Subject: [PATCH 259/322] chore(release): 4.6.2 [skip ci] ## [4.6.2](https://github.com/taskforcesh/bullmq/compare/v4.6.1...v4.6.2) (2023-07-26) ### Performance Improvements * **retry:** compare prev state instead of regex expression ([#2099](https://github.com/taskforcesh/bullmq/issues/2099)) ([c141283](https://github.com/taskforcesh/bullmq/commit/c1412831903d1fae0955af097e0be049024839fe)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 88624db8be..d8a4f11628 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [4.6.2](https://github.com/taskforcesh/bullmq/compare/v4.6.1...v4.6.2) (2023-07-26) + + +### Performance Improvements + +* **retry:** compare prev state instead of regex expression ([#2099](https://github.com/taskforcesh/bullmq/issues/2099)) ([c141283](https://github.com/taskforcesh/bullmq/commit/c1412831903d1fae0955af097e0be049024839fe)) + # [4.6.0](https://github.com/taskforcesh/bullmq/compare/v4.5.0...v4.6.0) (2023-07-19) diff --git a/package.json b/package.json index caf673f6f6..06e1821a97 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.6.0", + "version": "4.6.2", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 7706a08a58fed28006ea0bacc93b094ee15cbea1 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Wed, 26 Jul 2023 14:28:12 -0500 Subject: [PATCH 260/322] docs(changelog): fix 4.6.2 version link --- docs/gitbook/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index d8a4f11628..a19f79b9ea 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,4 +1,4 @@ -## [4.6.2](https://github.com/taskforcesh/bullmq/compare/v4.6.1...v4.6.2) (2023-07-26) +## [4.6.2](https://github.com/taskforcesh/bullmq/compare/v4.6.0...v4.6.2) (2023-07-26) ### Performance Improvements From 2ad253055ca6d8f117c434c9eac98c69c4aa1895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Dziuba?= Date: Thu, 27 Jul 2023 12:14:21 +0200 Subject: [PATCH 261/322] docs(readme): update usedBy section --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ca5fee3b5e..815e8e7377 100644 --- a/README.md +++ b/README.md @@ -105,9 +105,9 @@ Some notable organizations using BullMQ: Curri From 8880f9f2983282d343d603a89abe5e1e6bff78e5 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 28 Jul 2023 13:09:15 -0600 Subject: [PATCH 262/322] perf(job): generate priority limit constant once (#2102) --- src/classes/job.ts | 27 ++++++++++++++++----------- src/interfaces/base-job-options.ts | 2 +- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/classes/job.ts b/src/classes/job.ts index 54de2cf637..d35a6f827a 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -45,6 +45,8 @@ const optsDecodeMap = { const optsEncodeMap = invert(optsDecodeMap); +export const PRIORITY_LIMIT = 2 ** 21; + /** * Job * @@ -1067,6 +1069,18 @@ export class Job< addJob(client: RedisClient, parentOpts?: ParentOpts): Promise { const jobData = this.asJSON(); + this.validateOptions(jobData); + + return this.scripts.addJob( + client, + jobData, + jobData.opts, + this.id, + parentOpts, + ); + } + + protected validateOptions(jobData: JobJson) { const exceedLimit = this.opts.sizeLimit && lengthInUtf8Bytes(jobData.data) > this.opts.sizeLimit; @@ -1099,19 +1113,10 @@ export class Job< throw new Error(`Priority should not be float`); } - const priorityLimit = 2 ** 21; - if (this.opts.priority > 2 ** 21) { - throw new Error(`Priority should be between 0 and ${priorityLimit}`); + if (this.opts.priority > PRIORITY_LIMIT) { + throw new Error(`Priority should be between 0 and ${PRIORITY_LIMIT}`); } } - - return this.scripts.addJob( - client, - jobData, - jobData.opts, - this.id, - parentOpts, - ); } protected saveStacktrace(multi: ChainableCommander, err: Error): void { diff --git a/src/interfaces/base-job-options.ts b/src/interfaces/base-job-options.ts index 71d54f14ba..2d630f8c3e 100644 --- a/src/interfaces/base-job-options.ts +++ b/src/interfaces/base-job-options.ts @@ -8,7 +8,7 @@ export interface DefaultJobOptions { timestamp?: number; /** - * Ranges from 1 (highest priority) to MAX_INT (lowest priority). Note that + * Ranges from 1 (highest priority) to 2 097 152 (lowest priority). Note that * using priorities has a slight impact on performance, * so do not use it if not required. */ From 3a656d968b584b8f04d42dc29eb1a561c2ab2fde Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 28 Jul 2023 19:11:34 +0000 Subject: [PATCH 263/322] chore(release): 4.6.3 [skip ci] ## [4.6.3](https://github.com/taskforcesh/bullmq/compare/v4.6.2...v4.6.3) (2023-07-28) ### Performance Improvements * **job:** generate priority limit constant once ([#2102](https://github.com/taskforcesh/bullmq/issues/2102)) ([8880f9f](https://github.com/taskforcesh/bullmq/commit/8880f9f2983282d343d603a89abe5e1e6bff78e5)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index a19f79b9ea..abe88ccbea 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [4.6.3](https://github.com/taskforcesh/bullmq/compare/v4.6.2...v4.6.3) (2023-07-28) + + +### Performance Improvements + +* **job:** generate priority limit constant once ([#2102](https://github.com/taskforcesh/bullmq/issues/2102)) ([8880f9f](https://github.com/taskforcesh/bullmq/commit/8880f9f2983282d343d603a89abe5e1e6bff78e5)) + ## [4.6.2](https://github.com/taskforcesh/bullmq/compare/v4.6.0...v4.6.2) (2023-07-26) diff --git a/package.json b/package.json index 06e1821a97..326dbcd147 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.6.2", + "version": "4.6.3", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From a0f153c091f9abd21959109621ce22a2f32e3334 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 31 Jul 2023 15:58:37 -0600 Subject: [PATCH 264/322] docs(bullmq-pro): add prioritized section (#2096) --- docs/gitbook/SUMMARY.md | 1 + docs/gitbook/bullmq-pro/groups/prioritized.md | 16 ++++++++++++++++ docs/gitbook/guide/jobs/prioritized.md | 14 +++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 docs/gitbook/bullmq-pro/groups/prioritized.md diff --git a/docs/gitbook/SUMMARY.md b/docs/gitbook/SUMMARY.md index 094223f2f9..a5eb4f61b9 100644 --- a/docs/gitbook/SUMMARY.md +++ b/docs/gitbook/SUMMARY.md @@ -69,6 +69,7 @@ * [Concurrency](bullmq-pro/groups/concurrency.md) * [Max group size](bullmq-pro/groups/max-group-size.md) * [Pausing groups](bullmq-pro/groups/pausing-groups.md) + * [Prioritized intra-groups](bullmq-pro/groups/prioritized.md) * [Batches](bullmq-pro/batches.md) * [NestJs](bullmq-pro/nestjs/README.md) * [Producers](bullmq-pro/nestjs/producers.md) diff --git a/docs/gitbook/bullmq-pro/groups/prioritized.md b/docs/gitbook/bullmq-pro/groups/prioritized.md new file mode 100644 index 0000000000..60513c4686 --- /dev/null +++ b/docs/gitbook/bullmq-pro/groups/prioritized.md @@ -0,0 +1,16 @@ +# Prioritized intra-groups + +BullMQ Pro supports priorities per group. A job is prioritized in a group when group and priority options are provided together. + +```typescript +await myQueue.add('paint', { foo: 'bar' }, { + group: { + id: 'groupId', + priority: 10 + } +}); +``` + +{% hint style="info" %} +Standard prioritized jobs get more priority than grouped prioritized jobs +{% endhint %} diff --git a/docs/gitbook/guide/jobs/prioritized.md b/docs/gitbook/guide/jobs/prioritized.md index 9e148b3394..31a70fcdca 100644 --- a/docs/gitbook/guide/jobs/prioritized.md +++ b/docs/gitbook/guide/jobs/prioritized.md @@ -6,7 +6,7 @@ Jobs can also include a priority option. Using priorities, job's processing orde Adding prioritized jobs is a slower operation than the other types of jobs, with a complexity O(log(n)) relative to the number of jobs in prioritized set in the Queue. {% endhint %} -Note that the priorities go from 1 to MAX_INT, whereas a lower number is always a higher priority than higher numbers. +Note that the priorities go from 1 to 2 097 152, whereas a lower number is always a higher priority than higher numbers. Jobs without a priority assigned will get the least priority. @@ -47,6 +47,18 @@ await job.changePriority({ }); ``` +## Get Prioritized jobs + +As prioritized is a new state. You must use **getJobs** or **getPrioritized** method as: + +```typescript +const jobs = await queue.getJobs(['prioritized']); + +const jobs2 = await queue.getPrioritized(); +``` + ## Read more: +- 📋 [Faster Priority jobs](https://bullmq.io/news/062123/faster-priority-jobs/) - 💡 [Change Priority API Reference](https://api.docs.bullmq.io/classes/v4.Job.html#changePriority) +- 💡 [Get Prioritized API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html#getPrioritized) From 3cff81e517b6b40d68180e3b23f7cb64239ed334 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Tue, 1 Aug 2023 00:34:56 -0500 Subject: [PATCH 265/322] docs(bullmq-pro): update changelog to version 6.2.4 --- docs/gitbook/bullmq-pro/changelog.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index aed28eaaa7..c10b9722ad 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,17 @@ +## [6.2.4](https://github.com/taskforcesh/bullmq-pro/compare/v6.2.3...v6.2.4) (2023-07-29) + + +### Bug Fixes + +* **group:** add priority option into group option ([#171](https://github.com/taskforcesh/bullmq-pro/issues/171)) ([2e632f1](https://github.com/taskforcesh/bullmq-pro/commit/2e632f11013a0db520f7a642741df21bbdd38a78)), closes [taskforcesh/bullmq-pro-support#23](https://github.com/taskforcesh/bullmq-pro-support/issues/23) [taskforcesh/bullmq-pro-support#13](https://github.com/taskforcesh/bullmq-pro-support/issues/13) + +## [6.2.3](https://github.com/taskforcesh/bullmq-pro/compare/v6.2.2...v6.2.3) (2023-07-27) + + +### Performance Improvements + +* **groups:** do not move job to paused when promoting rate-limited group ([#169](https://github.com/taskforcesh/bullmq-pro/issues/169)) ([fa2bb3c](https://github.com/taskforcesh/bullmq-pro/commit/fa2bb3c98761615822035312dfdb782934d9a774)) + ## [6.2.2](https://github.com/taskforcesh/bullmq-pro/compare/v6.2.1...v6.2.2) (2023-07-26) From 00271453cb1d5ae347ca56dee73b46c3469608f8 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 1 Aug 2023 18:48:01 -0600 Subject: [PATCH 266/322] chore(python): revert #2074 downgrading semver to version 2.13.0 (#2088) --- .github/workflows/release.yml | 22 ++++++++++------------ python/pyproject.toml | 33 ++++++--------------------------- python/requirements.txt | 3 ++- 3 files changed, 18 insertions(+), 40 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 57928cff99..7ac3753062 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,6 @@ env: jobs: release: permissions: - id-token: write contents: write # for release publishing name: Release @@ -52,15 +51,14 @@ jobs: flake8 ./python --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 ./python --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Python Semantic Release + - name: Release Python if: ${{ contains(env.commitmsg, '(python)') }} - uses: python-semantic-release/python-semantic-release@master - with: - directory: ./python - github_token: ${{ secrets.GITHUB_TOKEN }} - - name: Publish package distributions to PyPI - id: pypi-publish - if: ${{ contains(env.commitmsg, '(python)') }} - uses: pypa/gh-action-pypi-publish@release/v1 - with: - password: ${{ secrets.PYPI_TOKEN }} + run: | + cd python + pip install packaging + git config --global user.email "manast@taskforce.sh" + git config --global user.name "manast" + export VERSION=$(semantic-release print-version) + if [ ! -z "$VERSION" ]; then + GH_TOKEN=${{ secrets.GITHUB_TOKEN }} PYPI_TOKEN=${{ secrets.PYPI_TOKEN }} semantic-release publish + fi diff --git a/python/pyproject.toml b/python/pyproject.toml index 2686366971..25b797eb79 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -22,7 +22,7 @@ keywords = ["python", "bullmq", "queues"] dependencies = [ "redis >= 4.5.0, < 5", "msgpack >= 1.0.0, < 2", - "semver >= 3.0.1" + "semver >= 2.13.0, < 3" ] [project.optional-dependencies] @@ -30,6 +30,7 @@ dev = [ "setuptools==68.0.0", "pre-commit==3.3.3", "build==0.8.0", + "python-semantic-release==7.28.1", "types-redis==4.6.0.2" ] @@ -44,33 +45,11 @@ exclude = ["tests*"] bullmq = ["commands/*.lua", "types/*"] [tool.semantic_release] -version_variables = ["bullmq/__init__.py:__version__"] -version_toml = ["pyproject.toml:project.version"] +branch = "master" +version_variable = "bullmq/__init__.py:__version__" +version_toml = "pyproject.toml:project.version" build_command = "python3 setup.py sdist" tag_format = "vpy{version}" version_source = "commit" -upload_to_pypi = true - -[tool.semantic_release.commit_parser_options] -allowed_tags = [ - "feat", - "fix", - "perf", -] -minor_tags = ["feat"] -patch_tags = ["fix", "perf"] - -[tool.semantic_release.changelog] changelog_file = "../docs/gitbook/python/changelog.md" -exclude_commit_patterns = ["^((?!python).)*$"] - -[tool.semantic_release.branches.master] -match = "master" -prerelease = false -prerelease_token = "rc" - -[tool.semantic_release.remote] -name = "origin" -type = "github" -ignore_token_for_push = false -token = { env = "GH_TOKEN" } +upload_to_pypi = true diff --git a/python/requirements.txt b/python/requirements.txt index 0e34126c28..aa6a5ee421 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -6,8 +6,9 @@ msgpack==1.0.5 pipenv==2023.7.4 platformdirs==3.6.0 pre-commit==3.3.3 +python-semantic-release==7.28.1 redis==4.6.0 -semver==3.0.1 +semver==2.13.0 six==1.16.0 virtualenv==20.23.1 virtualenv-clone==0.5.7 From 235ff4702fea4c2ae49b26c39efe7f1739e445f9 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 1 Aug 2023 19:18:51 -0600 Subject: [PATCH 267/322] docs(bullmq-pro): add v6 api references (#2106) --- docs/gitbook/bullmq-pro/batches.md | 52 ++++++++++--------- .../bullmq-pro/groups/pausing-groups.md | 9 +++- docs/gitbook/bullmq-pro/groups/prioritized.md | 18 +++++-- docs/gitbook/bullmq-pro/install.md | 1 - docs/gitbook/bullmq-pro/nestjs/producers.md | 4 +- 5 files changed, 50 insertions(+), 34 deletions(-) diff --git a/docs/gitbook/bullmq-pro/batches.md b/docs/gitbook/bullmq-pro/batches.md index 8267afd75f..10c8afae9b 100644 --- a/docs/gitbook/bullmq-pro/batches.md +++ b/docs/gitbook/bullmq-pro/batches.md @@ -11,17 +11,18 @@ Workers using batches have slightly different semantics and behavior than normal In order to enable batches you must pass the batch option with a size representing the maximum amount of jobs per batch: ```typescript +const worker = new WorkerPro( + 'My Queue', + async (job: JobPro) => { + const batch = job.getBatch(); -const worker = new WorkerPro("My Queue", async (job: JobPro) => { - const batch = job.getBatch(); - - for(let i=0; i { - const batch = job.getBatch(); - - for(let i=0; i { + const batch = job.getBatch(); + + for (let i = 0; i < batch.length; i++) { const batchedJob = batch[i]; try { await doSomethingWithBatchedJob(batchedJob); - } catch(err) { + } catch (err) { batchedJob.setAsFailed(err); } - } -}, { connection, batches: { size: 10 } }); + } + }, + { connection, batches: { size: 10 } }, +); ``` Only the jobs that are `setAsFailed` will fail, the rest will be moved to complete when the processor for the batch job completes. @@ -58,15 +63,16 @@ Batches are handled by wrapping all the jobs in a batch into a dummy job that ke It is possible, however, to call the getBatch function in order to retrieve all the jobs that belong to a given batch. ```typescript - worker.on('completed', job => { - const batch = job.getBatch();e - }); +worker.on('completed', job => { + const batch = job.getBatch(); + e; +}); ``` Using a global event listener you can listen to individual job events even though they may be processed in a batch: ```typescript -import { QueueEventsPro } from "@taskforcesh/bullmq-pro" +import { QueueEventsPro } from '@taskforcesh/bullmq-pro'; const queueEvents = new QueueEventsPro(queueName, { connection }); queueEvents.on('completed', (jobId, err) => { @@ -74,12 +80,10 @@ queueEvents.on('completed', (jobId, err) => { }); ``` - - ### Limitations Currently, all worker options can be used with the batches, however, there are some unsupported features that may be implemented in the future: -* [Dynamic rate limit](https://docs.bullmq.io/guide/rate-limiting#manual-rate-limit) -* [Manually processing jobs](https://docs.bullmq.io/patterns/manually-fetching-jobs) -* [Dynamically delay jobs](https://docs.bullmq.io/patterns/process-step-jobs#delaying). +- [Dynamic rate limit](https://docs.bullmq.io/guide/rate-limiting#manual-rate-limit) +- [Manually processing jobs](https://docs.bullmq.io/patterns/manually-fetching-jobs) +- [Dynamically delay jobs](https://docs.bullmq.io/patterns/process-step-jobs#delaying). diff --git a/docs/gitbook/bullmq-pro/groups/pausing-groups.md b/docs/gitbook/bullmq-pro/groups/pausing-groups.md index 79c2a91408..bd325ff677 100644 --- a/docs/gitbook/bullmq-pro/groups/pausing-groups.md +++ b/docs/gitbook/bullmq-pro/groups/pausing-groups.md @@ -2,7 +2,7 @@ BullMQ Pro supports pausing groups globally. A group is paused when no workers will pick up any jobs that belongs to the paused group. When you pause a group, the workers that are currently busy processing a job from that group, will continue working on that job until it completes (or failed), and then will just keep idling until the group has been resumed. -Pausing a group is performed by calling the _**pauseGroup**_ method on a [queue](https://api.bullmq.pro/classes/Queue.html#pauseGroup) instance: +Pausing a group is performed by calling the _**pauseGroup**_ method on a [queue](https://api.bullmq.pro/classes/v6.Queue.html#pauseGroup) instance: ```typescript await myQueue.pauseGroup('groupId'); @@ -16,7 +16,7 @@ Even if the groupId does not exist at that time, the groupId will be added in ou It will return false if the group is already paused. {% endhint %} -Resuming a group is performed by calling the _**resumeGroup**_ method on a [queue](https://api.bullmq.pro/classes/Queue.html#resumeGroup) instance: +Resuming a group is performed by calling the _**resumeGroup**_ method on a [queue](https://api.bullmq.pro/classes/v6.Queue.html#resumeGroup) instance: ```typescript await myQueue.resumeGroup('groupId'); @@ -25,3 +25,8 @@ await myQueue.resumeGroup('groupId'); {% hint style="warning" %} It will return false if the group does not exist or when the group is already resumed. {% endhint %} + +## Read more: + +- 💡 [Pause Group API Reference](https://api.bullmq.pro/classes/v6.Queue.html#pauseGroup) +- 💡 [Resume Group API Reference](https://api.bullmq.pro/classes/v6.Queue.html#resumeGroup) diff --git a/docs/gitbook/bullmq-pro/groups/prioritized.md b/docs/gitbook/bullmq-pro/groups/prioritized.md index 60513c4686..7c4c518a64 100644 --- a/docs/gitbook/bullmq-pro/groups/prioritized.md +++ b/docs/gitbook/bullmq-pro/groups/prioritized.md @@ -3,14 +3,22 @@ BullMQ Pro supports priorities per group. A job is prioritized in a group when group and priority options are provided together. ```typescript -await myQueue.add('paint', { foo: 'bar' }, { +await myQueue.add( + 'paint', + { foo: 'bar' }, + { group: { - id: 'groupId', - priority: 10 - } -}); + id: 'groupId', + priority: 10, + }, + }, +); ``` {% hint style="info" %} Standard prioritized jobs get more priority than grouped prioritized jobs {% endhint %} + +## Read more: + +- 💡 [Add Job API Reference](https://api.bullmq.pro/classes/v6.Queue.html#add) diff --git a/docs/gitbook/bullmq-pro/install.md b/docs/gitbook/bullmq-pro/install.md index 5bb3c48fbd..4250082d93 100644 --- a/docs/gitbook/bullmq-pro/install.md +++ b/docs/gitbook/bullmq-pro/install.md @@ -39,4 +39,3 @@ WORKDIR /app ADD .npmrc /app/.npmr ``` - diff --git a/docs/gitbook/bullmq-pro/nestjs/producers.md b/docs/gitbook/bullmq-pro/nestjs/producers.md index 73a19fa8a8..f95387dfbb 100644 --- a/docs/gitbook/bullmq-pro/nestjs/producers.md +++ b/docs/gitbook/bullmq-pro/nestjs/producers.md @@ -66,5 +66,5 @@ const job = await this.fooFlowProducer.add({ - 💡 [Queues Technique](https://docs.nestjs.com/techniques/queues) - 💡 [Inject Queue API Reference](https://nestjs.bullmq.pro/functions/InjectQueue.html) - 💡 [Inject Flow Producer API Reference](https://nestjs.bullmq.pro/functions/InjectFlowProducer.html) -- 💡 [QueuePro API Reference](https://api.bullmq.pro/classes/Queue.html) -- 💡 [FlowProducerPro API Reference](https://api.bullmq.pro/classes/FlowProducer.html) +- 💡 [QueuePro API Reference](https://api.bullmq.pro/classes/v6.Queue.html) +- 💡 [FlowProducerPro API Reference](https://api.bullmq.pro/classes/v6.FlowProducer.html) From 7426c64b109f1beacf742d57a987282597385469 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 2 Aug 2023 19:41:30 -0600 Subject: [PATCH 268/322] feat(queue): add getRateLimitTtl method (#2105) --- src/classes/queue-getters.ts | 11 +++++++++++ tests/test_rate_limiter.ts | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/src/classes/queue-getters.ts b/src/classes/queue-getters.ts index 98548bcc2b..f3ac230876 100644 --- a/src/classes/queue-getters.ts +++ b/src/classes/queue-getters.ts @@ -105,6 +105,17 @@ export class QueueGetters< return count; } + /** + * Returns the time to live for a rate limited key in milliseconds. + * @returns -2 if the key does not exist. + * @returns -1 if the key exists but has no associated expire. + * @see {@link https://redis.io/commands/pttl/} + */ + async getRateLimitTtl(): Promise { + const client = await this.client; + return client.pttl(this.keys.limiter); + } + /** * Job counts by type * diff --git a/tests/test_rate_limiter.ts b/tests/test_rate_limiter.ts index 23afc09665..700097f5d3 100644 --- a/tests/test_rate_limiter.ts +++ b/tests/test_rate_limiter.ts @@ -330,11 +330,17 @@ describe('Rate Limiter', function () { const duration = 100; const margin = 0.95; // 5% margin for CI + const ttl = await queue.getRateLimitTtl(); + expect(ttl).to.be.equal(-2); + const worker = new Worker( queueName, async job => { if (job.attemptsMade === 1) { await worker.rateLimit(dynamicLimit); + const currentTtl = await queue.getRateLimitTtl(); + expect(currentTtl).to.be.lessThanOrEqual(250); + expect(currentTtl).to.be.greaterThan(100); throw Worker.RateLimitError(); } }, From 6fe67b49d30bdb70fcbd8057f98b1014056ea765 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 3 Aug 2023 01:42:40 +0000 Subject: [PATCH 269/322] chore(release): 4.7.0 [skip ci] # [4.7.0](https://github.com/taskforcesh/bullmq/compare/v4.6.3...v4.7.0) (2023-08-03) ### Features * **queue:** add getRateLimitTtl method ([#2105](https://github.com/taskforcesh/bullmq/issues/2105)) ([7426c64](https://github.com/taskforcesh/bullmq/commit/7426c64b109f1beacf742d57a987282597385469)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index abe88ccbea..813193e213 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +# [4.7.0](https://github.com/taskforcesh/bullmq/compare/v4.6.3...v4.7.0) (2023-08-03) + + +### Features + +* **queue:** add getRateLimitTtl method ([#2105](https://github.com/taskforcesh/bullmq/issues/2105)) ([7426c64](https://github.com/taskforcesh/bullmq/commit/7426c64b109f1beacf742d57a987282597385469)) + ## [4.6.3](https://github.com/taskforcesh/bullmq/compare/v4.6.2...v4.6.3) (2023-07-28) diff --git a/package.json b/package.json index 326dbcd147..67e7e22ad3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.6.3", + "version": "4.7.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From d27f33e997d30e6c0c7d4484bea338347c3fe67e Mon Sep 17 00:00:00 2001 From: fuyu Date: Thu, 3 Aug 2023 05:10:11 +0300 Subject: [PATCH 270/322] feat(python): add username option into redisOpts (#2108) --- python/bullmq/redis_connection.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/bullmq/redis_connection.py b/python/bullmq/redis_connection.py index 417dfac310..c9e2cb8112 100644 --- a/python/bullmq/redis_connection.py +++ b/python/bullmq/redis_connection.py @@ -26,10 +26,11 @@ def __init__(self, redisOpts: dict | str = {}): port = redisOpts.get("port") or 6379 db = redisOpts.get("db") or 0 password = redisOpts.get("password") or None + username = redisOpts.get("username") or None self.conn = redis.Redis( host=host, port=port, db=db, password=password, decode_responses=True, - retry=retry, retry_on_error=retry_errors) + retry=retry, retry_on_error=retry_errors, username=username) else: self.conn = redis.from_url(redisOpts, decode_responses=True, retry=retry, retry_on_error=retry_errors) From 284a2583a5b387935304b27b2e79f8d82f0370ce Mon Sep 17 00:00:00 2001 From: semantic-release Date: Thu, 3 Aug 2023 02:12:09 +0000 Subject: [PATCH 271/322] 1.10.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 23 +++++++++++++++++++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 022f75a1da..2610b0539e 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,29 @@ +## v1.10.0 (2023-08-03) +### Feature +* **python:** Add username option into redisOpts ([#2108](https://github.com/taskforcesh/bullmq/issues/2108)) ([`d27f33e`](https://github.com/taskforcesh/bullmq/commit/d27f33e997d30e6c0c7d4484bea338347c3fe67e)) +* **queue:** Add getRateLimitTtl method ([#2105](https://github.com/taskforcesh/bullmq/issues/2105)) ([`7426c64`](https://github.com/taskforcesh/bullmq/commit/7426c64b109f1beacf742d57a987282597385469)) +* **queue:** Add promoteJobs to promote all delayed jobs ([`6074592`](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) + +### Fix +* **python:** Upgrade semver to prevent warnings ([#2074](https://github.com/taskforcesh/bullmq/issues/2074)) ([`fc7f92b`](https://github.com/taskforcesh/bullmq/commit/fc7f92bc3cd5208e79405d4573a1b64f692c3be2)) + +### Documentation +* **bullmq-pro:** Add v6 api references ([#2106](https://github.com/taskforcesh/bullmq/issues/2106)) ([`235ff47`](https://github.com/taskforcesh/bullmq/commit/235ff4702fea4c2ae49b26c39efe7f1739e445f9)) +* **bullmq-pro:** Update changelog to version 6.2.4 ([`3cff81e`](https://github.com/taskforcesh/bullmq/commit/3cff81e517b6b40d68180e3b23f7cb64239ed334)) +* **bullmq-pro:** Add prioritized section ([#2096](https://github.com/taskforcesh/bullmq/issues/2096)) ([`a0f153c`](https://github.com/taskforcesh/bullmq/commit/a0f153c091f9abd21959109621ce22a2f32e3334)) +* **readme:** Update usedBy section ([`2ad2530`](https://github.com/taskforcesh/bullmq/commit/2ad253055ca6d8f117c434c9eac98c69c4aa1895)) +* **changelog:** Fix 4.6.2 version link ([`7706a08`](https://github.com/taskforcesh/bullmq/commit/7706a08a58fed28006ea0bacc93b094ee15cbea1)) +* Restore python changelog ([#2089](https://github.com/taskforcesh/bullmq/issues/2089)) ([`f43ea5e`](https://github.com/taskforcesh/bullmq/commit/f43ea5ed9910e91f9e4aaaba31e6f3da61555a02)) +* **retry:** Add stop retrying jobs pattern (#2080) ref #1571 ([`dd40cf1`](https://github.com/taskforcesh/bullmq/commit/dd40cf1eaf13767ddcd5e68c4f33d974b65e6f18)) +* **api:** Remove old api files in favor of typedoc ([#2078](https://github.com/taskforcesh/bullmq/issues/2078)) ([`75a594f`](https://github.com/taskforcesh/bullmq/commit/75a594f36a2e8c62e16f55d917d1b8f906d18a8c)) + +### Performance +* **job:** Generate priority limit constant once ([#2102](https://github.com/taskforcesh/bullmq/issues/2102)) ([`8880f9f`](https://github.com/taskforcesh/bullmq/commit/8880f9f2983282d343d603a89abe5e1e6bff78e5)) +* **retry:** Compare prev state instead of regex expression ([#2099](https://github.com/taskforcesh/bullmq/issues/2099)) ([`c141283`](https://github.com/taskforcesh/bullmq/commit/c1412831903d1fae0955af097e0be049024839fe)) + ## v1.9.0 (2023-07-18) ### Feature * **job:** Add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([`841dc87`](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 18746d9b97..8be5e1570c 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.9.0" +__version__ = "1.10.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 25b797eb79..af598a146b 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.9.0" +version = "1.10.0" description='BullMQ for Python' readme="README.md" authors = [ From 41c8c57992317e567cbefb311c5de31c14b6eb59 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 21:47:59 -0500 Subject: [PATCH 272/322] chore(deps): update actions/setup-python digest to 61a6322 (#2067) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7ac3753062..e40dd5f267 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,7 +36,7 @@ jobs: run: npx semantic-release - run: yarn copy:lua:python - name: Setup Python - uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # v4 + uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4 with: python-version: '3.10' cache: 'pip' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 52b62e8cc0..8887a890d7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -116,7 +116,7 @@ jobs: - run: yarn copy:lua:python - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # v4 + uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4 with: python-version: ${{ matrix.python-version }} From 6b159145e426d63e23f46382732ab27ddbf126cf Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 3 Aug 2023 01:13:00 -0600 Subject: [PATCH 273/322] refactor(queue-keys): reuse getQueueQualifiedName method (#2109) --- python/bullmq/job.py | 5 +---- python/bullmq/queue.py | 11 ++++++++--- python/bullmq/queue_keys.py | 22 ++++++++++++++++++++++ python/bullmq/scripts.py | 10 ++++------ python/bullmq/worker.py | 1 + src/classes/flow-producer.ts | 3 ++- src/classes/job.ts | 16 ++++++++-------- src/classes/queue-base.ts | 2 ++ src/classes/queue-keys.ts | 10 +++------- src/types/minimal-queue.ts | 1 + 10 files changed, 52 insertions(+), 29 deletions(-) create mode 100644 python/bullmq/queue_keys.py diff --git a/python/bullmq/job.py b/python/bullmq/job.py index d1669e990b..f536326ce2 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -56,6 +56,7 @@ def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): self.parent = {"id": parent.get("id"), "queueKey": parent.get("queue")} if parent else None self.stacktrace: List[str] = [] self.scripts = Scripts(queue.prefix, queue.name, queue.redisConnection) + self.queueQualifiedName = queue.qualifiedName def updateData(self, data): self.data = data @@ -152,10 +153,6 @@ async def saveStacktrace(self, pipe, err:str): def moveToWaitingChildren(self, token, opts:dict): return self.scripts.moveToWaitingChildren(self.id, token, opts) - @property - def queueQualifiedName(self): - return f"{self.queue.prefix}:{self.queue.name}" - @staticmethod def fromJSON(queue: Queue, rawData: dict, jobId: str | None = None): """ diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 5ec247484b..3a3bc6b31c 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -22,6 +22,11 @@ def __init__(self, name: str, redisOpts: dict | str = {}, opts: QueueOptions = { self.prefix = opts.get("prefix", "bull") self.scripts = Scripts( self.prefix, name, self.redisConnection) + self.keys = self.scripts.queue_keys.getKeys(name) + self.qualifiedName = self.scripts.queue_keys.getQueueQualifiedName(name) + + def toKey(self, type: str): + return self.scripts.queue_keys.toKey(self.name, type) async def add(self, name: str, data, opts: JobOptions = {}): """ @@ -63,7 +68,7 @@ async def isPaused(self): """ Returns true if the queue is currently paused. """ - paused_key_exists = await self.client.hexists(f"{self.prefix}:{self.name}:meta", "paused") + paused_key_exists = await self.client.hexists(self.keys["meta"], "paused") return paused_key_exists == 1 async def obliterate(self, force: bool = False): @@ -103,13 +108,13 @@ def trimEvents(self, maxLength: int): @param maxLength: """ - return self.client.xtrim(f"{self.prefix}:{self.name}:events", maxlen = maxLength, approximate = "~") + return self.client.xtrim(self.keys["events"], maxlen = maxLength, approximate = "~") def removeDeprecatedPriorityKey(self): """ Delete old priority helper key. """ - return self.client.delete(f"{self.prefix}:{self.name}:priority") + return self.client.delete(self.toKey("priority")) async def getJobCountByTypes(self, *types): result = await self.getJobCounts(*types) diff --git a/python/bullmq/queue_keys.py b/python/bullmq/queue_keys.py new file mode 100644 index 0000000000..54cf17cd63 --- /dev/null +++ b/python/bullmq/queue_keys.py @@ -0,0 +1,22 @@ +class QueueKeys: + """ + This class handles all keys parser logic. + """ + + def __init__(self, prefix: str = 'bull'): + self.prefix = prefix + + def getKeys(self, name: str): + names = ["", "active", "wait", "waiting-children", "paused", "completed", "failed", "delayed", + "stalled", "limiter", "prioritized", "id", "stalled-check", "meta", "pc", "events"] + keys = {} + for name_type in names: + keys[name_type] = self.toKey(name, name_type) + + return keys + + def toKey(self, name: str, name_type: str): + return f"{self.getQueueQualifiedName(name)}:{name_type}" + + def getQueueQualifiedName(self, name: str): + return f"{self.prefix}:{name}" diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index 1e7bb9c866..f93fdaf553 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -5,6 +5,7 @@ from __future__ import annotations from redis import Redis +from bullmq.queue_keys import QueueKeys from bullmq.error_code import ErrorCode from bullmq.utils import isRedisVersionLowerThan, get_parent_key from typing import Any, TYPE_CHECKING @@ -53,14 +54,11 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection "updateProgress": self.redisClient.register_script(self.getScript("updateProgress-2.lua")), } - # loop all the names and add them to the keys object - names = ["", "active", "wait", "waiting-children", "paused", "completed", "failed", "delayed", - "stalled", "limiter", "prioritized", "id", "stalled-check", "meta", "pc", "events", "waiting-children"] - for name in names: - self.keys[name] = self.toKey(name) + self.queue_keys = QueueKeys(prefix) + self.keys = self.queue_keys.getKeys(queueName) def toKey(self, name: str): - return f"{self.prefix}:{self.queueName}:{name}" + return self.queue_keys.toKey(self.queueName, name) def getScript(self, name: str): """ diff --git a/python/bullmq/worker.py b/python/bullmq/worker.py index c0b90c4a0b..e40a7c7798 100644 --- a/python/bullmq/worker.py +++ b/python/bullmq/worker.py @@ -45,6 +45,7 @@ def __init__(self, name: str, processor: Callable[[Job, str], asyncio.Future], o self.blockUntil = 0 self.limitUntil = 0 self.drained = False + self.qualifiedName = self.scripts.queue_keys.getQueueQualifiedName(name) if opts.get("autorun", True): asyncio.ensure_future(self.run()) diff --git a/src/classes/flow-producer.ts b/src/classes/flow-producer.ts index 4aa8a95a23..5a7d771091 100644 --- a/src/classes/flow-producer.ts +++ b/src/classes/flow-producer.ts @@ -305,7 +305,7 @@ export class FlowProducer extends EventEmitter { parent: { parentOpts: { id: parentId, - queue: queueKeysParent.getPrefixedQueueName(node.queueName), + queue: queueKeysParent.getQueueQualifiedName(node.queueName), }, parentDependenciesKey, }, @@ -433,6 +433,7 @@ export class FlowProducer extends EventEmitter { keys: queueKeys.getKeys(node.queueName), toKey: (type: string) => queueKeys.toKey(node.queueName, type), opts: { prefix }, + qualifiedName: queueKeys.getQueueQualifiedName(node.queueName), closing: this.closing, waitUntilReady: async () => this.connection.client, removeListener: this.removeListener.bind(this) as any, diff --git a/src/classes/job.ts b/src/classes/job.ts index d35a6f827a..8e6c164a8a 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -63,6 +63,12 @@ export class Job< NameType extends string = string, > implements MinimalJob { + /** + * It includes the prefix, the namespace separator :, and queue name. + * @see https://www.gnu.org/software/gawk/manual/html_node/Qualified-Names.html + */ + public readonly queueQualifiedName: string; + /** * The progress a job has performed so far. * @defaultValue 0 @@ -183,6 +189,8 @@ export class Job< this.toKey = queue.toKey.bind(queue); this.scripts = new Scripts(queue); + + this.queueQualifiedName = queue.qualifiedName; } /** @@ -715,14 +723,6 @@ export class Job< return this.queue.opts.prefix; } - /** - * @returns it includes the prefix, the namespace separator :, and queue name. - * @see https://www.gnu.org/software/gawk/manual/html_node/Qualified-Names.html - */ - get queueQualifiedName(): string { - return `${this.prefix}:${this.queueName}`; - } - /** * Get current state. * diff --git a/src/classes/queue-base.ts b/src/classes/queue-base.ts index 1ac7c26d48..cc942abd57 100644 --- a/src/classes/queue-base.ts +++ b/src/classes/queue-base.ts @@ -22,6 +22,7 @@ export class QueueBase extends EventEmitter implements MinimalQueue { protected scripts: Scripts; protected connection: RedisConnection; + public readonly qualifiedName: string; /** * @@ -66,6 +67,7 @@ export class QueueBase extends EventEmitter implements MinimalQueue { }); const queueKeys = new QueueKeys(opts.prefix); + this.qualifiedName = queueKeys.getQueueQualifiedName(name); this.keys = queueKeys.getKeys(name); this.toKey = (type: string) => queueKeys.toKey(name, type); this.scripts = new Scripts(this); diff --git a/src/classes/queue-keys.ts b/src/classes/queue-keys.ts index 4a9f1372d5..1108c66466 100644 --- a/src/classes/queue-keys.ts +++ b/src/classes/queue-keys.ts @@ -9,9 +9,8 @@ export class QueueKeys { '', 'active', 'wait', - 'waiting', + 'waiting-children', 'paused', - 'resumed', 'id', 'delayed', 'prioritized', @@ -21,11 +20,8 @@ export class QueueKeys { 'stalled', 'repeat', 'limiter', - 'drained', - 'progress', 'meta', 'events', - 'delay', 'pc', ].forEach(key => { keys[key] = this.toKey(name, key); @@ -35,10 +31,10 @@ export class QueueKeys { } toKey(name: string, type: string): string { - return `${this.getPrefixedQueueName(name)}:${type}`; + return `${this.getQueueQualifiedName(name)}:${type}`; } - getPrefixedQueueName(name: string): string { + getQueueQualifiedName(name: string): string { return `${this.prefix}:${name}`; } } diff --git a/src/types/minimal-queue.ts b/src/types/minimal-queue.ts index 46020c7f1f..2f435c07da 100644 --- a/src/types/minimal-queue.ts +++ b/src/types/minimal-queue.ts @@ -7,6 +7,7 @@ export type MinimalQueue = Pick< | 'toKey' | 'keys' | 'opts' + | 'qualifiedName' | 'closing' | 'waitUntilReady' | 'removeListener' From e2cb45f3e31167c1fd6b1e58b2a322273762c68f Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 3 Aug 2023 01:13:52 -0600 Subject: [PATCH 274/322] docs(bullmq-pro): update changelog to version 6.3.0 (#2111) --- docs/gitbook/bullmq-pro/changelog.md | 7 +++++++ docs/gitbook/python/changelog.md | 18 +----------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index c10b9722ad..32c38e0d20 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,10 @@ +# [6.3.0](https://github.com/taskforcesh/bullmq-pro/compare/v6.2.4...v6.3.0) (2023-08-03) + + +### Features + +* **queue:** add getRateLimitTtl method ([#173](https://github.com/taskforcesh/bullmq-pro/issues/173)) ([3327350](https://github.com/taskforcesh/bullmq-pro/commit/3327350d06526651353974aa7822fdeeec881fb0)) + ## [6.2.4](https://github.com/taskforcesh/bullmq-pro/compare/v6.2.3...v6.2.4) (2023-07-29) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 2610b0539e..272ad89eb2 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -4,25 +4,9 @@ ## v1.10.0 (2023-08-03) ### Feature -* **python:** Add username option into redisOpts ([#2108](https://github.com/taskforcesh/bullmq/issues/2108)) ([`d27f33e`](https://github.com/taskforcesh/bullmq/commit/d27f33e997d30e6c0c7d4484bea338347c3fe67e)) -* **queue:** Add getRateLimitTtl method ([#2105](https://github.com/taskforcesh/bullmq/issues/2105)) ([`7426c64`](https://github.com/taskforcesh/bullmq/commit/7426c64b109f1beacf742d57a987282597385469)) -* **queue:** Add promoteJobs to promote all delayed jobs ([`6074592`](https://github.com/taskforcesh/bullmq/commit/6074592574256ec4b1c340126288e803e56b1a64)) - -### Fix -* **python:** Upgrade semver to prevent warnings ([#2074](https://github.com/taskforcesh/bullmq/issues/2074)) ([`fc7f92b`](https://github.com/taskforcesh/bullmq/commit/fc7f92bc3cd5208e79405d4573a1b64f692c3be2)) - -### Documentation -* **bullmq-pro:** Add v6 api references ([#2106](https://github.com/taskforcesh/bullmq/issues/2106)) ([`235ff47`](https://github.com/taskforcesh/bullmq/commit/235ff4702fea4c2ae49b26c39efe7f1739e445f9)) -* **bullmq-pro:** Update changelog to version 6.2.4 ([`3cff81e`](https://github.com/taskforcesh/bullmq/commit/3cff81e517b6b40d68180e3b23f7cb64239ed334)) -* **bullmq-pro:** Add prioritized section ([#2096](https://github.com/taskforcesh/bullmq/issues/2096)) ([`a0f153c`](https://github.com/taskforcesh/bullmq/commit/a0f153c091f9abd21959109621ce22a2f32e3334)) -* **readme:** Update usedBy section ([`2ad2530`](https://github.com/taskforcesh/bullmq/commit/2ad253055ca6d8f117c434c9eac98c69c4aa1895)) -* **changelog:** Fix 4.6.2 version link ([`7706a08`](https://github.com/taskforcesh/bullmq/commit/7706a08a58fed28006ea0bacc93b094ee15cbea1)) -* Restore python changelog ([#2089](https://github.com/taskforcesh/bullmq/issues/2089)) ([`f43ea5e`](https://github.com/taskforcesh/bullmq/commit/f43ea5ed9910e91f9e4aaaba31e6f3da61555a02)) -* **retry:** Add stop retrying jobs pattern (#2080) ref #1571 ([`dd40cf1`](https://github.com/taskforcesh/bullmq/commit/dd40cf1eaf13767ddcd5e68c4f33d974b65e6f18)) -* **api:** Remove old api files in favor of typedoc ([#2078](https://github.com/taskforcesh/bullmq/issues/2078)) ([`75a594f`](https://github.com/taskforcesh/bullmq/commit/75a594f36a2e8c62e16f55d917d1b8f906d18a8c)) +* **redis-connection:** Add username option into redisOpts ([#2108](https://github.com/taskforcesh/bullmq/issues/2108)) ([`d27f33e`](https://github.com/taskforcesh/bullmq/commit/d27f33e997d30e6c0c7d4484bea338347c3fe67e)) ### Performance -* **job:** Generate priority limit constant once ([#2102](https://github.com/taskforcesh/bullmq/issues/2102)) ([`8880f9f`](https://github.com/taskforcesh/bullmq/commit/8880f9f2983282d343d603a89abe5e1e6bff78e5)) * **retry:** Compare prev state instead of regex expression ([#2099](https://github.com/taskforcesh/bullmq/issues/2099)) ([`c141283`](https://github.com/taskforcesh/bullmq/commit/c1412831903d1fae0955af097e0be049024839fe)) ## v1.9.0 (2023-07-18) From 5e9b990e939acbab1dee5ffe9572cc2b74145492 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 07:17:22 +0000 Subject: [PATCH 275/322] chore(deps): update dependency msgpackr to v1.9.6 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 58f7e0939d..39a577002a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5120,9 +5120,9 @@ msgpackr-extract@^3.0.2: "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" msgpackr@^1.6.2: - version "1.9.5" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.9.5.tgz#ac548c5f4546db895e84e46d39d813be961dc527" - integrity sha512-/IJ3cFSN6Ci3eG2wLhbFEL6GT63yEaoN/R5My2QkV6zro+OJaVRLPlwvxY7EtHYSmDlQpk8stvOQTL2qJFkDRg== + version "1.9.6" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.9.6.tgz#0b2bd37fba705756df795fdfe06a55f447c7bc47" + integrity sha512-50rmb6+ZWvEm0vJn8R8CwI1Eavss3h5rgtKrcdUal3EkZcpqw82+xsmc7RoHb8fYB5V4EOU2NDaOitDAdO0t+w== optionalDependencies: msgpackr-extract "^3.0.2" From 0d5781a1f3ca7d95f683d02e92452c2561d303b9 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 8 Aug 2023 18:55:10 -0600 Subject: [PATCH 276/322] chore(deps): remove renovate (#2113) --- renovate.json | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 renovate.json diff --git a/renovate.json b/renovate.json deleted file mode 100644 index ecef112884..0000000000 --- a/renovate.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "enabled": true, - "extends": [ - ":enableRenovate", - ":automergeDisabled", - ":autodetectPinVersions", - ":dependencyDashboard", - "github>whitesource/merge-confidence:beta", - "group:monorepos", - "group:recommended", - "workarounds:all", - "helpers:pinGitHubActionDigests", - ":semanticCommits", - ":disableDevDependencies" - ], - "labels": ["dependency"], - "lockFileMaintenance": { - "enabled": true - }, - "npm": { - "enabled": true - }, - "github-actions": { - "enabled": true - } -} From 12ce2f3746626a81ea961961bb1a629077eed68a Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 9 Aug 2023 20:34:45 -0600 Subject: [PATCH 277/322] perf(rate-limit): get pttl only if needed (#2129) --- src/commands/includes/getRateLimitTTL.lua | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/commands/includes/getRateLimitTTL.lua b/src/commands/includes/getRateLimitTTL.lua index 46a03ece90..3740f4c1a1 100644 --- a/src/commands/includes/getRateLimitTTL.lua +++ b/src/commands/includes/getRateLimitTTL.lua @@ -1,16 +1,13 @@ local function getRateLimitTTL(maxJobs, rateLimiterKey) - if maxJobs then + if maxJobs and maxJobs <= tonumber(rcall("GET", rateLimiterKey) or 0) then local pttl = rcall("PTTL", rateLimiterKey) if pttl == 0 then rcall("DEL", rateLimiterKey) end - local jobCounter = tonumber(rcall("GET", rateLimiterKey) or 0) - if jobCounter >= maxJobs then - if pttl > 0 then - return pttl - end + if pttl > 0 then + return pttl end end return 0 From bf9a9471818cb6fe4c323ba4bfbbcff3ea074c19 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 10 Aug 2023 02:35:58 +0000 Subject: [PATCH 278/322] chore(release): 4.7.1 [skip ci] ## [4.7.1](https://github.com/taskforcesh/bullmq/compare/v4.7.0...v4.7.1) (2023-08-10) ### Features * **python:** add username option into redisOpts ([#2108](https://github.com/taskforcesh/bullmq/issues/2108)) ([d27f33e](https://github.com/taskforcesh/bullmq/commit/d27f33e997d30e6c0c7d4484bea338347c3fe67e)) ### Performance Improvements * **rate-limit:** get pttl only if needed ([#2129](https://github.com/taskforcesh/bullmq/issues/2129)) ([12ce2f3](https://github.com/taskforcesh/bullmq/commit/12ce2f3746626a81ea961961bb1a629077eed68a)) --- docs/gitbook/changelog.md | 12 ++++++++++++ package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 813193e213..95d1f5ddb8 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,15 @@ +## [4.7.1](https://github.com/taskforcesh/bullmq/compare/v4.7.0...v4.7.1) (2023-08-10) + + +### Features + +* **python:** add username option into redisOpts ([#2108](https://github.com/taskforcesh/bullmq/issues/2108)) ([d27f33e](https://github.com/taskforcesh/bullmq/commit/d27f33e997d30e6c0c7d4484bea338347c3fe67e)) + + +### Performance Improvements + +* **rate-limit:** get pttl only if needed ([#2129](https://github.com/taskforcesh/bullmq/issues/2129)) ([12ce2f3](https://github.com/taskforcesh/bullmq/commit/12ce2f3746626a81ea961961bb1a629077eed68a)) + # [4.7.0](https://github.com/taskforcesh/bullmq/compare/v4.6.3...v4.7.0) (2023-08-03) diff --git a/package.json b/package.json index 67e7e22ad3..055e81fc7e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.7.0", + "version": "4.7.1", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From b6a48d33ac1a1657d0158507f40be4c2d5bd79ed Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Fri, 11 Aug 2023 09:36:26 +0000 Subject: [PATCH 279/322] GITBOOK-178: change request with no subject merged in GitBook --- docs/gitbook/python/introduction.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/gitbook/python/introduction.md b/docs/gitbook/python/introduction.md index 6e32058d72..3892ae6d72 100644 --- a/docs/gitbook/python/introduction.md +++ b/docs/gitbook/python/introduction.md @@ -51,5 +51,20 @@ worker = Worker("myQueue", process) # When no need to process more jobs we should close the worker await worker.close() +async def main(): + # Feel free to remove the connection parameter, if your redis runs on localhost + worker = Worker("myQueue", process, {"connection": "rediss://:@:"}) + + # This while loop is just for the sake of this example + # you won't need it in practice. + while True: # Add some breaking conditions here + await asyncio.sleep(1) + + # When no need to process more jobs we should close the worker + await worker.close() + +if __name__ == "__main__": + asyncio.run(main()) + ``` From 6ed5b7af894bfaab6d38b102aa02bf8f376af853 Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Fri, 11 Aug 2023 09:38:52 +0000 Subject: [PATCH 280/322] GITBOOK-179: change request with no subject merged in GitBook --- docs/gitbook/python/introduction.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/gitbook/python/introduction.md b/docs/gitbook/python/introduction.md index 3892ae6d72..b366727b90 100644 --- a/docs/gitbook/python/introduction.md +++ b/docs/gitbook/python/introduction.md @@ -46,11 +46,6 @@ async def process(job): # job.data will include the data added to the queue return doSomethingAsync(job) -worker = Worker("myQueue", process) - -# When no need to process more jobs we should close the worker -await worker.close() - async def main(): # Feel free to remove the connection parameter, if your redis runs on localhost worker = Worker("myQueue", process, {"connection": "rediss://:@:"}) From 78fb0e2a93cfa59a43a0fb337f857e78f1c6fcf4 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 11 Aug 2023 18:42:33 -0600 Subject: [PATCH 281/322] fix(queue): throw error when name is not provided (#2123) --- src/classes/queue-base.ts | 4 ++++ tests/test_queue.ts | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/classes/queue-base.ts b/src/classes/queue-base.ts index cc942abd57..ba54daa017 100644 --- a/src/classes/queue-base.ts +++ b/src/classes/queue-base.ts @@ -43,6 +43,10 @@ export class QueueBase extends EventEmitter implements MinimalQueue { ...opts, }; + if (!name) { + throw new Error('Queue name must be provided'); + } + if (!opts.connection) { console.warn( [ diff --git a/tests/test_queue.ts b/tests/test_queue.ts index 5912a38b14..026fd4b167 100644 --- a/tests/test_queue.ts +++ b/tests/test_queue.ts @@ -107,6 +107,17 @@ describe('queues', function () { }); }); + describe('when empty name is provided', () => { + it('throws an error', function () { + expect( + () => + new Queue('', { + connection, + }), + ).to.throw('Queue name must be provided'); + }); + }); + describe('.drain', () => { it('count added, unprocessed jobs', async () => { const maxJobs = 100; From 1e5e7ba2016029a0710412c5f5dcd11844c44b17 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 12 Aug 2023 00:43:44 +0000 Subject: [PATCH 282/322] chore(release): 4.7.2 [skip ci] ## [4.7.2](https://github.com/taskforcesh/bullmq/compare/v4.7.1...v4.7.2) (2023-08-12) ### Bug Fixes * **queue:** throw error when name is not provided ([#2123](https://github.com/taskforcesh/bullmq/issues/2123)) ([78fb0e2](https://github.com/taskforcesh/bullmq/commit/78fb0e2a93cfa59a43a0fb337f857e78f1c6fcf4)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 95d1f5ddb8..9bff257566 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [4.7.2](https://github.com/taskforcesh/bullmq/compare/v4.7.1...v4.7.2) (2023-08-12) + + +### Bug Fixes + +* **queue:** throw error when name is not provided ([#2123](https://github.com/taskforcesh/bullmq/issues/2123)) ([78fb0e2](https://github.com/taskforcesh/bullmq/commit/78fb0e2a93cfa59a43a0fb337f857e78f1c6fcf4)) + ## [4.7.1](https://github.com/taskforcesh/bullmq/compare/v4.7.0...v4.7.1) (2023-08-10) diff --git a/package.json b/package.json index 055e81fc7e..454cd785f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.7.1", + "version": "4.7.2", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 9569509af9ee400d8744106b85bc7c329b866d1d Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 14 Aug 2023 19:49:32 -0600 Subject: [PATCH 283/322] docs(changelog): update bullmq-pro to 6.3.3 (#2137) --- docs/gitbook/bullmq-pro/changelog.md | 21 +++++++++++++++++++++ docs/gitbook/changelog.md | 11 ----------- docs/gitbook/python/changelog.md | 4 ++-- tests/test_flow.ts | 8 +++++--- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/docs/gitbook/bullmq-pro/changelog.md b/docs/gitbook/bullmq-pro/changelog.md index 32c38e0d20..aaa62596e5 100644 --- a/docs/gitbook/bullmq-pro/changelog.md +++ b/docs/gitbook/bullmq-pro/changelog.md @@ -1,3 +1,24 @@ +## [6.3.3](https://github.com/taskforcesh/bullmq-pro/compare/v6.3.2...v6.3.3) (2023-08-15) + + +### Bug Fixes + +* **queue:** throw error when name is not provided ([#178](https://github.com/taskforcesh/bullmq-pro/issues/178)) ([9715bf1](https://github.com/taskforcesh/bullmq-pro/commit/9715bf15edef1f54a9ebc618eb7d47c7b45a35ca)) + +## [6.3.2](https://github.com/taskforcesh/bullmq-pro/compare/v6.3.1...v6.3.2) (2023-08-11) + + +### Bug Fixes + +* correct group rate limit in some edge cases ([#177](https://github.com/taskforcesh/bullmq-pro/issues/177)) ([c3c87a7](https://github.com/taskforcesh/bullmq-pro/commit/c3c87a7f0a6de5c35ac389efbac594d6d987cf49)) + +## [6.3.1](https://github.com/taskforcesh/bullmq-pro/compare/v6.3.0...v6.3.1) (2023-08-10) + + +### Performance Improvements + +* **rate-limit:** get pttl only if needed ([#175](https://github.com/taskforcesh/bullmq-pro/issues/175)) ([0439823](https://github.com/taskforcesh/bullmq-pro/commit/0439823c32a82e48abcae43c29e50ef912c31d15)) + # [6.3.0](https://github.com/taskforcesh/bullmq-pro/compare/v6.2.4...v6.3.0) (2023-08-03) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 9bff257566..c55299883a 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -8,11 +8,6 @@ ## [4.7.1](https://github.com/taskforcesh/bullmq/compare/v4.7.0...v4.7.1) (2023-08-10) -### Features - -* **python:** add username option into redisOpts ([#2108](https://github.com/taskforcesh/bullmq/issues/2108)) ([d27f33e](https://github.com/taskforcesh/bullmq/commit/d27f33e997d30e6c0c7d4484bea338347c3fe67e)) - - ### Performance Improvements * **rate-limit:** get pttl only if needed ([#2129](https://github.com/taskforcesh/bullmq/issues/2129)) ([12ce2f3](https://github.com/taskforcesh/bullmq/commit/12ce2f3746626a81ea961961bb1a629077eed68a)) @@ -48,11 +43,6 @@ # [4.5.0](https://github.com/taskforcesh/bullmq/compare/v4.4.0...v4.5.0) (2023-07-18) -### Bug Fixes - -* **python:** respect concurrency in worker ([#2062](https://github.com/taskforcesh/bullmq/issues/2062)) fixes [#2063](https://github.com/taskforcesh/bullmq/issues/2063) ([1b95185](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) - - ### Features * **job:** add option for removing children in remove method (python) ([#2064](https://github.com/taskforcesh/bullmq/issues/2064)) ([841dc87](https://github.com/taskforcesh/bullmq/commit/841dc87a689897df81438ad1f43e45a4da77c388)) @@ -63,7 +53,6 @@ ### Features * **job:** add removeDependencyOnFailure option ([#1953](https://github.com/taskforcesh/bullmq/issues/1953)) ([ffd49e2](https://github.com/taskforcesh/bullmq/commit/ffd49e289c57252487200d47b92193228ae7451f)) -* **python:** add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([808ee72](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) # [4.3.0](https://github.com/taskforcesh/bullmq/compare/v4.2.1...v4.3.0) (2023-07-14) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 272ad89eb2..1d52b34b41 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -15,11 +15,11 @@ ## v1.8.0 (2023-07-17) ### Fix -* **python:** Respect concurrency in worker (#2062) fixes #2063 ([`1b95185`](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) +* **worker:** Respect concurrency (#2062) fixes #2063 ([`1b95185`](https://github.com/taskforcesh/bullmq/commit/1b95185e8f4a4349037b59e61455bdec79792644)) ## v1.7.0 (2023-07-14) ### Feature -* **python:** Add remove method in queue ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([`808ee72`](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) +* **queue:** Add remove method ([#2066](https://github.com/taskforcesh/bullmq/issues/2066)) ([`808ee72`](https://github.com/taskforcesh/bullmq/commit/808ee7231c75d4d826881f25e346f01b2fd2dc23)) * **worker:** Add id as part of token ([#2061](https://github.com/taskforcesh/bullmq/issues/2061)) ([`e255356`](https://github.com/taskforcesh/bullmq/commit/e2553562271e1e4143a8fef616349bb30de4899d)) ## v1.6.1 (2023-07-10) diff --git a/tests/test_flow.ts b/tests/test_flow.ts index a15c901f0e..dd843b46e4 100644 --- a/tests/test_flow.ts +++ b/tests/test_flow.ts @@ -1308,7 +1308,7 @@ describe('flows', () => { const processingChildren = new Promise(resolve => { childrenProcessor = async (job: Job) => { processedChildren++; - await delay(20); + await delay(25); expect(processedChildren).to.be.equal(job.data.order); if (processedChildren === 3) { @@ -1321,7 +1321,7 @@ describe('flows', () => { const processingGrandchildren = new Promise(resolve => { grandChildrenProcessor = async (job: Job) => { processedGrandChildren++; - await delay(10); + await delay(25); expect(processedGrandChildren).to.be.equal(job.data.order); if (processedGrandChildren === 3) { @@ -1365,7 +1365,7 @@ describe('flows', () => { const grandChildrenWorker = new Worker( grandChildrenQueueName, grandChildrenProcessor, - { connection }, + { autorun: false, connection }, ); await parentWorker.waitUntilReady(); @@ -1428,6 +1428,8 @@ describe('flows', () => { expect(parentState).to.be.eql('waiting-children'); expect(children).to.have.length(3); + grandChildrenWorker.run(); + await processingGrandchildren; childrenWorker.run(); From 75dd80b190963bd5401e8d076500eb8c65c897b8 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 15 Aug 2023 18:43:47 -0600 Subject: [PATCH 284/322] docs(nestjs-bullmq-pro): add queue events listeners section (#2138) --- docs/gitbook/SUMMARY.md | 1 + docs/gitbook/bullmq-pro/nestjs/README.md | 1 + docs/gitbook/bullmq-pro/nestjs/producers.md | 2 + .../nestjs/queue-events-listeners.md | 49 +++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 docs/gitbook/bullmq-pro/nestjs/queue-events-listeners.md diff --git a/docs/gitbook/SUMMARY.md b/docs/gitbook/SUMMARY.md index a5eb4f61b9..6c08bfa9e5 100644 --- a/docs/gitbook/SUMMARY.md +++ b/docs/gitbook/SUMMARY.md @@ -73,6 +73,7 @@ * [Batches](bullmq-pro/batches.md) * [NestJs](bullmq-pro/nestjs/README.md) * [Producers](bullmq-pro/nestjs/producers.md) + * [Queue Events Listeners](bullmq-pro/nestjs/queue-events-listeners.md) * [API Reference](https://nestjs.bullmq.pro/) * [Changelog](bullmq-pro/nestjs/changelog.md) * [API Reference](https://api.bullmq.pro) diff --git a/docs/gitbook/bullmq-pro/nestjs/README.md b/docs/gitbook/bullmq-pro/nestjs/README.md index f79d442946..53c66f5623 100644 --- a/docs/gitbook/bullmq-pro/nestjs/README.md +++ b/docs/gitbook/bullmq-pro/nestjs/README.md @@ -102,3 +102,4 @@ A working example is available [here](https://github.com/taskforcesh/nestjs-bull - 💡 [Queues Technique](https://docs.nestjs.com/techniques/queues) - 💡 [Register Queue API Reference](https://nestjs.bullmq.pro/classes/BullModule.html#registerQueue) - 💡 [Register Flow Producer API Reference](https://nestjs.bullmq.pro/classes/BullModule.html#registerFlowProducer) +- 💡 [Worker Listener API Reference](https://api.docs.bullmq.io/interfaces/v4.WorkerListener.html) diff --git a/docs/gitbook/bullmq-pro/nestjs/producers.md b/docs/gitbook/bullmq-pro/nestjs/producers.md index f95387dfbb..17b80ea48d 100644 --- a/docs/gitbook/bullmq-pro/nestjs/producers.md +++ b/docs/gitbook/bullmq-pro/nestjs/producers.md @@ -1,3 +1,5 @@ +# Producers + Job producers add jobs to queues. Producers are typically application services (Nest providers). To add jobs to a queue, first inject the queue into the service as follows: ```typescript diff --git a/docs/gitbook/bullmq-pro/nestjs/queue-events-listeners.md b/docs/gitbook/bullmq-pro/nestjs/queue-events-listeners.md new file mode 100644 index 0000000000..f82c831494 --- /dev/null +++ b/docs/gitbook/bullmq-pro/nestjs/queue-events-listeners.md @@ -0,0 +1,49 @@ +# Queue Events Listeners + +To register a QueueEvents instance, you need to use **QueueEventsListener** decorator: + +```typescript +import { + QueueEventsListener, + QueueEventsHost, + OnQueueEvent, +} from '@taskforcesh/nestjs-bullmq-pro'; + +@QueueEventsListener('queueName') +export class TestQueueEvents extends QueueEventsHost { + @OnQueueEvent('completed') + onCompleted({ + jobId, + }: { + jobId: string; + returnvalue: string; + prev?: string; + }) { + // do some stuff + } +} +``` + +And then register it as a provider: + +```typescript +@Module({ + imports: [ + BullModule.registerQueue({ + name: 'queueName', + connection: { + host: '0.0.0.0', + port: 6380, + }, + }), + ], + providers: [TestQueueEvents], +}) +export class AppModule {} +``` + +## Read more: + +- 💡 [Queues Technique](https://docs.nestjs.com/techniques/queues) +- 💡 [Register Queue API Reference](https://nestjs.bullmq.pro/classes/BullModule.html#registerQueue) +- 💡 [Queue Events Pro Listener API Reference](https://api.bullmq.pro/interfaces/v6.QueueEventsListenerPro.html) From d82fdcc2b1ff6909678b6b717449af8df2f10bd6 Mon Sep 17 00:00:00 2001 From: roggervalf Date: Wed, 16 Aug 2023 21:36:21 -0500 Subject: [PATCH 285/322] docs(nestjs): add queue events listeners section --- docs/gitbook/SUMMARY.md | 1 + .../guide/nestjs/queue-events-listeners.md | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 docs/gitbook/guide/nestjs/queue-events-listeners.md diff --git a/docs/gitbook/SUMMARY.md b/docs/gitbook/SUMMARY.md index 6c08bfa9e5..d8fcbf3d49 100644 --- a/docs/gitbook/SUMMARY.md +++ b/docs/gitbook/SUMMARY.md @@ -43,6 +43,7 @@ * [Architecture](guide/architecture.md) * [NestJs](guide/nestjs/README.md) * [Producers](guide/nestjs/producers.md) + * [Queue Events Listeners](guide/nestjs/queue-events-listeners.md) * [Going to production](guide/going-to-production.md) * [Migration to newer versions](guide/migration-to-newer-versions.md) diff --git a/docs/gitbook/guide/nestjs/queue-events-listeners.md b/docs/gitbook/guide/nestjs/queue-events-listeners.md new file mode 100644 index 0000000000..bd28f56606 --- /dev/null +++ b/docs/gitbook/guide/nestjs/queue-events-listeners.md @@ -0,0 +1,49 @@ +# Queue Events Listeners + +To register a QueueEvents instance, you need to use **QueueEventsListener** decorator: + +```typescript +import { + QueueEventsListener, + QueueEventsHost, + OnQueueEvent, +} from '@nestjs/bullmq'; + +@QueueEventsListener('queueName') +export class TestQueueEvents extends QueueEventsHost { + @OnQueueEvent('completed') + onCompleted({ + jobId, + }: { + jobId: string; + returnvalue: string; + prev?: string; + }) { + // do some stuff + } +} +``` + +And then register it as a provider: + +```typescript +@Module({ + imports: [ + BullModule.registerQueue({ + name: 'queueName', + connection: { + host: '0.0.0.0', + port: 6380, + }, + }), + ], + providers: [TestQueueEvents], +}) +export class AppModule {} +``` + +## Read more: + +- 💡 [Queues Technique](https://docs.nestjs.com/techniques/queues) +- 💡 [Register Queue API Reference](https://nestjs.bullmq.pro/classes/BullModule.html#registerQueue) +- 💡 [Queue Events Listener API Reference](https://api.docs.bullmq.io/interfaces/v4.QueueEventsListener.html) From 264a81ca5f4e4f88c361d507312324b5f6c3225c Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 16 Aug 2023 17:58:11 +0200 Subject: [PATCH 286/322] fix(worker): abort rate-limit delay when closing worker --- src/classes/worker.ts | 15 +++++++++++---- src/utils.ts | 14 ++++++++++++-- tests/test_rate_limiter.ts | 11 +++++++++++ tsconfig.json | 2 +- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/classes/worker.ts b/src/classes/worker.ts index 649ad91588..c44fd527e8 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -166,6 +166,7 @@ export class Worker< private running = false; private blockUntil = 0; private limitUntil = 0; + private abortDelayController: AbortController | null = null; protected processFn: Processor; @@ -474,8 +475,9 @@ export class Worker< } } else { if (this.limitUntil) { - // TODO: We need to be able to break this delay when we are closing the worker. - await this.delay(this.limitUntil); + this.abortDelayController?.abort(); + this.abortDelayController = new AbortController(); + await this.delay(this.limitUntil, this.abortDelayController); } return this.moveToActive(token); } @@ -567,8 +569,11 @@ export class Worker< * * This function is exposed only for testing purposes. */ - async delay(milliseconds?: number): Promise { - await delay(milliseconds || DELAY_TIME_1); + async delay( + milliseconds?: number, + abortController?: AbortController, + ): Promise { + await delay(milliseconds || DELAY_TIME_1, abortController); } protected async nextJobFromJobData( @@ -742,6 +747,8 @@ export class Worker< this.closing = (async () => { this.emit('closing', 'closing queue'); + this.abortDelayController?.abort(); + const client = await this.blockingConnection.client; this.resume(); diff --git a/src/utils.ts b/src/utils.ts index 6a7fddc178..74e9277abb 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -46,9 +46,19 @@ export function array2obj(arr: string[]): Record { return obj; } -export function delay(ms: number): Promise { +export function delay( + ms: number, + abortController?: AbortController, +): Promise { return new Promise(resolve => { - setTimeout(() => resolve(), ms); + let timeout: ReturnType | undefined; + const callback = () => { + abortController?.signal.removeEventListener('abort', callback); + clearTimeout(timeout); + resolve(); + }; + timeout = setTimeout(callback, ms); + abortController?.signal.addEventListener('abort', callback); }); } diff --git a/tests/test_rate_limiter.ts b/tests/test_rate_limiter.ts index 700097f5d3..6e387864aa 100644 --- a/tests/test_rate_limiter.ts +++ b/tests/test_rate_limiter.ts @@ -113,6 +113,17 @@ describe('Rate Limiter', function () { await worker.close(); }); + it('should quickly close a worker even with slow rate-limit', async function () { + const limiter = { max: 1, duration: 60 * 1000 }; + const worker = new Worker(queueName, async () => {}, { + connection: { host: 'localhost' }, + limiter, + }); + await queue.add('test', 1); + await delay(500); + await worker.close(); + }); + describe('when queue is paused between rate limit', () => { it('should add active jobs to paused', async function () { this.timeout(20000); diff --git a/tsconfig.json b/tsconfig.json index 6167b27daf..1d744aba84 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,7 +20,7 @@ "paths": { "@src/*": ["src/*"] }, - "lib": ["esnext"] + "lib": ["esnext", "DOM"] }, "include": ["src"], "exclude": ["node_modules", "dist", "tests/*"] From c01cd452b368278dc76360df751837b18afd1e5c Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Wed, 16 Aug 2023 23:09:03 +0200 Subject: [PATCH 287/322] chore(worker): add AbortController polyfill --- package.json | 1 + src/classes/worker.ts | 4 ++++ src/utils.ts | 4 ++++ yarn.lock | 5 +++++ 4 files changed, 14 insertions(+) diff --git a/package.json b/package.json index 454cd785f6..839ea5f1e2 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "ioredis": "^5.3.2", "lodash": "^4.17.21", "msgpackr": "^1.6.2", + "node-abort-controller": "^3.1.1", "semver": "^7.5.4", "tslib": "^2.0.0", "uuid": "^9.0.0" diff --git a/src/classes/worker.ts b/src/classes/worker.ts index c44fd527e8..1f1a50cce2 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -2,6 +2,10 @@ import * as fs from 'fs'; import { Redis } from 'ioredis'; import * as path from 'path'; import { v4 } from 'uuid'; + +// Note: this Polyfill is only needed for Node versions < 15.4.0 +import { AbortController } from 'node-abort-controller'; + import { GetNextJobOptions, IoredisListener, diff --git a/src/utils.ts b/src/utils.ts index 74e9277abb..54c8de2a7f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,8 @@ import { Cluster, Redis } from 'ioredis'; + +// Note: this Polyfill is only needed for Node versions < 15.4.0 +import { AbortController } from 'node-abort-controller'; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore import { CONNECTION_CLOSED_ERROR_MSG } from 'ioredis/built/utils'; diff --git a/yarn.lock b/yarn.lock index 39a577002a..a5a1d3ba46 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5188,6 +5188,11 @@ nise@^5.1.4: just-extend "^4.0.2" path-to-regexp "^1.7.0" +node-abort-controller@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== + node-emoji@^1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" From 3ef306632b31820f604dc3c15b55d041a86d062f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 17 Aug 2023 13:39:18 +0000 Subject: [PATCH 288/322] chore(release): 4.7.3 [skip ci] ## [4.7.3](https://github.com/taskforcesh/bullmq/compare/v4.7.2...v4.7.3) (2023-08-17) ### Bug Fixes * **worker:** abort rate-limit delay when closing worker ([264a81c](https://github.com/taskforcesh/bullmq/commit/264a81ca5f4e4f88c361d507312324b5f6c3225c)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index c55299883a..496894f583 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [4.7.3](https://github.com/taskforcesh/bullmq/compare/v4.7.2...v4.7.3) (2023-08-17) + + +### Bug Fixes + +* **worker:** abort rate-limit delay when closing worker ([264a81c](https://github.com/taskforcesh/bullmq/commit/264a81ca5f4e4f88c361d507312324b5f6c3225c)) + ## [4.7.2](https://github.com/taskforcesh/bullmq/compare/v4.7.1...v4.7.2) (2023-08-12) diff --git a/package.json b/package.json index 839ea5f1e2..9a3500dcaa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.7.2", + "version": "4.7.3", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From dcb8e6a8e62346fac8574bd9aac56c5a25589a2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Rav=C3=A9?= Date: Sat, 19 Aug 2023 05:58:49 +0200 Subject: [PATCH 289/322] fix(python): job getReturnValue not returning returnvalue (#2143) --- python/bullmq/job.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bullmq/job.py b/python/bullmq/job.py index f536326ce2..425b864b07 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -226,6 +226,6 @@ def optsFromJSON(rawOpts: dict) -> dict: def getReturnValue(value: Any): try: - json.loads(value) + return json.loads(value) except Exception as err: return value From a982ff36f705fab147eedaf037e71e525f3b46fe Mon Sep 17 00:00:00 2001 From: semantic-release Date: Sat, 19 Aug 2023 04:00:35 +0000 Subject: [PATCH 290/322] 1.10.1 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 15 +++++++++++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 1d52b34b41..575d0a3688 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,21 @@ +## v1.10.1 (2023-08-19) +### Fix +* **python:** Job getReturnValue not returning returnvalue ([#2143](https://github.com/taskforcesh/bullmq/issues/2143)) ([`dcb8e6a`](https://github.com/taskforcesh/bullmq/commit/dcb8e6a8e62346fac8574bd9aac56c5a25589a2c)) +* **worker:** Abort rate-limit delay when closing worker ([`264a81c`](https://github.com/taskforcesh/bullmq/commit/264a81ca5f4e4f88c361d507312324b5f6c3225c)) +* **queue:** Throw error when name is not provided ([#2123](https://github.com/taskforcesh/bullmq/issues/2123)) ([`78fb0e2`](https://github.com/taskforcesh/bullmq/commit/78fb0e2a93cfa59a43a0fb337f857e78f1c6fcf4)) + +### Documentation +* **nestjs:** Add queue events listeners section ([`d82fdcc`](https://github.com/taskforcesh/bullmq/commit/d82fdcc2b1ff6909678b6b717449af8df2f10bd6)) +* **nestjs-bullmq-pro:** Add queue events listeners section ([#2138](https://github.com/taskforcesh/bullmq/issues/2138)) ([`75dd80b`](https://github.com/taskforcesh/bullmq/commit/75dd80b190963bd5401e8d076500eb8c65c897b8)) +* **changelog:** Update bullmq-pro to 6.3.3 ([#2137](https://github.com/taskforcesh/bullmq/issues/2137)) ([`9569509`](https://github.com/taskforcesh/bullmq/commit/9569509af9ee400d8744106b85bc7c329b866d1d)) +* **bullmq-pro:** Update changelog to version 6.3.0 ([#2111](https://github.com/taskforcesh/bullmq/issues/2111)) ([`e2cb45f`](https://github.com/taskforcesh/bullmq/commit/e2cb45f3e31167c1fd6b1e58b2a322273762c68f)) + +### Performance +* **rate-limit:** Get pttl only if needed ([#2129](https://github.com/taskforcesh/bullmq/issues/2129)) ([`12ce2f3`](https://github.com/taskforcesh/bullmq/commit/12ce2f3746626a81ea961961bb1a629077eed68a)) + ## v1.10.0 (2023-08-03) ### Feature * **redis-connection:** Add username option into redisOpts ([#2108](https://github.com/taskforcesh/bullmq/issues/2108)) ([`d27f33e`](https://github.com/taskforcesh/bullmq/commit/d27f33e997d30e6c0c7d4484bea338347c3fe67e)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 8be5e1570c..13fc57be01 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.10.0" +__version__ = "1.10.1" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index af598a146b..b8a25973ed 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.10.0" +version = "1.10.1" description='BullMQ for Python' readme="README.md" authors = [ From 3602c20ab80cbe0a0d3de66210a01ad119e1090b Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Sat, 19 Aug 2023 07:51:40 -0600 Subject: [PATCH 291/322] fix(sandbox): ignore extra params on processor (#2142) --- .github/workflows/test.yml | 2 +- src/classes/child-processor.ts | 22 +++++------ .../fixture_processor_with_extra_param.js | 13 +++++++ tests/test_sandboxed_process.ts | 37 +++++++++++++++++++ 4 files changed, 60 insertions(+), 14 deletions(-) create mode 100644 tests/fixtures/fixture_processor_with_extra_param.js diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8887a890d7..191f349c90 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -66,7 +66,7 @@ jobs: strategy: matrix: node-version: [lts/*, lts/-1, lts/-2, current] - redis-version: [7-alpine] + redis-version: [7.0-alpine] include: - node-version: 'lts/*' redis-version: 6-alpine diff --git a/src/classes/child-processor.ts b/src/classes/child-processor.ts index 645256f4cb..39c960c89e 100644 --- a/src/classes/child-processor.ts +++ b/src/classes/child-processor.ts @@ -1,4 +1,3 @@ -import { promisify } from 'util'; import { JobJson, ParentCommand, SandboxedJob } from '../interfaces'; import { errorToJSON } from '../utils'; @@ -44,18 +43,15 @@ export class ChildProcessor { }); } - if (processor.length > 1) { - processor = promisify(processor); - } else { - const origProcessor = processor; - processor = function (...args: any[]) { - try { - return Promise.resolve(origProcessor(...args)); - } catch (err) { - return Promise.reject(err); - } - }; - } + const origProcessor = processor; + processor = function (job: SandboxedJob, token?: string) { + try { + return Promise.resolve(origProcessor(job, token)); + } catch (err) { + return Promise.reject(err); + } + }; + this.processor = processor; this.status = ChildStatus.Idle; await this.send({ diff --git a/tests/fixtures/fixture_processor_with_extra_param.js b/tests/fixtures/fixture_processor_with_extra_param.js new file mode 100644 index 0000000000..d94f5970c8 --- /dev/null +++ b/tests/fixtures/fixture_processor_with_extra_param.js @@ -0,0 +1,13 @@ +/** + * A processor file to be used in tests. + * + */ +'use strict'; + +const delay = require('./delay'); + +module.exports = function (job, extraParam) { + return delay(500).then(() => { + return 42; + }); +}; diff --git a/tests/test_sandboxed_process.ts b/tests/test_sandboxed_process.ts index 5c721ed04d..3a964c89ab 100644 --- a/tests/test_sandboxed_process.ts +++ b/tests/test_sandboxed_process.ts @@ -73,6 +73,43 @@ function sandboxProcessTests( await worker.close(); }); + describe('when processor has more than 1 param', () => { + it('should ignore extra params, process and complete', async () => { + const processFile = + __dirname + '/fixtures/fixture_processor_with_extra_param.js'; + + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); + + const completing = new Promise((resolve, reject) => { + worker.on('completed', async (job: Job, value: any) => { + try { + expect(job.data).to.be.eql({ foo: 'bar' }); + expect(value).to.be.eql(42); + expect( + Object.keys(worker['childPool'].retained), + ).to.have.lengthOf(0); + expect(worker['childPool'].free[processFile]).to.have.lengthOf(1); + await worker.close(); + resolve(); + } catch (err) { + await worker.close(); + reject(err); + } + }); + }); + + await queue.add('test', { foo: 'bar' }); + + await completing; + + await worker.close(); + }); + }); + describe('when processor file is .cjs (CommonJS)', () => { it('processes and completes', async () => { const processFile = __dirname + '/fixtures/fixture_processor.cjs'; From 9253112d0e1a0d0fa8496cafaefd81c009f2bd16 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 19 Aug 2023 13:52:57 +0000 Subject: [PATCH 292/322] chore(release): 4.7.4 [skip ci] ## [4.7.4](https://github.com/taskforcesh/bullmq/compare/v4.7.3...v4.7.4) (2023-08-19) ### Bug Fixes * **python:** job getReturnValue not returning returnvalue ([#2143](https://github.com/taskforcesh/bullmq/issues/2143)) ([dcb8e6a](https://github.com/taskforcesh/bullmq/commit/dcb8e6a8e62346fac8574bd9aac56c5a25589a2c)) * **sandbox:** ignore extra params on processor ([#2142](https://github.com/taskforcesh/bullmq/issues/2142)) ([3602c20](https://github.com/taskforcesh/bullmq/commit/3602c20ab80cbe0a0d3de66210a01ad119e1090b)) --- docs/gitbook/changelog.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 496894f583..fb7aa7d08b 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,11 @@ +## [4.7.4](https://github.com/taskforcesh/bullmq/compare/v4.7.3...v4.7.4) (2023-08-19) + + +### Bug Fixes + +* **python:** job getReturnValue not returning returnvalue ([#2143](https://github.com/taskforcesh/bullmq/issues/2143)) ([dcb8e6a](https://github.com/taskforcesh/bullmq/commit/dcb8e6a8e62346fac8574bd9aac56c5a25589a2c)) +* **sandbox:** ignore extra params on processor ([#2142](https://github.com/taskforcesh/bullmq/issues/2142)) ([3602c20](https://github.com/taskforcesh/bullmq/commit/3602c20ab80cbe0a0d3de66210a01ad119e1090b)) + ## [4.7.3](https://github.com/taskforcesh/bullmq/compare/v4.7.2...v4.7.3) (2023-08-17) diff --git a/package.json b/package.json index 9a3500dcaa..3c4686af7e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.7.3", + "version": "4.7.4", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 4c4559b3c678313b3727c9781a6d3f963bcfda4e Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Sun, 20 Aug 2023 17:18:29 -0600 Subject: [PATCH 293/322] feat(sandbox): emulate moveToDelayed method (#2122) ref #2118 --- src/classes/child-processor.ts | 16 ++++-- src/classes/main-base.ts | 2 +- src/classes/sandbox.ts | 6 ++- src/classes/worker.ts | 2 +- src/interfaces/parent-command.ts | 1 + src/interfaces/sandboxed-job.ts | 3 +- .../fixture_processor_move_to_delayed.js | 21 ++++++++ ...te.js => fixture_processor_update_data.js} | 0 .../fixture_processor_with_extra_param.js | 2 +- tests/test_sandboxed_process.ts | 49 ++++++++++++++++++- 10 files changed, 92 insertions(+), 10 deletions(-) create mode 100644 tests/fixtures/fixture_processor_move_to_delayed.js rename tests/fixtures/{fixture_processor_update.js => fixture_processor_update_data.js} (100%) diff --git a/src/classes/child-processor.ts b/src/classes/child-processor.ts index 39c960c89e..97ca5dc94a 100644 --- a/src/classes/child-processor.ts +++ b/src/classes/child-processor.ts @@ -59,7 +59,7 @@ export class ChildProcessor { }); } - public async start(jobJson: JobJson): Promise { + public async start(jobJson: JobJson, token?: string): Promise { if (this.status !== ChildStatus.Idle) { return this.send({ cmd: ParentCommand.Error, @@ -70,7 +70,8 @@ export class ChildProcessor { this.currentJobPromise = (async () => { try { const job = wrapJob(jobJson, this.send); - const result = (await this.processor(job)) || {}; + //console.log('el token', token, job.id) + const result = (await this.processor(job, token)) || {}; await this.send({ cmd: ParentCommand.Completed, value: result, @@ -144,7 +145,16 @@ function wrapJob( }); }, /* - * Emulate the real job `update` function. + * Emulate the real job `moveToDelayed` function. + */ + moveToDelayed: async (timestamp: number, token?: string) => { + send({ + cmd: ParentCommand.MoveToDelayed, + value: { timestamp, token }, + }); + }, + /* + * Emulate the real job `updateData` function. */ updateData: async (data: any) => { send({ diff --git a/src/classes/main-base.ts b/src/classes/main-base.ts index f8441c1380..c83dc59b21 100644 --- a/src/classes/main-base.ts +++ b/src/classes/main-base.ts @@ -20,7 +20,7 @@ export default ( await childProcessor.init(msg.value); break; case ChildCommand.Start: - await childProcessor.start(msg.job); + await childProcessor.start(msg.job, msg?.token); break; case ChildCommand.Stop: break; diff --git a/src/classes/sandbox.ts b/src/classes/sandbox.ts index 93c6045630..b6c1af4af5 100644 --- a/src/classes/sandbox.ts +++ b/src/classes/sandbox.ts @@ -6,7 +6,7 @@ const sandbox = ( processFile: any, childPool: ChildPool, ) => { - return async function process(job: Job): Promise { + return async function process(job: Job, token?: string): Promise { const child = await childPool.retain(processFile); let msgHandler: any; let exitHandler: any; @@ -14,6 +14,7 @@ const sandbox = ( await child.send({ cmd: ChildCommand.Start, job: job.asJSONSandbox(), + token, }); const done: Promise = new Promise((resolve, reject) => { @@ -35,6 +36,9 @@ const sandbox = ( case ParentCommand.Log: await job.log(msg.value); break; + case ParentCommand.MoveToDelayed: + await job.moveToDelayed(msg.value?.timestamp, msg.value?.token); + break; case ParentCommand.Update: await job.updateData(msg.value); break; diff --git a/src/classes/worker.ts b/src/classes/worker.ts index 1f1a50cce2..1a11671c5a 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -651,7 +651,7 @@ export class Worker< if ( err instanceof DelayedError || - err.name == 'DelayedError' || + err.message == 'DelayedError' || err instanceof WaitingChildrenError || err.name == 'WaitingChildrenError' ) { diff --git a/src/interfaces/parent-command.ts b/src/interfaces/parent-command.ts index 04916c2800..d87a4e24f0 100644 --- a/src/interfaces/parent-command.ts +++ b/src/interfaces/parent-command.ts @@ -5,6 +5,7 @@ export enum ParentCommand { InitFailed, InitCompleted, Log, + MoveToDelayed, Progress, Update, } diff --git a/src/interfaces/sandboxed-job.ts b/src/interfaces/sandboxed-job.ts index 27c05ef2bc..b61b937b28 100644 --- a/src/interfaces/sandboxed-job.ts +++ b/src/interfaces/sandboxed-job.ts @@ -8,8 +8,9 @@ export interface SandboxedJob extends Omit { data: T; opts: JobsOptions; - updateProgress: (value: object | number) => Promise; + moveToDelayed: (timestamp: number, token?: string) => Promise; log: (row: any) => void; updateData: (data: any) => Promise; + updateProgress: (value: object | number) => Promise; returnValue: R; } diff --git a/tests/fixtures/fixture_processor_move_to_delayed.js b/tests/fixtures/fixture_processor_move_to_delayed.js new file mode 100644 index 0000000000..3a385f8c6d --- /dev/null +++ b/tests/fixtures/fixture_processor_move_to_delayed.js @@ -0,0 +1,21 @@ +/** + * A processor file to be used in tests. + * + */ +'use strict'; + +const { DelayedError } = require('../../dist/cjs/classes/delayed-error'); +const delay = require('./delay'); + +module.exports = function (job, token) { + if (job.attemptsMade == 1) { + return delay(250) + .then(() => { + job.moveToDelayed(2500, token); + return delay(500); + }) + .then(() => { + throw new DelayedError(); + }); + } +}; diff --git a/tests/fixtures/fixture_processor_update.js b/tests/fixtures/fixture_processor_update_data.js similarity index 100% rename from tests/fixtures/fixture_processor_update.js rename to tests/fixtures/fixture_processor_update_data.js diff --git a/tests/fixtures/fixture_processor_with_extra_param.js b/tests/fixtures/fixture_processor_with_extra_param.js index d94f5970c8..9a3c426145 100644 --- a/tests/fixtures/fixture_processor_with_extra_param.js +++ b/tests/fixtures/fixture_processor_with_extra_param.js @@ -6,7 +6,7 @@ const delay = require('./delay'); -module.exports = function (job, extraParam) { +module.exports = function (job, token, extraParam) { return delay(500).then(() => { return 42; }); diff --git a/tests/test_sandboxed_process.ts b/tests/test_sandboxed_process.ts index 3a964c89ab..5829e1a4c7 100644 --- a/tests/test_sandboxed_process.ts +++ b/tests/test_sandboxed_process.ts @@ -73,7 +73,7 @@ function sandboxProcessTests( await worker.close(); }); - describe('when processor has more than 1 param', () => { + describe('when processor has more than 2 params', () => { it('should ignore extra params, process and complete', async () => { const processFile = __dirname + '/fixtures/fixture_processor_with_extra_param.js'; @@ -429,7 +429,8 @@ function sandboxProcessTests( }); it('should process and update data', async () => { - const processFile = __dirname + '/fixtures/fixture_processor_update.js'; + const processFile = + __dirname + '/fixtures/fixture_processor_update_data.js'; const worker = new Worker(queueName, processFile, { connection, @@ -459,6 +460,50 @@ function sandboxProcessTests( await worker.close(); }); + it('should process and move to delayed', async () => { + const processFile = + __dirname + '/fixtures/fixture_processor_move_to_delayed.js'; + + const worker = new Worker(queueName, processFile, { + connection, + drainDelay: 1, + useWorkerThreads, + }); + + const delaying = new Promise((resolve, reject) => { + queueEvents.on('delayed', async ({ delay }) => { + try { + expect(Number(delay)).to.be.greaterThanOrEqual(2500); + expect(Object.keys(worker['childPool'].retained)).to.have.lengthOf( + 1, + ); + expect(worker['childPool'].getAllFree()).to.have.lengthOf(0); + resolve(); + } catch (err) { + reject(err); + } + }); + }); + + const completing = new Promise((resolve, reject) => { + worker.on('completed', async (job: Job) => { + expect(job.data.bar).to.be.equal('foo'); + resolve(); + }); + }); + + const job = await queue.add('test', { bar: 'foo' }); + + await delaying; + + const state = await queue.getJobState(job.id!); + + expect(state).to.be.equal('delayed'); + + await completing; + await worker.close(); + }); + describe('when env variables are provided', () => { it('shares env variables', async () => { const processFile = __dirname + '/fixtures/fixture_processor_env.js'; From 1020376dd7144ac432642e3ba19aa056e85b1baf Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 20 Aug 2023 23:19:51 +0000 Subject: [PATCH 294/322] chore(release): 4.8.0 [skip ci] # [4.8.0](https://github.com/taskforcesh/bullmq/compare/v4.7.4...v4.8.0) (2023-08-20) ### Features * **sandbox:** emulate moveToDelayed method ([#2122](https://github.com/taskforcesh/bullmq/issues/2122)) ref [#2118](https://github.com/taskforcesh/bullmq/issues/2118) ([4c4559b](https://github.com/taskforcesh/bullmq/commit/4c4559b3c678313b3727c9781a6d3f963bcfda4e)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index fb7aa7d08b..667c3d3e8e 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +# [4.8.0](https://github.com/taskforcesh/bullmq/compare/v4.7.4...v4.8.0) (2023-08-20) + + +### Features + +* **sandbox:** emulate moveToDelayed method ([#2122](https://github.com/taskforcesh/bullmq/issues/2122)) ref [#2118](https://github.com/taskforcesh/bullmq/issues/2118) ([4c4559b](https://github.com/taskforcesh/bullmq/commit/4c4559b3c678313b3727c9781a6d3f963bcfda4e)) + ## [4.7.4](https://github.com/taskforcesh/bullmq/compare/v4.7.3...v4.7.4) (2023-08-19) diff --git a/package.json b/package.json index 3c4686af7e..84be84e9ad 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.7.4", + "version": "4.8.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 6442b9f8d760931abcc5219b324f4b3704f5eadc Mon Sep 17 00:00:00 2001 From: Manuel Astudillo Date: Tue, 22 Aug 2023 22:07:16 +0000 Subject: [PATCH 295/322] GITBOOK-180: change request with no subject merged in GitBook --- docs/gitbook/guide/connections.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/gitbook/guide/connections.md b/docs/gitbook/guide/connections.md index 13894d9b95..2b8a142db8 100644 --- a/docs/gitbook/guide/connections.md +++ b/docs/gitbook/guide/connections.md @@ -15,7 +15,7 @@ const myQueue = new Queue('myqueue', { connection: { port: 32856 }}); -const myWorker = new Worker('myworker', async (job)=>{}, { connection: { +const myWorker = new Worker('myqueue', async (job)=>{}, { connection: { host: "myredis.taskforce.run", port: 32856 }}); @@ -29,7 +29,7 @@ const connection = new IORedis(); // Reuse the ioredis instance const myQueue = new Queue('myqueue', { connection }); -const myWorker = new Worker('myworker', async (job)=>{}, { connection }); +const myWorker = new Worker('myqueue', async (job)=>{}, { connection }); ``` Note that in the second example, even though the ioredis instance is being reused, the worker will create a duplicated connection that it needs internally to make blocking connections. Please read on the [ioredis](https://github.com/luin/ioredis/blob/master/API.md) documentation on how to properly create an instance of `IORedis.` @@ -41,10 +41,9 @@ When using ioredis connections, be carefull not to use the "keyPrefix" option in If you can afford many connections, by all means just use them. Redis connections have quite low overhead, so you should not need to care about reusing connections unless your service provider is imposing you hard limitations. {% hint style="danger" %} -Make sure that your redis instance has the setting +Make sure that your redis instance has the setting `maxmemory-policy=noeviction` in order to avoid automatic removal of keys which would cause unexpected errors in BullMQ {% endhint %} - From 51219fd8685ccf1703548dda49303cd03690a95e Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 25 Aug 2023 00:43:26 -0600 Subject: [PATCH 296/322] docs(rate-limit): add getRateLimitTtl usage (#2116) --- docs/gitbook/guide/rate-limiting.md | 22 ++++++++++++++++++++- docs/gitbook/patterns/stop-retrying-jobs.md | 3 ++- src/classes/queue-getters.ts | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/docs/gitbook/guide/rate-limiting.md b/docs/gitbook/guide/rate-limiting.md index 5bdb0b92db..20b03d20f1 100644 --- a/docs/gitbook/guide/rate-limiting.md +++ b/docs/gitbook/guide/rate-limiting.md @@ -74,7 +74,8 @@ const worker = new Worker( if (isRateLimited) { await worker.rateLimit(duration); // Do not forget to throw this special exception, - // since the job is no longer active after being rate limited. + // since we must differentiate this case from a failure + // in order to move the job to wait again. throw Worker.RateLimitError(); } }, @@ -84,6 +85,25 @@ const worker = new Worker( ); ``` +### Get Queue Rate Limit Ttl + +Sometimes is useful to know if our queue is rate limited. + +For this purpose, you can use the **getRateLimitTtl** method like this: + +```typescript +import { Queue } from 'bullmq'; + +const queue = new Queue('myQueue', { connection }); + +const ttl = await queue.getRateLimitTtl(); + +if (ttl > 0) { + console.log('Queue is rate limited'); +} +``` + ## Read more: - 💡 [Rate Limit API Reference](https://api.docs.bullmq.io/classes/v4.Worker.html#rateLimit) +- 💡 [Get Rate Limit Ttl API Reference](https://api.docs.bullmq.io/classes/v4.Queue.html#getRateLimitTtl) diff --git a/docs/gitbook/patterns/stop-retrying-jobs.md b/docs/gitbook/patterns/stop-retrying-jobs.md index 90dcc192e9..c64248347f 100644 --- a/docs/gitbook/patterns/stop-retrying-jobs.md +++ b/docs/gitbook/patterns/stop-retrying-jobs.md @@ -39,7 +39,8 @@ const worker = new Worker( throw new UnrecoverableError('Unrecoverable'); } // Do not forget to throw this special exception, - // since the job is no longer active after being rate limited. + // since we must differentiate this case from a failure + // in order to move the job to wait again. throw Worker.RateLimitError(); } }, diff --git a/src/classes/queue-getters.ts b/src/classes/queue-getters.ts index f3ac230876..b46b85c8ad 100644 --- a/src/classes/queue-getters.ts +++ b/src/classes/queue-getters.ts @@ -108,7 +108,7 @@ export class QueueGetters< /** * Returns the time to live for a rate limited key in milliseconds. * @returns -2 if the key does not exist. - * @returns -1 if the key exists but has no associated expire. + * -1 if the key exists but has no associated expire. * @see {@link https://redis.io/commands/pttl/} */ async getRateLimitTtl(): Promise { From 14a769b193d97576ff9b3f2a65de47463ba04ffd Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 25 Aug 2023 21:53:48 -0600 Subject: [PATCH 297/322] feat(python): add flow producer class (#2115) --- python/bullmq/__init__.py | 1 + python/bullmq/flow_producer.py | 123 +++++++++++++++++++++++++++ python/bullmq/job.py | 4 +- python/bullmq/queue.py | 4 +- python/bullmq/scripts.py | 21 ++++- python/bullmq/types/__init__.py | 2 +- python/bullmq/types/queue_options.py | 2 +- python/bullmq/utils.py | 2 +- python/run_tests.sh | 1 + python/tests/flow_tests.py | 81 ++++++++++++++++++ src/classes/scripts.ts | 2 +- 11 files changed, 231 insertions(+), 12 deletions(-) create mode 100644 python/bullmq/flow_producer.py create mode 100644 python/tests/flow_tests.py diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 13fc57be01..172608606b 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -9,5 +9,6 @@ from bullmq.queue import Queue from bullmq.job import Job +from bullmq.flow_producer import FlowProducer from bullmq.worker import Worker from bullmq.custom_errors import WaitingChildrenError diff --git a/python/bullmq/flow_producer.py b/python/bullmq/flow_producer.py new file mode 100644 index 0000000000..e6b562cb68 --- /dev/null +++ b/python/bullmq/flow_producer.py @@ -0,0 +1,123 @@ +from bullmq.redis_connection import RedisConnection +from bullmq.types import QueueBaseOptions +from bullmq.scripts import Scripts +from bullmq.job import Job +from bullmq.queue_keys import QueueKeys +from uuid import uuid4 + + +class MinimalQueue: + """ + Instantiate a MinimalQueue object + """ + + def __init__(self, name: str, queue_keys, redisConnection, opts: QueueBaseOptions = {}): + """ + Initialize a connection + """ + self.name = name + self.redisConnection = redisConnection + self.client = self.redisConnection.conn + self.opts = opts + self.prefix = opts.get("prefix", "bull"), + self.keys = queue_keys.getKeys(name) + self.qualifiedName = queue_keys.getQueueQualifiedName(name) + + +class FlowProducer: + """ + Instantiate a FlowProducer object + """ + + def __init__(self, redisOpts: dict | str = {}, opts: QueueBaseOptions = {}): + """ + Initialize a connection + """ + self.redisConnection = RedisConnection(redisOpts) + self.client = self.redisConnection.conn + self.opts: dict = opts + self.prefix = opts.get("prefix", "bull") + self.scripts = Scripts( + self.prefix, "__default__", self.redisConnection) + + def queueFromNode( self, node:dict, queue_keys, prefix: str): + return MinimalQueue(node.get("queueName"),queue_keys,self.redisConnection, {"prefix": prefix}) + + async def addChildren(self, nodes, parent, queues_opts, pipe): + children = [] + for node in nodes: + job = await self.addNode(node, parent, queues_opts, pipe) + children.append(job) + return children + + async def addNode(self, node: dict, parent: dict, queues_opts: dict, pipe): + prefix = node.get("prefix", self.prefix) + queue = self.queueFromNode(node, QueueKeys(prefix), prefix) + queue_name = node.get("queueName") + queue_opts = queues_opts and queues_opts.get(queue_name) + + jobs_opts = queue_opts.get('defaultJobOptions',{}) if queue_opts else {} + jobs_opts.update(node.get("opts") or {}) + job_id = (node.get("opts") or {}).get("jobId") or uuid4().hex + parent_opts = parent.get("parentOpts") + + jobs_opts.update({"parent": parent_opts}) + + job = Job( + queue=queue, + name=node.get("name"), + data=node.get("data"), + opts=jobs_opts, + job_id = job_id + ) + + node_children = node.get("children", []) + + self.scripts.resetQueueKeys(queue_name) + if len(node_children)>0: + parent_id = job_id + queue_keys_parent = QueueKeys(prefix or self.opts.get("prefix", "bull")) + wait_children_key = queue_keys_parent.toKey(queue_name, "waiting-children") + + await self.scripts.addParentJob( + job, + wait_children_key, + pipe + ) + + children = await self.addChildren( + node_children, + { + "parentOpts": { + "id": parent_id, + "queue": queue.qualifiedName + } + }, + queues_opts, + pipe + ) + return {"job": job, "children": children} + else: + await self.scripts.addJob( + job, + pipe + ) + + return {"job": job} + + async def add(self, flow: dict, opts: dict = {}): + parent_opts = flow.get("opts", {}).get("parent", None) + + result = None + async with self.redisConnection.conn.pipeline(transaction=True) as pipe: + jobs_tree = await self.addNode(flow, {"parentOpts": parent_opts},opts.get("queuesOptions"), pipe) + await pipe.execute() + result = jobs_tree + + return result + + def close(self): + """ + Close the flow instance. + """ + return self.redisConnection.close() diff --git a/python/bullmq/job.py b/python/bullmq/job.py index 425b864b07..d50251386b 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -28,9 +28,9 @@ class Job: A Job instance is also passed to the Worker's process function. """ - def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}): + def __init__(self, queue: Queue, name: str, data: Any, opts: JobOptions = {}, job_id: str = None): self.name = name - self.id = opts.get("jobId", None) + self.id = opts.get("jobId", None) or job_id self.progress = 0 self.timestamp = opts.get("timestamp", round(time.time() * 1000)) final_opts = {"attempts": 0, "delay": 0} diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 3a3bc6b31c..043501ad7f 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -1,6 +1,6 @@ import asyncio from bullmq.redis_connection import RedisConnection -from bullmq.types import QueueOptions, RetryJobsOptions, JobOptions +from bullmq.types import QueueBaseOptions, RetryJobsOptions, JobOptions from bullmq.utils import extract_result from bullmq.scripts import Scripts from bullmq.job import Job @@ -11,7 +11,7 @@ class Queue: Instantiate a Queue object """ - def __init__(self, name: str, redisOpts: dict | str = {}, opts: QueueOptions = {}): + def __init__(self, name: str, redisOpts: dict | str = {}, opts: QueueBaseOptions = {}): """ Initialize a connection """ diff --git a/python/bullmq/scripts.py b/python/bullmq/scripts.py index f93fdaf553..0c8274732c 100644 --- a/python/bullmq/scripts.py +++ b/python/bullmq/scripts.py @@ -57,6 +57,10 @@ def __init__(self, prefix: str, queueName: str, redisConnection: RedisConnection self.queue_keys = QueueKeys(prefix) self.keys = self.queue_keys.getKeys(queueName) + def resetQueueKeys(self, queue_name: str): + self.queueName = queue_name + self.keys = self.queue_keys.getKeys(queue_name) + def toKey(self, name: str): return self.queue_keys.toKey(self.queueName, name) @@ -74,7 +78,7 @@ def mapKey(key): return self.keys[key] return list(map(mapKey, keys)) - def addJobArgs(self, job: Job, waiting_children_key): + def addJobArgs(self, job: Job, waiting_children_key: str|None): # We are still lacking some arguments here: # ARGV[1] msgpacked arguments array # [9] repeat job key @@ -96,13 +100,21 @@ def addJobArgs(self, job: Job, waiting_children_key): return (keys,args) - def addJob(self, job: Job): + def addJob(self, job: Job, pipe = None): """ Add an item to the queue """ keys, args = self.addJobArgs(job, None) - return self.commands["addJob"](keys=keys, args=args) + return self.commands["addJob"](keys=keys, args=args, client = pipe) + + def addParentJob(self, job: Job, waiting_children_key: str, pipe = None): + """ + Add an item to the queue that is a parent + """ + keys, args = self.addJobArgs(job, waiting_children_key) + + return self.commands["addJob"](keys=keys, args=args, client=pipe) def moveToWaitingChildrenArgs(self, job_id, token, opts): keys = [self.toKey(job_id) + ":lock", @@ -367,6 +379,7 @@ async def updateProgress(self, job_id: str, progress): return None def moveToFinishedArgs(self, job: Job, val: Any, propVal: str, shouldRemove, target, token: str, opts: dict, fetchNext=True) -> list[Any] | None: + transformed_value = json.dumps(val, separators=(',', ':')) if type(val) == dict else val timestamp = round(time.time() * 1000) metricsKey = self.toKey('metrics:' + target) @@ -412,7 +425,7 @@ def getFailParentOnFailure(job: Job): "fpof": getFailParentOnFailure(job), }, use_bin_type=True) - args = [job.id, timestamp, propVal, val or "", target, "", + args = [job.id, timestamp, propVal, transformed_value or "", target, "", fetchNext and "fetch" or "", self.keys[''], packedOpts] return (keys, args) diff --git a/python/bullmq/types/__init__.py b/python/bullmq/types/__init__.py index 44910011be..241acd07b7 100644 --- a/python/bullmq/types/__init__.py +++ b/python/bullmq/types/__init__.py @@ -1,6 +1,6 @@ from bullmq.types.backoff_options import BackoffOptions from bullmq.types.keep_jobs import KeepJobs from bullmq.types.job_options import JobOptions -from bullmq.types.queue_options import QueueOptions +from bullmq.types.queue_options import QueueBaseOptions from bullmq.types.worker_options import WorkerOptions from bullmq.types.retry_job_options import RetryJobsOptions diff --git a/python/bullmq/types/queue_options.py b/python/bullmq/types/queue_options.py index 0b4fada9cb..25f806c12f 100644 --- a/python/bullmq/types/queue_options.py +++ b/python/bullmq/types/queue_options.py @@ -2,7 +2,7 @@ from typing import TypedDict -class QueueOptions(TypedDict, total=False): +class QueueBaseOptions(TypedDict, total=False): """ Options for the Queue class. """ diff --git a/python/bullmq/utils.py b/python/bullmq/utils.py index 11f8bc95e2..9040573337 100644 --- a/python/bullmq/utils.py +++ b/python/bullmq/utils.py @@ -14,6 +14,6 @@ def extract_result(job_task): print("ERROR:", e) traceback.print_exc() -def get_parent_key(opts:dict): +def get_parent_key(opts: dict): if opts: return f"{opts.get('queue')}:{opts.get('id')}" diff --git a/python/run_tests.sh b/python/run_tests.sh index 39bf006076..ab56ee49f8 100755 --- a/python/run_tests.sh +++ b/python/run_tests.sh @@ -1,6 +1,7 @@ #!/bin/bash redis-cli flushall python3 -m unittest -v tests.delay_tests +python3 -m unittest -v tests.flow_tests python3 -m unittest -v tests.job_tests python3 -m unittest -v tests.queue_tests python3 -m unittest -v tests.worker_tests \ No newline at end of file diff --git a/python/tests/flow_tests.py b/python/tests/flow_tests.py new file mode 100644 index 0000000000..1f12fcc726 --- /dev/null +++ b/python/tests/flow_tests.py @@ -0,0 +1,81 @@ +""" +Tests for flow producer class. + +https://bbc.github.io/cloudfit-public-docs/asyncio/testing.html +""" + +from asyncio import Future + +from bullmq import Queue, Job, FlowProducer, Worker +from uuid import uuid4 + +import unittest + +queue_name = f"__test_queue__{uuid4().hex}" + +class TestJob(unittest.IsolatedAsyncioTestCase): + + async def asyncSetUp(self): + print("Setting up test queue") + # Delete test queue + queue = Queue(queue_name) + await queue.pause() + await queue.obliterate() + await queue.close() + + async def test_should_process_children_before_parent(self): + child_job_name = 'child-job' + children_data = [ + {"bar": 'something'}, + {"baz": 'something'}, + {"qux": 'something'} + ] + parent_queue_name = f"__test_parent_queue__{uuid4().hex}" + + processing_children = Future() + + processed_children = 0 + async def process1(job: Job, token: str): + nonlocal processed_children + processed_children+=1 + if processed_children == len(children_data): + processing_children.set_result(None) + return children_data[job.data.get("idx")] + + processing_parent = Future() + + async def process2(job: Job, token: str): + processing_parent.set_result(None) + return 1 + + parent_worker = Worker(parent_queue_name, process2) + children_worker = Worker(queue_name, process1) + + flow = FlowProducer() + tree = await flow.add( + { + "name": 'parent-job', + "queueName": parent_queue_name, + "data": {}, + "children": [ + {"name": child_job_name, "data": {"idx": 0, "foo": 'bar'}, "queueName": queue_name}, + {"name": child_job_name, "data": {"idx": 1, "foo": 'baz'}, "queueName": queue_name}, + {"name": child_job_name, "data": {"idx": 2, "foo": 'qux'}, "queueName": queue_name} + ] + } + ) + + await processing_children + await processing_parent + + await parent_worker.close() + await children_worker.close() + await flow.close() + + parent_queue = Queue(parent_queue_name) + await parent_queue.pause() + await parent_queue.obliterate() + await parent_queue.close() + +if __name__ == '__main__': + unittest.main() diff --git a/src/classes/scripts.ts b/src/classes/scripts.ts index 50a8cf0f91..89da747223 100644 --- a/src/classes/scripts.ts +++ b/src/classes/scripts.ts @@ -273,7 +273,7 @@ export class Scripts { propVal, typeof val === 'undefined' ? 'null' : val, target, - JSON.stringify({ jobId: job.id, val: val }), + JSON.stringify({ jobId: job.id, val: val }), // TODO: verify if it is used !fetchNext || this.queue.closing ? 0 : 1, queueKeys[''], pack({ From e640e5a95fd988a927aeef095b96cde41df6be63 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Sat, 26 Aug 2023 03:55:25 +0000 Subject: [PATCH 298/322] 1.11.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 11 +++++++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 575d0a3688..73ebd770d2 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,17 @@ +## v1.11.0 (2023-08-26) +### Feature +* **python:** Add flow producer class ([#2115](https://github.com/taskforcesh/bullmq/issues/2115)) ([`14a769b`](https://github.com/taskforcesh/bullmq/commit/14a769b193d97576ff9b3f2a65de47463ba04ffd)) +* **sandbox:** Emulate moveToDelayed method (#2122) ref #2118 ([`4c4559b`](https://github.com/taskforcesh/bullmq/commit/4c4559b3c678313b3727c9781a6d3f963bcfda4e)) + +### Fix +* **sandbox:** Ignore extra params on processor ([#2142](https://github.com/taskforcesh/bullmq/issues/2142)) ([`3602c20`](https://github.com/taskforcesh/bullmq/commit/3602c20ab80cbe0a0d3de66210a01ad119e1090b)) + +### Documentation +* **rate-limit:** Add getRateLimitTtl usage ([#2116](https://github.com/taskforcesh/bullmq/issues/2116)) ([`51219fd`](https://github.com/taskforcesh/bullmq/commit/51219fd8685ccf1703548dda49303cd03690a95e)) + ## v1.10.1 (2023-08-19) ### Fix * **python:** Job getReturnValue not returning returnvalue ([#2143](https://github.com/taskforcesh/bullmq/issues/2143)) ([`dcb8e6a`](https://github.com/taskforcesh/bullmq/commit/dcb8e6a8e62346fac8574bd9aac56c5a25589a2c)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 172608606b..7f0dc93926 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.10.1" +__version__ = "1.11.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index b8a25973ed..c9f6586d8d 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.10.1" +version = "1.11.0" description='BullMQ for Python' readme="README.md" authors = [ From 1b0ff8ef51e27df906a93dae317534e2c2e9ccb3 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 29 Aug 2023 00:34:39 -0600 Subject: [PATCH 299/322] docs(typedoc): change defaultValue tag styling (#2160) --- docs/gitbook/changelog.md | 1 - docs/gitbook/python/changelog.md | 10 +--------- package.json | 2 +- yarn.lock | 12 ++++++------ 4 files changed, 8 insertions(+), 17 deletions(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 667c3d3e8e..7240ec8299 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -10,7 +10,6 @@ ### Bug Fixes -* **python:** job getReturnValue not returning returnvalue ([#2143](https://github.com/taskforcesh/bullmq/issues/2143)) ([dcb8e6a](https://github.com/taskforcesh/bullmq/commit/dcb8e6a8e62346fac8574bd9aac56c5a25589a2c)) * **sandbox:** ignore extra params on processor ([#2142](https://github.com/taskforcesh/bullmq/issues/2142)) ([3602c20](https://github.com/taskforcesh/bullmq/commit/3602c20ab80cbe0a0d3de66210a01ad119e1090b)) ## [4.7.3](https://github.com/taskforcesh/bullmq/compare/v4.7.2...v4.7.3) (2023-08-17) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 73ebd770d2..3217dc4078 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -15,15 +15,7 @@ ## v1.10.1 (2023-08-19) ### Fix -* **python:** Job getReturnValue not returning returnvalue ([#2143](https://github.com/taskforcesh/bullmq/issues/2143)) ([`dcb8e6a`](https://github.com/taskforcesh/bullmq/commit/dcb8e6a8e62346fac8574bd9aac56c5a25589a2c)) -* **worker:** Abort rate-limit delay when closing worker ([`264a81c`](https://github.com/taskforcesh/bullmq/commit/264a81ca5f4e4f88c361d507312324b5f6c3225c)) -* **queue:** Throw error when name is not provided ([#2123](https://github.com/taskforcesh/bullmq/issues/2123)) ([`78fb0e2`](https://github.com/taskforcesh/bullmq/commit/78fb0e2a93cfa59a43a0fb337f857e78f1c6fcf4)) - -### Documentation -* **nestjs:** Add queue events listeners section ([`d82fdcc`](https://github.com/taskforcesh/bullmq/commit/d82fdcc2b1ff6909678b6b717449af8df2f10bd6)) -* **nestjs-bullmq-pro:** Add queue events listeners section ([#2138](https://github.com/taskforcesh/bullmq/issues/2138)) ([`75dd80b`](https://github.com/taskforcesh/bullmq/commit/75dd80b190963bd5401e8d076500eb8c65c897b8)) -* **changelog:** Update bullmq-pro to 6.3.3 ([#2137](https://github.com/taskforcesh/bullmq/issues/2137)) ([`9569509`](https://github.com/taskforcesh/bullmq/commit/9569509af9ee400d8744106b85bc7c329b866d1d)) -* **bullmq-pro:** Update changelog to version 6.3.0 ([#2111](https://github.com/taskforcesh/bullmq/issues/2111)) ([`e2cb45f`](https://github.com/taskforcesh/bullmq/commit/e2cb45f3e31167c1fd6b1e58b2a322273762c68f)) +* **job:** Job getReturnValue not returning returnvalue ([#2143](https://github.com/taskforcesh/bullmq/issues/2143)) ([`dcb8e6a`](https://github.com/taskforcesh/bullmq/commit/dcb8e6a8e62346fac8574bd9aac56c5a25589a2c)) ### Performance * **rate-limit:** Get pttl only if needed ([#2129](https://github.com/taskforcesh/bullmq/issues/2129)) ([`12ce2f3`](https://github.com/taskforcesh/bullmq/commit/12ce2f3746626a81ea961961bb1a629077eed68a)) diff --git a/package.json b/package.json index 84be84e9ad..611d1aaab9 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "test-console": "^2.0.0", "ts-mocha": "^10.0.0", "ts-node": "^10.7.0", - "typedoc": "^0.24.0", + "typedoc": "^0.25.0", "typescript": "^4.7.4" }, "nyc": { diff --git a/yarn.lock b/yarn.lock index a5a1d3ba46..50495f9fbc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4915,7 +4915,7 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0: +minimatch@^9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -7337,14 +7337,14 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedoc@^0.24.0: - version "0.24.8" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.24.8.tgz#cce9f47ba6a8d52389f5e583716a2b3b4335b63e" - integrity sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w== +typedoc@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.0.tgz#287f83d01c1c2186766884f4e04d698820d68115" + integrity sha512-FvCYWhO1n5jACE0C32qg6b3dSfQ8f2VzExnnRboowHtqUD6ARzM2r8YJeZFYXhcm2hI4C2oCRDgNPk/yaQUN9g== dependencies: lunr "^2.3.9" marked "^4.3.0" - minimatch "^9.0.0" + minimatch "^9.0.3" shiki "^0.14.1" typescript@^3.9.10, typescript@^3.9.5, typescript@^3.9.7: From 555dd44a0190f4957e43f083e2f59d7f58b90ac9 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 30 Aug 2023 21:27:52 -0600 Subject: [PATCH 300/322] feat(python): add addBulk method in queue class (#2161) --- python/bullmq/queue.py | 38 +++++++++++++++++++++ python/run_tests.sh | 1 + python/tests/bulk_tests.py | 70 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 python/tests/bulk_tests.py diff --git a/python/bullmq/queue.py b/python/bullmq/queue.py index 043501ad7f..aad5f491a5 100644 --- a/python/bullmq/queue.py +++ b/python/bullmq/queue.py @@ -19,6 +19,7 @@ def __init__(self, name: str, redisOpts: dict | str = {}, opts: QueueBaseOptions self.redisConnection = RedisConnection(redisOpts) self.client = self.redisConnection.conn self.opts = opts + self.jobsOpts = opts.get("defaultJobOptions", {}) self.prefix = opts.get("prefix", "bull") self.scripts = Scripts( self.prefix, name, self.redisConnection) @@ -41,6 +42,43 @@ async def add(self, name: str, data, opts: JobOptions = {}): job.id = job_id return job + async def addBulk(self, jobs: list[dict[str,dict | str]]): + """ + Adds an array of jobs to the queue. This method may be faster than adding + one job at a time in a sequence + """ + jobs_data = [] + for job in jobs: + opts = {} + opts.update(self.jobsOpts) + opts.update(job.get("opts", {})) + + jobs_data.append({ + "name": job.get("name"), + "data": job.get("data"), + "opts": opts + }) + + result = [] + async with self.redisConnection.conn.pipeline(transaction=True) as pipe: + for job_data in jobs_data: + current_job_opts = job_data.get("opts", {}) + job = Job( + queue=self, + name=job_data.get("name"), + data=job_data.get("data"), + opts=current_job_opts, + job_id = current_job_opts.get("jobId") + ) + job_id = await self.scripts.addJob(job, pipe) + job.id = job_id + result.append(job) + job_ids = await pipe.execute() + for index, job_id in enumerate(job_ids): + result[index].id = job_id + + return result + def pause(self): """ Pauses the processing of this queue globally. diff --git a/python/run_tests.sh b/python/run_tests.sh index ab56ee49f8..90720218ac 100755 --- a/python/run_tests.sh +++ b/python/run_tests.sh @@ -1,5 +1,6 @@ #!/bin/bash redis-cli flushall +python3 -m unittest -v tests.bulk_tests python3 -m unittest -v tests.delay_tests python3 -m unittest -v tests.flow_tests python3 -m unittest -v tests.job_tests diff --git a/python/tests/bulk_tests.py b/python/tests/bulk_tests.py new file mode 100644 index 0000000000..746707ed5d --- /dev/null +++ b/python/tests/bulk_tests.py @@ -0,0 +1,70 @@ +""" +Tests for add bulk jobs. + +https://bbc.github.io/cloudfit-public-docs/asyncio/testing.html +""" + +import unittest + +from asyncio import Future +from bullmq import Queue, Job, Worker +from uuid import uuid4 + +queueName = f"__test_queue__{uuid4().hex}" + +class TestJob(unittest.IsolatedAsyncioTestCase): + + async def asyncSetUp(self): + print("Setting up test queue") + # Delete test queue + queue = Queue(queueName) + await queue.pause() + await queue.obliterate() + await queue.close() + + async def test_process_jobs(self): + name = "test" + queue = Queue(queueName) + + async def process(job: Job, token: str): + if job.data.get("idx") == 0: + self.assertEqual(job.data.get("foo"), "bar") + else: + self.assertEqual(job.data.get("idx"), 1) + self.assertEqual(job.data.get("foo"), "baz") + return "done" + + worker = Worker(queueName, process) + + completed_events = Future() + + job_count = 1 + def completing(job: Job, result): + nonlocal job_count + if job_count == 2: + completed_events.set_result(None) + job_count += 1 + + worker.on("completed", completing) + + jobs = await queue.addBulk( + [ + {"name": name, "data": {"idx": 0, "foo": "bar"}}, + {"name": name, "data": {"idx": 1, "foo": "baz"}} + ] + ) + + await completed_events + + self.assertEqual(len(jobs), 2) + + self.assertIsNotNone(jobs[0].id) + self.assertEqual(jobs[0].data.get("foo"),"bar") + self.assertIsNotNone(jobs[1].id) + self.assertEqual(jobs[1].data.get("foo"),"baz") + + await queue.close() + await worker.close() + +if __name__ == '__main__': + unittest.main() From ff66290a0f6773300881f94ec6eb5fafe5c7ca24 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Thu, 31 Aug 2023 03:29:19 +0000 Subject: [PATCH 301/322] 1.12.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 7 +++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 3217dc4078..5be615488b 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,13 @@ +## v1.12.0 (2023-08-31) +### Feature +* **python:** Add addBulk method in queue class ([#2161](https://github.com/taskforcesh/bullmq/issues/2161)) ([`555dd44`](https://github.com/taskforcesh/bullmq/commit/555dd44a0190f4957e43f083e2f59d7f58b90ac9)) + +### Documentation +* **typedoc:** Change defaultValue tag styling ([#2160](https://github.com/taskforcesh/bullmq/issues/2160)) ([`1b0ff8e`](https://github.com/taskforcesh/bullmq/commit/1b0ff8ef51e27df906a93dae317534e2c2e9ccb3)) + ## v1.11.0 (2023-08-26) ### Feature * **python:** Add flow producer class ([#2115](https://github.com/taskforcesh/bullmq/issues/2115)) ([`14a769b`](https://github.com/taskforcesh/bullmq/commit/14a769b193d97576ff9b3f2a65de47463ba04ffd)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 7f0dc93926..dff3d2f925 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.11.0" +__version__ = "1.12.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index c9f6586d8d..80a4fcec6e 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.11.0" +version = "1.12.0" description='BullMQ for Python' readme="README.md" authors = [ From 96f84b7efb4d187ddeab3169c833c35e7786e608 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 31 Aug 2023 20:12:24 -0600 Subject: [PATCH 302/322] docs(python): add flowProducer usage (#2163) --- docs/gitbook/guide/flows/README.md | 86 ++++++++++++++++++++++- docs/gitbook/guide/queues/adding-bulks.md | 23 ++++++ 2 files changed, 107 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/guide/flows/README.md b/docs/gitbook/guide/flows/README.md index 5649b94e95..f7feadafd4 100644 --- a/docs/gitbook/guide/flows/README.md +++ b/docs/gitbook/guide/flows/README.md @@ -27,6 +27,9 @@ interface FlowJob { So we can add a flow like this one: +{% tabs %} +{% tab title="TypeScript" %} + ```typescript import { FlowProducer } from 'bullmq'; @@ -45,6 +48,31 @@ const flow = await flowProducer.add({ }); ``` +{% endtab %} + +{% tab title="Python" %} + +```python +from bullmq import FlowProducer + +# A FlowProducer constructor takes an optional "connection" +# object otherwise it connects to a local redis instance. +flowProducer = FlowProducer() + +flow = await flowProducer.add({ + "name": "renovate-interior", + "queueName": "renovate", + "children": [ + { "name": "paint", "data": { "place": "ceiling" }, "queueName": "steps" }, + { "name": "paint", "data": { "place": "walls" }, "queueName": "steps" }, + { "name": "fix", "data": { "place": "floor" }, "queueName": "steps" }, + ], +}) +``` + +{% endtab %} +{% endtabs %} + The above code will add atomically 4 jobs, one to the "renovate" queue and 3 to the "steps" queue. When the 3 jobs in the "steps" queue are completed, the parent job in the "renovate" queue will be processed as a regular job. The above call will return instances for all the jobs added to the queue. @@ -55,10 +83,13 @@ Note that the parent queue does not need to be the same queue as the one used fo When the parent job is processed it is possible to access the results generated by its child jobs. For example, lets assume the following worker for the child jobs: +{% tabs %} +{% tab title="TypeScript" %} + ```typescript import { Worker } from 'bullmq'; -const stepsQueue = new Worker('steps', async job => { +const stepsWorker = new Worker('steps', async job => { await performStep(job.data); if (job.name === 'paint') { @@ -69,12 +100,32 @@ const stepsQueue = new Worker('steps', async job => { }); ``` +{% endtab %} + +{% tab title="Python" %} + +```python +from bullmq import Worker + +async def process(job: Job, token: str): + await performStep(job.data) + if job.name == 'paint': + return 2500 + elif job.name == 'fix': + return 1750 + +stepsWorker = Worker("steps", process, {"connection": connection}) +``` + +{% endtab %} +{% endtabs %} + We can implement a parent worker that sums the costs of the children's jobs using the "_getChildrenValues_" method. This method returns an object with job keys as keys and the result of that given job as a value: ```typescript import { Worker } from 'bullmq'; -const stepsQueue = new Worker('renovate', async job => { +const renovateWorker = new Worker('renovate', async job => { const childrenValues = await job.getChildrenValues(); const totalCosts = Object.values(childrenValues).reduce( @@ -88,6 +139,9 @@ const stepsQueue = new Worker('renovate', async job => { It is possible to add as deep job hierarchies as needed, see the following example where jobs are depending on each other, this allows serial execution of jobs: +{% tabs %} +{% tab title="TypeScript" %} + ```typescript import { FlowProducer } from 'bullmq'; const flowProducer = new FlowProducer(); @@ -108,6 +162,34 @@ const chain = await flowProducer.add({ }); ``` +{% endtab %} + +{% tab title="Python" %} + +```python +from bullmq import FlowProducer + +flowProducer = FlowProducer() + +queueName = 'assembly-line' +chain = await flowProducer.add({ + "name": "car", + "data": { "step": "engine" }, + "queueName": queueName, + "children": [ + { + "name": "car", + "data": { "step": "wheels" }, + "queueName": queueName, + "children": [{ "name": "car", "data": { "step": "chassis" }, "queueName": queueName }], + }, + ], +}) +``` + +{% endtab %} +{% endtabs %} + In this case one job will be processed after the previous one has been completed. {% hint style="info" %} diff --git a/docs/gitbook/guide/queues/adding-bulks.md b/docs/gitbook/guide/queues/adding-bulks.md index dd4ce72844..86074956fb 100644 --- a/docs/gitbook/guide/queues/adding-bulks.md +++ b/docs/gitbook/guide/queues/adding-bulks.md @@ -2,11 +2,15 @@ Sometimes it is necessary to add a complete bulk of jobs atomically. For example, there could be a requirement that all the jobs must be placed in the queue or none of them. Also, adding a bulk of jobs can be faster since it reduces the number of roundtrips to Redis: +{% tabs %} +{% tab title="TypeScript" %} + ```typescript import { Queue } from 'bullmq'; const queue = new Queue('paint'); +const name = 'jobName'; const jobs = await queue.addBulk([ { name, data: { paint: 'car' } }, { name, data: { paint: 'house' } }, @@ -14,6 +18,25 @@ const jobs = await queue.addBulk([ ]); ``` +{% endtab %} + +{% tab title="Python" %} + +```python +from bullmq import Queue + +queue = Queue("paint") + +jobs = await queue.addBulk([ + { "name": "jobName", "data": { "paint": "car" } }, + { "name": "jobName", "data": { "paint": "house" } }, + { "name": "jobName", "data": { "paint": "boat" } } +]) +``` + +{% endtab %} +{% endtabs %} + This call can only succeed or fail, and all or none of the jobs will be added. ## Read more: From 5acb79f063ba539743d0e9b508e5403e453ee094 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 1 Sep 2023 23:18:10 -0600 Subject: [PATCH 303/322] test(redis): fix test case when v7.2.0 (#2146) --- .github/workflows/test.yml | 2 +- src/classes/job.ts | 7 ++++- src/classes/worker.ts | 8 +++--- tests/test_obliterate.ts | 2 +- tests/test_worker.ts | 54 ++++++++++++++++++++++++++++++++++---- 5 files changed, 61 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 191f349c90..8887a890d7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -66,7 +66,7 @@ jobs: strategy: matrix: node-version: [lts/*, lts/-1, lts/-2, current] - redis-version: [7.0-alpine] + redis-version: [7-alpine] include: - node-version: 'lts/*' redis-version: 6-alpine diff --git a/src/classes/job.ts b/src/classes/job.ts index 8e6c164a8a..54a7e49b43 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -775,7 +775,12 @@ export class Job< /** * Get children job keys if this job is a parent and has children. - * + * @remarks + * Count options before Redis v7.2 works as expected with any quantity of entries + * on processed/unprocessed dependencies, since v7.2 you must consider that count + * won't have any effect until processed/unprocessed dependencies have a length + * greater than 127 + * @see https://redis.io/docs/management/optimization/memory-optimization/#redis--72 * @returns dependencies separated by processed and unprocessed. */ async getDependencies(opts: DependenciesOpts = {}): Promise<{ diff --git a/src/classes/worker.ts b/src/classes/worker.ts index 1a11671c5a..5ddcda94f4 100644 --- a/src/classes/worker.ts +++ b/src/classes/worker.ts @@ -211,10 +211,6 @@ export class Worker< Connection, ); - if (this.opts.stalledInterval <= 0) { - throw new Error('stalledInterval must be greater than 0'); - } - this.opts = { drainDelay: 5, concurrency: 1, @@ -226,6 +222,10 @@ export class Worker< ...this.opts, }; + if (this.opts.stalledInterval <= 0) { + throw new Error('stalledInterval must be greater than 0'); + } + this.concurrency = this.opts.concurrency; this.opts.lockRenewTime = diff --git a/tests/test_obliterate.ts b/tests/test_obliterate.ts index 85c794b88b..90716c241a 100644 --- a/tests/test_obliterate.ts +++ b/tests/test_obliterate.ts @@ -401,7 +401,7 @@ describe('Obliterate', function () { await queue.obliterate({ force: true }); - const { logs } = await queue.getJobLogs(job.id); + const { logs } = await queue.getJobLogs(job.id!); expect(logs).to.have.length(0); }); diff --git a/tests/test_worker.ts b/tests/test_worker.ts index b8557ed368..c63418b4e4 100644 --- a/tests/test_worker.ts +++ b/tests/test_worker.ts @@ -15,7 +15,11 @@ import { } from '../src/classes'; import { KeepJobs, MinimalJob } from '../src/interfaces'; import { JobsOptions } from '../src/types'; -import { delay, removeAllQueueData } from '../src/utils'; +import { + delay, + isRedisVersionLowerThan, + removeAllQueueData, +} from '../src/utils'; describe('workers', function () { const sandbox = sinon.createSandbox(); @@ -1573,7 +1577,7 @@ describe('workers', function () { }); it('stalled interval cannot be zero', function () { - this.timeout(10000); + this.timeout(8000); expect( () => new Worker(queueName, async () => {}, { @@ -3371,7 +3375,7 @@ describe('workers', function () { { idx: index, ...value }, { parent: { - id: parent.id, + id: parent.id!, queue: 'bull:' + parentQueueName, }, }, @@ -3387,7 +3391,13 @@ describe('workers', function () { }, }); - expect(unprocessed1.length).to.be.greaterThanOrEqual(50); + if (isRedisVersionLowerThan(childrenWorker.redisVersion, '7.2.0')) { + expect(unprocessed1!.length).to.be.greaterThanOrEqual(50); + expect(nextCursor1).to.not.be.equal(0); + } else { + expect(unprocessed1!.length).to.be.equal(65); + expect(nextCursor1).to.be.equal(0); + } const { nextUnprocessedCursor: nextCursor2, unprocessed: unprocessed2 } = await parent.getDependencies({ @@ -3397,9 +3407,43 @@ describe('workers', function () { }, }); - expect(unprocessed2.length).to.be.lessThanOrEqual(15); + if (isRedisVersionLowerThan(childrenWorker.redisVersion, '7.2.0')) { + expect(unprocessed2!.length).to.be.lessThanOrEqual(15); + expect(nextCursor2).to.be.equal(0); + } else { + expect(unprocessed2!.length).to.be.equal(65); + expect(nextCursor2).to.be.equal(0); + } + expect(nextCursor2).to.be.equal(0); + await Promise.all( + Array.from(Array(64).keys()).map((index: number) => { + return Job.create( + queue, + `child${index}`, + { idx: index, ...value }, + { + parent: { + id: parent.id!, + queue: 'bull:' + parentQueueName, + }, + }, + ); + }), + ); + + const { nextUnprocessedCursor: nextCursor3, unprocessed: unprocessed3 } = + await parent.getDependencies({ + unprocessed: { + cursor: 0, + count: 50, + }, + }); + + expect(unprocessed3!.length).to.be.greaterThanOrEqual(50); + expect(nextCursor3).to.not.be.equal(0); + await childrenWorker.close(); await parentWorker.close(); From b557fa65dc85f6ab947fc0ebb7d5c17c6db5d581 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 4 Sep 2023 21:55:10 -0600 Subject: [PATCH 304/322] ci(semantic-release): ignore python commits (#2167) --- package.json | 66 +++++++++++++++++++++++++++++++++++++++++++++++++--- yarn.lock | 7 ++++++ 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 611d1aaab9..c435f9fed3 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "commitizen": "^4.2.5", + "conventional-changelog-conventionalcommits": "^7.0.1", "copyfiles": "^2.4.1", "coveralls": "^3.1.1", "eslint": "^7.32.0", @@ -172,12 +173,71 @@ [ "@semantic-release/commit-analyzer", { + "preset": "conventionalcommits", "releaseRules": [ { - "scope": "python*", - "release": false + "scope": "python", + "hidden": true + }, + { + "type": "feat", + "section": "Features" + }, + { + "type": "feature", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "perf", + "section": "Performance Improvements" + }, + { + "type": "revert", + "section": "Reverts" + }, + { + "type": "docs", + "section": "Documentation", + "hidden": true + }, + { + "type": "style", + "section": "Styles", + "hidden": true + }, + { + "type": "chore", + "section": "Miscellaneous Chores", + "hidden": true + }, + { + "type": "refactor", + "section": "Code Refactoring", + "hidden": true + }, + { + "type": "test", + "section": "Tests", + "hidden": true + }, + { + "type": "build", + "section": "Build System", + "hidden": true + }, + { + "type": "ci", + "section": "Continuous Integration", + "hidden": true } - ] + ], + "presetConfig": { + "ignoreCommits": "python" + } } ], "@semantic-release/release-notes-generator", diff --git a/yarn.lock b/yarn.lock index 50495f9fbc..7b6d45faa7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2057,6 +2057,13 @@ conventional-changelog-conventionalcommits@^5.0.0: lodash "^4.17.15" q "^1.5.1" +conventional-changelog-conventionalcommits@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.1.tgz#b47e7d1b3a0c1e370c4c27eea741f06729913f5f" + integrity sha512-VfFJxBmi+LYXeb4pIfZGbuaFCpWZh0qXbUAKP/s6B8tigV6R4D8j5PDlTtMMWawa7+DcNySVoF7kPWz0EMYuCQ== + dependencies: + compare-func "^2.0.0" + conventional-changelog-writer@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" From bab0c6168f22af4e6aa7e9c47ecaad226d8fbf1d Mon Sep 17 00:00:00 2001 From: roggervalf Date: Mon, 4 Sep 2023 23:31:20 -0500 Subject: [PATCH 305/322] docs(auto-removal): clarify removal regardless of job names --- docs/gitbook/guide/queues/auto-removal-of-jobs.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/gitbook/guide/queues/auto-removal-of-jobs.md b/docs/gitbook/guide/queues/auto-removal-of-jobs.md index 6d67432d88..b40bf54a39 100644 --- a/docs/gitbook/guide/queues/auto-removal-of-jobs.md +++ b/docs/gitbook/guide/queues/auto-removal-of-jobs.md @@ -16,6 +16,10 @@ await myQueue.add( ); ``` +{% hint style="warning" %} +Jobs will be deleted regardless of their names. +{% endhint %} + ### Keep a certain number of jobs It is also possible to specify a maximum number of jobs to keep. A good practice is to keep a handful of completed jobs and a much larger value of failed jobs: From 914820f720cbc48b49f4bd1c46d148eb2bb5b79c Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 5 Sep 2023 08:17:04 -0600 Subject: [PATCH 306/322] feat(connection): provide skipVersionCheck option for shared connections (#2149) ref #2148 --- src/classes/queue-base.ts | 1 + src/classes/redis-connection.ts | 8 ++++++-- src/interfaces/queue-options.ts | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/classes/queue-base.ts b/src/classes/queue-base.ts index ba54daa017..21a5d5ae3b 100644 --- a/src/classes/queue-base.ts +++ b/src/classes/queue-base.ts @@ -61,6 +61,7 @@ export class QueueBase extends EventEmitter implements MinimalQueue { opts.connection, opts.sharedConnection, opts.blockingConnection, + opts.skipVersionCheck, ); this.connection.on('error', (error: Error) => this.emit('error', error)); diff --git a/src/classes/redis-connection.ts b/src/classes/redis-connection.ts index 8e58be675d..ca169de3e2 100644 --- a/src/classes/redis-connection.ts +++ b/src/classes/redis-connection.ts @@ -40,6 +40,7 @@ export class RedisConnection extends EventEmitter { private initializing: Promise; private version: string; + private skipVersionCheck: boolean; private handleClientError: (e: Error) => void; private handleClientClose: () => void; private handleClientReady: () => void; @@ -48,6 +49,7 @@ export class RedisConnection extends EventEmitter { opts?: ConnectionOptions, private readonly shared: boolean = false, private readonly blocking = true, + skipVersionCheck = false, ) { super(); @@ -86,6 +88,8 @@ export class RedisConnection extends EventEmitter { this.checkBlockingOptions(deprecationMessage, this.opts); } + this.skipVersionCheck = + skipVersionCheck || !!(this.opts && this.opts.skipVersionCheck); this.handleClientError = (err: Error): void => { this.emit('error', err); }; @@ -182,12 +186,12 @@ export class RedisConnection extends EventEmitter { this.loadCommands(); this.version = await this.getRedisVersion(); - if (this.opts && this.opts.skipVersionCheck !== true && !this.closing) { + if (this.skipVersionCheck !== true && !this.closing) { if ( isRedisVersionLowerThan(this.version, RedisConnection.minimumVersion) ) { throw new Error( - `Redis version needs to be greater than ${RedisConnection.minimumVersion} Current: ${this.version}`, + `Redis version needs to be greater or equal than ${RedisConnection.minimumVersion} Current: ${this.version}`, ); } diff --git a/src/interfaces/queue-options.ts b/src/interfaces/queue-options.ts index 9ff68c9959..2c40a66edd 100644 --- a/src/interfaces/queue-options.ts +++ b/src/interfaces/queue-options.ts @@ -30,6 +30,12 @@ export interface QueueBaseOptions { * Prefix for all queue keys. */ prefix?: string; + + /** + * Avoid version validation to be greater or equal than v5.0.0. + * @defaultValue false + */ + skipVersionCheck?: boolean; } /** From 3164d59999ecd837c85689b7e54e3354d1b09e7f Mon Sep 17 00:00:00 2001 From: roggervalf Date: Tue, 5 Sep 2023 09:29:10 -0500 Subject: [PATCH 307/322] ci(commit-analyzer): add missing release attribute in releaseRules --- package.json | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index c435f9fed3..060d24abbc 100644 --- a/package.json +++ b/package.json @@ -177,62 +177,75 @@ "releaseRules": [ { "scope": "python", - "hidden": true + "hidden": true, + "release": false }, { "type": "feat", - "section": "Features" + "section": "Features", + "release": true }, { "type": "feature", - "section": "Features" + "section": "Features", + "release": true }, { "type": "fix", - "section": "Bug Fixes" + "section": "Bug Fixes", + "release": true }, { "type": "perf", - "section": "Performance Improvements" + "section": "Performance Improvements", + "release": true }, { "type": "revert", - "section": "Reverts" + "section": "Reverts", + "release": true }, { "type": "docs", "section": "Documentation", - "hidden": true + "hidden": true, + "release": false }, { "type": "style", "section": "Styles", - "hidden": true + "hidden": true, + "release": false }, { "type": "chore", "section": "Miscellaneous Chores", - "hidden": true + "hidden": true, + "release": false }, { "type": "refactor", "section": "Code Refactoring", - "hidden": true + "hidden": true, + "release": false }, { "type": "test", "section": "Tests", - "hidden": true + "hidden": true, + "release": false }, { "type": "build", "section": "Build System", - "hidden": true + "hidden": true, + "release": false }, { "type": "ci", "section": "Continuous Integration", - "hidden": true + "hidden": true, + "release": false } ], "presetConfig": { From 2d9f11e7058ac8afb5a98d5849e548f50cbe1883 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 5 Sep 2023 08:47:45 -0600 Subject: [PATCH 308/322] test(flow): use removeOnComplete and age option (#2170) --- tests/test_flow.ts | 95 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) diff --git a/tests/test_flow.ts b/tests/test_flow.ts index dd843b46e4..68325dcae3 100644 --- a/tests/test_flow.ts +++ b/tests/test_flow.ts @@ -149,6 +149,97 @@ describe('flows', () => { }); }); + describe('when removeOnComplete contains age in children and time is reached', () => { + it('keeps children results in parent', async () => { + const worker = new Worker( + queueName, + async job => { + await delay(1000); + return job.name; + }, + { connection, removeOnComplete: { age: 1 } }, + ); + await worker.waitUntilReady(); + + const flow = new FlowProducer({ connection }); + const { children } = await flow.add( + { + name: 'parent', + data: {}, + queueName, + children: [ + { + queueName, + name: 'child0', + data: {}, + opts: { + removeOnComplete: { + age: 1, + }, + }, + }, + { + queueName, + name: 'child1', + data: {}, + opts: { + removeOnComplete: { + age: 1, + }, + }, + }, + ], + opts: { + removeOnComplete: { + age: 1, + }, + }, + }, + { + queuesOptions: { + [queueName]: { + defaultJobOptions: { + removeOnComplete: { + age: 1, + }, + }, + }, + }, + }, + ); + + const completed = new Promise((resolve, reject) => { + worker.on('completed', async (job: Job) => { + try { + if (job.name === 'parent') { + const { processed } = await job.getDependencies(); + expect(Object.keys(processed!).length).to.equal(2); + const { queueQualifiedName, id, name } = children![0].job; + expect(processed![`${queueQualifiedName}:${id}`]).to.equal(name); + const { + queueQualifiedName: queueQualifiedName2, + id: id2, + name: name2, + } = children![1].job; + expect(processed![`${queueQualifiedName2}:${id2}`]).to.equal( + name2, + ); + resolve(); + } + } catch (err) { + reject(err); + } + }); + }); + + await completed; + const remainingJobCount = await queue.getCompletedCount(); + + expect(remainingJobCount).to.equal(1); + await worker.close(); + }); + }); + it('should process children before the parent', async () => { const name = 'child-job'; const values = [ @@ -1604,7 +1695,9 @@ describe('flows', () => { return resolve(); } - if (job.data.foo === 'bar') {throw new Error('failed');} + if (job.data.foo === 'bar') { + throw new Error('failed'); + } }; }); From 252c6a212a3e952bda19bb40e6926e7d43586f80 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 5 Sep 2023 08:48:26 -0600 Subject: [PATCH 309/322] ci(release): revert conventionalcommit preset (#2172) --- package.json | 77 ++-------------------------------------------------- yarn.lock | 7 ----- 2 files changed, 2 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index 060d24abbc..611d1aaab9 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,6 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "commitizen": "^4.2.5", - "conventional-changelog-conventionalcommits": "^7.0.1", "copyfiles": "^2.4.1", "coveralls": "^3.1.1", "eslint": "^7.32.0", @@ -173,84 +172,12 @@ [ "@semantic-release/commit-analyzer", { - "preset": "conventionalcommits", "releaseRules": [ { - "scope": "python", - "hidden": true, - "release": false - }, - { - "type": "feat", - "section": "Features", - "release": true - }, - { - "type": "feature", - "section": "Features", - "release": true - }, - { - "type": "fix", - "section": "Bug Fixes", - "release": true - }, - { - "type": "perf", - "section": "Performance Improvements", - "release": true - }, - { - "type": "revert", - "section": "Reverts", - "release": true - }, - { - "type": "docs", - "section": "Documentation", - "hidden": true, - "release": false - }, - { - "type": "style", - "section": "Styles", - "hidden": true, - "release": false - }, - { - "type": "chore", - "section": "Miscellaneous Chores", - "hidden": true, - "release": false - }, - { - "type": "refactor", - "section": "Code Refactoring", - "hidden": true, - "release": false - }, - { - "type": "test", - "section": "Tests", - "hidden": true, - "release": false - }, - { - "type": "build", - "section": "Build System", - "hidden": true, - "release": false - }, - { - "type": "ci", - "section": "Continuous Integration", - "hidden": true, + "scope": "python*", "release": false } - ], - "presetConfig": { - "ignoreCommits": "python" - } + ] } ], "@semantic-release/release-notes-generator", diff --git a/yarn.lock b/yarn.lock index 7b6d45faa7..50495f9fbc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2057,13 +2057,6 @@ conventional-changelog-conventionalcommits@^5.0.0: lodash "^4.17.15" q "^1.5.1" -conventional-changelog-conventionalcommits@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.1.tgz#b47e7d1b3a0c1e370c4c27eea741f06729913f5f" - integrity sha512-VfFJxBmi+LYXeb4pIfZGbuaFCpWZh0qXbUAKP/s6B8tigV6R4D8j5PDlTtMMWawa7+DcNySVoF7kPWz0EMYuCQ== - dependencies: - compare-func "^2.0.0" - conventional-changelog-writer@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" From 0f4af1701d549b9acc557e6dcc098d78e3de7911 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 5 Sep 2023 14:49:30 +0000 Subject: [PATCH 310/322] chore(release): 4.9.0 [skip ci] # [4.9.0](https://github.com/taskforcesh/bullmq/compare/v4.8.0...v4.9.0) (2023-09-05) ### Features * **connection:** provide skipVersionCheck option for shared connections ([#2149](https://github.com/taskforcesh/bullmq/issues/2149)) ref [#2148](https://github.com/taskforcesh/bullmq/issues/2148) ([914820f](https://github.com/taskforcesh/bullmq/commit/914820f720cbc48b49f4bd1c46d148eb2bb5b79c)) * **python:** add addBulk method in queue class ([#2161](https://github.com/taskforcesh/bullmq/issues/2161)) ([555dd44](https://github.com/taskforcesh/bullmq/commit/555dd44a0190f4957e43f083e2f59d7f58b90ac9)) * **python:** add flow producer class ([#2115](https://github.com/taskforcesh/bullmq/issues/2115)) ([14a769b](https://github.com/taskforcesh/bullmq/commit/14a769b193d97576ff9b3f2a65de47463ba04ffd)) --- docs/gitbook/changelog.md | 9 +++++++++ package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 7240ec8299..6e32ab2626 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,12 @@ +# [4.9.0](https://github.com/taskforcesh/bullmq/compare/v4.8.0...v4.9.0) (2023-09-05) + + +### Features + +* **connection:** provide skipVersionCheck option for shared connections ([#2149](https://github.com/taskforcesh/bullmq/issues/2149)) ref [#2148](https://github.com/taskforcesh/bullmq/issues/2148) ([914820f](https://github.com/taskforcesh/bullmq/commit/914820f720cbc48b49f4bd1c46d148eb2bb5b79c)) +* **python:** add addBulk method in queue class ([#2161](https://github.com/taskforcesh/bullmq/issues/2161)) ([555dd44](https://github.com/taskforcesh/bullmq/commit/555dd44a0190f4957e43f083e2f59d7f58b90ac9)) +* **python:** add flow producer class ([#2115](https://github.com/taskforcesh/bullmq/issues/2115)) ([14a769b](https://github.com/taskforcesh/bullmq/commit/14a769b193d97576ff9b3f2a65de47463ba04ffd)) + # [4.8.0](https://github.com/taskforcesh/bullmq/compare/v4.7.4...v4.8.0) (2023-08-20) diff --git a/package.json b/package.json index 611d1aaab9..e1d00280bd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.8.0", + "version": "4.9.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From c67dfb49931ee4cb96573af660e9f2316942687c Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Thu, 7 Sep 2023 07:21:01 -0600 Subject: [PATCH 311/322] feat(flow-producer): add addBulk method (python) (#2174) --- package.json | 2 +- python/bullmq/flow_producer.py | 18 ++++++++++ python/tests/flow_tests.py | 65 +++++++++++++++++++++++++++++++++- 3 files changed, 83 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e1d00280bd..c6e945cbd0 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,7 @@ { "releaseRules": [ { - "scope": "python*", + "message": "*python*", "release": false } ] diff --git a/python/bullmq/flow_producer.py b/python/bullmq/flow_producer.py index e6b562cb68..fbdcfa2782 100644 --- a/python/bullmq/flow_producer.py +++ b/python/bullmq/flow_producer.py @@ -50,6 +50,15 @@ async def addChildren(self, nodes, parent, queues_opts, pipe): children.append(job) return children + async def addNodes(self, nodes: list[dict], pipe): + trees = [] + for node in nodes: + parent_opts = node.get("opts", {}).get("parent", None) + jobs_tree = await self.addNode(node, {"parentOpts": parent_opts},None, pipe) + trees.append(jobs_tree) + + return trees + async def addNode(self, node: dict, parent: dict, queues_opts: dict, pipe): prefix = node.get("prefix", self.prefix) queue = self.queueFromNode(node, QueueKeys(prefix), prefix) @@ -116,6 +125,15 @@ async def add(self, flow: dict, opts: dict = {}): return result + async def addBulk(self, flows: list[dict]): + result = None + async with self.redisConnection.conn.pipeline(transaction=True) as pipe: + job_trees = await self.addNodes(flows, pipe) + await pipe.execute() + result = job_trees + + return result + def close(self): """ Close the flow instance. diff --git a/python/tests/flow_tests.py b/python/tests/flow_tests.py index 1f12fcc726..a835453509 100644 --- a/python/tests/flow_tests.py +++ b/python/tests/flow_tests.py @@ -52,7 +52,7 @@ async def process2(job: Job, token: str): children_worker = Worker(queue_name, process1) flow = FlowProducer() - tree = await flow.add( + await flow.add( { "name": 'parent-job', "queueName": parent_queue_name, @@ -77,5 +77,68 @@ async def process2(job: Job, token: str): await parent_queue.obliterate() await parent_queue.close() + async def test_addBulk_should_process_children_before_parent(self): + child_job_name = 'child-job' + children_data = [ + {"idx": 0, "bar": 'something'}, + {"idx": 1, "baz": 'something'} + ] + parent_queue_name = f"__test_parent_queue__{uuid4().hex}" + + processing_children = Future() + + processed_children = 0 + async def process1(job: Job, token: str): + nonlocal processed_children + processed_children+=1 + if processed_children == len(children_data): + processing_children.set_result(None) + return children_data[job.data.get("idx")] + + processing_parents = Future() + + processed_parents = 0 + async def process2(job: Job, token: str): + nonlocal processed_parents + processed_parents+=1 + if processed_parents == 2: + processing_parents.set_result(None) + return 1 + + parent_worker = Worker(parent_queue_name, process2) + children_worker = Worker(queue_name, process1) + + flow = FlowProducer() + await flow.addBulk([ + { + "name": 'parent-job-1', + "queueName": parent_queue_name, + "data": {}, + "children": [ + {"name": child_job_name, "data": {"idx": 0, "foo": 'bar'}, "queueName": queue_name} + ] + }, + { + "name": 'parent-job-2', + "queueName": parent_queue_name, + "data": {}, + "children": [ + {"name": child_job_name, "data": {"idx": 1, "foo": 'baz'}, "queueName": queue_name} + ] + } + ]) + + await processing_children + await processing_parents + + await parent_worker.close() + await children_worker.close() + await flow.close() + + parent_queue = Queue(parent_queue_name) + await parent_queue.pause() + await parent_queue.obliterate() + await parent_queue.close() + if __name__ == '__main__': unittest.main() From 09bae92e69d9cb7d8f3cc150a52b2c0f183affe7 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Thu, 7 Sep 2023 13:22:33 +0000 Subject: [PATCH 312/322] 1.13.0 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 9 +++++++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 5be615488b..737e73c4c1 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,15 @@ +## v1.13.0 (2023-09-07) +### Feature +* **flow-producer:** Add addBulk method (python) ([#2174](https://github.com/taskforcesh/bullmq/issues/2174)) ([`c67dfb4`](https://github.com/taskforcesh/bullmq/commit/c67dfb49931ee4cb96573af660e9f2316942687c)) +* **connection:** Provide skipVersionCheck option for shared connections (#2149) ref #2148 ([`914820f`](https://github.com/taskforcesh/bullmq/commit/914820f720cbc48b49f4bd1c46d148eb2bb5b79c)) + +### Documentation +* **auto-removal:** Clarify removal regardless of job names ([`bab0c61`](https://github.com/taskforcesh/bullmq/commit/bab0c6168f22af4e6aa7e9c47ecaad226d8fbf1d)) +* **python:** Add flowProducer usage ([#2163](https://github.com/taskforcesh/bullmq/issues/2163)) ([`96f84b7`](https://github.com/taskforcesh/bullmq/commit/96f84b7efb4d187ddeab3169c833c35e7786e608)) + ## v1.12.0 (2023-08-31) ### Feature * **python:** Add addBulk method in queue class ([#2161](https://github.com/taskforcesh/bullmq/issues/2161)) ([`555dd44`](https://github.com/taskforcesh/bullmq/commit/555dd44a0190f4957e43f083e2f59d7f58b90ac9)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index dff3d2f925..bcc64fcb6f 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.12.0" +__version__ = "1.13.0" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 80a4fcec6e..2b53a66991 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.12.0" +version = "1.13.0" description='BullMQ for Python' readme="README.md" authors = [ From 4b01f359c290cfc62ea74ff3ab0b43ccc6956a02 Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Mon, 11 Sep 2023 07:59:38 -0600 Subject: [PATCH 313/322] fix(move-to-finished): consider addition of prioritized jobs when processing last active job (#2176) (python) --- package.json | 2 +- src/commands/moveToFinished-13.lua | 9 ++++++- tests/test_worker.ts | 42 +++++++++++++++++++++++++++--- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index c6e945cbd0..af8a314221 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,7 @@ { "releaseRules": [ { - "message": "*python*", + "message": "*[python]*", "release": false } ] diff --git a/src/commands/moveToFinished-13.lua b/src/commands/moveToFinished-13.lua index 02293cbffd..9d924ccb38 100644 --- a/src/commands/moveToFinished-13.lua +++ b/src/commands/moveToFinished-13.lua @@ -216,10 +216,17 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2]) - -- If jobId is special ID 0:delay, then there is no job to process if jobId then if string.sub(jobId, 1, 2) == "0:" then rcall("LREM", KEYS[2], 1, jobId) + + -- If jobId is special ID 0:delay (delay greater than 0), then there is no job to process + -- but if ID is 0:0, then there is at least 1 prioritized job to process + if jobId == "0:0" then + jobId = moveJobFromPriorityToActive(KEYS[3], KEYS[2], KEYS[10]) + return prepareJobForProcessing(KEYS, ARGV[8], target, jobId, timestamp, + maxJobs, expireTime, opts) + end else return prepareJobForProcessing(KEYS, ARGV[8], target, jobId, timestamp, maxJobs, expireTime, opts) diff --git a/tests/test_worker.ts b/tests/test_worker.ts index c63418b4e4..26a68c9173 100644 --- a/tests/test_worker.ts +++ b/tests/test_worker.ts @@ -624,10 +624,10 @@ describe('workers', function () { await worker.close(); }); - it('should processes jobs by priority', async () => { - const normalPriority = []; - const mediumPriority = []; - const highPriority = []; + it('should process jobs by priority', async () => { + const normalPriority: Promise[] = []; + const mediumPriority: Promise[] = []; + const highPriority: Promise[] = []; let processor; @@ -677,6 +677,40 @@ describe('workers', function () { await worker.close(); }); + describe('when prioritized job is added while processing last active job', () => { + it('should process prioritized job whithout delay', async function () { + this.timeout(1000); + await queue.add('test1', { p: 2 }, { priority: 2 }); + let counter = 0; + let processor; + const processing = new Promise((resolve, reject) => { + processor = async (job: Job) => { + try { + if (job.name == 'test1') { + await queue.add('test', { p: 2 }, { priority: 2 }); + } + + expect(job.id).to.be.ok; + expect(job.data.p).to.be.eql(2); + } catch (err) { + reject(err); + } + + if (++counter === 2) { + resolve(); + } + }; + }); + + const worker = new Worker(queueName, processor, { connection }); + await worker.waitUntilReady(); + + await processing; + + await worker.close(); + }); + }); + it('process several jobs serially', async () => { let counter = 1; const maxJobs = 35; From c389221bdecba9fbb52c40d4a4e8ad78ecdb86c3 Mon Sep 17 00:00:00 2001 From: semantic-release Date: Mon, 11 Sep 2023 14:01:33 +0000 Subject: [PATCH 314/322] 1.13.1 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 4 ++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 737e73c4c1..f095deeaba 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,10 @@ +## v1.13.1 (2023-09-11) +### Fix +* **move-to-finished:** Consider addition of prioritized jobs when processing last active job (#2176) (python) ([`4b01f35`](https://github.com/taskforcesh/bullmq/commit/4b01f359c290cfc62ea74ff3ab0b43ccc6956a02)) + ## v1.13.0 (2023-09-07) ### Feature * **flow-producer:** Add addBulk method (python) ([#2174](https://github.com/taskforcesh/bullmq/issues/2174)) ([`c67dfb4`](https://github.com/taskforcesh/bullmq/commit/c67dfb49931ee4cb96573af660e9f2316942687c)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index bcc64fcb6f..9263078844 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.13.0" +__version__ = "1.13.1" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 2b53a66991..1956fcfa66 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.13.0" +version = "1.13.1" description='BullMQ for Python' readme="README.md" authors = [ From 2f5628feffab66cdcc78abf4d7bb608bdcaa65bb Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 12 Sep 2023 00:19:56 -0600 Subject: [PATCH 315/322] fix(remove): change error message when job is locked (python) (#2175) --- docs/gitbook/changelog.md | 2 -- docs/gitbook/python/changelog.md | 19 ++----------------- package.json | 2 +- python/bullmq/job.py | 2 +- src/classes/job.ts | 4 +++- src/commands/removeJob-1.lua | 8 -------- tests/test_flow.ts | 2 +- 7 files changed, 8 insertions(+), 31 deletions(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 6e32ab2626..55b8eccf9b 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -4,8 +4,6 @@ ### Features * **connection:** provide skipVersionCheck option for shared connections ([#2149](https://github.com/taskforcesh/bullmq/issues/2149)) ref [#2148](https://github.com/taskforcesh/bullmq/issues/2148) ([914820f](https://github.com/taskforcesh/bullmq/commit/914820f720cbc48b49f4bd1c46d148eb2bb5b79c)) -* **python:** add addBulk method in queue class ([#2161](https://github.com/taskforcesh/bullmq/issues/2161)) ([555dd44](https://github.com/taskforcesh/bullmq/commit/555dd44a0190f4957e43f083e2f59d7f58b90ac9)) -* **python:** add flow producer class ([#2115](https://github.com/taskforcesh/bullmq/issues/2115)) ([14a769b](https://github.com/taskforcesh/bullmq/commit/14a769b193d97576ff9b3f2a65de47463ba04ffd)) # [4.8.0](https://github.com/taskforcesh/bullmq/compare/v4.7.4...v4.8.0) (2023-08-20) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index f095deeaba..09754d71ad 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -9,29 +9,14 @@ ## v1.13.0 (2023-09-07) ### Feature * **flow-producer:** Add addBulk method (python) ([#2174](https://github.com/taskforcesh/bullmq/issues/2174)) ([`c67dfb4`](https://github.com/taskforcesh/bullmq/commit/c67dfb49931ee4cb96573af660e9f2316942687c)) -* **connection:** Provide skipVersionCheck option for shared connections (#2149) ref #2148 ([`914820f`](https://github.com/taskforcesh/bullmq/commit/914820f720cbc48b49f4bd1c46d148eb2bb5b79c)) - -### Documentation -* **auto-removal:** Clarify removal regardless of job names ([`bab0c61`](https://github.com/taskforcesh/bullmq/commit/bab0c6168f22af4e6aa7e9c47ecaad226d8fbf1d)) -* **python:** Add flowProducer usage ([#2163](https://github.com/taskforcesh/bullmq/issues/2163)) ([`96f84b7`](https://github.com/taskforcesh/bullmq/commit/96f84b7efb4d187ddeab3169c833c35e7786e608)) ## v1.12.0 (2023-08-31) ### Feature -* **python:** Add addBulk method in queue class ([#2161](https://github.com/taskforcesh/bullmq/issues/2161)) ([`555dd44`](https://github.com/taskforcesh/bullmq/commit/555dd44a0190f4957e43f083e2f59d7f58b90ac9)) - -### Documentation -* **typedoc:** Change defaultValue tag styling ([#2160](https://github.com/taskforcesh/bullmq/issues/2160)) ([`1b0ff8e`](https://github.com/taskforcesh/bullmq/commit/1b0ff8ef51e27df906a93dae317534e2c2e9ccb3)) +* **queue:** Add addBulk method ([#2161](https://github.com/taskforcesh/bullmq/issues/2161)) ([`555dd44`](https://github.com/taskforcesh/bullmq/commit/555dd44a0190f4957e43f083e2f59d7f58b90ac9)) ## v1.11.0 (2023-08-26) ### Feature -* **python:** Add flow producer class ([#2115](https://github.com/taskforcesh/bullmq/issues/2115)) ([`14a769b`](https://github.com/taskforcesh/bullmq/commit/14a769b193d97576ff9b3f2a65de47463ba04ffd)) -* **sandbox:** Emulate moveToDelayed method (#2122) ref #2118 ([`4c4559b`](https://github.com/taskforcesh/bullmq/commit/4c4559b3c678313b3727c9781a6d3f963bcfda4e)) - -### Fix -* **sandbox:** Ignore extra params on processor ([#2142](https://github.com/taskforcesh/bullmq/issues/2142)) ([`3602c20`](https://github.com/taskforcesh/bullmq/commit/3602c20ab80cbe0a0d3de66210a01ad119e1090b)) - -### Documentation -* **rate-limit:** Add getRateLimitTtl usage ([#2116](https://github.com/taskforcesh/bullmq/issues/2116)) ([`51219fd`](https://github.com/taskforcesh/bullmq/commit/51219fd8685ccf1703548dda49303cd03690a95e)) +* Add flow producer class ([#2115](https://github.com/taskforcesh/bullmq/issues/2115)) ([`14a769b`](https://github.com/taskforcesh/bullmq/commit/14a769b193d97576ff9b3f2a65de47463ba04ffd)) ## v1.10.1 (2023-08-19) ### Fix diff --git a/package.json b/package.json index af8a314221..fd251ff8ca 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,7 @@ { "releaseRules": [ { - "message": "*[python]*", + "message": "*\\[python\\]*", "release": false } ] diff --git a/python/bullmq/job.py b/python/bullmq/job.py index d50251386b..80ac2dac91 100644 --- a/python/bullmq/job.py +++ b/python/bullmq/job.py @@ -83,7 +83,7 @@ async def remove(self, opts: dict = {}): removed = await self.scripts.remove(self.id, opts.get("removeChildren", True)) if not removed: - raise Exception(f"Could not remove job {self.id}") + raise Exception(f"Job {self.id} could not be removed because it is locked by another worker") async def moveToFailed(self, err, token:str, fetchNext:bool = False): error_message = str(err) diff --git a/src/classes/job.ts b/src/classes/job.ts index 54a7e49b43..f457b92121 100644 --- a/src/classes/job.ts +++ b/src/classes/job.ts @@ -516,7 +516,9 @@ export class Job< if (removed) { queue.emit('removed', job); } else { - throw new Error('Could not remove job ' + job.id); + throw new Error( + `Job ${this.id} could not be removed because it is locked by another worker`, + ); } } diff --git a/src/commands/removeJob-1.lua b/src/commands/removeJob-1.lua index 9016b19d5d..ac8a3cedc3 100644 --- a/src/commands/removeJob-1.lua +++ b/src/commands/removeJob-1.lua @@ -55,14 +55,6 @@ local function removeJob( prefix, jobId, parentKey, removeChildren) rcall("DEL", jobKey, jobKey .. ":logs", jobKey .. ":dependencies", jobKey .. ":processed") - -- -- delete keys related to rate limiter - -- local limiterIndexTable = KEYS[10] .. ":index" - -- local limitedSetKey = rcall("HGET", limiterIndexTable, jobId) - -- if limitedSetKey then - -- rcall("SREM", limitedSetKey, jobId) - -- rcall("HDEL", limiterIndexTable, jobId) - -- end - rcall("XADD", prefix .. "events", "*", "event", "removed", "jobId", jobId, "prev", prev); end diff --git a/tests/test_flow.ts b/tests/test_flow.ts index 68325dcae3..b677fc0909 100644 --- a/tests/test_flow.ts +++ b/tests/test_flow.ts @@ -3079,7 +3079,7 @@ describe('flows', () => { expect(await (nextJob as Job).getState()).to.be.equal('active'); await expect(tree.job.remove()).to.be.rejectedWith( - `Could not remove job ${tree.job.id}`, + `Job ${tree.job.id} could not be removed because it is locked by another worker`, ); expect(await tree.job.getState()).to.be.equal('waiting-children'); From 4226ff380b43cabc3e52e0a5321d05f0fa2f265d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 12 Sep 2023 06:21:15 +0000 Subject: [PATCH 316/322] chore(release): 4.10.0 [skip ci] # [4.10.0](https://github.com/taskforcesh/bullmq/compare/v4.9.0...v4.10.0) (2023-09-12) ### Bug Fixes * **move-to-finished:** consider addition of prioritized jobs when processing last active job ([#2176](https://github.com/taskforcesh/bullmq/issues/2176)) (python) ([4b01f35](https://github.com/taskforcesh/bullmq/commit/4b01f359c290cfc62ea74ff3ab0b43ccc6956a02)) * **remove:** change error message when job is locked (python) ([#2175](https://github.com/taskforcesh/bullmq/issues/2175)) ([2f5628f](https://github.com/taskforcesh/bullmq/commit/2f5628feffab66cdcc78abf4d7bb608bdcaa65bb)) ### Features * **flow-producer:** add addBulk method (python) ([#2174](https://github.com/taskforcesh/bullmq/issues/2174)) ([c67dfb4](https://github.com/taskforcesh/bullmq/commit/c67dfb49931ee4cb96573af660e9f2316942687c)) --- docs/gitbook/changelog.md | 13 +++++++++++++ package.json | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 55b8eccf9b..8905ccc91d 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,16 @@ +# [4.10.0](https://github.com/taskforcesh/bullmq/compare/v4.9.0...v4.10.0) (2023-09-12) + + +### Bug Fixes + +* **move-to-finished:** consider addition of prioritized jobs when processing last active job ([#2176](https://github.com/taskforcesh/bullmq/issues/2176)) (python) ([4b01f35](https://github.com/taskforcesh/bullmq/commit/4b01f359c290cfc62ea74ff3ab0b43ccc6956a02)) +* **remove:** change error message when job is locked (python) ([#2175](https://github.com/taskforcesh/bullmq/issues/2175)) ([2f5628f](https://github.com/taskforcesh/bullmq/commit/2f5628feffab66cdcc78abf4d7bb608bdcaa65bb)) + + +### Features + +* **flow-producer:** add addBulk method (python) ([#2174](https://github.com/taskforcesh/bullmq/issues/2174)) ([c67dfb4](https://github.com/taskforcesh/bullmq/commit/c67dfb49931ee4cb96573af660e9f2316942687c)) + # [4.9.0](https://github.com/taskforcesh/bullmq/compare/v4.8.0...v4.9.0) (2023-09-05) diff --git a/package.json b/package.json index fd251ff8ca..961298dac1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.9.0", + "version": "4.10.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 764f2e07dc32ffa21303c96fe7029fedff3ca5bb Mon Sep 17 00:00:00 2001 From: semantic-release Date: Tue, 12 Sep 2023 06:22:23 +0000 Subject: [PATCH 317/322] 1.13.2 Automatically generated by python-semantic-release --- docs/gitbook/python/changelog.md | 4 ++++ python/bullmq/__init__.py | 2 +- python/pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/gitbook/python/changelog.md b/docs/gitbook/python/changelog.md index 09754d71ad..c4adc535b0 100644 --- a/docs/gitbook/python/changelog.md +++ b/docs/gitbook/python/changelog.md @@ -2,6 +2,10 @@ +## v1.13.2 (2023-09-12) +### Fix +* **remove:** Change error message when job is locked (python) ([#2175](https://github.com/taskforcesh/bullmq/issues/2175)) ([`2f5628f`](https://github.com/taskforcesh/bullmq/commit/2f5628feffab66cdcc78abf4d7bb608bdcaa65bb)) + ## v1.13.1 (2023-09-11) ### Fix * **move-to-finished:** Consider addition of prioritized jobs when processing last active job (#2176) (python) ([`4b01f35`](https://github.com/taskforcesh/bullmq/commit/4b01f359c290cfc62ea74ff3ab0b43ccc6956a02)) diff --git a/python/bullmq/__init__.py b/python/bullmq/__init__.py index 9263078844..3764c2bf36 100644 --- a/python/bullmq/__init__.py +++ b/python/bullmq/__init__.py @@ -3,7 +3,7 @@ A background job processor and message queue for Python based on Redis. """ -__version__ = "1.13.1" +__version__ = "1.13.2" __author__ = 'Taskforce.sh Inc.' __credits__ = 'Taskforce.sh Inc.' diff --git a/python/pyproject.toml b/python/pyproject.toml index 1956fcfa66..c5440098a4 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "bullmq" -version = "1.13.1" +version = "1.13.2" description='BullMQ for Python' readme="README.md" authors = [ From 40c69fb7605e79eb66ba6d1c98a55c9944b086cf Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Wed, 13 Sep 2023 20:52:30 -0600 Subject: [PATCH 318/322] docs(bulmq-pro): fix batch option usage (#2180) --- docs/gitbook/bullmq-pro/batches.md | 4 ++-- docs/gitbook/changelog.md | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/docs/gitbook/bullmq-pro/batches.md b/docs/gitbook/bullmq-pro/batches.md index 10c8afae9b..797b834fa1 100644 --- a/docs/gitbook/bullmq-pro/batches.md +++ b/docs/gitbook/bullmq-pro/batches.md @@ -21,7 +21,7 @@ const worker = new WorkerPro( await doSomethingWithBatchedJob(batchedJob); } }, - { connection, batches: { size: 10 } }, + { connection, batch: { size: 10 } }, ); ``` @@ -50,7 +50,7 @@ const worker = new WorkerPro( } } }, - { connection, batches: { size: 10 } }, + { connection, batch: { size: 10 } }, ); ``` diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index 8905ccc91d..cc284ff0c7 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -6,11 +6,6 @@ * **move-to-finished:** consider addition of prioritized jobs when processing last active job ([#2176](https://github.com/taskforcesh/bullmq/issues/2176)) (python) ([4b01f35](https://github.com/taskforcesh/bullmq/commit/4b01f359c290cfc62ea74ff3ab0b43ccc6956a02)) * **remove:** change error message when job is locked (python) ([#2175](https://github.com/taskforcesh/bullmq/issues/2175)) ([2f5628f](https://github.com/taskforcesh/bullmq/commit/2f5628feffab66cdcc78abf4d7bb608bdcaa65bb)) - -### Features - -* **flow-producer:** add addBulk method (python) ([#2174](https://github.com/taskforcesh/bullmq/issues/2174)) ([c67dfb4](https://github.com/taskforcesh/bullmq/commit/c67dfb49931ee4cb96573af660e9f2316942687c)) - # [4.9.0](https://github.com/taskforcesh/bullmq/compare/v4.8.0...v4.9.0) (2023-09-05) From 1494b5566573356e0248b4a5cab48ae21d82f1da Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Fri, 15 Sep 2023 21:12:53 -0600 Subject: [PATCH 319/322] feat(sandbox): convert wrapJob method as protected for extension (#2182) --- src/classes/child-processor.ts | 127 +++++++++--------- .../fixture_processor_move_to_delayed.js | 2 +- 2 files changed, 64 insertions(+), 65 deletions(-) diff --git a/src/classes/child-processor.ts b/src/classes/child-processor.ts index 97ca5dc94a..1cda8d5ebd 100644 --- a/src/classes/child-processor.ts +++ b/src/classes/child-processor.ts @@ -69,8 +69,7 @@ export class ChildProcessor { this.status = ChildStatus.Started; this.currentJobPromise = (async () => { try { - const job = wrapJob(jobJson, this.send); - //console.log('el token', token, job.id) + const job = this.wrapJob(jobJson, this.send); const result = (await this.processor(job, token)) || {}; await this.send({ cmd: ParentCommand.Completed, @@ -98,69 +97,69 @@ export class ChildProcessor { process.exit(process.exitCode || 0); } } -} - -/** - * Enhance the given job argument with some functions - * that can be called from the sandboxed job processor. - * - * Note, the `job` argument is a JSON deserialized message - * from the main node process to this forked child process, - * the functions on the original job object are not in tact. - * The wrapped job adds back some of those original functions. - */ -function wrapJob( - job: JobJson, - send: (msg: any) => Promise, -): SandboxedJob { - let progressValue = job.progress; - const updateProgress = async (progress: number | object) => { - // Locally store reference to new progress value - // so that we can return it from this process synchronously. - progressValue = progress; - // Send message to update job progress. - await send({ - cmd: ParentCommand.Progress, - value: progress, - }); - }; + /** + * Enhance the given job argument with some functions + * that can be called from the sandboxed job processor. + * + * Note, the `job` argument is a JSON deserialized message + * from the main node process to this forked child process, + * the functions on the original job object are not in tact. + * The wrapped job adds back some of those original functions. + */ + protected wrapJob( + job: JobJson, + send: (msg: any) => Promise, + ): SandboxedJob { + let progressValue = job.progress; - return { - ...job, - data: JSON.parse(job.data || '{}'), - opts: job.opts, - returnValue: JSON.parse(job.returnvalue || '{}'), - /* - * Emulate the real job `updateProgress` function, should works as `progress` function. - */ - updateProgress, - /* - * Emulate the real job `log` function. - */ - log: async (row: any) => { - send({ - cmd: ParentCommand.Log, - value: row, - }); - }, - /* - * Emulate the real job `moveToDelayed` function. - */ - moveToDelayed: async (timestamp: number, token?: string) => { - send({ - cmd: ParentCommand.MoveToDelayed, - value: { timestamp, token }, - }); - }, - /* - * Emulate the real job `updateData` function. - */ - updateData: async (data: any) => { - send({ - cmd: ParentCommand.Update, - value: data, + const updateProgress = async (progress: number | object) => { + // Locally store reference to new progress value + // so that we can return it from this process synchronously. + progressValue = progress; + // Send message to update job progress. + await send({ + cmd: ParentCommand.Progress, + value: progress, }); - }, - }; + }; + + return { + ...job, + data: JSON.parse(job.data || '{}'), + opts: job.opts, + returnValue: JSON.parse(job.returnvalue || '{}'), + /* + * Emulate the real job `updateProgress` function, should works as `progress` function. + */ + updateProgress, + /* + * Emulate the real job `log` function. + */ + log: async (row: any) => { + send({ + cmd: ParentCommand.Log, + value: row, + }); + }, + /* + * Emulate the real job `moveToDelayed` function. + */ + moveToDelayed: async (timestamp: number, token?: string) => { + send({ + cmd: ParentCommand.MoveToDelayed, + value: { timestamp, token }, + }); + }, + /* + * Emulate the real job `updateData` function. + */ + updateData: async (data: any) => { + send({ + cmd: ParentCommand.Update, + value: data, + }); + }, + }; + } } diff --git a/tests/fixtures/fixture_processor_move_to_delayed.js b/tests/fixtures/fixture_processor_move_to_delayed.js index 3a385f8c6d..5115b81978 100644 --- a/tests/fixtures/fixture_processor_move_to_delayed.js +++ b/tests/fixtures/fixture_processor_move_to_delayed.js @@ -4,7 +4,7 @@ */ 'use strict'; -const { DelayedError } = require('../../dist/cjs/classes/delayed-error'); +const { DelayedError } = require('../../dist/cjs/classes'); const delay = require('./delay'); module.exports = function (job, token) { From 3fd185cdcdb473f46bde5deb91301a71e192b190 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 16 Sep 2023 03:13:57 +0000 Subject: [PATCH 320/322] chore(release): 4.11.0 [skip ci] # [4.11.0](https://github.com/taskforcesh/bullmq/compare/v4.10.0...v4.11.0) (2023-09-16) ### Features * **sandbox:** convert wrapJob method as protected for extension ([#2182](https://github.com/taskforcesh/bullmq/issues/2182)) ([1494b55](https://github.com/taskforcesh/bullmq/commit/1494b5566573356e0248b4a5cab48ae21d82f1da)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index cc284ff0c7..f339bc10fc 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +# [4.11.0](https://github.com/taskforcesh/bullmq/compare/v4.10.0...v4.11.0) (2023-09-16) + + +### Features + +* **sandbox:** convert wrapJob method as protected for extension ([#2182](https://github.com/taskforcesh/bullmq/issues/2182)) ([1494b55](https://github.com/taskforcesh/bullmq/commit/1494b5566573356e0248b4a5cab48ae21d82f1da)) + # [4.10.0](https://github.com/taskforcesh/bullmq/compare/v4.9.0...v4.10.0) (2023-09-12) diff --git a/package.json b/package.json index 961298dac1..e38a7ea07a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.10.0", + "version": "4.11.0", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js", From 862f10b586276314d9bffff2a5e6caf939399f7e Mon Sep 17 00:00:00 2001 From: Rogger Valverde Date: Tue, 19 Sep 2023 18:27:56 -0600 Subject: [PATCH 321/322] fix(queue): differentiate score purpose per state in clean method (#2133) fixes #2124 --- src/commands/cleanJobsInSet-2.lua | 12 +++++++++--- src/commands/includes/cleanList.lua | 2 +- src/commands/includes/cleanSet.lua | 16 +++++++++++----- src/commands/includes/getJobsInZset.lua | 7 +++---- tests/test_clean.ts | 20 ++++++++++++++++++++ 5 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/commands/cleanJobsInSet-2.lua b/src/commands/cleanJobsInSet-2.lua index 20f06b9352..c33c64eb11 100644 --- a/src/commands/cleanJobsInSet-2.lua +++ b/src/commands/cleanJobsInSet-2.lua @@ -34,13 +34,19 @@ local result if ARGV[4] == "active" then result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false) elseif ARGV[4] == "delayed" then - result = cleanSet(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], limit, {"processedOn", "timestamp"}) + rangeEnd = "+inf" + result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit, + {"processedOn", "timestamp"}, false) elseif ARGV[4] == "prioritized" then - result = cleanSet(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], limit, {"timestamp"}) + rangeEnd = "+inf" + result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit, + {"timestamp"}, false) elseif ARGV[4] == "wait" or ARGV[4] == "paused" then result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true) else - result = cleanSet(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], limit, {"finishedOn"} ) + rangeEnd = ARGV[2] + result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit, + {"finishedOn"}, true) end rcall("XADD", KEYS[2], "*", "event", "cleaned", "count", result[2]) diff --git a/src/commands/includes/cleanList.lua b/src/commands/includes/cleanList.lua index f7e7a65225..99b397ef53 100644 --- a/src/commands/includes/cleanList.lua +++ b/src/commands/includes/cleanList.lua @@ -30,7 +30,7 @@ local function cleanList(listKey, jobKeyPrefix, rangeStart, rangeEnd, -- 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: jobTS = getTimestamp(jobKey, {"finishedOn", "processedOn", "timestamp"}) - if (not jobTS or jobTS < timestamp) then + if (not jobTS or jobTS <= timestamp) then -- replace the entry with a deletion marker; the actual deletion will -- occur at the end of the script rcall("LSET", listKey, rangeEnd - jobIdsLen + i, deletionMarker) diff --git a/src/commands/includes/cleanSet.lua b/src/commands/includes/cleanSet.lua index 3f795ccdd6..f83393d50a 100644 --- a/src/commands/includes/cleanSet.lua +++ b/src/commands/includes/cleanSet.lua @@ -9,8 +9,8 @@ --- @include "getTimestamp" --- @include "removeJob" -local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, limit, attributes) - local jobs = getJobsInZset(setKey, rangeStart, rangeEnd, timestamp, limit) +local function cleanSet(setKey, jobKeyPrefix, rangeEnd, timestamp, limit, attributes, isFinished) + local jobs = getJobsInZset(setKey, rangeEnd, limit) local deleted = {} local deletedCount = 0 local jobTS @@ -20,12 +20,18 @@ local function cleanSet(setKey, jobKeyPrefix, rangeStart, rangeEnd, timestamp, l end local jobKey = jobKeyPrefix .. job - -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed - jobTS = getTimestamp(jobKey, attributes) - if (not jobTS or jobTS < timestamp) then + if isFinished then removeJob(job, true, jobKeyPrefix) deletedCount = deletedCount + 1 table.insert(deleted, job) + else + -- * finishedOn says when the job was completed, but it isn't set unless the job has actually completed + jobTS = getTimestamp(jobKey, attributes) + if (not jobTS or jobTS <= timestamp) then + removeJob(job, true, jobKeyPrefix) + deletedCount = deletedCount + 1 + table.insert(deleted, job) + end end end diff --git a/src/commands/includes/getJobsInZset.lua b/src/commands/includes/getJobsInZset.lua index f2f4ab1f37..a9f90c3960 100644 --- a/src/commands/includes/getJobsInZset.lua +++ b/src/commands/includes/getJobsInZset.lua @@ -2,11 +2,10 @@ -- of items in a sorted set only run a single iteration. If we simply used -- ZRANGE, we may take a long time traversing through jobs that are within the -- grace period. -local function getJobsInZset(zsetKey, rangeStart, rangeEnd, maxTimestamp, limit) +local function getJobsInZset(zsetKey, rangeEnd, limit) if limit > 0 then - return rcall("ZRANGEBYSCORE", zsetKey, 0, maxTimestamp, "LIMIT", 0, limit) + return rcall("ZRANGEBYSCORE", zsetKey, 0, rangeEnd, "LIMIT", 0, limit) else - return rcall("ZRANGE", zsetKey, rangeStart, rangeEnd) + return rcall("ZRANGEBYSCORE", zsetKey, 0, rangeEnd) end end - \ No newline at end of file diff --git a/tests/test_clean.ts b/tests/test_clean.ts index 5415083f30..5106178f3a 100644 --- a/tests/test_clean.ts +++ b/tests/test_clean.ts @@ -175,6 +175,26 @@ describe('Cleaner', () => { expect(count).to.be.eql(0); }); + it('should clean all delayed jobs when limit is given', async () => { + await queue.add('test', { some: 'data' }, { delay: 5000 }); + await queue.add('test', { some: 'data' }, { delay: 5000 }); + await delay(100); + const jobs = await queue.clean(0, 1000, 'delayed'); + expect(jobs.length).to.be.eql(2); + const count = await queue.count(); + expect(count).to.be.eql(0); + }); + + it('should clean all prioritized jobs when limit is given', async () => { + await queue.add('test', { some: 'data' }, { priority: 5000 }); + await queue.add('test', { some: 'data' }, { priority: 5001 }); + await delay(100); + const jobs = await queue.clean(0, 1000, 'prioritized'); + expect(jobs.length).to.be.eql(2); + const count = await queue.count(); + expect(count).to.be.eql(0); + }); + describe('when prioritized state is provided', async () => { it('should clean the number of jobs requested', async () => { await queue.add('test', { some: 'data' }, { priority: 1 }); // as queue is empty, this job will be added to wait From 28c817f696dd91092f51cd4529748f713e74ef15 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 20 Sep 2023 00:29:15 +0000 Subject: [PATCH 322/322] chore(release): 4.11.1 [skip ci] ## [4.11.1](https://github.com/taskforcesh/bullmq/compare/v4.11.0...v4.11.1) (2023-09-20) ### Bug Fixes * **queue:** differentiate score purpose per state in clean method ([#2133](https://github.com/taskforcesh/bullmq/issues/2133)) fixes [#2124](https://github.com/taskforcesh/bullmq/issues/2124) ([862f10b](https://github.com/taskforcesh/bullmq/commit/862f10b586276314d9bffff2a5e6caf939399f7e)) --- docs/gitbook/changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/gitbook/changelog.md b/docs/gitbook/changelog.md index f339bc10fc..f5ff2eaf23 100644 --- a/docs/gitbook/changelog.md +++ b/docs/gitbook/changelog.md @@ -1,3 +1,10 @@ +## [4.11.1](https://github.com/taskforcesh/bullmq/compare/v4.11.0...v4.11.1) (2023-09-20) + + +### Bug Fixes + +* **queue:** differentiate score purpose per state in clean method ([#2133](https://github.com/taskforcesh/bullmq/issues/2133)) fixes [#2124](https://github.com/taskforcesh/bullmq/issues/2124) ([862f10b](https://github.com/taskforcesh/bullmq/commit/862f10b586276314d9bffff2a5e6caf939399f7e)) + # [4.11.0](https://github.com/taskforcesh/bullmq/compare/v4.10.0...v4.11.0) (2023-09-16) diff --git a/package.json b/package.json index e38a7ea07a..bc6943bc9d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bullmq", - "version": "4.11.0", + "version": "4.11.1", "description": "Queue for messages and jobs based on Redis", "homepage": "https://bullmq.io/", "main": "./dist/cjs/index.js",