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
let failed_peers = batch.failed_peers();
let new_peer = {
let mut priorized_peers = self
.network_globals
.peers
.read()
.synced_peers()
.map(|peer| {
(
failed_peers.contains(peer),
self.active_requests.get(peer).map(|v| v.len()).unwrap_or(0),
*peer,
)
})
.collect::<Vec<_>>();
let new_peer = self
.network_globals
.peers
.read()
.synced_peers()
.map(|peer| {
(
failed_peers.contains(peer),
self.active_requests.get(peer).map(|v| v.len()).unwrap_or(0),
rand::random::<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.participating_peers.insert(peer);