Skip to content

Commit

Permalink
fix: add detailed logs in rawdb WriteStateHistory
Browse files Browse the repository at this point in the history
  • Loading branch information
VM committed Mar 6, 2024
1 parent 9ad7e5f commit 5021372
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 16 deletions.
25 changes: 10 additions & 15 deletions core/rawdb/accessors_state.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions trie/triedb/pathdb/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
Expand Down
6 changes: 6 additions & 0 deletions trie/triedb/pathdb/database_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
Expand Down
2 changes: 1 addition & 1 deletion trie/triedb/pathdb/history.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit 5021372

Please sign in to comment.