From f402bbbade573fc8409b26e72fa50f943d22c46f Mon Sep 17 00:00:00 2001 From: Rodrigo Daniel Pino Trueba Date: Mon, 8 Jun 2026 11:47:23 +0100 Subject: [PATCH 1/3] chore(pruner): add information to logs and errors --- pruner/pruner.go | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pruner/pruner.go b/pruner/pruner.go index a33774db93..ba4466520f 100644 --- a/pruner/pruner.go +++ b/pruner/pruner.go @@ -203,7 +203,7 @@ func (p *Pruner) Run(ctx context.Context) error { var sampleTickerC <-chan time.Time if p.minAge > 0 { if err := p.seedFloor(); err != nil { - return fmt.Errorf("pruner: seed minimum-age floor: %w", err) + return fmt.Errorf("seed minimum-age floor: %w", err) } sampleTicker := time.NewTicker(p.floorTickInterval) defer sampleTicker.Stop() @@ -245,7 +245,8 @@ func (p *Pruner) Run(ctx context.Context) error { case <-staleTicker.C: p.listener.OnL1Stale() p.logger.Warn("no L1 head received in more than 24 hours. " + - "Pruning is paused and disk usage will slowly grow until L1 head delivery resumes", + "Pruning is paused and disk usage will slowly grow until L1 head delivery resumes" + + ". Verify that the L1 client connected is live and synced.", ) staleTicker.Reset(periodicStalenessTick) } @@ -274,7 +275,7 @@ func FindOldestBlockAtOrAfter( mid := low + (high-low)/2 header, err := core.GetBlockHeaderByNumber(database, mid) if err != nil { - return 0, err + return 0, fmt.Errorf("getting block head for block %d", mid) } if header.Timestamp < cutoffUnix { low = mid + 1 @@ -295,7 +296,7 @@ func (p *Pruner) sampleHeight() error { if errors.Is(err, db.ErrKeyNotFound) { return nil } - return err + return fmt.Errorf("getting chain height: %w", err) } cutoff := time.Now().Add(-p.minAge) // Reuse the previous floor as the lower bound: the cutoff only @@ -307,7 +308,10 @@ func (p *Pruner) sampleHeight() error { p.latestSampledHeight = height return nil } - return err + return fmt.Errorf( + "finding oldest block between %d and %d: %w", + p.latestSampledHeight, height, err, + ) } p.latestSampledHeight = floor return nil @@ -403,10 +407,10 @@ func (p *Pruner) pruneUpto(ctx context.Context, oldestBlockToKeep uint64) error elapsed := time.Since(start) p.listener.OnPrune(oldestKept, blocksPruned, elapsed) - p.logger.Info("Pruner", - zap.Uint64("oldest_kept", oldestKept), - zap.Uint64("block_pruned", blocksPruned), - zap.Duration("elapsed", elapsed), + p.logger.Info("Pruned Blocks", + zap.Uint64("prunedBelow", oldestKept), + zap.Uint64("blocksPruned", blocksPruned), + zap.Duration("duration", elapsed), ) return nil } From da030ae6349e6b94d8bc1e5f142ecb6485f3c08d Mon Sep 17 00:00:00 2001 From: Rodrigo Daniel Pino Trueba Date: Mon, 8 Jun 2026 11:47:45 +0100 Subject: [PATCH 2/3] fix(cmd): update default prune-mode value to 128 --- cmd/juno/juno.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index f4e9b98e2f..9183c45620 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -495,8 +495,8 @@ func NewCmd(config *node.Config, run func(*cobra.Command, []string) error) *cobr // --- Pruning --- junoCmd.Flags().Uint64(pruneModeF, defaultPruneMode, pruneModeUsage) - // NoOptDefVal lets users pass --prune-mode without a value (treated as 0). - junoCmd.Flags().Lookup(pruneModeF).NoOptDefVal = "0" + // NoOptDefVal lets users pass --prune-mode without a value (treated as 128). + junoCmd.Flags().Lookup(pruneModeF).NoOptDefVal = "128" junoCmd.Flags().Duration(pruneMinAgeF, defaultPruneMinAge, pruneMinAgeUsage) setCategory(junoCmd, catPruning, pruneModeF, pruneMinAgeF) From 19dcef64e49847d03297809cadef6708be0fb487 Mon Sep 17 00:00:00 2001 From: Rodrigo Daniel Pino Trueba Date: Mon, 8 Jun 2026 13:59:15 +0100 Subject: [PATCH 3/3] fix(cmd, pruner): words --- cmd/juno/juno.go | 2 +- pruner/pruner.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/juno/juno.go b/cmd/juno/juno.go index 9183c45620..edf4bf4d41 100644 --- a/cmd/juno/juno.go +++ b/cmd/juno/juno.go @@ -257,7 +257,7 @@ const ( "it on. The value is the size of the retention window in blocks, counted " + "back from the retention pivot (the lower of the L1-verified head and " + "the local L2 head):\n" + - " --prune-mode same as --prune-mode=0; prune up to the pivot\n" + + " --prune-mode same as --prune-mode=128; keep 128 blocks below the pivot\n" + " --prune-mode=N keep blocks in [pivot - N, l2_head], prune below\n" + "Blocks at or above the L2 head are always kept. The pivot is at or " + "below the L1-verified head, so pruned blocks are reorg-safe. RPC " + diff --git a/pruner/pruner.go b/pruner/pruner.go index ba4466520f..449d968297 100644 --- a/pruner/pruner.go +++ b/pruner/pruner.go @@ -275,7 +275,7 @@ func FindOldestBlockAtOrAfter( mid := low + (high-low)/2 header, err := core.GetBlockHeaderByNumber(database, mid) if err != nil { - return 0, fmt.Errorf("getting block head for block %d", mid) + return 0, fmt.Errorf("getting block header for block %d: %w", mid, err) } if header.Timestamp < cutoffUnix { low = mid + 1