From 2dc404fcb77826b74f4f6039db5a412f31c1d7ac Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Wed, 8 Feb 2017 15:25:53 -0800 Subject: [PATCH] Update REST Handler to return 202 for cascading deletion --- .../apiserver/pkg/endpoints/handlers/rest.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go index ac954e154f8..a129b0c667a 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go @@ -857,8 +857,10 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope RequestSco } trace.Step("About do delete object from database") + wasDeleted := true result, err := finishRequest(timeout, func() (runtime.Object, error) { - obj, _, err := r.Delete(ctx, name, options) + obj, deleted, err := r.Delete(ctx, name, options) + wasDeleted = deleted return obj, err }) if err != nil { @@ -867,12 +869,22 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope RequestSco } trace.Step("Object deleted from database") + status := http.StatusOK + // Return http.StatusAccepted if the resource was not deleted immediately and + // user requested cascading deletion by setting OrphanDependents=false. + // Note: We want to do this always if resource was not deleted immediately, but + // that will break existing clients. + // Other cases where resource is not instantly deleted are: namespace deletion + // and pod graceful deletion. + if !wasDeleted && options.OrphanDependents != nil && *options.OrphanDependents == false { + status = http.StatusAccepted + } // if the rest.Deleter returns a nil object, fill out a status. Callers may return a valid // object with the response. if result == nil { result = &metav1.Status{ Status: metav1.StatusSuccess, - Code: http.StatusOK, + Code: int32(status), Details: &metav1.StatusDetails{ Name: name, Kind: scope.Kind.Kind, @@ -887,7 +899,7 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope RequestSco } } } - responsewriters.WriteObject(http.StatusOK, scope.Kind.GroupVersion(), scope.Serializer, result, w, req.Request) + responsewriters.WriteObject(status, scope.Kind.GroupVersion(), scope.Serializer, result, w, req.Request) } }