Merge pull request #84122 from smarterclayton/delete_success

storage: Deleting a namespace while spec.finalizers pending should not error
This commit is contained in:
Kubernetes Prow Robot 2019-10-23 12:51:10 -07:00 committed by GitHub
commit 748a866d56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 6 deletions

View File

@ -238,8 +238,7 @@ func (r *REST) Delete(ctx context.Context, name string, deleteValidation rest.Va
// prior to final deletion, we must ensure that finalizers is empty
if len(namespace.Spec.Finalizers) != 0 {
err = apierrors.NewConflict(api.Resource("namespaces"), namespace.Name, fmt.Errorf("The system is ensuring all content is removed from this namespace. Upon completion, this namespace will automatically be purged by the system."))
return nil, false, err
return namespace, false, nil
}
return r.store.Delete(ctx, name, deleteValidation, options)
}

View File

@ -165,12 +165,18 @@ func TestDeleteNamespaceWithIncompleteFinalizers(t *testing.T) {
if err := storage.store.Storage.Create(ctx, key, namespace, nil, 0, false); err != nil {
t.Fatalf("unexpected error: %v", err)
}
if _, _, err := storage.Delete(ctx, "foo", rest.ValidateAllObjectFunc, nil); err == nil {
t.Errorf("unexpected no error")
obj, immediate, err := storage.Delete(ctx, "foo", rest.ValidateAllObjectFunc, nil)
if err != nil {
t.Fatalf("unexpected error")
}
if immediate {
t.Fatalf("unexpected immediate flag")
}
if ns, ok := obj.(*api.Namespace); !ok || obj == nil || ns == nil || ns.Name != namespace.Name {
t.Fatalf("object not returned by delete")
}
// should still exist
_, err := storage.Get(ctx, "foo", &metav1.GetOptions{})
if err != nil {
if _, err := storage.Get(ctx, "foo", &metav1.GetOptions{}); err != nil {
t.Errorf("unexpected error: %v", err)
}
}