summaryrefslogtreecommitdiff
path: root/test/shell/caching-snapshot.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test/shell/caching-snapshot.sh')
-rw-r--r--test/shell/caching-snapshot.sh162
1 files changed, 162 insertions, 0 deletions
diff --git a/test/shell/caching-snapshot.sh b/test/shell/caching-snapshot.sh
new file mode 100644
index 000000000..d73f4ad06
--- /dev/null
+++ b/test/shell/caching-snapshot.sh
@@ -0,0 +1,162 @@
+#!/usr/bin/env bash
+
+# Copyright (C) 2018 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 snapshot on cache|writecache
+
+SKIP_WITH_LVMPOLLD=1
+
+. lib/inittest
+
+lvm segtypes 2>/dev/null | grep writecache$ >/dev/null || {
+ skip 'Writecache is not built-in.'
+}
+aux have_cache 1 10 0 || skip
+which mkfs.ext4 || skip
+
+mount_dir="mnt"
+mkdir -p "$mount_dir"
+
+mount_dir_snap="mnt_snap"
+mkdir -p "$mount_dir_snap"
+
+# generate random data
+dd if=/dev/urandom of=pattern1 bs=512K count=1
+
+aux prepare_devs 2 310
+
+vgcreate $SHARED $vg "$dev1" "$dev2"
+
+# creating a snapshot on top of a cache|writecache
+
+test_snap_create() {
+ # cache | writecache
+ local convert_type=$1
+
+ # --cachepool | --cachevol
+ local convert_option=$2
+
+ lvcreate -n $lv1 -L 300 -an $vg "$dev1"
+ lvcreate -n fast -l 4 -an $vg "$dev2"
+ lvconvert -y --type $convert_type $convert_option fast $vg/$lv1
+ lvchange -ay $vg/$lv1
+ mkfs.ext4 "$DM_DEV_DIR/$vg/$lv1"
+ mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"
+ cp pattern1 "$mount_dir/pattern1a"
+ lvcreate -s -L 32 -n snap $vg/$lv1
+ cp pattern1 "$mount_dir/pattern1b"
+ mount "$DM_DEV_DIR/$vg/snap" "$mount_dir_snap"
+ not ls "$mount_dir_snap/pattern1b"
+ rm "$mount_dir/pattern1a"
+ diff pattern1 "$mount_dir_snap/pattern1a"
+ umount "$mount_dir_snap"
+ lvconvert --splitcache $vg/$lv1
+ umount "$mount_dir"
+ lvchange -an $vg/$lv1
+ lvchange -an $vg/fast
+ lvremove $vg/snap
+ lvremove $vg/$lv1
+ lvremove $vg/fast
+}
+
+test_snap_create cache --cachepool
+test_snap_create cache --cachevol
+test_snap_create writecache --cachevol
+
+# removing cache|writecache while snapshot exists
+
+test_snap_remove() {
+ # cache | writecache
+ local convert_type=$1
+
+ # --cachepool | --cachevol
+ local convert_option=$2
+
+ lvcreate -n $lv1 -L 300 -an $vg "$dev1"
+ lvcreate -n fast -l 4 -an $vg "$dev2"
+ lvconvert -y --type $convert_type $convert_option fast $vg/$lv1
+ lvchange -ay $vg/$lv1
+ mkfs.ext4 "$DM_DEV_DIR/$vg/$lv1"
+ mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"
+ cp pattern1 "$mount_dir/pattern1a"
+ lvcreate -s -L 32 -n snap $vg/$lv1
+ cp pattern1 "$mount_dir/pattern1b"
+ lvconvert --splitcache $vg/$lv1
+ mount "$DM_DEV_DIR/$vg/snap" "$mount_dir_snap"
+ not ls "$mount_dir_snap/pattern1b"
+ rm "$mount_dir/pattern1a"
+ diff pattern1 "$mount_dir_snap/pattern1a"
+ umount "$mount_dir_snap"
+ umount "$mount_dir"
+ lvchange -an $vg/$lv1
+ lvchange -an $vg/fast
+ lvremove $vg/snap
+ lvremove $vg/$lv1
+ lvremove $vg/fast
+}
+
+test_snap_remove cache --cachepool
+test_snap_remove cache --cachevol
+test_snap_remove writecache --cachevol
+
+# adding cache|writecache to an LV that has a snapshot
+
+test_caching_with_snap() {
+ # cache | writecache
+ local convert_type=$1
+
+ # --cachepool | --cachevol
+ local convert_option=$2
+
+ lvcreate -n $lv1 -L 300 -an $vg "$dev1"
+ lvcreate -n fast -l 4 -an $vg "$dev2"
+ lvchange -ay $vg/$lv1
+ mkfs.ext4 "$DM_DEV_DIR/$vg/$lv1"
+ mount "$DM_DEV_DIR/$vg/$lv1" "$mount_dir"
+ cp pattern1 "$mount_dir/pattern1a"
+ lvcreate -s -L 32 -n snap $vg/$lv1
+ lvconvert -y --type $convert_type $convert_option fast $vg/$lv1
+ cp pattern1 "$mount_dir/pattern1b"
+ mount "$DM_DEV_DIR/$vg/snap" "$mount_dir_snap"
+ not ls "$mount_dir_snap/pattern1b"
+ mv "$mount_dir/pattern1a" "$mount_dir/pattern1c"
+ diff pattern1 "$mount_dir_snap/pattern1a"
+ lvconvert --splitcache $vg/$lv1
+ diff pattern1 "$mount_dir/pattern1c"
+ diff pattern1 "$mount_dir_snap/pattern1a"
+ umount "$mount_dir_snap"
+ umount "$mount_dir"
+ lvchange -an $vg/$lv1
+ lvchange -an $vg/fast
+ lvremove $vg/snap
+ lvremove $vg/$lv1
+ lvremove $vg/fast
+}
+
+test_caching_with_snap cache --cachepool
+test_caching_with_snap cache --cachevol
+test_caching_with_snap writecache --cachevol
+
+# adding cache|writecache to a snapshot is not allowed
+
+lvcreate -n $lv1 -L 300 $vg "$dev1"
+lvcreate -n fast -l 4 $vg "$dev2"
+mkfs.ext4 "$DM_DEV_DIR/$vg/$lv1"
+lvcreate -s -L 32 -n snap $vg/$lv1
+not lvconvert -y --type writecache --cachevol fast $vg/snap
+not lvconvert -y --type cache --cachevol fast $vg/snap
+not lvconvert -y --type cache --cachepool fast $vg/snap
+vgchange -an $vg
+lvremove $vg/snap
+lvremove $vg/$lv1
+lvremove $vg/fast
+
+vgremove -ff $vg