qemu/tests/qemu-iotests/257.out
John Snow 0fff1f1371 block/backup: improve sync=bitmap work estimates
When making backups based on bitmaps, the work estimate can be more
accurate. Update iotests to reflect the new strategy.

TOP work estimates are broken, but do not get worse with this commit.
That issue is addressed in the following commits instead.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190716000117.25219-7-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
2019-08-16 16:28:03 -04:00

2333 lines
66 KiB
Plaintext

=== Mode bitmap; Bitmap Sync never with simulated failure ===
--- Preparing image & VM ---
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0", "share-rw": true}}
{"return": {}}
--- Write #0 ---
write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": []
}
}
--- Reference Backup #0 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0"}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Add Bitmap ---
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}
--- Write #1 ---
write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Reference Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1"}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
--- Write #2 ---
write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"persistent": false,
"recording": false,
"status": "disabled"
},
{
"busy": false,
"count": 458752,
"granularity": 65536,
"persistent": false,
"recording": true,
"status": "active"
},
{
"busy": true,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "frozen"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!
{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 655360,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 10 dirty sectors; have 10. OK!
--- Write #3 ---
write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 983040,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!
--- Reference Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2"}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2"}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 983040,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!
--- Cleanup ---
{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
"bitmaps": {
"device0": []
}
}
--- Verification ---
qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
=== Mode bitmap; Bitmap Sync never with intermediate failure ===
--- Preparing image & VM ---
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}}
{"return": {}}
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0", "share-rw": true}}
{"return": {}}
--- Write #0 ---
write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": []
}
}
--- Reference Backup #0 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0"}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Add Bitmap ---
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}
--- Write #1 ---
write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Reference Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1"}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"return": ""}
--- Test Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Write #3 ---
write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 917504,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 14 dirty sectors; have 14. OK!
--- Reference Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2"}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2"}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 917504,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 14 dirty sectors; have 14. OK!
--- Cleanup ---
{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
"bitmaps": {
"device0": []
}
}
--- Verification ---
qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
=== Mode bitmap; Bitmap Sync never without failure ===
--- Preparing image & VM ---
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0", "share-rw": true}}
{"return": {}}
--- Write #0 ---
write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": []
}
}
--- Reference Backup #0 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0"}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Add Bitmap ---
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}
--- Write #1 ---
write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Reference Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1"}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
--- Write #2 ---
write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"persistent": false,
"recording": false,
"status": "disabled"
},
{
"busy": false,
"count": 458752,
"granularity": 65536,
"persistent": false,
"recording": true,
"status": "active"
},
{
"busy": true,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "frozen"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 655360,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 10 dirty sectors; have 10. OK!
--- Write #3 ---
write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 983040,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!
--- Reference Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2"}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2"}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 983040,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!
--- Cleanup ---
{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
"bitmaps": {
"device0": []
}
}
--- Verification ---
qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
=== Mode bitmap; Bitmap Sync on-success with simulated failure ===
--- Preparing image & VM ---
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0", "share-rw": true}}
{"return": {}}
--- Write #0 ---
write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": []
}
}
--- Reference Backup #0 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0"}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Add Bitmap ---
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}
--- Write #1 ---
write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Reference Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1"}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
--- Write #2 ---
write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"persistent": false,
"recording": false,
"status": "disabled"
},
{
"busy": false,
"count": 458752,
"granularity": 65536,
"persistent": false,
"recording": true,
"status": "active"
},
{
"busy": true,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "frozen"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!
{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 655360,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 10 dirty sectors; have 10. OK!
--- Write #3 ---
write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 983040,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 15 dirty sectors; have 15. OK!
--- Reference Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2"}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2"}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!
--- Cleanup ---
{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
"bitmaps": {
"device0": []
}
}
--- Verification ---
qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
=== Mode bitmap; Bitmap Sync on-success with intermediate failure ===
--- Preparing image & VM ---
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}}
{"return": {}}
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0", "share-rw": true}}
{"return": {}}
--- Write #0 ---
write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": []
}
}
--- Reference Backup #0 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0"}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Add Bitmap ---
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}
--- Write #1 ---
write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Reference Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1"}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"return": ""}
--- Test Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Write #3 ---
write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 917504,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 14 dirty sectors; have 14. OK!
--- Reference Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2"}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2"}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!
--- Cleanup ---
{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
"bitmaps": {
"device0": []
}
}
--- Verification ---
qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
=== Mode bitmap; Bitmap Sync on-success without failure ===
--- Preparing image & VM ---
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0", "share-rw": true}}
{"return": {}}
--- Write #0 ---
write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": []
}
}
--- Reference Backup #0 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0"}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Add Bitmap ---
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}
--- Write #1 ---
write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Reference Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1"}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
--- Write #2 ---
write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"persistent": false,
"recording": false,
"status": "disabled"
},
{
"busy": false,
"count": 458752,
"granularity": 65536,
"persistent": false,
"recording": true,
"status": "active"
},
{
"busy": true,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "frozen"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 458752,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!
--- Write #3 ---
write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 786432,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!
--- Reference Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2"}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2"}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!
--- Cleanup ---
{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
"bitmaps": {
"device0": []
}
}
--- Verification ---
qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
=== Mode bitmap; Bitmap Sync always with simulated failure ===
--- Preparing image & VM ---
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0", "share-rw": true}}
{"return": {}}
--- Write #0 ---
write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": []
}
}
--- Reference Backup #0 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0"}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Add Bitmap ---
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}
--- Write #1 ---
write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Reference Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1"}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
--- Write #2 ---
write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"persistent": false,
"recording": false,
"status": "disabled"
},
{
"busy": false,
"count": 458752,
"granularity": 65536,
"persistent": false,
"recording": true,
"status": "active"
},
{
"busy": true,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "frozen"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!
{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 458752,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!
--- Write #3 ---
write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 786432,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!
--- Reference Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2"}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2"}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!
--- Cleanup ---
{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
"bitmaps": {
"device0": []
}
}
--- Verification ---
qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
=== Mode bitmap; Bitmap Sync always with intermediate failure ===
--- Preparing image & VM ---
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}}
{"return": {}}
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0", "share-rw": true}}
{"return": {}}
--- Write #0 ---
write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": []
}
}
--- Reference Backup #0 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0"}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Add Bitmap ---
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}
--- Write #1 ---
write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Reference Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1"}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"return": ""}
--- Test Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 327680,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 5 dirty sectors; have 5. OK!
--- Write #3 ---
write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 851968,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 13 dirty sectors; have 13. OK!
--- Reference Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2"}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2"}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 851968, "offset": 851968, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!
--- Cleanup ---
{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
"bitmaps": {
"device0": []
}
}
--- Verification ---
qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
=== Mode bitmap; Bitmap Sync always without failure ===
--- Preparing image & VM ---
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0", "share-rw": true}}
{"return": {}}
--- Write #0 ---
write -P0x49 0x0000000 0x10000
{"return": ""}
write -P0x6c 0x0100000 0x10000
{"return": ""}
write -P0x6f 0x2000000 0x10000
{"return": ""}
write -P0x76 0x3ff0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": []
}
}
--- Reference Backup #0 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0"}}
{"return": {}}
{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Add Bitmap ---
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}
--- Write #1 ---
write -P0x65 0x0000000 0x10000
{"return": ""}
write -P0x77 0x00f8000 0x10000
{"return": ""}
write -P0x72 0x2008000 0x10000
{"return": ""}
write -P0x69 0x3fe0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
--- Reference Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1"}}
{"return": {}}
{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #1 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
--- Write #2 ---
write -P0x74 0x0010000 0x10000
{"return": ""}
write -P0x69 0x00e8000 0x10000
{"return": ""}
write -P0x6e 0x2018000 0x10000
{"return": ""}
write -P0x67 0x3fe0000 0x20000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"persistent": false,
"recording": false,
"status": "disabled"
},
{
"busy": false,
"count": 458752,
"granularity": 65536,
"persistent": false,
"recording": true,
"status": "active"
},
{
"busy": true,
"count": 393216,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "frozen"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 6 dirty sectors; have 6. OK!
= Checking Bitmap (anonymous) =
expecting 7 dirty sectors; have 7. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 458752,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 7 dirty sectors; have 7. OK!
--- Write #3 ---
write -P0xaa 0x0010000 0x30000
{"return": ""}
write -P0xbb 0x00d8000 0x10000
{"return": ""}
write -P0xcc 0x2028000 0x10000
{"return": ""}
write -P0xdd 0x3fc0000 0x10000
{"return": ""}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 786432,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 12 dirty sectors; have 12. OK!
--- Reference Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2"}}
{"return": {}}
{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
--- Test Backup #2 ---
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2"}}
{"return": {}}
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
{
"busy": false,
"count": 0,
"granularity": 65536,
"name": "bitmap0",
"persistent": false,
"recording": true,
"status": "active"
}
]
}
}
= Checking Bitmap bitmap0 =
expecting 0 dirty sectors; have 0. OK!
--- Cleanup ---
{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}}
{"return": {}}
{
"bitmaps": {
"device0": []
}
}
--- Verification ---
qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK!
=== API failure tests ===
--- Preparing image & VM ---
{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}}
{"return": {}}
{"execute": "device_add", "arguments": {"drive": "drive0", "driver": "scsi-hd", "id": "device0"}}
{"return": {}}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}}
{"return": {}}
{}
{}
{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}}
{"return": {}}
{}
{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}}
{"return": {}}
-- Testing invalid QMP commands --
-- Sync mode incremental tests --
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "job-id": "api_job", "sync": "incremental", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}}
-- Sync mode bitmap tests --
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}
{"execute": "blockdev-backup", "arguments": {"device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}}