From af4efb40b3c3d216dc86d09586ac67be91310eca Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Fri, 26 Nov 2021 17:37:45 +0100 Subject: [PATCH] cloud eval live setting --- app/controllers/Dev.scala | 3 ++- modules/evalCache/src/main/Env.scala | 7 ++++++ .../evalCache/src/main/EvalCacheUpgrade.scala | 22 ++++++++++--------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/app/controllers/Dev.scala b/app/controllers/Dev.scala index 2f6d4460b0..fff8b67fe9 100644 --- a/app/controllers/Dev.scala +++ b/app/controllers/Dev.scala @@ -27,7 +27,8 @@ final class Dev(env: Env) extends LilaController(env) { env.noDelaySecretSetting, env.featuredTeamsSetting, env.prizeTournamentMakers, - env.pieceImageExternal + env.pieceImageExternal, + env.evalCache.enable ) def settings = diff --git a/modules/evalCache/src/main/Env.scala b/modules/evalCache/src/main/Env.scala index 6ea164e8f4..97c5df1c7f 100644 --- a/modules/evalCache/src/main/Env.scala +++ b/modules/evalCache/src/main/Env.scala @@ -16,6 +16,7 @@ final class Env( userRepo: lila.user.UserRepo, yoloDb: lila.db.AsyncDb @@ lila.db.YoloDb, cacheApi: lila.memo.CacheApi, + settingStore: lila.memo.SettingStore.Builder, scheduler: akka.actor.Scheduler )(implicit ec: scala.concurrent.ExecutionContext, @@ -27,6 +28,12 @@ final class Env( private lazy val truster = wire[EvalCacheTruster] + lazy val enable = settingStore[Boolean]( + "useCeval", + default = true, + text = "Enable cloud eval (disable in case of server trouble)".some + ) + private lazy val upgrade = wire[EvalCacheUpgrade] lazy val api: EvalCacheApi = wire[EvalCacheApi] diff --git a/modules/evalCache/src/main/EvalCacheUpgrade.scala b/modules/evalCache/src/main/EvalCacheUpgrade.scala index 1b3066d623..ce31bb558b 100644 --- a/modules/evalCache/src/main/EvalCacheUpgrade.scala +++ b/modules/evalCache/src/main/EvalCacheUpgrade.scala @@ -9,12 +9,13 @@ import lila.socket.Socket import lila.memo.ExpireCallbackMemo import scala.collection.mutable +import lila.memo.SettingStore /* Upgrades the user's eval when a better one becomes available, * by remembering the last evalGet of each socket member, * and listening to new evals stored. */ -final private class EvalCacheUpgrade(scheduler: akka.actor.Scheduler)(implicit +final private class EvalCacheUpgrade(setting: SettingStore[Boolean], scheduler: akka.actor.Scheduler)(implicit ec: scala.concurrent.ExecutionContext, mode: play.api.Mode ) { @@ -26,17 +27,18 @@ final private class EvalCacheUpgrade(scheduler: akka.actor.Scheduler)(implicit private val upgradeMon = lila.mon.evalCache.upgrade - def register(sri: Socket.Sri, variant: Variant, fen: FEN, multiPv: Int, path: String)(push: Push): Unit = { - members get sri.value foreach { wm => - unregisterEval(wm.setupId, sri) + def register(sri: Socket.Sri, variant: Variant, fen: FEN, multiPv: Int, path: String)(push: Push): Unit = + if (setting.get()) { + members get sri.value foreach { wm => + unregisterEval(wm.setupId, sri) + } + val setupId = makeSetupId(variant, fen, multiPv) + members += (sri.value -> WatchingMember(push, setupId, path)) + evals += (setupId -> (~evals.get(setupId) + sri.value)) + expirableSris put sri.value } - val setupId = makeSetupId(variant, fen, multiPv) - members += (sri.value -> WatchingMember(push, setupId, path)) - evals += (setupId -> (~evals.get(setupId) + sri.value)) - expirableSris put sri.value - } - def onEval(input: EvalCacheEntry.Input, sri: Socket.Sri): Unit = { + def onEval(input: EvalCacheEntry.Input, sri: Socket.Sri): Unit = if (setting.get()) { (1 to input.eval.multiPv) flatMap { multiPv => evals get makeSetupId(input.id.variant, input.fen, multiPv) } foreach { sris =>