Use leader_forward_count for tx retries too (#14547)

This commit is contained in:
Tyera Eulberg 2021-01-13 11:14:22 -07:00 committed by GitHub
parent 673cb39975
commit e1b59ded4b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 35 additions and 16 deletions

View File

@ -196,6 +196,7 @@ impl SendTransactionService {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&leader_info, &leader_info,
leader_forward_count,
); );
} }
last_status_check = Instant::now(); last_status_check = Instant::now();
@ -217,6 +218,7 @@ impl SendTransactionService {
tpu_address: &SocketAddr, tpu_address: &SocketAddr,
transactions: &mut HashMap<Signature, TransactionInfo>, transactions: &mut HashMap<Signature, TransactionInfo>,
leader_info: &Option<LeaderInfo>, leader_info: &Option<LeaderInfo>,
leader_forward_count: u64,
) -> ProcessTransactionsResult { ) -> ProcessTransactionsResult {
let mut result = ProcessTransactionsResult::default(); let mut result = ProcessTransactionsResult::default();
@ -255,23 +257,25 @@ impl SendTransactionService {
info!("Retrying transaction: {}", signature); info!("Retrying transaction: {}", signature);
result.retried += 1; result.retried += 1;
inc_new_counter_info!("send_transaction_service-retry", 1); inc_new_counter_info!("send_transaction_service-retry", 1);
let leaders = leader_info let addresses = leader_info
.as_ref() .as_ref()
.map(|leader_info| leader_info.get_leader_tpus(1)); .map(|leader_info| leader_info.get_leader_tpus(leader_forward_count));
let leader = if let Some(leaders) = leaders { let addresses = addresses
if leaders.is_empty() { .map(|address_list| {
&tpu_address if address_list.is_empty() {
vec![tpu_address]
} else { } else {
leaders[0] address_list
} }
} else { })
&tpu_address .unwrap_or_else(|| vec![&tpu_address]);
}; for address in addresses {
Self::send_transaction( Self::send_transaction(
&send_socket, &send_socket,
leader, address,
&transaction_info.wire_transaction, &transaction_info.wire_transaction,
); );
}
true true
} }
Some((_slot, status)) => { Some((_slot, status)) => {
@ -352,6 +356,7 @@ mod test {
let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank)));
let send_socket = UdpSocket::bind("0.0.0.0:0").unwrap(); let send_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
let tpu_address = "127.0.0.1:0".parse().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( let root_bank = Arc::new(Bank::new_from_parent(
&bank_forks.read().unwrap().working_bank(), &bank_forks.read().unwrap().working_bank(),
@ -391,6 +396,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert!(transactions.is_empty()); assert!(transactions.is_empty());
assert_eq!( assert_eq!(
@ -413,6 +419,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert!(transactions.is_empty()); assert!(transactions.is_empty());
assert_eq!( assert_eq!(
@ -435,6 +442,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert!(transactions.is_empty()); assert!(transactions.is_empty());
assert_eq!( assert_eq!(
@ -457,6 +465,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert_eq!(transactions.len(), 1); assert_eq!(transactions.len(), 1);
assert_eq!( assert_eq!(
@ -480,6 +489,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert_eq!(transactions.len(), 1); assert_eq!(transactions.len(), 1);
assert_eq!( assert_eq!(
@ -500,6 +510,7 @@ mod test {
let bank_forks = Arc::new(RwLock::new(BankForks::new(bank))); let bank_forks = Arc::new(RwLock::new(BankForks::new(bank)));
let send_socket = UdpSocket::bind("0.0.0.0:0").unwrap(); let send_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
let tpu_address = "127.0.0.1:0".parse().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( let root_bank = Arc::new(Bank::new_from_parent(
&bank_forks.read().unwrap().working_bank(), &bank_forks.read().unwrap().working_bank(),
@ -556,6 +567,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert!(transactions.is_empty()); assert!(transactions.is_empty());
assert_eq!( assert_eq!(
@ -582,6 +594,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert!(transactions.is_empty()); assert!(transactions.is_empty());
assert_eq!( assert_eq!(
@ -610,6 +623,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert!(transactions.is_empty()); assert!(transactions.is_empty());
assert_eq!( assert_eq!(
@ -636,6 +650,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert!(transactions.is_empty()); assert!(transactions.is_empty());
assert_eq!( assert_eq!(
@ -663,6 +678,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert!(transactions.is_empty()); assert!(transactions.is_empty());
assert_eq!( assert_eq!(
@ -690,6 +706,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert_eq!(transactions.len(), 1); assert_eq!(transactions.len(), 1);
assert_eq!( assert_eq!(
@ -718,6 +735,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert_eq!(transactions.len(), 1); assert_eq!(transactions.len(), 1);
assert_eq!( assert_eq!(
@ -744,6 +762,7 @@ mod test {
&tpu_address, &tpu_address,
&mut transactions, &mut transactions,
&None, &None,
leader_forward_count,
); );
assert_eq!(transactions.len(), 0); assert_eq!(transactions.len(), 0);
assert_eq!( assert_eq!(