From f7d2ba24f0bdd8441ba1f5ebf394ebf4e55e4b55 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 10 Dec 2020 17:56:30 +0000 Subject: [PATCH] adds ledger-tool mode to print raw shred metadata (#13962) (#14017) (cherry picked from commit f6a7732ff9d445750ebc946d78e49ee627de6d8d) Co-authored-by: behzad nouri --- ledger-tool/src/main.rs | 60 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 30bc930b5e..6bd7d8cd8a 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -21,6 +21,7 @@ use solana_ledger::{ blockstore_db::{self, AccessType, BlockstoreRecoveryMode, Column, Database}, blockstore_processor::ProcessOptions, rooted_slot_iterator::RootedSlotIterator, + shred::Shred, }; use solana_runtime::{ bank::{Bank, RewardCalculationEvent}, @@ -741,6 +742,11 @@ fn main() { .takes_value(true) .default_value("0") .help("Start at this slot"); + let ending_slot_arg = Arg::with_name("ending_slot") + .long("ending-slot") + .value_name("SLOT") + .takes_value(true) + .help("The last slot to iterate to"); let no_snapshot_arg = Arg::with_name("no_snapshot") .long("no-snapshot") .takes_value(false) @@ -926,13 +932,7 @@ fn main() { SubCommand::with_name("parse_full_frozen") .about("Parses log for information about critical events about ancestors of the given `ending_slot`") .arg(&starting_slot_arg) - .arg( - Arg::with_name("ending_slot") - .long("ending-slot") - .value_name("SLOT") - .takes_value(true) - .help("The last slot to iterate to"), - ) + .arg(&ending_slot_arg) .arg( Arg::with_name("log_path") .long("log-path") @@ -974,6 +974,12 @@ fn main() { .arg(&hard_forks_arg) .arg(&max_genesis_archive_unpacked_size_arg) ) + .subcommand( + SubCommand::with_name("shred-meta") + .about("Prints raw shred metadata") + .arg(&starting_slot_arg) + .arg(&ending_slot_arg) + ) .subcommand( SubCommand::with_name("bank-hash") .about("Prints the hash of the working bank after reading the ledger") @@ -1436,6 +1442,46 @@ fn main() { } } } + ("shred-meta", Some(arg_matches)) => { + #[derive(Debug)] + struct ShredMeta<'a> { + slot: Slot, + full_slot: bool, + shred_index: usize, + data: bool, + code: bool, + last_in_slot: bool, + data_complete: bool, + shred: &'a Shred, + }; + let starting_slot = value_t_or_exit!(arg_matches, "starting_slot", Slot); + let ending_slot = value_t!(arg_matches, "ending_slot", Slot).unwrap_or(Slot::MAX); + let ledger = open_blockstore(&ledger_path, AccessType::TryPrimaryThenSecondary, None); + for (slot, _meta) in ledger + .slot_meta_iterator(starting_slot) + .unwrap() + .take_while(|(slot, _)| *slot <= ending_slot) + { + let full_slot = ledger.is_full(slot); + if let Ok(shreds) = ledger.get_data_shreds_for_slot(slot, 0) { + for (shred_index, shred) in shreds.iter().enumerate() { + println!( + "{:#?}", + ShredMeta { + slot, + full_slot, + shred_index, + data: shred.is_data(), + code: shred.is_code(), + data_complete: shred.data_complete(), + last_in_slot: shred.last_in_slot(), + shred, + } + ); + } + } + } + } ("bank-hash", Some(arg_matches)) => { let process_options = ProcessOptions { dev_halt_at_slot: Some(0),