Fix unexpected Marking peer disconnected in DHT (#6140)

* Don't disconnect peer in DHT if there's an active connection

* Merge branch 'unstable' into dont-disconnect-if-active-connection
This commit is contained in:
Akihito Nakano
2024-07-25 21:08:59 +09:00
committed by GitHub
parent 4e5a363a4f
commit 62a39af19e

View File

@@ -1166,8 +1166,19 @@ impl<E: EthSpec> Discovery<E> {
fn on_dial_failure(&mut self, peer_id: Option<PeerId>, error: &DialError) {
if let Some(peer_id) = peer_id {
match error {
DialError::Denied { .. } => {
if self.network_globals.peers.read().is_connected(&peer_id) {
// There's an active connection, so we dont disconnect the peer.
// Lighthouse dials to a peer twice using TCP and QUIC (if QUIC is not
// disabled). Usually, one establishes a connection, and the other fails
// because the peer allows only one connection per peer.
return;
}
// set peer as disconnected in discovery DHT
debug!(self.log, "Marking peer disconnected in DHT"; "peer_id" => %peer_id, "error" => %ClearDialError(error));
self.disconnect_peer(&peer_id);
}
DialError::LocalPeerId { .. }
| DialError::Denied { .. }
| DialError::NoAddresses
| DialError::Transport(_)
| DialError::WrongPeerId { .. } => {