bullmq 1.57.3 → 1.59.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bullmq.d.ts +1839 -0
- package/dist/{classes → cjs/classes}/backoffs.d.ts +0 -0
- package/dist/{classes → cjs/classes}/backoffs.js +0 -0
- package/dist/cjs/classes/backoffs.js.map +1 -0
- package/dist/{classes → cjs/classes}/child-pool.d.ts +0 -0
- package/dist/{classes → cjs/classes}/child-pool.js +1 -1
- package/dist/cjs/classes/child-pool.js.map +1 -0
- package/dist/{classes → cjs/classes}/child-processor.d.ts +0 -0
- package/dist/{classes → cjs/classes}/child-processor.js +0 -0
- package/dist/cjs/classes/child-processor.js.map +1 -0
- package/dist/{classes → cjs/classes}/compat.d.ts +0 -0
- package/dist/{classes → cjs/classes}/compat.js +0 -0
- package/dist/cjs/classes/compat.js.map +1 -0
- package/dist/{classes → cjs/classes}/flow-producer.d.ts +0 -0
- package/dist/{classes → cjs/classes}/flow-producer.js +0 -0
- package/dist/cjs/classes/flow-producer.js.map +1 -0
- package/dist/{classes → cjs/classes}/index.d.ts +0 -0
- package/dist/{classes → cjs/classes}/index.js +0 -0
- package/dist/cjs/classes/index.js.map +1 -0
- package/dist/{classes → cjs/classes}/job.d.ts +0 -0
- package/dist/{classes → cjs/classes}/job.js +0 -0
- package/dist/cjs/classes/job.js.map +1 -0
- package/dist/{classes → cjs/classes}/master.d.ts +0 -0
- package/dist/{classes → cjs/classes}/master.js +0 -0
- package/dist/cjs/classes/master.js.map +1 -0
- package/dist/{classes → cjs/classes}/process-utils.d.ts +0 -0
- package/dist/{classes → cjs/classes}/process-utils.js +0 -0
- package/dist/cjs/classes/process-utils.js.map +1 -0
- package/dist/{classes → cjs/classes}/queue-base.d.ts +0 -0
- package/dist/{classes → cjs/classes}/queue-base.js +0 -0
- package/dist/cjs/classes/queue-base.js.map +1 -0
- package/dist/{classes → cjs/classes}/queue-events.d.ts +0 -0
- package/dist/{classes → cjs/classes}/queue-events.js +0 -0
- package/dist/cjs/classes/queue-events.js.map +1 -0
- package/dist/{classes → cjs/classes}/queue-getters.d.ts +0 -0
- package/dist/{classes → cjs/classes}/queue-getters.js +0 -0
- package/dist/cjs/classes/queue-getters.js.map +1 -0
- package/dist/{classes → cjs/classes}/queue-keys.d.ts +0 -0
- package/dist/{classes → cjs/classes}/queue-keys.js +0 -0
- package/dist/cjs/classes/queue-keys.js.map +1 -0
- package/dist/{classes → cjs/classes}/queue-scheduler.d.ts +0 -0
- package/dist/{classes → cjs/classes}/queue-scheduler.js +0 -0
- package/dist/cjs/classes/queue-scheduler.js.map +1 -0
- package/dist/{classes → cjs/classes}/queue.d.ts +2 -2
- package/dist/{classes → cjs/classes}/queue.js +0 -0
- package/dist/cjs/classes/queue.js.map +1 -0
- package/dist/{classes → cjs/classes}/redis-connection.d.ts +0 -0
- package/dist/{classes → cjs/classes}/redis-connection.js +7 -5
- package/dist/cjs/classes/redis-connection.js.map +1 -0
- package/dist/{classes → cjs/classes}/repeat.d.ts +2 -2
- package/dist/{classes → cjs/classes}/repeat.js +3 -6
- package/dist/cjs/classes/repeat.js.map +1 -0
- package/dist/{classes → cjs/classes}/sandbox.d.ts +0 -0
- package/dist/{classes → cjs/classes}/sandbox.js +0 -0
- package/dist/cjs/classes/sandbox.js.map +1 -0
- package/dist/{classes → cjs/classes}/scripts.d.ts +2 -0
- package/dist/{classes → cjs/classes}/scripts.js +18 -0
- package/dist/cjs/classes/scripts.js.map +1 -0
- package/dist/{classes → cjs/classes}/timer-manager.d.ts +0 -0
- package/dist/{classes → cjs/classes}/timer-manager.js +0 -0
- package/dist/cjs/classes/timer-manager.js.map +1 -0
- package/dist/{classes → cjs/classes}/worker.d.ts +33 -18
- package/dist/{classes → cjs/classes}/worker.js +27 -5
- package/dist/cjs/classes/worker.js.map +1 -0
- package/dist/{commands → cjs/commands}/addJob-9.lua +0 -0
- package/dist/{commands → cjs/commands}/changeDelay-4.lua +0 -0
- package/dist/{commands → cjs/commands}/cleanJobsInSet-2.lua +0 -0
- package/dist/{commands → cjs/commands}/drain-4.lua +0 -0
- package/dist/{commands → cjs/commands}/extendLock-2.lua +0 -0
- package/dist/{commands → cjs/commands}/getState-7.lua +0 -0
- package/dist/{commands → cjs/commands}/getStateV2-7.lua +0 -0
- package/dist/{commands → cjs/commands}/includes/destructureJobKey.lua +0 -0
- package/dist/{commands → cjs/commands}/includes/updateParentDepsIfNeeded.lua +0 -0
- package/dist/{commands → cjs/commands}/index.d.ts +0 -0
- package/dist/{commands → cjs/commands}/index.js +0 -0
- package/dist/cjs/commands/index.js.map +1 -0
- package/dist/{commands → cjs/commands}/isFinished-3.lua +0 -0
- package/dist/{commands → cjs/commands}/isJobInList-1.lua +0 -0
- package/dist/{commands → cjs/commands}/moveStalledJobsToWait-8.lua +0 -0
- package/dist/{commands → cjs/commands}/moveToActive-8.lua +0 -0
- package/dist/{commands → cjs/commands}/moveToDelayed-5.lua +0 -0
- package/dist/{commands → cjs/commands}/moveToFinished-8.lua +0 -0
- package/dist/{commands → cjs/commands}/moveToWaitingChildren-4.lua +0 -0
- package/dist/{commands → cjs/commands}/obliterate-2.lua +0 -0
- package/dist/{commands → cjs/commands}/pause-4.lua +0 -0
- package/dist/{commands → cjs/commands}/promote-5.lua +0 -0
- package/dist/{commands → cjs/commands}/releaseLock-1.lua +0 -0
- package/dist/{commands → cjs/commands}/removeJob-1.lua +0 -0
- package/dist/{commands → cjs/commands}/removeRepeatable-2.lua +0 -0
- package/dist/{commands → cjs/commands}/reprocessJob-4.lua +0 -0
- package/dist/{commands → cjs/commands}/retryJob-4.lua +0 -0
- package/dist/{commands → cjs/commands}/script-loader.d.ts +0 -0
- package/dist/{commands → cjs/commands}/script-loader.js +0 -0
- package/dist/cjs/commands/script-loader.js.map +1 -0
- package/dist/{commands → cjs/commands}/takeLock-1.lua +0 -0
- package/dist/{commands → cjs/commands}/updateDelaySet-7.lua +0 -0
- package/dist/{commands → cjs/commands}/updateProgress-2.lua +0 -0
- package/dist/{enums → cjs/enums}/error-codes.enum.d.ts +0 -0
- package/dist/{enums → cjs/enums}/error-codes.enum.js +0 -0
- package/dist/cjs/enums/error-codes.enum.js.map +1 -0
- package/dist/{enums → cjs/enums}/index.d.ts +0 -0
- package/dist/{enums → cjs/enums}/index.js +0 -0
- package/dist/{enums → cjs/enums}/index.js.map +1 -1
- package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
- package/dist/{index.js → cjs/index.js} +0 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/advanced-options.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/advanced-options.js +0 -0
- package/dist/cjs/interfaces/advanced-options.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/backoff-options.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/backoff-options.js +0 -0
- package/dist/cjs/interfaces/backoff-options.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/child-command.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/child-command.js +0 -0
- package/dist/cjs/interfaces/child-command.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/child-message.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/child-message.js +0 -0
- package/dist/cjs/interfaces/child-message.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/connection.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/connection.js +0 -0
- package/dist/cjs/interfaces/connection.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/flow-job.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/flow-job.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/flow-job.js.map +1 -1
- package/dist/{interfaces → cjs/interfaces}/index.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/index.js +0 -0
- package/dist/cjs/interfaces/index.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/jobs-options.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/jobs-options.js +0 -0
- package/dist/cjs/interfaces/jobs-options.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/parent-command.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/parent-command.js +0 -0
- package/dist/cjs/interfaces/parent-command.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/parent-message.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/parent-message.js +0 -0
- package/dist/cjs/interfaces/parent-message.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/parent.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/parent.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/parent.js.map +1 -1
- package/dist/{interfaces → cjs/interfaces}/queue-options.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/queue-options.js +0 -0
- package/dist/cjs/interfaces/queue-options.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/queue-scheduler-options.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/queue-scheduler-options.js +0 -0
- package/dist/cjs/interfaces/queue-scheduler-options.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/rate-limiter-options.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/rate-limiter-options.js +0 -0
- package/dist/cjs/interfaces/rate-limiter-options.js.map +1 -0
- package/dist/cjs/interfaces/redis-options.d.ts +5 -0
- package/dist/{interfaces → cjs/interfaces}/redis-options.js +0 -0
- package/dist/cjs/interfaces/redis-options.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/redis-streams.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/redis-streams.js +0 -0
- package/dist/cjs/interfaces/redis-streams.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/repeat-options.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/repeat-options.js +0 -0
- package/dist/cjs/interfaces/repeat-options.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/sandboxed-job-processor.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/sandboxed-job-processor.js +0 -0
- package/dist/cjs/interfaces/sandboxed-job-processor.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/sandboxed-job.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/sandboxed-job.js +0 -0
- package/dist/cjs/interfaces/sandboxed-job.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/worker-options.d.ts +0 -0
- package/dist/{interfaces → cjs/interfaces}/worker-options.js +0 -0
- package/dist/cjs/interfaces/worker-options.js.map +1 -0
- package/dist/{utils.d.ts → cjs/utils.d.ts} +0 -0
- package/dist/{utils.js → cjs/utils.js} +0 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/classes/backoffs.d.ts +15 -0
- package/dist/esm/classes/backoffs.js +44 -0
- package/dist/esm/classes/backoffs.js.map +1 -0
- package/dist/esm/classes/child-pool.d.ts +22 -0
- package/dist/esm/classes/child-pool.js +125 -0
- package/dist/esm/classes/child-pool.js.map +1 -0
- package/dist/esm/classes/child-processor.d.ts +24 -0
- package/dist/esm/classes/child-processor.js +165 -0
- package/dist/esm/classes/child-processor.js.map +1 -0
- package/dist/esm/classes/compat.d.ts +316 -0
- package/dist/esm/classes/compat.js +674 -0
- package/dist/esm/classes/compat.js.map +1 -0
- package/dist/esm/classes/flow-producer.d.ts +148 -0
- package/dist/esm/classes/flow-producer.js +228 -0
- package/dist/esm/classes/flow-producer.js.map +1 -0
- package/dist/esm/classes/index.d.ts +14 -0
- package/dist/esm/classes/index.js +15 -0
- package/dist/esm/classes/index.js.map +1 -0
- package/dist/esm/classes/job.d.ts +338 -0
- package/dist/esm/classes/job.js +623 -0
- package/dist/esm/classes/job.js.map +1 -0
- package/dist/esm/classes/master.d.ts +1 -0
- package/dist/esm/classes/master.js +35 -0
- package/dist/esm/classes/master.js.map +1 -0
- package/dist/esm/classes/process-utils.d.ts +7 -0
- package/dist/esm/classes/process-utils.js +31 -0
- package/dist/esm/classes/process-utils.js.map +1 -0
- package/dist/esm/classes/queue-base.d.ts +22 -0
- package/dist/esm/classes/queue-base.js +62 -0
- package/dist/esm/classes/queue-base.js.map +1 -0
- package/dist/esm/classes/queue-events.d.ts +153 -0
- package/dist/esm/classes/queue-events.js +108 -0
- package/dist/esm/classes/queue-events.js.map +1 -0
- package/dist/esm/classes/queue-getters.d.ts +54 -0
- package/dist/esm/classes/queue-getters.js +207 -0
- package/dist/esm/classes/queue-getters.js.map +1 -0
- package/dist/esm/classes/queue-keys.d.ts +10 -0
- package/dist/esm/classes/queue-keys.js +40 -0
- package/dist/esm/classes/queue-keys.js.map +1 -0
- package/dist/esm/classes/queue-scheduler.d.ts +35 -0
- package/dist/esm/classes/queue-scheduler.js +156 -0
- package/dist/esm/classes/queue-scheduler.js.map +1 -0
- package/dist/esm/classes/queue.d.ts +143 -0
- package/dist/esm/classes/queue.js +195 -0
- package/dist/esm/classes/queue.js.map +1 -0
- package/dist/esm/classes/redis-connection.d.ts +28 -0
- package/dist/esm/classes/redis-connection.js +164 -0
- package/dist/esm/classes/redis-connection.js.map +1 -0
- package/dist/esm/classes/repeat.d.ts +20 -0
- package/dist/esm/classes/repeat.js +140 -0
- package/dist/esm/classes/repeat.js.map +1 -0
- package/dist/esm/classes/sandbox.d.ts +4 -0
- package/dist/esm/classes/sandbox.js +56 -0
- package/dist/esm/classes/sandbox.js.map +1 -0
- package/dist/esm/classes/scripts.d.ts +82 -0
- package/dist/esm/classes/scripts.js +510 -0
- package/dist/esm/classes/scripts.js.map +1 -0
- package/dist/esm/classes/timer-manager.d.ts +17 -0
- package/dist/esm/classes/timer-manager.js +47 -0
- package/dist/esm/classes/timer-manager.js.map +1 -0
- package/dist/esm/classes/worker.d.ts +168 -0
- package/dist/esm/classes/worker.js +469 -0
- package/dist/esm/classes/worker.js.map +1 -0
- package/dist/esm/commands/addJob-9.lua +179 -0
- package/dist/esm/commands/changeDelay-4.lua +41 -0
- package/dist/esm/commands/cleanJobsInSet-2.lua +65 -0
- package/dist/esm/commands/drain-4.lua +36 -0
- package/dist/esm/commands/extendLock-2.lua +23 -0
- package/dist/esm/commands/getState-7.lua +63 -0
- package/dist/esm/commands/getStateV2-7.lua +51 -0
- package/dist/esm/commands/includes/destructureJobKey.lua +12 -0
- package/dist/esm/commands/includes/updateParentDepsIfNeeded.lua +19 -0
- package/dist/esm/commands/index.d.ts +4 -0
- package/dist/esm/commands/index.js +5 -0
- package/dist/esm/commands/index.js.map +1 -0
- package/dist/esm/commands/isFinished-3.lua +48 -0
- package/dist/esm/commands/isJobInList-1.lua +20 -0
- package/dist/esm/commands/moveStalledJobsToWait-8.lua +112 -0
- package/dist/esm/commands/moveToActive-8.lua +100 -0
- package/dist/esm/commands/moveToDelayed-5.lua +45 -0
- package/dist/esm/commands/moveToFinished-8.lua +159 -0
- package/dist/esm/commands/moveToWaitingChildren-4.lua +60 -0
- package/dist/esm/commands/obliterate-2.lua +129 -0
- package/dist/esm/commands/pause-4.lua +27 -0
- package/dist/esm/commands/promote-5.lua +54 -0
- package/dist/esm/commands/releaseLock-1.lua +19 -0
- package/dist/esm/commands/removeJob-1.lua +115 -0
- package/dist/esm/commands/removeRepeatable-2.lua +23 -0
- package/dist/esm/commands/reprocessJob-4.lua +32 -0
- package/dist/esm/commands/retryJob-4.lua +34 -0
- package/dist/esm/commands/script-loader.d.ts +120 -0
- package/dist/esm/commands/script-loader.js +395 -0
- package/dist/esm/commands/script-loader.js.map +1 -0
- package/dist/esm/commands/takeLock-1.lua +17 -0
- package/dist/esm/commands/updateDelaySet-7.lua +73 -0
- package/dist/esm/commands/updateProgress-2.lua +15 -0
- package/dist/esm/enums/error-codes.enum.d.ts +7 -0
- package/dist/esm/enums/error-codes.enum.js +9 -0
- package/dist/esm/enums/error-codes.enum.js.map +1 -0
- package/dist/esm/enums/index.d.ts +1 -0
- package/dist/esm/enums/index.js +2 -0
- package/dist/esm/enums/index.js.map +1 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interfaces/advanced-options.d.ts +6 -0
- package/dist/esm/interfaces/advanced-options.js +2 -0
- package/dist/esm/interfaces/advanced-options.js.map +1 -0
- package/dist/esm/interfaces/backoff-options.d.ts +15 -0
- package/dist/esm/interfaces/backoff-options.js +2 -0
- package/dist/esm/interfaces/backoff-options.js.map +1 -0
- package/dist/esm/interfaces/child-command.d.ts +5 -0
- package/dist/esm/interfaces/child-command.js +7 -0
- package/dist/esm/interfaces/child-command.js.map +1 -0
- package/dist/esm/interfaces/child-message.d.ts +6 -0
- package/dist/esm/interfaces/child-message.js +2 -0
- package/dist/esm/interfaces/child-message.js.map +1 -0
- package/dist/esm/interfaces/connection.d.ts +8 -0
- package/dist/esm/interfaces/connection.js +2 -0
- package/dist/esm/interfaces/connection.js.map +1 -0
- package/dist/esm/interfaces/flow-job.d.ts +14 -0
- package/dist/esm/interfaces/flow-job.js +2 -0
- package/dist/esm/interfaces/flow-job.js.map +1 -0
- package/dist/esm/interfaces/index.d.ts +19 -0
- package/dist/esm/interfaces/index.js +20 -0
- package/dist/esm/interfaces/index.js.map +1 -0
- package/dist/esm/interfaces/jobs-options.d.ts +91 -0
- package/dist/esm/interfaces/jobs-options.js +2 -0
- package/dist/esm/interfaces/jobs-options.js.map +1 -0
- package/dist/esm/interfaces/parent-command.d.ts +9 -0
- package/dist/esm/interfaces/parent-command.js +11 -0
- package/dist/esm/interfaces/parent-command.js.map +1 -0
- package/dist/esm/interfaces/parent-message.d.ts +8 -0
- package/dist/esm/interfaces/parent-message.js +2 -0
- package/dist/esm/interfaces/parent-message.js.map +1 -0
- package/dist/esm/interfaces/parent.d.ts +11 -0
- package/dist/esm/interfaces/parent.js +2 -0
- package/dist/esm/interfaces/parent.js.map +1 -0
- package/dist/esm/interfaces/queue-options.d.ts +72 -0
- package/dist/esm/interfaces/queue-options.js +6 -0
- package/dist/esm/interfaces/queue-options.js.map +1 -0
- package/dist/esm/interfaces/queue-scheduler-options.d.ts +23 -0
- package/dist/esm/interfaces/queue-scheduler-options.js +2 -0
- package/dist/esm/interfaces/queue-scheduler-options.js.map +1 -0
- package/dist/esm/interfaces/rate-limiter-options.d.ts +30 -0
- package/dist/esm/interfaces/rate-limiter-options.js +2 -0
- package/dist/esm/interfaces/rate-limiter-options.js.map +1 -0
- package/dist/esm/interfaces/redis-options.d.ts +5 -0
- package/dist/esm/interfaces/redis-options.js +2 -0
- package/dist/esm/interfaces/redis-options.js.map +1 -0
- package/dist/esm/interfaces/redis-streams.d.ts +4 -0
- package/dist/esm/interfaces/redis-streams.js +2 -0
- package/dist/esm/interfaces/redis-streams.js.map +1 -0
- package/dist/esm/interfaces/repeat-options.d.ts +44 -0
- package/dist/esm/interfaces/repeat-options.js +2 -0
- package/dist/esm/interfaces/repeat-options.js.map +1 -0
- package/dist/esm/interfaces/sandboxed-job-processor.d.ts +5 -0
- package/dist/esm/interfaces/sandboxed-job-processor.js +2 -0
- package/dist/esm/interfaces/sandboxed-job-processor.js.map +1 -0
- package/dist/esm/interfaces/sandboxed-job.d.ts +13 -0
- package/dist/esm/interfaces/sandboxed-job.js +2 -0
- package/dist/esm/interfaces/sandboxed-job.js.map +1 -0
- package/dist/esm/interfaces/worker-options.d.ts +32 -0
- package/dist/esm/interfaces/worker-options.js +2 -0
- package/dist/esm/interfaces/worker-options.js.map +1 -0
- package/dist/esm/tsdoc-metadata.json +11 -0
- package/dist/esm/utils.d.ts +29 -0
- package/dist/esm/utils.js +124 -0
- package/dist/esm/utils.js.map +1 -0
- package/package.json +14 -12
- package/dist/classes/backoffs.js.map +0 -1
- package/dist/classes/child-pool.js.map +0 -1
- package/dist/classes/child-processor.js.map +0 -1
- package/dist/classes/compat.js.map +0 -1
- package/dist/classes/flow-producer.js.map +0 -1
- package/dist/classes/index.js.map +0 -1
- package/dist/classes/job.js.map +0 -1
- package/dist/classes/master.js.map +0 -1
- package/dist/classes/process-utils.js.map +0 -1
- package/dist/classes/queue-base.js.map +0 -1
- package/dist/classes/queue-events.js.map +0 -1
- package/dist/classes/queue-getters.js.map +0 -1
- package/dist/classes/queue-keys.js.map +0 -1
- package/dist/classes/queue-scheduler.js.map +0 -1
- package/dist/classes/queue.js.map +0 -1
- package/dist/classes/redis-connection.js.map +0 -1
- package/dist/classes/repeat.js.map +0 -1
- package/dist/classes/sandbox.js.map +0 -1
- package/dist/classes/scripts.js.map +0 -1
- package/dist/classes/timer-manager.js.map +0 -1
- package/dist/classes/worker.js.map +0 -1
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/script-loader.js.map +0 -1
- package/dist/enums/error-codes.enum.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/interfaces/advanced-options.js.map +0 -1
- package/dist/interfaces/backoff-options.js.map +0 -1
- package/dist/interfaces/child-command.js.map +0 -1
- package/dist/interfaces/child-message.js.map +0 -1
- package/dist/interfaces/connection.js.map +0 -1
- package/dist/interfaces/index.js.map +0 -1
- package/dist/interfaces/jobs-options.js.map +0 -1
- package/dist/interfaces/parent-command.js.map +0 -1
- package/dist/interfaces/parent-message.js.map +0 -1
- package/dist/interfaces/queue-options.js.map +0 -1
- package/dist/interfaces/queue-scheduler-options.js.map +0 -1
- package/dist/interfaces/rate-limiter-options.js.map +0 -1
- package/dist/interfaces/redis-options.d.ts +0 -5
- package/dist/interfaces/redis-options.js.map +0 -1
- package/dist/interfaces/redis-streams.js.map +0 -1
- package/dist/interfaces/repeat-options.js.map +0 -1
- package/dist/interfaces/sandboxed-job-processor.js.map +0 -1
- package/dist/interfaces/sandboxed-job.js.map +0 -1
- package/dist/interfaces/worker-options.js.map +0 -1
- package/dist/utils.js.map +0 -1
@@ -0,0 +1,112 @@
|
|
1
|
+
--[[
|
2
|
+
Move stalled jobs to wait.
|
3
|
+
|
4
|
+
Input:
|
5
|
+
KEYS[1] 'stalled' (SET)
|
6
|
+
KEYS[2] 'wait', (LIST)
|
7
|
+
KEYS[3] 'active', (LIST)
|
8
|
+
KEYS[4] 'failed', (ZSET)
|
9
|
+
KEYS[5] 'stalled-check', (KEY)
|
10
|
+
|
11
|
+
KEYS[6] 'meta', (KEY)
|
12
|
+
KEYS[7] 'paused', (LIST)
|
13
|
+
|
14
|
+
KEYS[8] 'event stream' (STREAM)
|
15
|
+
|
16
|
+
ARGV[1] Max stalled job count
|
17
|
+
ARGV[2] queue.toKey('')
|
18
|
+
ARGV[3] timestamp
|
19
|
+
ARGV[4] max check time
|
20
|
+
|
21
|
+
Events:
|
22
|
+
'stalled' with stalled job id.
|
23
|
+
]]
|
24
|
+
local rcall = redis.call
|
25
|
+
|
26
|
+
local function batches(n, batchSize)
|
27
|
+
local i = 0
|
28
|
+
|
29
|
+
return function()
|
30
|
+
local from = i * batchSize + 1
|
31
|
+
i = i + 1
|
32
|
+
if (from <= n) then
|
33
|
+
local to = math.min(from + batchSize - 1, n)
|
34
|
+
return from, to
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
-- Check if we need to check for stalled jobs now.
|
40
|
+
if rcall("EXISTS", KEYS[5]) == 1 then return {{}, {}} end
|
41
|
+
|
42
|
+
rcall("SET", KEYS[5], ARGV[3], "PX", ARGV[4])
|
43
|
+
|
44
|
+
-- Move all stalled jobs to wait
|
45
|
+
local stalling = rcall('SMEMBERS', KEYS[1])
|
46
|
+
local stalled = {}
|
47
|
+
local failed = {}
|
48
|
+
if (#stalling > 0) then
|
49
|
+
|
50
|
+
local dst
|
51
|
+
-- wait or paused destination
|
52
|
+
if rcall("HEXISTS", KEYS[6], "paused") ~= 1 then
|
53
|
+
dst = KEYS[2]
|
54
|
+
else
|
55
|
+
dst = KEYS[7]
|
56
|
+
end
|
57
|
+
|
58
|
+
rcall('DEL', KEYS[1])
|
59
|
+
|
60
|
+
local MAX_STALLED_JOB_COUNT = tonumber(ARGV[1])
|
61
|
+
|
62
|
+
-- Remove from active list
|
63
|
+
for i, jobId in ipairs(stalling) do
|
64
|
+
local jobKey = ARGV[2] .. jobId
|
65
|
+
|
66
|
+
-- Check that the lock is also missing, then we can handle this job as really stalled.
|
67
|
+
if (rcall("EXISTS", jobKey .. ":lock") == 0) then
|
68
|
+
-- Remove from the active queue.
|
69
|
+
local removed = rcall("LREM", KEYS[3], 1, jobId)
|
70
|
+
|
71
|
+
if (removed > 0) then
|
72
|
+
-- If this job has been stalled too many times, such as if it crashes the worker, then fail it.
|
73
|
+
local stalledCount = rcall("HINCRBY", jobKey, "stalledCounter",
|
74
|
+
1)
|
75
|
+
if (stalledCount > MAX_STALLED_JOB_COUNT) then
|
76
|
+
local failedReason = "job stalled more than allowable limit"
|
77
|
+
rcall("ZADD", KEYS[4], ARGV[3], jobId)
|
78
|
+
rcall("HMSET", jobKey, "failedReason",
|
79
|
+
failedReason, "finishedOn", ARGV[3])
|
80
|
+
rcall("XADD", KEYS[8], "*", "event", "failed", "jobId",
|
81
|
+
jobId, 'prev', 'active', 'failedReason',
|
82
|
+
failedReason)
|
83
|
+
table.insert(failed, jobId)
|
84
|
+
else
|
85
|
+
-- Move the job back to the wait queue, to immediately be picked up by a waiting worker.
|
86
|
+
rcall("RPUSH", dst, jobId)
|
87
|
+
rcall("XADD", KEYS[8], "*", "event", "waiting", "jobId",
|
88
|
+
jobId, 'prev', 'active')
|
89
|
+
|
90
|
+
-- Emit the stalled event
|
91
|
+
rcall("XADD", KEYS[8], "*", "event", "stalled", "jobId",
|
92
|
+
jobId)
|
93
|
+
table.insert(stalled, jobId)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
-- Mark potentially stalled jobs
|
101
|
+
local active = rcall('LRANGE', KEYS[3], 0, -1)
|
102
|
+
|
103
|
+
if (#active > 0) then
|
104
|
+
for from, to in batches(#active, 7000) do
|
105
|
+
rcall('SADD', KEYS[1], unpack(active, from, to))
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
local maxEvents = rcall("HGET", KEYS[6], "opts.maxLenEvents")
|
110
|
+
if maxEvents then rcall("XTRIM", KEYS[8], "MAXLEN", "~", maxEvents) end
|
111
|
+
|
112
|
+
return {failed, stalled}
|
@@ -0,0 +1,100 @@
|
|
1
|
+
--[[
|
2
|
+
Move next job to be processed to active, lock it and fetch its data. The job
|
3
|
+
may be delayed, in that case we need to move it to the delayed set instead.
|
4
|
+
|
5
|
+
This operation guarantees that the worker owns the job during the lock
|
6
|
+
expiration time. The worker is responsible of keeping the lock fresh
|
7
|
+
so that no other worker picks this job again.
|
8
|
+
|
9
|
+
Input:
|
10
|
+
KEYS[1] wait key
|
11
|
+
KEYS[2] active key
|
12
|
+
KEYS[3] priority key
|
13
|
+
KEYS[4] stream events key
|
14
|
+
KEYS[5] stalled key
|
15
|
+
|
16
|
+
-- Rate limiting
|
17
|
+
KEYS[6] rate limiter key
|
18
|
+
KEYS[7] delayed key
|
19
|
+
|
20
|
+
-- Delay events
|
21
|
+
KEYS[8] delay stream key
|
22
|
+
|
23
|
+
-- Arguments
|
24
|
+
ARGV[1] key prefix
|
25
|
+
ARGV[2] lock token
|
26
|
+
ARGV[3] lock duration in milliseconds
|
27
|
+
ARGV[4] timestamp
|
28
|
+
ARGV[5] optional job ID
|
29
|
+
|
30
|
+
ARGV[6] optional jobs per time unit (rate limiter)
|
31
|
+
ARGV[7] optional time unit (rate limiter)
|
32
|
+
ARGV[8] optional rate limit by key
|
33
|
+
]]
|
34
|
+
|
35
|
+
local jobId
|
36
|
+
local rcall = redis.call
|
37
|
+
|
38
|
+
if(ARGV[5] ~= "") then
|
39
|
+
jobId = ARGV[5]
|
40
|
+
|
41
|
+
-- clean stalled key
|
42
|
+
rcall("SREM", KEYS[5], jobId)
|
43
|
+
else
|
44
|
+
-- no job ID, try non-blocking move from wait to active
|
45
|
+
jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2])
|
46
|
+
end
|
47
|
+
|
48
|
+
if jobId then
|
49
|
+
-- Check if we need to perform rate limiting.
|
50
|
+
local maxJobs = tonumber(ARGV[6])
|
51
|
+
|
52
|
+
if(maxJobs) then
|
53
|
+
local rateLimiterKey = KEYS[6];
|
54
|
+
|
55
|
+
if(ARGV[8]) then
|
56
|
+
local groupKey = string.match(jobId, "[^:]+$")
|
57
|
+
if groupKey ~= nil then
|
58
|
+
rateLimiterKey = rateLimiterKey .. ":" .. groupKey
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
|
63
|
+
-- check if rate limit hit
|
64
|
+
if jobCounter > maxJobs then
|
65
|
+
local exceedingJobs = jobCounter - maxJobs
|
66
|
+
local expireTime = tonumber(rcall("PTTL", rateLimiterKey))
|
67
|
+
local delay = expireTime + ((exceedingJobs - 1) * ARGV[7]) / maxJobs;
|
68
|
+
local timestamp = delay + tonumber(ARGV[4])
|
69
|
+
|
70
|
+
-- put job into delayed queue
|
71
|
+
rcall("ZADD", KEYS[7], timestamp * 0x1000 + bit.band(jobCounter, 0xfff), jobId);
|
72
|
+
rcall("XADD", KEYS[4], "*", "event", "delayed", "jobId", jobId, "delay", timestamp);
|
73
|
+
rcall("XADD", KEYS[8], "*", "nextTimestamp", timestamp);
|
74
|
+
-- remove from active queue
|
75
|
+
rcall("LREM", KEYS[2], 1, jobId)
|
76
|
+
|
77
|
+
-- Return when we can process more jobs
|
78
|
+
return expireTime
|
79
|
+
else
|
80
|
+
if jobCounter == 1 then
|
81
|
+
rcall("PEXPIRE", rateLimiterKey, ARGV[7])
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
local jobKey = ARGV[1] .. jobId
|
87
|
+
local lockKey = jobKey .. ':lock'
|
88
|
+
|
89
|
+
-- get a lock
|
90
|
+
rcall("SET", lockKey, ARGV[2], "PX", ARGV[3])
|
91
|
+
rcall("ZREM", KEYS[3], jobId) -- remove from priority
|
92
|
+
|
93
|
+
rcall("XADD", KEYS[4], "*", "event", "active", "jobId", jobId, "prev", "waiting")
|
94
|
+
|
95
|
+
rcall("HSET", jobKey, "processedOn", ARGV[4])
|
96
|
+
|
97
|
+
return {rcall("HGETALL", jobKey), jobId} -- get job data
|
98
|
+
else
|
99
|
+
rcall("XADD", KEYS[4], "*", "event", "drained");
|
100
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
--[[
|
2
|
+
Moves job from active to delayed set.
|
3
|
+
|
4
|
+
Input:
|
5
|
+
KEYS[1] active key
|
6
|
+
KEYS[2] delayed key
|
7
|
+
KEYS[3] job key
|
8
|
+
KEYS[4] events stream
|
9
|
+
KEYS[5] delayed stream
|
10
|
+
|
11
|
+
ARGV[1] delayedTimestamp
|
12
|
+
ARGV[2] the id of the job
|
13
|
+
ARGV[3] queue token
|
14
|
+
|
15
|
+
Output:
|
16
|
+
0 - OK
|
17
|
+
-1 - Missing job.
|
18
|
+
-3 - Job not in active set.
|
19
|
+
|
20
|
+
Events:
|
21
|
+
- delayed key.
|
22
|
+
]]
|
23
|
+
local rcall = redis.call
|
24
|
+
|
25
|
+
if rcall("EXISTS", KEYS[3]) == 1 then
|
26
|
+
|
27
|
+
local jobId = ARGV[2]
|
28
|
+
local score = tonumber(ARGV[1])
|
29
|
+
local delayedTimestamp = (score / 0x1000)
|
30
|
+
|
31
|
+
local numRemovedElements = rcall("LREM", KEYS[1], -1, jobId)
|
32
|
+
|
33
|
+
if(numRemovedElements < 1) then
|
34
|
+
return -3
|
35
|
+
end
|
36
|
+
|
37
|
+
rcall("ZADD", KEYS[2], score, jobId)
|
38
|
+
|
39
|
+
rcall("XADD", KEYS[4], "*", "event", "delayed", "jobId", jobId, "delay", delayedTimestamp);
|
40
|
+
rcall("XADD", KEYS[5], "*", "nextTimestamp", delayedTimestamp);
|
41
|
+
|
42
|
+
return 0
|
43
|
+
else
|
44
|
+
return -1
|
45
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
--[[
|
2
|
+
Move job from active to a finished status (completed o failed)
|
3
|
+
A job can only be moved to completed if it was active.
|
4
|
+
The job must be locked before it can be moved to a finished status,
|
5
|
+
and the lock must be released in this script.
|
6
|
+
|
7
|
+
Input:
|
8
|
+
KEYS[1] active key
|
9
|
+
KEYS[2] completed/failed key
|
10
|
+
KEYS[3] jobId key
|
11
|
+
KEYS[4] wait key
|
12
|
+
KEYS[5] priority key
|
13
|
+
KEYS[6] event stream key
|
14
|
+
KEYS[7] meta key
|
15
|
+
KEYS[8] stalled key
|
16
|
+
|
17
|
+
ARGV[1] jobId
|
18
|
+
ARGV[2] timestamp
|
19
|
+
ARGV[3] msg property
|
20
|
+
ARGV[4] return value / failed reason
|
21
|
+
ARGV[5] target (completed/failed)
|
22
|
+
ARGV[6] shouldRemove
|
23
|
+
ARGV[7] event data (? maybe just send jobid).
|
24
|
+
ARGV[8] fetch next?
|
25
|
+
ARGV[9] keys prefix
|
26
|
+
ARGV[10] lock token
|
27
|
+
ARGV[11] lock duration in milliseconds
|
28
|
+
ARGV[12] parentId
|
29
|
+
ARGV[13] parentQueue
|
30
|
+
ARGV[14] parentKey
|
31
|
+
|
32
|
+
Output:
|
33
|
+
0 OK
|
34
|
+
-1 Missing key.
|
35
|
+
-2 Missing lock.
|
36
|
+
-3 Job not in active set
|
37
|
+
-4 Job has pending dependencies
|
38
|
+
|
39
|
+
Events:
|
40
|
+
'completed/failed'
|
41
|
+
]]
|
42
|
+
local rcall = redis.call
|
43
|
+
|
44
|
+
-- Includes
|
45
|
+
--- @include "includes/updateParentDepsIfNeeded"
|
46
|
+
--- @include "includes/destructureJobKey"
|
47
|
+
|
48
|
+
local jobIdKey = KEYS[3]
|
49
|
+
if rcall("EXISTS",jobIdKey) == 1 then -- // Make sure job exists
|
50
|
+
|
51
|
+
if rcall("SCARD", jobIdKey .. ":dependencies") ~= 0 then -- // Make sure it does not have pending dependencies
|
52
|
+
return -4
|
53
|
+
end
|
54
|
+
|
55
|
+
if ARGV[10] ~= "0" then
|
56
|
+
local lockKey = jobIdKey .. ':lock'
|
57
|
+
if rcall("GET", lockKey) == ARGV[10] then
|
58
|
+
rcall("DEL", lockKey)
|
59
|
+
rcall("SREM", KEYS[8], ARGV[1])
|
60
|
+
else
|
61
|
+
return -2
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
local jobId = ARGV[1]
|
66
|
+
|
67
|
+
-- Remove from active list (if not active we shall return error)
|
68
|
+
local numRemovedElements = rcall("LREM", KEYS[1], -1, jobId)
|
69
|
+
|
70
|
+
if(numRemovedElements < 1) then
|
71
|
+
return -3
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
-- Trim events before emiting them to avoid trimming events emitted in this script
|
76
|
+
local maxEvents = rcall("HGET", KEYS[7], "opts.maxLenEvents")
|
77
|
+
if (maxEvents == false) then
|
78
|
+
maxEvents = 10000
|
79
|
+
end
|
80
|
+
rcall("XTRIM", KEYS[6], "MAXLEN", "~", maxEvents)
|
81
|
+
|
82
|
+
-- If job has a parent we need to
|
83
|
+
-- 1) remove this job id from parents dependencies
|
84
|
+
-- 2) move the job Id to parent "processed" set
|
85
|
+
-- 3) push the results into parent "results" list
|
86
|
+
-- 4) if parent's dependencies is empty, then move parent to "wait/paused". Note it may be a different queue!.
|
87
|
+
-- NOTE: Priorities not supported yet for parent jobs.
|
88
|
+
local parentId = ARGV[12]
|
89
|
+
local parentQueueKey = ARGV[13]
|
90
|
+
if parentId == "" and ARGV[14] ~= "" then
|
91
|
+
parentId = getJobIdFromKey(ARGV[14])
|
92
|
+
parentQueueKey = getJobKeyPrefix(ARGV[14], ":" .. parentId)
|
93
|
+
end
|
94
|
+
if parentId ~= "" and ARGV[5] == "completed" then
|
95
|
+
local parentKey = parentQueueKey .. ":" .. parentId
|
96
|
+
local dependenciesSet = parentKey .. ":dependencies"
|
97
|
+
local result = rcall("SREM", dependenciesSet, jobIdKey)
|
98
|
+
if result == 1 then
|
99
|
+
updateParentDepsIfNeeded(parentKey, parentQueueKey, dependenciesSet, parentId, jobIdKey, ARGV[4])
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
-- Remove job?
|
104
|
+
local removeJobs = tonumber(ARGV[6])
|
105
|
+
if removeJobs ~= 1 then
|
106
|
+
-- Add to complete/failed set
|
107
|
+
rcall("ZADD", KEYS[2], ARGV[2], jobId)
|
108
|
+
rcall("HMSET", jobIdKey, ARGV[3], ARGV[4], "finishedOn", ARGV[2]) -- "returnvalue" / "failedReason" and "finishedOn"
|
109
|
+
|
110
|
+
-- Remove old jobs?
|
111
|
+
if removeJobs and removeJobs > 1 then
|
112
|
+
local start = removeJobs - 1
|
113
|
+
local jobIds = rcall("ZREVRANGE", KEYS[2], start, -1)
|
114
|
+
for i, jobId in ipairs(jobIds) do
|
115
|
+
local jobKey = ARGV[9] .. jobId
|
116
|
+
local jobLogKey = jobKey .. ':logs'
|
117
|
+
local jobProcessedKey = jobKey .. ':processed'
|
118
|
+
rcall("DEL", jobKey, jobLogKey, jobProcessedKey)
|
119
|
+
end
|
120
|
+
rcall("ZREMRANGEBYRANK", KEYS[2], 0, -removeJobs)
|
121
|
+
end
|
122
|
+
else
|
123
|
+
local jobLogKey = jobIdKey .. ':logs'
|
124
|
+
local jobProcessedKey = jobIdKey .. ':processed'
|
125
|
+
rcall("DEL", jobIdKey, jobLogKey, jobProcessedKey)
|
126
|
+
end
|
127
|
+
|
128
|
+
rcall("XADD", KEYS[6], "*", "event", ARGV[5], "jobId", jobId, ARGV[3],
|
129
|
+
ARGV[4])
|
130
|
+
|
131
|
+
-- Try to get next job to avoid an extra roundtrip if the queue is not closing,
|
132
|
+
-- and not rate limited.
|
133
|
+
if (ARGV[8] == "1") then
|
134
|
+
-- move from wait to active
|
135
|
+
local jobId = rcall("RPOPLPUSH", KEYS[4], KEYS[1])
|
136
|
+
if jobId then
|
137
|
+
local jobKey = ARGV[9] .. jobId
|
138
|
+
local lockKey = jobKey .. ':lock'
|
139
|
+
|
140
|
+
-- get a lock
|
141
|
+
if ARGV[10] ~= "0" then
|
142
|
+
rcall("SET", lockKey, ARGV[10], "PX", ARGV[11])
|
143
|
+
end
|
144
|
+
|
145
|
+
rcall("ZREM", KEYS[5], jobId) -- remove from priority
|
146
|
+
rcall("XADD", KEYS[6], "*", "event", "active", "jobId", jobId,
|
147
|
+
"prev", "waiting")
|
148
|
+
rcall("HSET", jobKey, "processedOn", ARGV[2])
|
149
|
+
|
150
|
+
return {rcall("HGETALL", jobKey), jobId} -- get job data
|
151
|
+
else
|
152
|
+
rcall("XADD", KEYS[6], "*", "event", "drained");
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
return 0
|
157
|
+
else
|
158
|
+
return -1
|
159
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
--[[
|
2
|
+
Moves job from active to waiting children set.
|
3
|
+
|
4
|
+
Input:
|
5
|
+
KEYS[1] lock key
|
6
|
+
KEYS[2] active key
|
7
|
+
KEYS[3] waitChildrenKey key
|
8
|
+
KEYS[4] job key
|
9
|
+
|
10
|
+
ARGV[1] token
|
11
|
+
ARGV[2] child key
|
12
|
+
ARGV[3] timestamp
|
13
|
+
ARGV[4] the id of the job
|
14
|
+
|
15
|
+
Output:
|
16
|
+
0 - OK
|
17
|
+
1 - There are not pending dependencies.
|
18
|
+
-1 - Missing job.
|
19
|
+
-2 - Missing lock
|
20
|
+
-3 - Job not in active set
|
21
|
+
]]
|
22
|
+
local rcall = redis.call
|
23
|
+
|
24
|
+
local function move_to_waiting_children (activeKey, waitingChildrenKey, jobId, timestamp)
|
25
|
+
local score = tonumber(timestamp)
|
26
|
+
|
27
|
+
local numRemovedElements = rcall("LREM", activeKey, -1, jobId)
|
28
|
+
|
29
|
+
if(numRemovedElements < 1) then
|
30
|
+
return -3
|
31
|
+
end
|
32
|
+
|
33
|
+
rcall("ZADD", waitingChildrenKey, score, jobId)
|
34
|
+
|
35
|
+
return 0
|
36
|
+
end
|
37
|
+
|
38
|
+
if ARGV[1] ~= "0" then
|
39
|
+
if rcall("GET", KEYS[1]) ~= ARGV[1] then
|
40
|
+
return -2
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
if rcall("EXISTS", KEYS[4]) == 1 then
|
45
|
+
if ARGV[2] ~= "" then
|
46
|
+
if rcall("SISMEMBER", KEYS[4] .. ":dependencies", ARGV[2]) ~= 0 then
|
47
|
+
return move_to_waiting_children(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
|
48
|
+
end
|
49
|
+
|
50
|
+
return 1
|
51
|
+
else
|
52
|
+
if rcall("SCARD", KEYS[4] .. ":dependencies") ~= 0 then
|
53
|
+
return move_to_waiting_children(KEYS[2], KEYS[3], ARGV[4], ARGV[3])
|
54
|
+
end
|
55
|
+
|
56
|
+
return 1
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
return -1
|
@@ -0,0 +1,129 @@
|
|
1
|
+
--[[
|
2
|
+
Completely obliterates a queue and all of its contents
|
3
|
+
Input:
|
4
|
+
|
5
|
+
KEYS[1] meta
|
6
|
+
KEYS[2] base
|
7
|
+
|
8
|
+
ARGV[1] count
|
9
|
+
ARGV[2] force
|
10
|
+
]]
|
11
|
+
|
12
|
+
-- This command completely destroys a queue including all of its jobs, current or past
|
13
|
+
-- leaving no trace of its existence. Since this script needs to iterate to find all the job
|
14
|
+
-- keys, consider that this call may be slow for very large queues.
|
15
|
+
|
16
|
+
-- The queue needs to be "paused" or it will return an error
|
17
|
+
-- If the queue has currently active jobs then the script by default will return error,
|
18
|
+
-- however this behaviour can be overrided using the `force` option.
|
19
|
+
local maxCount = tonumber(ARGV[1])
|
20
|
+
local baseKey = KEYS[2]
|
21
|
+
|
22
|
+
local rcall = redis.call
|
23
|
+
local function getListItems(keyName, max)
|
24
|
+
return rcall('LRANGE', keyName, 0, max - 1)
|
25
|
+
end
|
26
|
+
|
27
|
+
local function getZSetItems(keyName, max)
|
28
|
+
return rcall('ZRANGE', keyName, 0, max - 1)
|
29
|
+
end
|
30
|
+
|
31
|
+
local function getSetItems(keyName, max)
|
32
|
+
return rcall('SMEMBERS', keyName, 0, max)
|
33
|
+
end
|
34
|
+
|
35
|
+
local function removeJobs(keys)
|
36
|
+
for i, key in ipairs(keys) do
|
37
|
+
local jobKey = baseKey .. key
|
38
|
+
rcall("DEL", jobKey)
|
39
|
+
rcall("DEL", jobKey .. ':logs')
|
40
|
+
rcall("DEL", jobKey .. ':dependencies')
|
41
|
+
rcall("DEL", jobKey .. ':processed')
|
42
|
+
end
|
43
|
+
maxCount = maxCount - #keys
|
44
|
+
end
|
45
|
+
|
46
|
+
local function removeListJobs(keyName, max)
|
47
|
+
local jobs = getListItems(keyName, max)
|
48
|
+
removeJobs(jobs)
|
49
|
+
rcall("LTRIM", keyName, #jobs, -1)
|
50
|
+
end
|
51
|
+
|
52
|
+
local function removeZSetJobs(keyName, max)
|
53
|
+
local jobs = getZSetItems(keyName, max)
|
54
|
+
removeJobs(jobs)
|
55
|
+
if(#jobs > 0) then
|
56
|
+
rcall("ZREM", keyName, unpack(jobs))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
local function removeLockKeys(keys)
|
61
|
+
for i, key in ipairs(keys) do
|
62
|
+
rcall("DEL", baseKey .. key .. ':lock')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
-- 1) Check if paused, if not return with error.
|
67
|
+
if rcall("HEXISTS", KEYS[1], "paused") ~= 1 then
|
68
|
+
return -1 -- Error, NotPaused
|
69
|
+
end
|
70
|
+
|
71
|
+
-- 2) Check if there are active jobs, if there are and not "force" return error.
|
72
|
+
local activeKey = baseKey .. 'active'
|
73
|
+
local activeJobs = getListItems(activeKey, maxCount)
|
74
|
+
if (#activeJobs > 0) then
|
75
|
+
if(ARGV[2] == "") then
|
76
|
+
return -2 -- Error, ExistActiveJobs
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
removeLockKeys(activeJobs)
|
81
|
+
removeJobs(activeJobs)
|
82
|
+
rcall("LTRIM", activeKey, #activeJobs, -1)
|
83
|
+
if(maxCount <= 0) then
|
84
|
+
return 1
|
85
|
+
end
|
86
|
+
|
87
|
+
local waitKey = baseKey .. 'paused'
|
88
|
+
removeListJobs(waitKey, maxCount)
|
89
|
+
if(maxCount <= 0) then
|
90
|
+
return 1
|
91
|
+
end
|
92
|
+
|
93
|
+
local delayedKey = baseKey .. 'delayed'
|
94
|
+
removeZSetJobs(delayedKey, maxCount)
|
95
|
+
if(maxCount <= 0) then
|
96
|
+
return 1
|
97
|
+
end
|
98
|
+
|
99
|
+
local completedKey = baseKey .. 'completed'
|
100
|
+
removeZSetJobs(completedKey, maxCount)
|
101
|
+
if(maxCount <= 0) then
|
102
|
+
return 1
|
103
|
+
end
|
104
|
+
|
105
|
+
local failedKey = baseKey .. 'failed'
|
106
|
+
removeZSetJobs(failedKey, maxCount)
|
107
|
+
if(maxCount <= 0) then
|
108
|
+
return 1
|
109
|
+
end
|
110
|
+
|
111
|
+
local waitingChildrenKey = baseKey .. 'waiting-children'
|
112
|
+
removeZSetJobs(waitingChildrenKey, maxCount)
|
113
|
+
if(maxCount <= 0) then
|
114
|
+
return 1
|
115
|
+
end
|
116
|
+
|
117
|
+
if(maxCount > 0) then
|
118
|
+
rcall("DEL", baseKey .. 'priority')
|
119
|
+
rcall("DEL", baseKey .. 'events')
|
120
|
+
rcall("DEL", baseKey .. 'delay')
|
121
|
+
rcall("DEL", baseKey .. 'stalled-check')
|
122
|
+
rcall("DEL", baseKey .. 'stalled')
|
123
|
+
rcall("DEL", baseKey .. 'id')
|
124
|
+
rcall("DEL", baseKey .. 'meta')
|
125
|
+
rcall("DEL", baseKey .. 'repeat')
|
126
|
+
return 0
|
127
|
+
else
|
128
|
+
return 1
|
129
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
--[[
|
2
|
+
Pauses or resumes a queue globably.
|
3
|
+
|
4
|
+
Input:
|
5
|
+
KEYS[1] 'wait' or 'paused''
|
6
|
+
KEYS[2] 'paused' or 'wait'
|
7
|
+
KEYS[3] 'meta'
|
8
|
+
KEYS[4] events stream key
|
9
|
+
|
10
|
+
ARGV[1] 'paused' or 'resumed'
|
11
|
+
|
12
|
+
Event:
|
13
|
+
publish paused or resumed event.
|
14
|
+
]]
|
15
|
+
local rcall = redis.call
|
16
|
+
|
17
|
+
if rcall("EXISTS", KEYS[1]) == 1 then
|
18
|
+
rcall("RENAME", KEYS[1], KEYS[2])
|
19
|
+
end
|
20
|
+
|
21
|
+
if ARGV[1] == "paused" then
|
22
|
+
rcall("HSET", KEYS[3], "paused", 1)
|
23
|
+
else
|
24
|
+
rcall("HDEL", KEYS[3], "paused")
|
25
|
+
end
|
26
|
+
|
27
|
+
rcall("XADD", KEYS[4], "*", "event", ARGV[1]);
|
@@ -0,0 +1,54 @@
|
|
1
|
+
--[[
|
2
|
+
Promotes a job that is currently "delayed" to the "waiting" state
|
3
|
+
|
4
|
+
Input:
|
5
|
+
KEYS[1] 'delayed'
|
6
|
+
KEYS[2] 'wait'
|
7
|
+
KEYS[3] 'paused'
|
8
|
+
KEYS[4] 'priority'
|
9
|
+
KEYS[5] 'event stream'
|
10
|
+
|
11
|
+
ARGV[1] queue.toKey('')
|
12
|
+
ARGV[2] jobId
|
13
|
+
|
14
|
+
Events:
|
15
|
+
'waiting'
|
16
|
+
]]
|
17
|
+
local rcall = redis.call;
|
18
|
+
local jobId = ARGV[2]
|
19
|
+
|
20
|
+
if redis.call("ZREM", KEYS[1], jobId) == 1 then
|
21
|
+
local priority = tonumber(rcall("HGET", ARGV[1] .. jobId, "priority")) or 0
|
22
|
+
|
23
|
+
local target = KEYS[2];
|
24
|
+
|
25
|
+
if rcall("EXISTS", KEYS[3]) == 1 then
|
26
|
+
target = KEYS[3]
|
27
|
+
end
|
28
|
+
|
29
|
+
if priority == 0 then
|
30
|
+
-- LIFO or FIFO
|
31
|
+
rcall("LPUSH", target, jobId)
|
32
|
+
else
|
33
|
+
-- Priority add
|
34
|
+
rcall("ZADD", KEYS[4], priority, jobId)
|
35
|
+
local count = rcall("ZCOUNT", KEYS[4], 0, priority)
|
36
|
+
|
37
|
+
local len = rcall("LLEN", target)
|
38
|
+
local id = rcall("LINDEX", target, len - (count - 1))
|
39
|
+
if id then
|
40
|
+
rcall("LINSERT", target, "BEFORE", id, jobId)
|
41
|
+
else
|
42
|
+
rcall("RPUSH", target, jobId)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
-- Emit waiting event (wait..ing@token)
|
47
|
+
rcall("XADD", KEYS[5], "*", "event", "waiting", "jobId", jobId, "prev", "delayed");
|
48
|
+
|
49
|
+
rcall("HSET", ARGV[1] .. jobId, "delay", 0)
|
50
|
+
|
51
|
+
return 0
|
52
|
+
else
|
53
|
+
return -3
|
54
|
+
end
|