Surface Eagle warmup startup failures (#8370)

This commit is contained in:
2026-07-09 10:06:23 -07:00
committed by GitHub
parent 29c1d4a232
commit 0f89f7a2ea
6 changed files with 43 additions and 0 deletions
+2
View File
@@ -241,6 +241,8 @@ main() {
if [ -x "${WARMUP_SCRIPT}" ]; then
if ! "${WARMUP_SCRIPT}" "localhost:${staging_port}"; then
log_error "Warmup/smoke test failed, aborting deployment"
log_error "Recent eagle-${staging} logs:"
docker logs "eagle-${staging}" --tail 200 2>&1 || true
docker compose -f "${COMPOSE_FILE}" stop "eagle-${staging}"
cleanup_markers_on_failure "eagle-${active}"
exit 1
@@ -107,6 +107,8 @@ object Main {
SimpleTimedLogger.printLogger.logLine("Starting!")
HistoryBackendStartupValidation.validate()
// Register shutdown hook to turn pending SQLite upload requests into bytes before flushing pending S3 saves.
Runtime.getRuntime.addShutdownHook(new Thread(new Runnable {
override def run(): Unit = {
@@ -636,6 +636,7 @@ scala_library(
srcs = [
"GameHistoryFactory.scala",
"HistoryBackendConfig.scala",
"HistoryBackendStartupValidation.scala",
"PostgresHistory.scala",
"SqliteHistory.scala",
],
@@ -0,0 +1,6 @@
package net.eagle0.eagle.service
object HistoryBackendStartupValidation {
def validate(): Unit =
if HistoryBackendConfig.usePostgres then PostgresHistory.requireConfigured()
}
@@ -21,8 +21,13 @@ scala_test(
"//src/main/resources/net/eagle0/eagle:game_parameters",
"//src/main/resources/net/eagle0/eagle:heroes",
"//src/main/resources/net/eagle0/eagle:province_map",
"//src/main/resources/net/eagle0/shardok:battalion_types",
],
deps = [
"//src/main/scala/net/eagle0/eagle/library:engine",
"//src/main/scala/net/eagle0/eagle/library/settings:history_backend",
"//src/main/scala/net/eagle0/eagle/library/settings/loaders:battalion_type_loader",
"//src/main/scala/net/eagle0/eagle/service/new_game_creation",
"//src/main/scala/net/eagle0/eagle/service/new_game_creation:game_parameters_utils",
"//src/main/scala/net/eagle0/eagle/service/new_game_creation:great_person",
"//src/main/scala/net/eagle0/util/hero_generation:loaded_hero",
@@ -1,9 +1,17 @@
package net.eagle0.eagle.service.new_game_creation
import java.nio.file.Files
import net.eagle0.eagle.library.settings.loaders.BattalionTypeLoader
import net.eagle0.eagle.library.settings.HistoryBackend
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class FixedNewGameCreationTest extends AnyFlatSpec with Matchers {
System.setProperty("eagle.save.dir", Files.createTempDirectory("fixed_new_game_creation_test").toString)
private lazy val battalionTypes =
BattalionTypeLoader.loadBattalionTypes(getClass.getResource("/net/eagle0/shardok/battalionTypes.tsv")).get
"ExpandedGameParameters" should "have no duplicate heroes between setFactionHeads and greatPeople" in {
val params = GameParametersUtils.defaultExpandedGameParameters
@@ -93,4 +101,23 @@ class FixedNewGameCreationTest extends AnyFlatSpec with Matchers {
overlap.shouldBe(empty)
}
}
"FixedNewGameCreation" should "create the warmup-sized default game" in {
val params = GameParametersUtils.defaultExpandedGameParameters
val previousHistoryBackend = HistoryBackend.stringValue
HistoryBackend.setStringValue("sqlite")
try {
val engineAndResults = FixedNewGameCreation.createGame(
expandedGameParameters = params,
gameId = 0xfeedfaceL,
persister = None,
humanPlayerFactionLeaderNameTextIds = Vector(params.greatPeople.head.greatPerson.hero.nameTextId),
playerCount = 2,
allBattalionTypes = battalionTypes
)
(engineAndResults.engine.currentState.factions.size >= 2).shouldBe(true)
} finally HistoryBackend.setStringValue(previousHistoryBackend)
}
}