mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-11 20:58:50 +03:00
Solves: https://bugzilla.redhat.com/1280496 The only reasonable behaviour here is to error on any number out of accepted range (i.e. now numbers wrapping around with some hidden logic). As this is plain bug there is no support for backward compatibility since noone should set numbers >UINT32_MAX and expect 0 or error depending on how big number was used.... TODO: more fields might need to be converted.
135 lines
3.8 KiB
Bash
135 lines
3.8 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2008 Red Hat, Inc. All rights reserved.
|
|
#
|
|
# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
test_description='Exercise some vgchange diagnostics'
|
|
SKIP_WITH_LVMLOCKD=1
|
|
SKIP_WITH_LVMPOLLD=1
|
|
|
|
. lib/inittest
|
|
|
|
aux prepare_pvs 4
|
|
|
|
pvcreate --metadatacopies 0 "$dev1"
|
|
vgcreate -s 4M $vg "$dev1" "$dev2" "$dev3"
|
|
|
|
# cannot change anything in exported vg
|
|
vgexport $vg
|
|
fail vgchange -ay $vg
|
|
fail vgchange -p 8 $vg
|
|
fail vgchange -x n $vg
|
|
fail vgchange --addtag tag $vg
|
|
fail vgchange --deltag tag $vg
|
|
fail vgchange -s 4k $vg
|
|
fail vgchange --uuid $vg
|
|
fail vgchange --alloc anywhere $vg
|
|
fail vgchange -c y $vg
|
|
vgimport $vg
|
|
|
|
# unsupported combinations of options...
|
|
invalid vgchange --ignorelockingfailure --uuid $vg
|
|
invalid vgchange --sysinit --alloc normal $vg
|
|
invalid vgchange --sysinit --poll y $vg
|
|
invalid vgchange -an --poll y $vg
|
|
invalid vgchange -an --monitor y $vg
|
|
invalid vgchange -ay --refresh $vg
|
|
|
|
vgdisplay $vg
|
|
|
|
# vgchange -p MaxPhysicalVolumes (bz202232)
|
|
check vg_field $vg max_pv 0
|
|
vgchange -p 128 $vg
|
|
check vg_field $vg max_pv 128
|
|
|
|
pv_count=$(get vg_field $vg pv_count)
|
|
not vgchange -p 2 $vg 2>err
|
|
grep "MaxPhysicalVolumes is less than the current number $pv_count of PVs for" err
|
|
check vg_field $vg max_pv 128
|
|
|
|
# try some numbers around MAX limit (uint32)
|
|
vgchange -p 4294967295 $vg
|
|
invalid vgchange -p 4294967296 $vg
|
|
invalid vgchange -p 18446744073709551615 $vg
|
|
invalid vgchange -p 18446744073709551616 $vg
|
|
check vg_field $vg max_pv 4294967295
|
|
|
|
# vgchange -l MaxLogicalVolumes
|
|
check vg_field $vg max_lv 0
|
|
invalid vgchange -l -128 $vg
|
|
vgchange -l 128 $vg
|
|
check vg_field $vg max_lv 128
|
|
|
|
# vgchange -s
|
|
lvcreate -l4 -n $lv1 $vg
|
|
lvcreate -l4 -n $lv2 $vg
|
|
SIZELV2=$(get lv_field $vg/$lv2 size)
|
|
check lv_field $vg/$lv2 seg_size_pe "4"
|
|
vgchange -s 4K $vg
|
|
check vg_field $vg vg_extent_size "4.00k"
|
|
check lv_field $vg/$lv2 size "$SIZELV2"
|
|
check lv_field $vg/$lv2 seg_size_pe "4096"
|
|
|
|
|
|
lv_count=$(get vg_field $vg lv_count)
|
|
not vgchange -l 1 $vg 2>err
|
|
grep "MaxLogicalVolume is less than the current number $lv_count of LVs for" err
|
|
check vg_field $vg max_lv 128
|
|
|
|
# check non-resizebility
|
|
fail vgchange -x y $vg
|
|
check vg_attr_bit resizeable $vg "z"
|
|
vgchange -x n $vg
|
|
check vg_attr_bit resizeable $vg "-"
|
|
fail vgchange -x n $vg
|
|
fail vgextend $vg "$dev4"
|
|
vgremove -ff $vg
|
|
|
|
# set cluster bit
|
|
vgcreate -cn $vg "$dev1" "$dev2" "$dev3"
|
|
# check prompt to change cluster bit without giving explicit vg name
|
|
fail vgchange -cy 2>&1 | tee out
|
|
grep "y/n" out
|
|
check vg_attr_bit cluster $vg "-"
|
|
|
|
lvcreate -l1 -n $lv1 $vg
|
|
|
|
# check on cluster
|
|
# either skipped as clustered (non-cluster), or already clustered (on cluster)
|
|
if test -e LOCAL_CLVMD ; then
|
|
# can switch with active LV
|
|
vgchange -cy $vg
|
|
fail vgchange -cy $vg
|
|
# check volume is active locally exclusively
|
|
check lv_field $vg/$lv1 lv_active "local exclusive"
|
|
check vg_attr_bit cluster $vg "c"
|
|
# check we do not support conversion of just locally active LVs
|
|
lvchange -an $vg
|
|
lvchange -ay $vg
|
|
not vgchange -cn $vg
|
|
lvchange -an $vg
|
|
lvchange -aey $vg
|
|
vgchange -cn $vg
|
|
else
|
|
# no clvmd is running
|
|
fail vgchange -cy $vg
|
|
# can't switch with active LV
|
|
vgchange --yes -cy $vg
|
|
fail vgchange --yes -cy $vg
|
|
fail vgs $vg 2>&1 | tee out
|
|
grep "Skipping clustered volume group" out
|
|
vgs --ignoreskippedcluster $vg 2>&1 | tee out
|
|
not grep "Skipping clustered volume group" out
|
|
# reset back to non-clustered VG with disabled locking
|
|
vgchange -cn $vg --config 'global{locking_type=0}' $vg
|
|
fi
|
|
check vg_attr_bit cluster $vg "-"
|
|
|
|
vgremove -ff $vg
|