Files
flvx/plans/038-federation-middle-hop-retry-parity.md

2.4 KiB

038 Federation Middle-Hop Retry Parity

Checklist

  • Reproduce and document the parity gap between local tunnel middle-hop runtime generation and federation-applied middle roles.
  • Update federation runtime apply logic so remote middle-hop services set handler retries when the next hop has multiple candidates.
  • Add regression coverage for federated middle-hop runtime generation or contract behavior, including multi-target fifo scenarios.
  • Verify release / cleanup paths remain correct when the federated middle service carries retry settings.
  • Run targeted backend tests for handler and federation contract coverage.

Findings

  • Local tunnel runtime generation now sets handler.retries for middle-hop services based on downstream candidate count in go-backend/internal/http/handler/mutations.go, which enables router-level re-selection after a failed primary node.
  • Federation runtime apply still creates remote middle-hop services without handler.retries in go-backend/internal/http/handler/federation.go, even though the remote chain hop itself uses the same selector failover settings (strategy, maxFails=1, failTimeout=10m).
  • Because go-gost/x/config/parsing/service/parse.go only enables router retries when cfg.Handler.Retries > 0, federated middle-hop services can still fail hard on the first offline primary target instead of switching to backup.
  • The gap creates inconsistent behavior: identical tunnel topologies can fail over correctly on local middle nodes but not on federated / remote middle nodes.

Repair Direction

  • In go-backend/internal/http/handler/federation.go, compute retry budget for req.Role == "middle" from len(req.Targets) and set service["handler"]["retries"] to at least len(req.Targets) - 1 when there is more than one target.
  • Keep retry injection scoped to federated middle roles only; exit roles should continue to omit retries because they do not rebuild downstream chain selection.
  • Add regression coverage that proves federated middle runtime application preserves local parity, ideally by asserting the generated remote service config or by exercising a dual-panel contract path with multi-target middle nodes.
  • Recheck federation release behavior to ensure added retry fields do not affect idempotent cleanup, service deletion, or re-apply flows.

Validation

  • cd go-backend && go test ./internal/http/handler/... -count=1
  • cd go-backend && go test ./tests/contract/... -count=1