From 36c46a2bc401541c7981300c85bbfb259b4a7711 Mon Sep 17 00:00:00 2001 From: driftluo Date: Sat, 6 Jul 2019 14:46:26 +0800 Subject: [PATCH] fix: reserved only do nothing except for connect all reserved peers --- network/src/services/outbound_peer.rs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/network/src/services/outbound_peer.rs b/network/src/services/outbound_peer.rs index 5292cf3b5b..07a9850cb8 100644 --- a/network/src/services/outbound_peer.rs +++ b/network/src/services/outbound_peer.rs @@ -52,7 +52,6 @@ impl OutboundPeerService { } paddrs }); - let p2p_control = self.p2p_control.clone(); trace!( "count={}, attempt_peers: {:?} is_feeler: {}", count, @@ -62,10 +61,26 @@ impl OutboundPeerService { for paddr in attempt_peers { let PeerAddr { peer_id, addr, .. } = paddr; if is_feeler { - self.network_state.dial_feeler(&p2p_control, &peer_id, addr); + self.network_state + .dial_feeler(&self.p2p_control, &peer_id, addr); } else { self.network_state - .dial_identify(&p2p_control, &peer_id, addr); + .dial_identify(&self.p2p_control, &peer_id, addr); + } + } + } + + fn try_dial_reserved(&self) { + // This will never panic because network start has already been checked + for (peer_id, addr) in self + .network_state + .config + .reserved_peers() + .expect("address must be correct") + { + if self.network_state.query_session_id(&peer_id).is_none() { + self.network_state + .dial_identify(&self.p2p_control, &peer_id, addr); } } } @@ -86,7 +101,9 @@ impl Future for OutboundPeerService { if last_connect > self.try_connect_interval { let status = self.network_state.connection_status(); let new_outbound = status.max_outbound - status.unreserved_outbound; - if new_outbound > 0 { + if self.network_state.config.reserved_only { + self.try_dial_reserved() + } else if new_outbound > 0 { // dial peers self.dial_peers(false, new_outbound as u32); } else {