diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 8115fafd8..c742b4b28 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -34,8 +34,14 @@ const server = { } const database = { + DB_CONNECT_RETRY_COUNT: process.env.DB_CONNECT_RETRY_COUNT + ? Number.parseInt(process.env.DB_CONNECT_RETRY_COUNT) + : 15, + DB_CONNECT_RETRY_DELAY_MS: process.env.DB_CONNECT_RETRY_DELAY_MS + ? Number.parseInt(process.env.DB_CONNECT_RETRY_DELAY_MS) + : 500, DB_HOST: process.env.DB_HOST ?? 'localhost', - DB_PORT: process.env.DB_PORT ? parseInt(process.env.DB_PORT) : 3306, + DB_PORT: process.env.DB_PORT ? Number.parseInt(process.env.DB_PORT) : 3306, DB_USER: process.env.DB_USER ?? 'root', DB_PASSWORD: process.env.DB_PASSWORD ?? '', DB_DATABASE: process.env.DB_DATABASE ?? 'gradido_community', diff --git a/backend/src/config/schema.ts b/backend/src/config/schema.ts index a6ed60ea1..5c937ae5b 100644 --- a/backend/src/config/schema.ts +++ b/backend/src/config/schema.ts @@ -3,6 +3,8 @@ import { COMMUNITY_NAME, COMMUNITY_SUPPORT_MAIL, COMMUNITY_URL, + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DB_DATABASE, DB_HOST, DB_PASSWORD, @@ -38,6 +40,8 @@ export const schema = Joi.object({ DB_USER, DB_VERSION, DB_DATABASE, + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DECAY_START_TIME, GDT_API_URL, GDT_ACTIVE, diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index fec8fa3b7..b87f4cb24 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -36,9 +36,11 @@ export const createServer = async ( // open mariadb connection, retry connecting with mariadb // check for correct database version - // retry max 15 times, wait 500 ms between tries - // TODO: move variables into config - const con = await checkDBVersionUntil(15, 500) + // retry max CONFIG.DB_CONNECT_RETRY_COUNT times, wait CONFIG.DB_CONNECT_RETRY_DELAY ms between tries + const con = await checkDBVersionUntil( + CONFIG.DB_CONNECT_RETRY_COUNT, + CONFIG.DB_CONNECT_RETRY_DELAY_MS, + ) // Express Server const app = express() diff --git a/backend/src/typeorm/DBVersion.ts b/backend/src/typeorm/DBVersion.ts index 6ce3ac293..f60af6d9e 100644 --- a/backend/src/typeorm/DBVersion.ts +++ b/backend/src/typeorm/DBVersion.ts @@ -6,7 +6,7 @@ import { CONFIG } from '@/config' import { Connection } from '@/typeorm/connection' import { Connection as DbConnection } from 'typeorm' -async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { +async function checkDBVersionUntil(maxRetries: number, delayMs: number): Promise { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { const connection = await Connection.getInstance() diff --git a/config-schema/src/commonSchema.ts b/config-schema/src/commonSchema.ts index a208ee7dd..fa1afb473 100644 --- a/config-schema/src/commonSchema.ts +++ b/config-schema/src/commonSchema.ts @@ -37,6 +37,20 @@ export const DB_VERSION = Joi.string() ) .required() +export const DB_CONNECT_RETRY_COUNT = Joi.number() + .default(15) + .min(1) + .max(1000) + .description('Number of retries to connect to the database') + .optional() + +export const DB_CONNECT_RETRY_DELAY_MS = Joi.number() + .default(500) + .min(100) + .max(10000) + .description('Delay in milliseconds between retries to connect to the database') + .optional() + export const COMMUNITY_URL = Joi.string() .uri({ scheme: ['http', 'https'] }) .custom((value: string, helpers: Joi.CustomHelpers) => { diff --git a/dht-node/src/config/index.ts b/dht-node/src/config/index.ts index 3c041e2ac..14b4a789b 100644 --- a/dht-node/src/config/index.ts +++ b/dht-node/src/config/index.ts @@ -18,6 +18,12 @@ const server = { } const database = { + DB_CONNECT_RETRY_COUNT: process.env.DB_CONNECT_RETRY_COUNT + ? Number.parseInt(process.env.DB_CONNECT_RETRY_COUNT) + : 15, + DB_CONNECT_RETRY_DELAY_MS: process.env.DB_CONNECT_RETRY_DELAY_MS + ? Number.parseInt(process.env.DB_CONNECT_RETRY_DELAY_MS) + : 500, DB_HOST: process.env.DB_HOST ?? 'localhost', DB_PORT: process.env.DB_PORT ? Number.parseInt(process.env.DB_PORT) : 3306, DB_USER: process.env.DB_USER ?? 'root', diff --git a/dht-node/src/config/schema.ts b/dht-node/src/config/schema.ts index 659720c06..67dac73a4 100644 --- a/dht-node/src/config/schema.ts +++ b/dht-node/src/config/schema.ts @@ -1,6 +1,8 @@ import { COMMUNITY_DESCRIPTION, COMMUNITY_NAME, + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DB_DATABASE, DB_HOST, DB_PASSWORD, @@ -19,6 +21,8 @@ export const schema = Joi.object({ COMMUNITY_NAME, COMMUNITY_DESCRIPTION, DB_DATABASE, + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DB_HOST, DB_PASSWORD, DB_PORT, diff --git a/dht-node/src/index.ts b/dht-node/src/index.ts index 901d3ab20..e7058f152 100644 --- a/dht-node/src/index.ts +++ b/dht-node/src/index.ts @@ -6,7 +6,7 @@ import { checkDBVersionUntil } from './typeorm/DBVersion' async function main() { // open mysql connection - await checkDBVersionUntil() + await checkDBVersionUntil(CONFIG.DB_CONNECT_RETRY_COUNT, CONFIG.DB_CONNECT_RETRY_DELAY_MS) logger.debug(`dhtseed set by CONFIG.FEDERATION_DHT_SEED=${CONFIG.FEDERATION_DHT_SEED}`) logger.info( `starting Federation on ${CONFIG.FEDERATION_DHT_TOPIC} ${ diff --git a/dht-node/src/typeorm/DBVersion.ts b/dht-node/src/typeorm/DBVersion.ts index ee97c3c0a..be9f0c612 100644 --- a/dht-node/src/typeorm/DBVersion.ts +++ b/dht-node/src/typeorm/DBVersion.ts @@ -6,7 +6,7 @@ import { CONFIG } from '@/config' import { Connection as DbConnection } from 'typeorm' import { connection as connectionFunc } from './connection' -async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { +async function checkDBVersionUntil(maxRetries: number, delayMs: number): Promise { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { const connection = await connectionFunc() diff --git a/federation/src/config/index.ts b/federation/src/config/index.ts index 4c5f162ff..3c759d702 100644 --- a/federation/src/config/index.ts +++ b/federation/src/config/index.ts @@ -30,6 +30,12 @@ const server = { PRODUCTION: process.env.NODE_ENV === 'production', } const database = { + DB_CONNECT_RETRY_COUNT: process.env.DB_CONNECT_RETRY_COUNT + ? Number.parseInt(process.env.DB_CONNECT_RETRY_COUNT) + : 15, + DB_CONNECT_RETRY_DELAY_MS: process.env.DB_CONNECT_RETRY_DELAY_MS + ? Number.parseInt(process.env.DB_CONNECT_RETRY_DELAY_MS) + : 500, DB_HOST: process.env.DB_HOST ?? 'localhost', DB_PORT: process.env.DB_PORT ? Number.parseInt(process.env.DB_PORT) : 3306, DB_USER: process.env.DB_USER ?? 'root', diff --git a/federation/src/config/schema.ts b/federation/src/config/schema.ts index 2926061eb..812728cff 100644 --- a/federation/src/config/schema.ts +++ b/federation/src/config/schema.ts @@ -1,4 +1,6 @@ import { + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DB_DATABASE, DB_HOST, DB_PASSWORD, @@ -17,6 +19,8 @@ import Joi from 'joi' export const schema = Joi.object({ DB_DATABASE, + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DB_HOST, DB_PASSWORD, DB_PORT, diff --git a/federation/src/server/createServer.ts b/federation/src/server/createServer.ts index d3df01e18..e737d2a61 100644 --- a/federation/src/server/createServer.ts +++ b/federation/src/server/createServer.ts @@ -17,6 +17,7 @@ import { schema } from '@/graphql/schema' // import { elopageWebhook } from '@/webhook/elopage' import { Connection } from 'typeorm' +import { CONFIG } from '@/config' import { slowDown } from 'express-slow-down' import helmet from 'helmet' import { Logger } from 'log4js' @@ -39,7 +40,10 @@ export const createServer = async ( logger.debug('createServer...') // open mysql connection - const con = await checkDBVersionUntil() + const con = await checkDBVersionUntil( + CONFIG.DB_CONNECT_RETRY_COUNT, + CONFIG.DB_CONNECT_RETRY_DELAY_MS, + ) // Express Server const app = express() diff --git a/federation/src/typeorm/DBVersion.ts b/federation/src/typeorm/DBVersion.ts index ed907d2d8..712c4ee4f 100644 --- a/federation/src/typeorm/DBVersion.ts +++ b/federation/src/typeorm/DBVersion.ts @@ -4,7 +4,7 @@ import { Migration } from 'database' import { Connection as DbConnection } from 'typeorm' import { connection as connectionFunc } from './connection' -async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { +async function checkDBVersionUntil(maxRetries: number, delayMs: number): Promise { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { const connection = await connectionFunc()