1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-11 20:58:50 +03:00
lvm2/test/shell/vgchange-usage.sh
Zdenek Kabelac 4fd41cf67f vgchange: max_pv limited to uint32
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.
2017-01-03 14:55:16 +01:00

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