tests: qemublock: Add synthetic snapshot+checkpoint test data

Add a faked qemu output which would simulate scenario where libvirt
would take a snapshot and checkpoint simultaneously. This is visible in
libvirt-2-format node where bitmap 'c' appears, but bitmap 'b' which is
active in the previous layer is not present.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2020-01-09 15:32:49 +01:00
parent 0cf33ab8f1
commit d7d97e87af
3 changed files with 841 additions and 0 deletions

View File

@ -970,6 +970,7 @@ mymain(void)
TEST_BITMAP_DETECT("basic");
TEST_BITMAP_DETECT("synthetic");
TEST_BITMAP_DETECT("snapshots");
TEST_BITMAP_DETECT("snapshots-synthetic-checkpoint");
#define TEST_BACKUP_BITMAP_CALCULATE(testname, source, incrbackup, named) \
do { \

View File

@ -0,0 +1,827 @@
[
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"backing-image": {
"backing-image": {
"backing-image": {
"backing-image": {
"virtual-size": 10485760,
"filename": "/tmp/pull4.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911522",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.qcow2",
"backing-filename": "/tmp/pull4.qcow2",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911527",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 217088,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "c",
"granularity": 65536
},
{
"flags": [
],
"name": "b",
"granularity": 65536
},
{
"flags": [
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911522",
"backing-filename": "/tmp/pull4.1575911522",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911540",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 212992,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "d",
"granularity": 65536
},
{
"flags": [
],
"name": "c",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911527",
"backing-filename": "/tmp/pull4.1575911527",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911550",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 212992,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"in-use",
"auto"
],
"name": "current",
"granularity": 65536
},
{
"flags": [
"in-use"
],
"name": "d",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911540",
"backing-filename": "/tmp/pull4.1575911540",
"dirty-flag": false
},
"iops_wr": 0,
"ro": false,
"node-name": "libvirt-1-format",
"backing_file_depth": 4,
"drv": "qcow2",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"backing_file": "/tmp/pull4.1575911540",
"dirty-bitmaps": [
{
"name": "d",
"recording": false,
"persistent": true,
"busy": false,
"status": "disabled",
"granularity": 65536,
"count": 0
},
{
"name": "current",
"recording": true,
"persistent": true,
"busy": false,
"status": "active",
"granularity": 65536,
"count": 0
}
],
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911550",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 393728,
"filename": "/tmp/pull4.1575911550",
"format": "file",
"actual-size": 212992,
"dirty-flag": false
},
"iops_wr": 0,
"ro": false,
"node-name": "libvirt-1-storage",
"backing_file_depth": 0,
"drv": "file",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911550",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"backing-image": {
"backing-image": {
"backing-image": {
"virtual-size": 10485760,
"filename": "/tmp/pull4.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911522",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.qcow2",
"backing-filename": "/tmp/pull4.qcow2",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911527",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 217088,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "c",
"granularity": 65536
},
{
"flags": [
],
"name": "b",
"granularity": 65536
},
{
"flags": [
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911522",
"backing-filename": "/tmp/pull4.1575911522",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911540",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 212992,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "d",
"granularity": 65536
},
{
"flags": [
],
"name": "c",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911527",
"backing-filename": "/tmp/pull4.1575911527",
"dirty-flag": false
},
"iops_wr": 0,
"ro": true,
"node-name": "libvirt-2-format",
"backing_file_depth": 3,
"drv": "qcow2",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"backing_file": "/tmp/pull4.1575911527",
"dirty-bitmaps": [
{
"name": "c",
"recording": false,
"persistent": true,
"busy": false,
"status": "disabled",
"granularity": 65536,
"count": 0
},
{
"name": "d",
"recording": true,
"persistent": true,
"busy": false,
"status": "active",
"granularity": 65536,
"count": 0
}
],
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911540",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 393728,
"filename": "/tmp/pull4.1575911540",
"format": "file",
"actual-size": 212992,
"dirty-flag": false
},
"iops_wr": 0,
"ro": false,
"node-name": "libvirt-2-storage",
"backing_file_depth": 0,
"drv": "file",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911540",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"backing-image": {
"backing-image": {
"virtual-size": 10485760,
"filename": "/tmp/pull4.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911522",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.qcow2",
"backing-filename": "/tmp/pull4.qcow2",
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911527",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 217088,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "c",
"granularity": 65536
},
{
"flags": [
],
"name": "b",
"granularity": 65536
},
{
"flags": [
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.1575911522",
"backing-filename": "/tmp/pull4.1575911522",
"dirty-flag": false
},
"iops_wr": 0,
"ro": true,
"node-name": "libvirt-3-format",
"backing_file_depth": 2,
"drv": "qcow2",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"backing_file": "/tmp/pull4.1575911522",
"dirty-bitmaps": [
{
"name": "a",
"recording": false,
"persistent": true,
"busy": false,
"status": "disabled",
"granularity": 65536,
"count": 0
},
{
"name": "b",
"recording": true,
"persistent": true,
"busy": false,
"status": "disabled",
"granularity": 65536,
"count": 0
}
],
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911527",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 459264,
"filename": "/tmp/pull4.1575911527",
"format": "file",
"actual-size": 217088,
"dirty-flag": false
},
"iops_wr": 0,
"ro": false,
"node-name": "libvirt-3-storage",
"backing_file_depth": 0,
"drv": "file",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911527",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"backing-image": {
"virtual-size": 10485760,
"filename": "/tmp/pull4.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"dirty-flag": false
},
"backing-filename-format": "qcow2",
"virtual-size": 10485760,
"filename": "/tmp/pull4.1575911522",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"full-backing-filename": "/tmp/pull4.qcow2",
"backing-filename": "/tmp/pull4.qcow2",
"dirty-flag": false
},
"iops_wr": 0,
"ro": true,
"node-name": "libvirt-4-format",
"backing_file_depth": 1,
"drv": "qcow2",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"backing_file": "/tmp/pull4.qcow2",
"dirty-bitmaps": [
{
"name": "a",
"recording": true,
"persistent": true,
"busy": false,
"status": "active",
"granularity": 65536,
"count": 0
}
],
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911522",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 328192,
"filename": "/tmp/pull4.1575911522",
"format": "file",
"actual-size": 208896,
"dirty-flag": false
},
"iops_wr": 0,
"ro": false,
"node-name": "libvirt-4-storage",
"backing_file_depth": 0,
"drv": "file",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.1575911522",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 10485760,
"filename": "/tmp/pull4.qcow2",
"cluster-size": 65536,
"format": "qcow2",
"actual-size": 208896,
"format-specific": {
"type": "qcow2",
"data": {
"compat": "1.1",
"lazy-refcounts": false,
"bitmaps": [
{
"flags": [
"auto"
],
"name": "a",
"granularity": 65536
}
],
"refcount-bits": 16,
"corrupt": false
}
},
"dirty-flag": false
},
"iops_wr": 0,
"ro": true,
"node-name": "libvirt-5-format",
"backing_file_depth": 0,
"drv": "qcow2",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"dirty-bitmaps": [
{
"name": "a",
"recording": true,
"persistent": true,
"busy": false,
"status": "active",
"granularity": 65536,
"count": 0
}
],
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.qcow2",
"encryption_key_missing": false
},
{
"iops_rd": 0,
"detect_zeroes": "off",
"image": {
"virtual-size": 328192,
"filename": "/tmp/pull4.qcow2",
"format": "file",
"actual-size": 208896,
"dirty-flag": false
},
"iops_wr": 0,
"ro": false,
"node-name": "libvirt-5-storage",
"backing_file_depth": 0,
"drv": "file",
"iops": 0,
"bps_wr": 0,
"write_threshold": 0,
"encrypted": false,
"bps": 0,
"bps_rd": 0,
"cache": {
"no-flush": false,
"direct": false,
"writeback": true
},
"file": "/tmp/pull4.qcow2",
"encryption_key_missing": false
}
]

View File

@ -0,0 +1,13 @@
libvirt-1-format:
d: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
current: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
libvirt-2-format:
c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
d: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
libvirt-3-format:
a: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
b: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
libvirt-4-format:
a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
libvirt-5-format:
a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0