From 04587225d972f2fb22e3f4b27228893434837401 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Thu, 24 Jun 2021 14:49:39 +0200 Subject: [PATCH] core: make better use of the headerchain cache --- core/headerchain.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/core/headerchain.go b/core/headerchain.go index 4d7da00b0f128..c90503f6a6a7c 100644 --- a/core/headerchain.go +++ b/core/headerchain.go @@ -538,7 +538,27 @@ func (hc *HeaderChain) GetHeadersFrom(number, count uint64) []rlp.RawValue { return nil } } - return rawdb.ReadHeadersRLP(hc.chainDb, number, count) + //If we have some of the headers in cache already, use that before going to db. + hash := rawdb.ReadCanonicalHash(hc.chainDb, number) + if hash == (common.Hash{}) { + return nil + } + var headers []rlp.RawValue + for ; count > 0; count-- { + if header, ok := hc.headerCache.Get(hash); ok { + h := header.(*types.Header) + rlpData, _ := rlp.EncodeToBytes(h) + headers = append(headers, rlpData) + hash = h.ParentHash + continue + } + break + } + // Read remaining from db + if count > 0 { + headers = append(headers, rawdb.ReadHeadersRLP(hc.chainDb, number, count)...) + } + return headers } func (hc *HeaderChain) GetCanonicalHash(number uint64) common.Hash {