Skip to content

Commit e641e76

Browse files
committed
Don't cache copied CSVs in the controller-runtime-based controllers.
Only the main controller (i.e., the controller responsible for reconciling ClusterServiceVersions) needs to watch copied ClusterServiceVersions. The OperatorCondition and Operator controllers -- which coincidentally maintain separate caches -- are not interested in copied CSVs, so all copied CSVs can be excluded via from their cache using a label selector. Signed-off-by: Ben Luddy <[email protected]>
1 parent 014bd31 commit e641e76

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

cmd/olm/manager.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,58 @@ package main
22

33
import (
44
"context"
5-
"k8s.io/apimachinery/pkg/labels"
65

76
corev1 "k8s.io/api/core/v1"
7+
"k8s.io/apimachinery/pkg/labels"
8+
"k8s.io/apimachinery/pkg/runtime"
9+
"k8s.io/apimachinery/pkg/selection"
810
ctrl "sigs.k8s.io/controller-runtime"
911
"sigs.k8s.io/controller-runtime/pkg/cache"
1012
"sigs.k8s.io/controller-runtime/pkg/log/zap"
1113

14+
operatorsv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1"
1215
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install"
1316
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators"
1417
"github.com/operator-framework/operator-lifecycle-manager/pkg/feature"
1518
)
1619

20+
var (
21+
copiedLabelDoesNotExist labels.Selector
22+
)
23+
24+
func init() {
25+
requirement, err := labels.NewRequirement(operatorsv1alpha1.CopiedLabelKey, selection.DoesNotExist, nil)
26+
if err != nil {
27+
panic(err)
28+
}
29+
copiedLabelDoesNotExist = labels.NewSelector().Add(*requirement)
30+
}
31+
1732
func Manager(ctx context.Context, debug bool) (ctrl.Manager, error) {
1833
ctrl.SetLogger(zap.New(zap.UseDevMode(debug)))
1934
setupLog := ctrl.Log.WithName("setup").V(1)
2035

21-
// Setup a Manager
36+
scheme := runtime.NewScheme()
37+
if err := operators.AddToScheme(scheme); err != nil {
38+
// ctrl.NewManager needs the Scheme to be populated
39+
// up-front so that the NewCache implementation we
40+
// provide can configure custom cache behavior on
41+
// non-core types.
42+
return nil, err
43+
}
44+
2245
setupLog.Info("configuring manager")
2346
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
47+
Scheme: scheme,
2448
MetricsBindAddress: "0", // TODO(njhale): Enable metrics on non-conflicting port (not 8080)
2549
NewCache: cache.BuilderWithOptions(cache.Options{
2650
SelectorsByObject: cache.SelectorsByObject{
2751
&corev1.Secret{}: {
2852
Label: labels.SelectorFromValidatedSet(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue}),
2953
},
54+
&operatorsv1alpha1.ClusterServiceVersion{}: {
55+
Label: copiedLabelDoesNotExist,
56+
},
3057
},
3158
}),
3259
})

0 commit comments

Comments
 (0)