Skip to content

Commit 927f5d2

Browse files
fix: use uncached reader for Secret lookups in ClusterObjectSet
Avoid creating cluster-wide Secret informer by using APIReader instead of cached client when resolving object references in ClusterObjectSet.
1 parent 43351b2 commit 927f5d2

5 files changed

Lines changed: 17 additions & 1 deletion

File tree

cmd/operator-controller/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,7 @@ func (c *boxcutterReconcilerConfigurator) Configure(ceReconciler *controllers.Cl
699699

700700
if err = (&controllers.ClusterObjectSetReconciler{
701701
Client: c.mgr.GetClient(),
702+
APIReader: c.mgr.GetAPIReader(),
702703
RevisionEngineFactory: revisionEngineFactory,
703704
TrackingCache: trackingCache,
704705
}).SetupWithManager(c.mgr); err != nil {

internal/operator-controller/controllers/clusterobjectset_controller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ const (
5050
// as part of the boxcutter integration.
5151
type ClusterObjectSetReconciler struct {
5252
Client client.Client
53+
APIReader client.Reader
5354
RevisionEngineFactory RevisionEngineFactory
5455
TrackingCache trackingCache
5556
Clock clock.Clock
@@ -539,7 +540,7 @@ func (c *ClusterObjectSetReconciler) buildBoxcutterPhases(ctx context.Context, c
539540
func (c *ClusterObjectSetReconciler) resolveObjectRef(ctx context.Context, ref ocv1.ObjectSourceRef) (*unstructured.Unstructured, error) {
540541
secret := &corev1.Secret{}
541542
key := client.ObjectKey{Name: ref.Name, Namespace: ref.Namespace}
542-
if err := c.Client.Get(ctx, key, secret); err != nil {
543+
if err := c.APIReader.Get(ctx, key, secret); err != nil {
543544
return nil, fmt.Errorf("getting Secret %s/%s: %w", ref.Namespace, ref.Name, err)
544545
}
545546

internal/operator-controller/controllers/clusterobjectset_controller_internal_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ func Test_ClusterObjectSetReconciler_listPreviousRevisions(t *testing.T) {
142142

143143
reconciler := &ClusterObjectSetReconciler{
144144
Client: testClient,
145+
APIReader: testClient,
145146
TrackingCache: &mockTrackingCacheInternal{client: testClient},
146147
}
147148

internal/operator-controller/controllers/clusterobjectset_controller_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,7 @@ func Test_ClusterObjectSetReconciler_Reconcile_RevisionReconciliation(t *testing
493493
}
494494
result, err := (&controllers.ClusterObjectSetReconciler{
495495
Client: testClient,
496+
APIReader: testClient,
496497
RevisionEngineFactory: &mockRevisionEngineFactory{engine: mockEngine},
497498
TrackingCache: &mockTrackingCache{client: testClient},
498499
}).Reconcile(t.Context(), ctrl.Request{
@@ -613,6 +614,7 @@ func Test_ClusterObjectSetReconciler_Reconcile_ValidationError_Retries(t *testin
613614
}
614615
result, err := (&controllers.ClusterObjectSetReconciler{
615616
Client: testClient,
617+
APIReader: testClient,
616618
RevisionEngineFactory: &mockRevisionEngineFactory{engine: mockEngine},
617619
TrackingCache: &mockTrackingCache{client: testClient},
618620
}).Reconcile(t.Context(), ctrl.Request{
@@ -908,6 +910,7 @@ func Test_ClusterObjectSetReconciler_Reconcile_ArchivalAndDeletion(t *testing.T)
908910
factory := &mockRevisionEngineFactory{engine: mockEngine, createErr: tc.revisionEngineFactoryErr}
909911
result, err := (&controllers.ClusterObjectSetReconciler{
910912
Client: testClient,
913+
APIReader: testClient,
911914
RevisionEngineFactory: factory,
912915
TrackingCache: &mockTrackingCache{
913916
client: testClient,
@@ -1052,6 +1055,7 @@ func Test_ClusterObjectSetReconciler_Reconcile_ProgressDeadline(t *testing.T) {
10521055
}
10531056
result, err := (&controllers.ClusterObjectSetReconciler{
10541057
Client: testClient,
1058+
APIReader: testClient,
10551059
RevisionEngineFactory: &mockRevisionEngineFactory{engine: mockEngine},
10561060
TrackingCache: &mockTrackingCache{
10571061
client: testClient,
@@ -1551,6 +1555,7 @@ func Test_ClusterObjectSetReconciler_Reconcile_ForeignRevisionCollision(t *testi
15511555
}
15521556
result, err := (&controllers.ClusterObjectSetReconciler{
15531557
Client: testClient,
1558+
APIReader: testClient,
15541559
RevisionEngineFactory: &mockRevisionEngineFactory{engine: mockEngine},
15551560
TrackingCache: &mockTrackingCache{client: testClient},
15561561
}).Reconcile(t.Context(), ctrl.Request{
@@ -1669,6 +1674,7 @@ func Test_ClusterObjectSetReconciler_getScopedClient_Errors(t *testing.T) {
16691674

16701675
reconciler := &controllers.ClusterObjectSetReconciler{
16711676
Client: testClient,
1677+
APIReader: testClient,
16721678
RevisionEngineFactory: &mockRevisionEngineFactory{engine: mockEngine},
16731679
TrackingCache: &mockTrackingCache{client: testClient},
16741680
}
@@ -1706,6 +1712,7 @@ func Test_ClusterObjectSetReconciler_getScopedClient_Errors(t *testing.T) {
17061712

17071713
reconciler := &controllers.ClusterObjectSetReconciler{
17081714
Client: testClient,
1715+
APIReader: testClient,
17091716
RevisionEngineFactory: failingFactory,
17101717
TrackingCache: &mockTrackingCache{client: testClient},
17111718
}
@@ -1733,6 +1740,7 @@ func Test_ClusterObjectSetReconciler_getScopedClient_Errors(t *testing.T) {
17331740

17341741
reconciler := &controllers.ClusterObjectSetReconciler{
17351742
Client: testClient,
1743+
APIReader: testClient,
17361744
RevisionEngineFactory: failingFactory,
17371745
TrackingCache: &mockTrackingCache{client: testClient},
17381746
}

internal/operator-controller/controllers/resolve_ref_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ func TestResolveObjectRef_PlainJSON(t *testing.T) {
7575
}
7676
reconciler := &controllers.ClusterObjectSetReconciler{
7777
Client: fakeClient,
78+
APIReader: fakeClient,
7879
RevisionEngineFactory: &mockRevisionEngineFactory{engine: mockEngine},
7980
TrackingCache: &mockTrackingCache{client: fakeClient},
8081
Clock: clocktesting.NewFakeClock(metav1.Now().Time),
@@ -136,6 +137,7 @@ func TestResolveObjectRef_GzipCompressed(t *testing.T) {
136137
}
137138
reconciler := &controllers.ClusterObjectSetReconciler{
138139
Client: fakeClient,
140+
APIReader: fakeClient,
139141
RevisionEngineFactory: &mockRevisionEngineFactory{engine: mockEngine},
140142
TrackingCache: &mockTrackingCache{client: fakeClient},
141143
Clock: clocktesting.NewFakeClock(metav1.Now().Time),
@@ -164,6 +166,7 @@ func TestResolveObjectRef_SecretNotFound(t *testing.T) {
164166

165167
reconciler := &controllers.ClusterObjectSetReconciler{
166168
Client: fakeClient,
169+
APIReader: fakeClient,
167170
RevisionEngineFactory: &mockRevisionEngineFactory{engine: &mockRevisionEngine{}},
168171
TrackingCache: &mockTrackingCache{client: fakeClient},
169172
Clock: clocktesting.NewFakeClock(metav1.Now().Time),
@@ -203,6 +206,7 @@ func TestResolveObjectRef_KeyNotFound(t *testing.T) {
203206

204207
reconciler := &controllers.ClusterObjectSetReconciler{
205208
Client: fakeClient,
209+
APIReader: fakeClient,
206210
RevisionEngineFactory: &mockRevisionEngineFactory{engine: &mockRevisionEngine{}},
207211
TrackingCache: &mockTrackingCache{client: fakeClient},
208212
Clock: clocktesting.NewFakeClock(metav1.Now().Time),
@@ -242,6 +246,7 @@ func TestResolveObjectRef_InvalidJSON(t *testing.T) {
242246

243247
reconciler := &controllers.ClusterObjectSetReconciler{
244248
Client: fakeClient,
249+
APIReader: fakeClient,
245250
RevisionEngineFactory: &mockRevisionEngineFactory{engine: &mockRevisionEngine{}},
246251
TrackingCache: &mockTrackingCache{client: fakeClient},
247252
Clock: clocktesting.NewFakeClock(metav1.Now().Time),

0 commit comments

Comments
 (0)