bugfix: fill early exit with transaction errors (#325)
This commit is contained in:
parent
613256e18f
commit
ab2df8a735
|
@ -244,7 +244,7 @@ struct RentMetrics {
|
|||
}
|
||||
|
||||
pub type BankStatusCache = StatusCache<Result<()>>;
|
||||
#[frozen_abi(digest = "EzAXfE2xG3ZqdAj8KMC8CeqoSxjo5hxrEaP7fta8LT9u")]
|
||||
#[frozen_abi(digest = "9Pf3NTGr1AEzB4nKaVBY24uNwoQR4aJi8vc96W6kGvNk")]
|
||||
pub type BankSlotDelta = SlotDelta<Result<()>>;
|
||||
|
||||
#[derive(Default, Copy, Clone, Debug, PartialEq, Eq)]
|
||||
|
|
|
@ -169,6 +169,10 @@ pub enum TransactionError {
|
|||
/// The total balance before the transaction does not equal the total balance after the transaction
|
||||
#[error("Sum of account balances before and after transaction do not match")]
|
||||
UnbalancedTransaction,
|
||||
|
||||
/// Program cache hit max limit.
|
||||
#[error("Program cache hit max limit")]
|
||||
ProgramCacheHitMaxLimit,
|
||||
}
|
||||
|
||||
impl From<SanitizeError> for TransactionError {
|
||||
|
|
|
@ -62,6 +62,7 @@ enum TransactionErrorType {
|
|||
RESANITIZATION_NEEDED = 34;
|
||||
PROGRAM_EXECUTION_TEMPORARILY_RESTRICTED = 35;
|
||||
UNBALANCED_TRANSACTION = 36;
|
||||
PROGRAM_CACHE_HIT_MAX_LIMIT = 37;
|
||||
}
|
||||
|
||||
message InstructionError {
|
||||
|
|
|
@ -818,6 +818,7 @@ impl TryFrom<tx_by_addr::TransactionError> for TransactionError {
|
|||
33 => TransactionError::InvalidLoadedAccountsDataSizeLimit,
|
||||
34 => TransactionError::ResanitizationNeeded,
|
||||
36 => TransactionError::UnbalancedTransaction,
|
||||
37 => TransactionError::ProgramCacheHitMaxLimit,
|
||||
_ => return Err("Invalid TransactionError"),
|
||||
})
|
||||
}
|
||||
|
@ -936,6 +937,9 @@ impl From<TransactionError> for tx_by_addr::TransactionError {
|
|||
TransactionError::UnbalancedTransaction => {
|
||||
tx_by_addr::TransactionErrorType::UnbalancedTransaction
|
||||
}
|
||||
TransactionError::ProgramCacheHitMaxLimit => {
|
||||
tx_by_addr::TransactionErrorType::ProgramCacheHitMaxLimit
|
||||
}
|
||||
} as i32,
|
||||
instruction_error: match transaction_error {
|
||||
TransactionError::InstructionError(index, ref instruction_error) => {
|
||||
|
|
|
@ -238,9 +238,13 @@ impl<FG: ForkGraph> TransactionBatchProcessor<FG> {
|
|||
)));
|
||||
|
||||
if programs_loaded_for_tx_batch.borrow().hit_max_limit {
|
||||
const ERROR: TransactionError = TransactionError::ProgramCacheHitMaxLimit;
|
||||
let loaded_transactions = vec![(Err(ERROR), None); sanitized_txs.len()];
|
||||
let execution_results =
|
||||
vec![TransactionExecutionResult::NotExecuted(ERROR); sanitized_txs.len()];
|
||||
return LoadAndExecuteSanitizedTransactionsOutput {
|
||||
loaded_transactions: vec![],
|
||||
execution_results: vec![],
|
||||
loaded_transactions,
|
||||
execution_results,
|
||||
};
|
||||
}
|
||||
program_cache_time.stop();
|
||||
|
|
Loading…
Reference in New Issue