From ba4cebb29e339f134d4987ee6619f150a08ae7f9 Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Thu, 28 Mar 2024 11:09:37 +0200 Subject: [PATCH] nfd-master: stop node-updater pool before reconfiguring api-controller Prevents potential race between node-updater pool and the api-controller when re-configuring nfd-master. Reconfiguration causes a new api-controller instance to be created so nfd api lister might change in the midst of processing a node update (if the pool was running). No actual issues related to this have been identified but races (like this) should still be avoided. --- pkg/nfd-master/nfd-master.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pkg/nfd-master/nfd-master.go b/pkg/nfd-master/nfd-master.go index c964b2a7f..7abbc732c 100644 --- a/pkg/nfd-master/nfd-master.go +++ b/pkg/nfd-master/nfd-master.go @@ -350,6 +350,11 @@ func (m *nfdMaster) Run() error { return err } + // Stop the nodeUpdaterPool so that no node updates are underway + // while we reconfigure the NFD API controller (including the + // listers) below + m.nodeUpdaterPool.stop() + // restart NFD API controller if m.nfdController != nil { klog.InfoS("stopping the nfd api controller") @@ -361,13 +366,13 @@ func (m *nfdMaster) Run() error { return nil } } + // Restart the nodeUpdaterPool + m.nodeUpdaterPool.start(m.config.NfdApiParallelism) + // Update all nodes when the configuration changes if m.nfdController != nil && features.NFDFeatureGate.Enabled(features.NodeFeatureAPI) { m.nfdController.updateAllNodesChan <- struct{}{} } - // Restart the node updater pool - m.nodeUpdaterPool.stop() - m.nodeUpdaterPool.start(m.config.NfdApiParallelism) case <-m.stop: klog.InfoS("shutting down nfd-master")