Add accounts_data_len to Bank (#21781)

This commit is contained in:
Brooks Prumo 2021-12-11 09:34:38 -06:00 committed by GitHub
parent e08139f949
commit eeb97fe7ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 7 deletions

View File

@ -146,7 +146,10 @@ use {
ptr, ptr,
rc::Rc, rc::Rc,
sync::{ sync::{
atomic::{AtomicBool, AtomicU64, Ordering::Relaxed}, atomic::{
AtomicBool, AtomicU64,
Ordering::{Acquire, Relaxed, Release},
},
Arc, LockResult, RwLock, RwLockReadGuard, RwLockWriteGuard, Arc, LockResult, RwLock, RwLockReadGuard, RwLockWriteGuard,
}, },
time::{Duration, Instant}, time::{Duration, Instant},
@ -1042,6 +1045,10 @@ pub struct Bank {
pub cost_tracker: RwLock<CostTracker>, pub cost_tracker: RwLock<CostTracker>,
sysvar_cache: RwLock<Vec<(Pubkey, Vec<u8>)>>, sysvar_cache: RwLock<Vec<(Pubkey, Vec<u8>)>>,
/// Current size of the accounts data. Used when processing messages to enforce a limit on its
/// maximum size.
accounts_data_len: AtomicU64,
} }
impl Default for BlockhashQueue { impl Default for BlockhashQueue {
@ -1127,7 +1134,7 @@ impl Bank {
} }
fn default_with_accounts(accounts: Accounts) -> Self { fn default_with_accounts(accounts: Accounts) -> Self {
Self { let bank = Self {
rc: BankRc::new(accounts, Slot::default()), rc: BankRc::new(accounts, Slot::default()),
src: StatusCacheRc::default(), src: StatusCacheRc::default(),
blockhash_queue: RwLock::<BlockhashQueue>::default(), blockhash_queue: RwLock::<BlockhashQueue>::default(),
@ -1183,7 +1190,14 @@ impl Bank {
vote_only_bank: false, vote_only_bank: false,
cost_tracker: RwLock::<CostTracker>::default(), cost_tracker: RwLock::<CostTracker>::default(),
sysvar_cache: RwLock::new(Vec::new()), sysvar_cache: RwLock::new(Vec::new()),
} accounts_data_len: AtomicU64::default(),
};
let total_accounts_stats = bank.get_total_accounts_stats().unwrap();
bank.accounts_data_len
.store(total_accounts_stats.data_len as u64, Release);
bank
} }
pub fn new_with_paths_for_tests( pub fn new_with_paths_for_tests(
@ -1429,6 +1443,7 @@ impl Bank {
freeze_started: AtomicBool::new(false), freeze_started: AtomicBool::new(false),
cost_tracker: RwLock::new(CostTracker::default()), cost_tracker: RwLock::new(CostTracker::default()),
sysvar_cache: RwLock::new(Vec::new()), sysvar_cache: RwLock::new(Vec::new()),
accounts_data_len: AtomicU64::new(parent.accounts_data_len.load(Acquire)),
}; };
let mut ancestors = Vec::with_capacity(1 + new.parents().len()); let mut ancestors = Vec::with_capacity(1 + new.parents().len());
@ -1541,6 +1556,7 @@ impl Bank {
debug_keys: Option<Arc<HashSet<Pubkey>>>, debug_keys: Option<Arc<HashSet<Pubkey>>>,
additional_builtins: Option<&Builtins>, additional_builtins: Option<&Builtins>,
debug_do_not_add_builtins: bool, debug_do_not_add_builtins: bool,
accounts_data_len: u64,
) -> Self { ) -> Self {
fn new<T: Default>() -> T { fn new<T: Default>() -> T {
T::default() T::default()
@ -1603,6 +1619,7 @@ impl Bank {
vote_only_bank: false, vote_only_bank: false,
cost_tracker: RwLock::new(CostTracker::default()), cost_tracker: RwLock::new(CostTracker::default()),
sysvar_cache: RwLock::new(Vec::new()), sysvar_cache: RwLock::new(Vec::new()),
accounts_data_len: AtomicU64::new(accounts_data_len),
}; };
bank.finish_init( bank.finish_init(
genesis_config, genesis_config,

View File

@ -347,10 +347,6 @@ where
accounts_db_config, accounts_db_config,
accounts_update_notifier, accounts_update_notifier,
)?; )?;
debug!(
"accounts data len: {}",
reconstructed_accounts_db_info.accounts_data_len
);
let bank_rc = BankRc::new(Accounts::new_empty(accounts_db), bank_fields.slot); let bank_rc = BankRc::new(Accounts::new_empty(accounts_db), bank_fields.slot);
@ -363,6 +359,7 @@ where
debug_keys, debug_keys,
additional_builtins, additional_builtins,
debug_do_not_add_builtins, debug_do_not_add_builtins,
reconstructed_accounts_db_info.accounts_data_len,
); );
info!("rent_collector: {:?}", bank.rent_collector()); info!("rent_collector: {:?}", bank.rent_collector());