mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-19 19:30:44 +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
|
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
|
// readGreaterThan locates the first element that is greater than the specified
|
||||||
// id. If no such element is found, MaxUint64 is returned.
|
// id. If no such element is found, MaxUint64 is returned.
|
||||||
func (r *indexReader) readGreaterThan(id uint64) (uint64, error) {
|
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.
|
// newBlockIter initializes the block iterator with the specified block ID.
|
||||||
func (r *indexReader) newBlockIter(id uint32, filter *extFilter) (*blockIterator, error) {
|
func (r *indexReader) newBlockIter(id uint32, filter *extFilter) (*blockIterator, error) {
|
||||||
br, ok := r.readers[id]
|
br, err := r.blockReader(id)
|
||||||
if !ok {
|
if err != nil {
|
||||||
var err error
|
return nil, err
|
||||||
br, err = newBlockReader(readStateIndexBlock(r.state, r.db, id), r.bitmapSize != 0)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
r.readers[id] = br
|
|
||||||
}
|
}
|
||||||
return br.newIterator(filter), nil
|
return br.newIterator(filter), nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue