@@ -297,24 +297,30 @@ func (cm *controllerManager) GetControllerOptions() config.Controller {
297
297
return cm .controllerConfig
298
298
}
299
299
300
- func (cm * controllerManager ) serveMetrics () {
300
+ func (cm * controllerManager ) addMetricsServer () error {
301
+ mux := http .NewServeMux ()
302
+ srv := httpserver .New (mux )
303
+
301
304
handler := promhttp .HandlerFor (metrics .Registry , promhttp.HandlerOpts {
302
305
ErrorHandling : promhttp .HTTPErrorOnError ,
303
306
})
304
307
// TODO(JoelSpeed): Use existing Kubernetes machinery for serving metrics
305
- mux := http .NewServeMux ()
306
308
mux .Handle (defaultMetricsEndpoint , handler )
307
309
for path , extraHandler := range cm .metricsExtraHandlers {
308
310
mux .Handle (path , extraHandler )
309
311
}
310
312
311
- server := httpserver .New (mux )
312
- go cm .httpServe ("metrics" , cm .logger .WithValues ("path" , defaultMetricsEndpoint ), server , cm .metricsListener )
313
+ return cm .add (& server {
314
+ Kind : "metrics" ,
315
+ Log : cm .logger .WithValues ("path" , defaultMetricsEndpoint ),
316
+ Server : srv ,
317
+ Listener : cm .metricsListener ,
318
+ })
313
319
}
314
320
315
- func (cm * controllerManager ) serveHealthProbes () {
321
+ func (cm * controllerManager ) addHealthProbeServer () error {
316
322
mux := http .NewServeMux ()
317
- server := httpserver .New (mux )
323
+ srv := httpserver .New (mux )
318
324
319
325
if cm .readyzHandler != nil {
320
326
mux .Handle (cm .readinessEndpointName , http .StripPrefix (cm .readinessEndpointName , cm .readyzHandler ))
@@ -327,7 +333,12 @@ func (cm *controllerManager) serveHealthProbes() {
327
333
mux .Handle (cm .livenessEndpointName + "/" , http .StripPrefix (cm .livenessEndpointName , cm .healthzHandler ))
328
334
}
329
335
330
- go cm .httpServe ("health probe" , cm .logger , server , cm .healthProbeListener )
336
+ return cm .add (& server {
337
+ Kind : "health probe" ,
338
+ Log : cm .logger ,
339
+ Server : srv ,
340
+ Listener : cm .healthProbeListener ,
341
+ })
331
342
}
332
343
333
344
func (cm * controllerManager ) addPprofServer () error {
@@ -348,42 +359,6 @@ func (cm *controllerManager) addPprofServer() error {
348
359
})
349
360
}
350
361
351
- func (cm * controllerManager ) httpServe (kind string , log logr.Logger , server * http.Server , ln net.Listener ) {
352
- log = log .WithValues ("kind" , kind , "addr" , ln .Addr ())
353
-
354
- go func () {
355
- log .Info ("Starting server" )
356
- if err := server .Serve (ln ); err != nil {
357
- if errors .Is (err , http .ErrServerClosed ) {
358
- return
359
- }
360
- if atomic .LoadInt64 (cm .stopProcedureEngaged ) > 0 {
361
- // There might be cases where connections are still open and we try to shutdown
362
- // but not having enough time to close the connection causes an error in Serve
363
- //
364
- // In that case we want to avoid returning an error to the main error channel.
365
- log .Error (err , "error on Serve after stop has been engaged" )
366
- return
367
- }
368
- cm .errChan <- err
369
- }
370
- }()
371
-
372
- // Shutdown the server when stop is closed.
373
- <- cm .internalProceduresStop
374
- if err := server .Shutdown (cm .shutdownCtx ); err != nil {
375
- if errors .Is (err , context .Canceled ) || errors .Is (err , context .DeadlineExceeded ) {
376
- // Avoid logging context related errors.
377
- return
378
- }
379
- if atomic .LoadInt64 (cm .stopProcedureEngaged ) > 0 {
380
- cm .logger .Error (err , "error on Shutdown after stop has been engaged" )
381
- return
382
- }
383
- cm .errChan <- err
384
- }
385
- }
386
-
387
362
// Start starts the manager and waits indefinitely.
388
363
// There is only two ways to have start return:
389
364
// An error has occurred during in one of the internal operations,
@@ -437,12 +412,16 @@ func (cm *controllerManager) Start(ctx context.Context) (err error) {
437
412
// (If we don't serve metrics for non-leaders, prometheus will still scrape
438
413
// the pod but will get a connection refused).
439
414
if cm .metricsListener != nil {
440
- cm .serveMetrics ()
415
+ if err := cm .addMetricsServer (); err != nil {
416
+ return fmt .Errorf ("failed to add metrics server: %w" , err )
417
+ }
441
418
}
442
419
443
420
// Serve health probes.
444
421
if cm .healthProbeListener != nil {
445
- cm .serveHealthProbes ()
422
+ if err := cm .addHealthProbeServer (); err != nil {
423
+ return fmt .Errorf ("failed to add health probe server: %w" , err )
424
+ }
446
425
}
447
426
448
427
// Add pprof server
0 commit comments