diff --git a/pkg/registry/core/namespace/storage/storage.go b/pkg/registry/core/namespace/storage/storage.go index 82f54b72a1..6b7bf0ec5c 100644 --- a/pkg/registry/core/namespace/storage/storage.go +++ b/pkg/registry/core/namespace/storage/storage.go @@ -139,7 +139,6 @@ func (r *REST) Delete(ctx context.Context, name string, options *metav1.DeleteOp } if options.Preconditions.UID == nil { options.Preconditions.UID = &namespace.UID - options.Preconditions.ResourceVersion = &namespace.ResourceVersion } else if *options.Preconditions.UID != namespace.UID { err = apierrors.NewConflict( api.Resource("namespaces"), @@ -147,6 +146,9 @@ func (r *REST) Delete(ctx context.Context, name string, options *metav1.DeleteOp fmt.Errorf("Precondition failed: UID in precondition: %v, UID in object meta: %v", *options.Preconditions.UID, namespace.UID), ) return nil, false, err + } + if options.Preconditions.ResourceVersion == nil { + options.Preconditions.ResourceVersion = &namespace.ResourceVersion } else if *options.Preconditions.ResourceVersion != namespace.ResourceVersion { err = apierrors.NewConflict( api.Resource("namespaces"), diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/etcd.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/etcd.go index fe7c3bafd6..f44a521b21 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/etcd.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition/etcd.go @@ -84,7 +84,6 @@ func (r *REST) Delete(ctx context.Context, name string, options *metav1.DeleteOp } if options.Preconditions.UID == nil { options.Preconditions.UID = &crd.UID - options.Preconditions.ResourceVersion = &crd.ResourceVersion } else if *options.Preconditions.UID != crd.UID { err = apierrors.NewConflict( apiextensions.Resource("customresourcedefinitions"), @@ -92,6 +91,9 @@ func (r *REST) Delete(ctx context.Context, name string, options *metav1.DeleteOp fmt.Errorf("Precondition failed: UID in precondition: %v, UID in object meta: %v", *options.Preconditions.UID, crd.UID), ) return nil, false, err + } + if options.Preconditions.ResourceVersion == nil { + options.Preconditions.ResourceVersion = &crd.ResourceVersion } else if *options.Preconditions.ResourceVersion != crd.ResourceVersion { err = apierrors.NewConflict( apiextensions.Resource("customresourcedefinitions"), diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go index 9da8008331..910f9bd273 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go @@ -228,7 +228,7 @@ func NewUIDPreconditions(uid string) *Preconditions { return &Preconditions{UID: &u} } -// NewPreconditionDeleteOptionsWithResourceVersion returns a DeleteOptions with a UID precondition set. +// NewPreconditionDeleteOptionsWithResourceVersion returns a DeleteOptions with a ResourceVersion precondition set. func NewPreconditionDeleteOptionsWithResourceVersion(rv string) *DeleteOptions { p := Preconditions{ResourceVersion: &rv} return &DeleteOptions{Preconditions: &p} diff --git a/staging/src/k8s.io/apiserver/pkg/registry/rest/delete.go b/staging/src/k8s.io/apiserver/pkg/registry/rest/delete.go index 0713464e00..16c9e1b40d 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/rest/delete.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/rest/delete.go @@ -82,7 +82,7 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx context.Context, obj runtime. return false, false, errors.NewConflict(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, objectMeta.GetName(), fmt.Errorf("the UID in the precondition (%s) does not match the UID in record (%s). The object might have been deleted and then recreated", *options.Preconditions.UID, objectMeta.GetUID())) } if options.Preconditions.ResourceVersion != nil && *options.Preconditions.ResourceVersion != objectMeta.GetResourceVersion() { - return false, false, errors.NewConflict(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, objectMeta.GetName(), fmt.Errorf("the ResourceVersion in the precondition (%s) does not match the ResourceVersion in record (%s). The object might have been deleted and then recreated", *options.Preconditions.ResourceVersion, objectMeta.GetResourceVersion())) + return false, false, errors.NewConflict(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, objectMeta.GetName(), fmt.Errorf("the ResourceVersion in the precondition (%s) does not match the ResourceVersion in record (%s). The object might have been modified", *options.Preconditions.ResourceVersion, objectMeta.GetResourceVersion())) } } gracefulStrategy, ok := strategy.(RESTGracefulDeleteStrategy)