1--- Preparing image & VM --- 2 3 4--- Adding preliminary bitmaps A & B --- 5 6{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmapA", "node": "drive0"}} 7{"return": {}} 8{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmapB", "node": "drive0"}} 9{"return": {}} 10 11--- Emulating writes --- 12 13write -P0x5d 0 64k 14{"return": ""} 15write -P0xd5 1M 64k 16{"return": ""} 17write -P0xdc 32M 64k 18{"return": ""} 19write -P0xcd 0x3ff0000 64k 20{"return": ""} 21{ 22 "bitmaps": { 23 "drive0": [ 24 { 25 "count": 262144, 26 "granularity": 65536, 27 "name": "bitmapB", 28 "persistent": false, 29 "status": "active" 30 }, 31 { 32 "count": 262144, 33 "granularity": 65536, 34 "name": "bitmapA", 35 "persistent": false, 36 "status": "active" 37 } 38 ] 39 } 40} 41 42--- Submitting & Aborting Transaction --- 43 44{ 45 "execute": "transaction", 46 "arguments": { 47 "actions": [ 48 { 49 "data": { 50 "name": "bitmapB", 51 "node": "drive0" 52 }, 53 "type": "block-dirty-bitmap-disable" 54 }, 55 { 56 "data": { 57 "granularity": 65536, 58 "name": "bitmapC", 59 "node": "drive0" 60 }, 61 "type": "block-dirty-bitmap-add" 62 }, 63 { 64 "data": { 65 "name": "bitmapA", 66 "node": "drive0" 67 }, 68 "type": "block-dirty-bitmap-clear" 69 }, 70 { 71 "data": {}, 72 "type": "abort" 73 } 74 ] 75 } 76} 77{ 78 "error": { 79 "class": "GenericError", 80 "desc": "Transaction aborted using Abort action" 81 } 82} 83{ 84 "bitmaps": { 85 "drive0": [ 86 { 87 "count": 262144, 88 "granularity": 65536, 89 "name": "bitmapB", 90 "persistent": false, 91 "status": "active" 92 }, 93 { 94 "count": 262144, 95 "granularity": 65536, 96 "name": "bitmapA", 97 "persistent": false, 98 "status": "active" 99 } 100 ] 101 } 102} 103 104--- Disabling B & Adding C --- 105 106{ 107 "execute": "transaction", 108 "arguments": { 109 "actions": [ 110 { 111 "data": { 112 "name": "bitmapB", 113 "node": "drive0" 114 }, 115 "type": "block-dirty-bitmap-disable" 116 }, 117 { 118 "data": { 119 "granularity": 65536, 120 "name": "bitmapC", 121 "node": "drive0" 122 }, 123 "type": "block-dirty-bitmap-add" 124 }, 125 { 126 "data": { 127 "name": "bitmapC", 128 "node": "drive0" 129 }, 130 "type": "block-dirty-bitmap-disable" 131 }, 132 { 133 "data": { 134 "name": "bitmapC", 135 "node": "drive0" 136 }, 137 "type": "block-dirty-bitmap-enable" 138 } 139 ] 140 } 141} 142{ 143 "return": {} 144} 145 146--- Emulating further writes --- 147 148write -P0xab 0 64k 149{"return": ""} 150write -P0xad 0x00f8000 64k 151{"return": ""} 152write -P0x1d 0x2008000 64k 153{"return": ""} 154write -P0xea 0x3fe0000 64k 155{"return": ""} 156 157--- Disabling A & C --- 158 159{ 160 "execute": "transaction", 161 "arguments": { 162 "actions": [ 163 { 164 "data": { 165 "name": "bitmapA", 166 "node": "drive0" 167 }, 168 "type": "block-dirty-bitmap-disable" 169 }, 170 { 171 "data": { 172 "name": "bitmapC", 173 "node": "drive0" 174 }, 175 "type": "block-dirty-bitmap-disable" 176 } 177 ] 178 } 179} 180{ 181 "return": {} 182} 183{ 184 "bitmaps": { 185 "drive0": [ 186 { 187 "count": 393216, 188 "granularity": 65536, 189 "name": "bitmapC", 190 "persistent": false, 191 "status": "disabled" 192 }, 193 { 194 "count": 262144, 195 "granularity": 65536, 196 "name": "bitmapB", 197 "persistent": false, 198 "status": "disabled" 199 }, 200 { 201 "count": 458752, 202 "granularity": 65536, 203 "name": "bitmapA", 204 "persistent": false, 205 "status": "disabled" 206 } 207 ] 208 } 209} 210 211--- Submitting & Aborting Merge Transaction --- 212 213{ 214 "execute": "transaction", 215 "arguments": { 216 "actions": [ 217 { 218 "data": { 219 "disabled": true, 220 "granularity": 65536, 221 "name": "bitmapD", 222 "node": "drive0" 223 }, 224 "type": "block-dirty-bitmap-add" 225 }, 226 { 227 "data": { 228 "bitmaps": [ 229 "bitmapB", 230 "bitmapC" 231 ], 232 "node": "drive0", 233 "target": "bitmapD" 234 }, 235 "type": "block-dirty-bitmap-merge" 236 }, 237 { 238 "data": {}, 239 "type": "abort" 240 } 241 ] 242 } 243} 244{ 245 "error": { 246 "class": "GenericError", 247 "desc": "Transaction aborted using Abort action" 248 } 249} 250{ 251 "bitmaps": { 252 "drive0": [ 253 { 254 "count": 393216, 255 "granularity": 65536, 256 "name": "bitmapC", 257 "persistent": false, 258 "status": "disabled" 259 }, 260 { 261 "count": 262144, 262 "granularity": 65536, 263 "name": "bitmapB", 264 "persistent": false, 265 "status": "disabled" 266 }, 267 { 268 "count": 458752, 269 "granularity": 65536, 270 "name": "bitmapA", 271 "persistent": false, 272 "status": "disabled" 273 } 274 ] 275 } 276} 277 278--- Creating D as a merge of B & C --- 279 280{ 281 "execute": "transaction", 282 "arguments": { 283 "actions": [ 284 { 285 "data": { 286 "disabled": true, 287 "granularity": 65536, 288 "name": "bitmapD", 289 "node": "drive0" 290 }, 291 "type": "block-dirty-bitmap-add" 292 }, 293 { 294 "data": { 295 "bitmaps": [ 296 "bitmapB", 297 "bitmapC" 298 ], 299 "node": "drive0", 300 "target": "bitmapD" 301 }, 302 "type": "block-dirty-bitmap-merge" 303 } 304 ] 305 } 306} 307{ 308 "return": {} 309} 310{ 311 "bitmaps": { 312 "drive0": [ 313 { 314 "count": 458752, 315 "granularity": 65536, 316 "name": "bitmapD", 317 "persistent": false, 318 "status": "disabled" 319 }, 320 { 321 "count": 393216, 322 "granularity": 65536, 323 "name": "bitmapC", 324 "persistent": false, 325 "status": "disabled" 326 }, 327 { 328 "count": 262144, 329 "granularity": 65536, 330 "name": "bitmapB", 331 "persistent": false, 332 "status": "disabled" 333 }, 334 { 335 "count": 458752, 336 "granularity": 65536, 337 "name": "bitmapA", 338 "persistent": false, 339 "status": "disabled" 340 } 341 ] 342 } 343} 344 345--- Removing bitmaps A, B, C, and D --- 346 347{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmapA", "node": "drive0"}} 348{"return": {}} 349{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmapB", "node": "drive0"}} 350{"return": {}} 351{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmapC", "node": "drive0"}} 352{"return": {}} 353{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmapD", "node": "drive0"}} 354{"return": {}} 355 356--- Final Query --- 357 358{ 359 "bitmaps": { 360 "drive0": [] 361 } 362} 363 364--- Done --- 365 366