1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

tests: more testing for online thin metadata resize

Some more tests for online resize, but it's still disabled
by default, since kernel doesn't work yet for this feature.
This commit is contained in:
Zdenek Kabelac 2014-01-21 10:04:23 +01:00
parent 22d9daff12
commit efe36fcd43
2 changed files with 87 additions and 11 deletions

View File

@ -0,0 +1,72 @@
#!/bin/sh
# Copyright (C) 2014 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Test autoextension of thin metadata volume
. lib/test
meta_percent_() {
get lv_field $vg/pool metadata_percent | cut -d. -f1
}
wait_for_change_() {
# dmeventd only checks every 10 seconds :(
for i in $(seq 1 15) ; do
test "$(meta_percent_)" != "$1" && return
sleep 1
done
return 1 # timeout
}
#
# Temporary solution to create some occupied thin metadata
# This heavily depends on thin metadata output format to stay as is.
# Currently it expects 2MB thin metadata and 200MB data volume size
# Argument specifies how many devices should be created.
fake_metadata_() {
echo '<superblock uuid="" time="1" transaction="0" data_block_size="128" nr_data_blocks="3200">'
for i in $(seq 1 $1)
do
echo ' <device dev_id="'$i'" mapped_blocks="785" transaction="0" creation_time="0" snap_time="1">'
echo ' <range_mapping origin_begin="0" data_begin="0" length="37" time="0"/>'
echo ' </device>'
done
echo "</superblock>"
}
aux have_thin 1 10 0 || skip
aux prepare_dmeventd
aux lvmconf "activation/thin_pool_autoextend_percent = 10" \
"activation/thin_pool_autoextend_threshold = 70"
aux prepare_pvs 3 256
vgcreate -s 1M $vg $(cat DEVICES)
# Testing dmeventd autoresize
lvcreate -L200M -V1G -n thin -T $vg/pool
lvcreate -L2M -n $lv1 $vg
# Prepare some fake metadata prefilled to ~81% (>70%)
fake_metadata_ 400 >data
thin_restore -i data -o "$DM_DEV_DIR/mapper/$vg-$lv1"
vgchange -an $vg
# Swap volume with restored fake metadata
lvconvert -y --thinpool $vg/pool --poolmetadata $vg/$lv1
vgchange -ay $vg
# Check dmeventd resizes metadata
pre=$(meta_percent_)
wait_for_change_ $pre

View File

@ -1,5 +1,5 @@
#!/bin/sh
# Copyright (C) 2013 Red Hat, Inc. All rights reserved.
# Copyright (C) 2013-2014 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
@ -11,31 +11,35 @@
. lib/test
aux have_thin 9 9 0 || skip
aux have_thin 1 10 0 || skip
aux prepare_pvs 3 256
aux prepare_pvs 3 1256
vgcreate -s 1M $vg $(cat DEVICES)
for deactivate in true false; do
lvcreate -l1 -T $vg/pool
test $deactivate && lvchange -an $vg
# Create some thin volumes
lvcreate -L20 -V30 -n $lv1 -T $vg/pool
lvcreate -s $vg/$lv1
# Confirm we have basic 2M metadata
check lv_field $vg/pool_tmeta size "2.00m"
lvresize --poolmetadata +2 $vg/pool
test $deactivate && lvchange -an $vg
lvresize --poolmetadata +2M $vg/pool
# Test it's been resized to 4M
check lv_field $vg/pool_tmeta size "4.00m"
# TODO: Add more tests when kernel is fixed
lvresize --alloc anywhere --poolmetadata +256 $vg/pool
lvresize --poolmetadata +256M $vg/pool
check lv_field $vg/pool_tmeta size "260.00m"
lvresize --poolmetadata +3G $vg/pool
check lv_field $vg/pool_tmeta size "3.25g"
vgchange -an $vg
vgchange -ay $vg
# TODO: Make a full metadata device and test dmeventd support
# TODO: Add more tests
lvremove -ff $vg
done