[lvm-devel] master - tests: speed-up testing full of lvm2 metadata

Zdenek Kabelac zkabelac at sourceware.org
Mon Nov 19 12:18:37 UTC 2018


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=54de0d829b0e07ee48e92d68b428dfed8d6d7bf1
Commit:        54de0d829b0e07ee48e92d68b428dfed8d6d7bf1
Parent:        a53024cafccf1fd0eee02a63336247923dd72ce1
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Mon Nov 19 13:15:05 2018 +0100
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Mon Nov 19 13:16:03 2018 +0100

tests: speed-up testing full of lvm2 metadata

Generate faster full metadata condition.

FIXME: vgremove is extremaly slow with larger set of LVs.
---
 test/shell/metadata-full.sh |   69 ++++++++++++++++++++++++++++++++----------
 1 files changed, 52 insertions(+), 17 deletions(-)

diff --git a/test/shell/metadata-full.sh b/test/shell/metadata-full.sh
index 388ebcd..eb617ee 100644
--- a/test/shell/metadata-full.sh
+++ b/test/shell/metadata-full.sh
@@ -16,21 +16,22 @@ SKIP_WITH_LVMPOLLD=1
 
 . lib/inittest
 
+# this test needs lot of memory
+test "$(aux total_mem)" -gt 524288 || skip
+
 LVM_TEST_PVS=${LVM_TEST_PVS:-64}
 
 # aux prepare_vg $LVM_TEST_PVS
 
 unset LVM_LOG_FILE_MAX_LINES
 
-aux prepare_devs 64
+aux prepare_devs 64 1000
 get_devs
 
 vgcreate $SHARED -s 512K --metadatacopies 8 $vg "${DEVICES[@]}"
 
-# have tested to see how many LVs can be created in a
-# vg set up like this and it's around 1190, so pick a
-# number less than that but over 1024 (in case there's
-# some issue at the number 1024 we want to find it.)
+
+# Create a large metadata set, that getting close to 1/2MiB in size
 #
 # uses long tags to increase the size of the metadata
 # more quickly
@@ -40,15 +41,46 @@ vgcreate $SHARED -s 512K --metadatacopies 8 $vg "${DEVICES[@]}"
 # based on how much metadata it produces at the time this
 # is written.
 
+vgcfgbackup -f data $vg
+TEST_DEVS=930
+# Generate a lot of LV devices (size of 1 extent)
+awk -v TEST_DEVS=$TEST_DEVS '/^\t\}/ {
+    printf("\t}\n\tlogical_volumes {\n");
+    cnt=0;
+    for (i = 0; i < TEST_DEVS; i++) {
+	printf("\t\tlvol%d  {\n", i);
+	printf("\t\t\tid = \"%06d-1111-2222-3333-2222-1111-%06d\"\n", i, i);
+	print "\t\t\tstatus = [\"READ\", \"WRITE\", \"VISIBLE\"]";
+        print "\t\t\ttags = [\"A123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\"]";
+	print "\t\t\tsegment_count = 1";
+	print "\t\t\tsegment1 {";
+	print "\t\t\t\tstart_extent = 0";
+	print "\t\t\t\textent_count = 1";
+	print "\t\t\t\ttype = \"striped\"";
+	print "\t\t\t\tstripe_count = 1";
+	print "\t\t\t\tstripes = [";
+	print "\t\t\t\t\t\"pv0\", " cnt++;
+	printf("\t\t\t\t]\n\t\t\t}\n\t\t}\n");
+      }
+  }
+  {print}
+' data >data_new
+# Restoring big data set of LVs
+vgcfgrestore -f data_new $vg
 
-for i in `seq 1 1050`; do lvcreate -l1 -an --addtag A123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 $vg; done
 
 # should show non-zero
 vgs -o+pv_mda_free
 
 # these addtag's will fail at some point when metadata space is full
 
-for i in `seq 1 1050`; do lvchange --addtag B123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 $vg/lvol$i || true; done
+for i in $(seq 1 "$TEST_DEVS"); do
+	lvchange --addtag B123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 $vg/lvol$i || break;
+done
+
+# test we hit 'out-of-metadata-space'
+test "$i" -gt 5
+test "$i" -lt "$TEST_DEVS"
 
 # should show 0
 vgs -o+pv_mda_free
@@ -57,14 +89,18 @@ check vg_field $vg vg_mda_free 0
 # remove some of the tags to check that we can reduce the size of the
 # metadata, and continue using the vg
 
-for i in `seq 1 50`; do lvchange --deltag B123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 $vg/lvol$i || true; done
+for j in $(seq 1 "$i"); do
+	lvchange --deltag B123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 $vg/lvol$j;
+done
 
 # should show non-zero
 vgs -o+pv_mda_free
 
 # these will fail at some point when metadata space is full again
 
-for i in `seq 1 50`; do lvcreate -l1 -an --addtag C123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 $vg || true; done
+for i in $(seq 1 50); do
+	lvcreate -l1 -an --addtag C123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 $vg || break;
+done
 
 # should show 0
 vgs -o+pv_mda_free
@@ -76,21 +112,20 @@ check vg_field $vg vg_mda_free 0
 
 time vgs
 
-vgchange -ay $vg
-
-time vgs
-
-vgchange -an $vg
+# Avoid activation of large set of volumes - this is tested in  vgchange-many.sh
+#vgchange -ay $vg
+#vgchange -an $vg
 
 # see if we can remove LVs to make more metadata space,
 # and then create more LVs
 
-for i in `seq 1 50`; do lvremove -y $vg/lvol$i; done
+for i in $(seq 1 30); do lvremove -y $vg/lvol$i; done
 
-for i in `seq 1 10`; do lvcreate -l1 $vg; done
+for i in $(seq 1 10); do lvcreate -l1 $vg; done
 
 # should show non-zero
 vgs -o+pv_mda_free
 
+# FIXME:
+#    takes extreme amount of time, despite the fact, there are only few LVs active.
 vgremove -ff $vg
-




More information about the lvm-devel mailing list