From 09303149d923a3513f2879ebedf471d945b52aff Mon Sep 17 00:00:00 2001 From: Revertron Date: Sat, 27 May 2023 13:09:06 +0200 Subject: [PATCH] Attempt to eliminate stale peers. --- src/p2p/peers.rs | 10 +++++----- src/p2p/state.rs | 11 +++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/p2p/peers.rs b/src/p2p/peers.rs index d4377ee..9833cca 100644 --- a/src/p2p/peers.rs +++ b/src/p2p/peers.rs @@ -268,18 +268,18 @@ impl Peers { registry.reregister(stream, *token, Interest::WRITABLE | Interest::READABLE).unwrap(); } } else { + if !matches!(peer.get_state(), State::Connecting {..}) && (peer.get_state().is_timed_out() || !peer.active()) { + stale_tokens.push((token.clone(), peer.get_addr())); + continue; + } if matches!(peer.get_state(), State::Message {..}) { - if !peer.active() { - stale_tokens.push((token.clone(), peer.get_addr())); - continue; - } let stream = peer.get_stream(); registry.reregister(stream, *token, Interest::WRITABLE).unwrap(); } } } for (token, addr) in &stale_tokens { - info!("Closing stale peer from {}", addr); + info!("Closing stale (timed out) peer from {}", addr); self.close_peer(registry, token); } diff --git a/src/p2p/state.rs b/src/p2p/state.rs index 3fdd92e..a28dbe1 100644 --- a/src/p2p/state.rs +++ b/src/p2p/state.rs @@ -36,6 +36,17 @@ impl State { matches!(self, State::Idle { .. }) } + pub fn is_timed_out(&self) -> bool { + match self { + State::Error => true, + State::Banned => true, + State::Idle { from } => { + from.elapsed().as_secs() > 60 + } + _ => false + } + } + pub fn is_loop(&self) -> bool { matches!(self, State::Loop { .. } | State::SendLoop { .. }) }