diff --git a/test/e2e/scalability/BUILD b/test/e2e/scalability/BUILD index 6221357dc41..d3858eef0b8 100644 --- a/test/e2e/scalability/BUILD +++ b/test/e2e/scalability/BUILD @@ -23,6 +23,7 @@ go_library( "//vendor/github.com/onsi/ginkgo:go_default_library", "//vendor/github.com/onsi/gomega:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library", diff --git a/test/e2e/scalability/density.go b/test/e2e/scalability/density.go index 0fd3f958e8a..35180b61cf4 100644 --- a/test/e2e/scalability/density.go +++ b/test/e2e/scalability/density.go @@ -26,6 +26,7 @@ import ( "time" "k8s.io/api/core/v1" + apierrs "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" @@ -53,6 +54,7 @@ const ( MinSaturationThreshold = 2 * time.Minute MinPodsPerSecondThroughput = 8 DensityPollInterval = 10 * time.Second + MaxLatencyPodCreationTries = 5 ) // Maximum container failures this test tolerates before failing. @@ -819,8 +821,13 @@ func createRunningPodFromRC(wg *sync.WaitGroup, c clientset.Interface, name, ns, }, }, } - _, err := c.Core().ReplicationControllers(ns).Create(rc) - framework.ExpectNoError(err) + for attempt := 1; attempt <= MaxLatencyPodCreationTries; attempt++ { + _, err := c.Core().ReplicationControllers(ns).Create(rc) + if err == nil || apierrs.IsAlreadyExists(err) { + break + } + Expect(attempt < MaxLatencyPodCreationTries && framework.IsRetryableAPIError(err)).To(Equal(true)) + } framework.ExpectNoError(framework.WaitForControlledPodsRunning(c, ns, name, api.Kind("ReplicationController"))) framework.Logf("Found pod '%s' running", name) }