Skip to content

Commit 1b2da4a

Browse files
authored
feat: log ledger replay progress update (#300)
## Summary Add progress report to ledger replay. FIXES: #297 ## Details Logging an update every 100th block replayed on `info` log level. Additionally we now include the signature of a transaction that fails during ledger replay. ``` [2025-02.. INFO magicblock_api::init_geyser_service] Launched GRPC Geyser service on '0.0.0.0:10000' [2025-02.. INFO magicblock_ledger::store::utils] Maximum open file descriptors: 1000000 [2025-02.. INFO magicblock_ledger::store::api] Opening ledger at "./zeebit-main-3GB/rocksdb" [2025-02.. INFO magicblock_ledger::store::api] Opening ledger done; ledger open took 6.7s [2025-02.. INFO magicblock_metrics::service] Serving 0.0.0.0:9000/metrics [2025-02.. INFO magicblock_ledger::blockstore_processor] Hydrating bank [2025-02.. INFO magicblock_ledger::blockstore_processor] Storing 34,744 accounts into bank [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,721,100/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,721,200/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,721,300/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,721,400/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,721,500/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,721,600/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,721,700/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,721,800/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,721,900/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,722,000/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,722,100/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,722,200/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,722,300/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,722,400/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,722,500/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,722,600/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,722,700/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,722,800/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,722,900/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,723,000/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,723,100/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,723,200/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,723,300/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,723,400/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,723,500/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,723,600/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,723,700/20,723,850 [2025-02.. INFO magicblock_ledger::blockstore_processor] Processing block: 20,723,800/20,723,850 [2025-02.. INFO magicblock_api::magic_validator] Processed ledger, validator continues at slot 20723851 ``` <!-- greptile_comment --> ## Greptile Summary This PR adds progress logging functionality to the ledger replay process in the MagicBlock validator, providing better visibility into block processing status. - Added formatted progress logging in `magicblock-ledger/src/blockstore_processor/mod.rs` to show block processing status every 100 blocks - Added `num-format` dependency (v0.4.4) to workspace and ledger module for number formatting in logs - Improved error messages by including transaction signatures in failure cases - Removed redundant logging configurations from `sh/source/utils/source-log` while maintaining core debug capabilities <!-- /greptile_comment -->
1 parent bccc710 commit 1b2da4a

File tree

6 files changed

+35
-11
lines changed

6 files changed

+35
-11
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ log = "0.4.20"
9494
min-max-heap = "1.3.0"
9595
num_cpus = "1.16.0"
9696
num-derive = "0.4"
97+
num-format = "0.4.4"
9798
num-traits = "0.2"
9899
paste = "1.0"
99100
percentage = "0.1.0"

magicblock-ledger/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ byteorder = { workspace = true }
1414
fs_extra = { workspace = true }
1515
libc = { workspace = true }
1616
num_cpus = { workspace = true }
17+
num-format = { workspace = true }
1718
prost = { workspace = true }
1819
serde = { workspace = true }
1920
magicblock-bank = { workspace = true }

magicblock-ledger/src/blockstore_processor/mod.rs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use std::str::FromStr;
22

3+
use num_format::{Locale, ToFormattedString};
4+
35
use log::{Level::Trace, *};
46
use magicblock_accounts_db::{
57
utils::{all_accounts, StoredAccountMeta},
@@ -54,10 +56,30 @@ fn iter_blocks(
5456
blockhashes_only_starting_slot,
5557
} = params;
5658
let mut slot: u64 = blockhashes_only_starting_slot;
59+
60+
let max_slot = if log::log_enabled!(Level::Info) {
61+
ledger
62+
.get_max_blockhash()?
63+
.0
64+
.to_formatted_string(&Locale::en)
65+
} else {
66+
"N/A".to_string()
67+
};
68+
const PROGRESS_REPORT_INTERVAL: u64 = 100;
5769
loop {
5870
let Ok(Some(block)) = ledger.get_block(slot) else {
5971
break;
6072
};
73+
if log::log_enabled!(Level::Info)
74+
&& slot % PROGRESS_REPORT_INTERVAL == 0
75+
{
76+
info!(
77+
"Processing block: {}/{}",
78+
slot.to_formatted_string(&Locale::en),
79+
max_slot
80+
);
81+
}
82+
6183
let VersionedConfirmedBlock {
6284
blockhash,
6385
previous_blockhash,
@@ -116,6 +138,8 @@ fn iter_blocks(
116138
}
117139

118140
fn hydrate_bank(bank: &Bank, max_slot: Slot) -> LedgerResult<(Slot, usize)> {
141+
info!("Hydrating bank");
142+
119143
let persister =
120144
AccountsPersister::new_with_paths(vec![bank.accounts_path.clone()]);
121145
let Some((storage, slot)) = persister.load_most_recent_store(max_slot)?
@@ -134,6 +158,10 @@ fn hydrate_bank(bank: &Bank, max_slot: Slot) -> LedgerResult<(Slot, usize)> {
134158
(*acc_meta.pubkey(), AccountSharedData::from(acc))
135159
});
136160
let len = storable_accounts.len();
161+
info!(
162+
"Storing {} accounts into bank",
163+
len.to_formatted_string(&Locale::en)
164+
);
137165
bank.store_accounts(storable_accounts);
138166
Ok((slot, len))
139167
}
@@ -206,6 +234,7 @@ pub fn process_ledger(ledger: &Ledger, bank: &Bank) -> LedgerResult<u64> {
206234
log_sanitized_transaction(&tx);
207235

208236
let mut timings = ExecuteTimings::default();
237+
let signature = *tx.signature();
209238
let batch = [tx];
210239
let batch = bank.prepare_sanitized_batch(&batch);
211240
let (results, _) = bank
@@ -237,8 +266,8 @@ pub fn process_ledger(ledger: &Ledger, bank: &Bank) -> LedgerResult<u64> {
237266
};
238267
return Err(LedgerError::BlockStoreProcessor(
239268
format!(
240-
"Transaction {:?} could not be executed: {:?}",
241-
result, err
269+
"Transaction '{}', {:?} could not be executed: {:?}",
270+
signature, result, err
242271
),
243272
));
244273
}

sh/source/utils/source-log

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ TRACE_ARR=(
55
"geyser_plugin=trace,"
66
"magicblock=trace,"
77
"rpc=trace,"
8-
"bank=trace,"
9-
"banking_stage=trace,"
108
"solana_geyser_plugin_manager=trace,"
119
"solana_svm=trace,"
1210
"test_tools=trace,"
@@ -17,9 +15,6 @@ DEBUG_ARR=(
1715
"geyser_plugin=debug,"
1816
"magicblock=debug,"
1917
"rpc=debug,"
20-
"bank=debug,"
21-
"banking_stage=debug,"
22-
"mutator=debug,"
2318
"solana_geyser_plugin_manager=debug,"
2419
"solana_svm=debug,"
2520
"test_tools=debug,"
@@ -30,9 +25,6 @@ INFO_ARR=(
3025
"geyser_plugin=info,"
3126
"magicblock=info,"
3227
"rpc=info,"
33-
"bank=info,"
34-
"banking_stage=info,"
35-
"mutator=info,"
3628
"solana_geyser_plugin_manager=info,"
3729
"solana_svm=info,"
3830
"test_tools=info,"

tools/ledger-stats/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ path = "src/lib.rs"
1313
[dependencies]
1414
magicblock-accounts-db = { workspace = true }
1515
magicblock-ledger = { workspace = true }
16-
num-format = "0.4.4"
16+
num-format = { workspace = true }
1717
pretty-hex = "0.4.1"
1818
solana-sdk = { workspace = true }
1919
solana-transaction-status = { workspace = true }

0 commit comments

Comments
 (0)