feat(multiplayer): publish allocation progress events

This commit is contained in:
Josh Creek
2026-09-01 21:27:24 +01:00
parent 614b87f7e1
commit 836cedec3c
4 changed files with 46 additions and 7 deletions
+2
View File
@@ -1449,6 +1449,8 @@ Allocator-selected region, build, protocol, and transport now travel with the al
The same allocation path now carries the matcher-selected playlist, preventing a ranked match from inheriting the Fleets casual default. Durable allocation claims return the playlist, the worker includes it in Fleet selection metadata, Agones copies it to the allocated GameServer, and the supervisor overrides `--playlist` before launch; the existing compatibility tests remain green.
The allocators durable bind now increments the match revision and writes a participant-targeted `state_changed(ALLOCATING)` outbox event in the same serializable transaction as the server binding and ticket transitions, so clients can recover allocation progress after a delivery outage.
Ranked proposal admission no longer trusts the matchers `--ranked-random-arena` boolean. The Go domain now owns a named allowlist for the three floor-goal `ArenaRegistry` entries, and rejects unknown and elevated IDs before any proposal is created.
The arena hand-off is now durable: the matcher deterministically selects an eligible floor-goal arena from the proposal ID, migration 0008 stores that path on proposals and matches and enforces it for new direct SQL writes, migration 0009 retains it on provider allocations, domain/store/provider boundaries and recovery lookups recheck the same allowlist, allocation claims and idempotency digests retain it, Agones applies it as a match-scoped annotation, and the supervisor overlays the allocated childs `--arena-path`. Godot accepts only the same floor-goal `ArenaRegistry` paths and requires one for allocated ranked matches, so a stale Fleet default, an elevated variant, or an altered retry cannot substitute a ranked arena. The recovery worker also rejects a provider-recovered allocation whose arena differs from the durable request before recording or binding it.