core/rawdb: address comments from peter

This commit is contained in:
Gary Rong 2024-03-04 18:38:36 +08:00
parent b3c0fc9469
commit baf8ccf6f6

View file

@ -73,29 +73,32 @@ func (f *chainFreezer) Close() error {
return f.Freezer.Close() return f.Freezer.Close()
} }
// block tags // readHeadNumber returns the number of chain head block. 0 is returned if the
const ( // block is unknown or not available yet.
finalizedBlock = "finalized" func (f *chainFreezer) readHeadNumber(db ethdb.KeyValueReader) uint64 {
headBlock = "head" hash := ReadHeadBlockHash(db)
) if hash == (common.Hash{}) {
log.Error("Head block is not reachable")
// readBlock returns the number of specified block. 0 is returned if the block
// is unknown or not available yet.
func (f *chainFreezer) readBlock(db ethdb.KeyValueReader, tag string) uint64 {
var hash common.Hash
switch tag {
case finalizedBlock:
hash = ReadFinalizedBlockHash(db)
case headBlock:
hash = ReadHeadBlockHash(db)
default:
return 0 return 0
} }
number := ReadHeaderNumber(db, hash)
if number == nil {
log.Error("Number of head block is missing")
return 0
}
return *number
}
// readFinalizedNumber returns the number of finalized block. 0 is returned
// if the block is unknown or not available yet.
func (f *chainFreezer) readFinalizedNumber(db ethdb.KeyValueReader) uint64 {
hash := ReadFinalizedBlockHash(db)
if hash == (common.Hash{}) { if hash == (common.Hash{}) {
return 0 return 0
} }
number := ReadHeaderNumber(db, hash) number := ReadHeaderNumber(db, hash)
if number == nil { if number == nil {
log.Error("Number of finalized block is missing")
return 0 return 0
} }
return *number return *number
@ -105,8 +108,8 @@ func (f *chainFreezer) readBlock(db ethdb.KeyValueReader, tag string) uint64 {
// by formula: max(finality, HEAD-params.FullImmutabilityThreshold). // by formula: max(finality, HEAD-params.FullImmutabilityThreshold).
func (f *chainFreezer) freezeThreshold(db ethdb.KeyValueReader) (uint64, error) { func (f *chainFreezer) freezeThreshold(db ethdb.KeyValueReader) (uint64, error) {
var ( var (
head = f.readBlock(db, headBlock) head = f.readHeadNumber(db)
final = f.readBlock(db, finalizedBlock) final = f.readFinalizedNumber(db)
headLimit uint64 headLimit uint64
) )
if head > params.FullImmutabilityThreshold { if head > params.FullImmutabilityThreshold {
@ -158,25 +161,25 @@ func (f *chainFreezer) freeze(db ethdb.KeyValueStore) {
return return
} }
} }
number, err := f.freezeThreshold(nfdb) threshold, err := f.freezeThreshold(nfdb)
if err != nil { if err != nil {
backoff = true backoff = true
log.Debug("Current full block not old enough to freeze") log.Debug("Current full block not old enough to freeze", "err", err)
continue continue
} }
frozen := f.frozen.Load() frozen := f.frozen.Load()
// Short circuit if finalized blocks are already frozen. // Short circuit if the blocks below threshold are already frozen.
if frozen != 0 && frozen-1 >= number { if frozen != 0 && frozen-1 >= threshold {
backoff = true backoff = true
log.Debug("Ancient blocks frozen already", "number", number, "frozen", frozen) log.Debug("Ancient blocks frozen already", "threshold", threshold, "frozen", frozen)
continue continue
} }
// Seems we have data ready to be frozen, process in usable batches // Seems we have data ready to be frozen, process in usable batches
var ( var (
start = time.Now() start = time.Now()
first = frozen // the first block to freeze first = frozen // the first block to freeze
last = number // the last block to freezer last = threshold // the last block to freezer
) )
if last-first+1 > freezerBatchLimit { if last-first+1 > freezerBatchLimit {
last = freezerBatchLimit + first - 1 last = freezerBatchLimit + first - 1