Skip to content

Commit d89fed8

Browse files
committed
split manager in two
1 parent 6ba4059 commit d89fed8

14 files changed

+131
-117
lines changed

block/internal/cache/manager.go

Lines changed: 71 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
8593
var _ 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
101162
func NewManager(cfg config.Config, store store.Store, logger zerolog.Logger) (Manager, error) {
102163
// Initialize caches

block/internal/reaping/reaper.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type Reaper struct {
3434
sequencer coresequencer.Sequencer
3535
chainID string
3636
interval time.Duration
37-
cache cache.Manager
37+
cache cache.CacheManager
3838
executor *executing.Executor
3939

4040
// shared components
@@ -53,7 +53,7 @@ func NewReaper(
5353
genesis genesis.Genesis,
5454
logger zerolog.Logger,
5555
executor *executing.Executor,
56-
cache cache.Manager,
56+
cache cache.CacheManager,
5757
scrapeInterval time.Duration,
5858
) (*Reaper, error) {
5959
if executor == nil {

block/internal/reaping/reaper_test.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,28 +65,21 @@ func newTestExecutor(t *testing.T) *executing.Executor {
6565
}
6666

6767
// helper to create a cache manager for tests
68-
func newTestCache(t *testing.T) cache.Manager {
68+
func newTestCache(t *testing.T) cache.CacheManager {
6969
t.Helper()
7070

71-
// Create a mock store for the cache manager
72-
storeMock := testmocks.NewMockStore(t)
73-
storeMock.EXPECT().GetMetadata(mock.Anything, "last-submitted-header-height").Return(nil, ds.ErrNotFound).Maybe()
74-
storeMock.EXPECT().GetMetadata(mock.Anything, "last-submitted-data-height").Return(nil, ds.ErrNotFound).Maybe()
75-
storeMock.EXPECT().Height(mock.Anything).Return(uint64(0), nil).Maybe()
76-
storeMock.EXPECT().SetMetadata(mock.Anything, mock.Anything, mock.Anything).Return(nil).Maybe()
77-
7871
cfg := config.Config{
7972
RootDir: t.TempDir(),
8073
ClearCache: true,
8174
}
82-
cacheManager, err := cache.NewManager(cfg, storeMock, zerolog.Nop())
75+
cacheManager, err := cache.NewCacheManager(cfg, zerolog.Nop())
8376
require.NoError(t, err)
8477

8578
return cacheManager
8679
}
8780

8881
// reaper with mocks and cache manager
89-
func newTestReaper(t *testing.T, chainID string, execMock *testmocks.MockExecutor, seqMock *testmocks.MockSequencer, e *executing.Executor, cm cache.Manager) *Reaper {
82+
func newTestReaper(t *testing.T, chainID string, execMock *testmocks.MockExecutor, seqMock *testmocks.MockSequencer, e *executing.Executor, cm cache.CacheManager) *Reaper {
9083
t.Helper()
9184

9285
r, err := NewReaper(execMock, seqMock, genesis.Genesis{ChainID: chainID}, zerolog.Nop(), e, cm, 100*time.Millisecond)

block/internal/syncing/da_retriever.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ type DARetriever interface {
3838
// daRetriever handles DA retrieval operations for syncing
3939
type daRetriever struct {
4040
da coreda.DA
41-
cache cache.Manager
41+
cache cache.CacheManager
4242
genesis genesis.Genesis
4343
logger zerolog.Logger
4444

@@ -63,7 +63,7 @@ type daRetriever struct {
6363
// NewDARetriever creates a new DA retriever
6464
func NewDARetriever(
6565
da coreda.DA,
66-
cache cache.Manager,
66+
cache cache.CacheManager,
6767
config config.Config,
6868
genesis genesis.Genesis,
6969
logger zerolog.Logger,

0 commit comments

Comments
 (0)