From f7a812439b78a4dd0a7fb908199fe8100ab76a81 Mon Sep 17 00:00:00 2001 From: Ivan Zderadicka Date: Sun, 22 Sep 2024 09:31:57 +0200 Subject: [PATCH] Change to restarting of dead peers (#239) * Logging died peers * Ignore incoming for retry, cancel retries after download is complete * Remove cancel * Add incoming flag to PeerHandler * Cleaning up, plus debug * Fix debug style --- crates/librqbit/src/torrent_state/live/mod.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/librqbit/src/torrent_state/live/mod.rs b/crates/librqbit/src/torrent_state/live/mod.rs index 2d8d819..5cd70ad 100644 --- a/crates/librqbit/src/torrent_state/live/mod.rs +++ b/crates/librqbit/src/torrent_state/live/mod.rs @@ -399,6 +399,7 @@ impl TorrentStateLive { // TODO: bump counters for incoming let handler = PeerHandler { addr: checked_peer.addr, + incoming: true, on_bitfield_notify: Default::default(), unchoke_notify: Default::default(), locked: RwLock::new(PeerHandlerLocked { i_am_choked: true }), @@ -463,6 +464,7 @@ impl TorrentStateLive { let handler = PeerHandler { addr, + incoming: false, on_bitfield_notify: Default::default(), unchoke_notify: Default::default(), locked: RwLock::new(PeerHandlerLocked { i_am_choked: true }), @@ -818,7 +820,7 @@ struct PeerHandler { requests_sem: Semaphore, addr: SocketAddr, - + incoming: bool, tx: PeerTx, first_message_received: AtomicBool, @@ -1018,6 +1020,15 @@ impl PeerHandler { pe.value_mut().state.set(PeerState::Dead, &pstats); + if self.incoming { + // do not retry incoming peers + debug!( + peer = handle.to_string(), + "incoming peer died, not re-queueing" + ); + return Ok(()); + } + let backoff = pe.value_mut().stats.backoff.next_backoff(); // Prevent deadlocks.