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.