diff --git a/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-worker.service.ts b/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-worker.service.ts index 488bdc0e73..f6b381c7ba 100644 --- a/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-worker.service.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-worker.service.ts @@ -32,7 +32,7 @@ interface WorkerResult { @Injectable() export class SlotsWorkerService_2024_04_15 implements OnModuleDestroy { - private readonly logger = new Logger(SlotsWorkerService_2024_04_15.name); + private readonly logger = new Logger("SlotsWorkerService_2024_04_15"); private readonly workerPool: Worker[] = []; private readonly maxWorkers: number; private readonly taskQueue: Array<{ @@ -94,9 +94,27 @@ export class SlotsWorkerService_2024_04_15 implements OnModuleDestroy { */ private handleWorkerFailure(failedWorker: Worker): void { // Remove the failed worker from both pools + this.logger.error(`Handling Worker ${failedWorker.threadId} failure`); this.workerPool.splice(this.workerPool.indexOf(failedWorker), 1); this.availableWorkers = this.availableWorkers.filter((w) => w !== failedWorker); + try { + failedWorker + .terminate() + .then(() => { + this.logger.log(`Terminated failed worker ${failedWorker.threadId}`); + }) + .catch((err) => { + this.logger.error(`Error terminating failed worker ${failedWorker.threadId}: ${err?.message}`); + }); + } catch (error) { + this.logger.error( + `Failed to invoke terminate method on failed worker ${failedWorker.threadId}: ${ + error instanceof Error ? error.message : String(error) + }` + ); + } + // Attempt to create a new worker to replace the failed one try { this.createNewWorker();