diff --git a/Cargo.lock b/Cargo.lock index 1c1f39bc107..5f11c0f835d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2813,7 +2813,7 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.44.2" +version = "0.44.3" dependencies = [ "arrayvec", "async-std", diff --git a/Cargo.toml b/Cargo.toml index 956816074e2..573e0e11148 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -73,7 +73,7 @@ libp2p-floodsub = { version = "0.43.0", path = "protocols/floodsub" } libp2p-gossipsub = { version = "0.45.0", path = "protocols/gossipsub" } libp2p-identify = { version = "0.43.0", path = "protocols/identify" } libp2p-identity = { version = "0.2.1" } -libp2p-kad = { version = "0.44.2", path = "protocols/kad" } +libp2p-kad = { version = "0.44.3", path = "protocols/kad" } libp2p-mdns = { version = "0.44.0", path = "protocols/mdns" } libp2p-metrics = { version = "0.13.1", path = "misc/metrics" } libp2p-mplex = { version = "0.40.0", path = "muxers/mplex" } diff --git a/protocols/kad/CHANGELOG.md b/protocols/kad/CHANGELOG.md index f0d0d689144..5389bda4592 100644 --- a/protocols/kad/CHANGELOG.md +++ b/protocols/kad/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.44.3 - unreleased + +- Prevent simultaneous dials to peers. + See [PR 4224]. + +[PR 4224]: https://github.com/libp2p/rust-libp2p/pull/4224 + ## 0.44.2 - Allow to explicitly set `Mode::{Client,Server}`. diff --git a/protocols/kad/Cargo.toml b/protocols/kad/Cargo.toml index aa66dd30dd0..52a5ba4e188 100644 --- a/protocols/kad/Cargo.toml +++ b/protocols/kad/Cargo.toml @@ -3,7 +3,7 @@ name = "libp2p-kad" edition = "2021" rust-version = "1.65.0" description = "Kademlia protocol for libp2p" -version = "0.44.2" +version = "0.44.3" authors = ["Parity Technologies "] license = "MIT" repository = "https://github.com/libp2p/rust-libp2p" diff --git a/protocols/kad/src/behaviour.rs b/protocols/kad/src/behaviour.rs index a594946ecb6..e3651fa2b3d 100644 --- a/protocols/kad/src/behaviour.rs +++ b/protocols/kad/src/behaviour.rs @@ -579,7 +579,9 @@ where } kbucket::InsertResult::Pending { disconnected } => { self.queued_events.push_back(ToSwarm::Dial { - opts: DialOpts::peer_id(disconnected.into_preimage()).build(), + opts: DialOpts::peer_id(disconnected.into_preimage()) + .condition(dial_opts::PeerCondition::NotDialing) + .build(), }); RoutingUpdate::Pending } @@ -1306,6 +1308,7 @@ where if !self.connected_peers.contains(disconnected.preimage()) { self.queued_events.push_back(ToSwarm::Dial { opts: DialOpts::peer_id(disconnected.into_preimage()) + .condition(dial_opts::PeerCondition::NotDialing) .build(), }) } @@ -2508,7 +2511,9 @@ where } else if &peer_id != self.kbuckets.local_key().preimage() { query.inner.pending_rpcs.push((peer_id, event)); self.queued_events.push_back(ToSwarm::Dial { - opts: DialOpts::peer_id(peer_id).build(), + opts: DialOpts::peer_id(peer_id) + .condition(dial_opts::PeerCondition::NotDialing) + .build(), }); } }