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:
Sina Mahmoodi 2026-06-09 20:48:06 +00:00
parent 1f87331fbc
commit edb398a102
2 changed files with 17 additions and 8 deletions

View file

@ -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) {

View file

@ -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
} }