UNPKG

redis-smq

Version:

A high-performance, reliable, and scalable message queue for Node.js.

56 lines 3.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RecoverOrphanedQueueLockWorker = void 0; const queue_worker_abstract_js_1 = require("../queue-worker-abstract.js"); const redis_smq_common_1 = require("redis-smq-common"); const _get_queue_state_js_1 = require("../../../../queue-state-manager/_/_get-queue-state.js"); const with_shared_pool_connection_js_1 = require("../../../../common/redis/redis-connection-pool/with-shared-pool-connection.js"); const index_js_1 = require("../../../../queue-state-manager/index.js"); const index_js_2 = require("../../../../queue-manager/index.js"); const purge_queue_job_manager_js_1 = require("../../../../common/background-jobs/jobs/purge-queue/purge-queue-job-manager.js"); const _unlock_queue_js_1 = require("../../../../queue-state-manager/_/_unlock-queue.js"); class RecoverOrphanedQueueLockWorker extends queue_worker_abstract_js_1.QueueWorkerAbstract { work(cb) { (0, with_shared_pool_connection_js_1.withSharedPoolConnection)((client, cb) => { const queue = this.queueParsedParams.queueParams; redis_smq_common_1.async.waterfall([ (next) => (0, _get_queue_state_js_1._getQueueState)(client, this.queueParsedParams.queueParams, next), (state, next) => { if (state.to !== index_js_2.EQueueOperationalState.LOCKED) return next(); if (state.lockOwner === index_js_1.EQueueStateLockOwner.PURGE_JOB) { const purgeQueueJobManager = new purge_queue_job_manager_js_1.PurgeQueueJobManager(client, this.logger); const jobId = String(state.lockId); purgeQueueJobManager.hasTerminationStatus(jobId, (err, r) => { if (err) return next(err); if (r) { this.logger.debug(`Recovering queue ${queue.name}@${queue.ns} from orphaned locked state...`); (0, _unlock_queue_js_1._unlockQueue)(queue, index_js_1.EQueueStateLockOwner.PURGE_JOB, jobId, { reason: index_js_1.ESystemStateTransitionReason.RECOVERY, }, this.logger, (err) => { if (err) { this.logger.error(`Failed to unlock queue: ${err.message}`); } else { this.logger.info(`Successfully recovered queue ${queue.name}@${queue.ns} from orphaned locked state.`); } next(err); }); } else { next(); } }); } else { next(); } }, ], cb); }, cb); } } exports.RecoverOrphanedQueueLockWorker = RecoverOrphanedQueueLockWorker; exports.default = RecoverOrphanedQueueLockWorker; //# sourceMappingURL=recover-orphaned-queue-lock.worker.js.map