Refactor bank's load_and_execute_transaction (#34893)

* Refactor bank load_and_execute_transactions

* Remove redundant clippy annotation

* Report check time where it is done in load_and_execute_transactions
This commit is contained in:
Dmitri Makarov 2024-01-24 14:37:18 -05:00 committed by GitHub
parent 0d92254736
commit 662e77feaa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 61 additions and 10 deletions

View File

@ -336,6 +336,21 @@ pub struct LoadAndExecuteTransactionsOutput {
pub error_counters: TransactionErrorMetrics,
}
pub struct LoadAndExecuteSanitizedTransactionsOutput {
pub loaded_transactions: Vec<TransactionLoadResult>,
// Vector of results indicating whether a transaction was executed or could not
// be executed. Note executed transactions can still have failed!
pub execution_results: Vec<TransactionExecutionResult>,
// Total number of transactions that were executed
pub executed_transactions_count: usize,
// Number of non-vote transactions that were executed
pub executed_non_vote_transactions_count: usize,
// Total number of the executed transactions that returned success/not
// an error.
pub executed_with_successful_result_count: usize,
pub signature_count: u64,
}
pub struct TransactionSimulationResult {
pub result: Result<()>,
pub logs: TransactionLogMessages,
@ -5157,11 +5172,51 @@ impl Bank {
&mut error_counters,
);
check_time.stop();
debug!("check: {}us", check_time.as_us());
timings.saturating_add_in_place(ExecuteTimingType::CheckUs, check_time.as_us());
let sanitized_output = self.load_and_execute_sanitized_transactions(
sanitized_txs,
&mut check_results,
&mut error_counters,
enable_cpi_recording,
enable_log_recording,
enable_return_data_recording,
timings,
account_overrides,
log_messages_bytes_limit,
);
LoadAndExecuteTransactionsOutput {
loaded_transactions: sanitized_output.loaded_transactions,
execution_results: sanitized_output.execution_results,
retryable_transaction_indexes,
executed_transactions_count: sanitized_output.executed_transactions_count,
executed_non_vote_transactions_count: sanitized_output
.executed_non_vote_transactions_count,
executed_with_successful_result_count: sanitized_output
.executed_with_successful_result_count,
signature_count: sanitized_output.signature_count,
error_counters,
}
}
#[allow(clippy::too_many_arguments)]
fn load_and_execute_sanitized_transactions(
&self,
sanitized_txs: &[SanitizedTransaction],
check_results: &mut [TransactionCheckResult],
error_counters: &mut TransactionErrorMetrics,
enable_cpi_recording: bool,
enable_log_recording: bool,
enable_return_data_recording: bool,
timings: &mut ExecuteTimings,
account_overrides: Option<&AccountOverrides>,
log_messages_bytes_limit: Option<usize>,
) -> LoadAndExecuteSanitizedTransactionsOutput {
let mut program_accounts_map = self.filter_executable_program_accounts(
&self.ancestors,
sanitized_txs,
&mut check_results,
check_results,
PROGRAM_OWNERS,
&self.blockhash_queue.read().unwrap(),
);
@ -5179,9 +5234,9 @@ impl Bank {
&self.rc.accounts.accounts_db,
&self.ancestors,
sanitized_txs,
&check_results,
check_results,
&self.blockhash_queue.read().unwrap(),
&mut error_counters,
error_counters,
&self.rent_collector,
&self.feature_set,
&self.fee_structure,
@ -5233,7 +5288,7 @@ impl Bank {
enable_log_recording,
enable_return_data_recording,
timings,
&mut error_counters,
error_counters,
log_messages_bytes_limit,
&programs_loaded_for_tx_batch.borrow(),
);
@ -5269,14 +5324,12 @@ impl Bank {
);
debug!(
"check: {}us load: {}us execute: {}us txs_len={}",
check_time.as_us(),
"load: {}us execute: {}us txs_len={}",
load_time.as_us(),
execution_time.as_us(),
sanitized_txs.len(),
);
timings.saturating_add_in_place(ExecuteTimingType::CheckUs, check_time.as_us());
timings.saturating_add_in_place(ExecuteTimingType::LoadUs, load_time.as_us());
timings.saturating_add_in_place(ExecuteTimingType::ExecuteUs, execution_time.as_us());
@ -5392,15 +5445,13 @@ impl Bank {
*err_count + executed_with_successful_result_count
);
}
LoadAndExecuteTransactionsOutput {
LoadAndExecuteSanitizedTransactionsOutput {
loaded_transactions,
execution_results,
retryable_transaction_indexes,
executed_transactions_count,
executed_non_vote_transactions_count,
executed_with_successful_result_count,
signature_count,
error_counters,
}
}