From 14a4e7673da6517cfbfed2c2575a547542e10bb2 Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Fri, 5 Jul 2024 10:36:32 +0100 Subject: [PATCH] Merge pull request #16675 from overleaf/bg-clsi-timeout-filestore-graceful-shutdown-part-ii Extend filestore graceful shutdown GitOrigin-RevId: 26cb556c289e153089236dee51ec0e86a9e9d5d0 --- services/filestore/app.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/services/filestore/app.js b/services/filestore/app.js index b01d5a2200..149417d366 100644 --- a/services/filestore/app.js +++ b/services/filestore/app.js @@ -161,9 +161,10 @@ app.use(RequestLogger.errorHandler) const port = settings.internal.filestore.port || 3009 const host = settings.internal.filestore.host || '0.0.0.0' +let server = null if (!module.parent) { // Called directly - app.listen(port, host, error => { + server = app.listen(port, host, error => { if (error) { logger.error({ err: error }, 'Error starting Filestore') throw error @@ -189,10 +190,22 @@ function handleShutdownSignal(signal) { } settings.shuttingDown = true settings.shutDownTime = Date.now() - setTimeout(() => { - logger.info({ signal }, 'shutting down') + // stop accepting new connections, the callback is called when existing connections have finished + server.close(() => { + logger.info({ signal }, 'server closed') process.exit() - }, settings.gracefulShutdownDelayInMs) + }) + // close idle http keep-alive connections + server.closeIdleConnections() + setTimeout(() => { + logger.info({ signal }, 'shutdown timed out, exiting') + // close all connections immediately + server.closeAllConnections() + // exit after a short delay to allow for cleanup + setTimeout(() => { + process.exit() + }, 100) + }, settings.delayShutdownMs) } process.on('SIGTERM', handleShutdownSignal)