Skip to content

Commit

Permalink
Merge pull request #1690 from fabriziopandini/start-webhooks-first
Browse files Browse the repository at this point in the history
馃悰 Start web hooks first
  • Loading branch information
k8s-ci-robot committed Nov 10, 2021
2 parents 43ea648 + 708d539 commit f8472ce
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions pkg/manager/internal.go
Expand Up @@ -425,11 +425,13 @@ func (cm *controllerManager) serveHealthProbes() {
cm.healthzStarted = true
}()

// Shutdown the server when stop is closed
<-cm.internalProceduresStop
if err := server.Shutdown(cm.shutdownCtx); err != nil {
cm.errChan <- err
}
go func() {
// Shutdown the server when stop is closed
<-cm.internalProceduresStop
if err := server.Shutdown(cm.shutdownCtx); err != nil {
cm.errChan <- err
}
}()
}

func (cm *controllerManager) Start(ctx context.Context) (err error) {
Expand Down Expand Up @@ -473,9 +475,14 @@ func (cm *controllerManager) Start(ctx context.Context) (err error) {

// Serve health probes
if cm.healthProbeListener != nil {
go cm.serveHealthProbes()
cm.serveHealthProbes()
}

// Webhooks MUST start before any cache is populated, otherwise there is a race condition
// between conversion webhooks and the cache sync (usually initial list) which causes the webhooks
// to never start because no cache can be populated.
cm.startWebhookRunnables()

go cm.startNonLeaderElectionRunnables()

go func() {
Expand Down Expand Up @@ -573,13 +580,10 @@ func (cm *controllerManager) waitForRunnableToEnd(shutdownCancel context.CancelF
return nil
}

func (cm *controllerManager) startNonLeaderElectionRunnables() {
func (cm *controllerManager) startWebhookRunnables() {
cm.mu.Lock()
defer cm.mu.Unlock()

// First start any webhook servers, which includes conversion, validation, and defaulting
// webhooks that are registered.
//
// WARNING: Webhooks MUST start before any cache is populated, otherwise there is a race condition
// between conversion webhooks and the cache sync (usually initial list) which causes the webhooks
// to never start because no cache can be populated.
Expand All @@ -588,6 +592,11 @@ func (cm *controllerManager) startNonLeaderElectionRunnables() {
cm.startRunnable(c)
}
}
}

func (cm *controllerManager) startNonLeaderElectionRunnables() {
cm.mu.Lock()
defer cm.mu.Unlock()

// Start and wait for caches.
cm.waitForCache(cm.internalCtx)
Expand Down

0 comments on commit f8472ce

Please sign in to comment.