From 50213726e34e74fba087c7e22d22021ad84b0d10 Mon Sep 17 00:00:00 2001 From: VM Date: Wed, 6 Mar 2024 14:50:36 +0800 Subject: [PATCH] fix: add detailed logs in rawdb WriteStateHistory --- core/rawdb/accessors_state.go | 25 ++++++++++--------------- trie/triedb/pathdb/database.go | 12 ++++++++++++ trie/triedb/pathdb/database_test.go | 6 ++++++ trie/triedb/pathdb/history.go | 2 +- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/core/rawdb/accessors_state.go b/core/rawdb/accessors_state.go index 5b6bb7f68d..d57a2c474e 100644 --- a/core/rawdb/accessors_state.go +++ b/core/rawdb/accessors_state.go @@ -256,29 +256,24 @@ func ReadStateHistory(db ethdb.AncientReaderOp, id uint64) ([]byte, []byte, []by // history starts from one(zero for initial state). func WriteStateHistory(db ethdb.AncientWriter, id uint64, meta []byte, accountIndex []byte, storageIndex []byte, accounts []byte, storages []byte) { db.ModifyAncients(func(op ethdb.AncientWriteOp) error { - err := op.AppendRaw(stateHistoryMeta, id-1, meta) - if err != nil { - log.Error("1 WriteStateHistory failed", "err", err) + if err := op.AppendRaw(stateHistoryMeta, id-1, meta); err != nil { + log.Error("Failed to write meta state history", "err", err) return err } - err = op.AppendRaw(stateHistoryAccountIndex, id-1, accountIndex) - if err != nil { - log.Error("2 WriteStateHistory failed", "err", err) + if err := op.AppendRaw(stateHistoryAccountIndex, id-1, accountIndex); err != nil { + log.Error("Failed to write account index state history", "err", err) return err } - err = op.AppendRaw(stateHistoryStorageIndex, id-1, storageIndex) - if err != nil { - log.Error("3 WriteStateHistory failed", "err", err) + if err := op.AppendRaw(stateHistoryStorageIndex, id-1, storageIndex); err != nil { + log.Error("Failed to write storage index state history", "err", err) return err } - err = op.AppendRaw(stateHistoryAccountData, id-1, accounts) - if err != nil { - log.Error("4 WriteStateHistory failed", "err", err) + if err := op.AppendRaw(stateHistoryAccountData, id-1, accounts); err != nil { + log.Error("Failed to write account data state history", "err", err) return err } - err = op.AppendRaw(stateHistoryStorageData, id-1, storages) - if err != nil { - log.Error("5 WriteStateHistory failed", "err", err) + if err := op.AppendRaw(stateHistoryStorageData, id-1, storages); err != nil { + log.Error("Failed to write storage data state history", "err", err) return err } return nil diff --git a/trie/triedb/pathdb/database.go b/trie/triedb/pathdb/database.go index e724946ad6..e741fc67d2 100644 --- a/trie/triedb/pathdb/database.go +++ b/trie/triedb/pathdb/database.go @@ -177,35 +177,47 @@ func New(diskdb ethdb.Database, config *Config) *Database { if ancient, err := diskdb.AncientDatadir(); err == nil && ancient != "" && !db.readOnly { offset := uint64(0) // differ from in block data, only metadata is used in state data freezer, err := rawdb.NewStateFreezer(ancient, false, offset) + fmt.Println("100") if err != nil { + fmt.Println(err, "101") log.Crit("Failed to open state history freezer", "err", err) } db.freezer = freezer + fmt.Println("102") diskLayerID := db.tree.bottom().stateID() if diskLayerID == 0 { // Reset the entire state histories in case the trie database is // not initialized yet, as these state histories are not expected. frozen, err := db.freezer.Ancients() + fmt.Println("103") if err != nil { + fmt.Println(err, "104") log.Crit("Failed to retrieve head of state history", "err", err) } + fmt.Println("105") if frozen != 0 { + fmt.Println("106") err := db.freezer.Reset() if err != nil { + fmt.Println(err, "107") log.Crit("Failed to reset state histories", "err", err) } + fmt.Println("108") log.Info("Truncated extraneous state history") } } else { // Truncate the extra state histories above in freezer in case // it's not aligned with the disk layer. + fmt.Println("109") log.Info("ddd", "diskLayerID", diskLayerID) pruned, err := truncateFromHead(db.diskdb, freezer, diskLayerID) if err != nil { + fmt.Println(err, "110") log.Crit("Failed to truncate extra state histories", "err", err) } if pruned != 0 { + fmt.Println("111") log.Warn("Truncated extra state histories", "number", pruned) } } diff --git a/trie/triedb/pathdb/database_test.go b/trie/triedb/pathdb/database_test.go index 6fcb160bdd..87238aa44d 100644 --- a/trie/triedb/pathdb/database_test.go +++ b/trie/triedb/pathdb/database_test.go @@ -574,14 +574,20 @@ func TestTailTruncateHistory(t *testing.T) { defer tester.release() tester.db.Close() + fmt.Println("000") tester.db = New(tester.db.diskdb, &Config{StateHistory: 10}) + fmt.Println("111") head, err := tester.db.freezer.Ancients() + fmt.Printf("head: %d\n", head) if err != nil { + fmt.Println("222") t.Fatalf("Failed to obtain freezer head") } stored := rawdb.ReadPersistentStateID(tester.db.diskdb) + fmt.Printf("head: %d, stored: %d\n", head, stored) if head != stored { + fmt.Println("333") t.Fatalf("Failed to truncate excess history object above, stored: %d, head: %d", stored, head) } } diff --git a/trie/triedb/pathdb/history.go b/trie/triedb/pathdb/history.go index ecb6cffb33..b938e62446 100644 --- a/trie/triedb/pathdb/history.go +++ b/trie/triedb/pathdb/history.go @@ -529,7 +529,7 @@ func writeHistory(db ethdb.KeyValueStore, freezer *rawdb.ResettableFreezer, dl * indexSize := common.StorageSize(len(accountIndex) + len(storageIndex)) // Write history data into five freezer table respectively. - rawdb.WriteStateHistory(freezer, dl.stateID(), h.meta.encode(), accountIndex, storageIndex, accountData, storageData) + rawdb.WriteStateHistory(freezer, dl.stateID()-1, h.meta.encode(), accountIndex, storageIndex, accountData, storageData) // Prune stale state histories based on the config. if limit != 0 && dl.stateID() > limit {