From 571926ecfa01aed40647b6d4b1b6173e18d1e939 Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Mon, 29 Dec 2025 15:54:22 -0500 Subject: [PATCH] feat: add graceful shutdown handling to WorkerService --- src/services/worker-service.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/services/worker-service.ts b/src/services/worker-service.ts index e8150436..8f46ee78 100644 --- a/src/services/worker-service.ts +++ b/src/services/worker-service.ts @@ -250,6 +250,7 @@ export class WorkerService { // Initialization flags for MCP/SDK readiness tracking private mcpReady: boolean = false; private initializationCompleteFlag: boolean = false; + private isShuttingDown: boolean = false; // Service layer private dbManager: DatabaseManager; @@ -595,6 +596,27 @@ export class WorkerService { logger.info('SYSTEM', 'Worker started', { host, port, pid: process.pid }); + // Register signal handlers to ensure cleanup on exit + const handleShutdown = async (signal: string) => { + if (this.isShuttingDown) { + logger.warn('SYSTEM', `Received ${signal} but shutdown already in progress`); + return; + } + this.isShuttingDown = true; + + logger.info('SYSTEM', `Received ${signal}, shutting down...`); + try { + await this.shutdown(); + process.exit(0); + } catch (error) { + logger.error('SYSTEM', 'Error during shutdown', {}, error as Error); + process.exit(1); + } + }; + + process.on('SIGTERM', () => handleShutdown('SIGTERM')); + process.on('SIGINT', () => handleShutdown('SIGINT')); + // Do slow initialization in background (non-blocking) this.initializeBackground().catch((error) => { logger.error('SYSTEM', 'Background initialization failed', {}, error as Error);