Skip to content

Commit 2e2ccec

Browse files
authored
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 <[email protected]> * Merge branch 'unstable' into peer-prio
1 parent 9942c18 commit 2e2ccec

File tree

2 files changed

+29
-27
lines changed

2 files changed

+29
-27
lines changed

beacon_node/network/src/sync/backfill_sync/mod.rs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -919,24 +919,22 @@ impl<T: BeaconChainTypes> BackFillSync<T> {
919919
// Find a peer to request the batch
920920
let failed_peers = batch.failed_peers();
921921

922-
let new_peer = {
923-
let mut priorized_peers = self
924-
.network_globals
925-
.peers
926-
.read()
927-
.synced_peers()
928-
.map(|peer| {
929-
(
930-
failed_peers.contains(peer),
931-
self.active_requests.get(peer).map(|v| v.len()).unwrap_or(0),
932-
*peer,
933-
)
934-
})
935-
.collect::<Vec<_>>();
922+
let new_peer = self
923+
.network_globals
924+
.peers
925+
.read()
926+
.synced_peers()
927+
.map(|peer| {
928+
(
929+
failed_peers.contains(peer),
930+
self.active_requests.get(peer).map(|v| v.len()).unwrap_or(0),
931+
rand::random::<u32>(),
932+
*peer,
933+
)
934+
})
936935
// Sort peers prioritizing unrelated peers with less active requests.
937-
priorized_peers.sort_unstable();
938-
priorized_peers.first().map(|&(_, _, peer)| peer)
939-
};
936+
.min()
937+
.map(|(_, _, _, peer)| peer);
940938

941939
if let Some(peer) = new_peer {
942940
self.participating_peers.insert(peer);

beacon_node/network/src/sync/range_sync/chain.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use beacon_chain::BeaconChainTypes;
77
use fnv::FnvHashMap;
88
use lighthouse_network::service::api_types::Id;
99
use lighthouse_network::{PeerAction, PeerId};
10-
use rand::seq::SliceRandom;
10+
use rand::{seq::SliceRandom, Rng};
1111
use slog::{crit, debug, o, warn};
1212
use std::collections::{btree_map::Entry, BTreeMap, HashSet};
1313
use std::hash::{Hash, Hasher};
@@ -873,16 +873,20 @@ impl<T: BeaconChainTypes> SyncingChain<T> {
873873
// Find a peer to request the batch
874874
let failed_peers = batch.failed_peers();
875875

876-
let new_peer = {
877-
let mut priorized_peers = self
878-
.peers
879-
.iter()
880-
.map(|(peer, requests)| (failed_peers.contains(peer), requests.len(), *peer))
881-
.collect::<Vec<_>>();
876+
let new_peer = self
877+
.peers
878+
.iter()
879+
.map(|(peer, requests)| {
880+
(
881+
failed_peers.contains(peer),
882+
requests.len(),
883+
rand::thread_rng().gen::<u32>(),
884+
*peer,
885+
)
886+
})
882887
// Sort peers prioritizing unrelated peers with less active requests.
883-
priorized_peers.sort_unstable();
884-
priorized_peers.first().map(|&(_, _, peer)| peer)
885-
};
888+
.min()
889+
.map(|(_, _, _, peer)| peer);
886890

887891
if let Some(peer) = new_peer {
888892
self.send_batch(network, batch_id, peer)

0 commit comments

Comments
 (0)