mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
b945ea1c93
changing the dev names resulted in stale devices file entries that created noise in the output.
200 lines
5.3 KiB
Bash
200 lines
5.3 KiB
Bash
SKIP_WITH_LVMPOLLD=1
|
|
SKIP_WITH_LVMLOCKD=1
|
|
|
|
RUNDIR="/run"
|
|
test -d "$RUNDIR" || RUNDIR="/var/run"
|
|
PVS_ONLINE_DIR="$RUNDIR/lvm/pvs_online"
|
|
VGS_ONLINE_DIR="$RUNDIR/lvm/vgs_online"
|
|
PVS_LOOKUP_DIR="$RUNDIR/lvm/pvs_lookup"
|
|
|
|
_clear_online_files() {
|
|
# wait till udev is finished
|
|
aux udev_wait
|
|
rm -f "$PVS_ONLINE_DIR"/*
|
|
rm -f "$VGS_ONLINE_DIR"/*
|
|
rm -f "$PVS_LOOKUP_DIR"/*
|
|
}
|
|
|
|
. lib/inittest
|
|
|
|
aux prepare_devs 4
|
|
|
|
DFDIR="$LVM_SYSTEM_DIR/devices"
|
|
mkdir -p "$DFDIR" || true
|
|
DF="$DFDIR/system.devices"
|
|
|
|
# Because mapping devno to devname gets dm name from sysfs
|
|
aux lvmconf 'devices/scan = "/dev"'
|
|
base1=$(basename $dev1)
|
|
base2=$(basename $dev2)
|
|
base3=$(basename $dev3)
|
|
base4=$(basename $dev4)
|
|
bd1=/dev/mapper/$base1
|
|
bd2=/dev/mapper/$base2
|
|
bd3=/dev/mapper/$base3
|
|
bd4=/dev/mapper/$base4
|
|
aux extend_filter "a|/dev/mapper/$base1|"
|
|
aux extend_filter "a|/dev/mapper/$base2|"
|
|
aux extend_filter "a|/dev/mapper/$base3|"
|
|
aux extend_filter "a|/dev/mapper/$base4|"
|
|
|
|
# Changing names will confuse df based on devname
|
|
if lvmdevices; then
|
|
rm -f "$DF"
|
|
touch "$DF"
|
|
lvmdevices --adddev "$bd1"
|
|
lvmdevices --adddev "$bd2"
|
|
lvmdevices --adddev "$bd3"
|
|
lvmdevices --adddev "$bd4"
|
|
cat "$DF"
|
|
fi
|
|
|
|
# Using $bd instead of $dev because validation of pvid file content
|
|
# checks that the devname begins with /dev.
|
|
|
|
# FIXME: test vgchange aay with pvs_online that includes devname in pvid file
|
|
# and the devices file entry uses devname with a stale name.
|
|
|
|
vgcreate $vg1 "$bd1" "$bd2"
|
|
vgcreate $vg2 "$bd3"
|
|
pvcreate "$bd4"
|
|
|
|
lvcreate -l1 -n $lv1 -an $vg1
|
|
lvcreate -l1 -n $lv2 -an $vg1
|
|
lvcreate -l1 -n $lv1 -an $vg2
|
|
|
|
# Expected use, with vg name and all online files exist for vgchange.
|
|
|
|
_clear_online_files
|
|
|
|
pvscan --cache "$bd1"
|
|
pvscan --cache "$bd2"
|
|
vgchange -aay --autoactivation event $vg1
|
|
check lv_field $vg1/$lv1 lv_active "active"
|
|
check lv_field $vg1/$lv2 lv_active "active"
|
|
check lv_field $vg2/$lv1 lv_active ""
|
|
|
|
pvscan --cache "$bd3"
|
|
vgchange -aay --autoactivation event $vg2
|
|
check lv_field $vg2/$lv1 lv_active "active"
|
|
|
|
# Count io to check the pvs_online optimization
|
|
# is working to limit scanning.
|
|
|
|
if which strace; then
|
|
vgchange -an
|
|
_clear_online_files
|
|
|
|
pvscan --cache "$bd1"
|
|
pvscan --cache "$bd2"
|
|
strace -e io_submit vgchange -aay --autoactivation event $vg1 2>&1|tee trace.out
|
|
test "$(grep io_submit trace.out | wc -l)" -eq 3
|
|
rm trace.out
|
|
|
|
strace -e io_submit pvscan --cache "$bd3" 2>&1|tee trace.out
|
|
test "$(grep io_submit trace.out | wc -l)" -eq 1
|
|
rm trace.out
|
|
|
|
strace -e io_submit vgchange -aay --autoactivation event $vg2 2>&1|tee trace.out
|
|
test "$(grep io_submit trace.out | wc -l)" -eq 2
|
|
rm trace.out
|
|
fi
|
|
|
|
# non-standard usage: no VG name arg, vgchange will only used pvs_online files
|
|
|
|
vgchange -an
|
|
_clear_online_files
|
|
|
|
vgchange -aay --autoactivation event
|
|
check lv_field $vg1/$lv1 lv_active ""
|
|
check lv_field $vg1/$lv2 lv_active ""
|
|
check lv_field $vg2/$lv1 lv_active ""
|
|
|
|
pvscan --cache "$bd1"
|
|
vgchange -aay --autoactivation event
|
|
check lv_field $vg1/$lv1 lv_active ""
|
|
check lv_field $vg1/$lv2 lv_active ""
|
|
check lv_field $vg2/$lv1 lv_active ""
|
|
|
|
pvscan --cache "$bd2"
|
|
vgchange -aay --autoactivation event
|
|
check lv_field $vg1/$lv1 lv_active "active"
|
|
check lv_field $vg1/$lv2 lv_active "active"
|
|
check lv_field $vg2/$lv1 lv_active ""
|
|
|
|
pvscan --cache "$bd3"
|
|
vgchange -aay --autoactivation event
|
|
check lv_field $vg2/$lv1 lv_active "active"
|
|
|
|
# non-standard usage: include VG name arg, but missing or incomplete pvs_online files
|
|
|
|
vgchange -an
|
|
_clear_online_files
|
|
|
|
# all missing pvs_online, vgchange falls back to full label scan
|
|
vgchange -aay --autoactivation event $vg1
|
|
check lv_field $vg1/$lv1 lv_active "active"
|
|
check lv_field $vg1/$lv2 lv_active "active"
|
|
|
|
vgchange -an
|
|
_clear_online_files
|
|
|
|
# incomplete pvs_online, vgchange falls back to full label scan
|
|
pvscan --cache "$bd1"
|
|
vgchange -aay --autoactivation event $vg1
|
|
check lv_field $vg1/$lv1 lv_active "active"
|
|
check lv_field $vg1/$lv2 lv_active "active"
|
|
|
|
vgchange -an
|
|
_clear_online_files
|
|
|
|
# incomplete pvs_online, pvs_online from different vg,
|
|
# no pvs_online found for vg arg so vgchange falls back to full label scan
|
|
|
|
pvscan --cache "$bd3"
|
|
vgchange -aay --autoactivation event $vg1
|
|
check lv_field $vg1/$lv1 lv_active "active"
|
|
check lv_field $vg1/$lv2 lv_active "active"
|
|
check lv_field $vg2/$lv1 lv_active ""
|
|
|
|
vgchange -aay --autoactivation event $vg2
|
|
check lv_field $vg2/$lv1 lv_active "active"
|
|
|
|
vgchange -an
|
|
_clear_online_files
|
|
|
|
# same tests but using command options matching udev rule
|
|
|
|
pvscan --cache --listvg --checkcomplete --vgonline --autoactivation event --udevoutput --journal=output "$bd1"
|
|
pvscan --cache --listvg --checkcomplete --vgonline --autoactivation event --udevoutput --journal=output "$bd2"
|
|
vgchange -aay --autoactivation event $vg1
|
|
check lv_field $vg1/$lv1 lv_active "active"
|
|
check lv_field $vg1/$lv2 lv_active "active"
|
|
check lv_field $vg2/$lv1 lv_active ""
|
|
|
|
pvscan --cache --listvg --checkcomplete --vgonline --autoactivation event --udevoutput --journal=output "$bd3"
|
|
vgchange -aay --autoactivation event $vg2
|
|
check lv_field $vg2/$lv1 lv_active "active"
|
|
|
|
vgchange -an $vg1
|
|
vgchange -an $vg2
|
|
|
|
# with a full pvscan --cache
|
|
|
|
_clear_online_files
|
|
|
|
pvscan --cache
|
|
check lv_field $vg1/$lv1 lv_active ""
|
|
check lv_field $vg2/$lv1 lv_active ""
|
|
vgchange -aay --autoactivation event $vg1
|
|
vgchange -aay --autoactivation event $vg2
|
|
check lv_field $vg1/$lv1 lv_active "active"
|
|
check lv_field $vg2/$lv1 lv_active "active"
|
|
|
|
vgchange -an $vg1
|
|
vgchange -an $vg2
|
|
|
|
vgremove -f $vg1
|
|
vgremove -f $vg2
|
|
|