From de30fc105bbb9c610c847f64e00cd2555ca0c63c Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 6 Nov 2026 04:33:45 +0100 Subject: rtt table pruned --- src/swarm/peer/worker.rs | 1 + src/swarm/rtt.rs | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/swarm/peer/worker.rs b/src/swarm/peer/worker.rs index b5c533a..7a0b502 100644 --- a/src/swarm/peer/worker.rs +++ b/src/swarm/peer/worker.rs @@ -201,6 +201,7 @@ pub(crate) async fn run_peer_worker(state: AppState) { .throughput .lock_or_recover() .retain(|peer| known.contains_key(peer)); + state.lock_rtt().retain(|peer| known.contains_key(peer)); } // Fallback for what doesn't notify (`topology::run_worker`). state.topology_changed.notify_one(); diff --git a/src/swarm/rtt.rs b/src/swarm/rtt.rs index 370754c..6dfe84a 100644 --- a/src/swarm/rtt.rs +++ b/src/swarm/rtt.rs @@ -39,6 +39,14 @@ struct Outstanding { } impl RttTable { + /// Keeps only the peers `keep` says (those still known: else every peer ever + /// greeted or measured would stay). + pub(crate) fn retain(&mut self, mut keep: impl FnMut(&str) -> bool) { + self.hellos.retain(|peer, _| keep(peer)); + self.from_paths.retain(|peer, _| keep(peer)); + self.from_hellos.retain(|peer, _| keep(peer)); + } + /// The paths layer's round-trip time to `peer` (`Transport::rtt`), as a PONG from /// it arrived. pub(crate) fn measured(&mut self, peer: &str, rtt: Duration, now: Instant) { -- cgit v1.3.1