Merge branch 'master' into load_moderator_names

This commit is contained in:
einhornimmond 2025-12-20 13:31:00 +01:00 committed by GitHub
commit debdd21158
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,7 +1,7 @@
import { drizzle, MySql2Database } from 'drizzle-orm/mysql2' import { drizzle, MySql2Database } from 'drizzle-orm/mysql2'
import Redis from 'ioredis' import Redis from 'ioredis'
import { getLogger } from 'log4js' import { getLogger } from 'log4js'
import { Connection, createConnection } from 'mysql2/promise' import { Connection, createConnection, createPool, Pool } from 'mysql2/promise'
import { DataSource as DBDataSource, FileLogger } from 'typeorm' import { DataSource as DBDataSource, FileLogger } from 'typeorm'
import { latestDbVersion } from '.' import { latestDbVersion } from '.'
import { CONFIG } from './config' import { CONFIG } from './config'
@ -14,7 +14,7 @@ export class AppDatabase {
private static instance: AppDatabase private static instance: AppDatabase
private dataSource: DBDataSource | undefined private dataSource: DBDataSource | undefined
private drizzleDataSource: MySql2Database | undefined private drizzleDataSource: MySql2Database | undefined
private drizzleConnection: Connection | undefined private drizzlePool: Pool | undefined
private redisClient: Redis | undefined private redisClient: Redis | undefined
/** /**
@ -48,10 +48,10 @@ export class AppDatabase {
} }
public getDrizzleDataSource(): MySql2Database { public getDrizzleDataSource(): MySql2Database {
if (!this.drizzleDataSource) { if (!this.drizzlePool) {
throw new Error('Drizzle connection not initialized') throw new Error('Drizzle connection pool not initialized')
} }
return this.drizzleDataSource return drizzle({ client: this.drizzlePool })
} }
// create database connection, initialize with automatic retry and check for correct database version // create database connection, initialize with automatic retry and check for correct database version
@ -106,22 +106,25 @@ export class AppDatabase {
logger.info('Redis status=', this.redisClient.status) logger.info('Redis status=', this.redisClient.status)
if (!this.drizzleDataSource) { if (!this.drizzleDataSource) {
this.drizzleConnection = await createConnection({ this.drizzlePool = createPool({
host: CONFIG.DB_HOST, host: CONFIG.DB_HOST,
user: CONFIG.DB_USER, user: CONFIG.DB_USER,
password: CONFIG.DB_PASSWORD, password: CONFIG.DB_PASSWORD,
database: CONFIG.DB_DATABASE, database: CONFIG.DB_DATABASE,
port: CONFIG.DB_PORT, port: CONFIG.DB_PORT,
waitForConnections: true,
connectionLimit: 20,
queueLimit: 100,
enableKeepAlive: true,
keepAliveInitialDelay: 10000,
}) })
this.drizzleDataSource = drizzle({ client: this.drizzleConnection })
} }
} }
public async destroy(): Promise<void> { public async destroy(): Promise<void> {
await Promise.all([this.dataSource?.destroy(), this.drizzleConnection?.end()]) await Promise.all([this.dataSource?.destroy(), this.drizzlePool?.end()])
this.dataSource = undefined this.dataSource = undefined
this.drizzleConnection = undefined this.drizzlePool = undefined
this.drizzleDataSource = undefined
if (this.redisClient) { if (this.redisClient) {
await this.redisClient.quit() await this.redisClient.quit()
this.redisClient = undefined this.redisClient = undefined