From 90035a9025ecd0ede8109829bf57d963ccfd9ebc Mon Sep 17 00:00:00 2001 From: hasheddan Date: Thu, 31 Dec 2020 07:24:54 -0600 Subject: [PATCH] Use anonymous function for locking when serving health probes Updates serveHealthProbes to use the same anonymous function pattern that serveMetrics does for performing operations that necessitate acquiring the controller manager's lock. Signed-off-by: hasheddan --- pkg/manager/internal.go | 47 +++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/pkg/manager/internal.go b/pkg/manager/internal.go index a9fe180d30..1ba1a1437b 100644 --- a/pkg/manager/internal.go +++ b/pkg/manager/internal.go @@ -418,34 +418,35 @@ func (cm *controllerManager) serveMetrics() { } func (cm *controllerManager) serveHealthProbes() { - // TODO(hypnoglow): refactor locking to use anonymous func in the similar way - // it's done in serveMetrics. - cm.mu.Lock() mux := http.NewServeMux() - - if cm.readyzHandler != nil { - mux.Handle(cm.readinessEndpointName, http.StripPrefix(cm.readinessEndpointName, cm.readyzHandler)) - // Append '/' suffix to handle subpaths - mux.Handle(cm.readinessEndpointName+"/", http.StripPrefix(cm.readinessEndpointName, cm.readyzHandler)) - } - if cm.healthzHandler != nil { - mux.Handle(cm.livenessEndpointName, http.StripPrefix(cm.livenessEndpointName, cm.healthzHandler)) - // Append '/' suffix to handle subpaths - mux.Handle(cm.livenessEndpointName+"/", http.StripPrefix(cm.livenessEndpointName, cm.healthzHandler)) - } - server := http.Server{ Handler: mux, } - // Run server - cm.startRunnable(RunnableFunc(func(_ context.Context) error { - if err := server.Serve(cm.healthProbeListener); err != nil && err != http.ErrServerClosed { - return err + + func() { + cm.mu.Lock() + defer cm.mu.Unlock() + + if cm.readyzHandler != nil { + mux.Handle(cm.readinessEndpointName, http.StripPrefix(cm.readinessEndpointName, cm.readyzHandler)) + // Append '/' suffix to handle subpaths + mux.Handle(cm.readinessEndpointName+"/", http.StripPrefix(cm.readinessEndpointName, cm.readyzHandler)) } - return nil - })) - cm.healthzStarted = true - cm.mu.Unlock() + if cm.healthzHandler != nil { + mux.Handle(cm.livenessEndpointName, http.StripPrefix(cm.livenessEndpointName, cm.healthzHandler)) + // Append '/' suffix to handle subpaths + mux.Handle(cm.livenessEndpointName+"/", http.StripPrefix(cm.livenessEndpointName, cm.healthzHandler)) + } + + // Run server + cm.startRunnable(RunnableFunc(func(_ context.Context) error { + if err := server.Serve(cm.healthProbeListener); err != nil && err != http.ErrServerClosed { + return err + } + return nil + })) + cm.healthzStarted = true + }() // Shutdown the server when stop is closed <-cm.internalProceduresStop