diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.ts b/packages/backend-app-api/src/wiring/BackendInitializer.ts index e580109987..3ea1200898 100644 --- a/packages/backend-app-api/src/wiring/BackendInitializer.ts +++ b/packages/backend-app-api/src/wiring/BackendInitializer.ts @@ -408,19 +408,18 @@ export class BackendInitializer { } // Get all plugins. - const pluginMap = new Map(); + const allPlugins = new Set(); for (const feature of this.#registrations) { for (const r of feature.getRegistrations()) { if (r.type === 'plugin') { - pluginMap.set(r.pluginId, true); + allPlugins.add(r.pluginId); } } } - const allPluginIds = Array.from(pluginMap.keys()); // Iterate through all plugins and run their shutdown hooks. await Promise.allSettled( - allPluginIds.map(async pluginId => { + [...allPlugins].map(async pluginId => { const lifecycleService = await this.#getPluginLifecycleImpl(pluginId); await lifecycleService.shutdown(); }), @@ -466,7 +465,11 @@ export class BackendInitializer { ); const service = lifecycleService as any; - if (service && typeof service.startup === 'function') { + if ( + service && + typeof service.startup === 'function' && + typeof service.shutdown === 'function' + ) { return service; } diff --git a/packages/backend-defaults/src/entrypoints/database/DatabaseManager.ts b/packages/backend-defaults/src/entrypoints/database/DatabaseManager.ts index 6ed5545d35..ff95c0562a 100644 --- a/packages/backend-defaults/src/entrypoints/database/DatabaseManager.ts +++ b/packages/backend-defaults/src/entrypoints/database/DatabaseManager.ts @@ -94,7 +94,7 @@ export class DatabaseManagerImpl { */ async shutdown(deps: { logger: LoggerService }): Promise { const pluginIds = Array.from(this.databaseCache.keys()); - await Promise.all( + await Promise.allSettled( pluginIds.map(async pluginId => { const connection = await this.databaseCache.get(pluginId); if (connection) { diff --git a/packages/backend-defaults/src/entrypoints/lifecycle/lifecycleServiceFactory.ts b/packages/backend-defaults/src/entrypoints/lifecycle/lifecycleServiceFactory.ts index 02195d0cd0..0ba812f5b4 100644 --- a/packages/backend-defaults/src/entrypoints/lifecycle/lifecycleServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/lifecycle/lifecycleServiceFactory.ts @@ -111,7 +111,7 @@ export class BackendPluginLifecycleImpl implements LifecycleService { await hook(); logger.debug(`Plugin shutdown hook succeeded`); } catch (error) { - logger.error(`Plugin shutdown hook failed, ${error}`); + logger.error('Plugin shutdown hook failed', error); } }), );