From bd9260711fa09bfdfe95a94c27ab14b95a95cb8a Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Sun, 20 Oct 2019 16:26:18 -0400 Subject: [PATCH] deployment: Ignore namespace termination errors when creating replicasets Instead of reporting an event or displaying an error, simply exit when the namespace is being terminated. This reduces the amount of controller churn on namespace shutdown. Unlike other controllers, we drop the replica set create error very late (in the queue handleErr) in order to avoid changing the structure of the controller substantially. --- pkg/controller/deployment/deployment_controller.go | 2 +- pkg/controller/deployment/sync.go | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/controller/deployment/deployment_controller.go b/pkg/controller/deployment/deployment_controller.go index b04ded1b288..10068fd6cd5 100644 --- a/pkg/controller/deployment/deployment_controller.go +++ b/pkg/controller/deployment/deployment_controller.go @@ -475,7 +475,7 @@ func (dc *DeploymentController) processNextWorkItem() bool { } func (dc *DeploymentController) handleErr(err error, key interface{}) { - if err == nil { + if err == nil || errors.HasStatusCause(err, v1.NamespaceTerminatingCause) { dc.queue.Forget(key) return } diff --git a/pkg/controller/deployment/sync.go b/pkg/controller/deployment/sync.go index b0a6e7e3f14..a208fd0cfb5 100644 --- a/pkg/controller/deployment/sync.go +++ b/pkg/controller/deployment/sync.go @@ -256,6 +256,9 @@ func (dc *DeploymentController) getNewReplicaSet(d *apps.Deployment, rsList, old klog.V(2).Infof("Found a hash collision for deployment %q - bumping collisionCount (%d->%d) to resolve it", d.Name, preCollisionCount, *d.Status.CollisionCount) } return nil, err + case errors.HasStatusCause(err, v1.NamespaceTerminatingCause): + // if the namespace is terminating, all subsequent creates will fail and we can safely do nothing + return nil, err case err != nil: msg := fmt.Sprintf("Failed to create new replica set %q: %v", newRS.Name, err) if deploymentutil.HasProgressDeadline(d) {