[PATCH 27/32] qemublocktest: Add 'basic' tests for commit bitmap handling

Peter Krempa posted 32 patches 5 years, 6 months ago
[PATCH 27/32] qemublocktest: Add 'basic' tests for commit bitmap handling
Posted by Peter Krempa 5 years, 6 months ago
In the 'basic case we have few bitmaps in only the top layer. Simulate
commit into the backing of the top layer and also 2 levels deep.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 tests/qemublocktest.c                         |   4 +
 .../bitmapblockcommit/basic-1-2               | 145 ++++++++++++++++++
 .../bitmapblockcommit/basic-1-3               | 145 ++++++++++++++++++
 .../bitmapblockcommit/basic-2-3               |   1 +
 4 files changed, 295 insertions(+)
 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-2
 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-3
 create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-2-3

diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index 5be98b9320..1a8ce3b73d 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -1358,6 +1358,10 @@ mymain(void)

     TEST_BITMAP_BLOCKCOMMIT("empty", 1, 2, "empty");

+    TEST_BITMAP_BLOCKCOMMIT("basic-1-2", 1, 2, "basic");
+    TEST_BITMAP_BLOCKCOMMIT("basic-1-3", 1, 3, "basic");
+    TEST_BITMAP_BLOCKCOMMIT("basic-2-3", 2, 3, "basic");
+
  cleanup:
     qemuTestDriverFree(&driver);
     VIR_FREE(capslatest_x86_64);
diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-1-2 b/tests/qemublocktestdata/bitmapblockcommit/basic-1-2
new file mode 100644
index 0000000000..d393d31044
--- /dev/null
+++ b/tests/qemublocktestdata/bitmapblockcommit/basic-1-2
@@ -0,0 +1,145 @@
+merge bitmpas:
+[
+  {
+    "type": "block-dirty-bitmap-add",
+    "data": {
+      "node": "libvirt-2-format",
+      "name": "a",
+      "persistent": true,
+      "disabled": false,
+      "granularity": 65536
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-merge",
+    "data": {
+      "node": "libvirt-2-format",
+      "target": "a",
+      "bitmaps": [
+        {
+          "node": "libvirt-1-format",
+          "name": "a"
+        },
+        {
+          "node": "libvirt-2-format",
+          "name": "libvirt-tmp-activewrite"
+        }
+      ]
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-add",
+    "data": {
+      "node": "libvirt-2-format",
+      "name": "b",
+      "persistent": true,
+      "disabled": false,
+      "granularity": 65536
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-merge",
+    "data": {
+      "node": "libvirt-2-format",
+      "target": "b",
+      "bitmaps": [
+        {
+          "node": "libvirt-1-format",
+          "name": "b"
+        },
+        {
+          "node": "libvirt-2-format",
+          "name": "libvirt-tmp-activewrite"
+        }
+      ]
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-add",
+    "data": {
+      "node": "libvirt-2-format",
+      "name": "c",
+      "persistent": true,
+      "disabled": false,
+      "granularity": 65536
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-merge",
+    "data": {
+      "node": "libvirt-2-format",
+      "target": "c",
+      "bitmaps": [
+        {
+          "node": "libvirt-1-format",
+          "name": "c"
+        },
+        {
+          "node": "libvirt-2-format",
+          "name": "libvirt-tmp-activewrite"
+        }
+      ]
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-add",
+    "data": {
+      "node": "libvirt-2-format",
+      "name": "d",
+      "persistent": true,
+      "disabled": false,
+      "granularity": 65536
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-merge",
+    "data": {
+      "node": "libvirt-2-format",
+      "target": "d",
+      "bitmaps": [
+        {
+          "node": "libvirt-1-format",
+          "name": "d"
+        },
+        {
+          "node": "libvirt-2-format",
+          "name": "libvirt-tmp-activewrite"
+        }
+      ]
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-add",
+    "data": {
+      "node": "libvirt-2-format",
+      "name": "current",
+      "persistent": true,
+      "disabled": false,
+      "granularity": 65536
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-merge",
+    "data": {
+      "node": "libvirt-2-format",
+      "target": "current",
+      "bitmaps": [
+        {
+          "node": "libvirt-1-format",
+          "name": "current"
+        },
+        {
+          "node": "libvirt-2-format",
+          "name": "libvirt-tmp-activewrite"
+        }
+      ]
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-remove",
+    "data": {
+      "node": "libvirt-2-format",
+      "name": "libvirt-tmp-activewrite"
+    }
+  }
+]
diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-1-3 b/tests/qemublocktestdata/bitmapblockcommit/basic-1-3
new file mode 100644
index 0000000000..3fa902c354
--- /dev/null
+++ b/tests/qemublocktestdata/bitmapblockcommit/basic-1-3
@@ -0,0 +1,145 @@
+merge bitmpas:
+[
+  {
+    "type": "block-dirty-bitmap-add",
+    "data": {
+      "node": "libvirt-3-format",
+      "name": "a",
+      "persistent": true,
+      "disabled": false,
+      "granularity": 65536
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-merge",
+    "data": {
+      "node": "libvirt-3-format",
+      "target": "a",
+      "bitmaps": [
+        {
+          "node": "libvirt-1-format",
+          "name": "a"
+        },
+        {
+          "node": "libvirt-3-format",
+          "name": "libvirt-tmp-activewrite"
+        }
+      ]
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-add",
+    "data": {
+      "node": "libvirt-3-format",
+      "name": "b",
+      "persistent": true,
+      "disabled": false,
+      "granularity": 65536
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-merge",
+    "data": {
+      "node": "libvirt-3-format",
+      "target": "b",
+      "bitmaps": [
+        {
+          "node": "libvirt-1-format",
+          "name": "b"
+        },
+        {
+          "node": "libvirt-3-format",
+          "name": "libvirt-tmp-activewrite"
+        }
+      ]
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-add",
+    "data": {
+      "node": "libvirt-3-format",
+      "name": "c",
+      "persistent": true,
+      "disabled": false,
+      "granularity": 65536
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-merge",
+    "data": {
+      "node": "libvirt-3-format",
+      "target": "c",
+      "bitmaps": [
+        {
+          "node": "libvirt-1-format",
+          "name": "c"
+        },
+        {
+          "node": "libvirt-3-format",
+          "name": "libvirt-tmp-activewrite"
+        }
+      ]
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-add",
+    "data": {
+      "node": "libvirt-3-format",
+      "name": "d",
+      "persistent": true,
+      "disabled": false,
+      "granularity": 65536
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-merge",
+    "data": {
+      "node": "libvirt-3-format",
+      "target": "d",
+      "bitmaps": [
+        {
+          "node": "libvirt-1-format",
+          "name": "d"
+        },
+        {
+          "node": "libvirt-3-format",
+          "name": "libvirt-tmp-activewrite"
+        }
+      ]
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-add",
+    "data": {
+      "node": "libvirt-3-format",
+      "name": "current",
+      "persistent": true,
+      "disabled": false,
+      "granularity": 65536
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-merge",
+    "data": {
+      "node": "libvirt-3-format",
+      "target": "current",
+      "bitmaps": [
+        {
+          "node": "libvirt-1-format",
+          "name": "current"
+        },
+        {
+          "node": "libvirt-3-format",
+          "name": "libvirt-tmp-activewrite"
+        }
+      ]
+    }
+  },
+  {
+    "type": "block-dirty-bitmap-remove",
+    "data": {
+      "node": "libvirt-3-format",
+      "name": "libvirt-tmp-activewrite"
+    }
+  }
+]
diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-2-3 b/tests/qemublocktestdata/bitmapblockcommit/basic-2-3
new file mode 100644
index 0000000000..9260011852
--- /dev/null
+++ b/tests/qemublocktestdata/bitmapblockcommit/basic-2-3
@@ -0,0 +1 @@
+merge bitmpas:
-- 
2.26.2

Re: [PATCH 27/32] qemublocktest: Add 'basic' tests for commit bitmap handling
Posted by Eric Blake 5 years, 6 months ago
On 6/15/20 12:10 PM, Peter Krempa wrote:
> In the 'basic case we have few bitmaps in only the top layer. Simulate

stray or missing '

> commit into the backing of the top layer and also 2 levels deep.
> 
> Signed-off-by: Peter Krempa <pkrempa@redhat.com>
> ---
>   tests/qemublocktest.c                         |   4 +
>   .../bitmapblockcommit/basic-1-2               | 145 ++++++++++++++++++
>   .../bitmapblockcommit/basic-1-3               | 145 ++++++++++++++++++
>   .../bitmapblockcommit/basic-2-3               |   1 +
>   4 files changed, 295 insertions(+)
>   create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-2
>   create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-3
>   create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-2-3
> 

> +++ b/tests/qemublocktestdata/bitmapblockcommit/basic-1-2
> @@ -0,0 +1,145 @@
> +merge bitmpas:

bitmaps (fixing the source of the typo probably has ripple effects in 
expected output, and might even be in a prior patch...)

> +[
> +  {
> +    "type": "block-dirty-bitmap-add",
> +    "data": {
> +      "node": "libvirt-2-format",
> +      "name": "a",
> +      "persistent": true,
> +      "disabled": false,
> +      "granularity": 65536
> +    }
> +  },
> +  {
> +    "type": "block-dirty-bitmap-merge",
> +    "data": {
> +      "node": "libvirt-2-format",
> +      "target": "a",
> +      "bitmaps": [
> +        {
> +          "node": "libvirt-1-format",
> +          "name": "a"
> +        },
> +        {
> +          "node": "libvirt-2-format",
> +          "name": "libvirt-tmp-activewrite"
> +        }

Hmm, so you are merging the 'libvirt-tmp-activewrite' bitmap into bitmap 
(libvirt-2-format,a)...

> +      ]
> +    }
> +  },
> +  {
> +    "type": "block-dirty-bitmap-add",
> +    "data": {
> +      "node": "libvirt-2-format",
> +      "name": "b",
> +      "persistent": true,
> +      "disabled": false,
> +      "granularity": 65536
> +    }
> +  },
> +  {
> +    "type": "block-dirty-bitmap-merge",
> +    "data": {
> +      "node": "libvirt-2-format",
> +      "target": "b",
> +      "bitmaps": [
> +        {
> +          "node": "libvirt-1-format",
> +          "name": "b"
> +        },
> +        {
> +          "node": "libvirt-2-format",
> +          "name": "libvirt-tmp-activewrite"

...and (libvirt-2-format,b) simultaneously.  But that still makes sense: 
if libvirt-tmp-activewrite contains bits for everything that has changed 
since a certain point in time, and both bitmap a and b will be left 
active when the operation is done, they will both need those same bits 
merged in.

It took me a while to see why you were reusing a bitmap as a source to 
more than one destination, but it looks correct.  With the typo fixed,

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org