From b285e27ffa630caa091302335c923ededa4e0e7f Mon Sep 17 00:00:00 2001 From: Maciej Pytel Date: Fri, 24 Mar 2017 11:45:25 +0100 Subject: [PATCH] Fix flaky cluster-autoscaler e2e --- test/e2e/cluster_size_autoscaling.go | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/test/e2e/cluster_size_autoscaling.go b/test/e2e/cluster_size_autoscaling.go index 23bea8f21d0..8b34a80b0ae 100644 --- a/test/e2e/cluster_size_autoscaling.go +++ b/test/e2e/cluster_size_autoscaling.go @@ -26,6 +26,7 @@ import ( "strings" "time" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/util/intstr" @@ -740,11 +741,25 @@ func runReplicatedPodOnEachNode(f *framework.Framework, nodes []v1.Node, id stri if err != nil { return err } - *rc.Spec.Replicas = int32(i + 1) - rc, err = f.ClientSet.Core().ReplicationControllers(f.Namespace.Name).Update(rc) - if err != nil { - return err + + // Update replicas count, to create new pods that will be allocated on node + // (we retry 409 errors in case rc reference got out of sync) + for j := 0; j < 3; j++ { + *rc.Spec.Replicas = int32(i + 1) + rc, err = f.ClientSet.Core().ReplicationControllers(f.Namespace.Name).Update(rc) + if err == nil { + break + } + if !errors.IsConflict(err) { + return err + } + glog.Warningf("Got 409 conflict when trying to scale RC, retries left: %v", 3-j) + rc, err = f.ClientSet.Core().ReplicationControllers(f.Namespace.Name).Get(id, metav1.GetOptions{}) + if err != nil { + return err + } } + err = wait.PollImmediate(5*time.Second, podTimeout, func() (bool, error) { rc, err = f.ClientSet.Core().ReplicationControllers(f.Namespace.Name).Get(id, metav1.GetOptions{}) if err != nil || rc.Status.ReadyReplicas < int32(i+1) {