Flexible peer filtering (#3458)
* first pass at peers iter cleanup * more flexible peer with diff lookups * PeersIter with impl Iterator * sync against outbound peers reorder peers filters so expensive filters come later * filter peers by capabilities during sync * prefer outbound peers with high total difficulty * with_difficulty now takes a fn to allow more flexible comparisons based on difficulty * rename peers_iter() -> iter()
This commit is contained in:
@@ -345,11 +345,11 @@ impl DandelionEpoch {
|
||||
/// Choose a new outbound stem relay peer.
|
||||
pub fn next_epoch(&mut self, peers: &Arc<p2p::Peers>) {
|
||||
self.start_time = Some(Utc::now().timestamp());
|
||||
self.relay_peer = peers.outgoing_connected_peers().first().cloned();
|
||||
self.relay_peer = peers.iter().outbound().connected().choose_random();
|
||||
|
||||
// If stem_probability == 90 then we stem 90% of the time.
|
||||
let mut rng = rand::thread_rng();
|
||||
let stem_probability = self.config.stem_probability;
|
||||
let mut rng = rand::thread_rng();
|
||||
self.is_stem = rng.gen_range(0, 100) < stem_probability;
|
||||
|
||||
let addr = self.relay_peer.clone().map(|p| p.info.addr);
|
||||
@@ -386,7 +386,7 @@ impl DandelionEpoch {
|
||||
}
|
||||
|
||||
if update_relay {
|
||||
self.relay_peer = peers.outgoing_connected_peers().first().cloned();
|
||||
self.relay_peer = peers.iter().outbound().connected().choose_random();
|
||||
info!(
|
||||
"DandelionEpoch: relay_peer: new peer chosen: {:?}",
|
||||
self.relay_peer.clone().map(|p| p.info.addr)
|
||||
|
||||
Reference in New Issue
Block a user