fix(prune): improve pruner log readability (#21522)

Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: joshieDo <93316087+joshieDo@users.noreply.github.com>
This commit is contained in:
Georgios Konstantopoulos
2026-01-28 05:41:55 -08:00
committed by GitHub
parent 48a999a81b
commit 497985ca86
4 changed files with 51 additions and 17 deletions

1
Cargo.lock generated
View File

@@ -10248,6 +10248,7 @@ dependencies = [
"strum 0.27.2",
"thiserror 2.0.18",
"toml",
"tracing",
]
[[package]]

View File

@@ -149,21 +149,7 @@ where
let elapsed = start.elapsed();
self.metrics.duration_seconds.record(elapsed);
let message = match output.progress {
PruneProgress::HasMoreData(_) => "Pruner interrupted and has more data to prune",
PruneProgress::Finished => "Pruner finished",
};
debug!(
target: "pruner",
%tip_block_number,
?elapsed,
?deleted_entries,
?limiter,
?output,
?stats,
"{message}",
);
output.debug_log(tip_block_number, deleted_entries, elapsed);
self.event_sender.notify(PrunerEvent::Finished { tip_block_number, elapsed, stats });

View File

@@ -18,6 +18,7 @@ alloy-primitives.workspace = true
derive_more.workspace = true
strum = { workspace = true, features = ["derive"] }
thiserror.workspace = true
tracing.workspace = true
modular-bitfield = { workspace = true, optional = true }
serde = { workspace = true, features = ["derive"], optional = true }
@@ -42,8 +43,9 @@ std = [
"derive_more/std",
"serde?/std",
"serde_json/std",
"thiserror/std",
"strum/std",
"thiserror/std",
"tracing/std",
]
test-utils = [
"std",

View File

@@ -1,7 +1,9 @@
use crate::{PruneCheckpoint, PruneMode, PruneSegment};
use alloc::vec::Vec;
use alloc::{format, string::ToString, vec::Vec};
use alloy_primitives::{BlockNumber, TxNumber};
use core::time::Duration;
use derive_more::Display;
use tracing::debug;
/// Pruner run output.
#[derive(Debug)]
@@ -18,6 +20,49 @@ impl From<PruneProgress> for PrunerOutput {
}
}
impl PrunerOutput {
/// Logs a human-readable summary of the pruner run at DEBUG level.
///
/// Format: `"Pruner finished tip=24328929 deleted=10886 elapsed=148ms
/// segments=AccountHistory[24318865, done] ..."`
#[inline]
pub fn debug_log(
&self,
tip_block_number: BlockNumber,
deleted_entries: usize,
elapsed: Duration,
) {
let message = match self.progress {
PruneProgress::HasMoreData(_) => "Pruner interrupted, has more data",
PruneProgress::Finished => "Pruner finished",
};
let segments: Vec<_> = self
.segments
.iter()
.filter(|(_, seg)| seg.pruned > 0)
.map(|(segment, seg)| {
let block = seg
.checkpoint
.and_then(|c| c.block_number)
.map(|b| b.to_string())
.unwrap_or_else(|| "?".to_string());
let status = if seg.progress.is_finished() { "done" } else { "in_progress" };
format!("{segment}[{block}, {status}]")
})
.collect();
debug!(
target: "pruner",
%tip_block_number,
deleted_entries,
?elapsed,
segments = %segments.join(" "),
"{message}",
);
}
}
/// Represents information of a pruner run for a segment.
#[derive(Debug, Clone, PartialEq, Eq, Display)]
#[display("(table={segment}, pruned={pruned}, status={progress})")]