Use OrderedIterator in collect_balances (#11166)

This commit is contained in:
Tyera Eulberg 2020-07-23 13:35:10 -06:00 committed by GitHub
parent e75f0bdfd3
commit ca6480a8ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 7 deletions

View File

@ -509,7 +509,7 @@ impl BankingStage {
// expires. // expires.
let txs = batch.transactions(); let txs = batch.transactions();
let pre_balances = if transaction_status_sender.is_some() { let pre_balances = if transaction_status_sender.is_some() {
bank.collect_balances(txs) bank.collect_balances(batch)
} else { } else {
vec![] vec![]
}; };
@ -545,7 +545,7 @@ impl BankingStage {
.processing_results; .processing_results;
if let Some(sender) = transaction_status_sender { if let Some(sender) = transaction_status_sender {
let post_balances = bank.collect_balances(txs); let post_balances = bank.collect_balances(batch);
send_transaction_status_batch( send_transaction_status_batch(
bank.clone(), bank.clone(),
batch.transactions(), batch.transactions(),

View File

@ -1544,9 +1544,9 @@ impl Bank {
} }
} }
pub fn collect_balances(&self, batch: &[Transaction]) -> TransactionBalances { pub fn collect_balances(&self, batch: &TransactionBatch) -> TransactionBalances {
let mut balances: TransactionBalances = vec![]; let mut balances: TransactionBalances = vec![];
for transaction in batch.iter() { for transaction in OrderedIterator::new(batch.transactions(), batch.iteration_order()) {
let mut transaction_balances: Vec<u64> = vec![]; let mut transaction_balances: Vec<u64> = vec![];
for account_key in transaction.message.account_keys.iter() { for account_key in transaction.message.account_keys.iter() {
transaction_balances.push(self.get_balance(account_key)); transaction_balances.push(self.get_balance(account_key));
@ -2403,7 +2403,7 @@ impl Bank {
collect_balances: bool, collect_balances: bool,
) -> (TransactionResults, TransactionBalancesSet) { ) -> (TransactionResults, TransactionBalancesSet) {
let pre_balances = if collect_balances { let pre_balances = if collect_balances {
self.collect_balances(batch.transactions()) self.collect_balances(batch)
} else { } else {
vec![] vec![]
}; };
@ -2419,7 +2419,7 @@ impl Bank {
signature_count, signature_count,
); );
let post_balances = if collect_balances { let post_balances = if collect_balances {
self.collect_balances(batch.transactions()) self.collect_balances(batch)
} else { } else {
vec![] vec![]
}; };
@ -7251,10 +7251,20 @@ mod tests {
vec![program_id], vec![program_id],
instructions, instructions,
); );
let balances = bank0.collect_balances(&[tx0, tx1]); let txs = vec![tx0, tx1];
let iteration_order: Vec<usize> = vec![0, 1];
let batch = bank0.prepare_batch(&txs, Some(iteration_order));
let balances = bank0.collect_balances(&batch);
assert_eq!(balances.len(), 2); assert_eq!(balances.len(), 2);
assert_eq!(balances[0], vec![8, 11, 1]); assert_eq!(balances[0], vec![8, 11, 1]);
assert_eq!(balances[1], vec![8, 0, 1]); assert_eq!(balances[1], vec![8, 0, 1]);
let iteration_order: Vec<usize> = vec![1, 0];
let batch = bank0.prepare_batch(&txs, Some(iteration_order));
let balances = bank0.collect_balances(&batch);
assert_eq!(balances.len(), 2);
assert_eq!(balances[0], vec![8, 0, 1]);
assert_eq!(balances[1], vec![8, 11, 1]);
} }
#[test] #[test]