diff --git a/keyserver/src/database/database.js b/keyserver/src/database/database.js --- a/keyserver/src/database/database.js +++ b/keyserver/src/database/database.js @@ -13,6 +13,22 @@ const SQLStatement: SQLStatementType = SQL.SQLStatement; +let migrationConnection; +async function getMigrationConnection() { + const scriptContext = getScriptContext(); + const dbConfig = await getDBConfig(); + if (migrationConnection) { + return migrationConnection; + } + migrationConnection = await mysqlPromise.createConnection({ + ...dbConfig, + multipleStatements: !!( + scriptContext && scriptContext.allowMultiStatementSQLQueries + ), + }); + return migrationConnection; +} + let pool, databaseMonitor; async function loadPool(): Promise { if (pool) { @@ -86,6 +102,12 @@ const MYSQL_DEADLOCK_ERROR_CODE = 1213; +let migrationsConcluded = false; +function setMigrationsConcluded() { + migrationsConcluded = true; + migrationConnection.end(); +} + type QueryOptions = { +triesLeft?: number, +multipleStatements?: boolean, @@ -98,6 +120,9 @@ const multipleStatements = options?.multipleStatements ?? false; let connection; + if (!migrationsConcluded) { + connection = await getMigrationConnection(); + } if (multipleStatements) { connection = await getMultipleStatementsConnection(); } @@ -157,6 +182,7 @@ appendSQLArray, mergeAndConditions, mergeOrConditions, + setMigrationsConcluded, dbQuery, rawSQL, }; diff --git a/keyserver/src/database/migrations.js b/keyserver/src/database/migrations.js --- a/keyserver/src/database/migrations.js +++ b/keyserver/src/database/migrations.js @@ -6,7 +6,7 @@ import { getMessageForException } from 'lib/utils/errors'; import sleep from 'lib/utils/sleep'; -import { dbQuery, SQL } from './database'; +import { dbQuery, SQL, setMigrationsConcluded } from './database'; import { fetchDBVersion, updateDBVersion } from './db-version'; import { migrations } from './migration-config'; import { setupDB } from './setup-db'; @@ -45,6 +45,7 @@ return false; } } + setMigrationsConcluded(); return true; }