From 0253397fbd436481c9c00c3c3d3f0e6c583a7563 Mon Sep 17 00:00:00 2001 From: Maciej Szulik Date: Wed, 19 Oct 2022 17:12:15 +0200 Subject: [PATCH] Use goroutine to speed up volume clenaups This removes WaitTimeoutForPodNoLongerRunningOrNotFoundInNamespace introduced in f2b9479f8ea14de116179636bc653af30675d45c and changes the test to use goroutines to speed up the cleanups. --- test/e2e/framework/pod/wait.go | 19 ------------------- test/e2e/storage/ubernetes_lite_volumes.go | 22 +++++++++++++++++----- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/test/e2e/framework/pod/wait.go b/test/e2e/framework/pod/wait.go index 1305416d135..24ba76805df 100644 --- a/test/e2e/framework/pod/wait.go +++ b/test/e2e/framework/pod/wait.go @@ -504,25 +504,6 @@ func WaitForPodNameUnschedulableInNamespace(c clientset.Interface, podName, name }) } -// WaitTimeoutForPodNoLongerRunningOrNotFoundInNamespace waits default amount of time (defaultPodDeletionTimeout) -// for the specified pod to stop running or disappear. Returns an error if timeout occurs first. -func WaitTimeoutForPodNoLongerRunningOrNotFoundInNamespace(c clientset.Interface, podName, namespace string) error { - return wait.PollImmediate(poll, defaultPodDeletionTimeout, func() (bool, error) { - pod, err := c.CoreV1().Pods(namespace).Get(context.TODO(), podName, metav1.GetOptions{}) - if apierrors.IsNotFound(err) { - return true, nil - } - if err != nil { - return handleWaitingAPIError(err, true, "getting pod %s", podIdentifier(namespace, podName)) - } - switch pod.Status.Phase { - case v1.PodFailed, v1.PodSucceeded: - return true, nil - } - return false, nil - }) -} - // WaitForPodNameRunningInNamespace waits default amount of time (PodStartTimeout) for the specified pod to become running. // Returns an error if timeout occurs first, or pod goes in to failed state. func WaitForPodNameRunningInNamespace(c clientset.Interface, podName, namespace string) error { diff --git a/test/e2e/storage/ubernetes_lite_volumes.go b/test/e2e/storage/ubernetes_lite_volumes.go index 41990115f28..9a38d03b7f9 100644 --- a/test/e2e/storage/ubernetes_lite_volumes.go +++ b/test/e2e/storage/ubernetes_lite_volumes.go @@ -19,10 +19,13 @@ package storage import ( "context" "fmt" + "sync" "github.com/onsi/ginkgo/v2" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + utilerrors "k8s.io/apimachinery/pkg/util/errors" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/test/e2e/framework" e2enode "k8s.io/kubernetes/test/e2e/framework/node" @@ -92,12 +95,21 @@ func PodsUseStaticPVsOrFail(f *framework.Framework, podCount int, image string) for _, config := range configs { e2epod.DeletePodOrFail(c, ns, config.pod.Name) } - for _, config := range configs { - e2epod.WaitTimeoutForPodNoLongerRunningOrNotFoundInNamespace(c, config.pod.Name, ns) - e2epv.PVPVCCleanup(c, ns, config.pv, config.pvc) - err = e2epv.DeletePVSource(config.pvSource) - framework.ExpectNoError(err) + var wg sync.WaitGroup + wg.Add(len(configs)) + for i := range configs { + go func(config *staticPVTestConfig) { + defer ginkgo.GinkgoRecover() + defer wg.Done() + err := e2epod.WaitForPodToDisappear(c, ns, config.pod.Name, labels.Everything(), framework.Poll, f.Timeouts.PodDelete) + framework.ExpectNoError(err, "while waiting for pod to disappear") + errs := e2epv.PVPVCCleanup(c, ns, config.pv, config.pvc) + framework.ExpectNoError(utilerrors.NewAggregate(errs), "while cleaning up PVs and PVCs") + err = e2epv.DeletePVSource(config.pvSource) + framework.ExpectNoError(err, "while deleting PVSource") + }(configs[i]) } + wg.Wait() }() for i, config := range configs {