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:
Lion - dapplion
2024-07-09 02:24:52 +02:00
committed by GitHub
parent 9942c18c11
commit 2e2ccec9b5
2 changed files with 29 additions and 27 deletions

View File

@@ -919,24 +919,22 @@ impl<T: BeaconChainTypes> BackFillSync<T> {
// Find a peer to request the batch // Find a peer to request the batch
let failed_peers = batch.failed_peers(); let failed_peers = batch.failed_peers();
let new_peer = { let new_peer = self
let mut priorized_peers = self .network_globals
.network_globals .peers
.peers .read()
.read() .synced_peers()
.synced_peers() .map(|peer| {
.map(|peer| { (
( failed_peers.contains(peer),
failed_peers.contains(peer), self.active_requests.get(peer).map(|v| v.len()).unwrap_or(0),
self.active_requests.get(peer).map(|v| v.len()).unwrap_or(0), rand::random::<u32>(),
*peer, *peer,
) )
}) })
.collect::<Vec<_>>();
// Sort peers prioritizing unrelated peers with less active requests. // Sort peers prioritizing unrelated peers with less active requests.
priorized_peers.sort_unstable(); .min()
priorized_peers.first().map(|&(_, _, peer)| peer) .map(|(_, _, _, peer)| peer);
};
if let Some(peer) = new_peer { if let Some(peer) = new_peer {
self.participating_peers.insert(peer); self.participating_peers.insert(peer);

View File

@@ -7,7 +7,7 @@ use beacon_chain::BeaconChainTypes;
use fnv::FnvHashMap; use fnv::FnvHashMap;
use lighthouse_network::service::api_types::Id; use lighthouse_network::service::api_types::Id;
use lighthouse_network::{PeerAction, PeerId}; use lighthouse_network::{PeerAction, PeerId};
use rand::seq::SliceRandom; use rand::{seq::SliceRandom, Rng};
use slog::{crit, debug, o, warn}; use slog::{crit, debug, o, warn};
use std::collections::{btree_map::Entry, BTreeMap, HashSet}; use std::collections::{btree_map::Entry, BTreeMap, HashSet};
use std::hash::{Hash, Hasher}; use std::hash::{Hash, Hasher};
@@ -873,16 +873,20 @@ impl<T: BeaconChainTypes> SyncingChain<T> {
// Find a peer to request the batch // Find a peer to request the batch
let failed_peers = batch.failed_peers(); let failed_peers = batch.failed_peers();
let new_peer = { let new_peer = self
let mut priorized_peers = self .peers
.peers .iter()
.iter() .map(|(peer, requests)| {
.map(|(peer, requests)| (failed_peers.contains(peer), requests.len(), *peer)) (
.collect::<Vec<_>>(); failed_peers.contains(peer),
requests.len(),
rand::thread_rng().gen::<u32>(),
*peer,
)
})
// Sort peers prioritizing unrelated peers with less active requests. // Sort peers prioritizing unrelated peers with less active requests.
priorized_peers.sort_unstable(); .min()
priorized_peers.first().map(|&(_, _, peer)| peer) .map(|(_, _, _, peer)| peer);
};
if let Some(peer) = new_peer { if let Some(peer) = new_peer {
self.send_batch(network, batch_id, peer) self.send_batch(network, batch_id, peer)