Skip to content

Commit 860eae8

Browse files
fix: ensure failed apiv2 slots workers are terminated (calcom#21797)
* fix: ensure failed apiv2 slots workers are terminated * fixup! fix: ensure failed apiv2 slots workers are terminated
1 parent b931d3e commit 860eae8

1 file changed

Lines changed: 19 additions & 1 deletion

File tree

apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-worker.service.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ interface WorkerResult {
3232

3333
@Injectable()
3434
export class SlotsWorkerService_2024_04_15 implements OnModuleDestroy {
35-
private readonly logger = new Logger(SlotsWorkerService_2024_04_15.name);
35+
private readonly logger = new Logger("SlotsWorkerService_2024_04_15");
3636
private readonly workerPool: Worker[] = [];
3737
private readonly maxWorkers: number;
3838
private readonly taskQueue: Array<{
@@ -94,9 +94,27 @@ export class SlotsWorkerService_2024_04_15 implements OnModuleDestroy {
9494
*/
9595
private handleWorkerFailure(failedWorker: Worker): void {
9696
// Remove the failed worker from both pools
97+
this.logger.error(`Handling Worker ${failedWorker.threadId} failure`);
9798
this.workerPool.splice(this.workerPool.indexOf(failedWorker), 1);
9899
this.availableWorkers = this.availableWorkers.filter((w) => w !== failedWorker);
99100

101+
try {
102+
failedWorker
103+
.terminate()
104+
.then(() => {
105+
this.logger.log(`Terminated failed worker ${failedWorker.threadId}`);
106+
})
107+
.catch((err) => {
108+
this.logger.error(`Error terminating failed worker ${failedWorker.threadId}: ${err?.message}`);
109+
});
110+
} catch (error) {
111+
this.logger.error(
112+
`Failed to invoke terminate method on failed worker ${failedWorker.threadId}: ${
113+
error instanceof Error ? error.message : String(error)
114+
}`
115+
);
116+
}
117+
100118
// Attempt to create a new worker to replace the failed one
101119
try {
102120
this.createNewWorker();

0 commit comments

Comments
 (0)