mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-19 03:10:48 +00:00
triedb/pathdb: extract cached block reader helper
Deduplicate the load-and-cache logic in newBlockIter into a blockReader method on indexReader, for reuse by upcoming ordinal accessors.
This commit is contained in:
parent
1f87331fbc
commit
edb398a102
2 changed files with 17 additions and 8 deletions
|
|
@ -124,6 +124,20 @@ func (r *indexReader) refresh() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// blockReader returns a cached block reader for the given block id, loading it
|
||||
// from disk on first access.
|
||||
func (r *indexReader) blockReader(id uint32) (*blockReader, error) {
|
||||
if br, ok := r.readers[id]; ok {
|
||||
return br, nil
|
||||
}
|
||||
br, err := newBlockReader(readStateIndexBlock(r.state, r.db, id), r.bitmapSize != 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
r.readers[id] = br
|
||||
return br, nil
|
||||
}
|
||||
|
||||
// readGreaterThan locates the first element that is greater than the specified
|
||||
// id. If no such element is found, MaxUint64 is returned.
|
||||
func (r *indexReader) readGreaterThan(id uint64) (uint64, error) {
|
||||
|
|
|
|||
|
|
@ -446,14 +446,9 @@ type indexIterator struct {
|
|||
|
||||
// newBlockIter initializes the block iterator with the specified block ID.
|
||||
func (r *indexReader) newBlockIter(id uint32, filter *extFilter) (*blockIterator, error) {
|
||||
br, ok := r.readers[id]
|
||||
if !ok {
|
||||
var err error
|
||||
br, err = newBlockReader(readStateIndexBlock(r.state, r.db, id), r.bitmapSize != 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
r.readers[id] = br
|
||||
br, err := r.blockReader(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return br.newIterator(filter), nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue