Refactors Accounts::new_from_parent() (#30475)

This commit is contained in:
Brooks 2023-02-23 16:50:51 -05:00 committed by GitHub
parent 2c7d9f988e
commit b7d31e134c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 17 deletions

View File

@ -199,17 +199,11 @@ impl Accounts {
))
}
pub fn new_from_parent(parent: &Accounts, slot: Slot, parent_slot: Slot) -> Self {
let accounts_db = parent.accounts_db.clone();
accounts_db.insert_default_bank_hash_stats(slot, parent_slot);
Self::new(accounts_db)
}
pub(crate) fn new_empty(accounts_db: AccountsDb) -> Self {
Self::new(Arc::new(accounts_db))
}
fn new(accounts_db: Arc<AccountsDb>) -> Self {
pub(crate) fn new(accounts_db: Arc<AccountsDb>) -> Self {
Self {
accounts_db,
account_locks: Mutex::new(AccountLocks::default()),

View File

@ -4978,10 +4978,10 @@ impl AccountsDb {
/// Insert a default bank hash stats for `slot`
///
/// This fn is called when creating a new bank from parent.
pub fn insert_default_bank_hash_stats(&self, slot: Slot, parent_slot: Slot) {
pub(crate) fn insert_default_bank_hash_stats(&self, slot: Slot, parent_slot: Slot) {
let mut bank_hash_stats = self.bank_hash_stats.lock().unwrap();
if bank_hash_stats.get(&slot).is_some() {
error!( "set_hash: already exists; multiple forks with shared slot {slot} as child (parent: {parent_slot})!?");
error!("set_hash: already exists; multiple forks with shared slot {slot} as child (parent: {parent_slot})!?");
return;
}
bank_hash_stats.insert(slot, BankHashStats::default());

View File

@ -1492,15 +1492,15 @@ impl Bank {
let epoch_schedule = parent.epoch_schedule;
let epoch = epoch_schedule.get_epoch(slot);
let (rc, bank_rc_creation_time_us) = measure_us!(BankRc {
accounts: Arc::new(Accounts::new_from_parent(
&parent.rc.accounts,
let (rc, bank_rc_creation_time_us) = measure_us!({
let accounts_db = Arc::clone(&parent.rc.accounts.accounts_db);
accounts_db.insert_default_bank_hash_stats(slot, parent.slot());
BankRc {
accounts: Arc::new(Accounts::new(accounts_db)),
parent: RwLock::new(Some(Arc::clone(parent))),
slot,
parent.slot(),
)),
parent: RwLock::new(Some(parent.clone())),
slot,
bank_id_generator: parent.rc.bank_id_generator.clone(),
bank_id_generator: Arc::clone(&parent.rc.bank_id_generator),
}
});
let (status_cache, status_cache_time_us) = measure_us!(Arc::clone(&parent.status_cache));