Add minor extensions to Bank API (#31396)
* Make load_program method of Bank public for use in ledger-tool * Add an accessor method to get a reference to builtin_programs of Bank * Add a parameter to Bank::load_program to control debugging_features
This commit is contained in:
parent
bb95d44328
commit
74bd5f87af
|
@ -4149,7 +4149,11 @@ impl Bank {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)] // Preparation for BankExecutorCache rework
|
#[allow(dead_code)] // Preparation for BankExecutorCache rework
|
||||||
fn load_program(&self, pubkey: &Pubkey) -> Result<Arc<LoadedProgram>> {
|
pub fn load_program(
|
||||||
|
&self,
|
||||||
|
pubkey: &Pubkey,
|
||||||
|
debugging_features: bool,
|
||||||
|
) -> Result<Arc<LoadedProgram>> {
|
||||||
let program = if let Some(program) = self.get_account_with_fixed_root(pubkey) {
|
let program = if let Some(program) = self.get_account_with_fixed_root(pubkey) {
|
||||||
program
|
program
|
||||||
} else {
|
} else {
|
||||||
|
@ -4209,7 +4213,7 @@ impl Bank {
|
||||||
None,
|
None,
|
||||||
&program,
|
&program,
|
||||||
programdata.as_ref().unwrap_or(&program),
|
programdata.as_ref().unwrap_or(&program),
|
||||||
false, /* debugging_features */
|
debugging_features,
|
||||||
)
|
)
|
||||||
.map(|(loaded_program, _create_executor_metrics)| loaded_program)
|
.map(|(loaded_program, _create_executor_metrics)| loaded_program)
|
||||||
.map_err(|err| TransactionError::InstructionError(0, err))
|
.map_err(|err| TransactionError::InstructionError(0, err))
|
||||||
|
@ -4455,7 +4459,7 @@ impl Bank {
|
||||||
let missing_programs: Vec<(Pubkey, Arc<LoadedProgram>)> = missing_programs
|
let missing_programs: Vec<(Pubkey, Arc<LoadedProgram>)> = missing_programs
|
||||||
.iter()
|
.iter()
|
||||||
.map(|key| {
|
.map(|key| {
|
||||||
let program = self.load_program(key).unwrap_or_else(|err| {
|
let program = self.load_program(key, false).unwrap_or_else(|err| {
|
||||||
// Create a tombstone for the program in the cache
|
// Create a tombstone for the program in the cache
|
||||||
debug!("Failed to load program {}, error {:?}", key, err);
|
debug!("Failed to load program {}, error {:?}", key, err);
|
||||||
Arc::new(LoadedProgram::new_tombstone(
|
Arc::new(LoadedProgram::new_tombstone(
|
||||||
|
@ -4502,7 +4506,7 @@ impl Bank {
|
||||||
filter_missing_programs_time.stop();
|
filter_missing_programs_time.stop();
|
||||||
|
|
||||||
let executors = missing_executors.iter().map(|pubkey| {
|
let executors = missing_executors.iter().map(|pubkey| {
|
||||||
let program = self.load_program(pubkey).unwrap_or_else(|err| {
|
let program = self.load_program(pubkey, false).unwrap_or_else(|err| {
|
||||||
// Create a tombstone for the program in the cache
|
// Create a tombstone for the program in the cache
|
||||||
debug!("Failed to load program {}, error {:?}", pubkey, err);
|
debug!("Failed to load program {}, error {:?}", pubkey, err);
|
||||||
Arc::new(LoadedProgram::new_tombstone(
|
Arc::new(LoadedProgram::new_tombstone(
|
||||||
|
@ -7827,6 +7831,11 @@ impl Bank {
|
||||||
&mut error_counters,
|
&mut error_counters,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return reference to builtin_progams
|
||||||
|
pub fn get_builtin_programs(&self) -> &BuiltinPrograms {
|
||||||
|
&self.builtin_programs
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Compute how much an account has changed size. This function is useful when the data size delta
|
/// Compute how much an account has changed size. This function is useful when the data size delta
|
||||||
|
|
|
@ -7500,7 +7500,7 @@ fn test_bank_load_program() {
|
||||||
programdata_account.set_rent_epoch(1);
|
programdata_account.set_rent_epoch(1);
|
||||||
bank.store_account_and_update_capitalization(&key1, &program_account);
|
bank.store_account_and_update_capitalization(&key1, &program_account);
|
||||||
bank.store_account_and_update_capitalization(&programdata_key, &programdata_account);
|
bank.store_account_and_update_capitalization(&programdata_key, &programdata_account);
|
||||||
let program = bank.load_program(&key1);
|
let program = bank.load_program(&key1, false);
|
||||||
assert!(program.is_ok());
|
assert!(program.is_ok());
|
||||||
let program = program.unwrap();
|
let program = program.unwrap();
|
||||||
assert!(matches!(program.program, LoadedProgramType::LegacyV1(_)));
|
assert!(matches!(program.program, LoadedProgramType::LegacyV1(_)));
|
||||||
|
|
Loading…
Reference in New Issue