Files
Johnathan Corgan 992432c2db medium-change: wait for traffic before each move and measure from the move
The negative control once failed with 2 replies where it needs 5. Each phase
started a ping, slept a fixed 3 s and required 5 replies, and the control
also slept a fixed 5 s after restarting node-a, and the phases 5 s between
them. Nothing waited for the condition those sleeps stood for, so anything
that delayed the first replies failed the run, and nothing in the log showed
how close any run came.

Before each move the suite now waits, each with a deadline, for:

- node-a's connected UDP socket to node-b to be pinned to the path the
  phase starts from, read from /proc/net/udp. That socket is what a move
  strands; a move made before the tick that opens it goes out through the
  wildcard socket, which follows the route by itself. This replaces the 5 s
  sleeps after the control's restart and between Phases 1 and 2.
- 5 replies, with a 15 s deadline, replacing the fixed 3 s window. Every
  phase prints how long the wait took, when the first and fifth replies came
  and the fifth's icmp_seq, and notes a start slower than the old 3 s window.

The reply count is now always one integer. grep -c printed 0 and the
fallback printed another, so with no replies at all the baseline test
errored, was taken as false, and the phase moved the route anyway.

Gaps are measured from the last reply before the move. A gap before the
move could otherwise let the control pass on an outage the move did not
cause, or fail a netmon phase for one.

On failure the suite now prints node-a's UDP socket table, every phase's
ping log and both nodes' whole logs, not the last 60 lines. For diagnosis,
MC_CONTROL_RUNS repeats Phase 3, MC_KEEP_DIR keeps every ping log and both
node logs, and MC_RUST_LOG replaces both nodes' log filter.
2026-10-22 07:20:26 +00:00
..