mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-06 14:41:21 +00:00
protocols/kad/behaviour: Use HashSet to deduplicate GetProviders (#1528)
Given that the order of `PeerId`s within the `GetProvidersOk.providers` set is irrelevant but duplication is at best confusing this commit makes use of a `HashSet` instead of a `Vec` to return unique `PeerId`s only.
This commit is contained in:
parent
0d3e4f2051
commit
2296a87b73
@ -42,7 +42,7 @@ use libp2p_swarm::{
|
|||||||
use log::{info, debug, warn};
|
use log::{info, debug, warn};
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
use std::{borrow::{Borrow, Cow}, error, iter, time::Duration};
|
use std::{borrow::{Borrow, Cow}, error, iter, time::Duration};
|
||||||
use std::collections::VecDeque;
|
use std::collections::{HashSet, VecDeque};
|
||||||
use std::num::NonZeroUsize;
|
use std::num::NonZeroUsize;
|
||||||
use std::task::{Context, Poll};
|
use std::task::{Context, Poll};
|
||||||
use wasm_timer::Instant;
|
use wasm_timer::Instant;
|
||||||
@ -534,7 +534,7 @@ where
|
|||||||
pub fn get_providers(&mut self, key: record::Key) {
|
pub fn get_providers(&mut self, key: record::Key) {
|
||||||
let info = QueryInfo::GetProviders {
|
let info = QueryInfo::GetProviders {
|
||||||
key: key.clone(),
|
key: key.clone(),
|
||||||
providers: Vec::new(),
|
providers: HashSet::new(),
|
||||||
};
|
};
|
||||||
let target = kbucket::Key::new(key);
|
let target = kbucket::Key::new(key);
|
||||||
let peers = self.kbuckets.closest_keys(&target);
|
let peers = self.kbuckets.closest_keys(&target);
|
||||||
@ -1233,7 +1233,7 @@ where
|
|||||||
providers, ..
|
providers, ..
|
||||||
} = &mut query.inner.info {
|
} = &mut query.inner.info {
|
||||||
for peer in provider_peers {
|
for peer in provider_peers {
|
||||||
providers.push(peer.node_id);
|
providers.insert(peer.node_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1701,7 +1701,7 @@ pub type GetProvidersResult = Result<GetProvidersOk, GetProvidersError>;
|
|||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct GetProvidersOk {
|
pub struct GetProvidersOk {
|
||||||
pub key: record::Key,
|
pub key: record::Key,
|
||||||
pub providers: Vec<PeerId>,
|
pub providers: HashSet<PeerId>,
|
||||||
pub closest_peers: Vec<PeerId>
|
pub closest_peers: Vec<PeerId>
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1710,7 +1710,7 @@ pub struct GetProvidersOk {
|
|||||||
pub enum GetProvidersError {
|
pub enum GetProvidersError {
|
||||||
Timeout {
|
Timeout {
|
||||||
key: record::Key,
|
key: record::Key,
|
||||||
providers: Vec<PeerId>,
|
providers: HashSet<PeerId>,
|
||||||
closest_peers: Vec<PeerId>
|
closest_peers: Vec<PeerId>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1843,7 +1843,7 @@ enum QueryInfo {
|
|||||||
/// The key for which to search for providers.
|
/// The key for which to search for providers.
|
||||||
key: record::Key,
|
key: record::Key,
|
||||||
/// The found providers.
|
/// The found providers.
|
||||||
providers: Vec<PeerId>,
|
providers: HashSet<PeerId>,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// A query that searches for the closest closest nodes to a key to be
|
/// A query that searches for the closest closest nodes to a key to be
|
||||||
|
Loading…
x
Reference in New Issue
Block a user