From 00c76bbe2b97d65b87203ada05e3138cd932c25f Mon Sep 17 00:00:00 2001 From: devopsbo3 <69951731+devopsbo3@users.noreply.github.com> Date: Fri, 10 Nov 2023 12:27:53 -0600 Subject: [PATCH] Revert "core, trie: cleanup trie database (#28062)" This reverts commit ef485b725491fe7254709b610d2d616846b7a3ed. --- core/state/statedb.go | 9 +-------- core/state/statedb_fuzz_test.go | 4 +--- trie/database.go | 20 ++++++++++++++++++++ trie/database_test.go | 13 ++++--------- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/core/state/statedb.go b/core/state/statedb.go index bd578ba23d..48680a562b 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -135,9 +135,6 @@ type StateDB struct { StorageUpdated int AccountDeleted int StorageDeleted int - - // Testing hooks - onCommit func(states *triestate.Set) // Hook invoked when commit is performed } // New creates a new state from a given trie. @@ -1279,17 +1276,13 @@ func (s *StateDB) Commit(block uint64, deleteEmptyObjects bool) (common.Hash, er } if root != origin { start := time.Now() - set := triestate.New(s.accountsOrigin, s.storagesOrigin, incomplete) - if err := s.db.TrieDB().Update(root, origin, block, nodes, set); err != nil { + if err := s.db.TrieDB().Update(root, origin, block, nodes, triestate.New(s.accountsOrigin, s.storagesOrigin, incomplete)); err != nil { return common.Hash{}, err } s.originalRoot = root if metrics.EnabledExpensive { s.TrieDBCommits += time.Since(start) } - if s.onCommit != nil { - s.onCommit(set) - } } // Clear all internal flags at the end of commit operation. s.accounts = make(map[common.Hash][]byte) diff --git a/core/state/statedb_fuzz_test.go b/core/state/statedb_fuzz_test.go index c4704257c7..42381c34ab 100644 --- a/core/state/statedb_fuzz_test.go +++ b/core/state/statedb_fuzz_test.go @@ -181,7 +181,7 @@ func (test *stateTest) run() bool { storageList = append(storageList, copy2DSet(states.Storages)) } disk = rawdb.NewMemoryDatabase() - tdb = trie.NewDatabase(disk, &trie.Config{PathDB: pathdb.Defaults}) + tdb = trie.NewDatabase(disk, &trie.Config{OnCommit: onCommit, PathDB: pathdb.Defaults}) sdb = NewDatabaseWithNodeDB(disk, tdb) byzantium = rand.Intn(2) == 0 ) @@ -206,8 +206,6 @@ func (test *stateTest) run() bool { if err != nil { panic(err) } - state.onCommit = onCommit - for i, action := range actions { if i%test.chunk == 0 && i != 0 { if byzantium { diff --git a/trie/database.go b/trie/database.go index 2915ff9484..42115f4886 100644 --- a/trie/database.go +++ b/trie/database.go @@ -33,6 +33,9 @@ type Config struct { Preimages bool // Flag whether the preimage of node key is recorded HashDB *hashdb.Config // Configs for hash-based scheme PathDB *pathdb.Config // Configs for experimental path-based scheme + + // Testing hooks + OnCommit func(states *triestate.Set) // Hook invoked when commit is performed } // HashDefaults represents a config for using hash-based scheme with @@ -85,6 +88,20 @@ type Database struct { backend backend // The backend for managing trie nodes } +// prepare initializes the database with provided configs, but the +// database backend is still left as nil. +func prepare(diskdb ethdb.Database, config *Config) *Database { + var preimages *preimageStore + if config != nil && config.Preimages { + preimages = newPreimageStore(diskdb) + } + return &Database{ + config: config, + diskdb: diskdb, + preimages: preimages, + } +} + // NewDatabase initializes the trie database with default settings, note // the legacy hash-based scheme is used by default. func NewDatabase(diskdb ethdb.Database, config *Config) *Database { @@ -132,6 +149,9 @@ func (db *Database) Reader(blockRoot common.Hash) (Reader, error) { // The passed in maps(nodes, states) will be retained to avoid copying everything. // Therefore, these maps must not be changed afterwards. func (db *Database) Update(root common.Hash, parent common.Hash, block uint64, nodes *trienode.MergedNodeSet, states *triestate.Set) error { + if db.config != nil && db.config.OnCommit != nil { + db.config.OnCommit(states) + } if db.preimages != nil { db.preimages.commit(false) } diff --git a/trie/database_test.go b/trie/database_test.go index d508c65533..d675a2191b 100644 --- a/trie/database_test.go +++ b/trie/database_test.go @@ -25,16 +25,11 @@ import ( // newTestDatabase initializes the trie database with specified scheme. func newTestDatabase(diskdb ethdb.Database, scheme string) *Database { - config := &Config{Preimages: false} + db := prepare(diskdb, nil) if scheme == rawdb.HashScheme { - config.HashDB = &hashdb.Config{ - CleanCacheSize: 0, - } // disable clean cache + db.backend = hashdb.New(diskdb, &hashdb.Config{}, mptResolver{}) } else { - config.PathDB = &pathdb.Config{ - CleanCacheSize: 0, - DirtyCacheSize: 0, - } // disable clean/dirty cache + db.backend = pathdb.New(diskdb, &pathdb.Config{}) // disable clean/dirty cache } - return NewDatabase(diskdb, config) + return db }