Merge pull request #93618 from Jiawei0227/e2e-csi-mock-flaky

Fix flaky test: wait for mock CSI Driver bringup to perform e2e test
This commit is contained in:
Kubernetes Prow Robot 2020-08-10 15:41:59 -07:00 committed by GitHub
commit da5ec168e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 5 deletions

View File

@ -151,11 +151,16 @@ var _ = utils.SIGDescribe("CSI mock volume", func() {
if tp.registerDriver { if tp.registerDriver {
err = waitForCSIDriver(cs, m.config.GetUniqueDriverName()) err = waitForCSIDriver(cs, m.config.GetUniqueDriverName())
framework.ExpectNoError(err, "Failed to get CSIDriver : %v", err) framework.ExpectNoError(err, "Failed to get CSIDriver %v", m.config.GetUniqueDriverName())
m.testCleanups = append(m.testCleanups, func() { m.testCleanups = append(m.testCleanups, func() {
destroyCSIDriver(cs, m.config.GetUniqueDriverName()) destroyCSIDriver(cs, m.config.GetUniqueDriverName())
}) })
} }
// Wait for the CSIDriver actually get deployed and CSINode object to be generated.
// This indicates the mock CSI driver pod is up and running healthy.
err = drivers.WaitForCSIDriverRegistrationOnNode(m.config.ClientNodeSelection.Name, m.config.GetUniqueDriverName(), cs)
framework.ExpectNoError(err, "Failed to register CSIDriver %v", m.config.GetUniqueDriverName())
} }
createPod := func(ephemeral bool) (class *storagev1.StorageClass, claim *v1.PersistentVolumeClaim, pod *v1.Pod) { createPod := func(ephemeral bool) (class *storagev1.StorageClass, claim *v1.PersistentVolumeClaim, pod *v1.Pod) {

View File

@ -608,17 +608,25 @@ func waitForCSIDriverRegistrationOnAllNodes(driverName string, cs clientset.Inte
return err return err
} }
for _, node := range nodes.Items { for _, node := range nodes.Items {
if err := waitForCSIDriverRegistrationOnNode(node.Name, driverName, cs); err != nil { if err := WaitForCSIDriverRegistrationOnNode(node.Name, driverName, cs); err != nil {
return err return err
} }
} }
return nil return nil
} }
func waitForCSIDriverRegistrationOnNode(nodeName string, driverName string, cs clientset.Interface) error { // WaitForCSIDriverRegistrationOnNode waits for the CSINode object generated by the node-registrar on a certain node
const csiNodeRegisterTimeout = 5 * time.Minute func WaitForCSIDriverRegistrationOnNode(nodeName string, driverName string, cs clientset.Interface) error {
framework.Logf("waiting for CSIDriver %v to register on node %v", driverName, nodeName)
waitErr := wait.PollImmediate(10*time.Second, csiNodeRegisterTimeout, func() (bool, error) { // About 8.6 minutes timeout
backoff := wait.Backoff{
Duration: 2 * time.Second,
Factor: 1.5,
Steps: 12,
}
waitErr := wait.ExponentialBackoff(backoff, func() (bool, error) {
csiNode, err := cs.StorageV1().CSINodes().Get(context.TODO(), nodeName, metav1.GetOptions{}) csiNode, err := cs.StorageV1().CSINodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
if err != nil && !apierrors.IsNotFound(err) { if err != nil && !apierrors.IsNotFound(err) {
return false, err return false, err