From 8ef9e53ce5dd82b396b675d1b8ae6f8339cd6546 Mon Sep 17 00:00:00 2001 From: lukasmetzner Date: Thu, 10 Apr 2025 14:09:09 +0200 Subject: [PATCH] fix: check error of AddEventHandler --- staging/src/k8s.io/cloud-provider/app/core.go | 5 ++++- .../controllers/route/route_controller.go | 15 ++++++++++++--- .../controllers/route/route_controller_test.go | 11 +++++++---- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/staging/src/k8s.io/cloud-provider/app/core.go b/staging/src/k8s.io/cloud-provider/app/core.go index b19c9f2d869..f1a324e3ff0 100644 --- a/staging/src/k8s.io/cloud-provider/app/core.go +++ b/staging/src/k8s.io/cloud-provider/app/core.go @@ -128,13 +128,16 @@ func startRouteController(ctx context.Context, initContext ControllerInitContext return nil, false, fmt.Errorf("length of clusterCIDRs is:%v more than max allowed of 2", len(clusterCIDRs)) } - routeController := routecontroller.New( + routeController, err := routecontroller.New( routes, completedConfig.ClientBuilder.ClientOrDie(initContext.ClientName), completedConfig.SharedInformers.Core().V1().Nodes(), completedConfig.ComponentConfig.KubeCloudShared.ClusterName, clusterCIDRs, ) + if err != nil { + return nil, false, err + } go routeController.Run(ctx, completedConfig.ComponentConfig.KubeCloudShared.RouteReconciliationPeriod.Duration, controlexContext.ControllerManagerMetrics) return nil, true, nil diff --git a/staging/src/k8s.io/cloud-provider/controllers/route/route_controller.go b/staging/src/k8s.io/cloud-provider/controllers/route/route_controller.go index f1e98c16dbd..87403215ee3 100644 --- a/staging/src/k8s.io/cloud-provider/controllers/route/route_controller.go +++ b/staging/src/k8s.io/cloud-provider/controllers/route/route_controller.go @@ -75,7 +75,13 @@ type RouteController struct { workqueue workqueue.TypedRateLimitingInterface[string] } -func New(routes cloudprovider.Routes, kubeClient clientset.Interface, nodeInformer coreinformers.NodeInformer, clusterName string, clusterCIDRs []*net.IPNet) *RouteController { +func New( + routes cloudprovider.Routes, + kubeClient clientset.Interface, + nodeInformer coreinformers.NodeInformer, + clusterName string, + clusterCIDRs []*net.IPNet, +) (*RouteController, error) { if len(clusterCIDRs) == 0 { klog.Fatal("RouteController: Must specify clusterCIDR.") } @@ -96,7 +102,7 @@ func New(routes cloudprovider.Routes, kubeClient clientset.Interface, nodeInform workqueue.TypedRateLimitingQueueConfig[string]{Name: "Routes"}, ) - rc.nodeInformer.Informer().AddEventHandler( + _, err := rc.nodeInformer.Informer().AddEventHandler( // It is only necessary to reconcile the routes for any events that have the potential to impact them: // - Node is added // - Node is removed @@ -109,9 +115,12 @@ func New(routes cloudprovider.Routes, kubeClient clientset.Interface, nodeInform DeleteFunc: rc.enqueueReconcile, }, ) + if err != nil { + return nil, err + } } - return rc + return rc, nil } func (rc *RouteController) enqueueReconcile(_ interface{}) { diff --git a/staging/src/k8s.io/cloud-provider/controllers/route/route_controller_test.go b/staging/src/k8s.io/cloud-provider/controllers/route/route_controller_test.go index 8c096ba8b90..84802ceecd0 100644 --- a/staging/src/k8s.io/cloud-provider/controllers/route/route_controller_test.go +++ b/staging/src/k8s.io/cloud-provider/controllers/route/route_controller_test.go @@ -77,7 +77,8 @@ func TestIsResponsibleForRoute(t *testing.T) { } client := fake.NewSimpleClientset() informerFactory := informers.NewSharedInformerFactory(client, 0) - rc := New(nil, nil, informerFactory.Core().V1().Nodes(), myClusterName, []*net.IPNet{cidr}) + rc, err := New(nil, nil, informerFactory.Core().V1().Nodes(), myClusterName, []*net.IPNet{cidr}) + require.NoError(t, err) rc.nodeListerSynced = alwaysReady route := &cloudprovider.Route{ Name: testCase.routeName, @@ -457,7 +458,9 @@ func TestReconcile(t *testing.T) { } informerFactory := informers.NewSharedInformerFactory(testCase.clientset, 0) - rc := New(routes, testCase.clientset, informerFactory.Core().V1().Nodes(), cluster, cidrs) + + rc, err := New(routes, testCase.clientset, informerFactory.Core().V1().Nodes(), cluster, cidrs) + require.NoError(t, err) recorder := record.NewBroadcaster(record.WithContext(ctx)) rc.recorder = recorder.NewRecorder(scheme.Scheme, v1.EventSource{Component: "route_controller"}) @@ -493,7 +496,6 @@ func TestReconcile(t *testing.T) { } } var finalRoutes []*cloudprovider.Route - var err error timeoutChan := time.After(200 * time.Millisecond) tick := time.NewTicker(10 * time.Millisecond) defer tick.Stop() @@ -588,7 +590,8 @@ func TestHandleNodeUpdate(t *testing.T) { cidrs = append(cidrs, cidr) informerFactory := informers.NewSharedInformerFactory(testCase.clientset, 0) - rc := New(routes, testCase.clientset, informerFactory.Core().V1().Nodes(), cluster, cidrs) + rc, err := New(routes, testCase.clientset, informerFactory.Core().V1().Nodes(), cluster, cidrs) + require.NoError(t, err) require.NotNil(t, rc.workqueue) rc.handleNodeUpdate(&node, &testCase.updatedNode)