Skip to content

Commit 4f38552

Browse files
authored
chore: graceful shutdown (#1027)
* chore: graceful shutdown * lint fix * change log
1 parent f6777f4 commit 4f38552

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/helpers/mysql.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,15 @@ const sequencerDB = mysql.createPool(sequencerConfig);
3737

3838
bluebird.promisifyAll([Pool, Connection]);
3939

40+
export const closeDatabase = (): Promise<void> => {
41+
return new Promise(resolve => {
42+
hubDB.end(() => {
43+
sequencerDB.end(() => {
44+
log.info('[mysql] Database connection pools closed');
45+
resolve();
46+
});
47+
});
48+
});
49+
};
50+
4051
export { hubDB as default, sequencerDB };

src/index.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import graphql from './graphql';
88
import { checkKeycard } from './helpers/keycard';
99
import log from './helpers/log';
1010
import initMetrics from './helpers/metrics';
11+
import { closeDatabase } from './helpers/mysql';
1112
import rateLimit from './helpers/rateLimit';
1213
import refreshSpacesCache from './helpers/spaces';
1314
import './helpers/strategies';
@@ -32,4 +33,26 @@ app.use('/graphql', graphql);
3233
fallbackLogger(app);
3334
app.get('/*', (req, res) => res.redirect('/api'));
3435

35-
app.listen(PORT, () => log.info(`Started on: http://localhost:${PORT}`));
36+
const server = app.listen(PORT, () =>
37+
log.info(`Started on: http://localhost:${PORT}`)
38+
);
39+
40+
const gracefulShutdown = async (signal: string) => {
41+
log.info(`Received ${signal}. Starting graceful shutdown...`);
42+
43+
server.close(async () => {
44+
log.info('Express server closed.');
45+
46+
try {
47+
await closeDatabase();
48+
log.info('Graceful shutdown completed.');
49+
process.exit(0);
50+
} catch (error) {
51+
log.error('Error during shutdown:', error);
52+
process.exit(1);
53+
}
54+
});
55+
};
56+
57+
process.on('SIGINT', () => gracefulShutdown('SIGINT'));
58+
process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));

0 commit comments

Comments
 (0)