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