From 8a0377ef02d35ffe1ea855bdb7b67ce750466ee0 Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Mon, 14 Feb 2022 16:55:43 +0100 Subject: [PATCH] e2e: retry creating StorageClass in case of error There have been errors while CephFS tests were running, like: failed to create storageclass: etcdserver: request timed out When retrying to create the StorageClass, the e2e tests are expected to continue and (hopefully) succeed. Signed-off-by: Niels de Vos --- e2e/cephfs_helper.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/e2e/cephfs_helper.go b/e2e/cephfs_helper.go index 3b4c5630d..0ffd1e4e8 100644 --- a/e2e/cephfs_helper.go +++ b/e2e/cephfs_helper.go @@ -22,10 +22,13 @@ import ( "fmt" "regexp" "strings" + "time" snapapi "github.com/kubernetes-csi/external-snapshotter/client/v4/apis/volumesnapshot/v1" v1 "k8s.io/api/core/v1" + apierrs "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/test/e2e/framework" e2elog "k8s.io/kubernetes/test/e2e/framework/log" @@ -100,9 +103,24 @@ func createCephfsStorageClass( sc.Parameters["clusterID"] = strings.Trim(fsID, "\n") } sc.Namespace = cephCSINamespace - _, err = c.StorageV1().StorageClasses().Create(context.TODO(), &sc, metav1.CreateOptions{}) - return err + timeout := time.Duration(deployTimeout) * time.Minute + return wait.PollImmediate(poll, timeout, func() (bool, error) { + _, err = c.StorageV1().StorageClasses().Create(context.TODO(), &sc, metav1.CreateOptions{}) + if err != nil { + e2elog.Logf("error creating StorageClass %q in namespace %q: %v", sc.Name, sc.Namespace, err) + if isRetryableAPIError(err) { + return false, nil + } + if apierrs.IsNotFound(err) { + return false, nil + } + + return false, fmt.Errorf("failed to create StorageClass %q: %w", sc.Name, err) + } + + return true, nil + }) } func createCephfsSecret(f *framework.Framework, secretName, userName, userKey string) error {