mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
43d99aab6c
Support "wait before testing" using '+' in pvmove and lvconvert interval. Doing so overrides the new default of sleeping after checking the LV's progress. Sleeping before checking progress can lead to extraneous polldaemons being left running. These polldaemons would have otherwise exited had they checked before sleeping. Checking progress before sleeping helps workaround the subtly unreliable nature of "finished" state checking in _percent_run. Update test/t-mirror-names.sh to use '+' when providing its lvconvert interval.
159 lines
4.1 KiB
Bash
159 lines
4.1 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2007-2008 Red Hat, Inc. All rights reserved.
|
|
# Copyright (C) 2007-2008 NEC Corporation
|
|
#
|
|
# This copyrighted material is made available to anyone wishing to use,
|
|
# modify, copy, or redistribute it subject to the terms and conditions
|
|
# of the GNU General Public License v.2.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
test_description="check namings of mirrored LV"
|
|
|
|
. ./test-utils.sh
|
|
|
|
dmsetup_has_dm_devdir_support_ || exit 200
|
|
|
|
# ---------------------------------------------------------------------
|
|
# Utilities
|
|
|
|
lv_devices_() {
|
|
local d
|
|
local lv=$1
|
|
shift
|
|
local devices=$*
|
|
|
|
local devs=$(lvs -a -odevices --noheadings $lv | sed 's/([0-9]*)//g' |
|
|
sed 's/ //g' | sed 's/,/ /g')
|
|
|
|
for d in $devs; do
|
|
(echo $devices | grep -q $d) || return 1
|
|
devices=$(echo $devices | sed "s/$d//")
|
|
done
|
|
|
|
[ "$(echo $devices | sed 's/ //g')" = "" ]
|
|
}
|
|
|
|
lv_mirror_log_() {
|
|
local lv=$1
|
|
|
|
echo $(lvs -a -omirror_log --noheadings $lv | sed 's/ //g')
|
|
}
|
|
|
|
lv_convert_lv_() {
|
|
local lv=$1
|
|
|
|
echo $(lvs -a -oconvert_lv --noheadings $lv | sed 's/ //g')
|
|
}
|
|
|
|
# ---------------------------------------------------------------------
|
|
# Initialize PVs and VGs
|
|
|
|
aux prepare_vg 5 80
|
|
|
|
# ---------------------------------------------------------------------
|
|
# Common environment setup/cleanup for each sub testcases
|
|
|
|
prepare_lvs_() {
|
|
lvremove -ff $vg
|
|
if dmsetup table|grep $vg; then
|
|
echo "ERROR: lvremove did leave some some mappings in DM behind!"
|
|
return 1
|
|
fi
|
|
:
|
|
}
|
|
|
|
check_and_cleanup_lvs_() {
|
|
lvs -a -o+devices $vg
|
|
lvremove -ff $vg
|
|
if dmsetup table|grep $vg; then
|
|
echo "ERROR: lvremove did leave some some mappings in DM behind!"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
prepare_lvs_
|
|
check_and_cleanup_lvs_
|
|
|
|
# ---------------------------------------------------------------------
|
|
# basic
|
|
|
|
#COMM "init: lvcreate"
|
|
prepare_lvs_
|
|
|
|
#COMM "mirror images are ${lv1}_mimage_x"
|
|
lvcreate -l2 -m1 -n $lv1 $vg
|
|
lv_devices_ $vg/$lv1 "$lv1"_mimage_0 "$lv1"_mimage_1
|
|
|
|
#COMM "mirror log is ${lv1}_mlog"
|
|
lv_mirror_log_ $vg/$lv1 "$lv1"_mlog
|
|
|
|
# "cleanup"
|
|
check_and_cleanup_lvs_
|
|
|
|
#COMM "mirror with name longer than 22 characters (bz221322)"
|
|
name="LVwithanamelogerthan22characters_butidontwonttocounthem"
|
|
lvcreate -m1 -l2 -n"$name" $vg
|
|
lvs $vg/"$name"
|
|
check_and_cleanup_lvs_
|
|
|
|
# ---------------------------------------------------------------------
|
|
# lvrename
|
|
|
|
#COMM "init: lvrename"
|
|
prepare_lvs_
|
|
|
|
#COMM "renamed mirror names: $lv1 to $lv2"
|
|
lvcreate -l2 -m1 -n $lv1 $vg
|
|
lvrename $vg/$lv1 $vg/$lv2
|
|
lv_devices_ $vg/$lv2 "$lv2"_mimage_0 "$lv2"_mimage_1
|
|
lv_mirror_log_ $vg/$lv2 "$lv2"_mlog
|
|
|
|
#COMM "cleanup"
|
|
check_and_cleanup_lvs_
|
|
|
|
# ---------------------------------------------------------------------
|
|
# lvconvert
|
|
|
|
#COMM "init: lvconvert"
|
|
prepare_lvs_
|
|
|
|
#COMM "converting mirror names is ${lv1}_mimagetmp_2"
|
|
lvcreate -l2 -m1 -n $lv1 $vg
|
|
lvconvert -m+1 -i+1000 -b $vg/$lv1
|
|
convlv=$(lv_convert_lv_ "$vg/$lv1")
|
|
test "$convlv" = "$lv1"_mimagetmp_2
|
|
lv_devices_ $vg/$lv1 "$convlv" "$lv1"_mimage_2
|
|
lv_devices_ "$vg/$convlv" "$lv1"_mimage_0 "$lv1"_mimage_1
|
|
loglv=$(lv_mirror_log_ "$vg/$convlv")
|
|
test "$loglv" = "$lv1"_mlog
|
|
|
|
#COMM "mirror log name after re-adding is ${lv1}_mlog" \
|
|
lvconvert --mirrorlog core $vg/$lv1
|
|
lvconvert --mirrorlog disk $vg/$lv1
|
|
convlv=$(lv_convert_lv_ "$vg/$lv1")
|
|
lv_devices_ $vg/$lv1 "$convlv" "$lv1"_mimage_2
|
|
lv_devices_ "$vg/$convlv" "$lv1"_mimage_0 "$lv1"_mimage_1
|
|
loglv=$(lv_mirror_log_ "$vg/$convlv")
|
|
test "$loglv" = "$lv1"_mlog
|
|
|
|
#COMM "renamed converting mirror names: $lv1 to $lv2" \
|
|
lvrename $vg/$lv1 $vg/$lv2
|
|
convlv=$(lv_convert_lv_ "$vg/$lv2")
|
|
lv_devices_ $vg/$lv2 "$convlv" "$lv2"_mimage_2
|
|
lv_devices_ "$vg/$convlv" "$lv2"_mimage_0 "$lv2"_mimage_1
|
|
loglv=$(lv_mirror_log_ "$vg/$convlv")
|
|
test "$loglv" = "$lv2"_mlog
|
|
|
|
#COMM "cleanup"
|
|
check_and_cleanup_lvs_
|
|
|
|
# Temporary mirror log should have "_mlogtmp_<n>" suffix
|
|
# but currently lvconvert doesn't have an option to add the log.
|
|
# If such feature is added in future, a test for that should
|
|
# be added.
|
|
|
|
# ---------------------------------------------------------------------
|