peers.add_and_connect(): try to connect even if the peer has been added (#14581)

This commit is contained in:
int88
2025-02-19 22:21:43 +08:00
committed by GitHub
parent f1f353edcc
commit 737f7833e8

View File

@ -803,6 +803,20 @@ impl PeersManager {
}
match self.peers.entry(peer_id) {
Entry::Occupied(mut entry) => {
let peer = entry.get_mut();
peer.kind = kind;
peer.fork_id = fork_id;
peer.addr = addr;
if peer.state == PeerConnectionState::Idle {
// Try connecting again.
peer.state = PeerConnectionState::PendingOut;
self.connection_info.inc_pending_out();
self.queued_actions
.push_back(PeerAction::Connect { peer_id, remote_addr: addr.tcp() });
}
}
Entry::Vacant(entry) => {
trace!(target: "net::peers", ?peer_id, addr=?addr.tcp(), "connects new node");
let mut peer = Peer::with_kind(addr, kind);
@ -813,7 +827,6 @@ impl PeersManager {
self.queued_actions
.push_back(PeerAction::Connect { peer_id, remote_addr: addr.tcp() });
}
_ => return,
}
if kind.is_trusted() {
@ -2791,7 +2804,7 @@ mod tests {
}
#[tokio::test]
async fn test_add_pending_onnect() {
async fn test_add_pending_connect() {
let peer = PeerId::random();
let socket_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 1, 2)), 8008);
let mut peers = PeersManager::default();