Skip retransmit when node is leader (#2625)
* Skip retransmit when node is leader * Fix window test
This commit is contained in:
@@ -120,6 +120,7 @@ pub fn retransmit_all_leader_blocks(
|
||||
dq: &[SharedBlob],
|
||||
leader_scheduler: &Arc<RwLock<LeaderScheduler>>,
|
||||
retransmit: &BlobSender,
|
||||
id: &Pubkey,
|
||||
) -> Result<()> {
|
||||
let mut retransmit_queue: Vec<SharedBlob> = Vec::new();
|
||||
for b in dq {
|
||||
@@ -127,7 +128,9 @@ pub fn retransmit_all_leader_blocks(
|
||||
// add to the retransmit_queue
|
||||
let slot = b.read().unwrap().slot();
|
||||
if let Some(leader_id) = leader_scheduler.read().unwrap().get_leader_for_slot(slot) {
|
||||
add_blob_to_retransmit_queue(b, leader_id, &mut retransmit_queue);
|
||||
if leader_id != *id {
|
||||
add_blob_to_retransmit_queue(b, leader_id, &mut retransmit_queue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -398,8 +401,13 @@ mod test {
|
||||
|
||||
// Expect blob from leader to be retransmitted
|
||||
blob.write().unwrap().set_id(&leader);
|
||||
retransmit_all_leader_blocks(&vec![blob.clone()], &leader_scheduler, &blob_sender)
|
||||
.expect("Expect successful retransmit");
|
||||
retransmit_all_leader_blocks(
|
||||
&vec![blob.clone()],
|
||||
&leader_scheduler,
|
||||
&blob_sender,
|
||||
&nonleader,
|
||||
)
|
||||
.expect("Expect successful retransmit");
|
||||
let output_blob = blob_receiver
|
||||
.try_recv()
|
||||
.expect("Expect input blob to be retransmitted");
|
||||
@@ -412,7 +420,18 @@ mod test {
|
||||
|
||||
// Expect blob from nonleader to not be retransmitted
|
||||
blob.write().unwrap().set_id(&nonleader);
|
||||
retransmit_all_leader_blocks(&vec![blob], &leader_scheduler, &blob_sender)
|
||||
retransmit_all_leader_blocks(
|
||||
&vec![blob.clone()],
|
||||
&leader_scheduler,
|
||||
&blob_sender,
|
||||
&nonleader,
|
||||
)
|
||||
.expect("Expect successful retransmit");
|
||||
assert!(blob_receiver.try_recv().is_err());
|
||||
|
||||
// Expect blob from leader while currently leader to not be retransmitted
|
||||
blob.write().unwrap().set_id(&leader);
|
||||
retransmit_all_leader_blocks(&vec![blob], &leader_scheduler, &blob_sender, &leader)
|
||||
.expect("Expect successful retransmit");
|
||||
assert!(blob_receiver.try_recv().is_err());
|
||||
}
|
||||
|
Reference in New Issue
Block a user