From 5c96698de2c1d239985f3c0672b41f29a95ca13c Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 3 Nov 2026 01:54:10 +0100 Subject: swarm: links by whom we reach --- src/swarm/topology/mod.rs | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'src/swarm/topology/mod.rs') diff --git a/src/swarm/topology/mod.rs b/src/swarm/topology/mod.rs index e3479e3..992c448 100644 --- a/src/swarm/topology/mod.rs +++ b/src/swarm/topology/mod.rs @@ -142,6 +142,19 @@ pub(crate) fn intended_graph(state: &AppState) -> Option bool { + if !state.transport.can_reach(peer) { + return false; + } + match state.get_peer_state(peer).await { + Some(peer_state) => !peer_state.lock().await.is_unreachable(), + None => true, + } +} + /// The transports `member` is on, by the member list (the schemes of its addresses); /// ours as we are on them. None known: empty. pub(crate) fn transports_of(state: &AppState, member: &str) -> BTreeSet { @@ -251,18 +264,15 @@ pub(crate) async fn refresh(state: &AppState) -> Option { if member == state.local_id() { continue; } - if !state.transport.can_reach(member) { + if !reaches(state, member).await { unreachable.insert(member.clone()); continue; } - let (gone, heard) = match state.get_peer_state(member).await { - Some(peer_state) => { - let peer_state = peer_state.lock().await; - (peer_state.is_unreachable(), peer_state.last_seen.is_some()) - } - None => (false, false), + let heard = match state.get_peer_state(member).await { + Some(peer_state) => peer_state.lock().await.last_seen.is_some(), + None => false, }; - if gone || (!heard && !alive.contains(member)) { + if !heard && !alive.contains(member) { unreachable.insert(member.clone()); } } -- cgit v1.3.1