remember which server processed the analysis - closes #765
This commit is contained in:
parent
657114ff0d
commit
0645e118e3
|
@ -44,5 +44,4 @@ object Ai extends LilaController {
|
|||
}
|
||||
funit
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ final class Analyser(
|
|||
}
|
||||
}
|
||||
|
||||
def complete(id: String, data: String, from: String) =
|
||||
def complete(id: String, data: String, fromIp: String) =
|
||||
$find.byId[Game](id) zip get(id) zip (GameRepo initialFen id) flatMap {
|
||||
case ((Some(game), Some(a1)), initialFen) if game.analysable =>
|
||||
Info.decodeList(data, game.startedAtTurn) match {
|
||||
|
@ -78,9 +78,9 @@ final class Analyser(
|
|||
errors foreach { e => logwarn(s"[analysis UciToPgn] $id $e") }
|
||||
if (analysis.valid) {
|
||||
if (analysis.emptyRatio >= 1d / 10)
|
||||
fufail(s"Analysis $id from $from has ${analysis.nbEmptyInfos} empty infos out of ${analysis.infos.size}")
|
||||
fufail(s"Analysis $id from $fromIp has ${analysis.nbEmptyInfos} empty infos out of ${analysis.infos.size}")
|
||||
indexer ! InsertGame(game)
|
||||
AnalysisRepo.done(id, analysis) >>- {
|
||||
AnalysisRepo.done(id, analysis, fromIp) >>- {
|
||||
modActor ! actorApi.AnalysisReady(game, analysis)
|
||||
} >>- GameRepo.setAnalysed(game.id) inject analysis
|
||||
}
|
||||
|
@ -93,7 +93,7 @@ final class Analyser(
|
|||
_ => AnalysisRepo remove id
|
||||
}
|
||||
|
||||
def completeErr(id: String, err: String, from: String) =
|
||||
def completeErr(id: String, err: String, fromIp: String) =
|
||||
$find.byId[Game](id) zip getNotDone(id) flatMap {
|
||||
case (Some(game), Some(a1)) if game.analysable => AnalysisRepo remove id
|
||||
}
|
||||
|
|
|
@ -10,7 +10,8 @@ case class Analysis(
|
|||
infos: List[Info],
|
||||
startPly: Int,
|
||||
done: Boolean,
|
||||
date: DateTime) {
|
||||
date: DateTime,
|
||||
serverIp: Option[String]) {
|
||||
|
||||
lazy val infoAdvices: InfoAdvices = {
|
||||
(Info.start(startPly) :: infos) sliding 2 collect {
|
||||
|
@ -58,12 +59,13 @@ object Analysis {
|
|||
val id = r str "_id"
|
||||
val ply = r intO "ply"
|
||||
val date = r date "date"
|
||||
val ip = r strO "ip"
|
||||
(r strD "data", r boolD "done") match {
|
||||
case ("", true) => new Analysis(id, Nil, ~ply, false, date)
|
||||
case ("", true) => new Analysis(id, Nil, ~ply, false, date, ip)
|
||||
case (d, true) => Info.decodeList(d, ~ply) map {
|
||||
new Analysis(id, _, ~ply, true, date)
|
||||
new Analysis(id, _, ~ply, true, date, ip)
|
||||
} err s"Invalid analysis data $d"
|
||||
case (_, false) => new Analysis(id, Nil, ~ply, false, date)
|
||||
case (_, false) => new Analysis(id, Nil, ~ply, false, date, ip)
|
||||
}
|
||||
}
|
||||
def writes(w: BSON.Writer, o: Analysis) = BSONDocument(
|
||||
|
@ -71,7 +73,8 @@ object Analysis {
|
|||
"data" -> Info.encodeList(o.infos),
|
||||
"ply" -> w.intO(o.startPly),
|
||||
"done" -> o.done,
|
||||
"date" -> w.date(o.date))
|
||||
"date" -> w.date(o.date),
|
||||
"ip" -> o.serverIp)
|
||||
}
|
||||
|
||||
private[analyse] lazy val tube = lila.db.BsTube(analysisBSONHandler)
|
||||
|
|
|
@ -12,11 +12,12 @@ object AnalysisRepo {
|
|||
|
||||
type ID = String
|
||||
|
||||
def done(id: ID, a: Analysis) = $update(
|
||||
def done(id: ID, a: Analysis, serverIp: String) = $update(
|
||||
$select(id),
|
||||
$set(Json.obj(
|
||||
"done" -> true,
|
||||
"data" -> Info.encodeList(a.infos)
|
||||
"data" -> Info.encodeList(a.infos),
|
||||
"ip" -> serverIp
|
||||
))
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue