From e8e87cb1c2b70f7b23b142810d38299b7363ab6e Mon Sep 17 00:00:00 2001 From: Andy Goldstein Date: Thu, 18 May 2017 12:01:40 -0400 Subject: [PATCH] NS controller: don't stop deleting GVRs on error If the namespace controller encounters an error trying to delete a single GroupVersionResource, add the error to an aggregated list of errors and continue attempting to delete all the GroupVersionResources instead of stopping at the first error. Return the aggregated error list (if any) when done. This allows us to delete as much of the content in the namespace as we can in each pass. --- pkg/controller/namespace/deletion/BUILD | 1 + .../deletion/namespaced_resources_deleter.go | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pkg/controller/namespace/deletion/BUILD b/pkg/controller/namespace/deletion/BUILD index c4405ee78fa..af0663379f3 100644 --- a/pkg/controller/namespace/deletion/BUILD +++ b/pkg/controller/namespace/deletion/BUILD @@ -20,6 +20,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/dynamic:go_default_library", diff --git a/pkg/controller/namespace/deletion/namespaced_resources_deleter.go b/pkg/controller/namespace/deletion/namespaced_resources_deleter.go index 2efad6a51e2..7920173b43b 100644 --- a/pkg/controller/namespace/deletion/namespaced_resources_deleter.go +++ b/pkg/controller/namespace/deletion/namespaced_resources_deleter.go @@ -28,11 +28,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" + utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/kubernetes/pkg/api/v1" - // "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" + "k8s.io/kubernetes/pkg/api/v1" v1clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" ) @@ -504,15 +504,21 @@ func (d *namespacedResourcesDeleter) deleteAllContent( if err != nil { return estimate, err } + var errs []error for gvr := range groupVersionResources { gvrEstimate, err := d.deleteAllContentForGroupVersionResource(gvr, namespace, namespaceDeletedAt) if err != nil { - return estimate, err + // If there is an error, hold on to it but proceed with all the remaining + // groupVersionResources. + errs = append(errs, err) } if gvrEstimate > estimate { estimate = gvrEstimate } } + if len(errs) > 0 { + return estimate, utilerrors.NewAggregate(errs) + } glog.V(4).Infof("namespace controller - deleteAllContent - namespace: %s, estimate: %v", namespace, estimate) return estimate, nil }