From 7d5e6068681c35c925af4681255ec835a7f306ae Mon Sep 17 00:00:00 2001 From: drHuangMHT Date: Mon, 13 Mar 2023 19:06:40 +0800 Subject: [PATCH 01/11] feat: make mdns::Event clone-able --- protocols/mdns/src/behaviour.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/protocols/mdns/src/behaviour.rs b/protocols/mdns/src/behaviour.rs index b34a1a73629..f2709e90bdf 100644 --- a/protocols/mdns/src/behaviour.rs +++ b/protocols/mdns/src/behaviour.rs @@ -339,7 +339,7 @@ where } /// Event that can be produced by the `Mdns` behaviour. -#[derive(Debug)] +#[derive(Debug, Clone)] pub enum Event { /// Discovered nodes through mDNS. Discovered(DiscoveredAddrsIter), @@ -352,6 +352,7 @@ pub enum Event { } /// Iterator that produces the list of addresses that have been discovered. +#[derive(Clone)] pub struct DiscoveredAddrsIter { inner: smallvec::IntoIter<[(PeerId, Multiaddr); 4]>, } @@ -379,6 +380,7 @@ impl fmt::Debug for DiscoveredAddrsIter { } /// Iterator that produces the list of addresses that have expired. +#[derive(Clone)] pub struct ExpiredAddrsIter { inner: smallvec::IntoIter<[(PeerId, Multiaddr); 4]>, } From a72e5e2f1edf92324268b837a63fd5b9f00e5373 Mon Sep 17 00:00:00 2001 From: drHuangMHT Date: Mon, 13 Mar 2023 20:23:28 +0800 Subject: [PATCH 02/11] docs: filling CHANGELOG for PR 3606 Unreleased patch version 0.43.1 bumped. Added entry for PR 3606: Deriving 'Clone' for 'mdns::Event' --- protocols/mdns/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/protocols/mdns/CHANGELOG.md b/protocols/mdns/CHANGELOG.md index c2b548e3389..62a361a0608 100644 --- a/protocols/mdns/CHANGELOG.md +++ b/protocols/mdns/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.43.1 [unreleased] + +- Deriving `Clone` for `mdns::Event`. See [PR 3606]. + # 0.43.0 - Update to `libp2p-core` `v0.39.0`. From 926c7ca99cd5c2de45d6610da45a41ab418ebe3b Mon Sep 17 00:00:00 2001 From: Thomas Eizinger Date: Tue, 14 Mar 2023 03:17:21 +1100 Subject: [PATCH 03/11] Update protocols/mdns/CHANGELOG.md --- protocols/mdns/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/protocols/mdns/CHANGELOG.md b/protocols/mdns/CHANGELOG.md index 62a361a0608..c877ca48ccb 100644 --- a/protocols/mdns/CHANGELOG.md +++ b/protocols/mdns/CHANGELOG.md @@ -2,6 +2,7 @@ - Deriving `Clone` for `mdns::Event`. See [PR 3606]. +[PR 3606]: https://github.com/libp2p/rust-libp2p/pull/3606 # 0.43.0 - Update to `libp2p-core` `v0.39.0`. From 49d26c4795a45471fc67af3e6bca6477faf86244 Mon Sep 17 00:00:00 2001 From: Thomas Eizinger Date: Tue, 14 Mar 2023 03:17:36 +1100 Subject: [PATCH 04/11] Update protocols/mdns/CHANGELOG.md --- protocols/mdns/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/mdns/CHANGELOG.md b/protocols/mdns/CHANGELOG.md index c877ca48ccb..0c3b88c018c 100644 --- a/protocols/mdns/CHANGELOG.md +++ b/protocols/mdns/CHANGELOG.md @@ -1,6 +1,6 @@ # 0.43.1 [unreleased] -- Deriving `Clone` for `mdns::Event`. See [PR 3606]. +- Derive `Clone` for `mdns::Event`. See [PR 3606]. [PR 3606]: https://github.com/libp2p/rust-libp2p/pull/3606 # 0.43.0 From a8ff1eb46a336807fb06805a88ccbbde335591f3 Mon Sep 17 00:00:00 2001 From: drHuangMHT Date: Thu, 16 Mar 2023 10:46:39 +0800 Subject: [PATCH 05/11] feat: change 'mdns::Event' to hold 'SmallVec' --- protocols/mdns/src/behaviour.rs | 68 ++------------------------------- 1 file changed, 4 insertions(+), 64 deletions(-) diff --git a/protocols/mdns/src/behaviour.rs b/protocols/mdns/src/behaviour.rs index f2709e90bdf..6f590c49882 100644 --- a/protocols/mdns/src/behaviour.rs +++ b/protocols/mdns/src/behaviour.rs @@ -304,9 +304,7 @@ where } } if !discovered.is_empty() { - let event = Event::Discovered(DiscoveredAddrsIter { - inner: discovered.into_iter(), - }); + let event = Event::Discovered(discovered); return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)); } // Emit expired event. @@ -323,9 +321,7 @@ where true }); if !expired.is_empty() { - let event = Event::Expired(ExpiredAddrsIter { - inner: expired.into_iter(), - }); + let event = Event::Expired(expired); return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)); } if let Some(closest_expiration) = closest_expiration { @@ -342,67 +338,11 @@ where #[derive(Debug, Clone)] pub enum Event { /// Discovered nodes through mDNS. - Discovered(DiscoveredAddrsIter), + Discovered(SmallVec<[(PeerId, Multiaddr); 4]>), /// The given combinations of `PeerId` and `Multiaddr` have expired. /// /// Each discovered record has a time-to-live. When this TTL expires and the address hasn't /// been refreshed, we remove it from the list and emit it as an `Expired` event. - Expired(ExpiredAddrsIter), -} - -/// Iterator that produces the list of addresses that have been discovered. -#[derive(Clone)] -pub struct DiscoveredAddrsIter { - inner: smallvec::IntoIter<[(PeerId, Multiaddr); 4]>, -} - -impl Iterator for DiscoveredAddrsIter { - type Item = (PeerId, Multiaddr); - - #[inline] - fn next(&mut self) -> Option { - self.inner.next() - } - - #[inline] - fn size_hint(&self) -> (usize, Option) { - self.inner.size_hint() - } -} - -impl ExactSizeIterator for DiscoveredAddrsIter {} - -impl fmt::Debug for DiscoveredAddrsIter { - fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt.debug_struct("DiscoveredAddrsIter").finish() - } -} - -/// Iterator that produces the list of addresses that have expired. -#[derive(Clone)] -pub struct ExpiredAddrsIter { - inner: smallvec::IntoIter<[(PeerId, Multiaddr); 4]>, -} - -impl Iterator for ExpiredAddrsIter { - type Item = (PeerId, Multiaddr); - - #[inline] - fn next(&mut self) -> Option { - self.inner.next() - } - - #[inline] - fn size_hint(&self) -> (usize, Option) { - self.inner.size_hint() - } -} - -impl ExactSizeIterator for ExpiredAddrsIter {} - -impl fmt::Debug for ExpiredAddrsIter { - fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt.debug_struct("ExpiredAddrsIter").finish() - } + Expired(SmallVec<[(PeerId, Multiaddr); 4]>), } From 4cec5fac84941c95cb50a35a3dc7395e2f71bf3c Mon Sep 17 00:00:00 2001 From: drHuangMHT Date: Thu, 16 Mar 2023 10:48:05 +0800 Subject: [PATCH 06/11] test: adapting test to 'mdns::Event' change --- protocols/mdns/tests/use-async-std.rs | 20 ++++++++++---------- protocols/mdns/tests/use-tokio.rs | 16 ++++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/protocols/mdns/tests/use-async-std.rs b/protocols/mdns/tests/use-async-std.rs index 139fcca1d50..bfc3cd1201d 100644 --- a/protocols/mdns/tests/use-async-std.rs +++ b/protocols/mdns/tests/use-async-std.rs @@ -61,13 +61,13 @@ async fn test_expired_async_std() { loop { match futures::future::select(a.next_behaviour_event(), b.next_behaviour_event()).await { - Either::Left((Event::Expired(mut peers), _)) => { - if peers.any(|(p, _)| p == b_peer_id) { + Either::Left((Event::Expired(peers), _)) => { + if peers.into_iter().any(|(p, _)| p == b_peer_id) { return; } } - Either::Right((Event::Expired(mut peers), _)) => { - if peers.any(|(p, _)| p == a_peer_id) { + Either::Right((Event::Expired(peers), _)) => { + if peers.into_iter().any(|(p, _)| p == a_peer_id) { return; } } @@ -93,8 +93,8 @@ async fn test_no_expiration_on_close_async_std() { // 1. Connect via address from mDNS event loop { - if let Event::Discovered(mut peers) = a.next_behaviour_event().await { - if let Some((_, addr)) = peers.find(|(p, _)| p == &b_peer_id) { + if let Event::Discovered(peers) = a.next_behaviour_event().await { + if let Some((_, addr)) = peers.into_iter().find(|(p, _)| p == &b_peer_id) { a.dial_and_wait(addr).await; break; } @@ -130,13 +130,13 @@ async fn run_discovery_test(config: Config) { while !discovered_a && !discovered_b { match futures::future::select(a.next_behaviour_event(), b.next_behaviour_event()).await { - Either::Left((Event::Discovered(mut peers), _)) => { - if peers.any(|(p, _)| p == b_peer_id) { + Either::Left((Event::Discovered(peers), _)) => { + if peers.into_iter().any(|(p, _)| p == b_peer_id) { discovered_b = true; } } - Either::Right((Event::Discovered(mut peers), _)) => { - if peers.any(|(p, _)| p == a_peer_id) { + Either::Right((Event::Discovered(peers), _)) => { + if peers.into_iter().any(|(p, _)| p == a_peer_id) { discovered_a = true; } } diff --git a/protocols/mdns/tests/use-tokio.rs b/protocols/mdns/tests/use-tokio.rs index e18ae28fee7..229418437f4 100644 --- a/protocols/mdns/tests/use-tokio.rs +++ b/protocols/mdns/tests/use-tokio.rs @@ -59,13 +59,13 @@ async fn test_expired_tokio() { loop { match futures::future::select(a.next_behaviour_event(), b.next_behaviour_event()).await { - Either::Left((Event::Expired(mut peers), _)) => { - if peers.any(|(p, _)| p == b_peer_id) { + Either::Left((Event::Expired(peers), _)) => { + if peers.into_iter().any(|(p, _)| p == b_peer_id) { return; } } - Either::Right((Event::Expired(mut peers), _)) => { - if peers.any(|(p, _)| p == a_peer_id) { + Either::Right((Event::Expired(peers), _)) => { + if peers.into_iter().any(|(p, _)| p == a_peer_id) { return; } } @@ -86,13 +86,13 @@ async fn run_discovery_test(config: Config) { while !discovered_a && !discovered_b { match futures::future::select(a.next_behaviour_event(), b.next_behaviour_event()).await { - Either::Left((Event::Discovered(mut peers), _)) => { - if peers.any(|(p, _)| p == b_peer_id) { + Either::Left((Event::Discovered(peers), _)) => { + if peers.into_iter().any(|(p, _)| p == b_peer_id) { discovered_b = true; } } - Either::Right((Event::Discovered(mut peers), _)) => { - if peers.any(|(p, _)| p == a_peer_id) { + Either::Right((Event::Discovered(peers), _)) => { + if peers.into_iter().any(|(p, _)| p == a_peer_id) { discovered_a = true; } } From 18811d24ae748ca703f51ef66bdcb3961402965c Mon Sep 17 00:00:00 2001 From: drHuangMHT Date: Thu, 16 Mar 2023 17:30:41 +0800 Subject: [PATCH 07/11] feat(mdns): change 'mdns::Event' to hold 'Vec' --- protocols/mdns/src/behaviour.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/protocols/mdns/src/behaviour.rs b/protocols/mdns/src/behaviour.rs index 6f590c49882..f175a94aa06 100644 --- a/protocols/mdns/src/behaviour.rs +++ b/protocols/mdns/src/behaviour.rs @@ -285,7 +285,7 @@ where } } // Emit discovered event. - let mut discovered = SmallVec::<[(PeerId, Multiaddr); 4]>::new(); + let mut discovered = Vec::new(); for iface_state in self.iface_states.values_mut() { while let Poll::Ready((peer, addr, expiration)) = iface_state.poll(cx, &self.listen_addresses) @@ -310,7 +310,7 @@ where // Emit expired event. let now = Instant::now(); let mut closest_expiration = None; - let mut expired = SmallVec::<[(PeerId, Multiaddr); 4]>::new(); + let mut expired = Vec::new(); self.discovered_nodes.retain(|(peer, addr, expiration)| { if *expiration <= now { log::info!("expired: {} {}", peer, addr); @@ -338,11 +338,11 @@ where #[derive(Debug, Clone)] pub enum Event { /// Discovered nodes through mDNS. - Discovered(SmallVec<[(PeerId, Multiaddr); 4]>), + Discovered(Vec<(PeerId, Multiaddr)>), /// The given combinations of `PeerId` and `Multiaddr` have expired. /// /// Each discovered record has a time-to-live. When this TTL expires and the address hasn't /// been refreshed, we remove it from the list and emit it as an `Expired` event. - Expired(SmallVec<[(PeerId, Multiaddr); 4]>), + Expired(Vec<(PeerId, Multiaddr)>), } From abdce7ecbb16256bcad5118fd0d05ce644f01d5f Mon Sep 17 00:00:00 2001 From: drHuangMHT Date: Thu, 16 Mar 2023 17:39:50 +0800 Subject: [PATCH 08/11] doc: add entry for #3621 New unreleased minor version 0.44.0. --- protocols/mdns/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/protocols/mdns/CHANGELOG.md b/protocols/mdns/CHANGELOG.md index 0c3b88c018c..6225dc376e5 100644 --- a/protocols/mdns/CHANGELOG.md +++ b/protocols/mdns/CHANGELOG.md @@ -1,3 +1,9 @@ +# 0.44.0 [unreleased] + +- Change `mdns::Event` to hold `Vec`. See [PR 3621] + +[PR 3621]: https://github.com/libp2p/rust-libp2p/pull/3621 + # 0.43.1 [unreleased] - Derive `Clone` for `mdns::Event`. See [PR 3606]. From d5c246cc265e703d4f8af76f8c1de370a3f8c821 Mon Sep 17 00:00:00 2001 From: DrHuangMHT Date: Thu, 16 Mar 2023 22:05:01 +0800 Subject: [PATCH 09/11] Update protocols/mdns/CHANGELOG.md Co-authored-by: Thomas Eizinger --- protocols/mdns/CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/protocols/mdns/CHANGELOG.md b/protocols/mdns/CHANGELOG.md index 6225dc376e5..04a8162e065 100644 --- a/protocols/mdns/CHANGELOG.md +++ b/protocols/mdns/CHANGELOG.md @@ -1,6 +1,7 @@ # 0.44.0 [unreleased] -- Change `mdns::Event` to hold `Vec`. See [PR 3621] +- Change `mdns::Event` to hold `Vec` and remove `DiscoveredAddrsIter` and `ExpiredAddrsIter`. + See [PR 3621]. [PR 3621]: https://github.com/libp2p/rust-libp2p/pull/3621 From 9d45cf3d8c91221333f91bee67b675e0b043c623 Mon Sep 17 00:00:00 2001 From: drHuangMHT Date: Sun, 26 Mar 2023 19:36:50 +0800 Subject: [PATCH 10/11] Remove conflict marker to resolve conflicts --- protocols/mdns/src/behaviour.rs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/protocols/mdns/src/behaviour.rs b/protocols/mdns/src/behaviour.rs index 56b9f9af144..5186ce91cb7 100644 --- a/protocols/mdns/src/behaviour.rs +++ b/protocols/mdns/src/behaviour.rs @@ -304,15 +304,8 @@ where } } if !discovered.is_empty() { -<<<<<<< HEAD let event = Event::Discovered(discovered); - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)); -======= - let event = Event::Discovered(DiscoveredAddrsIter { - inner: discovered.into_iter(), - }); return Poll::Ready(ToSwarm::GenerateEvent(event)); ->>>>>>> upstream/master } // Emit expired event. let now = Instant::now(); @@ -328,15 +321,8 @@ where true }); if !expired.is_empty() { -<<<<<<< HEAD let event = Event::Expired(expired); - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)); -======= - let event = Event::Expired(ExpiredAddrsIter { - inner: expired.into_iter(), - }); return Poll::Ready(ToSwarm::GenerateEvent(event)); ->>>>>>> upstream/master } if let Some(closest_expiration) = closest_expiration { let mut timer = P::Timer::at(closest_expiration); From 7cf55564c141c7dd41f875b7f288ed4c43c8a169 Mon Sep 17 00:00:00 2001 From: Thomas Eizinger Date: Fri, 14 Apr 2023 09:07:22 +0200 Subject: [PATCH 11/11] Update protocols/mdns/CHANGELOG.md --- protocols/mdns/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/mdns/CHANGELOG.md b/protocols/mdns/CHANGELOG.md index 10b8743b07d..2bd1d3d247c 100644 --- a/protocols/mdns/CHANGELOG.md +++ b/protocols/mdns/CHANGELOG.md @@ -1,4 +1,4 @@ -# 0.44.0 [unreleased] +# 0.44.0 - unreleased - Change `mdns::Event` to hold `Vec` and remove `DiscoveredAddrsIter` and `ExpiredAddrsIter`. See [PR 3621].