aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/peer
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-03 02:00:58 +0100
committertv <tv@krebsco.de>2026-11-03 02:00:58 +0100
commitadecfcff1a818cb6d80fd8e24412830ef0988e65 (patch)
treeeca30977e4308db344eeb4231efa8959e3199355 /src/swarm/peer
parent02989b6a22a7bbd2151d6a4ea4fe6dddc9f2995b (diff)
probe list members
Diffstat (limited to 'src/swarm/peer')
-rw-r--r--src/swarm/peer/handshake.rs11
-rw-r--r--src/swarm/peer/worker.rs2
2 files changed, 7 insertions, 6 deletions
diff --git a/src/swarm/peer/handshake.rs b/src/swarm/peer/handshake.rs
index 072545b..1ca955b 100644
--- a/src/swarm/peer/handshake.rs
+++ b/src/swarm/peer/handshake.rs
@@ -330,15 +330,16 @@ pub(crate) async fn probe_when_reachable(state: AppState, reachable: Arc<tokio::
/// Brings `peer`'s next probe forward to now, if it is a member we can't reach (dormant,
/// or unanswered HELLOs) whose probe is pending: the peer worker sends it (woken for
-/// it). Whether it was.
+/// it). A member by its HELLO_REPLY, or by the member list (`stop_hello_retries`).
+/// Whether it was.
async fn probe_now(state: &AppState, peer: &str) -> bool {
let Some(peer_state) = state.get_peer_state(peer).await else {
return false;
};
let mut peer_state = peer_state.lock().await;
- if !matches!(peer_state.standing, Standing::Member { .. })
- || !(peer_state.liveness.is_dormant() || peer_state.is_unreachable())
- {
+ let member =
+ matches!(peer_state.standing, Standing::Member { .. }) || topology::is_listed(state, peer);
+ if !member || !(peer_state.liveness.is_dormant() || peer_state.is_unreachable()) {
return false;
}
match &mut peer_state.hello_state {
@@ -372,7 +373,7 @@ pub(crate) async fn apply_neighbour_change(state: &AppState, change: topology::N
for peer in &change.removed {
if let Some(peer_state) = state.get_peer_state(peer).await {
let mut peer_state = peer_state.lock().await;
- peer_state.stop_hello_retries();
+ peer_state.stop_hello_retries(topology::is_listed(state, peer));
peer_state.reset_sync();
}
}
diff --git a/src/swarm/peer/worker.rs b/src/swarm/peer/worker.rs
index 6196571..a803922 100644
--- a/src/swarm/peer/worker.rs
+++ b/src/swarm/peer/worker.rs
@@ -99,7 +99,7 @@ pub(crate) async fn run_peer_worker(state: AppState) {
None
};
if !neighbour {
- peer_state.stop_hello_retries();
+ peer_state.stop_hello_retries(topology::is_listed(&state, peer));
}
let unanswered = peer_state.take_overdue_sync_reply(now);
(became_dormant, keepalive, unanswered)