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