Skip to content

Commit e0b7118

Browse files
Clone only needed KademliaPeers when yielding closest nodes (#326)
closes #53 --------- Co-authored-by: Dmitry Markin <dmitry@markin.tech>
1 parent 2a49fd0 commit e0b7118

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

src/protocol/libp2p/kademlia/bucket.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ impl KBucket {
101101

102102
/// Get iterator over the k-bucket, sorting the k-bucket entries in increasing order
103103
/// by distance.
104-
pub fn closest_iter<K: Clone>(&self, target: &Key<K>) -> impl Iterator<Item = KademliaPeer> {
105-
let mut nodes = self.nodes.clone();
104+
pub fn closest_iter<K: Clone>(&self, target: &Key<K>) -> impl Iterator<Item = &KademliaPeer> {
105+
let mut nodes: Vec<_> = self.nodes.iter().collect();
106106
nodes.sort_by(|a, b| target.distance(&a.key).cmp(&target.distance(&b.key)));
107107
nodes.into_iter().filter(|peer| !peer.addresses.is_empty())
108108
}

src/protocol/libp2p/kademlia/routing_table.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,10 @@ impl RoutingTable {
187187

188188
/// Get `limit` closest peers to `target` from the k-buckets.
189189
pub fn closest<K: Clone>(&mut self, target: &Key<K>, limit: usize) -> Vec<KademliaPeer> {
190-
ClosestBucketsIter::new(self.local_key.distance(target))
191-
.flat_map(|index| self.buckets[index.get()].closest_iter(target))
190+
ClosestBucketsIter::new(self.local_key.distance(&target))
191+
.flat_map(|index| self.buckets[index.get()].closest_iter(&target))
192192
.take(limit)
193+
.cloned()
193194
.collect()
194195
}
195196
}

0 commit comments

Comments
 (0)