summaryrefslogtreecommitdiff
path: root/test/shell/pvscan-autoactivation-polling.sh
blob: 53adf51875f33d34aae2b2cf99bfc7fbda8562eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env bash

# 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,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

SKIP_WITH_LVMLOCKD=1

. lib/inittest

# test if snapshot-merge target is available
aux target_at_least dm-snapshot-merge 1 0 0 || skip

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
lvconvert --merge "$vg1/$(snap_lv_name_ "$lv1")"
umount test_mnt
vgchange -an $vg1

# check snapshot get removed on autoactivation
pvscan --cache -aay "$dev1"

check active $vg1 $lv1
i=100
while ! check lv_not_exists "$vg1/$(snap_lv_name_ "$lv1")"; do
	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