feat(multiplayer): sweep initial connect outcomes

This commit is contained in:
Josh Creek
2026-09-01 16:27:15 +01:00
parent bae7458668
commit a6d2bdf8bd
4 changed files with 124 additions and 0 deletions
+11
View File
@@ -23,6 +23,7 @@ func main() {
batch := flag.Int("batch", 100, "maximum player rollovers per pass")
stalledAllocationDeadline := flag.Duration("stalled-allocation-deadline", 2*time.Minute, "reclaim a match stuck in ALLOCATING/PROCESS_READY/ASSIGNMENT_READY (server crashed or was reclaimed before registering) after this long, requeuing every participant without penalty")
stalledAllocationBatch := flag.Int("stalled-allocation-batch", 100, "maximum stalled matches reclaimed per pass")
initialConnectBatch := flag.Int("initial-connect-batch", 100, "maximum pre-live matches evaluated per pass")
flag.Parse()
if *dsn == "" {
fatalf("--dsn or COSMIC_CLASH_POSTGRES_DSN is required")
@@ -33,6 +34,9 @@ func main() {
if *stalledAllocationDeadline <= 0 || *stalledAllocationBatch < 1 || *stalledAllocationBatch > 1000 {
fatalf("invalid stalled-allocation deadline or batch")
}
if *initialConnectBatch < 1 || *initialConnectBatch > 1000 {
fatalf("invalid initial-connect batch")
}
db, err := sql.Open("pgx", *dsn)
if err != nil {
fatalf("open PostgreSQL: %v", err)
@@ -64,6 +68,13 @@ func main() {
if reclaimed > 0 {
log.Printf("reclaimed %d stalled allocations, requeuing their participants", reclaimed)
}
reconciled, err := store.ReconcileInitialConnect(ctx, db, now, *initialConnectBatch)
if err != nil {
fatalf("initial-connect maintenance: %v", err)
}
if reconciled > 0 {
log.Printf("reconciled %d initial-connect outcomes", reconciled)
}
timer := time.NewTimer(*interval)
select {
case <-ctx.Done():