From c66739c420b8bf8127a85674566f3dfba78e65d8 Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Wed, 13 Nov 2019 19:06:37 -0800 Subject: [PATCH] Send Connection: close header on shut down --- bin/genieacs-fs | 12 +++++++++++- bin/genieacs-nbi | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/bin/genieacs-fs b/bin/genieacs-fs index affbd3d..75244bd 100755 --- a/bin/genieacs-fs +++ b/bin/genieacs-fs @@ -80,6 +80,8 @@ if (!cluster.worker) { cert: config.get("FS_SSL_CERT") }; + let stopping = false; + process.on("uncaughtException", err => { if ((err as NodeJS.ErrnoException).code === "ERR_IPC_DISCONNECTED") return; logger.error({ @@ -87,15 +89,21 @@ if (!cluster.worker) { exception: err, pid: process.pid }); + stopping = true; server .stop() .then(exitWorkerGracefully) .catch(exitWorkerUngracefully); }); + const _listener = (req, res): void => { + if (stopping) res.setHeader("Connection", "close"); + listener(req, res); + }; + const initPromise = Promise.all([db.connect(), cache.connect()]) .then(() => { - server.start(SERVICE_PORT, SERVICE_ADDRESS, ssl, listener); + server.start(SERVICE_PORT, SERVICE_ADDRESS, ssl, _listener); }) .catch(err => { setTimeout(() => { @@ -104,6 +112,7 @@ if (!cluster.worker) { }); process.on("SIGINT", () => { + stopping = true; initPromise.finally(() => { server .stop() @@ -113,6 +122,7 @@ if (!cluster.worker) { }); process.on("SIGTERM", () => { + stopping = true; initPromise.finally(() => { server .stop() diff --git a/bin/genieacs-nbi b/bin/genieacs-nbi index 512d3cc..80a555e 100755 --- a/bin/genieacs-nbi +++ b/bin/genieacs-nbi @@ -84,6 +84,8 @@ if (!cluster.worker) { cert: config.get("NBI_SSL_CERT") }; + let stopping = false; + process.on("uncaughtException", err => { if ((err as NodeJS.ErrnoException).code === "ERR_IPC_DISCONNECTED") return; logger.error({ @@ -91,15 +93,21 @@ if (!cluster.worker) { exception: err, pid: process.pid }); + stopping = true; server .stop() .then(exitWorkerGracefully) .catch(exitWorkerUngracefully); }); + const _listener = (req, res): void => { + if (stopping) res.setHeader("Connection", "close"); + listener(req, res); + }; + const initPromise = Promise.all([db.connect(), cache.connect()]) .then(() => { - server.start(SERVICE_PORT, SERVICE_ADDRESS, ssl, listener); + server.start(SERVICE_PORT, SERVICE_ADDRESS, ssl, _listener); }) .catch(err => { setTimeout(() => { @@ -108,6 +116,7 @@ if (!cluster.worker) { }); process.on("SIGINT", () => { + stopping = true; initPromise.finally(() => { server .stop() @@ -117,6 +126,7 @@ if (!cluster.worker) { }); process.on("SIGTERM", () => { + stopping = true; initPromise.finally(() => { server .stop()