mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-06 10:11:44 +00:00
Add randomization in sync retry batch peer selection (#5822)
* Add randomization in sync retry batch peer selection * Use min * Apply suggestions from code review Co-authored-by: João Oliveira <hello@jxs.pt> * Merge branch 'unstable' into peer-prio
This commit is contained in:
@@ -7,7 +7,7 @@ use beacon_chain::BeaconChainTypes;
|
||||
use fnv::FnvHashMap;
|
||||
use lighthouse_network::service::api_types::Id;
|
||||
use lighthouse_network::{PeerAction, PeerId};
|
||||
use rand::seq::SliceRandom;
|
||||
use rand::{seq::SliceRandom, Rng};
|
||||
use slog::{crit, debug, o, warn};
|
||||
use std::collections::{btree_map::Entry, BTreeMap, HashSet};
|
||||
use std::hash::{Hash, Hasher};
|
||||
@@ -873,16 +873,20 @@ impl<T: BeaconChainTypes> SyncingChain<T> {
|
||||
// Find a peer to request the batch
|
||||
let failed_peers = batch.failed_peers();
|
||||
|
||||
let new_peer = {
|
||||
let mut priorized_peers = self
|
||||
.peers
|
||||
.iter()
|
||||
.map(|(peer, requests)| (failed_peers.contains(peer), requests.len(), *peer))
|
||||
.collect::<Vec<_>>();
|
||||
let new_peer = self
|
||||
.peers
|
||||
.iter()
|
||||
.map(|(peer, requests)| {
|
||||
(
|
||||
failed_peers.contains(peer),
|
||||
requests.len(),
|
||||
rand::thread_rng().gen::<u32>(),
|
||||
*peer,
|
||||
)
|
||||
})
|
||||
// Sort peers prioritizing unrelated peers with less active requests.
|
||||
priorized_peers.sort_unstable();
|
||||
priorized_peers.first().map(|&(_, _, peer)| peer)
|
||||
};
|
||||
.min()
|
||||
.map(|(_, _, _, peer)| peer);
|
||||
|
||||
if let Some(peer) = new_peer {
|
||||
self.send_batch(network, batch_id, peer)
|
||||
|
||||
Reference in New Issue
Block a user