From ae104286f649ccf08de51b20a125a68e78833233 Mon Sep 17 00:00:00 2001 From: nivanovvv Date: Tue, 26 May 2026 10:10:20 +0800 Subject: [PATCH] db/integrity: check txnum lookup misses --- cmd/utils/app/snapshots_cmd.go | 6 +++++- db/integrity/rcache_no_duplicates.go | 8 +++++++- db/integrity/rcache_receipt_root.go | 8 +++++++- db/integrity/receipts_no_duplicates.go | 8 +++++++- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/cmd/utils/app/snapshots_cmd.go b/cmd/utils/app/snapshots_cmd.go index bb22d922392..b1e7ca603e0 100644 --- a/cmd/utils/app/snapshots_cmd.go +++ b/cmd/utils/app/snapshots_cmd.go @@ -1919,11 +1919,15 @@ func doCheckRCacheRootAtBlkRange(cliCtx *cli.Context, logger log.Logger) error { return err } defer tx.Rollback() - rcacheTip, _, err := blockReader.TxnumReader().FindBlockNum(ctx, tx, tx.Debug().DomainProgress(kv.RCacheDomain)) + rcacheDomainProgress := tx.Debug().DomainProgress(kv.RCacheDomain) + rcacheTip, ok, err := blockReader.TxnumReader().FindBlockNum(ctx, tx, rcacheDomainProgress) tx.Rollback() if err != nil { return err } + if !ok { + return fmt.Errorf("findBlockNum(%d) not found", rcacheDomainProgress) + } to = rcacheTip + 1 // exclusive upper bound logger.Info("[check-rcache-root-at-blk-range] auto-detected --to", "to", to) } diff --git a/db/integrity/rcache_no_duplicates.go b/db/integrity/rcache_no_duplicates.go index d1044717328..32f0cfcf8d0 100644 --- a/db/integrity/rcache_no_duplicates.go +++ b/db/integrity/rcache_no_duplicates.go @@ -30,7 +30,13 @@ func CheckRCacheNoDups(ctx context.Context, sc SamplerCfg, db kv.TemporalRoDB, b rcacheDomainProgress := tx.Debug().DomainProgress(kv.RCacheDomain) fromBlock := uint64(1) - toBlock, _, _ := txNumsReader.FindBlockNum(ctx, tx, rcacheDomainProgress) + toBlock, ok, err := txNumsReader.FindBlockNum(ctx, tx, rcacheDomainProgress) + if err != nil { + return fmt.Errorf("findBlockNum(%d) fails: %w", rcacheDomainProgress, err) + } + if !ok { + return fmt.Errorf("findBlockNum(%d) not found", rcacheDomainProgress) + } if err := ValidateDomainProgress(ctx, db, kv.RCacheDomain, txNumsReader); err != nil { return err diff --git a/db/integrity/rcache_receipt_root.go b/db/integrity/rcache_receipt_root.go index ee5003fc151..f2c444d441b 100644 --- a/db/integrity/rcache_receipt_root.go +++ b/db/integrity/rcache_receipt_root.go @@ -50,7 +50,13 @@ func CheckReceiptRootIntegrity(ctx context.Context, sc SamplerCfg, db kv.Tempora defer tx.Rollback() rcacheDomainProgress := tx.Debug().DomainProgress(kv.RCacheDomain) - rcacheTip, _, _ := txNumsReader.FindBlockNum(ctx, tx, rcacheDomainProgress) + rcacheTip, ok, err := txNumsReader.FindBlockNum(ctx, tx, rcacheDomainProgress) + if err != nil { + return fmt.Errorf("findBlockNum(%d) fails: %w", rcacheDomainProgress, err) + } + if !ok { + return fmt.Errorf("findBlockNum(%d) not found", rcacheDomainProgress) + } if err := ValidateDomainProgress(ctx, db, kv.RCacheDomain, txNumsReader); err != nil { return err diff --git a/db/integrity/receipts_no_duplicates.go b/db/integrity/receipts_no_duplicates.go index daa84de35d2..a75922957f1 100644 --- a/db/integrity/receipts_no_duplicates.go +++ b/db/integrity/receipts_no_duplicates.go @@ -33,7 +33,13 @@ func CheckReceiptsNoDups(ctx context.Context, sc SamplerCfg, db kv.TemporalRoDB, receiptProgress := tx.Debug().DomainProgress(kv.ReceiptDomain) fromBlock := uint64(1) - toBlock, _, _ := txNumsReader.FindBlockNum(ctx, tx, receiptProgress) + toBlock, ok, err := txNumsReader.FindBlockNum(ctx, tx, receiptProgress) + if err != nil { + return fmt.Errorf("findBlockNum(%d) fails: %w", receiptProgress, err) + } + if !ok { + return fmt.Errorf("findBlockNum(%d) not found", receiptProgress) + } log.Info("[integrity] ReceiptsNoDups starting", "fromBlock", fromBlock, "toBlock", toBlock) return parallelChunkCheck(ctx, sc.NewSampler(), fromBlock, toBlock, db, blockReader, failFast, string(ReceiptsNoDups), ReceiptsNoDupsRange)