core/state: fix read-meters + simplify code (#24304)
This commit is contained in:
parent
fb3a6528cf
commit
51e7968b8b
@ -198,25 +198,10 @@ func (s *stateObject) GetCommittedState(db Database, key common.Hash) common.Has
|
|||||||
}
|
}
|
||||||
// If no live objects are available, attempt to use snapshots
|
// If no live objects are available, attempt to use snapshots
|
||||||
var (
|
var (
|
||||||
enc []byte
|
enc []byte
|
||||||
err error
|
err error
|
||||||
meter *time.Duration
|
|
||||||
)
|
)
|
||||||
readStart := time.Now()
|
|
||||||
if metrics.EnabledExpensive {
|
|
||||||
// If the snap is 'under construction', the first lookup may fail. If that
|
|
||||||
// happens, we don't want to double-count the time elapsed. Thus this
|
|
||||||
// dance with the metering.
|
|
||||||
defer func() {
|
|
||||||
if meter != nil {
|
|
||||||
*meter += time.Since(readStart)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
if s.db.snap != nil {
|
if s.db.snap != nil {
|
||||||
if metrics.EnabledExpensive {
|
|
||||||
meter = &s.db.SnapshotStorageReads
|
|
||||||
}
|
|
||||||
// If the object was destructed in *this* block (and potentially resurrected),
|
// If the object was destructed in *this* block (and potentially resurrected),
|
||||||
// the storage has been cleared out, and we should *not* consult the previous
|
// the storage has been cleared out, and we should *not* consult the previous
|
||||||
// snapshot about any storage values. The only possible alternatives are:
|
// snapshot about any storage values. The only possible alternatives are:
|
||||||
@ -226,20 +211,20 @@ func (s *stateObject) GetCommittedState(db Database, key common.Hash) common.Has
|
|||||||
if _, destructed := s.db.snapDestructs[s.addrHash]; destructed {
|
if _, destructed := s.db.snapDestructs[s.addrHash]; destructed {
|
||||||
return common.Hash{}
|
return common.Hash{}
|
||||||
}
|
}
|
||||||
|
start := time.Now()
|
||||||
enc, err = s.db.snap.Storage(s.addrHash, crypto.Keccak256Hash(key.Bytes()))
|
enc, err = s.db.snap.Storage(s.addrHash, crypto.Keccak256Hash(key.Bytes()))
|
||||||
|
if metrics.EnabledExpensive {
|
||||||
|
s.db.SnapshotStorageReads += time.Since(start)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// If the snapshot is unavailable or reading from it fails, load from the database.
|
// If the snapshot is unavailable or reading from it fails, load from the database.
|
||||||
if s.db.snap == nil || err != nil {
|
if s.db.snap == nil || err != nil {
|
||||||
if meter != nil {
|
start := time.Now()
|
||||||
// If we already spent time checking the snapshot, account for it
|
enc, err = s.getTrie(db).TryGet(key.Bytes())
|
||||||
// and reset the readStart
|
|
||||||
*meter += time.Since(readStart)
|
|
||||||
readStart = time.Now()
|
|
||||||
}
|
|
||||||
if metrics.EnabledExpensive {
|
if metrics.EnabledExpensive {
|
||||||
meter = &s.db.StorageReads
|
s.db.StorageReads += time.Since(start)
|
||||||
}
|
}
|
||||||
if enc, err = s.getTrie(db).TryGet(key.Bytes()); err != nil {
|
if err != nil {
|
||||||
s.setError(err)
|
s.setError(err)
|
||||||
return common.Hash{}
|
return common.Hash{}
|
||||||
}
|
}
|
||||||
|
@ -506,16 +506,14 @@ func (s *StateDB) getDeletedStateObject(addr common.Address) *stateObject {
|
|||||||
return obj
|
return obj
|
||||||
}
|
}
|
||||||
// If no live objects are available, attempt to use snapshots
|
// If no live objects are available, attempt to use snapshots
|
||||||
var (
|
var data *types.StateAccount
|
||||||
data *types.StateAccount
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
if s.snap != nil {
|
if s.snap != nil {
|
||||||
|
start := time.Now()
|
||||||
|
acc, err := s.snap.Account(crypto.HashData(s.hasher, addr.Bytes()))
|
||||||
if metrics.EnabledExpensive {
|
if metrics.EnabledExpensive {
|
||||||
defer func(start time.Time) { s.SnapshotAccountReads += time.Since(start) }(time.Now())
|
s.SnapshotAccountReads += time.Since(start)
|
||||||
}
|
}
|
||||||
var acc *snapshot.Account
|
if err == nil {
|
||||||
if acc, err = s.snap.Account(crypto.HashData(s.hasher, addr.Bytes())); err == nil {
|
|
||||||
if acc == nil {
|
if acc == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -534,11 +532,12 @@ func (s *StateDB) getDeletedStateObject(addr common.Address) *stateObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If snapshot unavailable or reading from it failed, load from the database
|
// If snapshot unavailable or reading from it failed, load from the database
|
||||||
if s.snap == nil || err != nil {
|
if data == nil {
|
||||||
if metrics.EnabledExpensive {
|
start := time.Now()
|
||||||
defer func(start time.Time) { s.AccountReads += time.Since(start) }(time.Now())
|
|
||||||
}
|
|
||||||
enc, err := s.trie.TryGet(addr.Bytes())
|
enc, err := s.trie.TryGet(addr.Bytes())
|
||||||
|
if metrics.EnabledExpensive {
|
||||||
|
s.AccountReads += time.Since(start)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.setError(fmt.Errorf("getDeleteStateObject (%x) error: %v", addr.Bytes(), err))
|
s.setError(fmt.Errorf("getDeleteStateObject (%x) error: %v", addr.Bytes(), err))
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user