diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/storageversion.go b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/storageversion.go index 9b164957c84..265cded2ec9 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/storageversion.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/storageversion.go @@ -21,6 +21,8 @@ import ( "fmt" "net/http" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" "k8s.io/apiserver/pkg/endpoints/request" @@ -35,7 +37,7 @@ import ( // 2. read requests, // 3. write requests to the storageversion API, // 4. resources whose StorageVersion is not pending update, including non-persisted resources. -func WithStorageVersionPrecondition(handler http.Handler, svm storageversion.Manager) http.Handler { +func WithStorageVersionPrecondition(handler http.Handler, svm storageversion.Manager, s runtime.NegotiatedSerializer) http.Handler { if svm == nil { // TODO(roycaihw): switch to warning after the feature graduate to beta/GA klog.V(2).Infof("Storage Version barrier is disabled") @@ -75,6 +77,7 @@ func WithStorageVersionPrecondition(handler http.Handler, svm storageversion.Man return } - responsewriters.ServiceUnavailabeError(w, req, errors.New(fmt.Sprintf("wait for storage version registration to complete for resource: %v, last seen error: %v", gr, svm.LastUpdateError(gr)))) + gv := schema.GroupVersion{requestInfo.APIGroup, requestInfo.APIVersion} + responsewriters.ErrorNegotiated(apierrors.NewServiceUnavailable(fmt.Sprintf("wait for storage version registration to complete for resource: %v, last seen error: %v", gr, svm.LastUpdateError(gr))), s, gv, w, req) }) } diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/errors.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/errors.go index ea7387537f6..d13bee4d223 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/errors.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/errors.go @@ -76,10 +76,3 @@ func InternalError(w http.ResponseWriter, req *http.Request, err error) { http.StatusInternalServerError) utilruntime.HandleError(err) } - -// ServiceUnavailabeError renders a simple internal error -func ServiceUnavailabeError(w http.ResponseWriter, req *http.Request, err error) { - http.Error(w, sanitizer.Replace(fmt.Sprintf("Service Unavailable: %q: %v", req.RequestURI, err)), - http.StatusServiceUnavailable) - utilruntime.HandleError(err) -} diff --git a/staging/src/k8s.io/apiserver/pkg/server/config.go b/staging/src/k8s.io/apiserver/pkg/server/config.go index c14759f419d..172a341cac7 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/config.go +++ b/staging/src/k8s.io/apiserver/pkg/server/config.go @@ -712,7 +712,7 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G func BuildHandlerChainWithStorageVersionPrecondition(apiHandler http.Handler, c *Config) http.Handler { // WithStorageVersionPrecondition needs the WithRequestInfo to run first - handler := genericapifilters.WithStorageVersionPrecondition(apiHandler, c.StorageVersionManager) + handler := genericapifilters.WithStorageVersionPrecondition(apiHandler, c.StorageVersionManager, c.Serializer) return DefaultBuildHandlerChain(handler, c) }