2017-07-02 22:38:32 +03:00
#!/usr/bin/env bash
2016-06-30 17:21:03 +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,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
# test foreing user of thin-pool
2018-05-24 17:49:48 +03:00
2016-06-30 17:21:03 +03:00
SKIP_WITH_LVMPOLLD = 1
. lib/inittest
MOUNT_DIR = mnt
cleanup_mounted_and_teardown( )
{
umount " $MOUNT_DIR " || true
2023-10-04 18:46:23 +03:00
dmsetup remove $THIN || {
sleep 1 # retry once more after sleep (udev race)
dmsetup remove $THIN
}
2016-06-30 17:21:03 +03:00
vgremove -ff $vg
aux teardown
}
percent_( ) {
get lv_field $vg /pool data_percent | cut -d. -f1
}
#
# Main
#
aux have_thin 1 0 0 || skip
which mkfs.ext4 || skip
2016-07-04 18:39:17 +03:00
# Use our mkfs config file to get approximately same results
# TODO: maybe use it for all test via some 'prepare' function
2016-11-26 02:17:40 +03:00
export MKE2FS_CONFIG = " $TESTOLDPWD /lib/mke2fs.conf "
2016-07-04 18:39:17 +03:00
2016-06-30 17:21:03 +03:00
aux prepare_dmeventd
2016-12-12 13:22:41 +03:00
aux prepare_vg 2 64
2016-06-30 17:21:03 +03:00
# Create named pool only
2016-07-04 18:39:17 +03:00
lvcreate --errorwhenfull y -L2 -T $vg /pool
2016-06-30 17:21:03 +03:00
POOL = " $vg -pool "
THIN = " ${ PREFIX } _thin "
# Foreing user is using own ioctl command to create thin devices
dmsetup message $POOL 0 "create_thin 0"
dmsetup message $POOL 0 "set_transaction_id 0 1"
dmsetup status
# Once the transaction id has changed, lvm2 shall not be able to create thinLV
fail lvcreate -V10 $vg /pool
trap 'cleanup_mounted_and_teardown' EXIT
# 20M thin device
dmsetup create $THIN --table " 0 40960 thin $DM_DEV_DIR /mapper/ $POOL 0 "
dmsetup table
dmsetup info -c
mkdir " $MOUNT_DIR "
2016-07-04 18:39:17 +03:00
# This mkfs should fill 2MB pool over 95%
2016-06-30 17:21:03 +03:00
# no autoresize is configured
mkfs.ext4 " $DM_DEV_DIR /mapper/ $THIN "
2023-04-21 15:51:47 +03:00
# ensure all data from mkfs are written to disk
sync
2017-07-10 11:40:09 +03:00
test " $( percent_) " -gt 95
2016-06-30 17:21:03 +03:00
mount " $DM_DEV_DIR /mapper/ $THIN " " $MOUNT_DIR "
pvchange -x n " $dev1 " " $dev2 "
2017-07-10 11:40:09 +03:00
test " $( percent_) " -gt 95
2016-06-30 17:21:03 +03:00
# Configure autoresize
aux lvmconf 'activation/thin_pool_autoextend_percent = 10' \
'activation/thin_pool_autoextend_threshold = 75'
2016-07-04 18:39:17 +03:00
# Give it some time to left dmeventd do some (failing to resize) work
2016-06-30 17:21:03 +03:00
sleep 20
# And check foreign thin device is still mounted
mount | grep " $MOUNT_DIR " | grep " $THIN "
2017-07-10 11:40:09 +03:00
test " $( percent_) " -gt 95
2016-06-30 17:21:03 +03:00
pvchange -x y " $dev1 " " $dev2 "
# FIXME: ATM tell dmeventd explicitely we've changed metadata
# however dmeventd shall be aware of any metadata change
# and automagically retry resize operation after that.
lvchange --refresh $vg /pool
# Give it some time and let dmeventd do some work
for i in $( seq 1 15) ; do
2017-07-10 11:40:09 +03:00
test " $( percent_) " -ge 75 || break
2016-06-30 17:21:03 +03:00
sleep 1
done
2017-07-10 11:40:09 +03:00
test " $( percent_) " -lt 75
2016-06-30 17:21:03 +03:00
# And check foreign thin device is still mounted
mount | grep " $MOUNT_DIR " | grep " $THIN "