diff options
| author | Kagami Sascha Rosylight <saschanaz@outlook.com> | 2024-01-08 04:28:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-08 12:28:13 +0900 |
| commit | 0c2118e9630939eb709c84049bdc8e0fbae8ec11 (patch) | |
| tree | 46fcbd78dfabc5e7062db6826207f3fc34c93d61 /packages/backend/src/GlobalModule.ts | |
| parent | refactor(frontend): extract game engine from vue component (diff) | |
| download | sharkey-0c2118e9630939eb709c84049bdc8e0fbae8ec11.tar.gz sharkey-0c2118e9630939eb709c84049bdc8e0fbae8ec11.tar.bz2 sharkey-0c2118e9630939eb709c84049bdc8e0fbae8ec11.zip | |
refactor: make sure promises are settled before app shutdown (#12942)
👍
Diffstat (limited to 'packages/backend/src/GlobalModule.ts')
| -rw-r--r-- | packages/backend/src/GlobalModule.ts | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/packages/backend/src/GlobalModule.ts b/packages/backend/src/GlobalModule.ts index 3e9d19f825..c83845b94c 100644 --- a/packages/backend/src/GlobalModule.ts +++ b/packages/backend/src/GlobalModule.ts @@ -3,7 +3,6 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -import { setTimeout } from 'node:timers/promises'; import { Global, Inject, Module } from '@nestjs/common'; import * as Redis from 'ioredis'; import { DataSource } from 'typeorm'; @@ -12,6 +11,7 @@ import { DI } from './di-symbols.js'; import { Config, loadConfig } from './config.js'; import { createPostgresDataSource } from './postgres.js'; import { RepositoryModule } from './models/RepositoryModule.js'; +import { allSettled } from './misc/promise-tracker.js'; import type { Provider, OnApplicationShutdown } from '@nestjs/common'; const $config: Provider = { @@ -33,7 +33,7 @@ const $meilisearch: Provider = { useFactory: (config: Config) => { if (config.meilisearch) { return new MeiliSearch({ - host: `${config.meilisearch.ssl ? 'https' : 'http' }://${config.meilisearch.host}:${config.meilisearch.port}`, + host: `${config.meilisearch.ssl ? 'https' : 'http'}://${config.meilisearch.host}:${config.meilisearch.port}`, apiKey: config.meilisearch.apiKey, }); } else { @@ -91,17 +91,12 @@ export class GlobalModule implements OnApplicationShutdown { @Inject(DI.redisForPub) private redisForPub: Redis.Redis, @Inject(DI.redisForSub) private redisForSub: Redis.Redis, @Inject(DI.redisForTimelines) private redisForTimelines: Redis.Redis, - ) {} + ) { } public async dispose(): Promise<void> { - if (process.env.NODE_ENV === 'test') { - // XXX: - // Shutting down the existing connections causes errors on Jest as - // Misskey has asynchronous postgres/redis connections that are not - // awaited. - // Let's wait for some random time for them to finish. - await setTimeout(5000); - } + // Wait for all potential DB queries + await allSettled(); + // And then disconnect from DB await Promise.all([ this.db.destroy(), this.redisClient.disconnect(), |