@@ -57,11 +57,10 @@ type MachineHealthCheckReconciler struct {
5757 Client client.Client
5858 Log logr.Logger
5959
60- controller controller.Controller
61- recorder record.EventRecorder
62- scheme * runtime.Scheme
63- clusterNodeInformers map [types.NamespacedName ]cache.Informer
64- clusterNodeInformersLock * sync.Mutex
60+ controller controller.Controller
61+ recorder record.EventRecorder
62+ scheme * runtime.Scheme
63+ clusterNodeInformers * sync.Map
6564}
6665
6766func (r * MachineHealthCheckReconciler ) SetupWithManager (mgr ctrl.Manager , options controller.Options ) error {
@@ -101,8 +100,7 @@ func (r *MachineHealthCheckReconciler) SetupWithManager(mgr ctrl.Manager, option
101100 r .controller = controller
102101 r .recorder = mgr .GetEventRecorderFor ("machinehealthcheck-controller" )
103102 r .scheme = mgr .GetScheme ()
104- r .clusterNodeInformers = make (map [types.NamespacedName ]cache.Informer )
105- r .clusterNodeInformersLock = & sync.Mutex {}
103+ r .clusterNodeInformers = & sync.Map {}
106104 return nil
107105}
108106
@@ -345,11 +343,9 @@ func (r *MachineHealthCheckReconciler) getMachineFromNode(nodeName string) (*clu
345343
346344func (r * MachineHealthCheckReconciler ) watchClusterNodes (ctx context.Context , c client.Client , cluster * clusterv1.Cluster ) error {
347345 // Ensure that concurrent reconciles don't clash when setting up watches
348- r .clusterNodeInformersLock .Lock ()
349- defer r .clusterNodeInformersLock .Unlock ()
350346
351347 key := util .ObjectKey (cluster )
352- if _ , ok := r .clusterNodeInformers [ key ] ; ok {
348+ if _ , ok := r .loadClusterNodeInformer ( key ) ; ok {
353349 // watch was already set up for this cluster
354350 return nil
355351 }
@@ -377,12 +373,24 @@ func (r *MachineHealthCheckReconciler) watchClusterNodes(ctx context.Context, c
377373 return errors .Wrap (err , "error watching nodes on target cluster" )
378374 }
379375
380- if r .clusterNodeInformers == nil {
381- r .clusterNodeInformers = make (map [types.NamespacedName ]cache.Informer )
376+ r .storeClusterNodeInformer (key , nodeInformer )
377+ return nil
378+ }
379+
380+ func (r * MachineHealthCheckReconciler ) loadClusterNodeInformer (key client.ObjectKey ) (cache.Informer , bool ) {
381+ val , ok := r .clusterNodeInformers .Load (key )
382+ if ! ok {
383+ return nil , false
382384 }
385+ informer , ok := val .(cache.Informer )
386+ if ! ok {
387+ return nil , false
388+ }
389+ return informer , true
390+ }
383391
384- r . clusterNodeInformers [ key ] = nodeInformer
385- return nil
392+ func ( r * MachineHealthCheckReconciler ) storeClusterNodeInformer ( key client. ObjectKey , nodeInformer cache. Informer ) {
393+ r . clusterNodeInformers . Store ( key , nodeInformer )
386394}
387395
388396func (r * MachineHealthCheckReconciler ) indexMachineByNodeName (object runtime.Object ) []string {
0 commit comments