From 38c5da01ad6ae3b7c9d8eb474288171939f80232 Mon Sep 17 00:00:00 2001 From: Yecheng Fu Date: Wed, 29 Apr 2020 17:02:07 +0800 Subject: [PATCH] regenerate namespace name if the name is already taken --- test/e2e/framework/util.go | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 11ab8e3b5ee..c5f7959c66f 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -305,25 +305,6 @@ func WaitForDefaultServiceAccountInNamespace(c clientset.Interface, namespace st return waitForServiceAccountInNamespace(c, namespace, "default", ServiceAccountProvisionTimeout) } -// findAvailableNamespaceName random namespace name starting with baseName. -func findAvailableNamespaceName(baseName string, c clientset.Interface) (string, error) { - var name string - err := wait.PollImmediate(Poll, 30*time.Second, func() (bool, error) { - name = fmt.Sprintf("%v-%v", baseName, RandomSuffix()) - _, err := c.CoreV1().Namespaces().Get(context.TODO(), name, metav1.GetOptions{}) - if err == nil { - // Already taken - return false, nil - } - if apierrors.IsNotFound(err) { - return true, nil - } - Logf("Unexpected error while getting namespace: %v", err) - return false, nil - }) - return name, err -} - // CreateTestingNS should be used by every test, note that we append a common prefix to the provided test name. // Please see NewFramework instead of using this directly. func CreateTestingNS(baseName string, c clientset.Interface, labels map[string]string) (*v1.Namespace, error) { @@ -335,10 +316,7 @@ func CreateTestingNS(baseName string, c clientset.Interface, labels map[string]s // We don't use ObjectMeta.GenerateName feature, as in case of API call // failure we don't know whether the namespace was created and what is its // name. - name, err := findAvailableNamespaceName(baseName, c) - if err != nil { - return nil, err - } + name := fmt.Sprintf("%v-%v", baseName, RandomSuffix()) namespaceObj := &v1.Namespace{ ObjectMeta: metav1.ObjectMeta{ @@ -354,7 +332,13 @@ func CreateTestingNS(baseName string, c clientset.Interface, labels map[string]s var err error got, err = c.CoreV1().Namespaces().Create(context.TODO(), namespaceObj, metav1.CreateOptions{}) if err != nil { - Logf("Unexpected error while creating namespace: %v", err) + if apierrors.IsAlreadyExists(err) { + // regenerate on conflict + Logf("Namespace name %q was already taken, generate a new name and retry", namespaceObj.Name) + namespaceObj.Name = fmt.Sprintf("%v-%v", baseName, RandomSuffix()) + } else { + Logf("Unexpected error while creating namespace: %v", err) + } return false, nil } return true, nil