From 05508a9757d24059928cd800e9b12643c1f98e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 14 Sep 2023 14:58:16 +0200 Subject: [PATCH] do not create duplicate db connection pools in the old backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/angry-ghosts-brush.md | 13 +++++++++++++ .changeset/thin-ladybugs-lick.md | 5 +++++ .../src/database/DatabaseManager.ts | 19 ++++++------------- packages/backend/src/index.ts | 2 +- .../default-app/packages/backend/src/index.ts | 2 +- 5 files changed, 26 insertions(+), 15 deletions(-) create mode 100644 .changeset/angry-ghosts-brush.md create mode 100644 .changeset/thin-ladybugs-lick.md diff --git a/.changeset/angry-ghosts-brush.md b/.changeset/angry-ghosts-brush.md new file mode 100644 index 0000000000..e1f3d7bc04 --- /dev/null +++ b/.changeset/angry-ghosts-brush.md @@ -0,0 +1,13 @@ +--- +'@backstage/create-app': patch +--- + +Updated the backend template to no longer create duplicate connection pools to plugins that use the task scheduler. + +To apply this change in your own repository, perform the following small update: + +```diff +// in packages/backend/src/index.ts +- const taskScheduler = TaskScheduler.fromConfig(config); ++ const taskScheduler = TaskScheduler.fromConfig(config, { databaseManager }); +``` diff --git a/.changeset/thin-ladybugs-lick.md b/.changeset/thin-ladybugs-lick.md new file mode 100644 index 0000000000..41707e22d0 --- /dev/null +++ b/.changeset/thin-ladybugs-lick.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Minor internal refactor diff --git a/packages/backend-common/src/database/DatabaseManager.ts b/packages/backend-common/src/database/DatabaseManager.ts index db5d36afad..4b655512bb 100644 --- a/packages/backend-common/src/database/DatabaseManager.ts +++ b/packages/backend-common/src/database/DatabaseManager.ts @@ -56,13 +56,14 @@ export type DatabaseManagerOptions = { /** * Manages database connections for Backstage backend plugins. * + * @public + * @remarks + * * The database manager allows the user to set connection and client settings on * a per pluginId basis by defining a database config block under * `plugin.` in addition to top level defaults. Optionally, a user may * set `prefix` which is used to prefix generated database names if config is * not provided. - * - * @public */ export class DatabaseManager { /** @@ -105,17 +106,9 @@ export class DatabaseManager { pluginMetadata: PluginMetadataService; }, ): PluginDatabaseManager { - const _this = this; - - return { - getClient(): Promise { - return _this.getDatabase(pluginId, deps); - }, - migrations: { - skip: false, - ..._this.options?.migrations, - }, - }; + const getClient = () => this.getDatabase(pluginId, deps); + const migrations = { skip: false, ...this.options?.migrations }; + return { getClient, migrations }; } /** diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 54f0f98e41..b22f7d2983 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -93,7 +93,7 @@ function makeCreateEnv(config: Config) { }); const databaseManager = DatabaseManager.fromConfig(config, { logger: root }); const cacheManager = CacheManager.fromConfig(config); - const taskScheduler = TaskScheduler.fromConfig(config); + const taskScheduler = TaskScheduler.fromConfig(config, { databaseManager }); const identity = DefaultIdentityClient.create({ discovery, }); diff --git a/packages/create-app/templates/default-app/packages/backend/src/index.ts b/packages/create-app/templates/default-app/packages/backend/src/index.ts index 1c08288675..04c4ff9392 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/index.ts +++ b/packages/create-app/templates/default-app/packages/backend/src/index.ts @@ -39,7 +39,7 @@ function makeCreateEnv(config: Config) { const cacheManager = CacheManager.fromConfig(config); const databaseManager = DatabaseManager.fromConfig(config, { logger: root }); const tokenManager = ServerTokenManager.noop(); - const taskScheduler = TaskScheduler.fromConfig(config); + const taskScheduler = TaskScheduler.fromConfig(config, { databaseManager }); const identity = DefaultIdentityClient.create({ discovery,