fix(multiplayer): close initial connect sweep rows

This commit is contained in:
Josh Creek
2026-09-01 16:28:08 +01:00
parent a6d2bdf8bd
commit ec82367c50
+21 -6
View File
@@ -33,14 +33,29 @@ func ReconcileInitialConnect(ctx context.Context, db *sql.DB, now time.Time, lim
return 0, err return 0, err
} }
defer rows.Close() defer rows.Close()
count := 0 type candidate struct {
matchID string
playlist string
readyAt time.Time
}
var candidates []candidate
for rows.Next() { for rows.Next() {
var matchID, playlist string var matchID, playlist string
var readyAt time.Time var readyAt time.Time
if err := rows.Scan(&matchID, &playlist, &readyAt); err != nil { if err := rows.Scan(&matchID, &playlist, &readyAt); err != nil {
return count, err return 0, err
} }
participants, err := loadInitialConnectSnapshot(ctx, db, matchID) candidates = append(candidates, candidate{matchID: matchID, playlist: playlist, readyAt: readyAt})
}
if err := rows.Err(); err != nil {
return 0, err
}
if err := rows.Close(); err != nil {
return 0, err
}
count := 0
for _, candidate := range candidates {
participants, err := loadInitialConnectSnapshot(ctx, db, candidate.matchID)
if err != nil { if err != nil {
return count, err return count, err
} }
@@ -48,14 +63,14 @@ func ReconcileInitialConnect(ctx context.Context, db *sql.DB, now time.Time, lim
if err != nil { if err != nil {
return count, err return count, err
} }
plan, err := domain.PlanInitialConnect(domain.Playlist(playlist), readyAt, now, participants, history) plan, err := domain.PlanInitialConnect(domain.Playlist(candidate.playlist), candidate.readyAt, now, participants, history)
if err != nil { if err != nil {
return count, fmt.Errorf("plan initial connect %s: %w", matchID, err) return count, fmt.Errorf("plan initial connect %s: %w", candidate.matchID, err)
} }
if plan.Action == domain.InitialConnectWait { if plan.Action == domain.InitialConnectWait {
continue continue
} }
if err := ApplyInitialConnectPlan(ctx, db, matchID, "initial-connect:"+matchID, plan, now); err != nil { if err := ApplyInitialConnectPlan(ctx, db, candidate.matchID, "initial-connect:"+candidate.matchID, plan, now); err != nil {
return count, err return count, err
} }
count++ count++