@@ -151,9 +151,9 @@ type StoreAdapter[H EntityWithDAHint[H]] struct {
151151 onDeleteFn func (context.Context , uint64 ) error
152152}
153153
154- // NewStoreAdapter creates a new StoreAdapter wrapping the given store getter.
154+ // NewStoreAdapter creates a new StoreAdapter wrapping the given store getter and backing Store .
155155// The genesis is used to determine the initial height for efficient Tail lookups.
156- func NewStoreAdapter [H EntityWithDAHint [H ]](getter StoreGetter [H ], gen genesis.Genesis ) * StoreAdapter [H ] {
156+ func NewStoreAdapter [H EntityWithDAHint [H ]](getter StoreGetter [H ], store Store , gen genesis.Genesis ) * StoreAdapter [H ] {
157157 // Create LRU cache for pending items - ignore error as size is constant and valid
158158 pendingCache , _ := lru.New [uint64 , H ](defaultPendingCacheSize )
159159 daHintsCache , _ := lru.New [uint64 , uint64 ](defaultPendingCacheSize )
@@ -166,6 +166,7 @@ func NewStoreAdapter[H EntityWithDAHint[H]](getter StoreGetter[H], gen genesis.G
166166
167167 adapter := & StoreAdapter [H ]{
168168 getter : getter ,
169+ store : store ,
169170 genesisInitialHeight : max (gen .InitialHeight , 1 ),
170171 pending : pendingCache ,
171172 daHints : daHintsCache ,
@@ -252,7 +253,6 @@ func (a *StoreAdapter[H]) Head(ctx context.Context, _ ...header.HeadOption[H]) (
252253// Tail returns the lowest item in the store.
253254// For ev-node, this is typically the genesis/initial height.
254255// If pruning has occurred, it walks up from initialHeight to find the first available item.
255- // TODO(@julienrbrt): Optimize this when pruning is enabled.
256256func (a * StoreAdapter [H ]) Tail (ctx context.Context ) (H , error ) {
257257 var zero H
258258
@@ -270,12 +270,10 @@ func (a *StoreAdapter[H]) Tail(ctx context.Context) (H, error) {
270270 // genesis initial height, but if pruning metadata is available we can
271271 // skip directly past fully-pruned ranges.
272272 startHeight := a .genesisInitialHeight
273- if a .store != nil {
274- if meta , err := a .store .GetMetadata (ctx , LastPrunedBlockHeightKey ); err == nil && len (meta ) == heightLength {
275- if lastPruned , err := decodeHeight (meta ); err == nil {
276- if candidate := lastPruned + 1 ; candidate > startHeight {
277- startHeight = candidate
278- }
273+ if meta , err := a .store .GetMetadata (ctx , LastPrunedBlockHeightKey ); err == nil && len (meta ) == heightLength {
274+ if lastPruned , err := decodeHeight (meta ); err == nil {
275+ if candidate := lastPruned + 1 ; candidate > startHeight {
276+ startHeight = candidate
279277 }
280278 }
281279 }
@@ -732,15 +730,11 @@ type DataStoreAdapter = StoreAdapter[*types.P2PData]
732730// NewHeaderStoreAdapter creates a new StoreAdapter for headers.
733731// The genesis is used to determine the initial height for efficient Tail lookups.
734732func NewHeaderStoreAdapter (store Store , gen genesis.Genesis ) * HeaderStoreAdapter {
735- adapter := NewStoreAdapter (NewHeaderStoreGetter (store ), gen )
736- adapter .store = store
737- return adapter
733+ return NewStoreAdapter (NewHeaderStoreGetter (store ), store , gen )
738734}
739735
740736// NewDataStoreAdapter creates a new StoreAdapter for data.
741737// The genesis is used to determine the initial height for efficient Tail lookups.
742738func NewDataStoreAdapter (store Store , gen genesis.Genesis ) * DataStoreAdapter {
743- adapter := NewStoreAdapter (NewDataStoreGetter (store ), gen )
744- adapter .store = store
745- return adapter
739+ return NewStoreAdapter (NewDataStoreGetter (store ), store , gen )
746740}
0 commit comments