From 64cfce5b5d5b0bc601f49223e9dfcb97058361d0 Mon Sep 17 00:00:00 2001 From: jsvisa Date: Wed, 20 Aug 2025 16:26:38 +0800 Subject: [PATCH] fix: add snapshot root --- core/state/state_sizer.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/core/state/state_sizer.go b/core/state/state_sizer.go index c092e255af..8ca4edb9b5 100644 --- a/core/state/state_sizer.go +++ b/core/state/state_sizer.go @@ -347,8 +347,21 @@ wait: var ( updates = make(map[common.Hash]*stateUpdate) children = make(map[common.Hash][]common.Hash) - done = make(chan buildResult) + done chan buildResult ) + + // Add snapshot root to updates map when snapshot completes + if root := rawdb.ReadSnapshotRoot(t.db); root != (common.Hash{}) { + var number uint64 + if recoveryNumber := rawdb.ReadSnapshotRecoveryNumber(t.db); recoveryNumber != nil { + number = *recoveryNumber + } + updates[root] = &stateUpdate{ + root: root, + blockNumber: number, + } + } + for { select { case u := <-t.updateCh: @@ -356,6 +369,10 @@ wait: children[u.originRoot] = append(children[u.originRoot], u.root) case <-ticker.C: + // Only check timer if build hasn't started yet + if done != nil { + continue + } root := rawdb.ReadSnapshotRoot(t.db) if root == (common.Hash{}) { continue @@ -364,11 +381,9 @@ wait: if !exists { continue } - if done == nil { - done = make(chan buildResult) - go t.build(entry.root, entry.blockNumber, done) - log.Info("Measuring persistent state size", "root", root, "number", entry.blockNumber) - } + done = make(chan buildResult) + go t.build(entry.root, entry.blockNumber, done) + log.Info("Measuring persistent state size", "root", root, "number", entry.blockNumber) case result := <-done: if result.err != nil {