mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
915d20d0e6
New tests to add checking for '100%' in-sync at start of "recover" process (it shouldn't happen, but I've seen it before). Also, check status over the whole cycle of various sync processes ("resync" and "recover").
128 lines
4.0 KiB
Bash
128 lines
4.0 KiB
Bash
#######################################################################
|
|
# This series of tests is meant to validate the correctness of
|
|
# 'dmsetup status' for RAID LVs - especially during various sync action
|
|
# transitions, like: recover, resync, check, repair, idle, reshape, etc
|
|
#######################################################################
|
|
SKIP_WITH_LVMLOCKD=1
|
|
SKIP_WITH_LVMPOLLD=1
|
|
|
|
export LVM_TEST_LVMETAD_DEBUG_OPTS=${LVM_TEST_LVMETAD_DEBUG_OPTS-}
|
|
|
|
. lib/inittest
|
|
|
|
# check for version 1.9.0
|
|
# - it is the point at which linear->raid1 uses "recover"
|
|
aux have_raid 1 9 0 || skip
|
|
|
|
aux prepare_pvs 9
|
|
vgcreate -s 2m $vg $(cat DEVICES)
|
|
|
|
###########################################
|
|
# Upconverted RAID1 should never have all 'a's in status output
|
|
###########################################
|
|
aux delay_dev $dev2 0 50
|
|
lvcreate -aey -l 2 -n $lv1 $vg $dev1
|
|
lvconvert --type raid1 -y -m 1 $vg/$lv1 $dev2
|
|
while ! check in_sync $vg $lv1; do
|
|
a=( $(dmsetup status $vg-$lv1) ) || die "Unable to get status of $vg/$lv1"
|
|
[ ${a[5]} != "aa" ]
|
|
sleep .1
|
|
done
|
|
aux enable_dev $dev2
|
|
lvremove -ff $vg
|
|
|
|
###########################################
|
|
# Upconverted RAID1 should not be at 100% right after upconvert
|
|
###########################################
|
|
aux delay_dev $dev2 0 50
|
|
lvcreate -aey -l 2 -n $lv1 $vg $dev1
|
|
lvconvert --type raid1 -y -m 1 $vg/$lv1 $dev2
|
|
a=( $(dmsetup status $vg-$lv1) ) || die "Unable to get status of $vg/$lv1"
|
|
b=( $(echo ${a[6]} | sed s:/:' ':) )
|
|
[ ${b[0]} -ne ${b[1]} ]
|
|
aux enable_dev $dev2
|
|
lvremove -ff $vg
|
|
|
|
###########################################
|
|
# Catch anything suspicious with linear -> RAID1 upconvert
|
|
###########################################
|
|
aux delay_dev $dev2 0 50
|
|
lvcreate -aey -l 2 -n $lv1 $vg $dev1
|
|
lvconvert --type raid1 -y -m 1 $vg/$lv1 $dev2
|
|
while true; do
|
|
a=( $(dmsetup status $vg-$lv1) ) || die "Unable to get status of $vg/$lv1"
|
|
b=( $(echo ${a[6]} | sed s:/:' ':) )
|
|
if [ ${b[0]} -ne ${b[1]} ]; then
|
|
# If the sync operation ("recover" in this case) is not
|
|
# finished, then it better be as follows:
|
|
[ ${a[5]} == "Aa" ]
|
|
[ ${a[7]} == "recover" ]
|
|
else
|
|
# Tough to tell the INVALID case,
|
|
# Before starting sync thread: "Aa X/X recover"
|
|
# from the valid case,
|
|
# Just finished sync thread: "Aa X/X recover"
|
|
# We'll just put "should" for now
|
|
should [ ${a[5]} == "AA" ]
|
|
should [ ${a[7]} == "idle" ]
|
|
break
|
|
fi
|
|
sleep .1
|
|
done
|
|
aux enable_dev $dev2
|
|
lvremove -ff $vg
|
|
|
|
###########################################
|
|
# Catch anything suspicious with RAID1 2-way -> 3-way upconvert
|
|
###########################################
|
|
aux delay_dev $dev3 0 50
|
|
lvcreate --type raid1 -m 1 -aey -l 2 -n $lv1 $vg $dev1 $dev2
|
|
lvconvert -y -m +1 $vg/$lv1 $dev3
|
|
while true; do
|
|
a=( $(dmsetup status $vg-$lv1) ) || die "Unable to get status of $vg/$lv1"
|
|
b=( $(echo ${a[6]} | sed s:/:' ':) )
|
|
if [ ${b[0]} -ne ${b[1]} ]; then
|
|
# If the sync operation ("recover" in this case) is not
|
|
# finished, then it better be as follows:
|
|
[ ${a[5]} == "AAa" ]
|
|
[ ${a[7]} == "recover" ]
|
|
else
|
|
# Tough to tell the INVALID case,
|
|
# Before starting sync thread: "Aa X/X recover"
|
|
# from the valid case,
|
|
# Just finished sync thread: "Aa X/X recover"
|
|
# We'll just put "should" for now
|
|
should [ ${a[5]} == "AAA" ]
|
|
should [ ${a[7]} == "idle" ]
|
|
break
|
|
fi
|
|
sleep .1
|
|
done
|
|
aux enable_dev $dev3
|
|
lvremove -ff $vg
|
|
|
|
###########################################
|
|
# Catch anything suspicious with RAID1 initial resync
|
|
###########################################
|
|
aux delay_dev $dev2 0 50
|
|
lvcreate --type raid1 -m 1 -aey -l 2 -n $lv1 $vg $dev1 $dev2
|
|
while true; do
|
|
a=( $(dmsetup status $vg-$lv1) ) || die "Unable to get status of $vg/$lv1"
|
|
b=( $(echo ${a[6]} | sed s:/:' ':) )
|
|
if [ ${b[0]} -ne ${b[1]} ]; then
|
|
# If the sync operation ("resync" in this case) is not
|
|
# finished, then it better be as follows:
|
|
[ ${a[5]} == "aa" ]
|
|
[ ${a[7]} == "resync" ]
|
|
else
|
|
should [ ${a[5]} == "AA" ]
|
|
should [ ${a[7]} == "idle" ]
|
|
break
|
|
fi
|
|
sleep .1
|
|
done
|
|
aux enable_dev $dev2
|
|
lvremove -ff $vg
|
|
|
|
vgremove -ff $vg
|