1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-22 17:35:59 +03:00
lvm2/test/shell/lvextend-raid.sh
Zdenek Kabelac 8df0a32abb tests: this test has race in it depending on kernel
Some kernel seems to keep 'lvextend' busy so long,
that actual resize already happens.

So ATM use 'should'  until something better is invented.
2021-03-23 21:32:51 +01:00

90 lines
2.5 KiB
Bash

#!/usr/bin/env bash
# Copyright (C) 2019 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_LVMPOLLD=1
. lib/inittest
aux have_raid 1 3 0 || skip
PROGRESS=0
aux have_raid 1 15 0 && PROGRESS=1
# Use smallest regionsize to save VG space
regionsize=$(getconf PAGESIZE) # in bytes
let pageregions=regionsize*8 # number of regions per MD bitmap page
# in KiB
let regionsize=regionsize/1024
# in MiB
let lvsz=pageregions*regionsize/1024
let lvext=lvsz/8
aux prepare_pvs 2 $(($lvsz + 3 * $lvext))
get_devs
vgcreate -s 4k $vg ${DEVICES[@]}
# Keep $dev1 & $dev2 always open via small active LVs.
# This trick avoids race on system with scanning udev service
# when device is 'in-use' and we cleared _rimage & _rmeta.
lvcreate -l1 $vg "$dev1"
lvcreate -l1 $vg "$dev2"
sector=$(( $(get first_extent_sector "$dev2") + 2048 ))
aux zero_dev "$dev1" "${sector}:"
aux delayzero_dev "$dev2" 0 10 "${sector}:"
# Create raid1 LV consuming 1 MD bitmap page
lvcreate --yes --type raid1 --regionsize ${regionsize}K -L$(($lvsz-$lvext))M -n $lv1 $vg
lvs -a $vg
not check lv_field $vg/$lv1 sync_percent "100.00"
check lv_field $vg/$lv1 size "$(($lvsz-$lvext)).00m" $vg/$lv1
aux wait_for_sync $vg $lv1
check lv_field $vg/$lv1 sync_percent "100.00"
check lv_field $vg/$lv1 region_size "4.00k"
# to slow down extension - slowdown readings
aux delayzero_dev "$dev1" 50 0 "${sector}:"
aux delayzero_dev "$dev2" 0 50 "${sector}:"
# Extend so that full MD bitmap page is consumed
lvextend -y -L+${lvext}M $vg/$lv1
if [ $PROGRESS -eq 1 ]
then
# Even with delayed devices wre are catching races here.
should not check lv_field $vg/$lv1 sync_percent "100.00"
check lv_field $vg/$lv1 size "$(($lvsz)).00m" $vg/$lv1
fi
aux wait_for_sync $vg $lv1
check lv_field $vg/$lv1 sync_percent "100.00"
# Extend so that another MD bitmap page is allocated
lvextend -y -L+${lvext}M $vg/$lv1
if [ $PROGRESS -eq 1 ]
then
not check lv_field $vg/$lv1 sync_percent "100.00"
else
check lv_field $vg/$lv1 sync_percent "100.00"
fi
aux enable_dev "$dev1"
aux enable_dev "$dev2"
aux wait_for_sync $vg $lv1
check lv_field $vg/$lv1 sync_percent "100.00"
check lv_field $vg/$lv1 size "$(($lvsz+$lvext)).00m" $vg/$lv1
vgremove -ff $vg