diff --git a/modules/coordinator/src/main/resources/application.yml b/modules/coordinator/src/main/resources/application.yml index e771375..e252b6a 100644 --- a/modules/coordinator/src/main/resources/application.yml +++ b/modules/coordinator/src/main/resources/application.yml @@ -33,6 +33,7 @@ nowchess: rebalance-interval: 30s rebalance-min-interval: 60s heartbeat-ttl: 5s + instance-dead-timeout: 60s stream-heartbeat-interval: PT0.2S cache-eviction-interval: 10m game-idle-threshold: 45m diff --git a/modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala b/modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala index cff6e41..5a95715 100644 --- a/modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala +++ b/modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala @@ -21,6 +21,9 @@ trait CoordinatorConfig: @WithName("heartbeat-ttl") def heartbeatTtl: Duration + @WithName("instance-dead-timeout") + def instanceDeadTimeout: Duration + @WithName("stream-heartbeat-interval") def streamHeartbeatInterval: Duration diff --git a/modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala b/modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala index 7bfbc9e..41389e8 100644 --- a/modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala +++ b/modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala @@ -50,8 +50,7 @@ class AutoScaler: val avgLoad = instances.map(_.subscriptionCount).sum.toDouble / instances.size if avgLoad > config.scaleUpThreshold * config.maxGamesPerCore then scaleUp() - else if avgLoad < config.scaleDownThreshold * config.maxGamesPerCore && instances.size > config.scaleMinReplicas - then scaleDown() + else if avgLoad < config.scaleDownThreshold * config.maxGamesPerCore then scaleDown() def scaleUp(): Unit = log.info("Scaling up Argo Rollout") diff --git a/modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala b/modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala index 340a22a..6c166c3 100644 --- a/modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala +++ b/modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala @@ -39,7 +39,7 @@ class HealthMonitor: redisPrefix = prefix def checkInstanceHealth: Unit = - val evicted = instanceRegistry.evictStaleInstances(config.heartbeatTtl) + val evicted = instanceRegistry.evictStaleInstances(config.instanceDeadTimeout) if evicted.nonEmpty then log.warnf("Evicted %d stale instances: %s", evicted.size, evicted.mkString(", ")) val instances = instanceRegistry.getAllInstances instances.foreach { inst =>