Skip to content

Commit

Permalink
Correct multiple dial bug (sigp#5113)
Browse files Browse the repository at this point in the history
* Dialing the same peer-id error fix

* Improve dialing logging

* Update beacon_node/lighthouse_network/src/peer_manager/mod.rs

Co-authored-by: Lion - dapplion <35266934+dapplion@users.noreply.github.com>

---------

Co-authored-by: Lion - dapplion <35266934+dapplion@users.noreply.github.com>
  • Loading branch information
2 people authored and danielrachi1 committed Feb 14, 2024
1 parent 46faffb commit 87a5639
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
20 changes: 14 additions & 6 deletions beacon_node/lighthouse_network/src/peer_manager/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -326,8 +326,10 @@ impl<TSpec: EthSpec> PeerManager<TSpec> {
// considered a priority. We have pre-allocated some extra priority slots for these
// peers as specified by PRIORITY_PEER_EXCESS. Therefore we dial these peers, even
// if we are already at our max_peer limit.
if min_ttl.is_some() && connected_or_dialing + to_dial_peers < self.max_priority_peers()
|| connected_or_dialing + to_dial_peers < self.max_peers()
if !self.peers_to_dial.contains(&enr)
&& ((min_ttl.is_some()
&& connected_or_dialing + to_dial_peers < self.max_priority_peers())
|| connected_or_dialing + to_dial_peers < self.max_peers())
{
// This should be updated with the peer dialing. In fact created once the peer is
// dialed
Expand All @@ -337,9 +339,11 @@ impl<TSpec: EthSpec> PeerManager<TSpec> {
.write()
.update_min_ttl(&enr.peer_id(), min_ttl);
}
debug!(self.log, "Dialing discovered peer"; "peer_id" => %enr.peer_id());
self.dial_peer(enr);
to_dial_peers += 1;
let peer_id = enr.peer_id();
if self.dial_peer(enr) {
debug!(self.log, "Dialing discovered peer"; "peer_id" => %peer_id);
to_dial_peers += 1;
}
}
}

Expand Down Expand Up @@ -401,14 +405,18 @@ impl<TSpec: EthSpec> PeerManager<TSpec> {
/* Notifications from the Swarm */

/// A peer is being dialed.
pub fn dial_peer(&mut self, peer: Enr) {
/// Returns true, if this peer will be dialed.
pub fn dial_peer(&mut self, peer: Enr) -> bool {
if self
.network_globals
.peers
.read()
.should_dial(&peer.peer_id())
{
self.peers_to_dial.push(peer);
true
} else {
false
}
}

Expand Down
6 changes: 4 additions & 2 deletions beacon_node/lighthouse_network/src/service/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1161,9 +1161,11 @@ impl<AppReqId: ReqId, TSpec: EthSpec> Network<AppReqId, TSpec> {

// Remove the ENR from the cache to prevent continual re-dialing on disconnects
for enr in peers_to_dial {
debug!(self.log, "Dialing cached ENR peer"; "peer_id" => %enr.peer_id());
self.discovery_mut().remove_cached_enr(&enr.peer_id());
self.peer_manager_mut().dial_peer(enr);
let peer_id = enr.peer_id();
if self.peer_manager_mut().dial_peer(enr) {
debug!(self.log, "Dialing cached ENR peer"; "peer_id" => %peer_id);
}
}
}

Expand Down

0 comments on commit 87a5639

Please sign in to comment.