Skip to content

Commit 80f536a

Browse files
committed
better manager API
1 parent c6321f6 commit 80f536a

File tree

4 files changed

+36
-16
lines changed

4 files changed

+36
-16
lines changed

internal/informer/manager.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ import (
1717
"github.com/castai/cluster-controller/internal/metrics"
1818
)
1919

20+
const (
21+
defaultCacheSyncTimeout = 30 * time.Second
22+
)
23+
2024
// Manager manages the global SharedInformerFactory and provides
2125
// access to specific informers and listers.
2226
type Manager struct {
@@ -32,12 +36,22 @@ type Manager struct {
3236
mu sync.RWMutex
3337
}
3438

35-
// NewManager creates a new Manager with the given clientset, resync period, and cache sync timeout.
39+
// Option is a functional option for configuring the Manager.
40+
type Option func(*Manager)
41+
42+
// WithCacheSyncTimeout sets the timeout for waiting for informer caches to sync.
43+
func WithCacheSyncTimeout(timeout time.Duration) Option {
44+
return func(m *Manager) {
45+
m.cacheSyncTimeout = timeout
46+
}
47+
}
48+
49+
// NewManager creates a new Manager with the given clientset and resync period.
3650
func NewManager(
3751
log logrus.FieldLogger,
3852
clientset kubernetes.Interface,
3953
resyncPeriod time.Duration,
40-
cacheSyncTimeout time.Duration,
54+
opts ...Option,
4155
) *Manager {
4256
factory := informers.NewSharedInformerFactory(clientset, resyncPeriod)
4357

@@ -51,13 +65,19 @@ func NewManager(
5165
lister: factory.Core().V1().Pods().Lister(),
5266
}
5367

54-
return &Manager{
68+
m := &Manager{
5569
log: log,
5670
factory: factory,
57-
cacheSyncTimeout: cacheSyncTimeout,
71+
cacheSyncTimeout: defaultCacheSyncTimeout,
5872
nodes: nodes,
5973
pods: pods,
6074
}
75+
76+
for _, opt := range opts {
77+
opt(m)
78+
}
79+
80+
return m
6181
}
6282

6383
// Start starts the informer factory and waits for all caches to sync.

internal/informer/manager_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func TestNewManager(t *testing.T) {
1919
log := logrus.New()
2020
clientset := fake.NewClientset()
2121

22-
manager := NewManager(log, clientset, time.Hour, 5*time.Second)
22+
manager := NewManager(log, clientset, time.Hour)
2323

2424
require.NotNil(t, manager)
2525
require.NotNil(t, manager.GetFactory())
@@ -44,7 +44,7 @@ func TestManager_Start_Success(t *testing.T) {
4444
}
4545

4646
clientset := fake.NewClientset(node, pod)
47-
manager := NewManager(log, clientset, 0, 5*time.Second)
47+
manager := NewManager(log, clientset, 0)
4848

4949
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
5050
defer cancel()
@@ -70,7 +70,7 @@ func TestManager_Start_AlreadyStarted(t *testing.T) {
7070
log.SetLevel(logrus.ErrorLevel)
7171

7272
clientset := fake.NewClientset()
73-
manager := NewManager(log, clientset, 0, 5*time.Second)
73+
manager := NewManager(log, clientset, 0)
7474

7575
ctx := context.Background()
7676

@@ -90,7 +90,7 @@ func TestManager_Start_ContextCanceled(t *testing.T) {
9090
log.SetLevel(logrus.ErrorLevel)
9191

9292
clientset := fake.NewClientset()
93-
manager := NewManager(log, clientset, 0, 5*time.Second)
93+
manager := NewManager(log, clientset, 0)
9494

9595
ctx, cancel := context.WithCancel(context.Background())
9696
cancel()
@@ -108,7 +108,7 @@ func TestManager_Stop(t *testing.T) {
108108
log.SetLevel(logrus.ErrorLevel)
109109

110110
clientset := fake.NewClientset()
111-
manager := NewManager(log, clientset, 0, 5*time.Second)
111+
manager := NewManager(log, clientset, 0)
112112

113113
manager.Stop()
114114
require.False(t, manager.IsStarted())
@@ -138,7 +138,7 @@ func TestManager_CacheUpdates(t *testing.T) {
138138
}
139139

140140
clientset := fake.NewClientset(node)
141-
manager := NewManager(log, clientset, 0, 5*time.Second)
141+
manager := NewManager(log, clientset, 0)
142142

143143
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
144144
defer cancel()

internal/informer/node_informer_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ func TestNodeInformer_Informer(t *testing.T) {
1414

1515
log := logrus.New()
1616
clientset := fake.NewClientset()
17-
manager := NewManager(log, clientset, time.Hour, 5*time.Second)
17+
manager := NewManager(log, clientset, time.Hour)
1818

1919
informer := manager.nodes.Informer()
2020
require.NotNil(t, informer)
@@ -25,7 +25,7 @@ func TestNodeInformer_Lister(t *testing.T) {
2525

2626
log := logrus.New()
2727
clientset := fake.NewClientset()
28-
manager := NewManager(log, clientset, time.Hour, 5*time.Second)
28+
manager := NewManager(log, clientset, time.Hour)
2929

3030
lister := manager.nodes.Lister()
3131
require.NotNil(t, lister)
@@ -36,7 +36,7 @@ func TestNodeInformer_HasSynced(t *testing.T) {
3636

3737
log := logrus.New()
3838
clientset := fake.NewClientset()
39-
manager := NewManager(log, clientset, time.Hour, 5*time.Second)
39+
manager := NewManager(log, clientset, time.Hour)
4040

4141
require.False(t, manager.nodes.HasSynced())
4242
}

internal/informer/pod_informer_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ func TestPodInformer_Informer(t *testing.T) {
1414

1515
log := logrus.New()
1616
clientset := fake.NewClientset()
17-
manager := NewManager(log, clientset, time.Hour, 5*time.Second)
17+
manager := NewManager(log, clientset, time.Hour)
1818

1919
informer := manager.pods.Informer()
2020
require.NotNil(t, informer)
@@ -25,7 +25,7 @@ func TestPodInformer_Lister(t *testing.T) {
2525

2626
log := logrus.New()
2727
clientset := fake.NewClientset()
28-
manager := NewManager(log, clientset, time.Hour, 5*time.Second)
28+
manager := NewManager(log, clientset, time.Hour)
2929

3030
lister := manager.pods.Lister()
3131
require.NotNil(t, lister)
@@ -36,7 +36,7 @@ func TestPodInformer_HasSynced(t *testing.T) {
3636

3737
log := logrus.New()
3838
clientset := fake.NewClientset()
39-
manager := NewManager(log, clientset, time.Hour, 5*time.Second)
39+
manager := NewManager(log, clientset, time.Hour)
4040

4141
require.False(t, manager.pods.HasSynced())
4242
}

0 commit comments

Comments
 (0)