diff --git a/packages/core/database/src/__tests__/helpers.test.ts b/packages/core/database/src/__tests__/helpers.test.ts index d972c83842..f7baa12cdd 100644 --- a/packages/core/database/src/__tests__/helpers.test.ts +++ b/packages/core/database/src/__tests__/helpers.test.ts @@ -14,14 +14,7 @@ describe('database helpers', () => { it('undefined pool options', async () => { const options1 = await parseDatabaseOptionsFromEnv(); expect(options1).toMatchObject({ - pool: { - max: 5, - min: 0, - idle: 10000, - acquire: 60000, - evict: 1000, - maxUses: Number.POSITIVE_INFINITY, // Default value - }, + pool: {}, }); }); diff --git a/packages/core/database/src/helpers.ts b/packages/core/database/src/helpers.ts index 43615ab180..bb9a1dfa5a 100644 --- a/packages/core/database/src/helpers.ts +++ b/packages/core/database/src/helpers.ts @@ -15,6 +15,7 @@ import { MysqlDialect } from './dialects/mysql-dialect'; import { SqliteDialect } from './dialects/sqlite-dialect'; import { MariadbDialect } from './dialects/mariadb-dialect'; import { PostgresDialect } from './dialects/postgres-dialect'; +import { PoolOptions } from 'sequelize'; function getEnvValue(key, defaultValue?) { return process.env[key] || defaultValue; @@ -73,6 +74,29 @@ function extractSSLOptionsFromEnv() { }); } +function getPoolOptions(): PoolOptions { + const options: PoolOptions = {}; + if (process.env.DB_POOL_MAX) { + options.max = Number.parseInt(process.env.DB_POOL_MAX, 10); + } + if (process.env.DB_POOL_MIN) { + options.min = Number.parseInt(process.env.DB_POOL_MIN, 10); + } + if (process.env.DB_POOL_IDLE) { + options.idle = Number.parseInt(process.env.DB_POOL_IDLE, 10); + } + if (process.env.DB_POOL_ACQUIRE) { + options.acquire = Number.parseInt(process.env.DB_POOL_ACQUIRE, 10); + } + if (process.env.DB_POOL_EVICT) { + options.evict = Number.parseInt(process.env.DB_POOL_EVICT, 10); + } + if (process.env.DB_POOL_MAX_USES) { + options.maxUses = Number.parseInt(process.env.DB_POOL_MAX_USES, 10) || Number.POSITIVE_INFINITY; + } + return options; +} + export async function parseDatabaseOptionsFromEnv(): Promise { const databaseOptions: IDatabaseOptions = { logging: process.env.DB_LOGGING == 'on' ? customLogger : false, @@ -87,17 +111,7 @@ export async function parseDatabaseOptionsFromEnv(): Promise { tablePrefix: process.env.DB_TABLE_PREFIX, schema: process.env.DB_SCHEMA, underscored: process.env.DB_UNDERSCORED === 'true', - pool: { - max: process.env.DB_POOL_MAX ? Number.parseInt(process.env.DB_POOL_MAX, 10) : 5, - min: process.env.DB_POOL_MIN ? Number.parseInt(process.env.DB_POOL_MIN, 10) : 0, - idle: process.env.DB_POOL_IDLE ? Number.parseInt(process.env.DB_POOL_IDLE, 10) : 10_000, - acquire: process.env.DB_POOL_ACQUIRE ? Number.parseInt(process.env.DB_POOL_ACQUIRE, 10) : 60_000, - evict: process.env.DB_POOL_EVICT ? Number.parseInt(process.env.DB_POOL_EVICT, 10) : 1000, - maxUses: process.env.DB_POOL_MAX_USES - // If DB_POOL_MAX_USES is '0', it is treated as falsy and defaults to Number.POSITIVE_INFINITY. - ? Number.parseInt(process.env.DB_POOL_MAX_USES, 10) || Number.POSITIVE_INFINITY - : Number.POSITIVE_INFINITY, - }, + pool: getPoolOptions(), }; const sslOptions = await extractSSLOptionsFromEnv();