Skip to content

Commit 176dab7

Browse files
committed
fix: account for the possibility of not having enough higher peers
Signed-off-by: ljedrz <[email protected]>
1 parent ed9d6b8 commit 176dab7

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

node/router/src/heartbeat.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,11 +245,12 @@ pub trait Heartbeat<N: Network>: Outbound<N> {
245245
.candidate_peers()
246246
.into_iter()
247247
.partition(|peer| peer.last_height_seen.map(|h| h > own_height).unwrap_or(false));
248-
let larger_half = num_deficient.div_ceil(2);
249-
for peer in higher_peers.into_iter().choose_multiple(rng, larger_half) {
248+
// We may not know of half of `num_deficient` candidates; account for it using `min`.
249+
let num_higher_peers = num_deficient.div_ceil(2).min(higher_peers.len());
250+
for peer in higher_peers.into_iter().choose_multiple(rng, num_higher_peers) {
250251
self.router().connect(peer.listener_addr);
251252
}
252-
for peer in other_peers.into_iter().choose_multiple(rng, num_deficient - larger_half) {
253+
for peer in other_peers.into_iter().choose_multiple(rng, num_deficient - num_higher_peers) {
253254
self.router().connect(peer.listener_addr);
254255
}
255256

0 commit comments

Comments
 (0)