From fd59300a3b0f9bc355e8327d73094d381669ddb4 Mon Sep 17 00:00:00 2001 From: Jeff Vance Date: Mon, 23 Jan 2017 12:22:57 -0800 Subject: [PATCH] add some resillency to the new volume-server func --- test/e2e/volumes.go | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/test/e2e/volumes.go b/test/e2e/volumes.go index c5cf1d66016..0735ab7dc4d 100644 --- a/test/e2e/volumes.go +++ b/test/e2e/volumes.go @@ -130,7 +130,8 @@ func startVolumeServer(client clientset.Interface, config VolumeTestConfig) *v1. i++ } - By(fmt.Sprint("creating ", config.prefix, " server pod")) + serverPodName := fmt.Sprintf("%s-server", config.prefix) + By(fmt.Sprint("creating ", serverPodName, " pod")) privileged := new(bool) *privileged = true serverPod := &v1.Pod{ @@ -139,16 +140,16 @@ func startVolumeServer(client clientset.Interface, config VolumeTestConfig) *v1. APIVersion: "v1", }, ObjectMeta: metav1.ObjectMeta{ - Name: config.prefix + "-server", + Name: serverPodName, Labels: map[string]string{ - "role": config.prefix + "-server", + "role": serverPodName, }, }, Spec: v1.PodSpec{ Containers: []v1.Container{ { - Name: config.prefix + "-server", + Name: serverPodName, Image: config.serverImage, SecurityContext: &v1.SecurityContext{ Privileged: privileged, @@ -161,17 +162,31 @@ func startVolumeServer(client clientset.Interface, config VolumeTestConfig) *v1. Volumes: volumes, }, } - serverPod, err := podClient.Create(serverPod) - framework.ExpectNoError(err, "Failed to create %s pod: %v", serverPod.Name, err) + var pod *v1.Pod + serverPod, err := podClient.Create(serverPod) + // ok if the server pod already exists. TODO: make this controllable by callers + if err != nil { + if apierrs.IsAlreadyExists(err) { + framework.Logf("Ignore \"already-exists\" error, re-get pod...") + By(fmt.Sprintf("re-getting the %q server pod", serverPodName)) + serverPod, err = podClient.Get(serverPodName, metav1.GetOptions{}) + framework.ExpectNoError(err, "Cannot re-get the server pod %q: %v", serverPodName, err) + pod = serverPod + } else { + framework.ExpectNoError(err, "Failed to create %q pod: %v", serverPodName, err) + } + } framework.ExpectNoError(framework.WaitForPodRunningInNamespace(client, serverPod)) - By("locating the server pod") - pod, err := podClient.Get(serverPod.Name, metav1.GetOptions{}) - framework.ExpectNoError(err, "Cannot locate the server pod %v: %v", serverPod.Name, err) + if pod == nil { + By(fmt.Sprintf("locating the %q server pod", serverPodName)) + pod, err = podClient.Get(serverPodName, metav1.GetOptions{}) + framework.ExpectNoError(err, "Cannot locate the server pod %q: %v", serverPodName, err) + By("sleeping a bit to give the server time to start") + time.Sleep(20 * time.Second) + } - By("sleeping a bit to give the server time to start") - time.Sleep(20 * time.Second) return pod }