From 860eae8dcb9832202c02c1a9c927fa93170ecb1d Mon Sep 17 00:00:00 2001 From: Morgan <33722304+ThyMinimalDev@users.noreply.github.com> Date: Fri, 13 Jun 2025 13:05:00 +0300 Subject: [PATCH] fix: ensure failed apiv2 slots workers are terminated (#21797) * fix: ensure failed apiv2 slots workers are terminated * fixup! fix: ensure failed apiv2 slots workers are terminated --- .../services/slots-worker.service.ts | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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();