All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Teigland <teigland@sourceware.org>
To: lvm-devel@redhat.com
Subject: main - tests: new lvextend-caches
Date: Thu,  6 May 2021 19:44:16 +0000 (GMT)	[thread overview]
Message-ID: <20210506194416.0ABA6384B801@sourceware.org> (raw)

Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=92fcfc59b2b0a81121771cab3b21ec5dde797510
Commit:        92fcfc59b2b0a81121771cab3b21ec5dde797510
Parent:        318bb3a06b420e2ff9344138f20b879e82878866
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Thu May 6 14:43:10 2021 -0500
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Thu May 6 14:43:10 2021 -0500

tests: new lvextend-caches

to test lvextend of LVs with attached cache|writecache
---
 test/shell/lvextend-caches.sh | 150 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 150 insertions(+)

diff --git a/test/shell/lvextend-caches.sh b/test/shell/lvextend-caches.sh
new file mode 100644
index 000000000..de9af6d2c
--- /dev/null
+++ b/test/shell/lvextend-caches.sh
@@ -0,0 +1,150 @@
+#!/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 LV with cache|writecache
+
+. lib/inittest
+
+do_test()
+{
+	# create some initial data
+	lvchange -ay $vg/$lv1
+	mkfs.xfs -f -s size=4096 "$DM_DEV_DIR/$vg/$lv1"
+	mount "$DM_DEV_DIR/$vg/$lv1" "$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/$lv1 "$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/$lv1
+	lvchange -ay $vg/$lv1
+	mount "$DM_DEV_DIR/$vg/$lv1" "$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/$lv1
+	lvextend -L+64M $vg/$lv1 "$dev5"
+	lvs -a $vg -o+devices
+	lvchange -ay $vg/$lv1
+	mount "$DM_DEV_DIR/$vg/$lv1" "$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/$lv1
+
+	# 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/$lv1
+	lvchange -ay $vg/$lv1
+	mount "$DM_DEV_DIR/$vg/$lv1" "$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/$lv1
+	lvremove $vg/$lv1
+	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 66 # 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 type cache|writecache
+# cache with cachepool|cachevol
+# cache with writeback|writethrough
+
+# lv1 is main LV: 128M
+# lv2 is fast LV:  64M
+
+lvcreate -n $lv1 -L128M -an $vg "$dev1" "$dev2"
+lvcreate -n $lv2 -L64M -an $vg "$dev3"
+lvconvert -y --type writecache --cachevol $lv2 $vg/$lv1
+lvs -a $vg -o+devices
+do_test
+
+lvcreate -n $lv1 -L128M -an $vg "$dev1" "$dev2"
+lvcreate -n $lv2 -L64M -an $vg "$dev3"
+lvconvert -y --type cache --cachevol $lv2 --cachemode writeback $vg/$lv1
+lvs -a $vg -o+devices
+do_test
+
+lvcreate -n $lv1 -L128M -an $vg "$dev1" "$dev2"
+lvcreate -n $lv2 -L64M -an $vg "$dev3"
+lvconvert -y --type cache --cachevol $lv2 --cachemode writethrough $vg/$lv1
+lvs -a $vg -o+devices
+do_test
+
+lvcreate -n $lv1 -L128M -an $vg "$dev1" "$dev2"
+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
+
+vgremove -f $vg
+



                 reply	other threads:[~2021-05-06 19:44 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=20210506194416.0ABA6384B801@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.