mirror of
https://github.com/qemu/qemu.git
synced 2024-12-06 02:03:38 +08:00
00e30f05de
Drop write notifiers and use filter node instead. = Changes = 1. Add filter-node-name argument for backup qmp api. We have to do it in this commit, as 257 needs to be fixed. 2. There are no more write notifiers here, so is_write_notifier parameter is dropped from block-copy paths. 3. To sync with in-flight requests at job finish we now have drained removing of the filter, we don't need rw-lock. 4. Block-copy is now using BdrvChildren instead of BlockBackends 5. As backup-top owns these children, we also move block-copy state into backup-top's ownership. = Iotest changes = 56: op-blocker doesn't shoot now, as we set it on source, but then check on filter, when trying to start second backup. To keep the test we instead can catch another collision: both jobs will get 'drive0' job-id, as job-id parameter is unspecified. To prevent interleaving with file-posix locks (as they are dependent on config) let's use another target for second backup. Also, it's obvious now that we'd like to drop this op-blocker at all and add a test-case for two backups from one node (to different destinations) actually works. But not in these series. 141: Output changed: prepatch, "Node is in use" comes from bdrv_has_blk check inside qmp_blockdev_del. But we've dropped block-copy blk objects, so no more blk objects on source bs (job blk is on backup-top filter bs). New message is from op-blocker, which is the next check in qmp_blockdev_add. 257: The test wants to emulate guest write during backup. They should go to filter node, not to original source node, of course. Therefore we need to specify filter node name and use it. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-id: 20191001131409.14202-6-vsementsov@virtuozzo.com Reviewed-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
5294 lines
155 KiB
Plaintext
5294 lines
155 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 full; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 full; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "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": 67108864, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 full; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 full; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 full; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "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": 67108864, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"busy": false,
|
|
"count": 66125824,
|
|
"granularity": 65536,
|
|
"name": "bitmap0",
|
|
"persistent": false,
|
|
"recording": true,
|
|
"status": "active"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
= Checking Bitmap bitmap0 =
|
|
expecting 1009 dirty sectors; have 1009. OK!
|
|
|
|
--- Write #3 ---
|
|
|
|
write -P0xaa 0x0010000 0x30000
|
|
{"return": ""}
|
|
write -P0xbb 0x00d8000 0x10000
|
|
{"return": ""}
|
|
write -P0xcc 0x2028000 0x10000
|
|
{"return": ""}
|
|
write -P0xdd 0x3fc0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"busy": false,
|
|
"count": 66453504,
|
|
"granularity": 65536,
|
|
"name": "bitmap0",
|
|
"persistent": false,
|
|
"recording": true,
|
|
"status": "active"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
= Checking Bitmap bitmap0 =
|
|
expecting 1014 dirty sectors; have 1014. 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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": 66453504, "offset": 66453504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 full; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 top; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 top; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "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": 458752, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 top; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 top; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 top; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "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": 458752, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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 top; 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": {}}
|
|
|
|
--- Write #0 ---
|
|
|
|
write -P0x49 0x0000000 0x10000
|
|
{"return": ""}
|
|
write -P0x6c 0x0100000 0x10000
|
|
{"return": ""}
|
|
write -P0x6f 0x2000000 0x10000
|
|
{"return": ""}
|
|
write -P0x76 0x3ff0000 0x10000
|
|
{"return": ""}
|
|
{
|
|
"bitmaps": {}
|
|
}
|
|
|
|
--- 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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{
|
|
"bitmaps": {
|
|
"drive0": [
|
|
{
|
|
"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": {
|
|
"drive0": [
|
|
{
|
|
"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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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": {
|
|
"drive0": [
|
|
{
|
|
"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": {}
|
|
}
|
|
|
|
--- 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": "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "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", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}}
|
|
|
|
-- Sync mode full tests --
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode 'never' has no meaningful effect when combined with sync mode 'full'"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}}
|
|
|
|
-- Sync mode top tests --
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode 'never' has no meaningful effect when combined with sync mode 'top'"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}}
|
|
|
|
-- Sync mode none tests --
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "sync mode 'none' does not produce meaningful bitmap outputs"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "sync mode 'none' does not produce meaningful bitmap outputs"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "sync mode 'none' does not produce meaningful bitmap outputs"}}
|
|
|
|
{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target"}}
|
|
{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}}
|
|
|