[lvm-devel] main - tests: workaround for some raid targets

Zdenek Kabelac zkabelac at sourceware.org
Wed Mar 17 00:00:47 UTC 2021


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=e793ff1e185acfdbbbedb85a420d48527cd57c90
Commit:        e793ff1e185acfdbbbedb85a420d48527cd57c90
Parent:        db37905d7f59ac0057f6d50c34d8b1095c64d50f
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Tue Mar 16 22:53:23 2021 +0100
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Wed Mar 17 00:59:50 2021 +0100

tests: workaround for some raid targets

Problem with some target is that shortly after initialization it
returns incorrect status letters.
---
 test/shell/lvcreate-raid-nosync.sh | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/test/shell/lvcreate-raid-nosync.sh b/test/shell/lvcreate-raid-nosync.sh
index dcc248e0c..05ab848a1 100644
--- a/test/shell/lvcreate-raid-nosync.sh
+++ b/test/shell/lvcreate-raid-nosync.sh
@@ -33,6 +33,21 @@ _sync() {
 	aux restore_from_devtable "$dev1"
 }
 
+# Workaround for raid targets returning 'a' shortly after initialization
+# TODO: maybe there is some workaround to be made on lvm side
+_check_raid_in_loop() {
+	local vg=$1
+	local lv=$2
+	local A=$3
+	local B=$(echo $A | tr A a)
+	for i in {1..10} ; do
+		check raid_leg_status $vg $lv ${A} && return 0
+		# Only when there is initial 'a..a' we will wait for a while
+		check raid_leg_status $vg $lv ${B} || break
+		sleep .05
+	done
+	die "Cannot get $A status for $vg/$lv";
+}
 
 # Delay 1st leg so that rebuilding status characters
 #  can be read before resync finished too quick.
@@ -42,7 +57,7 @@ aux delay_dev "$dev1" 0 100 "$(get first_extent_sector "$dev1")"
 for r in raid0 raid0_meta
 do
 	lvcreate --type $r -Zn -i 3 -l 1 -n $lv1 $vg
-	check raid_leg_status $vg $lv1 "AAA"
+	_check_raid_in_loop $vg $lv1 "AAA"
 	lvremove --yes $vg/$lv1
 done
 
@@ -53,7 +68,7 @@ _sync "AAA"
 
 # raid1 supports --nosync
 lvcreate --type raid1 --nosync -Zn -m 2 -l 1 -n $lv1 $vg
-check raid_leg_status $vg $lv1 "AAA"
+_check_raid_in_loop $vg $lv1 "AAA"
 lvremove --yes $vg/$lv1
 
 for r in $segtypes
@@ -65,7 +80,7 @@ do
 
 	# raid4/5 support --nosync
 	lvcreate --type $r -Zn --nosync -i 3 -l 1 -n $lv2 $vg
-	check raid_leg_status $vg $lv2 "AAAA"
+	_check_raid_in_loop $vg $lv2 "AAAA"
 	lvremove --yes $vg
 done
 
@@ -84,6 +99,6 @@ _sync "AAAAAA"
 
 # raid10 supports --nosync
 lvcreate --type raid10 --nosync -m 1 -Zn -i 3 -l 1 -n $lv1 $vg
-check raid_leg_status $vg $lv1 "AAAAAA"
+_check_raid_in_loop $vg $lv1 "AAAAAA"
 
 vgremove -ff $vg




More information about the lvm-devel mailing list