cloud eval live setting

deepcrayonfish^2
Thibault Duplessis 2021-11-26 17:37:45 +01:00
parent 87ef26b856
commit af4efb40b3
3 changed files with 21 additions and 11 deletions

View File

@ -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 =

View File

@ -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]

View File

@ -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 =>