core/state/snapshot: stop generator if it hits missing trie nodes (#21649)
* core/state/snapshot: exit Geth if generator hits missing trie nodes * core/state/snapshot: error instead of hard die on generator fault * core/state/snapshot: don't enable logging on the tests
This commit is contained in:
@ -129,7 +129,7 @@ func (dl *diskLayer) generate(stats *generatorStats) {
|
||||
stats.wiping = nil
|
||||
stats.start = time.Now()
|
||||
|
||||
// If generator was aboted during wipe, return
|
||||
// If generator was aborted during wipe, return
|
||||
case abort := <-dl.genAbort:
|
||||
abort <- stats
|
||||
return
|
||||
@ -203,7 +203,10 @@ func (dl *diskLayer) generate(stats *generatorStats) {
|
||||
if acc.Root != emptyRoot {
|
||||
storeTrie, err := trie.NewSecure(acc.Root, dl.triedb)
|
||||
if err != nil {
|
||||
log.Crit("Storage trie inaccessible for snapshot generation", "err", err)
|
||||
log.Error("Generator failed to access storage trie", "accroot", dl.root, "acchash", common.BytesToHash(accIt.Key), "stroot", acc.Root, "err", err)
|
||||
abort := <-dl.genAbort
|
||||
abort <- stats
|
||||
return
|
||||
}
|
||||
var storeMarker []byte
|
||||
if accMarker != nil && bytes.Equal(accountHash[:], accMarker) && len(dl.genMarker) > common.HashLength {
|
||||
@ -238,6 +241,12 @@ func (dl *diskLayer) generate(stats *generatorStats) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if err := storeIt.Err; err != nil {
|
||||
log.Error("Generator failed to iterate storage trie", "accroot", dl.root, "acchash", common.BytesToHash(accIt.Key), "stroot", acc.Root, "err", err)
|
||||
abort := <-dl.genAbort
|
||||
abort <- stats
|
||||
return
|
||||
}
|
||||
}
|
||||
if time.Since(logged) > 8*time.Second {
|
||||
stats.Log("Generating state snapshot", dl.root, accIt.Key)
|
||||
@ -246,6 +255,12 @@ func (dl *diskLayer) generate(stats *generatorStats) {
|
||||
// Some account processed, unmark the marker
|
||||
accMarker = nil
|
||||
}
|
||||
if err := accIt.Err; err != nil {
|
||||
log.Error("Generator failed to iterate account trie", "root", dl.root, "err", err)
|
||||
abort := <-dl.genAbort
|
||||
abort <- stats
|
||||
return
|
||||
}
|
||||
// Snapshot fully generated, set the marker to nil
|
||||
if batch.ValueSize() > 0 {
|
||||
batch.Write()
|
||||
|
Reference in New Issue
Block a user