From f183bcc2431a073a8f96ce04bc5681752497e7b2 Mon Sep 17 00:00:00 2001 From: Flegma Date: Wed, 8 Apr 2026 14:12:46 +0200 Subject: [PATCH 1/2] fix: add ELO calculation retry and dedicated server state recovery --- .../dedicated-servers.service.ts | 10 ++++++-- src/matches/jobs/EloCalculation.ts | 23 ++++++++++++++----- src/matches/matches.module.ts | 4 ++++ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/dedicated-servers/dedicated-servers.service.ts b/src/dedicated-servers/dedicated-servers.service.ts index 92e53d17..e9bda034 100644 --- a/src/dedicated-servers/dedicated-servers.service.ts +++ b/src/dedicated-servers/dedicated-servers.service.ts @@ -345,11 +345,17 @@ export class DedicatedServersService { await this.pingDedicatedServer(serverId); }, 10000); }) - .catch((error) => { + .catch(async (error) => { this.logger.error( - `[${serverId}] error waiting for pod to be ready`, + `[${serverId}] error waiting for pod to be ready, recovering server state`, error, ); + await this.removeDedicatedServer(serverId).catch((removeError) => { + this.logger.error( + `[${serverId}] failed to clean up server after pod readiness failure`, + removeError, + ); + }); }); return true; diff --git a/src/matches/jobs/EloCalculation.ts b/src/matches/jobs/EloCalculation.ts index ccf782c2..f01cf7e6 100644 --- a/src/matches/jobs/EloCalculation.ts +++ b/src/matches/jobs/EloCalculation.ts @@ -1,11 +1,14 @@ import { Job } from "bullmq"; import { WorkerHost } from "@nestjs/bullmq"; +import { Logger } from "@nestjs/common"; import { MatchQueues } from "../enums/MatchQueues"; import { UseQueue } from "../../utilities/QueueProcessors"; import { PostgresService } from "../../postgres/postgres.service"; @UseQueue("Matches", MatchQueues.EloCalculation) export class EloCalculation extends WorkerHost { + private readonly logger = new Logger(EloCalculation.name); + constructor(private readonly postgres: PostgresService) { super(); } @@ -13,11 +16,19 @@ export class EloCalculation extends WorkerHost { async process(job: Job): Promise { const { matchId } = job.data; - await this.postgres.query( - ` - SELECT generate_player_elo_for_match($1) - `, - [matchId], - ); + try { + await this.postgres.query( + ` + SELECT generate_player_elo_for_match($1) + `, + [matchId], + ); + } catch (error) { + this.logger.error( + `ELO calculation failed for match ${matchId} (attempt ${job.attemptsMade + 1})`, + error, + ); + throw error; + } } } diff --git a/src/matches/matches.module.ts b/src/matches/matches.module.ts index 3a6f31fa..89c680a0 100644 --- a/src/matches/matches.module.ts +++ b/src/matches/matches.module.ts @@ -75,6 +75,10 @@ import { DiscordTournamentVoiceModule } from "../discord-bot/discord-tournament- }, { name: MatchQueues.EloCalculation, + defaultJobOptions: { + attempts: 3, + backoff: { type: "exponential", delay: 5000 }, + }, }, ), BullBoardModule.forFeature( From 22b280d70b45f19360ab575cf87ef9750bdddc21 Mon Sep 17 00:00:00 2001 From: Flegma Date: Fri, 10 Apr 2026 13:07:23 +0200 Subject: [PATCH 2/2] fix: remove server cleanup on failure, use project logger for ELO --- src/dedicated-servers/dedicated-servers.service.ts | 10 ++-------- src/matches/jobs/EloCalculation.ts | 7 ++++--- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/dedicated-servers/dedicated-servers.service.ts b/src/dedicated-servers/dedicated-servers.service.ts index e9bda034..92e53d17 100644 --- a/src/dedicated-servers/dedicated-servers.service.ts +++ b/src/dedicated-servers/dedicated-servers.service.ts @@ -345,17 +345,11 @@ export class DedicatedServersService { await this.pingDedicatedServer(serverId); }, 10000); }) - .catch(async (error) => { + .catch((error) => { this.logger.error( - `[${serverId}] error waiting for pod to be ready, recovering server state`, + `[${serverId}] error waiting for pod to be ready`, error, ); - await this.removeDedicatedServer(serverId).catch((removeError) => { - this.logger.error( - `[${serverId}] failed to clean up server after pod readiness failure`, - removeError, - ); - }); }); return true; diff --git a/src/matches/jobs/EloCalculation.ts b/src/matches/jobs/EloCalculation.ts index f01cf7e6..b76d4ef0 100644 --- a/src/matches/jobs/EloCalculation.ts +++ b/src/matches/jobs/EloCalculation.ts @@ -7,9 +7,10 @@ import { PostgresService } from "../../postgres/postgres.service"; @UseQueue("Matches", MatchQueues.EloCalculation) export class EloCalculation extends WorkerHost { - private readonly logger = new Logger(EloCalculation.name); - - constructor(private readonly postgres: PostgresService) { + constructor( + private readonly logger: Logger, + private readonly postgres: PostgresService, + ) { super(); }