From 14ffc05fd4ae3bea1b3122fa934e85a4fe0cd24e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 19:30:55 +0000 Subject: [PATCH] Use leader_forward_count for tx retries too (#14547) (#14564) (cherry picked from commit e1b59ded4b1356ed6052aeff60ff8ab0e841c068) Co-authored-by: Tyera Eulberg --- core/src/send_transaction_service.rs | 51 +++++++++++++++++++--------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/core/src/send_transaction_service.rs b/core/src/send_transaction_service.rs index 85f0e5194a..4de435bbeb 100644 --- a/core/src/send_transaction_service.rs +++ b/core/src/send_transaction_service.rs @@ -196,6 +196,7 @@ impl SendTransactionService { &tpu_address, &mut transactions, &leader_info, + leader_forward_count, ); } last_status_check = Instant::now(); @@ -217,6 +218,7 @@ impl SendTransactionService { tpu_address: &SocketAddr, transactions: &mut HashMap, leader_info: &Option, + leader_forward_count: u64, ) -> ProcessTransactionsResult { let mut result = ProcessTransactionsResult::default(); @@ -255,23 +257,25 @@ impl SendTransactionService { info!("Retrying transaction: {}", signature); result.retried += 1; inc_new_counter_info!("send_transaction_service-retry", 1); - let leaders = leader_info + let addresses = leader_info .as_ref() - .map(|leader_info| leader_info.get_leader_tpus(1)); - let leader = if let Some(leaders) = leaders { - if leaders.is_empty() { - &tpu_address - } else { - leaders[0] - } - } else { - &tpu_address - }; - Self::send_transaction( - &send_socket, - leader, - &transaction_info.wire_transaction, - ); + .map(|leader_info| leader_info.get_leader_tpus(leader_forward_count)); + let addresses = addresses + .map(|address_list| { + if address_list.is_empty() { + vec![tpu_address] + } else { + address_list + } + }) + .unwrap_or_else(|| vec![&tpu_address]); + for address in addresses { + Self::send_transaction( + &send_socket, + address, + &transaction_info.wire_transaction, + ); + } true } Some((_slot, status)) => { @@ -352,6 +356,7 @@ mod test { let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); let send_socket = UdpSocket::bind("0.0.0.0:0").unwrap(); let tpu_address = "127.0.0.1:0".parse().unwrap(); + let leader_forward_count = 1; let root_bank = Arc::new(Bank::new_from_parent( &bank_forks.read().unwrap().working_bank(), @@ -391,6 +396,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert!(transactions.is_empty()); assert_eq!( @@ -413,6 +419,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert!(transactions.is_empty()); assert_eq!( @@ -435,6 +442,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert!(transactions.is_empty()); assert_eq!( @@ -457,6 +465,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert_eq!(transactions.len(), 1); assert_eq!( @@ -480,6 +489,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert_eq!(transactions.len(), 1); assert_eq!( @@ -500,6 +510,7 @@ mod test { let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); let send_socket = UdpSocket::bind("0.0.0.0:0").unwrap(); let tpu_address = "127.0.0.1:0".parse().unwrap(); + let leader_forward_count = 1; let root_bank = Arc::new(Bank::new_from_parent( &bank_forks.read().unwrap().working_bank(), @@ -556,6 +567,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert!(transactions.is_empty()); assert_eq!( @@ -582,6 +594,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert!(transactions.is_empty()); assert_eq!( @@ -610,6 +623,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert!(transactions.is_empty()); assert_eq!( @@ -636,6 +650,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert!(transactions.is_empty()); assert_eq!( @@ -663,6 +678,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert!(transactions.is_empty()); assert_eq!( @@ -690,6 +706,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert_eq!(transactions.len(), 1); assert_eq!( @@ -718,6 +735,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert_eq!(transactions.len(), 1); assert_eq!( @@ -744,6 +762,7 @@ mod test { &tpu_address, &mut transactions, &None, + leader_forward_count, ); assert_eq!(transactions.len(), 0); assert_eq!(