core: define and test chain rewind corner cases (#21409)
* core: define and test chain reparation cornercases * core: write up a variety of set-head tests * core, eth: unify chain rollbacks, handle all the cases * core: make linter smile * core: remove commented out legacy code * core, eth/downloader: fix review comments * core: revert a removed recovery mechanism
This commit is contained in:
@ -187,6 +187,32 @@ func WriteHeadFastBlockHash(db ethdb.KeyValueWriter, hash common.Hash) {
|
||||
}
|
||||
}
|
||||
|
||||
// ReadLastPivotNumber retrieves the number of the last pivot block. If the node
|
||||
// full synced, the last pivot will always be nil.
|
||||
func ReadLastPivotNumber(db ethdb.KeyValueReader) *uint64 {
|
||||
data, _ := db.Get(lastPivotKey)
|
||||
if len(data) == 0 {
|
||||
return nil
|
||||
}
|
||||
var pivot uint64
|
||||
if err := rlp.DecodeBytes(data, &pivot); err != nil {
|
||||
log.Error("Invalid pivot block number in database", "err", err)
|
||||
return nil
|
||||
}
|
||||
return &pivot
|
||||
}
|
||||
|
||||
// WriteLastPivotNumber stores the number of the last pivot block.
|
||||
func WriteLastPivotNumber(db ethdb.KeyValueWriter, pivot uint64) {
|
||||
enc, err := rlp.EncodeToBytes(pivot)
|
||||
if err != nil {
|
||||
log.Crit("Failed to encode pivot block number", "err", err)
|
||||
}
|
||||
if err := db.Put(lastPivotKey, enc); err != nil {
|
||||
log.Crit("Failed to store pivot block number", "err", err)
|
||||
}
|
||||
}
|
||||
|
||||
// ReadFastTrieProgress retrieves the number of tries nodes fast synced to allow
|
||||
// reporting correct numbers across restarts.
|
||||
func ReadFastTrieProgress(db ethdb.KeyValueReader) uint64 {
|
||||
|
Reference in New Issue
Block a user