2015-02-11 18:16:50 +03:00
#!/bin/sh
# Copyright (C) 2015 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
2015-02-11 18:16:50 +03:00
2016-02-23 01:13:42 +03:00
SKIP_WITH_LVMLOCKD = 1
2015-10-27 17:10:06 +03:00
SKIP_WITH_LVMPOLLD = 1
2015-02-11 18:16:50 +03:00
2015-10-27 17:10:06 +03:00
. lib/inittest
2015-05-09 02:59:18 +03:00
2015-02-11 18:16:50 +03:00
aux prepare_pvs 4 12
vgcreate -s 4m $vg1 " $dev1 " " $dev2 "
vgcreate -s 4m $vg2 " $dev3 " " $dev4 "
# vg1/lv1 mapped onto dev1
lvcreate -l1 -n "lv1" $vg1 " $dev1 "
# vg1/lv2 mapped onto dev1 and dev2 (2 segments)
lvcreate -l3 -n "lv2" $vg1 " $dev1 " " $dev2 "
# vg2/lv3 mapped onto dev3
lvcreate -l1 -n "lv3" $vg2 " $dev3 "
# vg2/lv4 mapped onto dev3
lvcreate -l1 -n "lv4" $vg2 " $dev3 " " $dev4 "
2015-03-16 16:57:14 +03:00
# vg2/lv1 mapped onto "$dev4" (same LV name as vg1/lv1)
2015-02-11 18:16:50 +03:00
lvcreate -l1 -n "lv1" $vg2 " $dev4 "
###########################################
# exercise process_each_vg with selection #
###########################################
# select contains VGS field
# direct vg name match
vgchange --addtag 101 -S " vg_name= $vg1 "
check vg_field $vg1 vg_tags 101
not check vg_field $vg2 vg_tags 101
vgchange --deltag 101
# select contains LVS fiels
vgchange --addtag 102 -S "lv_name=lv2"
check vg_field $vg1 vg_tags 102
not check vg_field $vg2 vg_tags 102
vgchange --deltag 102
vgchange --addtag 103 -S "lv_name=lv1"
check vg_field $vg1 vg_tags 103
check vg_field $vg2 vg_tags 103
vgchange --deltag 103
# select contains SEGS field
vgchange --addtag 104 -S 'seg_start=8m'
check vg_field $vg1 vg_tags 104
not check vg_field $vg2 vg_tags 104
vgchange --deltag 104
vgchange --addtag 105 -S "seg_start=0m"
check vg_field $vg1 vg_tags 105
check vg_field $vg2 vg_tags 105
vgchange --deltag 105
# select contains PVS field
2015-03-16 16:57:14 +03:00
vgchange --addtag 106 -S "pv_name=" $dev1 ""
2015-02-11 18:16:50 +03:00
check vg_field $vg1 vg_tags 106
not check vg_field $vg2 vg_tags 106
vgchange --deltag 106
vgchange --addtag 107 -S "pv_size>0m"
check vg_field $vg1 vg_tags 107
check vg_field $vg2 vg_tags 107
vgchange --deltag 107
# select contains PVSEGS field
vgchange --addtag 108 -S "pvseg_size=2"
check vg_field $vg1 vg_tags 108
not check vg_field $vg2 vg_tags 108
vgchange --deltag 108
vgchange --addtag 109 -S "pvseg_size=1"
check vg_field $vg1 vg_tags 109
check vg_field $vg2 vg_tags 109
vgchange --deltag 109
# if VG name or tag is supplied together with the
# selection, the result is an intersection of both
vgchange --addtag 110 -S " vg_name= $vg1 " $vg2
not check vg_field $vg1 vg_tags 110
not check vg_field $vg2 vg_tags 110
vgchange --deltag 110
vgchange --addtag 111 -S " vg_name= $vg1 " $vg1
check vg_field $vg1 vg_tags 111
not check vg_field $vg2 vg_tags 111
vgchange --deltag 111
vgchange --addtag "tag" $vg1
vgchange --addtag 112 -S " vg_name= $vg2 " @tag
not check vg_field $vg1 vg_tags "tag,112"
not check vg_field $vg2 vg_tags "tag,112"
vgchange --deltag 112
vgchange --addtag 113 -S " vg_name= $vg1 " @tag
check vg_field $vg1 vg_tags "113,tag"
not check vg_field $vg2 vg_tags "113,tag"
vgchange --deltag 113 --deltag tag
###########################################
# exercise process_each_lv with selection #
###########################################
# select contains VGS field
lvchange --addtag 201 -S " vg_name= $vg1 "
check lv_field $vg1 /lv1 lv_tags 201
check lv_field $vg1 /lv2 lv_tags 201
not check lv_field $vg2 /lv3 lv_tags 201
not check lv_field $vg2 /lv4 lv_tags 201
not check lv_field $vg2 /lv1 lv_tags 201
lvchange --deltag 201 $vg1 $vg2
# select contains LVS fiels
lvchange --addtag 202 -S "lv_name=lv2"
not check lv_field $vg1 /lv1 lv_tags 202
check lv_field $vg1 /lv2 lv_tags 202
not check lv_field $vg2 /lv3 lv_tags 202
not check lv_field $vg2 /lv4 lv_tags 202
not check lv_field $vg2 /lv1 lv_tags 202
lvchange --deltag 202 $vg1 $vg2
lvchange --addtag 203 -S "lv_name=lv1"
check lv_field $vg1 /lv1 lv_tags 203
not check lv_field $vg1 /lv2 lv_tags 203
not check lv_field $vg2 /lv3 lv_tags 203
not check lv_field $vg2 /lv4 lv_tags 203
check lv_field $vg2 /lv1 lv_tags 203
lvchange --deltag 203 $vg1 $vg2
# select contains SEGS field
lvchange --addtag 204 -S "seg_start=8m"
not check lv_field $vg1 /lv1 lv_tags 204
check lv_field $vg1 /lv2 lv_tags 204
not check lv_field $vg2 /lv3 lv_tags 204
not check lv_field $vg2 /lv4 lv_tags 204
not check lv_field $vg2 /lv1 lv_tags 204
lvchange --deltag 204 $vg1 $vg2
# select contains PVS field - COMBINATION NOT ALLOWED!
2015-03-16 16:57:14 +03:00
lvchange --addtag 205 -S pv_name = " $dev1 " 2>err
2015-02-11 18:16:50 +03:00
grep "Can't report LV and PV fields at the same time" err
grep "Selection failed for LV" err
not check lv_field $vg1 /lv1 lv_tags 205
not check lv_field $vg1 /lv2 lv_tags 205
not check lv_field $vg2 /lv3 lv_tags 205
not check lv_field $vg2 /lv4 lv_tags 205
not check lv_field $vg2 /lv1 lv_tags 205
# select contains PVSEGS field - COMBINATION NOT ALLOWED!
lvchange --addtag 206 -S "pvseg_start>=0" 2>err
grep "Can't report LV and PV fields at the same time" err
grep "Selection failed for LV" err
not check lv_field $vg1 /lv1 lv_tags 206
not check lv_field $vg1 /lv2 lv_tags 206
not check lv_field $vg2 /lv3 lv_tags 206
not check lv_field $vg2 /lv4 lv_tags 206
not check lv_field $vg2 /lv1 lv_tags 206
# if LV name or tag is supplied together with the
# selection, the result is an intersection of both
lvchange --addtag 207 -S "lv_name=lv2" $vg1 /lv1
not check lv_field $vg1 /lv1 lv_tags 207
not check lv_field $vg1 /lv2 lv_tags 207
not check lv_field $vg2 /lv3 lv_tags 207
not check lv_field $vg2 /lv4 lv_tags 207
not check lv_field $vg2 /lv1 lv_tags 207
lvchange --deltag 207 $vg1 $vg2
lvchange --addtag 208 -S "lv_name=lv2" $vg1 /lv2
not check lv_field $vg1 /lv1 lv_tags 208
check lv_field $vg1 /lv2 lv_tags 208
not check lv_field $vg2 /lv3 lv_tags 208
not check lv_field $vg2 /lv4 lv_tags 208
not check lv_field $vg2 /lv1 lv_tags 208
lvchange --deltag 208 $vg1 $vg2
lvchange --addtag "tag" $vg1 /lv2
lvchange --addtag 209 -S "lv_name=lv3" @tag
not check lv_field $vg1 /lv1 lv_tags "209,tag"
not check lv_field $vg1 /lv2 lv_tags "209,tag"
not check lv_field $vg2 /lv3 lv_tags "209,tag"
not check lv_field $vg2 /lv4 lv_tags "209,tag"
not check lv_field $vg2 /lv1 lv_tags "209,tag"
lvchange --deltag 209 $vg1 $vg2
lvchange --addtag 210 -S "lv_name=lv2" @tag
not check lv_field $vg1 /lv1 lv_tags "210,tag"
check lv_field $vg1 /lv2 lv_tags "210,tag"
not check lv_field $vg2 /lv3 lv_tags "210,tag"
not check lv_field $vg2 /lv4 lv_tags "210,tag"
not check lv_field $vg2 /lv1 lv_tags "210,tag"
lvchange --deltag 210 --deltag tag $vg1 $vg2
###########################################
# exercise process_each_pv with selection #
###########################################
# select contains VGS field
pvchange --addtag 301 -S " vg_name= $vg1 "
2015-03-16 16:57:14 +03:00
check pv_field " $dev1 " pv_tags 301
check pv_field " $dev2 " pv_tags 301
not check pv_field " $dev3 " pv_tags 301
not check pv_field " $dev4 " pv_tags 301
2015-02-11 18:16:50 +03:00
pvchange -a --deltag 301
# select contains LVS field
pvchange --addtag 302 -S "lv_name=lv2"
2015-03-16 16:57:14 +03:00
check pv_field " $dev1 " pv_tags 302
check pv_field " $dev2 " pv_tags 302
not check pv_field " $dev3 " pv_tags 302
not check pv_field " $dev4 " pv_tags 302
2015-02-11 18:16:50 +03:00
pvchange -a --deltag 302
# select contains SEGS field
pvchange --addtag 303 -S "seg_start=8m"
2015-03-16 16:57:14 +03:00
check pv_field " $dev1 " pv_tags 303
not check pv_field " $dev2 " pv_tags 303
not check pv_field " $dev3 " pv_tags 303
not check pv_field " $dev4 " pv_tags 303
2015-02-11 18:16:50 +03:00
pvchange -a --deltag 303
# select contains PVS field
2015-03-16 16:57:14 +03:00
pvchange --addtag 304 -S pv_name = " $dev1 "
check pv_field " $dev1 " pv_tags 304
not check pv_field " $dev2 " pv_tags 304
not check pv_field " $dev3 " pv_tags 304
not check pv_field " $dev4 " pv_tags 304
2015-02-11 18:16:50 +03:00
pvchange -a --deltag 304
# select contains PVSEGS field
pvchange --addtag 305 -S "pvseg_size=2"
2015-03-16 16:57:14 +03:00
not check pv_field " $dev1 " pv_tags 305
check pv_field " $dev2 " pv_tags 305
not check pv_field " $dev3 " pv_tags 305
not check pv_field " $dev4 " pv_tags 305
2015-02-11 18:16:50 +03:00
pvchange -a --deltag 305
2015-02-13 13:45:13 +03:00
# if PV name or tag is supplied together with the
# selection, the result is an intersection of both
2015-03-16 16:57:14 +03:00
pvchange --addtag 306 -S pv_name = " $dev1 " " $dev2 "
not check pv_field " $dev1 " pv_tags 306
not check pv_field " $dev2 " pv_tags 306
not check pv_field " $dev3 " pv_tags 306
not check pv_field " $dev4 " pv_tags 306
2015-02-13 12:52:36 +03:00
pvchange -a --deltag 306
2015-03-16 16:57:14 +03:00
pvchange --addtag 307 -S pv_name = " $dev1 " " $dev1 "
check pv_field " $dev1 " pv_tags 307
not check pv_field " $dev2 " pv_tags 307
not check pv_field " $dev3 " pv_tags 307
not check pv_field " $dev4 " pv_tags 307
2015-02-13 12:52:36 +03:00
pvchange -a --deltag 307
2015-03-16 16:57:14 +03:00
pvchange --addtag "tag" " $dev1 "
pvchange --addtag 308 -S pv_name = " $dev2 " @tag
not check pv_field " $dev1 " pv_tags "308,tag"
not check pv_field " $dev2 " pv_tags "308,tag"
not check pv_field " $dev3 " pv_tags "308,tag"
not check pv_field " $dev4 " pv_tags "308,tag"
pvchange --deltag 308 " $dev1 "
pvchange --addtag 309 -S pv_name = " $dev1 " @tag
check pv_field " $dev1 " pv_tags "309,tag"
not check pv_field " $dev2 " pv_tags "309,tag"
not check pv_field " $dev3 " pv_tags "309,tag"
not check pv_field " $dev4 " pv_tags "309,tag"
2015-02-13 12:52:36 +03:00
pvchange -a --deltag 309 --deltag tag
2015-03-04 12:44:31 +03:00
#########################
# special cases to test #
#########################
# if calling vgremove, make sure we're doing selection per-VG, not per-LV
# (vgremove calls process_each_vg with vgremove_single which itself
# iterates over LVs with process_each_lv_in_vg - so internally it actually
# operates per-LV, but we still need the selection to be done per-VG)
vgremove --yes -S 'lv_name=lv2' # should remove whole vg1, not just the lv2
2015-03-26 18:11:29 +03:00
vgremove --yes $vg2