@@ -41,8 +41,8 @@ func registerGobTypes() {
4141 })
4242}
4343
44- // Manager provides centralized cache management for both executing and syncing components
45- type Manager interface {
44+ // CacheManager provides centralized cache management for both executing and syncing components
45+ type CacheManager interface {
4646 // Header operations
4747 IsHeaderSeen (hash string ) bool
4848 SetHeaderSeen (hash string , blockHeight uint64 )
@@ -61,14 +61,6 @@ type Manager interface {
6161 SetTxSeen (hash string )
6262 CleanupOldTxs (olderThan time.Duration ) int
6363
64- // Pending operations
65- GetPendingHeaders (ctx context.Context ) ([]* types.SignedHeader , error )
66- GetPendingData (ctx context.Context ) ([]* types.SignedData , error )
67- SetLastSubmittedHeaderHeight (ctx context.Context , height uint64 )
68- SetLastSubmittedDataHeight (ctx context.Context , height uint64 )
69- NumPendingHeaders () uint64
70- NumPendingData () uint64
71-
7264 // Pending events syncing coordination
7365 GetNextPendingEvent (blockHeight uint64 ) * common.DAHeightEvent
7466 SetPendingEvent (blockHeight uint64 , event * common.DAHeightEvent )
@@ -82,6 +74,22 @@ type Manager interface {
8274 DeleteHeight (blockHeight uint64 )
8375}
8476
77+ // PendingManager provides operations for managing pending headers and data
78+ type PendingManager interface {
79+ GetPendingHeaders (ctx context.Context ) ([]* types.SignedHeader , error )
80+ GetPendingData (ctx context.Context ) ([]* types.SignedData , error )
81+ SetLastSubmittedHeaderHeight (ctx context.Context , height uint64 )
82+ SetLastSubmittedDataHeight (ctx context.Context , height uint64 )
83+ NumPendingHeaders () uint64
84+ NumPendingData () uint64
85+ }
86+
87+ // Manager provides centralized cache management for both executing and syncing components
88+ type Manager interface {
89+ CacheManager
90+ PendingManager
91+ }
92+
8593var _ Manager = (* implementation )(nil )
8694
8795// implementation provides the concrete implementation of cache Manager
@@ -97,6 +105,59 @@ type implementation struct {
97105 logger zerolog.Logger
98106}
99107
108+ // NewPendingManager creates a new pending manager instance
109+ func NewPendingManager (store store.Store , logger zerolog.Logger ) (PendingManager , error ) {
110+ pendingHeaders , err := NewPendingHeaders (store , logger )
111+ if err != nil {
112+ return nil , fmt .Errorf ("failed to create pending headers: %w" , err )
113+ }
114+
115+ pendingData , err := NewPendingData (store , logger )
116+ if err != nil {
117+ return nil , fmt .Errorf ("failed to create pending data: %w" , err )
118+ }
119+
120+ return & implementation {
121+ pendingHeaders : pendingHeaders ,
122+ pendingData : pendingData ,
123+ logger : logger ,
124+ }, nil
125+ }
126+
127+ // NewCacheManager creates a new cache manager instance
128+ func NewCacheManager (cfg config.Config , logger zerolog.Logger ) (CacheManager , error ) {
129+ // Initialize caches
130+ headerCache := NewCache [types.SignedHeader ]()
131+ dataCache := NewCache [types.Data ]()
132+ txCache := NewCache [struct {}]()
133+ pendingEventsCache := NewCache [common.DAHeightEvent ]()
134+
135+ registerGobTypes ()
136+ impl := & implementation {
137+ headerCache : headerCache ,
138+ dataCache : dataCache ,
139+ txCache : txCache ,
140+ txTimestamps : new (sync.Map ),
141+ pendingEventsCache : pendingEventsCache ,
142+ config : cfg ,
143+ logger : logger ,
144+ }
145+
146+ if cfg .ClearCache {
147+ // Clear the cache from disk
148+ if err := impl .ClearFromDisk (); err != nil {
149+ logger .Warn ().Err (err ).Msg ("failed to clear cache from disk, starting with empty cache" )
150+ }
151+ } else {
152+ // Load existing cache from disk
153+ if err := impl .LoadFromDisk (); err != nil {
154+ logger .Warn ().Err (err ).Msg ("failed to load cache from disk, starting with empty cache" )
155+ }
156+ }
157+
158+ return impl , nil
159+ }
160+
100161// NewManager creates a new cache manager instance
101162func NewManager (cfg config.Config , store store.Store , logger zerolog.Logger ) (Manager , error ) {
102163 // Initialize caches
0 commit comments