From b77610942769311fbdf16832a9404fae345de382 Mon Sep 17 00:00:00 2001 From: Abu Kashem Date: Mon, 15 Mar 2021 11:48:17 -0400 Subject: [PATCH] apf: handle error from PollImmediateUntil We should not attempt creation of mandatory objects if ensuring the suggested configuration resulted in an error. We rely on the presence of the "exempt" priority level configuration object in the cluster to indicate whether we should ensure suggested configuration. --- .../flowcontrol/rest/storage_flowcontrol.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pkg/registry/flowcontrol/rest/storage_flowcontrol.go b/pkg/registry/flowcontrol/rest/storage_flowcontrol.go index 5a46d0655b2..f968068b46e 100644 --- a/pkg/registry/flowcontrol/rest/storage_flowcontrol.go +++ b/pkg/registry/flowcontrol/rest/storage_flowcontrol.go @@ -105,7 +105,7 @@ func (p RESTStorageProvider) PostStartHook() (string, genericapiserver.PostStart flowcontrolClientSet := flowcontrolclient.NewForConfigOrDie(hookContext.LoopbackClientConfig) go func() { const retryCreatingSuggestedSettingsInterval = time.Second - _ = wait.PollImmediateUntil( + err := wait.PollImmediateUntil( retryCreatingSuggestedSettingsInterval, func() (bool, error) { should, err := shouldEnsureSuggested(flowcontrolClientSet) @@ -127,6 +127,17 @@ func (p RESTStorageProvider) PostStartHook() (string, genericapiserver.PostStart return true, nil }, hookContext.StopCh) + if err != nil { + klog.ErrorS(err, "Ensuring suggested configuration failed") + + // We should not attempt creation of mandatory objects if ensuring the suggested + // configuration resulted in an error. + // This only happens when the stop channel is closed. + // We rely on the presence of the "exempt" priority level configuration object in the cluster + // to indicate whether we should ensure suggested configuration. + return + } + const retryCreatingMandatorySettingsInterval = time.Minute _ = wait.PollImmediateUntil( retryCreatingMandatorySettingsInterval, @@ -134,7 +145,7 @@ func (p RESTStorageProvider) PostStartHook() (string, genericapiserver.PostStart if err := upgrade( flowcontrolClientSet, flowcontrolbootstrap.MandatoryFlowSchemas, - // Note: the "exempt" priority-level is supposed tobe the last item in the pre-defined + // Note: the "exempt" priority-level is supposed to be the last item in the pre-defined // list, so that a crash in the midst of the first kube-apiserver startup does not prevent // the full initial set of objects from being created. flowcontrolbootstrap.MandatoryPriorityLevelConfigurations,