Skip to content

Commit 5b57be0

Browse files
zhujian7claude
andcommitted
Replace inefficient list-and-filter with indexed lookup in runController
Use managedClusterAddonIndexer.ByIndex() instead of listing all ManagedClusterAddOns and filtering by name. This provides O(1) indexed lookup instead of O(n) linear scan. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> Signed-off-by: zhujian <[email protected]>
1 parent 3ca854f commit 5b57be0

File tree

3 files changed

+9
-9
lines changed

3 files changed

+9
-9
lines changed

pkg/addon/controllers/addontemplate/controller.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/openshift/library-go/pkg/operator/events"
99
"k8s.io/apimachinery/pkg/api/errors"
1010
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11-
"k8s.io/apimachinery/pkg/labels"
1211
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
1312
"k8s.io/client-go/dynamic/dynamicinformer"
1413
kubeinformers "k8s.io/client-go/informers"
@@ -131,9 +130,10 @@ func (c *addonTemplateController) stopUnusedManagers(
131130

132131
stopFunc, ok := c.addonManagers[addOnName]
133132
if ok {
133+
logger.Info("Start to stop the manager for addon", "addonName", addOnName)
134134
stopFunc()
135135
delete(c.addonManagers, addOnName)
136-
logger.Info("Stopping the manager for addon", "addonName", addOnName)
136+
logger.Info("The manager for addon stopped", "addonName", addOnName)
137137
}
138138
return nil
139139
}
@@ -249,13 +249,14 @@ func (c *addonTemplateController) runController(ctx context.Context, addonName s
249249
kubeInformers.Start(ctx.Done())
250250

251251
// trigger the manager to reconcile for the existing managed cluster addons
252-
mcas, err := c.addonInformers.Addon().V1alpha1().ManagedClusterAddOns().Lister().List(labels.Everything())
252+
mcas, err := c.managedClusterAddonIndexer.ByIndex(addonindex.ManagedClusterAddonByName, addonName)
253253
if err != nil {
254-
logger.Info("Failed to list ManagedClusterAddOns", "error", err)
254+
logger.Info("Failed to list ManagedClusterAddOns by index", "error", err)
255255
} else {
256256
for _, mca := range mcas {
257-
if mca.Name == addonName {
258-
mgr.Trigger(mca.Namespace, addonName)
257+
addon, ok := mca.(*addonv1alpha1.ManagedClusterAddOn)
258+
if ok {
259+
mgr.Trigger(addon.Namespace, addonName)
259260
}
260261
}
261262
}

pkg/addon/controllers/addontemplate/controller_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ import (
2525
fakework "open-cluster-management.io/api/client/work/clientset/versioned/fake"
2626
workinformers "open-cluster-management.io/api/client/work/informers/externalversions"
2727

28-
testingcommon "open-cluster-management.io/ocm/pkg/common/testing"
2928
addonindex "open-cluster-management.io/ocm/pkg/addon/index"
29+
testingcommon "open-cluster-management.io/ocm/pkg/common/testing"
3030
testinghelpers "open-cluster-management.io/ocm/pkg/registration/helpers/testing"
3131
)
3232

test/e2e/addonmanagement_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"embed"
66
"encoding/json"
77
"fmt"
8-
"time"
98

109
ginkgo "github.com/onsi/ginkgo/v2"
1110
"github.com/onsi/gomega"
@@ -878,7 +877,7 @@ var _ = ginkgo.Describe("Enable addon management feature gate", ginkgo.Ordered,
878877
return err
879878
}
880879
return fmt.Errorf("the configmap should be deleted")
881-
}, time.Second*180, time.Second*5).ShouldNot(gomega.HaveOccurred())
880+
}).ShouldNot(gomega.HaveOccurred())
882881

883882
ginkgo.By("ManagedClusterAddon should eventually be deleted after pre-delete job completes")
884883
gomega.Eventually(func() error {

0 commit comments

Comments
 (0)