diff --git a/substrate/core/network-libp2p/src/custom_proto/behaviour.rs b/substrate/core/network-libp2p/src/custom_proto/behaviour.rs index ca8fc55d3785adcadb9965024ccc17c2b4de8622..6a69587eeaeb230a44bbbddbeb77ef0bdea83101 100644 --- a/substrate/core/network-libp2p/src/custom_proto/behaviour.rs +++ b/substrate/core/network-libp2p/src/custom_proto/behaviour.rs @@ -499,12 +499,19 @@ where fn inject_dial_failure(&mut self, peer_id: Option<&PeerId>, addr: &Multiaddr, error: &dyn error::Error) { if let Some(peer_id) = peer_id.as_ref() { debug!(target: "sub-libp2p", "Failed to reach peer {:?} through {} => {:?}", peer_id, addr, error); - if self.connected_peers.contains(peer_id) { - self.topology.set_unreachable(addr); - } + self.topology.set_unreachable(addr); // Trigger a `connect_to_nodes` round. self.next_connect_to_nodes = Delay::new(Instant::now()); + + } else { + // This code path is only reached if `peer_id` is None, which means that we dialed an + // address without knowing the `PeerId` to expect. We don't currently do that, except + // in one situation: for convenience, we accept bootstrap node addresses in the format + // `IP:PORT`. + // There is no reason this trigger a `connect_to_nodes` round in that situation. + debug!(target: "sub-libp2p", "Failed to reach {} => {:?}", addr, error); + self.topology.set_unreachable(addr); } }