triedb/pathdb: avoid duplicate metadata reads (#32226)

This commit is contained in:
Delweng 2025-07-17 10:44:35 +08:00 committed by GitHub
parent 30e3a49180
commit f36d349918
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -122,19 +122,14 @@ type indexReaderWithLimitTag struct {
} }
// newIndexReaderWithLimitTag constructs a index reader with indexing position. // newIndexReaderWithLimitTag constructs a index reader with indexing position.
func newIndexReaderWithLimitTag(db ethdb.KeyValueReader, state stateIdent) (*indexReaderWithLimitTag, error) { func newIndexReaderWithLimitTag(db ethdb.KeyValueReader, state stateIdent, limit uint64) (*indexReaderWithLimitTag, error) {
// Read the last indexed ID before the index reader construction
metadata := loadIndexMetadata(db)
if metadata == nil {
return nil, errors.New("state history hasn't been indexed yet")
}
r, err := newIndexReader(db, state) r, err := newIndexReader(db, state)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &indexReaderWithLimitTag{ return &indexReaderWithLimitTag{
reader: r, reader: r,
limit: metadata.Last, limit: limit,
db: db, db: db,
}, nil }, nil
} }
@ -348,7 +343,7 @@ func (r *historyReader) read(state stateIdentQuery, stateID uint64, lastID uint6
// state retrieval // state retrieval
ir, ok := r.readers[state.String()] ir, ok := r.readers[state.String()]
if !ok { if !ok {
ir, err = newIndexReaderWithLimitTag(r.disk, state.stateIdent) ir, err = newIndexReaderWithLimitTag(r.disk, state.stateIdent, metadata.Last)
if err != nil { if err != nil {
return nil, err return nil, err
} }