UNPKG

redis-smq-common

Version:

Provides essential components and utilities shared across RedisSMQ packages.

71 lines 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RunnableWorker = void 0; const index_js_1 = require("../power-switch/index.js"); const index_js_2 = require("./errors/index.js"); const index_js_3 = require("./types/index.js"); const worker_js_1 = require("./worker.js"); class RunnableWorker extends worker_js_1.Worker { constructor(workerFilename, initialPayload, logger) { super(workerFilename, initialPayload, logger); this.type = index_js_3.EWorkerType.RUNNABLE; this.powerSwitch = new index_js_1.PowerSwitch(); this.logger.debug(`RunnableWorker instance created for ${workerFilename}`); } run(cb) { this.logger.debug(`Attempting to run worker ${this.id}`); const r = this.powerSwitch.goingUp(); if (r) { this.logger.debug('Power switch state changed to going up'); const message = { type: index_js_3.EWorkerThreadParentMessage.RUN, }; this.logger.debug('Posting RUN message to worker thread (fire-and-forget)'); try { this.postMessage(message); this.powerSwitch.commit(); this.logger.debug(`Worker ${this.id} started successfully (fire-and-forget)`); cb(null); } catch (err) { const error = err instanceof Error ? err : new Error('Unknown error'); this.logger.error(`Worker failed to start: ${error.message}`, { error: error.message, stack: error.stack, }); this.powerSwitch.rollback(); cb(error); } } else { this.logger.warn(`Cannot start worker ${this.id}: already running`); cb(new index_js_2.WorkerAlreadyRunningError()); } } shutdown(cb) { this.logger.debug(`Attempting to shut down worker ${this.id}`); const r = this.powerSwitch.goingDown(); if (r) { this.logger.debug('Power switch state changed to going down'); this.logger.debug('Calling parent shutdown method'); super.shutdown((err) => { if (err) { this.logger.warn(`Error during worker ${this.id} shutdown: ${err.message}`, { error: err.message, stack: err.stack, }); } this.logger.debug('Committing power switch state change'); this.powerSwitch.commit(); this.logger.debug(`Worker ${this.id} shut down successfully`); cb(null); }); } else { this.logger.warn(`Cannot shut down worker ${this.id}: already down`); cb(new index_js_2.WorkerAlreadyDownError()); } } } exports.RunnableWorker = RunnableWorker; //# sourceMappingURL=runnable-worker.js.map