Skip to content

Commit 8a3d321

Browse files
committed
fix the same peer being taken repeatedly when signers.len() <= num_peers
1 parent 84df755 commit 8a3d321

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

consensus/src/quorum_store/batch_requester.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,25 +38,30 @@ impl BatchRequesterState {
3838

3939
fn next_request_peers(&mut self, num_peers: usize) -> Option<Vec<PeerId>> {
4040
let signers = self.signers.lock();
41+
4142
if self.num_retries == 0 {
4243
let mut rng = rand::thread_rng();
4344
// make sure nodes request from the different set of nodes
4445
self.next_index = rng.r#gen::<usize>() % signers.len();
45-
counters::SENT_BATCH_REQUEST_COUNT.inc_by(num_peers as u64);
46+
counters::SENT_BATCH_REQUEST_COUNT.inc_by(num_peers.min(signers.len()) as u64);
4647
} else {
47-
counters::SENT_BATCH_REQUEST_RETRY_COUNT.inc_by(num_peers as u64);
48+
counters::SENT_BATCH_REQUEST_RETRY_COUNT.inc_by(num_peers.min(signers.len()) as u64);
4849
}
4950
if self.num_retries < self.retry_limit {
5051
self.num_retries += 1;
51-
let ret = signers
52-
.iter()
53-
.cycle()
54-
.skip(self.next_index)
55-
.take(num_peers)
56-
.cloned()
57-
.collect();
58-
self.next_index = (self.next_index + num_peers) % signers.len();
59-
Some(ret)
52+
if signers.len() <= num_peers {
53+
Some(signers.iter().cloned().collect())
54+
} else {
55+
let ret = signers
56+
.iter()
57+
.cycle()
58+
.skip(self.next_index)
59+
.take(num_peers)
60+
.cloned()
61+
.collect();
62+
self.next_index = (self.next_index + num_peers) % signers.len();
63+
Some(ret)
64+
}
6065
} else {
6166
None
6267
}

0 commit comments

Comments
 (0)