From c97b6432e389aec1498e1c0cc6b57c43698a97b7 Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Tue, 9 Nov 2021 17:15:06 +0530 Subject: [PATCH] e2e: restrict IO with lower version kernel at rbd-nbd tests Currently, at "perform IO on rbd-nbd volume after nodeplugin restart" test we are performing write on the rbd-nbd based mount after nodeplugin restart. But due to a bug in NBD driver the writes are failing, please note NBD zero cmd timeout handling is fixed with kernel >= 5.4 and hence we should defend on writes based on kernel version to avoid unnecessary CI failures. For more information see https://github.com/ceph/ceph-csi/issues/2204#issuecomment-930941047 updates: #2204 Signed-off-by: Prasanna Kumar Kalever --- e2e/rbd.go | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/e2e/rbd.go b/e2e/rbd.go index 54815c6c8..5a767c1e6 100644 --- a/e2e/rbd.go +++ b/e2e/rbd.go @@ -268,10 +268,6 @@ var _ = Describe("RBD", func() { if err != nil { e2elog.Failf("failed to get the kernel version with error %v", err) } - // default io-timeout=0, needs kernel >= 5.4 - if !util.CheckKernelSupport(kernelRelease, nbdZeroIOtimeoutSupport) { - nbdMapOptions = "debug-rbd=20,io-timeout=330" - } }) AfterEach(func() { @@ -674,14 +670,21 @@ var _ = Describe("RBD", func() { e2elog.Failf("failed to poll: %v", err) } - filePath := app.Spec.Containers[0].VolumeMounts[0].MountPath + "/test" - _, stdErr, err = execCommandInPod( - f, - fmt.Sprintf("echo 'Hello World' > %s", filePath), - app.Namespace, - &appOpt) - if err != nil || stdErr != "" { - e2elog.Failf("failed to write IO, err: %v, stdErr: %v ", err, stdErr) + // Writes on kernel < 5.4 are failing due to a bug in NBD driver, + // NBD zero cmd timeout handling is fixed with kernel >= 5.4 + // see https://github.com/ceph/ceph-csi/issues/2204#issuecomment-930941047 + if util.CheckKernelSupport(kernelRelease, nbdZeroIOtimeoutSupport) { + filePath := app.Spec.Containers[0].VolumeMounts[0].MountPath + "/test" + _, stdErr, err = execCommandInPod( + f, + fmt.Sprintf("echo 'Hello World' > %s", filePath), + app.Namespace, + &appOpt) + if err != nil || stdErr != "" { + e2elog.Failf("failed to write IO, err: %v, stdErr: %v ", err, stdErr) + } + } else { + e2elog.Logf("kernel %q does not meet recommendation, skipping IO test", kernelRelease) } err = deletePVCAndApp("", f, pvc, app)