From 2bc9dd557a685daf86187623511950ec85047283 Mon Sep 17 00:00:00 2001 From: Johnathan Corgan Date: Mon, 18 May 2026 00:50:44 +0000 Subject: [PATCH] changelog: backfill surgical coord-cache invalidation + rekey-test ping retry Two Fixed entries appended to [Unreleased]: - The coord cache surgical invalidation (49bd2104): replaces the global CoordCache::clear() at parent-switch / become-root / loop-detection / root-change sites with two targeted methods (invalidate_via_node, invalidate_other_roots). Preserves cache entries that remain correct after the topology change. - The rekey-test strict-ping retry (306e4555): Phase 1 / 3 / 5 per-pair pings now retry up to 4 attempts. Brings the ICMP-noise miss-floor from ~33% per phase to ~3.2e-6 at 1% loss without changing the failure-shape signal the asserts target. Test scaffold only, no daemon code changes. --- CHANGELOG.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd53edd..8df2ac7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Coord cache invalidation made surgical at parent-position-change + and root-change sites. Replaces the previous unconditional + `CoordCache::clear()` calls with two targeted methods: + `invalidate_via_node(node_addr)` (drops entries whose cached + ancestry contains the changed node, used at parent-switch / + become-root / loop-detection sites) and `invalidate_other_roots` + (drops entries from a different tree, used at root-change sites). + The previous global flush left `find_next_hop` returning `None` + for every non-direct-peer destination after every parent switch + until the cache passively re-warmed; surgical invalidation + preserves entries that remain correct across the topology change. + Peer-removal retains the original "no invalidation" behavior + (`find_next_hop` already recomputes against the current peer set + every call, and Discovery handles "no route" on demand). +- Rekey integration test (`testing/static/scripts/rekey-test.sh`): + Phase 1, Phase 3, and Phase 5 strict per-pair pings now retry up + to 4 attempts (configurable via `MAX_PING_ATTEMPTS` / + `PING_RETRY_DELAY`). Under low-level packet loss (1% per + direction), single-shot 20-pair ping_all misses with probability + ~33% per phase from ICMP noise alone, masking the routing-state + signal the asserts target. The 4-attempt retry brings that floor + to ~3.2e-6 per phase. The `wait_for_full_baseline` convergence + loop itself stays single-shot — retries there would conflate + transient ping loss with still-converging routing state. Test + scaffold only; no daemon code changes. - Apply ±15s symmetric jitter per session to the FMP and FSP rekey timer trigger. Eliminates the steady-state dual-initiation race in symmetric-start meshes; previously the smaller-NodeAddr