From 79ec8ae6546a1c774372f1f0689a55066429b81e Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Thu, 24 Nov 2016 01:40:28 -0500 Subject: [PATCH] hold namespaces briefly before processing deletion --- pkg/controller/namespace/namespace_controller.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pkg/controller/namespace/namespace_controller.go b/pkg/controller/namespace/namespace_controller.go index abfee82a5dc..de705a557d4 100644 --- a/pkg/controller/namespace/namespace_controller.go +++ b/pkg/controller/namespace/namespace_controller.go @@ -35,6 +35,16 @@ import ( "github.com/golang/glog" ) +const ( + // namespaceDeletionGracePeriod is the time period to wait before processing a received namespace event. + // This allows time for the following to occur: + // * lifecycle admission plugins on HA apiservers to also observe a namespace + // deletion and prevent new objects from being created in the terminating namespace + // * non-leader etcd servers to observe last-minute object creations in a namespace + // so this controller's cleanup can actually clean up all objects + namespaceDeletionGracePeriod = 5 * time.Second +) + // NamespaceController is responsible for performing actions dependent upon a namespace phase type NamespaceController struct { // client that purges namespace content, must have list/delete privileges on all content @@ -132,7 +142,9 @@ func (nm *NamespaceController) enqueueNamespace(obj interface{}) { glog.Errorf("Couldn't get key for object %+v: %v", obj, err) return } - nm.queue.Add(key) + // delay processing namespace events to allow HA api servers to observe namespace deletion, + // and HA etcd servers to observe last minute object creations inside the namespace + nm.queue.AddAfter(key, namespaceDeletionGracePeriod) } // worker processes the queue of namespace objects.