From 937ef77257f8a8a7059916243497de7eee4fc764 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Sun, 20 Oct 2019 16:04:07 -0400 Subject: [PATCH] endpoints: If namespace is terminating, drop item immediately Avoid sending an event to the namespace that is being terminated, since it will be rejected. --- pkg/controller/endpoint/endpoints_controller.go | 5 +++++ pkg/controller/endpointslice/reconciler.go | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/pkg/controller/endpoint/endpoints_controller.go b/pkg/controller/endpoint/endpoints_controller.go index 77db49dfa68..625f68da217 100644 --- a/pkg/controller/endpoint/endpoints_controller.go +++ b/pkg/controller/endpoint/endpoints_controller.go @@ -506,6 +506,11 @@ func (e *EndpointController) syncService(key string) error { // 2. policy is misconfigured, in which case no service would function anywhere. // Given the frequency of 1, we log at a lower level. klog.V(5).Infof("Forbidden from creating endpoints: %v", err) + + // If the namespace is terminating, creates will continue to fail. Simply drop the item. + if errors.HasStatusCause(err, v1.NamespaceTerminatingCause) { + return nil + } } if createEndpoints { diff --git a/pkg/controller/endpointslice/reconciler.go b/pkg/controller/endpointslice/reconciler.go index a275896713e..4e9c6a6502a 100644 --- a/pkg/controller/endpointslice/reconciler.go +++ b/pkg/controller/endpointslice/reconciler.go @@ -23,6 +23,7 @@ import ( corev1 "k8s.io/api/core/v1" discovery "k8s.io/api/discovery/v1alpha1" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" @@ -150,6 +151,10 @@ func (r *reconciler) finalize( addTriggerTimeAnnotation(endpointSlice, triggerTime) _, err := r.client.DiscoveryV1alpha1().EndpointSlices(service.Namespace).Create(endpointSlice) if err != nil { + // If the namespace is terminating, creates will continue to fail. Simply drop the item. + if errors.HasStatusCause(err, corev1.NamespaceTerminatingCause) { + return nil + } errs = append(errs, fmt.Errorf("Error creating EndpointSlice for Service %s/%s: %v", service.Namespace, service.Name, err)) } }