1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-30 17:18:21 +03:00
lvm2/test/shell/idm_ilm_failure.sh
Leo Yan 92b47d8eb8 tests: idm: Add testing for IDM lock manager failure
If the IDM lock manager fails to access drives, might partially fail to
access drives (e.g. it fails to access one of three drives), or totally
fail to access drives, the lock manager should handle properly for these
cases.  When the drives are partially failure, if the lock manager still
can renew the lease for the locking, then it doesn't need to take any
action for the drive failure; otherwise, if it detects it cannot renew
the locking majority, it needs ti immediately kill the VG from the
lvmlockd.

This patch adds the test for verification the IDM lock manager failure;
the command can be used as below:

  # make check_lvmlockd_idm \
    LVM_TEST_BACKING_DEVICE=/dev/sdp3,/dev/sdl3,/dev/sdq3 \
    LVM_TEST_FAILURE=1 T=idm_ilm_failure.sh

Signed-off-by: Leo Yan <leo.yan@linaro.org>
2021-06-03 09:39:32 -05:00

81 lines
2.3 KiB
Bash

#!/usr/bin/env bash
# Copyright (C) 2020 Seagate, 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
SKIP_WITH_LVMPOLLD=1
. lib/inittest
[ -z "$LVM_TEST_LOCK_TYPE_IDM" ] && skip;
[ -z "$LVM_TEST_FAILURE" ] && skip;
aux prepare_devs 3
aux extend_filter_LVMTEST
DRIVE1=`dmsetup deps -o devname $dev1 | awk '{gsub(/[()]/,""); print $4;}' | sed 's/[0-9]*$//'`
DRIVE2=`dmsetup deps -o devname $dev2 | awk '{gsub(/[()]/,""); print $4;}' | sed 's/[0-9]*$//'`
DRIVE3=`dmsetup deps -o devname $dev3 | awk '{gsub(/[()]/,""); print $4;}' | sed 's/[0-9]*$//'`
if [ "$DRIVE1" = "$DRIVE2" ] || [ "$DRIVE1" = "$DRIVE3" ] || [ "$DRIVE2" = "$DRIVE3" ]; then
die "Need to pass three different drives!?"
fi
# The previous device-mapper are removed, but LVM still can directly
# access VGs from the specified physical drives. So enable drives
# for these drives.
aux extend_filter_LVMTEST "a|/dev/$DRIVE1*|" "a|/dev/$DRIVE2*|" "a|/dev/$DRIVE3*|"
aux lvmconf "devices/allow_changes_with_duplicate_pvs = 1"
vgcreate $SHARED $vg "$dev1" "$dev2" "$dev3"
# Create new logic volume and deactivate it
lvcreate -a y --zero n -l 1 -n $lv1 $vg
# Inject failure 40% so cannot send partially request to drives
idm_inject_failure 40
# Wait for 40s, but the lock will not be time out
sleep 40
# Inject failure with 0% so can access drives
idm_inject_failure 0
# Deactivate logic volume due to locking failure
lvchange $vg/$lv1 -a n
# Inject failure 100% so cannot send request to drives
idm_inject_failure 100
# Wait for 70s but should have no any alive locks
sleep 70
# Inject failure with 0% so can access drives
idm_inject_failure 0
# Activate logic volume
lvchange $vg/$lv1 -a y
# Inject failure so cannot send request to drives
idm_inject_failure 100
# Wait for 70s but will not time out
sleep 70
# Inject failure with 0% so can access drives
idm_inject_failure 0
check grep_lvmlockd_dump "S lvm_$vg kill_vg"
lvmlockctl --drop $vg
vgchange --lock-start
vgremove -f $vg