diff --git a/backend/src/auto-start-migrations.ts b/backend/src/auto-start-migrations.ts index 38c30366d..28f66e20e 100644 --- a/backend/src/auto-start-migrations.ts +++ b/backend/src/auto-start-migrations.ts @@ -87,7 +87,8 @@ export const runMigrations = async ({ applicationDb, auditLogDb, logger, onMigra await applicationDb.transaction(async (tx) => { await tx.raw("SELECT pg_advisory_xact_lock(?)", [PgSqlLock.BootUpMigration]); - // Signal that this container is running migrations + // Signal that this container is running migrations so that it can be marked as healthy/alive + // This is to prevent the container from being killed by the orchestrator if (onMigrationLockAcquired) { onMigrationLockAcquired(); } diff --git a/backend/src/main.ts b/backend/src/main.ts index d680fc006..9d7812c96 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -86,7 +86,6 @@ const run = async () => { envConfig }); - // Setup signal handlers // eslint-disable-next-line process.on("SIGINT", async () => { await server.close(); @@ -117,7 +116,6 @@ const run = async () => { }); } - // Start listening BEFORE migrations await server.listen({ port: envConfig.PORT, host: envConfig.HOST @@ -144,7 +142,6 @@ const run = async () => { logger.info("Migrations complete. Marking server as READY..."); - // Now mark server as ready - it can accept traffic markServerReady(); logger.info("Server is ready to accept traffic"); diff --git a/backend/src/server/app.ts b/backend/src/server/app.ts index 2de20ab46..daf49ed10 100644 --- a/backend/src/server/app.ts +++ b/backend/src/server/app.ts @@ -38,11 +38,9 @@ import { registerServeUI } from "./plugins/serve-ui"; import { fastifySwagger } from "./plugins/swagger"; import { registerRoutes } from "./routes"; -// Monitor event loop for readiness checks const histogram = monitorEventLoopDelay({ resolution: 20 }); histogram.enable(); -// Server state tracking const serverState = { isReady: false, isRunningMigrations: false, @@ -171,7 +169,6 @@ export const main = async ({ }); // Global preHandler to block requests during migrations - // Excludes /api/health and /api/ready endpoints server.addHook("preHandler", async (request, reply) => { if (request.url === "/api/health" || request.url === "/api/ready") { return; @@ -188,7 +185,6 @@ export const main = async ({ server.get("/api/ready", async (request, reply) => { const cfg = getConfig(); - // Calculate event loop statistics const meanLagMs = histogram.mean / 1e6; const maxLagMs = histogram.max / 1e6; const p99LagMs = histogram.percentile(99) / 1e6; @@ -252,7 +248,6 @@ export const main = async ({ } }; -// Functions to manage server state export const markServerReady = () => { serverState.isReady = true; serverState.isRunningMigrations = false;