Revert "core/state/snapshot: tiny fixes" (#30039)

Revert "core/state/snapshot: tiny fixes (#29995)"

This reverts commit e0e45dbc32.
pull/30043/head^2
rjl493456442 5 months ago committed by GitHub
parent e0e45dbc32
commit c10ac4f48f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 9
      core/state/snapshot/generate.go
  2. 10
      core/state/snapshot/snapshot.go

@ -631,10 +631,16 @@ func generateAccounts(ctx *generatorContext, dl *diskLayer, accMarker []byte) er
accMarker = nil accMarker = nil
return nil return nil
} }
// Always reset the initial account range as 1 whenever recover from the
// interruption. TODO(rjl493456442) can we remove it?
var accountRange = accountCheckRange
if len(accMarker) > 0 {
accountRange = 1
}
origin := common.CopyBytes(accMarker) origin := common.CopyBytes(accMarker)
for { for {
id := trie.StateTrieID(dl.root) id := trie.StateTrieID(dl.root)
exhausted, last, err := dl.generateRange(ctx, id, rawdb.SnapshotAccountPrefix, snapAccount, origin, accountCheckRange, onAccount, types.FullAccountRLP) exhausted, last, err := dl.generateRange(ctx, id, rawdb.SnapshotAccountPrefix, snapAccount, origin, accountRange, onAccount, types.FullAccountRLP)
if err != nil { if err != nil {
return err // The procedure it aborted, either by external signal or internal error. return err // The procedure it aborted, either by external signal or internal error.
} }
@ -646,6 +652,7 @@ func generateAccounts(ctx *generatorContext, dl *diskLayer, accMarker []byte) er
ctx.removeStorageLeft() ctx.removeStorageLeft()
break break
} }
accountRange = accountCheckRange
} }
return nil return nil
} }

@ -258,6 +258,14 @@ func (t *Tree) Disable() {
for _, layer := range t.layers { for _, layer := range t.layers {
switch layer := layer.(type) { switch layer := layer.(type) {
case *diskLayer: case *diskLayer:
layer.lock.RLock()
generating := layer.genMarker != nil
layer.lock.RUnlock()
if !generating {
// Generator is already aborted or finished
break
}
// If the base layer is generating, abort it // If the base layer is generating, abort it
if layer.genAbort != nil { if layer.genAbort != nil {
abort := make(chan *generatorStats) abort := make(chan *generatorStats)
@ -268,7 +276,6 @@ func (t *Tree) Disable() {
layer.lock.Lock() layer.lock.Lock()
layer.stale = true layer.stale = true
layer.lock.Unlock() layer.lock.Unlock()
layer.Release()
case *diffLayer: case *diffLayer:
// If the layer is a simple diff, simply mark as stale // If the layer is a simple diff, simply mark as stale
@ -733,7 +740,6 @@ func (t *Tree) Rebuild(root common.Hash) {
layer.lock.Lock() layer.lock.Lock()
layer.stale = true layer.stale = true
layer.lock.Unlock() layer.lock.Unlock()
layer.Release()
case *diffLayer: case *diffLayer:
// If the layer is a simple diff, simply mark as stale // If the layer is a simple diff, simply mark as stale

Loading…
Cancel
Save