From 337f73f82d81f2c6c7873133a936119c7d4ae976 Mon Sep 17 00:00:00 2001 From: Varsha Prasad Narsing Date: Wed, 1 May 2024 16:20:12 -0700 Subject: [PATCH] [Fix] Fix constant reconciles due to Catalog Due to the polling feature in the Catalog, the `lastPolledInterval` in the Catalog's status gets updated. Because of this there is a reconcile is trigrred every time the catalog is polled, even though there is no change in the resolved image ref SHA. This causes unnecessary continuous reconciles in the CE. To overcome this, a Predicate is added to accept update events only when there is a change in Resolved reference. Signed-off-by: Varsha Prasad Narsing --- internal/controllers/clusterextension_controller.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/internal/controllers/clusterextension_controller.go b/internal/controllers/clusterextension_controller.go index b71baaf2c..ffc0a5350 100644 --- a/internal/controllers/clusterextension_controller.go +++ b/internal/controllers/clusterextension_controller.go @@ -32,8 +32,10 @@ import ( "k8s.io/utils/ptr" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" catalogd "github.com/operator-framework/catalogd/api/core/v1alpha1" @@ -409,6 +411,17 @@ func (r *ClusterExtensionReconciler) SetupWithManager(mgr ctrl.Manager) error { For(&ocv1alpha1.ClusterExtension{}). Watches(&catalogd.Catalog{}, handler.EnqueueRequestsFromMapFunc(clusterExtensionRequestsForCatalog(mgr.GetClient(), mgr.GetLogger()))). + WithEventFilter(predicate.Funcs{ + UpdateFunc: func(ue event.UpdateEvent) bool { + oldObject, isOldCatalog := ue.ObjectOld.(*catalogd.Catalog) + newObject, isNewCatalog := ue.ObjectNew.(*catalogd.Catalog) + + if !isOldCatalog || !isNewCatalog { + return true + } + return oldObject.Status.ResolvedSource.Image.Ref != newObject.Status.ResolvedSource.Image.Ref + }, + }). Owns(&rukpakv1alpha2.BundleDeployment{}). Complete(r)