| --- Preparing image & VM --- |
| |
| |
| --- Adding preliminary bitmaps A & B --- |
| |
| {"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmapA", "node": "drive0"}} |
| {"return": {}} |
| {"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmapB", "node": "drive0"}} |
| {"return": {}} |
| |
| --- Emulating writes --- |
| |
| write -P0x5d 0 64k |
| {"return": ""} |
| write -P0xd5 1M 64k |
| {"return": ""} |
| write -P0xdc 32M 64k |
| {"return": ""} |
| write -P0xcd 0x3ff0000 64k |
| {"return": ""} |
| { |
| "bitmaps": { |
| "drive0": [ |
| { |
| "busy": false, |
| "count": 262144, |
| "granularity": 65536, |
| "name": "bitmapB", |
| "persistent": false, |
| "recording": true |
| }, |
| { |
| "busy": false, |
| "count": 262144, |
| "granularity": 65536, |
| "name": "bitmapA", |
| "persistent": false, |
| "recording": true |
| } |
| ] |
| } |
| } |
| |
| --- Submitting & Aborting Transaction --- |
| |
| { |
| "execute": "transaction", |
| "arguments": { |
| "actions": [ |
| { |
| "data": { |
| "name": "bitmapB", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-disable" |
| }, |
| { |
| "data": { |
| "granularity": 65536, |
| "name": "bitmapC", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-add" |
| }, |
| { |
| "data": { |
| "name": "bitmapA", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-clear" |
| }, |
| { |
| "data": {}, |
| "type": "abort" |
| } |
| ] |
| } |
| } |
| { |
| "error": { |
| "class": "GenericError", |
| "desc": "Transaction aborted using Abort action" |
| } |
| } |
| { |
| "bitmaps": { |
| "drive0": [ |
| { |
| "busy": false, |
| "count": 262144, |
| "granularity": 65536, |
| "name": "bitmapB", |
| "persistent": false, |
| "recording": true |
| }, |
| { |
| "busy": false, |
| "count": 262144, |
| "granularity": 65536, |
| "name": "bitmapA", |
| "persistent": false, |
| "recording": true |
| } |
| ] |
| } |
| } |
| |
| --- Disabling B & Adding C --- |
| |
| { |
| "execute": "transaction", |
| "arguments": { |
| "actions": [ |
| { |
| "data": { |
| "name": "bitmapB", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-disable" |
| }, |
| { |
| "data": { |
| "granularity": 65536, |
| "name": "bitmapC", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-add" |
| }, |
| { |
| "data": { |
| "name": "bitmapC", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-disable" |
| }, |
| { |
| "data": { |
| "name": "bitmapC", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-enable" |
| } |
| ] |
| } |
| } |
| { |
| "return": {} |
| } |
| |
| --- Emulating further writes --- |
| |
| write -P0xab 0 64k |
| {"return": ""} |
| write -P0xad 0x00f8000 64k |
| {"return": ""} |
| write -P0x1d 0x2008000 64k |
| {"return": ""} |
| write -P0xea 0x3fe0000 64k |
| {"return": ""} |
| |
| --- Disabling A & C --- |
| |
| { |
| "execute": "transaction", |
| "arguments": { |
| "actions": [ |
| { |
| "data": { |
| "name": "bitmapA", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-disable" |
| }, |
| { |
| "data": { |
| "name": "bitmapC", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-disable" |
| } |
| ] |
| } |
| } |
| { |
| "return": {} |
| } |
| { |
| "bitmaps": { |
| "drive0": [ |
| { |
| "busy": false, |
| "count": 393216, |
| "granularity": 65536, |
| "name": "bitmapC", |
| "persistent": false, |
| "recording": false |
| }, |
| { |
| "busy": false, |
| "count": 262144, |
| "granularity": 65536, |
| "name": "bitmapB", |
| "persistent": false, |
| "recording": false |
| }, |
| { |
| "busy": false, |
| "count": 458752, |
| "granularity": 65536, |
| "name": "bitmapA", |
| "persistent": false, |
| "recording": false |
| } |
| ] |
| } |
| } |
| |
| --- Submitting & Aborting Merge Transaction --- |
| |
| { |
| "execute": "transaction", |
| "arguments": { |
| "actions": [ |
| { |
| "data": { |
| "disabled": true, |
| "granularity": 65536, |
| "name": "bitmapD", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-add" |
| }, |
| { |
| "data": { |
| "bitmaps": [ |
| "bitmapB", |
| "bitmapC" |
| ], |
| "node": "drive0", |
| "target": "bitmapD" |
| }, |
| "type": "block-dirty-bitmap-merge" |
| }, |
| { |
| "data": {}, |
| "type": "abort" |
| } |
| ] |
| } |
| } |
| { |
| "error": { |
| "class": "GenericError", |
| "desc": "Transaction aborted using Abort action" |
| } |
| } |
| { |
| "bitmaps": { |
| "drive0": [ |
| { |
| "busy": false, |
| "count": 393216, |
| "granularity": 65536, |
| "name": "bitmapC", |
| "persistent": false, |
| "recording": false |
| }, |
| { |
| "busy": false, |
| "count": 262144, |
| "granularity": 65536, |
| "name": "bitmapB", |
| "persistent": false, |
| "recording": false |
| }, |
| { |
| "busy": false, |
| "count": 458752, |
| "granularity": 65536, |
| "name": "bitmapA", |
| "persistent": false, |
| "recording": false |
| } |
| ] |
| } |
| } |
| |
| --- Creating D as a merge of B & C --- |
| |
| { |
| "execute": "transaction", |
| "arguments": { |
| "actions": [ |
| { |
| "data": { |
| "disabled": true, |
| "granularity": 65536, |
| "name": "bitmapD", |
| "node": "drive0" |
| }, |
| "type": "block-dirty-bitmap-add" |
| }, |
| { |
| "data": { |
| "bitmaps": [ |
| "bitmapB", |
| "bitmapC" |
| ], |
| "node": "drive0", |
| "target": "bitmapD" |
| }, |
| "type": "block-dirty-bitmap-merge" |
| } |
| ] |
| } |
| } |
| { |
| "return": {} |
| } |
| { |
| "bitmaps": { |
| "drive0": [ |
| { |
| "busy": false, |
| "count": 458752, |
| "granularity": 65536, |
| "name": "bitmapD", |
| "persistent": false, |
| "recording": false |
| }, |
| { |
| "busy": false, |
| "count": 393216, |
| "granularity": 65536, |
| "name": "bitmapC", |
| "persistent": false, |
| "recording": false |
| }, |
| { |
| "busy": false, |
| "count": 262144, |
| "granularity": 65536, |
| "name": "bitmapB", |
| "persistent": false, |
| "recording": false |
| }, |
| { |
| "busy": false, |
| "count": 458752, |
| "granularity": 65536, |
| "name": "bitmapA", |
| "persistent": false, |
| "recording": false |
| } |
| ] |
| } |
| } |
| |
| --- Removing bitmaps A, B, C, and D --- |
| |
| {"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmapA", "node": "drive0"}} |
| {"return": {}} |
| {"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmapB", "node": "drive0"}} |
| {"return": {}} |
| {"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmapC", "node": "drive0"}} |
| {"return": {}} |
| {"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmapD", "node": "drive0"}} |
| {"return": {}} |
| |
| --- Final Query --- |
| |
| { |
| "bitmaps": { |
| "drive0": [] |
| } |
| } |
| |
| --- Done --- |
| |