Skip to content

Commit 985c590

Browse files
author
HaoranYi
committed
move filter logic inside load_account and remove filter
1 parent 4577c4b commit 985c590

File tree

5 files changed

+21
-48
lines changed

5 files changed

+21
-48
lines changed

program-runtime/src/loaded_programs.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -971,10 +971,6 @@ impl<FG: ForkGraph> ProgramCache<FG> {
971971
}
972972
}
973973

974-
pub fn contains_key(&self, key: &Pubkey) -> bool {
975-
self.entries.contains_key(key)
976-
}
977-
978974
/// Extracts a subset of the programs relevant to a transaction batch
979975
/// and returns which program accounts the accounts DB needs to load.
980976
pub fn extract(

svm/src/account_loader.rs

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@ use {
44
transaction_error_metrics::TransactionErrorMetrics,
55
transaction_processing_callback::TransactionProcessingCallback,
66
},
7-
itertools::Itertools,
87
log::warn,
98
solana_program_runtime::{
109
compute_budget_processor::process_compute_budget_instructions,
11-
loaded_programs::{ProgramCacheEntry, ProgramCacheForTxBatch},
10+
loaded_programs::ProgramCacheEntry,
1211
},
1312
solana_sdk::{
1413
account::{Account, AccountSharedData, ReadableAccount, WritableAccount},
15-
clock::Slot,
1614
feature_set::{
1715
self, include_loaded_accounts_data_size_in_fee_calculation,
1816
remove_rounding_in_fee_calculation,
@@ -32,8 +30,10 @@ use {
3230
transaction_context::{IndexOfAccount, TransactionAccount},
3331
},
3432
solana_system_program::{get_system_account_kind, SystemAccountKind},
35-
std::collections::hash_map::Entry,
36-
std::{collections::HashMap, num::NonZeroUsize},
33+
std::{
34+
collections::{hash_map::Entry, HashMap},
35+
num::NonZeroUsize,
36+
},
3737
};
3838

3939
// for the load instructions
@@ -113,7 +113,7 @@ pub fn validate_fee_payer(
113113
pub(crate) fn load_accounts<CB: TransactionProcessingCallback>(
114114
callbacks: &CB,
115115
txs: &[SanitizedTransaction],
116-
check_results: &[TransactionCheckResult],
116+
check_results: &mut [TransactionCheckResult],
117117
error_counters: &mut TransactionErrorMetrics,
118118
fee_structure: &FeeStructure,
119119
account_overrides: Option<&AccountOverrides>,
@@ -138,6 +138,7 @@ pub(crate) fn load_accounts<CB: TransactionProcessingCallback>(
138138
feature_set.is_active(&remove_rounding_in_fee_calculation::id()),
139139
)
140140
} else {
141+
*etx.1 = (Err(TransactionError::BlockhashNotFound), None, None);
141142
return (Err(TransactionError::BlockhashNotFound), None);
142143
};
143144

@@ -408,6 +409,7 @@ fn get_requested_loaded_accounts_data_size_limit(
408409
)
409410
}
410411

412+
#[allow(dead_code)]
411413
fn account_shared_data_from_program(loaded_program: &ProgramCacheEntry) -> AccountSharedData {
412414
// It's an executable program account. The program is already loaded in the cache.
413415
// So the account data is not needed. Return a dummy AccountSharedData with meta
@@ -461,7 +463,6 @@ mod tests {
461463
solana_program_runtime::{
462464
compute_budget::ComputeBudget,
463465
compute_budget_processor,
464-
loaded_programs::{ProgramCacheEntry, ProgramCacheForTxBatch},
465466
prioritization_fee::{PrioritizationFeeDetails, PrioritizationFeeType},
466467
},
467468
solana_sdk::{
@@ -557,7 +558,7 @@ mod tests {
557558
load_accounts(
558559
&callbacks,
559560
&[sanitized_tx],
560-
&[(Ok(()), None, Some(lamports_per_signature))],
561+
&mut [(Ok(()), None, Some(lamports_per_signature))],
561562
error_counters,
562563
fee_structure,
563564
None,
@@ -1048,7 +1049,7 @@ mod tests {
10481049
load_accounts(
10491050
&callbacks,
10501051
&[tx],
1051-
&[(Ok(()), None, Some(10))],
1052+
&mut [(Ok(()), None, Some(10))],
10521053
&mut error_counters,
10531054
&FeeStructure::default(),
10541055
account_overrides,
@@ -1488,7 +1489,6 @@ mod tests {
14881489
mock_bank.accounts_map.insert(key1.pubkey(), account_data);
14891490

14901491
let mut error_counter = TransactionErrorMetrics::default();
1491-
let loaded_programs = ProgramCacheForTxBatch::default();
14921492

14931493
let sanitized_transaction = SanitizedTransaction::new_for_tests(
14941494
sanitized_message,
@@ -1817,7 +1817,6 @@ mod tests {
18171817
.accounts_map
18181818
.insert(key3.pubkey(), AccountSharedData::default());
18191819
let mut error_counter = TransactionErrorMetrics::default();
1820-
let loaded_programs = ProgramCacheForTxBatch::default();
18211820

18221821
let sanitized_transaction = SanitizedTransaction::new_for_tests(
18231822
sanitized_message,
@@ -1879,7 +1878,6 @@ mod tests {
18791878
mock_bank.accounts_map.insert(key3.pubkey(), account_data);
18801879

18811880
let mut error_counter = TransactionErrorMetrics::default();
1882-
let loaded_programs = ProgramCacheForTxBatch::default();
18831881

18841882
let sanitized_transaction = SanitizedTransaction::new_for_tests(
18851883
sanitized_message,
@@ -1967,7 +1965,6 @@ mod tests {
19671965
mock_bank.accounts_map.insert(key3.pubkey(), account_data);
19681966

19691967
let mut error_counter = TransactionErrorMetrics::default();
1970-
let loaded_programs = ProgramCacheForTxBatch::default();
19711968

19721969
let sanitized_transaction = SanitizedTransaction::new_for_tests(
19731970
sanitized_message,
@@ -2048,7 +2045,7 @@ mod tests {
20482045
let loaded_txs = load_accounts(
20492046
&bank,
20502047
&[sanitized_tx.clone()],
2051-
&[(Ok(()), None, Some(0))],
2048+
&mut [(Ok(()), None, Some(0))],
20522049
&mut error_counters,
20532050
&FeeStructure::default(),
20542051
None,
@@ -2119,7 +2116,6 @@ mod tests {
21192116
mock_bank.accounts_map.insert(key3.pubkey(), account_data);
21202117

21212118
let mut error_counter = TransactionErrorMetrics::default();
2122-
let loaded_programs = ProgramCacheForTxBatch::default();
21232119

21242120
let sanitized_transaction = SanitizedTransaction::new_for_tests(
21252121
sanitized_message,
@@ -2132,7 +2128,7 @@ mod tests {
21322128
let results = load_accounts(
21332129
&mock_bank,
21342130
&[sanitized_transaction],
2135-
&[check_result],
2131+
&mut [check_result],
21362132
&mut error_counter,
21372133
&FeeStructure::default(),
21382134
None,
@@ -2206,7 +2202,7 @@ mod tests {
22062202
let result = load_accounts(
22072203
&mock_bank,
22082204
&[sanitized_transaction.clone()],
2209-
&[check_result],
2205+
&mut [check_result],
22102206
&mut TransactionErrorMetrics::default(),
22112207
&fee_structure,
22122208
None,
@@ -2225,7 +2221,7 @@ mod tests {
22252221
let result = load_accounts(
22262222
&mock_bank,
22272223
&[sanitized_transaction.clone()],
2228-
&[check_result.clone()],
2224+
&mut [check_result.clone()],
22292225
&mut TransactionErrorMetrics::default(),
22302226
&fee_structure,
22312227
None,
@@ -2244,7 +2240,7 @@ mod tests {
22442240
let result = load_accounts(
22452241
&mock_bank,
22462242
&[sanitized_transaction.clone()],
2247-
&[check_result],
2243+
&mut [check_result],
22482244
&mut TransactionErrorMetrics::default(),
22492245
&fee_structure,
22502246
None,

svm/src/program_loader.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use {
1818
loader_v4::{self, LoaderV4State, LoaderV4Status},
1919
pubkey::Pubkey,
2020
},
21-
std::{collections::HashMap, sync::Arc},
21+
std::sync::Arc,
2222
};
2323

2424
#[derive(Debug)]

svm/src/transaction_processor.rs

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use {
4343
},
4444
std::{
4545
cell::RefCell,
46-
collections::{hash_map::Entry, HashMap, HashSet},
46+
collections::{HashMap, HashSet},
4747
fmt::{Debug, Formatter},
4848
rc::Rc,
4949
sync::{atomic::Ordering, Arc, RwLock},
@@ -188,7 +188,6 @@ impl<FG: ForkGraph> TransactionBatchProcessor<FG> {
188188
limit_to_load_programs: bool,
189189
) -> LoadAndExecuteSanitizedTransactionsOutput {
190190
let mut load_time = Measure::start("accounts_load");
191-
Self::filter_executable_program_accounts(sanitized_txs, check_results);
192191
let mut program_accounts_map: HashMap<Pubkey, u64> = HashMap::new();
193192
let mut loaded_transactions = load_accounts(
194193
callbacks,
@@ -326,23 +325,6 @@ impl<FG: ForkGraph> TransactionBatchProcessor<FG> {
326325
}
327326
}
328327

329-
/// Filter transaction with invalid nonce and blockhash.
330-
fn filter_executable_program_accounts(
331-
txs: &[SanitizedTransaction],
332-
check_results: &mut [TransactionCheckResult],
333-
) {
334-
check_results.iter_mut().zip(txs).for_each(|etx| {
335-
if let ((Ok(()), _nonce, lamports_per_signature), tx) = etx {
336-
if lamports_per_signature.is_none() {
337-
// If the transaction's nonce account was not valid, and blockhash is not found,
338-
// the transaction will fail to process. Let's not load any programs from the
339-
// transaction, and update the status of the transaction.
340-
*etx.0 = (Err(TransactionError::BlockhashNotFound), None, None);
341-
}
342-
}
343-
});
344-
}
345-
346328
fn replenish_program_cache<CB: TransactionProcessingCallback>(
347329
&self,
348330
callback: &CB,
@@ -732,10 +714,9 @@ mod tests {
732714
rent_collector::RentCollector,
733715
rent_debits::RentDebits,
734716
reserved_account_keys::ReservedAccountKeys,
735-
signature::{Keypair, Signature},
736-
signer::Signer,
717+
signature::Signature,
737718
sysvar::{self, rent::Rent},
738-
transaction::{SanitizedTransaction, Transaction, TransactionError},
719+
transaction::SanitizedTransaction,
739720
transaction_context::TransactionContext,
740721
},
741722
};
@@ -1051,7 +1032,7 @@ mod tests {
10511032
let mut account_maps: HashMap<Pubkey, u64> = HashMap::new();
10521033
account_maps.insert(key, 4);
10531034

1054-
let cache = batch_processor.replenish_program_cache(&mock_bank, &account_maps, true);
1035+
let _cache = batch_processor.replenish_program_cache(&mock_bank, &account_maps, true);
10551036
}
10561037

10571038
#[test]

svm/tests/integration_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ fn deploy_program(name: String, mock_bank: &mut MockBankCallback) -> Pubkey {
194194
account_data.set_data(bincode::serialize(&state).unwrap());
195195
account_data.set_lamports(25);
196196
account_data.set_owner(bpf_loader_upgradeable::id());
197-
// We are no longer fake executable accounts. Executable account will be
197+
// We are no longer faking executable accounts. Executable accounts will be
198198
// loaded from accounts-db, which would require executable flag to be
199199
// marked.
200200
account_data.set_executable(true);

0 commit comments

Comments
 (0)