forked from cerc-io/plugeth
core/rawdb: add logging and fix comments around AncientRange function. (#28379)
This adds warning logs when the read does not match the expected count. We can also remove the size limit since the function documentation explicitly states that callers should limit the count.
This commit is contained in:
parent
ea2e66a58e
commit
447945e438
@ -334,13 +334,18 @@ func ReadHeaderRange(db ethdb.Reader, number uint64, count uint64) []rlp.RawValu
|
|||||||
return rlpHeaders
|
return rlpHeaders
|
||||||
}
|
}
|
||||||
// read remaining from ancients
|
// read remaining from ancients
|
||||||
max := count * 700
|
data, err := db.AncientRange(ChainFreezerHeaderTable, i+1-count, count, 0)
|
||||||
data, err := db.AncientRange(ChainFreezerHeaderTable, i+1-count, count, max)
|
if err != nil {
|
||||||
if err == nil && uint64(len(data)) == count {
|
log.Error("Failed to read headers from freezer", "err", err)
|
||||||
// the data is on the order [h, h+1, .., n] -- reordering needed
|
return rlpHeaders
|
||||||
for i := range data {
|
}
|
||||||
rlpHeaders = append(rlpHeaders, data[len(data)-1-i])
|
if uint64(len(data)) != count {
|
||||||
}
|
log.Warn("Incomplete read of headers from freezer", "wanted", count, "read", len(data))
|
||||||
|
return rlpHeaders
|
||||||
|
}
|
||||||
|
// The data is on the order [h, h+1, .., n] -- reordering needed
|
||||||
|
for i := range data {
|
||||||
|
rlpHeaders = append(rlpHeaders, data[len(data)-1-i])
|
||||||
}
|
}
|
||||||
return rlpHeaders
|
return rlpHeaders
|
||||||
}
|
}
|
||||||
|
@ -119,9 +119,10 @@ func (f *ResettableFreezer) Ancient(kind string, number uint64) ([]byte, error)
|
|||||||
|
|
||||||
// AncientRange retrieves multiple items in sequence, starting from the index 'start'.
|
// AncientRange retrieves multiple items in sequence, starting from the index 'start'.
|
||||||
// It will return
|
// It will return
|
||||||
// - at most 'max' items,
|
// - at most 'count' items,
|
||||||
// - at least 1 item (even if exceeding the maxByteSize), but will otherwise
|
// - if maxBytes is specified: at least 1 item (even if exceeding the maxByteSize),
|
||||||
// return as many items as fit into maxByteSize
|
// but will otherwise return as many items as fit into maxByteSize.
|
||||||
|
// - if maxBytes is not specified, 'count' items will be returned if they are present.
|
||||||
func (f *ResettableFreezer) AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error) {
|
func (f *ResettableFreezer) AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error) {
|
||||||
f.lock.RLock()
|
f.lock.RLock()
|
||||||
defer f.lock.RUnlock()
|
defer f.lock.RUnlock()
|
||||||
|
Loading…
Reference in New Issue
Block a user