From 2bb8a725321adce8b8b97203b54ee40a0ea9b96d Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Tue, 20 Aug 2024 11:32:12 +0300 Subject: [PATCH] nfd-master: proper shutdown of nfd api informers Stop blocking on event channels when the api controller is stopped. Ensures that the nfd API informer factory is properly shut down and all resources released when stop() is called. This eliminates a memory leak on re-configure events when leader election is enabled. --- pkg/nfd-master/nfd-api-controller.go | 10 ++++++++-- pkg/nfd-master/nfd-master.go | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/nfd-master/nfd-api-controller.go b/pkg/nfd-master/nfd-api-controller.go index 12d7f27871..29cba271ec 100644 --- a/pkg/nfd-master/nfd-api-controller.go +++ b/pkg/nfd-master/nfd-api-controller.go @@ -206,7 +206,10 @@ func (c *nfdController) updateOneNode(typ string, obj metav1.Object) { klog.ErrorS(err, "failed to determine node name for object", "type", typ, "object", klog.KObj(obj)) return } - c.updateOneNodeChan <- nodeName + select { + case c.updateOneNodeChan <- nodeName: + case <-c.stopChan: + } } func (c *nfdController) updateAllNodes() { @@ -217,7 +220,10 @@ func (c *nfdController) updateAllNodes() { } func (c *nfdController) updateNodeFeatureGroup(nodeFeatureGroup string) { - c.updateNodeFeatureGroupChan <- nodeFeatureGroup + select { + case c.updateNodeFeatureGroupChan <- nodeFeatureGroup: + case <-c.stopChan: + } } func (c *nfdController) updateAllNodeFeatureGroups() { diff --git a/pkg/nfd-master/nfd-master.go b/pkg/nfd-master/nfd-master.go index e34bb3e5fb..56deedb222 100644 --- a/pkg/nfd-master/nfd-master.go +++ b/pkg/nfd-master/nfd-master.go @@ -392,7 +392,7 @@ func (m *nfdMaster) Run() error { // Update all nodes when the configuration changes if m.nfdController != nil && nfdfeatures.NFDFeatureGate.Enabled(nfdfeatures.NodeFeatureAPI) { - m.nfdController.updateAllNodesChan <- struct{}{} + m.nfdController.updateAllNodes() } case <-m.stop: