From 33e5017f51a998327b180f778f73964cc10c05d3 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 3 May 2026 16:47:54 +0200 Subject: [PATCH] fix(redis): add max pool wait time and switch to ReactiveRedisDataSource for heartbeat updates --- modules/core/src/main/resources/application.yml | 1 + .../chess/service/InstanceHeartbeatService.scala | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/core/src/main/resources/application.yml b/modules/core/src/main/resources/application.yml index c71e664..ea56289 100644 --- a/modules/core/src/main/resources/application.yml +++ b/modules/core/src/main/resources/application.yml @@ -5,6 +5,7 @@ quarkus: name: nowchess-core redis: hosts: redis://${REDIS_HOST:localhost}:${REDIS_PORT:6379} + max-pool-wait-time: 500ms grpc: clients: rule-grpc: diff --git a/modules/core/src/main/scala/de/nowchess/chess/service/InstanceHeartbeatService.scala b/modules/core/src/main/scala/de/nowchess/chess/service/InstanceHeartbeatService.scala index d1f97e1..03ab587 100644 --- a/modules/core/src/main/scala/de/nowchess/chess/service/InstanceHeartbeatService.scala +++ b/modules/core/src/main/scala/de/nowchess/chess/service/InstanceHeartbeatService.scala @@ -8,6 +8,7 @@ import io.quarkus.runtime.ShutdownEvent import io.quarkus.grpc.GrpcClient import org.eclipse.microprofile.config.inject.ConfigProperty import io.quarkus.redis.datasource.RedisDataSource +import io.quarkus.redis.datasource.ReactiveRedisDataSource import scala.compiletime.uninitialized import java.util.concurrent.{Executors, TimeUnit} import java.net.InetAddress @@ -24,6 +25,9 @@ class InstanceHeartbeatService: @Inject private var redis: RedisDataSource = uninitialized + @Inject + private var reactiveRedis: ReactiveRedisDataSource = uninitialized + @Inject private var mapper: ObjectMapper = uninitialized @@ -182,10 +186,14 @@ class InstanceHeartbeatService: ) val json = mapper.writeValueAsString(metadata) - redis.value(classOf[String]).setex(key, 5L, json) + reactiveRedis.value(classOf[String]).setex(key, 5L, json) + .subscribe().`with`( + _ => (), + (ex: Throwable) => log.warnf(ex, "Failed to refresh Redis heartbeat"), + ) catch case ex: Exception => - log.warnf(ex, "Failed to refresh Redis heartbeat") + log.warnf(ex, "Failed to serialize Redis heartbeat metadata") private def getHostname: String = try InetAddress.getLocalHost.getHostName