2017-07-02 22:38:32 +03:00
#!/usr/bin/env bash
2016-01-07 17:30:22 +03:00
# Copyright (C) 2016 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,
2016-01-21 13:49:46 +03:00
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2016-01-07 17:30:22 +03:00
2016-02-23 01:13:42 +03:00
SKIP_WITH_LVMLOCKD = 1
2016-01-07 17:30:22 +03:00
. lib/inittest
2016-01-12 15:24:12 +03:00
# test if snapshot-merge target is available
aux target_at_least dm-snapshot-merge 1 0 0 || skip
2016-01-07 17:30:22 +03:00
which mkfs.ext3 || skip
lvdev_( ) {
echo " $DM_DEV_DIR / $1 / $2 "
}
snap_lv_name_( ) {
echo ${ 1 } _snap
}
setup_merge_( ) {
local VG_NAME = $1
local LV_NAME = $2
local NUM_EXTRA_SNAPS = ${ 3 :- 0 }
local BASE_SNAP_LV_NAME
BASE_SNAP_LV_NAME = $( snap_lv_name_ $LV_NAME )
lvcreate -aey -n $LV_NAME -l 50%FREE $VG_NAME
lvs
lvcreate -s -n $BASE_SNAP_LV_NAME -l 20%FREE ${ VG_NAME } /${ LV_NAME }
mkfs.ext3 " $( lvdev_ $VG_NAME $LV_NAME ) "
if [ $NUM_EXTRA_SNAPS -gt 0 ] ; then
for i in $( seq 1 $NUM_EXTRA_SNAPS ) ; do
lvcreate -s -n ${ BASE_SNAP_LV_NAME } _${ i } -l 20%ORIGIN ${ VG_NAME } /${ LV_NAME }
done
fi
}
aux prepare_pvs 1 50
vgcreate $vg1 " $dev1 "
mkdir test_mnt
setup_merge_ $vg1 $lv1
mount " $( lvdev_ $vg1 $lv1 ) " test_mnt
2017-07-10 11:40:09 +03:00
lvconvert --merge " $vg1 / $( snap_lv_name_ " $lv1 " ) "
2016-01-07 17:30:22 +03:00
umount test_mnt
vgchange -an $vg1
# check snapshot get removed on autoactivation
pvscan --cache -aay " $dev1 "
check active $vg1 $lv1
i = 100
2017-07-10 11:40:09 +03:00
while ! check lv_not_exists " $vg1 / $( snap_lv_name_ " $lv1 " ) " ; do
2016-01-07 17:30:22 +03:00
test $i -lt 0 && fail "Background polling failed to remove merged snapshot LV"
sleep .1
i = $(( i-1))
done
# TODO: add similar simple tests for other interrupted/unfinished polling operation
vgremove -ff $vg1