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