From ee142d3d7c4b5e99c1ffd19b62bcaa173983dc84 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Thu, 18 Jan 2024 12:00:13 +0800 Subject: [PATCH] Handle SIGINT in server better by moving DB call to after redis shutdown --- packages/api/src/redis_data_source.ts | 2 +- packages/api/src/server.ts | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/api/src/redis_data_source.ts b/packages/api/src/redis_data_source.ts index c105b3f56..555ad783c 100644 --- a/packages/api/src/redis_data_source.ts +++ b/packages/api/src/redis_data_source.ts @@ -36,7 +36,7 @@ export class RedisDataSource { async shutdown(): Promise { this.isInitialized = false try { - await this.workerRedisClient?.disconnect() + await this.workerRedisClient?.quit() await this.redisClient?.quit() } catch (err) { console.error('error while shutting down redis') diff --git a/packages/api/src/server.ts b/packages/api/src/server.ts index 3a3b538ce..e52b0312b 100755 --- a/packages/api/src/server.ts +++ b/packages/api/src/server.ts @@ -190,12 +190,14 @@ const main = async (): Promise => { listener.timeout = 640 * 1000 // match headersTimeout process.on('SIGINT', async () => { - await appDataSource.destroy() - console.log('DB connection closed.') - + // Shutdown redis before DB because the quit sequence can + // cause appDataSource to get reloaded in the callback await redisDataSource.shutdown() console.log('Redis connection closed.') + await appDataSource.destroy() + console.log('DB connection closed.') + process.exit(0) }) }