From f666e87217f3ffd950ade47fc56d601f20960a2f Mon Sep 17 00:00:00 2001 From: Janet Kuo Date: Fri, 4 Mar 2016 16:32:32 -0800 Subject: [PATCH] Filter out inactive pods first when determining if it's available --- pkg/controller/controller_utils.go | 10 +++++++--- pkg/util/deployment/deployment.go | 4 ++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pkg/controller/controller_utils.go b/pkg/controller/controller_utils.go index 00e64c7528c..cf07cd22842 100644 --- a/pkg/controller/controller_utils.go +++ b/pkg/controller/controller_utils.go @@ -490,9 +490,7 @@ func FilterActivePods(pods []api.Pod) []*api.Pod { var result []*api.Pod for i := range pods { p := pods[i] - if api.PodSucceeded != p.Status.Phase && - api.PodFailed != p.Status.Phase && - p.DeletionTimestamp == nil { + if IsPodActive(p) { result = append(result, &p) } else { glog.V(4).Infof("Ignoring inactive pod %v/%v in state %v, deletion time %v", @@ -502,6 +500,12 @@ func FilterActivePods(pods []api.Pod) []*api.Pod { return result } +func IsPodActive(p api.Pod) bool { + return api.PodSucceeded != p.Status.Phase && + api.PodFailed != p.Status.Phase && + p.DeletionTimestamp == nil +} + // FilterActiveReplicaSets returns replica sets that have (or at least ought to have) pods. func FilterActiveReplicaSets(replicaSets []*extensions.ReplicaSet) []*extensions.ReplicaSet { active := []*extensions.ReplicaSet{} diff --git a/pkg/util/deployment/deployment.go b/pkg/util/deployment/deployment.go index 957029c5748..244049b027c 100644 --- a/pkg/util/deployment/deployment.go +++ b/pkg/util/deployment/deployment.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/util/integer" intstrutil "k8s.io/kubernetes/pkg/util/intstr" @@ -346,6 +347,9 @@ func getReadyPodsCount(pods []api.Pod, minReadySeconds int) int { } func IsPodAvailable(pod *api.Pod, minReadySeconds int) bool { + if !controller.IsPodActive(*pod) { + return false + } // Check if we've passed minReadySeconds since LastTransitionTime // If so, this pod is ready for _, c := range pod.Status.Conditions {