All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Teigland <teigland@sourceware.org>
To: lvm-devel@redhat.com
Subject: main - tests: add lvextend-caches-on-thindata
Date: Thu,  6 May 2021 21:32:43 +0000 (GMT)	[thread overview]
Message-ID: <20210506213243.21B60384C003@sourceware.org> (raw)

Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=00f603de2c507ee12195487fa007510ee3ff9770
Commit:        00f603de2c507ee12195487fa007510ee3ff9770
Parent:        6b00c8c9109b0b6111d4adb9918cccc407ac448f
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Thu May 6 15:59:37 2021 -0500
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Thu May 6 16:23:26 2021 -0500

tests: add lvextend-caches-on-thindata

to test lvextend of thin pool data while it has
cache|writecache attached
---
 test/shell/lvextend-caches-on-thindata.sh | 170 ++++++++++++++++++++++++++++++
 1 file changed, 170 insertions(+)

diff --git a/test/shell/lvextend-caches-on-thindata.sh b/test/shell/lvextend-caches-on-thindata.sh
new file mode 100644
index 000000000..aab571611
--- /dev/null
+++ b/test/shell/lvextend-caches-on-thindata.sh
@@ -0,0 +1,170 @@
+#!/usr/bin/env bash
+
+# Copyright (C) 2017-2020 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
+
+# lvextend thin pool data that has cache|writecache attached
+
+. lib/inittest
+
+do_test()
+{
+	local tp=$1
+	local lvt=$2
+
+	# create some initial data
+	lvchange -ay $vg/$lvt
+	mkfs.xfs -f -s size=4096 "$DM_DEV_DIR/$vg/$lvt"
+	mount "$DM_DEV_DIR/$vg/$lvt" "$mount_dir"
+	cp pattern "$mount_dir/pattern1"
+	dd if=/dev/urandom of="$mount_dir/rand100M" bs=1M count=100 conv=fdatasync
+	cp pattern "$mount_dir/pattern2"
+
+	# extend while mounted
+	lvextend -L+64M $vg/${tp}_tdata "$dev4"
+	lvs -a $vg -o+devices
+
+	# verify initial data
+	diff pattern "$mount_dir/pattern1"
+	diff pattern "$mount_dir/pattern2"
+	dd of=/dev/null if="$mount_dir/rand100M" bs=1M count=100
+
+	# add more data
+	cp pattern "$mount_dir/pattern3"
+	dd if=/dev/urandom of="$mount_dir/rand8M" bs=1M count=8 conv=fdatasync
+
+	# restart the LV
+	umount "$mount_dir"
+	lvchange -an $vg/$lvt
+	lvchange -an $vg/$tp
+	lvchange -ay $vg/$lvt
+	mount "$DM_DEV_DIR/$vg/$lvt" "$mount_dir"
+
+	# verify all data
+	diff pattern "$mount_dir/pattern1"
+	diff pattern "$mount_dir/pattern2"
+	diff pattern "$mount_dir/pattern3"
+	dd of=/dev/null if="$mount_dir/rand100M" bs=1M count=100
+	dd of=/dev/null if="$mount_dir/rand8M" bs=1M count=8
+
+	# extend again while inactive
+	umount "$mount_dir"
+	lvchange -an $vg/$lvt
+	lvchange -an $vg/$tp
+	lvextend -L+64M $vg/${tp}_tdata "$dev5"
+	lvs -a $vg -o+devices
+	lvchange -ay $vg/$lvt
+	mount "$DM_DEV_DIR/$vg/$lvt" "$mount_dir"
+
+	# verify all data
+	diff pattern "$mount_dir/pattern1"
+	diff pattern "$mount_dir/pattern2"
+	diff pattern "$mount_dir/pattern3"
+	dd of=/dev/null if="$mount_dir/rand100M" bs=1M count=100
+	dd of=/dev/null if="$mount_dir/rand8M" bs=1M count=8
+
+	# add more data
+	cp pattern "$mount_dir/pattern4"
+
+	# remove the cache
+	lvconvert --splitcache $vg/${tp}_tdata
+
+	# verify all data
+	diff pattern "$mount_dir/pattern1"
+	diff pattern "$mount_dir/pattern2"
+	diff pattern "$mount_dir/pattern3"
+	diff pattern "$mount_dir/pattern4"
+	dd of=/dev/null if="$mount_dir/rand100M" bs=1M count=100
+	dd of=/dev/null if="$mount_dir/rand8M" bs=1M count=8
+
+	umount "$mount_dir"
+	lvchange -an $vg/$lvt
+	lvchange -an $vg/$tp
+	lvchange -ay $vg/$lvt
+	mount "$DM_DEV_DIR/$vg/$lvt" "$mount_dir"
+
+	# verify all data
+	diff pattern "$mount_dir/pattern1"
+	diff pattern "$mount_dir/pattern2"
+	diff pattern "$mount_dir/pattern3"
+	diff pattern "$mount_dir/pattern4"
+	dd of=/dev/null if="$mount_dir/rand100M" bs=1M count=100
+	dd of=/dev/null if="$mount_dir/rand8M" bs=1M count=8
+
+	umount "$mount_dir"
+	lvchange -an $vg/$lvt
+	lvchange -an $vg/$tp
+	lvremove $vg/$lvt
+	lvremove $vg/$tp
+	lvremove -y $vg
+}
+
+
+aux have_cache 1 10 0 || skip
+aux have_writecache 1 0 0 || skip
+which mkfs.xfs || skip
+
+mount_dir="mnt"
+mkdir -p "$mount_dir"
+
+aux prepare_devs 6 70 # want 64M of usable space from each dev
+
+# generate random data
+dd if=/dev/urandom of=pattern bs=512K count=1
+
+vgcreate $SHARED $vg "$dev1" "$dev2" "$dev3" "$dev4" "$dev5" "$dev6"
+
+# test extending cache|writecache on thin pool data
+# test type cache|writecache
+# cache with cachepool|cachevol
+# cache with writeback|writethrough
+
+# lv1 is thinpool LV: 128M
+# lv2 is fast LV:      64M
+# lv3 is thin LV:       1G
+
+# attach writecache to thinpool data
+lvcreate --type thin-pool -n $lv1 -L128M --poolmetadataspare n $vg "$dev1" "$dev2"
+lvcreate --type thin -n $lv3 -V1G --thinpool $lv1 $vg
+lvcreate -n $lv2 -L64M -an $vg "$dev3"
+lvconvert -y --type writecache --cachevol $lv2 $vg/$lv1
+lvs -a $vg -o+devices
+do_test $lv1 $lv3
+
+# attach cache/writeback (cachevol) to thinpool data
+lvcreate --type thin-pool -n $lv1 -L128M --poolmetadataspare n $vg "$dev1" "$dev2"
+lvcreate --type thin -n $lv3 -V1G --thinpool $lv1 $vg
+lvcreate -n $lv2 -L64M -an $vg "$dev3"
+lvconvert -y --type cache --cachevol $lv2 --cachemode writeback $vg/$lv1
+lvs -a $vg -o+devices
+do_test $lv1 $lv3
+
+# attach cache/writethrough (cachevol) to thinpool data
+lvcreate --type thin-pool -n $lv1 -L128M --poolmetadataspare n $vg "$dev1" "$dev2"
+lvcreate --type thin -n $lv3 -V1G --thinpool $lv1 $vg
+lvcreate -n $lv2 -L64M -an $vg "$dev3"
+lvconvert -y --type cache --cachevol $lv2 --cachemode writethrough $vg/$lv1
+lvs -a $vg -o+devices
+do_test $lv1 $lv3
+
+# attach cache (cachepool) to thinpool data
+lvcreate --type thin-pool -n $lv1 -L128M --poolmetadataspare n $vg "$dev1" "$dev2"
+lvcreate --type thin -n $lv3 -V1G --thinpool $lv1 $vg
+lvcreate -y --type cache-pool -n $lv2 -L64M --poolmetadataspare n $vg "$dev3" "$dev6"
+lvconvert -y --type cache --cachepool $lv2 --poolmetadataspare n $vg/$lv1
+lvs -a $vg -o+devices
+do_test $lv1 $lv3
+
+# FIXME: test these thin pool data extensions done by dmeventd
+
+vgremove -f $vg
+



                 reply	other threads:[~2021-05-06 21:32 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210506213243.21B60384C003@sourceware.org \
    --to=teigland@sourceware.org \
    --cc=lvm-devel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.