add rent exempt count to get_total_accounts_stats (#21153)

This commit is contained in:
Jeff Washington (jwash)
2021-11-04 11:17:19 -05:00
committed by GitHub
parent e765542cd8
commit 171243a370
3 changed files with 14 additions and 3 deletions

View File

@ -264,7 +264,7 @@ impl GenerateIndexTimings {
), ),
("index_flush_us", self.index_flush_us as i64, i64), ("index_flush_us", self.index_flush_us as i64, i64),
( (
"total_not_rent_exempt_with_duplicates", "total_rent_paying_with_duplicates",
self.total_duplicates.saturating_sub(self.rent_exempt) as i64, self.total_duplicates.saturating_sub(self.rent_exempt) as i64,
i64 i64
), ),

View File

@ -6362,11 +6362,12 @@ impl Bank {
/// Scan all the accounts for this bank and collect stats /// Scan all the accounts for this bank and collect stats
pub fn get_total_accounts_stats(bank: &Bank) -> ScanResult<TotalAccountsStats> { pub fn get_total_accounts_stats(bank: &Bank) -> ScanResult<TotalAccountsStats> {
let rent_collector = bank.rent_collector();
bank.rc.accounts.accounts_db.scan_accounts( bank.rc.accounts.accounts_db.scan_accounts(
&Ancestors::default(), &Ancestors::default(),
bank.bank_id(), bank.bank_id(),
|total_accounts_stats: &mut TotalAccountsStats, item| { |total_accounts_stats: &mut TotalAccountsStats, item| {
if let Some((_pubkey, account, _slot)) = item { if let Some((pubkey, account, _slot)) = item {
total_accounts_stats.num_accounts += 1; total_accounts_stats.num_accounts += 1;
total_accounts_stats.data_len += account.data().len(); total_accounts_stats.data_len += account.data().len();
@ -6374,6 +6375,13 @@ pub fn get_total_accounts_stats(bank: &Bank) -> ScanResult<TotalAccountsStats> {
total_accounts_stats.num_executable_accounts += 1; total_accounts_stats.num_executable_accounts += 1;
total_accounts_stats.executable_data_len += account.data().len(); total_accounts_stats.executable_data_len += account.data().len();
} }
if !rent_collector.should_collect_rent(pubkey, &account, false) || {
let (_rent_due, exempt) = rent_collector.get_rent_due(&account);
exempt
} {
total_accounts_stats.num_rent_exempt_accounts += 1;
}
} }
}, },
) )
@ -6391,6 +6399,9 @@ pub struct TotalAccountsStats {
pub num_executable_accounts: usize, pub num_executable_accounts: usize,
/// Total data size of executable accounts /// Total data size of executable accounts
pub executable_data_len: usize, pub executable_data_len: usize,
/// Total number of rent exempt accounts
pub num_rent_exempt_accounts: usize,
} }
impl Drop for Bank { impl Drop for Bank {

View File

@ -60,7 +60,6 @@ impl RentCollector {
rent_for_sysvars: bool, rent_for_sysvars: bool,
) -> bool { ) -> bool {
!(account.executable() // executable accounts must be rent-exempt balance !(account.executable() // executable accounts must be rent-exempt balance
|| account.rent_epoch() > self.epoch
|| (!rent_for_sysvars && sysvar::check_id(account.owner())) || (!rent_for_sysvars && sysvar::check_id(account.owner()))
|| *address == incinerator::id()) || *address == incinerator::id())
} }
@ -95,6 +94,7 @@ impl RentCollector {
filler_account_suffix: Option<&Pubkey>, filler_account_suffix: Option<&Pubkey>,
) -> u64 { ) -> u64 {
if !self.should_collect_rent(address, account, rent_for_sysvars) if !self.should_collect_rent(address, account, rent_for_sysvars)
|| account.rent_epoch() > self.epoch
|| crate::accounts_db::AccountsDb::is_filler_account_helper( || crate::accounts_db::AccountsDb::is_filler_account_helper(
address, address,
filler_account_suffix, filler_account_suffix,