Skip to content

Commit 167e031

Browse files
Merge pull request #2285 from benluddy/catalog-csv-copy-pruning
Prune unused ClusterServiceVersion fields from catalog's informer.
2 parents f8217b7 + 895e7ac commit 167e031

File tree

2 files changed

+36
-109
lines changed

2 files changed

+36
-109
lines changed

pkg/controller/operators/catalog/operator.go

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,12 @@ import (
4545
"github.com/operator-framework/api/pkg/operators/v1alpha1"
4646
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned"
4747
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/informers/externalversions"
48+
operatorsv1alpha1listers "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/listers/operators/v1alpha1"
4849
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/bundle"
4950
olmerrors "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/errors"
5051
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install"
5152
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/catalog/subscription"
53+
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/internal/pruning"
5254
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry"
5355
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/grpc"
5456
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/reconciler"
@@ -105,7 +107,6 @@ type Operator struct {
105107
sourcesLastUpdate sharedtime.SharedTime
106108
resolver resolver.StepResolver
107109
reconciler reconciler.RegistryReconcilerFactory
108-
csvProvidedAPIsIndexer map[string]cache.Indexer
109110
catalogSubscriberIndexer map[string]cache.Indexer
110111
clientAttenuator *scoped.ClientAttenuator
111112
serviceAccountQuerier *scoped.UserDefinedServiceAccountQuerier
@@ -176,7 +177,6 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
176177
catsrcQueueSet: queueinformer.NewEmptyResourceQueueSet(),
177178
subQueueSet: queueinformer.NewEmptyResourceQueueSet(),
178179
ipQueueSet: queueinformer.NewEmptyResourceQueueSet(),
179-
csvProvidedAPIsIndexer: map[string]cache.Indexer{},
180180
catalogSubscriberIndexer: map[string]cache.Indexer{},
181181
serviceAccountQuerier: scoped.NewUserDefinedServiceAccountQuerier(logger, crClient),
182182
clientAttenuator: scoped.NewClientAttenuator(logger, config, opClient),
@@ -192,18 +192,41 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
192192
// Wire OLM CR sharedIndexInformers
193193
crInformerFactory := externalversions.NewSharedInformerFactoryWithOptions(op.client, resyncPeriod())
194194

195-
// Wire CSVs
196-
csvInformer := crInformerFactory.Operators().V1alpha1().ClusterServiceVersions()
197-
op.lister.OperatorsV1alpha1().RegisterClusterServiceVersionLister(metav1.NamespaceAll, csvInformer.Lister())
198-
if err := op.RegisterInformer(csvInformer.Informer()); err != nil {
199-
return nil, err
200-
}
201-
202-
if err := csvInformer.Informer().AddIndexers(cache.Indexers{index.ProvidedAPIsIndexFuncKey: index.ProvidedAPIsIndexFunc}); err != nil {
195+
// Fields are pruned from local copies of the objects managed
196+
// by this informer in order to reduce cached size.
197+
prunedCSVInformer := cache.NewSharedIndexInformer(
198+
pruning.NewListerWatcher(op.client, metav1.NamespaceAll, func(*metav1.ListOptions) {}, pruning.PrunerFunc(func(csv *v1alpha1.ClusterServiceVersion) {
199+
*csv = v1alpha1.ClusterServiceVersion{
200+
TypeMeta: csv.TypeMeta,
201+
ObjectMeta: metav1.ObjectMeta{
202+
Name: csv.Name,
203+
Namespace: csv.Namespace,
204+
Labels: csv.Labels,
205+
Annotations: csv.Annotations,
206+
},
207+
Spec: v1alpha1.ClusterServiceVersionSpec{
208+
CustomResourceDefinitions: csv.Spec.CustomResourceDefinitions,
209+
APIServiceDefinitions: csv.Spec.APIServiceDefinitions,
210+
Replaces: csv.Spec.Replaces,
211+
Version: csv.Spec.Version,
212+
},
213+
Status: v1alpha1.ClusterServiceVersionStatus{
214+
Phase: csv.Status.Phase,
215+
Reason: csv.Status.Reason,
216+
},
217+
}
218+
})),
219+
&v1alpha1.ClusterServiceVersion{},
220+
resyncPeriod(),
221+
cache.Indexers{
222+
cache.NamespaceIndex: cache.MetaNamespaceIndexFunc,
223+
},
224+
)
225+
csvLister := operatorsv1alpha1listers.NewClusterServiceVersionLister(prunedCSVInformer.GetIndexer())
226+
op.lister.OperatorsV1alpha1().RegisterClusterServiceVersionLister(metav1.NamespaceAll, csvLister)
227+
if err := op.RegisterInformer(prunedCSVInformer); err != nil {
203228
return nil, err
204229
}
205-
csvIndexer := csvInformer.Informer().GetIndexer()
206-
op.csvProvidedAPIsIndexer[metav1.NamespaceAll] = csvIndexer
207230

208231
// TODO: Add namespace resolve sync
209232

@@ -1279,7 +1302,7 @@ func (o *Operator) setSubsCond(subs []*v1alpha1.Subscription, condType v1alpha1.
12791302
}
12801303

12811304
latest.Status = s.Status
1282-
_, err = o.client.OperatorsV1alpha1().Subscriptions(sub.Namespace).UpdateStatus(context.TODO(), latest, updateOpts)
1305+
_, err = o.client.OperatorsV1alpha1().Subscriptions(s.Namespace).UpdateStatus(context.TODO(), latest, updateOpts)
12831306

12841307
return err
12851308
}

pkg/lib/index/api.go

Lines changed: 0 additions & 96 deletions
This file was deleted.

0 commit comments

Comments
 (0)