Add total accounts stats to ledger-tool accounts (#21187)

This commit is contained in:
Brooks Prumo 2021-11-08 14:45:30 -06:00 committed by GitHub
parent 5827cf4c51
commit 6f3c27f1da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 7 deletions

1
Cargo.lock generated
View File

@ -5140,6 +5140,7 @@ dependencies = [
"solana-entry", "solana-entry",
"solana-ledger", "solana-ledger",
"solana-logger 1.9.0", "solana-logger 1.9.0",
"solana-measure",
"solana-runtime", "solana-runtime",
"solana-sdk", "solana-sdk",
"solana-stake-program", "solana-stake-program",

View File

@ -28,6 +28,7 @@ solana-core = { path = "../core", version = "=1.9.0" }
solana-entry = { path = "../entry", version = "=1.9.0" } solana-entry = { path = "../entry", version = "=1.9.0" }
solana-ledger = { path = "../ledger", version = "=1.9.0" } solana-ledger = { path = "../ledger", version = "=1.9.0" }
solana-logger = { path = "../logger", version = "=1.9.0" } solana-logger = { path = "../logger", version = "=1.9.0" }
solana-measure = { path = "../measure", version = "=1.9.0" }
solana-runtime = { path = "../runtime", version = "=1.9.0" } solana-runtime = { path = "../runtime", version = "=1.9.0" }
solana-sdk = { path = "../sdk", version = "=1.9.0" } solana-sdk = { path = "../sdk", version = "=1.9.0" }
solana-stake-program = { path = "../programs/stake", version = "=1.9.0" } solana-stake-program = { path = "../programs/stake", version = "=1.9.0" }

View File

@ -24,10 +24,11 @@ use solana_ledger::{
blockstore_processor::ProcessOptions, blockstore_processor::ProcessOptions,
shred::Shred, shred::Shred,
}; };
use solana_measure::measure::Measure;
use solana_runtime::{ use solana_runtime::{
accounts_db::AccountsDbConfig, accounts_db::AccountsDbConfig,
accounts_index::AccountsIndexConfig, accounts_index::AccountsIndexConfig,
bank::{Bank, RewardCalculationEvent}, bank::{Bank, RewardCalculationEvent, TotalAccountsStats},
bank_forks::BankForks, bank_forks::BankForks,
cost_model::CostModel, cost_model::CostModel,
cost_tracker::CostTracker, cost_tracker::CostTracker,
@ -1413,7 +1414,7 @@ fn main() {
) )
).subcommand( ).subcommand(
SubCommand::with_name("accounts") SubCommand::with_name("accounts")
.about("Print account contents after processing in the ledger") .about("Print account stats and contents after processing the ledger")
.arg(&no_snapshot_arg) .arg(&no_snapshot_arg)
.arg(&account_paths_arg) .arg(&account_paths_arg)
.arg(&halt_at_slot_arg) .arg(&halt_at_slot_arg)
@ -2495,6 +2496,7 @@ fn main() {
}); });
let bank = bank_forks.working_bank(); let bank = bank_forks.working_bank();
let mut measure = Measure::start("getting accounts");
let accounts: BTreeMap<_, _> = bank let accounts: BTreeMap<_, _> = bank
.get_all_accounts_with_modified_slots() .get_all_accounts_with_modified_slots()
.unwrap() .unwrap()
@ -2504,13 +2506,29 @@ fn main() {
}) })
.map(|(pubkey, account, slot)| (pubkey, (account, slot))) .map(|(pubkey, account, slot)| (pubkey, (account, slot)))
.collect(); .collect();
measure.stop();
info!("{}", measure);
let print_account_contents = !arg_matches.is_present("no_account_contents"); let print_account_contents = !arg_matches.is_present("no_account_contents");
if print_account_contents { let print_account_data = !arg_matches.is_present("no_account_data");
println!("Getting accounts contents..."); let rent_collector = bank.rent_collector();
let print_account_data = !arg_matches.is_present("no_account_data"); let mut total_accounts_stats = TotalAccountsStats::default();
for (pubkey, (account, slot)) in accounts.into_iter() { let mut measure = Measure::start("processing accounts");
let data_len = account.data().len(); for (pubkey, (account, slot)) in accounts.into_iter() {
let data_len = account.data().len();
total_accounts_stats.num_accounts += 1;
total_accounts_stats.data_len += data_len;
if account.executable() {
total_accounts_stats.num_executable_accounts += 1;
total_accounts_stats.executable_data_len += data_len;
}
if !rent_collector.should_collect_rent(&pubkey, &account, false)
|| rent_collector.get_rent_due(&account).1
{
total_accounts_stats.num_rent_exempt_accounts += 1;
}
if print_account_contents {
println!("{}:", pubkey); println!("{}:", pubkey);
println!(" - balance: {} SOL", lamports_to_sol(account.lamports())); println!(" - balance: {} SOL", lamports_to_sol(account.lamports()));
println!(" - owner: '{}'", account.owner()); println!(" - owner: '{}'", account.owner());
@ -2523,6 +2541,10 @@ fn main() {
println!(" - data_len: {}", data_len); println!(" - data_len: {}", data_len);
} }
} }
measure.stop();
info!("{}", measure);
println!("{:#?}", total_accounts_stats);
} }
("capitalization", Some(arg_matches)) => { ("capitalization", Some(arg_matches)) => {
let dev_halt_at_slot = value_t!(arg_matches, "halt_at_slot", Slot).ok(); let dev_halt_at_slot = value_t!(arg_matches, "halt_at_slot", Slot).ok();