1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-22 17:35:59 +03:00
lvm2/test/t-mirror-names.sh
Mike Snitzer 43d99aab6c Default to checking LV's progress before waiting in _wait_for_single_lv.
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.
2010-01-22 21:59:42 +00:00

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.
# ---------------------------------------------------------------------