From 8d0c56e22f73fdb1a82a12475909e7d69f4bec08 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 14 Feb 2019 14:07:18 -0500 Subject: [PATCH] prevent unhandled errors on colliding poststarthook registration --- .../apiextensions-apiserver/pkg/apiserver/apiserver.go | 4 ++-- staging/src/k8s.io/apiserver/pkg/server/config_test.go | 4 ++-- staging/src/k8s.io/apiserver/pkg/server/hooks.go | 4 +++- .../k8s.io/apiserver/pkg/server/options/serving_test.go | 2 +- .../src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go | 8 ++++---- .../src/k8s.io/sample-apiserver/pkg/cmd/server/start.go | 2 +- 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go index 09dc617ea14..291dbd74e4c 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go @@ -198,11 +198,11 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) crdHandler, ) - s.GenericAPIServer.AddPostStartHook("start-apiextensions-informers", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("start-apiextensions-informers", func(context genericapiserver.PostStartHookContext) error { s.Informers.Start(context.StopCh) return nil }) - s.GenericAPIServer.AddPostStartHook("start-apiextensions-controllers", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("start-apiextensions-controllers", func(context genericapiserver.PostStartHookContext) error { go crdController.Run(context.StopCh) go namingController.Run(context.StopCh) go establishingController.Run(context.StopCh) diff --git a/staging/src/k8s.io/apiserver/pkg/server/config_test.go b/staging/src/k8s.io/apiserver/pkg/server/config_test.go index 524b791388a..9a6fded8475 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/config_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/config_test.go @@ -57,7 +57,7 @@ func TestNewWithDelegate(t *testing.T) { }) delegatePostStartHookChan := make(chan struct{}) - delegateServer.AddPostStartHook("delegate-post-start-hook", func(context PostStartHookContext) error { + delegateServer.AddPostStartHookOrDie("delegate-post-start-hook", func(context PostStartHookContext) error { defer close(delegatePostStartHookChan) return nil }) @@ -85,7 +85,7 @@ func TestNewWithDelegate(t *testing.T) { }) wrappingPostStartHookChan := make(chan struct{}) - wrappingServer.AddPostStartHook("wrapping-post-start-hook", func(context PostStartHookContext) error { + wrappingServer.AddPostStartHookOrDie("wrapping-post-start-hook", func(context PostStartHookContext) error { defer close(wrappingPostStartHookChan) return nil }) diff --git a/staging/src/k8s.io/apiserver/pkg/server/hooks.go b/staging/src/k8s.io/apiserver/pkg/server/hooks.go index 921255218bc..593e5b8a53c 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/hooks.go +++ b/staging/src/k8s.io/apiserver/pkg/server/hooks.go @@ -92,7 +92,9 @@ func (s *GenericAPIServer) AddPostStartHook(name string, hook PostStartHookFunc) // done is closed when the poststarthook is finished. This is used by the health check to be able to indicate // that the poststarthook is finished done := make(chan struct{}) - s.AddHealthzChecks(postStartHookHealthz{name: "poststarthook/" + name, done: done}) + if err := s.AddHealthzChecks(postStartHookHealthz{name: "poststarthook/" + name, done: done}); err != nil { + return err + } s.postStartHooks[name] = postStartHookEntry{hook: hook, done: done} return nil diff --git a/staging/src/k8s.io/apiserver/pkg/server/options/serving_test.go b/staging/src/k8s.io/apiserver/pkg/server/options/serving_test.go index 73375bb70c2..3cb270a02af 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/options/serving_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/options/serving_test.go @@ -496,7 +496,7 @@ func TestServerRunWithSNI(t *testing.T) { // add poststart hook to know when the server is up. startedCh := make(chan struct{}) - s.AddPostStartHook("test-notifier", func(context PostStartHookContext) error { + s.AddPostStartHookOrDie("test-notifier", func(context PostStartHookContext) error { close(startedCh) return nil }) diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go index e31f0e39b66..a135cd93ecb 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go @@ -191,16 +191,16 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg s.serviceResolver, ) - s.GenericAPIServer.AddPostStartHook("start-kube-aggregator-informers", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("start-kube-aggregator-informers", func(context genericapiserver.PostStartHookContext) error { informerFactory.Start(context.StopCh) c.GenericConfig.SharedInformerFactory.Start(context.StopCh) return nil }) - s.GenericAPIServer.AddPostStartHook("apiservice-registration-controller", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("apiservice-registration-controller", func(context genericapiserver.PostStartHookContext) error { go apiserviceRegistrationController.Run(context.StopCh) return nil }) - s.GenericAPIServer.AddPostStartHook("apiservice-status-available-controller", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("apiservice-status-available-controller", func(context genericapiserver.PostStartHookContext) error { // if we end up blocking for long periods of time, we may need to increase threadiness. go availableController.Run(5, context.StopCh) return nil @@ -219,7 +219,7 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg } s.openAPIAggregationController = openapicontroller.NewAggregationController(&specDownloader, openAPIAggregator) - s.GenericAPIServer.AddPostStartHook("apiservice-openapi-controller", func(context genericapiserver.PostStartHookContext) error { + s.GenericAPIServer.AddPostStartHookOrDie("apiservice-openapi-controller", func(context genericapiserver.PostStartHookContext) error { go s.openAPIAggregationController.Run(context.StopCh) return nil }) diff --git a/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/start.go b/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/start.go index e492925353e..36416b25cdc 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/start.go +++ b/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/start.go @@ -142,7 +142,7 @@ func (o WardleServerOptions) RunWardleServer(stopCh <-chan struct{}) error { return err } - server.GenericAPIServer.AddPostStartHook("start-sample-server-informers", func(context genericapiserver.PostStartHookContext) error { + server.GenericAPIServer.AddPostStartHookOrDie("start-sample-server-informers", func(context genericapiserver.PostStartHookContext) error { config.GenericConfig.SharedInformerFactory.Start(context.StopCh) o.SharedInformerFactory.Start(context.StopCh) return nil