From 770d3f92c4000b57cd8df45d7ba0d4c0337f2c6d Mon Sep 17 00:00:00 2001 From: Andrew Duckett Date: Thu, 21 Jul 2022 22:21:53 -0500 Subject: [PATCH] respect `ensureExists` when `pluginDivisionMode` is set to `schema`. Signed-off-by: Andrew Duckett --- .changeset/purple-apricots-build.md | 5 ++++ .../src/database/DatabaseManager.test.ts | 25 +++++++++++++++++++ .../src/database/DatabaseManager.ts | 16 ++++++------ 3 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 .changeset/purple-apricots-build.md diff --git a/.changeset/purple-apricots-build.md b/.changeset/purple-apricots-build.md new file mode 100644 index 0000000000..aa4f2fa4b5 --- /dev/null +++ b/.changeset/purple-apricots-build.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +**BREAKING** The config prop `ensureExists` now applies to schema creation when `pluginDivisionMode` is set to `schema`. This means schemas will no longer be automatically created when `ensureExists` is set to `false`. In this case the `pg` database as well as each `schema` must be created out of band. diff --git a/packages/backend-common/src/database/DatabaseManager.test.ts b/packages/backend-common/src/database/DatabaseManager.test.ts index ea8aca38ea..9e8af44fc0 100644 --- a/packages/backend-common/src/database/DatabaseManager.test.ts +++ b/packages/backend-common/src/database/DatabaseManager.test.ts @@ -612,6 +612,31 @@ describe('DatabaseManager', () => { ); }); + it('ensureExists does not create database or schema when false', async () => { + const testManager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { + client: 'pg', + pluginDivisionMode: 'schema', + ensureExists: false, + connection: { + host: 'localhost', + user: 'foo', + password: 'bar', + database: 'foodb', + }, + }, + }, + }), + ); + const pluginId = 'testdbname'; + await testManager.forPlugin(pluginId).getClient(); + + expect(mocked(ensureDatabaseExists)).toHaveBeenCalledTimes(0); + expect(mocked(ensureSchemaExists)).toHaveBeenCalledTimes(0); + }); + it('fetches and merges additional knex config', async () => { const testManager = DatabaseManager.fromConfig( new ConfigReader({ diff --git a/packages/backend-common/src/database/DatabaseManager.ts b/packages/backend-common/src/database/DatabaseManager.ts index 004e7d13cd..39ff864f8c 100644 --- a/packages/backend-common/src/database/DatabaseManager.ts +++ b/packages/backend-common/src/database/DatabaseManager.ts @@ -321,13 +321,15 @@ export class DatabaseManager { let schemaOverrides; if (this.getPluginDivisionModeConfig() === 'schema') { - try { - schemaOverrides = this.getSchemaOverrides(pluginId); - await ensureSchemaExists(pluginConfig, pluginId); - } catch (error) { - throw new Error( - `Failed to connect to the database to make sure that schema for plugin '${pluginId}' exists, ${error}`, - ); + schemaOverrides = this.getSchemaOverrides(pluginId); + if (this.getEnsureExistsConfig(pluginId)) { + try { + await ensureSchemaExists(pluginConfig, pluginId); + } catch (error) { + throw new Error( + `Failed to connect to the database to make sure that schema for plugin '${pluginId}' exists, ${error}`, + ); + } } }