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