1 2=== Mode bitmap; Bitmap Sync never with simulated failure === 3 4--- Preparing image & VM --- 5 6{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 7{"return": {}} 8 9--- Write #0 --- 10 11write -P0x49 0x0000000 0x10000 12{"return": ""} 13write -P0x6c 0x0100000 0x10000 14{"return": ""} 15write -P0x6f 0x2000000 0x10000 16{"return": ""} 17write -P0x76 0x3ff0000 0x10000 18{"return": ""} 19{ 20 "bitmaps": {} 21} 22 23--- Reference Backup #0 --- 24 25{} 26{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 27{"return": {}} 28{} 29{} 30{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 31{"return": {}} 32{} 33{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 34{"return": {}} 35{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 36 37--- Add Bitmap --- 38 39{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 40{"return": {}} 41 42--- Write #1 --- 43 44write -P0x65 0x0000000 0x10000 45{"return": ""} 46write -P0x77 0x00f8000 0x10000 47{"return": ""} 48write -P0x72 0x2008000 0x10000 49{"return": ""} 50write -P0x69 0x3fe0000 0x10000 51{"return": ""} 52{ 53 "bitmaps": { 54 "drive0": [ 55 { 56 "busy": false, 57 "count": 393216, 58 "granularity": 65536, 59 "name": "bitmap0", 60 "persistent": false, 61 "recording": true 62 } 63 ] 64 } 65} 66 67= Checking Bitmap bitmap0 = 68expecting 6 dirty sectors; have 6. OK! 69 70--- Reference Backup #1 --- 71 72{} 73{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 74{"return": {}} 75{} 76{} 77{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 78{"return": {}} 79{} 80{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 81{"return": {}} 82{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 83 84--- Test Backup #1 --- 85 86{} 87{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 88{"return": {}} 89{} 90{} 91{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 92{"return": {}} 93{} 94{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 95{"return": {}} 96 97--- Write #2 --- 98 99write -P0x74 0x0010000 0x10000 100{"return": ""} 101write -P0x69 0x00e8000 0x10000 102{"return": ""} 103write -P0x6e 0x2018000 0x10000 104{"return": ""} 105write -P0x67 0x3fe0000 0x20000 106{"return": ""} 107{ 108 "bitmaps": { 109 "backup-top": [ 110 { 111 "busy": false, 112 "count": 67108864, 113 "granularity": 65536, 114 "persistent": false, 115 "recording": false 116 }, 117 { 118 "busy": false, 119 "count": 458752, 120 "granularity": 65536, 121 "persistent": false, 122 "recording": false 123 } 124 ], 125 "drive0": [ 126 { 127 "busy": false, 128 "count": 0, 129 "granularity": 65536, 130 "persistent": false, 131 "recording": false 132 }, 133 { 134 "busy": false, 135 "count": 458752, 136 "granularity": 65536, 137 "persistent": false, 138 "recording": true 139 }, 140 { 141 "busy": true, 142 "count": 393216, 143 "granularity": 65536, 144 "name": "bitmap0", 145 "persistent": false, 146 "recording": true 147 } 148 ] 149 } 150} 151 152= Checking Bitmap bitmap0 = 153expecting 6 dirty sectors; have 6. OK! 154 155= Checking Bitmap (anonymous) = 156expecting 7 dirty sectors; have 7. OK! 157 158{"execute": "job-cancel", "arguments": {"id": "backup_1"}} 159{"return": {}} 160{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 161{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 162{ 163 "bitmaps": { 164 "drive0": [ 165 { 166 "busy": false, 167 "count": 655360, 168 "granularity": 65536, 169 "name": "bitmap0", 170 "persistent": false, 171 "recording": true 172 } 173 ] 174 } 175} 176 177= Checking Bitmap bitmap0 = 178expecting 10 dirty sectors; have 10. OK! 179 180--- Write #3 --- 181 182write -P0xaa 0x0010000 0x30000 183{"return": ""} 184write -P0xbb 0x00d8000 0x10000 185{"return": ""} 186write -P0xcc 0x2028000 0x10000 187{"return": ""} 188write -P0xdd 0x3fc0000 0x10000 189{"return": ""} 190{ 191 "bitmaps": { 192 "drive0": [ 193 { 194 "busy": false, 195 "count": 983040, 196 "granularity": 65536, 197 "name": "bitmap0", 198 "persistent": false, 199 "recording": true 200 } 201 ] 202 } 203} 204 205= Checking Bitmap bitmap0 = 206expecting 15 dirty sectors; have 15. OK! 207 208--- Reference Backup #2 --- 209 210{} 211{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 212{"return": {}} 213{} 214{} 215{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 216{"return": {}} 217{} 218{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 219{"return": {}} 220{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 221 222--- Test Backup #2 --- 223 224{} 225{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 226{"return": {}} 227{} 228{} 229{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 230{"return": {}} 231{} 232{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 233{"return": {}} 234{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 235{"return": {}} 236{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 237{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 238{ 239 "bitmaps": { 240 "drive0": [ 241 { 242 "busy": false, 243 "count": 983040, 244 "granularity": 65536, 245 "name": "bitmap0", 246 "persistent": false, 247 "recording": true 248 } 249 ] 250 } 251} 252 253= Checking Bitmap bitmap0 = 254expecting 15 dirty sectors; have 15. OK! 255 256--- Cleanup --- 257 258{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 259{"return": {}} 260{ 261 "bitmaps": {} 262} 263 264--- Verification --- 265 266qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 267qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 268qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 269 270 271=== Mode bitmap; Bitmap Sync never with intermediate failure === 272 273--- Preparing image & VM --- 274 275{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}} 276{"return": {}} 277 278--- Write #0 --- 279 280write -P0x49 0x0000000 0x10000 281{"return": ""} 282write -P0x6c 0x0100000 0x10000 283{"return": ""} 284write -P0x6f 0x2000000 0x10000 285{"return": ""} 286write -P0x76 0x3ff0000 0x10000 287{"return": ""} 288{ 289 "bitmaps": {} 290} 291 292--- Reference Backup #0 --- 293 294{} 295{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 296{"return": {}} 297{} 298{} 299{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 300{"return": {}} 301{} 302{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 303{"return": {}} 304{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 305 306--- Add Bitmap --- 307 308{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 309{"return": {}} 310 311--- Write #1 --- 312 313write -P0x65 0x0000000 0x10000 314{"return": ""} 315write -P0x77 0x00f8000 0x10000 316{"return": ""} 317write -P0x72 0x2008000 0x10000 318{"return": ""} 319write -P0x69 0x3fe0000 0x10000 320{"return": ""} 321{ 322 "bitmaps": { 323 "drive0": [ 324 { 325 "busy": false, 326 "count": 393216, 327 "granularity": 65536, 328 "name": "bitmap0", 329 "persistent": false, 330 "recording": true 331 } 332 ] 333 } 334} 335 336= Checking Bitmap bitmap0 = 337expecting 6 dirty sectors; have 6. OK! 338 339--- Reference Backup #1 --- 340 341{} 342{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 343{"return": {}} 344{} 345{} 346{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 347{"return": {}} 348{} 349{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 350{"return": {}} 351{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 352 353{"return": ""} 354 355--- Test Backup #1 --- 356 357{} 358{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 359{"return": {}} 360{} 361{} 362{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 363{"return": {}} 364{} 365{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 366{"return": {}} 367{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 368{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 369{ 370 "bitmaps": { 371 "drive0": [ 372 { 373 "busy": false, 374 "count": 393216, 375 "granularity": 65536, 376 "name": "bitmap0", 377 "persistent": false, 378 "recording": true 379 } 380 ] 381 } 382} 383 384= Checking Bitmap bitmap0 = 385expecting 6 dirty sectors; have 6. OK! 386 387--- Write #3 --- 388 389write -P0xaa 0x0010000 0x30000 390{"return": ""} 391write -P0xbb 0x00d8000 0x10000 392{"return": ""} 393write -P0xcc 0x2028000 0x10000 394{"return": ""} 395write -P0xdd 0x3fc0000 0x10000 396{"return": ""} 397{ 398 "bitmaps": { 399 "drive0": [ 400 { 401 "busy": false, 402 "count": 917504, 403 "granularity": 65536, 404 "name": "bitmap0", 405 "persistent": false, 406 "recording": true 407 } 408 ] 409 } 410} 411 412= Checking Bitmap bitmap0 = 413expecting 14 dirty sectors; have 14. OK! 414 415--- Reference Backup #2 --- 416 417{} 418{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 419{"return": {}} 420{} 421{} 422{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 423{"return": {}} 424{} 425{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 426{"return": {}} 427{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 428 429--- Test Backup #2 --- 430 431{} 432{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 433{"return": {}} 434{} 435{} 436{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 437{"return": {}} 438{} 439{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 440{"return": {}} 441{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 442{"return": {}} 443{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 444{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 445{ 446 "bitmaps": { 447 "drive0": [ 448 { 449 "busy": false, 450 "count": 917504, 451 "granularity": 65536, 452 "name": "bitmap0", 453 "persistent": false, 454 "recording": true 455 } 456 ] 457 } 458} 459 460= Checking Bitmap bitmap0 = 461expecting 14 dirty sectors; have 14. OK! 462 463--- Cleanup --- 464 465{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 466{"return": {}} 467{ 468 "bitmaps": {} 469} 470 471--- Verification --- 472 473qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK! 474qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 475qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 476 477 478=== Mode bitmap; Bitmap Sync never without failure === 479 480--- Preparing image & VM --- 481 482{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 483{"return": {}} 484 485--- Write #0 --- 486 487write -P0x49 0x0000000 0x10000 488{"return": ""} 489write -P0x6c 0x0100000 0x10000 490{"return": ""} 491write -P0x6f 0x2000000 0x10000 492{"return": ""} 493write -P0x76 0x3ff0000 0x10000 494{"return": ""} 495{ 496 "bitmaps": {} 497} 498 499--- Reference Backup #0 --- 500 501{} 502{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 503{"return": {}} 504{} 505{} 506{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 507{"return": {}} 508{} 509{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 510{"return": {}} 511{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 512 513--- Add Bitmap --- 514 515{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 516{"return": {}} 517 518--- Write #1 --- 519 520write -P0x65 0x0000000 0x10000 521{"return": ""} 522write -P0x77 0x00f8000 0x10000 523{"return": ""} 524write -P0x72 0x2008000 0x10000 525{"return": ""} 526write -P0x69 0x3fe0000 0x10000 527{"return": ""} 528{ 529 "bitmaps": { 530 "drive0": [ 531 { 532 "busy": false, 533 "count": 393216, 534 "granularity": 65536, 535 "name": "bitmap0", 536 "persistent": false, 537 "recording": true 538 } 539 ] 540 } 541} 542 543= Checking Bitmap bitmap0 = 544expecting 6 dirty sectors; have 6. OK! 545 546--- Reference Backup #1 --- 547 548{} 549{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 550{"return": {}} 551{} 552{} 553{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 554{"return": {}} 555{} 556{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 557{"return": {}} 558{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 559 560--- Test Backup #1 --- 561 562{} 563{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 564{"return": {}} 565{} 566{} 567{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 568{"return": {}} 569{} 570{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 571{"return": {}} 572 573--- Write #2 --- 574 575write -P0x74 0x0010000 0x10000 576{"return": ""} 577write -P0x69 0x00e8000 0x10000 578{"return": ""} 579write -P0x6e 0x2018000 0x10000 580{"return": ""} 581write -P0x67 0x3fe0000 0x20000 582{"return": ""} 583{ 584 "bitmaps": { 585 "backup-top": [ 586 { 587 "busy": false, 588 "count": 67108864, 589 "granularity": 65536, 590 "persistent": false, 591 "recording": false 592 }, 593 { 594 "busy": false, 595 "count": 458752, 596 "granularity": 65536, 597 "persistent": false, 598 "recording": false 599 } 600 ], 601 "drive0": [ 602 { 603 "busy": false, 604 "count": 0, 605 "granularity": 65536, 606 "persistent": false, 607 "recording": false 608 }, 609 { 610 "busy": false, 611 "count": 458752, 612 "granularity": 65536, 613 "persistent": false, 614 "recording": true 615 }, 616 { 617 "busy": true, 618 "count": 393216, 619 "granularity": 65536, 620 "name": "bitmap0", 621 "persistent": false, 622 "recording": true 623 } 624 ] 625 } 626} 627 628= Checking Bitmap bitmap0 = 629expecting 6 dirty sectors; have 6. OK! 630 631= Checking Bitmap (anonymous) = 632expecting 7 dirty sectors; have 7. OK! 633 634{"execute": "job-finalize", "arguments": {"id": "backup_1"}} 635{"return": {}} 636{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 637{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 638{ 639 "bitmaps": { 640 "drive0": [ 641 { 642 "busy": false, 643 "count": 655360, 644 "granularity": 65536, 645 "name": "bitmap0", 646 "persistent": false, 647 "recording": true 648 } 649 ] 650 } 651} 652 653= Checking Bitmap bitmap0 = 654expecting 10 dirty sectors; have 10. OK! 655 656--- Write #3 --- 657 658write -P0xaa 0x0010000 0x30000 659{"return": ""} 660write -P0xbb 0x00d8000 0x10000 661{"return": ""} 662write -P0xcc 0x2028000 0x10000 663{"return": ""} 664write -P0xdd 0x3fc0000 0x10000 665{"return": ""} 666{ 667 "bitmaps": { 668 "drive0": [ 669 { 670 "busy": false, 671 "count": 983040, 672 "granularity": 65536, 673 "name": "bitmap0", 674 "persistent": false, 675 "recording": true 676 } 677 ] 678 } 679} 680 681= Checking Bitmap bitmap0 = 682expecting 15 dirty sectors; have 15. OK! 683 684--- Reference Backup #2 --- 685 686{} 687{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 688{"return": {}} 689{} 690{} 691{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 692{"return": {}} 693{} 694{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 695{"return": {}} 696{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 697 698--- Test Backup #2 --- 699 700{} 701{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 702{"return": {}} 703{} 704{} 705{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 706{"return": {}} 707{} 708{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 709{"return": {}} 710{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 711{"return": {}} 712{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 713{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 714{ 715 "bitmaps": { 716 "drive0": [ 717 { 718 "busy": false, 719 "count": 983040, 720 "granularity": 65536, 721 "name": "bitmap0", 722 "persistent": false, 723 "recording": true 724 } 725 ] 726 } 727} 728 729= Checking Bitmap bitmap0 = 730expecting 15 dirty sectors; have 15. OK! 731 732--- Cleanup --- 733 734{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 735{"return": {}} 736{ 737 "bitmaps": {} 738} 739 740--- Verification --- 741 742qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 743qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 744qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 745 746 747=== Mode bitmap; Bitmap Sync on-success with simulated failure === 748 749--- Preparing image & VM --- 750 751{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 752{"return": {}} 753 754--- Write #0 --- 755 756write -P0x49 0x0000000 0x10000 757{"return": ""} 758write -P0x6c 0x0100000 0x10000 759{"return": ""} 760write -P0x6f 0x2000000 0x10000 761{"return": ""} 762write -P0x76 0x3ff0000 0x10000 763{"return": ""} 764{ 765 "bitmaps": {} 766} 767 768--- Reference Backup #0 --- 769 770{} 771{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 772{"return": {}} 773{} 774{} 775{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 776{"return": {}} 777{} 778{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 779{"return": {}} 780{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 781 782--- Add Bitmap --- 783 784{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 785{"return": {}} 786 787--- Write #1 --- 788 789write -P0x65 0x0000000 0x10000 790{"return": ""} 791write -P0x77 0x00f8000 0x10000 792{"return": ""} 793write -P0x72 0x2008000 0x10000 794{"return": ""} 795write -P0x69 0x3fe0000 0x10000 796{"return": ""} 797{ 798 "bitmaps": { 799 "drive0": [ 800 { 801 "busy": false, 802 "count": 393216, 803 "granularity": 65536, 804 "name": "bitmap0", 805 "persistent": false, 806 "recording": true 807 } 808 ] 809 } 810} 811 812= Checking Bitmap bitmap0 = 813expecting 6 dirty sectors; have 6. OK! 814 815--- Reference Backup #1 --- 816 817{} 818{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 819{"return": {}} 820{} 821{} 822{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 823{"return": {}} 824{} 825{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 826{"return": {}} 827{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 828 829--- Test Backup #1 --- 830 831{} 832{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 833{"return": {}} 834{} 835{} 836{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 837{"return": {}} 838{} 839{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 840{"return": {}} 841 842--- Write #2 --- 843 844write -P0x74 0x0010000 0x10000 845{"return": ""} 846write -P0x69 0x00e8000 0x10000 847{"return": ""} 848write -P0x6e 0x2018000 0x10000 849{"return": ""} 850write -P0x67 0x3fe0000 0x20000 851{"return": ""} 852{ 853 "bitmaps": { 854 "backup-top": [ 855 { 856 "busy": false, 857 "count": 67108864, 858 "granularity": 65536, 859 "persistent": false, 860 "recording": false 861 }, 862 { 863 "busy": false, 864 "count": 458752, 865 "granularity": 65536, 866 "persistent": false, 867 "recording": false 868 } 869 ], 870 "drive0": [ 871 { 872 "busy": false, 873 "count": 0, 874 "granularity": 65536, 875 "persistent": false, 876 "recording": false 877 }, 878 { 879 "busy": false, 880 "count": 458752, 881 "granularity": 65536, 882 "persistent": false, 883 "recording": true 884 }, 885 { 886 "busy": true, 887 "count": 393216, 888 "granularity": 65536, 889 "name": "bitmap0", 890 "persistent": false, 891 "recording": true 892 } 893 ] 894 } 895} 896 897= Checking Bitmap bitmap0 = 898expecting 6 dirty sectors; have 6. OK! 899 900= Checking Bitmap (anonymous) = 901expecting 7 dirty sectors; have 7. OK! 902 903{"execute": "job-cancel", "arguments": {"id": "backup_1"}} 904{"return": {}} 905{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 906{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 907{ 908 "bitmaps": { 909 "drive0": [ 910 { 911 "busy": false, 912 "count": 655360, 913 "granularity": 65536, 914 "name": "bitmap0", 915 "persistent": false, 916 "recording": true 917 } 918 ] 919 } 920} 921 922= Checking Bitmap bitmap0 = 923expecting 10 dirty sectors; have 10. OK! 924 925--- Write #3 --- 926 927write -P0xaa 0x0010000 0x30000 928{"return": ""} 929write -P0xbb 0x00d8000 0x10000 930{"return": ""} 931write -P0xcc 0x2028000 0x10000 932{"return": ""} 933write -P0xdd 0x3fc0000 0x10000 934{"return": ""} 935{ 936 "bitmaps": { 937 "drive0": [ 938 { 939 "busy": false, 940 "count": 983040, 941 "granularity": 65536, 942 "name": "bitmap0", 943 "persistent": false, 944 "recording": true 945 } 946 ] 947 } 948} 949 950= Checking Bitmap bitmap0 = 951expecting 15 dirty sectors; have 15. OK! 952 953--- Reference Backup #2 --- 954 955{} 956{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 957{"return": {}} 958{} 959{} 960{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 961{"return": {}} 962{} 963{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 964{"return": {}} 965{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 966 967--- Test Backup #2 --- 968 969{} 970{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 971{"return": {}} 972{} 973{} 974{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 975{"return": {}} 976{} 977{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 978{"return": {}} 979{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 980{"return": {}} 981{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 982{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 983{ 984 "bitmaps": { 985 "drive0": [ 986 { 987 "busy": false, 988 "count": 0, 989 "granularity": 65536, 990 "name": "bitmap0", 991 "persistent": false, 992 "recording": true 993 } 994 ] 995 } 996} 997 998= Checking Bitmap bitmap0 = 999expecting 0 dirty sectors; have 0. OK! 1000 1001--- Cleanup --- 1002 1003{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 1004{"return": {}} 1005{ 1006 "bitmaps": {} 1007} 1008 1009--- Verification --- 1010 1011qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 1012qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 1013qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 1014 1015 1016=== Mode bitmap; Bitmap Sync on-success with intermediate failure === 1017 1018--- Preparing image & VM --- 1019 1020{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}} 1021{"return": {}} 1022 1023--- Write #0 --- 1024 1025write -P0x49 0x0000000 0x10000 1026{"return": ""} 1027write -P0x6c 0x0100000 0x10000 1028{"return": ""} 1029write -P0x6f 0x2000000 0x10000 1030{"return": ""} 1031write -P0x76 0x3ff0000 0x10000 1032{"return": ""} 1033{ 1034 "bitmaps": {} 1035} 1036 1037--- Reference Backup #0 --- 1038 1039{} 1040{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1041{"return": {}} 1042{} 1043{} 1044{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1045{"return": {}} 1046{} 1047{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 1048{"return": {}} 1049{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1050 1051--- Add Bitmap --- 1052 1053{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 1054{"return": {}} 1055 1056--- Write #1 --- 1057 1058write -P0x65 0x0000000 0x10000 1059{"return": ""} 1060write -P0x77 0x00f8000 0x10000 1061{"return": ""} 1062write -P0x72 0x2008000 0x10000 1063{"return": ""} 1064write -P0x69 0x3fe0000 0x10000 1065{"return": ""} 1066{ 1067 "bitmaps": { 1068 "drive0": [ 1069 { 1070 "busy": false, 1071 "count": 393216, 1072 "granularity": 65536, 1073 "name": "bitmap0", 1074 "persistent": false, 1075 "recording": true 1076 } 1077 ] 1078 } 1079} 1080 1081= Checking Bitmap bitmap0 = 1082expecting 6 dirty sectors; have 6. OK! 1083 1084--- Reference Backup #1 --- 1085 1086{} 1087{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1088{"return": {}} 1089{} 1090{} 1091{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1092{"return": {}} 1093{} 1094{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 1095{"return": {}} 1096{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1097 1098{"return": ""} 1099 1100--- Test Backup #1 --- 1101 1102{} 1103{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1104{"return": {}} 1105{} 1106{} 1107{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1108{"return": {}} 1109{} 1110{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 1111{"return": {}} 1112{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1113{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1114{ 1115 "bitmaps": { 1116 "drive0": [ 1117 { 1118 "busy": false, 1119 "count": 393216, 1120 "granularity": 65536, 1121 "name": "bitmap0", 1122 "persistent": false, 1123 "recording": true 1124 } 1125 ] 1126 } 1127} 1128 1129= Checking Bitmap bitmap0 = 1130expecting 6 dirty sectors; have 6. OK! 1131 1132--- Write #3 --- 1133 1134write -P0xaa 0x0010000 0x30000 1135{"return": ""} 1136write -P0xbb 0x00d8000 0x10000 1137{"return": ""} 1138write -P0xcc 0x2028000 0x10000 1139{"return": ""} 1140write -P0xdd 0x3fc0000 0x10000 1141{"return": ""} 1142{ 1143 "bitmaps": { 1144 "drive0": [ 1145 { 1146 "busy": false, 1147 "count": 917504, 1148 "granularity": 65536, 1149 "name": "bitmap0", 1150 "persistent": false, 1151 "recording": true 1152 } 1153 ] 1154 } 1155} 1156 1157= Checking Bitmap bitmap0 = 1158expecting 14 dirty sectors; have 14. OK! 1159 1160--- Reference Backup #2 --- 1161 1162{} 1163{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1164{"return": {}} 1165{} 1166{} 1167{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1168{"return": {}} 1169{} 1170{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 1171{"return": {}} 1172{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1173 1174--- Test Backup #2 --- 1175 1176{} 1177{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1178{"return": {}} 1179{} 1180{} 1181{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1182{"return": {}} 1183{} 1184{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 1185{"return": {}} 1186{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 1187{"return": {}} 1188{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1189{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1190{ 1191 "bitmaps": { 1192 "drive0": [ 1193 { 1194 "busy": false, 1195 "count": 0, 1196 "granularity": 65536, 1197 "name": "bitmap0", 1198 "persistent": false, 1199 "recording": true 1200 } 1201 ] 1202 } 1203} 1204 1205= Checking Bitmap bitmap0 = 1206expecting 0 dirty sectors; have 0. OK! 1207 1208--- Cleanup --- 1209 1210{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 1211{"return": {}} 1212{ 1213 "bitmaps": {} 1214} 1215 1216--- Verification --- 1217 1218qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK! 1219qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 1220qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 1221 1222 1223=== Mode bitmap; Bitmap Sync on-success without failure === 1224 1225--- Preparing image & VM --- 1226 1227{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 1228{"return": {}} 1229 1230--- Write #0 --- 1231 1232write -P0x49 0x0000000 0x10000 1233{"return": ""} 1234write -P0x6c 0x0100000 0x10000 1235{"return": ""} 1236write -P0x6f 0x2000000 0x10000 1237{"return": ""} 1238write -P0x76 0x3ff0000 0x10000 1239{"return": ""} 1240{ 1241 "bitmaps": {} 1242} 1243 1244--- Reference Backup #0 --- 1245 1246{} 1247{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1248{"return": {}} 1249{} 1250{} 1251{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1252{"return": {}} 1253{} 1254{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 1255{"return": {}} 1256{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1257 1258--- Add Bitmap --- 1259 1260{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 1261{"return": {}} 1262 1263--- Write #1 --- 1264 1265write -P0x65 0x0000000 0x10000 1266{"return": ""} 1267write -P0x77 0x00f8000 0x10000 1268{"return": ""} 1269write -P0x72 0x2008000 0x10000 1270{"return": ""} 1271write -P0x69 0x3fe0000 0x10000 1272{"return": ""} 1273{ 1274 "bitmaps": { 1275 "drive0": [ 1276 { 1277 "busy": false, 1278 "count": 393216, 1279 "granularity": 65536, 1280 "name": "bitmap0", 1281 "persistent": false, 1282 "recording": true 1283 } 1284 ] 1285 } 1286} 1287 1288= Checking Bitmap bitmap0 = 1289expecting 6 dirty sectors; have 6. OK! 1290 1291--- Reference Backup #1 --- 1292 1293{} 1294{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1295{"return": {}} 1296{} 1297{} 1298{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1299{"return": {}} 1300{} 1301{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 1302{"return": {}} 1303{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1304 1305--- Test Backup #1 --- 1306 1307{} 1308{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1309{"return": {}} 1310{} 1311{} 1312{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1313{"return": {}} 1314{} 1315{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 1316{"return": {}} 1317 1318--- Write #2 --- 1319 1320write -P0x74 0x0010000 0x10000 1321{"return": ""} 1322write -P0x69 0x00e8000 0x10000 1323{"return": ""} 1324write -P0x6e 0x2018000 0x10000 1325{"return": ""} 1326write -P0x67 0x3fe0000 0x20000 1327{"return": ""} 1328{ 1329 "bitmaps": { 1330 "backup-top": [ 1331 { 1332 "busy": false, 1333 "count": 67108864, 1334 "granularity": 65536, 1335 "persistent": false, 1336 "recording": false 1337 }, 1338 { 1339 "busy": false, 1340 "count": 458752, 1341 "granularity": 65536, 1342 "persistent": false, 1343 "recording": false 1344 } 1345 ], 1346 "drive0": [ 1347 { 1348 "busy": false, 1349 "count": 0, 1350 "granularity": 65536, 1351 "persistent": false, 1352 "recording": false 1353 }, 1354 { 1355 "busy": false, 1356 "count": 458752, 1357 "granularity": 65536, 1358 "persistent": false, 1359 "recording": true 1360 }, 1361 { 1362 "busy": true, 1363 "count": 393216, 1364 "granularity": 65536, 1365 "name": "bitmap0", 1366 "persistent": false, 1367 "recording": true 1368 } 1369 ] 1370 } 1371} 1372 1373= Checking Bitmap bitmap0 = 1374expecting 6 dirty sectors; have 6. OK! 1375 1376= Checking Bitmap (anonymous) = 1377expecting 7 dirty sectors; have 7. OK! 1378 1379{"execute": "job-finalize", "arguments": {"id": "backup_1"}} 1380{"return": {}} 1381{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1382{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1383{ 1384 "bitmaps": { 1385 "drive0": [ 1386 { 1387 "busy": false, 1388 "count": 458752, 1389 "granularity": 65536, 1390 "name": "bitmap0", 1391 "persistent": false, 1392 "recording": true 1393 } 1394 ] 1395 } 1396} 1397 1398= Checking Bitmap bitmap0 = 1399expecting 7 dirty sectors; have 7. OK! 1400 1401--- Write #3 --- 1402 1403write -P0xaa 0x0010000 0x30000 1404{"return": ""} 1405write -P0xbb 0x00d8000 0x10000 1406{"return": ""} 1407write -P0xcc 0x2028000 0x10000 1408{"return": ""} 1409write -P0xdd 0x3fc0000 0x10000 1410{"return": ""} 1411{ 1412 "bitmaps": { 1413 "drive0": [ 1414 { 1415 "busy": false, 1416 "count": 786432, 1417 "granularity": 65536, 1418 "name": "bitmap0", 1419 "persistent": false, 1420 "recording": true 1421 } 1422 ] 1423 } 1424} 1425 1426= Checking Bitmap bitmap0 = 1427expecting 12 dirty sectors; have 12. OK! 1428 1429--- Reference Backup #2 --- 1430 1431{} 1432{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1433{"return": {}} 1434{} 1435{} 1436{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1437{"return": {}} 1438{} 1439{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 1440{"return": {}} 1441{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1442 1443--- Test Backup #2 --- 1444 1445{} 1446{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1447{"return": {}} 1448{} 1449{} 1450{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1451{"return": {}} 1452{} 1453{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 1454{"return": {}} 1455{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 1456{"return": {}} 1457{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1458{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1459{ 1460 "bitmaps": { 1461 "drive0": [ 1462 { 1463 "busy": false, 1464 "count": 0, 1465 "granularity": 65536, 1466 "name": "bitmap0", 1467 "persistent": false, 1468 "recording": true 1469 } 1470 ] 1471 } 1472} 1473 1474= Checking Bitmap bitmap0 = 1475expecting 0 dirty sectors; have 0. OK! 1476 1477--- Cleanup --- 1478 1479{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 1480{"return": {}} 1481{ 1482 "bitmaps": {} 1483} 1484 1485--- Verification --- 1486 1487qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 1488qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 1489qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 1490 1491 1492=== Mode bitmap; Bitmap Sync always with simulated failure === 1493 1494--- Preparing image & VM --- 1495 1496{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 1497{"return": {}} 1498 1499--- Write #0 --- 1500 1501write -P0x49 0x0000000 0x10000 1502{"return": ""} 1503write -P0x6c 0x0100000 0x10000 1504{"return": ""} 1505write -P0x6f 0x2000000 0x10000 1506{"return": ""} 1507write -P0x76 0x3ff0000 0x10000 1508{"return": ""} 1509{ 1510 "bitmaps": {} 1511} 1512 1513--- Reference Backup #0 --- 1514 1515{} 1516{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1517{"return": {}} 1518{} 1519{} 1520{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1521{"return": {}} 1522{} 1523{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 1524{"return": {}} 1525{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1526 1527--- Add Bitmap --- 1528 1529{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 1530{"return": {}} 1531 1532--- Write #1 --- 1533 1534write -P0x65 0x0000000 0x10000 1535{"return": ""} 1536write -P0x77 0x00f8000 0x10000 1537{"return": ""} 1538write -P0x72 0x2008000 0x10000 1539{"return": ""} 1540write -P0x69 0x3fe0000 0x10000 1541{"return": ""} 1542{ 1543 "bitmaps": { 1544 "drive0": [ 1545 { 1546 "busy": false, 1547 "count": 393216, 1548 "granularity": 65536, 1549 "name": "bitmap0", 1550 "persistent": false, 1551 "recording": true 1552 } 1553 ] 1554 } 1555} 1556 1557= Checking Bitmap bitmap0 = 1558expecting 6 dirty sectors; have 6. OK! 1559 1560--- Reference Backup #1 --- 1561 1562{} 1563{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1564{"return": {}} 1565{} 1566{} 1567{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1568{"return": {}} 1569{} 1570{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 1571{"return": {}} 1572{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1573 1574--- Test Backup #1 --- 1575 1576{} 1577{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1578{"return": {}} 1579{} 1580{} 1581{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1582{"return": {}} 1583{} 1584{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 1585{"return": {}} 1586 1587--- Write #2 --- 1588 1589write -P0x74 0x0010000 0x10000 1590{"return": ""} 1591write -P0x69 0x00e8000 0x10000 1592{"return": ""} 1593write -P0x6e 0x2018000 0x10000 1594{"return": ""} 1595write -P0x67 0x3fe0000 0x20000 1596{"return": ""} 1597{ 1598 "bitmaps": { 1599 "backup-top": [ 1600 { 1601 "busy": false, 1602 "count": 67108864, 1603 "granularity": 65536, 1604 "persistent": false, 1605 "recording": false 1606 }, 1607 { 1608 "busy": false, 1609 "count": 458752, 1610 "granularity": 65536, 1611 "persistent": false, 1612 "recording": false 1613 } 1614 ], 1615 "drive0": [ 1616 { 1617 "busy": false, 1618 "count": 0, 1619 "granularity": 65536, 1620 "persistent": false, 1621 "recording": false 1622 }, 1623 { 1624 "busy": false, 1625 "count": 458752, 1626 "granularity": 65536, 1627 "persistent": false, 1628 "recording": true 1629 }, 1630 { 1631 "busy": true, 1632 "count": 393216, 1633 "granularity": 65536, 1634 "name": "bitmap0", 1635 "persistent": false, 1636 "recording": true 1637 } 1638 ] 1639 } 1640} 1641 1642= Checking Bitmap bitmap0 = 1643expecting 6 dirty sectors; have 6. OK! 1644 1645= Checking Bitmap (anonymous) = 1646expecting 7 dirty sectors; have 7. OK! 1647 1648{"execute": "job-cancel", "arguments": {"id": "backup_1"}} 1649{"return": {}} 1650{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1651{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1652{ 1653 "bitmaps": { 1654 "drive0": [ 1655 { 1656 "busy": false, 1657 "count": 458752, 1658 "granularity": 65536, 1659 "name": "bitmap0", 1660 "persistent": false, 1661 "recording": true 1662 } 1663 ] 1664 } 1665} 1666 1667= Checking Bitmap bitmap0 = 1668expecting 7 dirty sectors; have 7. OK! 1669 1670--- Write #3 --- 1671 1672write -P0xaa 0x0010000 0x30000 1673{"return": ""} 1674write -P0xbb 0x00d8000 0x10000 1675{"return": ""} 1676write -P0xcc 0x2028000 0x10000 1677{"return": ""} 1678write -P0xdd 0x3fc0000 0x10000 1679{"return": ""} 1680{ 1681 "bitmaps": { 1682 "drive0": [ 1683 { 1684 "busy": false, 1685 "count": 786432, 1686 "granularity": 65536, 1687 "name": "bitmap0", 1688 "persistent": false, 1689 "recording": true 1690 } 1691 ] 1692 } 1693} 1694 1695= Checking Bitmap bitmap0 = 1696expecting 12 dirty sectors; have 12. OK! 1697 1698--- Reference Backup #2 --- 1699 1700{} 1701{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1702{"return": {}} 1703{} 1704{} 1705{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1706{"return": {}} 1707{} 1708{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 1709{"return": {}} 1710{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1711 1712--- Test Backup #2 --- 1713 1714{} 1715{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1716{"return": {}} 1717{} 1718{} 1719{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1720{"return": {}} 1721{} 1722{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 1723{"return": {}} 1724{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 1725{"return": {}} 1726{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1727{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1728{ 1729 "bitmaps": { 1730 "drive0": [ 1731 { 1732 "busy": false, 1733 "count": 0, 1734 "granularity": 65536, 1735 "name": "bitmap0", 1736 "persistent": false, 1737 "recording": true 1738 } 1739 ] 1740 } 1741} 1742 1743= Checking Bitmap bitmap0 = 1744expecting 0 dirty sectors; have 0. OK! 1745 1746--- Cleanup --- 1747 1748{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 1749{"return": {}} 1750{ 1751 "bitmaps": {} 1752} 1753 1754--- Verification --- 1755 1756qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 1757qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 1758qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 1759 1760 1761=== Mode bitmap; Bitmap Sync always with intermediate failure === 1762 1763--- Preparing image & VM --- 1764 1765{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}} 1766{"return": {}} 1767 1768--- Write #0 --- 1769 1770write -P0x49 0x0000000 0x10000 1771{"return": ""} 1772write -P0x6c 0x0100000 0x10000 1773{"return": ""} 1774write -P0x6f 0x2000000 0x10000 1775{"return": ""} 1776write -P0x76 0x3ff0000 0x10000 1777{"return": ""} 1778{ 1779 "bitmaps": {} 1780} 1781 1782--- Reference Backup #0 --- 1783 1784{} 1785{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1786{"return": {}} 1787{} 1788{} 1789{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1790{"return": {}} 1791{} 1792{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 1793{"return": {}} 1794{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1795 1796--- Add Bitmap --- 1797 1798{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 1799{"return": {}} 1800 1801--- Write #1 --- 1802 1803write -P0x65 0x0000000 0x10000 1804{"return": ""} 1805write -P0x77 0x00f8000 0x10000 1806{"return": ""} 1807write -P0x72 0x2008000 0x10000 1808{"return": ""} 1809write -P0x69 0x3fe0000 0x10000 1810{"return": ""} 1811{ 1812 "bitmaps": { 1813 "drive0": [ 1814 { 1815 "busy": false, 1816 "count": 393216, 1817 "granularity": 65536, 1818 "name": "bitmap0", 1819 "persistent": false, 1820 "recording": true 1821 } 1822 ] 1823 } 1824} 1825 1826= Checking Bitmap bitmap0 = 1827expecting 6 dirty sectors; have 6. OK! 1828 1829--- Reference Backup #1 --- 1830 1831{} 1832{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1833{"return": {}} 1834{} 1835{} 1836{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1837{"return": {}} 1838{} 1839{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 1840{"return": {}} 1841{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1842 1843{"return": ""} 1844 1845--- Test Backup #1 --- 1846 1847{} 1848{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1849{"return": {}} 1850{} 1851{} 1852{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1853{"return": {}} 1854{} 1855{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 1856{"return": {}} 1857{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1858{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1859{ 1860 "bitmaps": { 1861 "drive0": [ 1862 { 1863 "busy": false, 1864 "count": 327680, 1865 "granularity": 65536, 1866 "name": "bitmap0", 1867 "persistent": false, 1868 "recording": true 1869 } 1870 ] 1871 } 1872} 1873 1874= Checking Bitmap bitmap0 = 1875expecting 5 dirty sectors; have 5. OK! 1876 1877--- Write #3 --- 1878 1879write -P0xaa 0x0010000 0x30000 1880{"return": ""} 1881write -P0xbb 0x00d8000 0x10000 1882{"return": ""} 1883write -P0xcc 0x2028000 0x10000 1884{"return": ""} 1885write -P0xdd 0x3fc0000 0x10000 1886{"return": ""} 1887{ 1888 "bitmaps": { 1889 "drive0": [ 1890 { 1891 "busy": false, 1892 "count": 851968, 1893 "granularity": 65536, 1894 "name": "bitmap0", 1895 "persistent": false, 1896 "recording": true 1897 } 1898 ] 1899 } 1900} 1901 1902= Checking Bitmap bitmap0 = 1903expecting 13 dirty sectors; have 13. OK! 1904 1905--- Reference Backup #2 --- 1906 1907{} 1908{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1909{"return": {}} 1910{} 1911{} 1912{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1913{"return": {}} 1914{} 1915{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 1916{"return": {}} 1917{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1918 1919--- Test Backup #2 --- 1920 1921{} 1922{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1923{"return": {}} 1924{} 1925{} 1926{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1927{"return": {}} 1928{} 1929{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 1930{"return": {}} 1931{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 1932{"return": {}} 1933{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1934{"data": {"device": "backup_2", "len": 851968, "offset": 851968, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 1935{ 1936 "bitmaps": { 1937 "drive0": [ 1938 { 1939 "busy": false, 1940 "count": 0, 1941 "granularity": 65536, 1942 "name": "bitmap0", 1943 "persistent": false, 1944 "recording": true 1945 } 1946 ] 1947 } 1948} 1949 1950= Checking Bitmap bitmap0 = 1951expecting 0 dirty sectors; have 0. OK! 1952 1953--- Cleanup --- 1954 1955{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 1956{"return": {}} 1957{ 1958 "bitmaps": {} 1959} 1960 1961--- Verification --- 1962 1963qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK! 1964qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 1965qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 1966 1967 1968=== Mode bitmap; Bitmap Sync always without failure === 1969 1970--- Preparing image & VM --- 1971 1972{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 1973{"return": {}} 1974 1975--- Write #0 --- 1976 1977write -P0x49 0x0000000 0x10000 1978{"return": ""} 1979write -P0x6c 0x0100000 0x10000 1980{"return": ""} 1981write -P0x6f 0x2000000 0x10000 1982{"return": ""} 1983write -P0x76 0x3ff0000 0x10000 1984{"return": ""} 1985{ 1986 "bitmaps": {} 1987} 1988 1989--- Reference Backup #0 --- 1990 1991{} 1992{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 1993{"return": {}} 1994{} 1995{} 1996{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 1997{"return": {}} 1998{} 1999{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 2000{"return": {}} 2001{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2002 2003--- Add Bitmap --- 2004 2005{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 2006{"return": {}} 2007 2008--- Write #1 --- 2009 2010write -P0x65 0x0000000 0x10000 2011{"return": ""} 2012write -P0x77 0x00f8000 0x10000 2013{"return": ""} 2014write -P0x72 0x2008000 0x10000 2015{"return": ""} 2016write -P0x69 0x3fe0000 0x10000 2017{"return": ""} 2018{ 2019 "bitmaps": { 2020 "drive0": [ 2021 { 2022 "busy": false, 2023 "count": 393216, 2024 "granularity": 65536, 2025 "name": "bitmap0", 2026 "persistent": false, 2027 "recording": true 2028 } 2029 ] 2030 } 2031} 2032 2033= Checking Bitmap bitmap0 = 2034expecting 6 dirty sectors; have 6. OK! 2035 2036--- Reference Backup #1 --- 2037 2038{} 2039{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2040{"return": {}} 2041{} 2042{} 2043{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2044{"return": {}} 2045{} 2046{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 2047{"return": {}} 2048{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2049 2050--- Test Backup #1 --- 2051 2052{} 2053{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2054{"return": {}} 2055{} 2056{} 2057{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2058{"return": {}} 2059{} 2060{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "bitmap", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 2061{"return": {}} 2062 2063--- Write #2 --- 2064 2065write -P0x74 0x0010000 0x10000 2066{"return": ""} 2067write -P0x69 0x00e8000 0x10000 2068{"return": ""} 2069write -P0x6e 0x2018000 0x10000 2070{"return": ""} 2071write -P0x67 0x3fe0000 0x20000 2072{"return": ""} 2073{ 2074 "bitmaps": { 2075 "backup-top": [ 2076 { 2077 "busy": false, 2078 "count": 67108864, 2079 "granularity": 65536, 2080 "persistent": false, 2081 "recording": false 2082 }, 2083 { 2084 "busy": false, 2085 "count": 458752, 2086 "granularity": 65536, 2087 "persistent": false, 2088 "recording": false 2089 } 2090 ], 2091 "drive0": [ 2092 { 2093 "busy": false, 2094 "count": 0, 2095 "granularity": 65536, 2096 "persistent": false, 2097 "recording": false 2098 }, 2099 { 2100 "busy": false, 2101 "count": 458752, 2102 "granularity": 65536, 2103 "persistent": false, 2104 "recording": true 2105 }, 2106 { 2107 "busy": true, 2108 "count": 393216, 2109 "granularity": 65536, 2110 "name": "bitmap0", 2111 "persistent": false, 2112 "recording": true 2113 } 2114 ] 2115 } 2116} 2117 2118= Checking Bitmap bitmap0 = 2119expecting 6 dirty sectors; have 6. OK! 2120 2121= Checking Bitmap (anonymous) = 2122expecting 7 dirty sectors; have 7. OK! 2123 2124{"execute": "job-finalize", "arguments": {"id": "backup_1"}} 2125{"return": {}} 2126{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2127{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2128{ 2129 "bitmaps": { 2130 "drive0": [ 2131 { 2132 "busy": false, 2133 "count": 458752, 2134 "granularity": 65536, 2135 "name": "bitmap0", 2136 "persistent": false, 2137 "recording": true 2138 } 2139 ] 2140 } 2141} 2142 2143= Checking Bitmap bitmap0 = 2144expecting 7 dirty sectors; have 7. OK! 2145 2146--- Write #3 --- 2147 2148write -P0xaa 0x0010000 0x30000 2149{"return": ""} 2150write -P0xbb 0x00d8000 0x10000 2151{"return": ""} 2152write -P0xcc 0x2028000 0x10000 2153{"return": ""} 2154write -P0xdd 0x3fc0000 0x10000 2155{"return": ""} 2156{ 2157 "bitmaps": { 2158 "drive0": [ 2159 { 2160 "busy": false, 2161 "count": 786432, 2162 "granularity": 65536, 2163 "name": "bitmap0", 2164 "persistent": false, 2165 "recording": true 2166 } 2167 ] 2168 } 2169} 2170 2171= Checking Bitmap bitmap0 = 2172expecting 12 dirty sectors; have 12. OK! 2173 2174--- Reference Backup #2 --- 2175 2176{} 2177{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2178{"return": {}} 2179{} 2180{} 2181{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2182{"return": {}} 2183{} 2184{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 2185{"return": {}} 2186{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2187 2188--- Test Backup #2 --- 2189 2190{} 2191{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2192{"return": {}} 2193{} 2194{} 2195{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2196{"return": {}} 2197{} 2198{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 2199{"return": {}} 2200{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 2201{"return": {}} 2202{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2203{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2204{ 2205 "bitmaps": { 2206 "drive0": [ 2207 { 2208 "busy": false, 2209 "count": 0, 2210 "granularity": 65536, 2211 "name": "bitmap0", 2212 "persistent": false, 2213 "recording": true 2214 } 2215 ] 2216 } 2217} 2218 2219= Checking Bitmap bitmap0 = 2220expecting 0 dirty sectors; have 0. OK! 2221 2222--- Cleanup --- 2223 2224{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 2225{"return": {}} 2226{ 2227 "bitmaps": {} 2228} 2229 2230--- Verification --- 2231 2232qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 2233qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 2234qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 2235 2236 2237=== Mode full; Bitmap Sync on-success with simulated failure === 2238 2239--- Preparing image & VM --- 2240 2241{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 2242{"return": {}} 2243 2244--- Write #0 --- 2245 2246write -P0x49 0x0000000 0x10000 2247{"return": ""} 2248write -P0x6c 0x0100000 0x10000 2249{"return": ""} 2250write -P0x6f 0x2000000 0x10000 2251{"return": ""} 2252write -P0x76 0x3ff0000 0x10000 2253{"return": ""} 2254{ 2255 "bitmaps": {} 2256} 2257 2258--- Reference Backup #0 --- 2259 2260{} 2261{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2262{"return": {}} 2263{} 2264{} 2265{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2266{"return": {}} 2267{} 2268{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 2269{"return": {}} 2270{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2271 2272--- Add Bitmap --- 2273 2274{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 2275{"return": {}} 2276 2277--- Write #1 --- 2278 2279write -P0x65 0x0000000 0x10000 2280{"return": ""} 2281write -P0x77 0x00f8000 0x10000 2282{"return": ""} 2283write -P0x72 0x2008000 0x10000 2284{"return": ""} 2285write -P0x69 0x3fe0000 0x10000 2286{"return": ""} 2287{ 2288 "bitmaps": { 2289 "drive0": [ 2290 { 2291 "busy": false, 2292 "count": 393216, 2293 "granularity": 65536, 2294 "name": "bitmap0", 2295 "persistent": false, 2296 "recording": true 2297 } 2298 ] 2299 } 2300} 2301 2302= Checking Bitmap bitmap0 = 2303expecting 6 dirty sectors; have 6. OK! 2304 2305--- Reference Backup #1 --- 2306 2307{} 2308{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2309{"return": {}} 2310{} 2311{} 2312{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2313{"return": {}} 2314{} 2315{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 2316{"return": {}} 2317{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2318 2319--- Test Backup #1 --- 2320 2321{} 2322{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2323{"return": {}} 2324{} 2325{} 2326{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2327{"return": {}} 2328{} 2329{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 2330{"return": {}} 2331 2332--- Write #2 --- 2333 2334write -P0x74 0x0010000 0x10000 2335{"return": ""} 2336write -P0x69 0x00e8000 0x10000 2337{"return": ""} 2338write -P0x6e 0x2018000 0x10000 2339{"return": ""} 2340write -P0x67 0x3fe0000 0x20000 2341{"return": ""} 2342{ 2343 "bitmaps": { 2344 "backup-top": [ 2345 { 2346 "busy": false, 2347 "count": 67108864, 2348 "granularity": 65536, 2349 "persistent": false, 2350 "recording": false 2351 }, 2352 { 2353 "busy": false, 2354 "count": 458752, 2355 "granularity": 65536, 2356 "persistent": false, 2357 "recording": false 2358 } 2359 ], 2360 "drive0": [ 2361 { 2362 "busy": false, 2363 "count": 0, 2364 "granularity": 65536, 2365 "persistent": false, 2366 "recording": false 2367 }, 2368 { 2369 "busy": false, 2370 "count": 458752, 2371 "granularity": 65536, 2372 "persistent": false, 2373 "recording": true 2374 }, 2375 { 2376 "busy": true, 2377 "count": 393216, 2378 "granularity": 65536, 2379 "name": "bitmap0", 2380 "persistent": false, 2381 "recording": true 2382 } 2383 ] 2384 } 2385} 2386 2387= Checking Bitmap bitmap0 = 2388expecting 6 dirty sectors; have 6. OK! 2389 2390= Checking Bitmap (anonymous) = 2391expecting 7 dirty sectors; have 7. OK! 2392 2393{"execute": "job-cancel", "arguments": {"id": "backup_1"}} 2394{"return": {}} 2395{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2396{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2397{ 2398 "bitmaps": { 2399 "drive0": [ 2400 { 2401 "busy": false, 2402 "count": 655360, 2403 "granularity": 65536, 2404 "name": "bitmap0", 2405 "persistent": false, 2406 "recording": true 2407 } 2408 ] 2409 } 2410} 2411 2412= Checking Bitmap bitmap0 = 2413expecting 10 dirty sectors; have 10. OK! 2414 2415--- Write #3 --- 2416 2417write -P0xaa 0x0010000 0x30000 2418{"return": ""} 2419write -P0xbb 0x00d8000 0x10000 2420{"return": ""} 2421write -P0xcc 0x2028000 0x10000 2422{"return": ""} 2423write -P0xdd 0x3fc0000 0x10000 2424{"return": ""} 2425{ 2426 "bitmaps": { 2427 "drive0": [ 2428 { 2429 "busy": false, 2430 "count": 983040, 2431 "granularity": 65536, 2432 "name": "bitmap0", 2433 "persistent": false, 2434 "recording": true 2435 } 2436 ] 2437 } 2438} 2439 2440= Checking Bitmap bitmap0 = 2441expecting 15 dirty sectors; have 15. OK! 2442 2443--- Reference Backup #2 --- 2444 2445{} 2446{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2447{"return": {}} 2448{} 2449{} 2450{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2451{"return": {}} 2452{} 2453{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 2454{"return": {}} 2455{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2456 2457--- Test Backup #2 --- 2458 2459{} 2460{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2461{"return": {}} 2462{} 2463{} 2464{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2465{"return": {}} 2466{} 2467{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 2468{"return": {}} 2469{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 2470{"return": {}} 2471{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2472{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2473{ 2474 "bitmaps": { 2475 "drive0": [ 2476 { 2477 "busy": false, 2478 "count": 0, 2479 "granularity": 65536, 2480 "name": "bitmap0", 2481 "persistent": false, 2482 "recording": true 2483 } 2484 ] 2485 } 2486} 2487 2488= Checking Bitmap bitmap0 = 2489expecting 0 dirty sectors; have 0. OK! 2490 2491--- Cleanup --- 2492 2493{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 2494{"return": {}} 2495{ 2496 "bitmaps": {} 2497} 2498 2499--- Verification --- 2500 2501qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 2502qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 2503qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 2504 2505 2506=== Mode full; Bitmap Sync on-success with intermediate failure === 2507 2508--- Preparing image & VM --- 2509 2510{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}} 2511{"return": {}} 2512 2513--- Write #0 --- 2514 2515write -P0x49 0x0000000 0x10000 2516{"return": ""} 2517write -P0x6c 0x0100000 0x10000 2518{"return": ""} 2519write -P0x6f 0x2000000 0x10000 2520{"return": ""} 2521write -P0x76 0x3ff0000 0x10000 2522{"return": ""} 2523{ 2524 "bitmaps": {} 2525} 2526 2527--- Reference Backup #0 --- 2528 2529{} 2530{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2531{"return": {}} 2532{} 2533{} 2534{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2535{"return": {}} 2536{} 2537{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 2538{"return": {}} 2539{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2540 2541--- Add Bitmap --- 2542 2543{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 2544{"return": {}} 2545 2546--- Write #1 --- 2547 2548write -P0x65 0x0000000 0x10000 2549{"return": ""} 2550write -P0x77 0x00f8000 0x10000 2551{"return": ""} 2552write -P0x72 0x2008000 0x10000 2553{"return": ""} 2554write -P0x69 0x3fe0000 0x10000 2555{"return": ""} 2556{ 2557 "bitmaps": { 2558 "drive0": [ 2559 { 2560 "busy": false, 2561 "count": 393216, 2562 "granularity": 65536, 2563 "name": "bitmap0", 2564 "persistent": false, 2565 "recording": true 2566 } 2567 ] 2568 } 2569} 2570 2571= Checking Bitmap bitmap0 = 2572expecting 6 dirty sectors; have 6. OK! 2573 2574--- Reference Backup #1 --- 2575 2576{} 2577{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2578{"return": {}} 2579{} 2580{} 2581{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2582{"return": {}} 2583{} 2584{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 2585{"return": {}} 2586{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2587 2588{"return": ""} 2589 2590--- Test Backup #1 --- 2591 2592{} 2593{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2594{"return": {}} 2595{} 2596{} 2597{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2598{"return": {}} 2599{} 2600{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 2601{"return": {}} 2602{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2603{"data": {"device": "backup_1", "error": "Input/output error", "len": 67108864, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2604{ 2605 "bitmaps": { 2606 "drive0": [ 2607 { 2608 "busy": false, 2609 "count": 393216, 2610 "granularity": 65536, 2611 "name": "bitmap0", 2612 "persistent": false, 2613 "recording": true 2614 } 2615 ] 2616 } 2617} 2618 2619= Checking Bitmap bitmap0 = 2620expecting 6 dirty sectors; have 6. OK! 2621 2622--- Write #3 --- 2623 2624write -P0xaa 0x0010000 0x30000 2625{"return": ""} 2626write -P0xbb 0x00d8000 0x10000 2627{"return": ""} 2628write -P0xcc 0x2028000 0x10000 2629{"return": ""} 2630write -P0xdd 0x3fc0000 0x10000 2631{"return": ""} 2632{ 2633 "bitmaps": { 2634 "drive0": [ 2635 { 2636 "busy": false, 2637 "count": 917504, 2638 "granularity": 65536, 2639 "name": "bitmap0", 2640 "persistent": false, 2641 "recording": true 2642 } 2643 ] 2644 } 2645} 2646 2647= Checking Bitmap bitmap0 = 2648expecting 14 dirty sectors; have 14. OK! 2649 2650--- Reference Backup #2 --- 2651 2652{} 2653{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2654{"return": {}} 2655{} 2656{} 2657{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2658{"return": {}} 2659{} 2660{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 2661{"return": {}} 2662{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2663 2664--- Test Backup #2 --- 2665 2666{} 2667{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2668{"return": {}} 2669{} 2670{} 2671{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2672{"return": {}} 2673{} 2674{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 2675{"return": {}} 2676{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 2677{"return": {}} 2678{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2679{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2680{ 2681 "bitmaps": { 2682 "drive0": [ 2683 { 2684 "busy": false, 2685 "count": 0, 2686 "granularity": 65536, 2687 "name": "bitmap0", 2688 "persistent": false, 2689 "recording": true 2690 } 2691 ] 2692 } 2693} 2694 2695= Checking Bitmap bitmap0 = 2696expecting 0 dirty sectors; have 0. OK! 2697 2698--- Cleanup --- 2699 2700{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 2701{"return": {}} 2702{ 2703 "bitmaps": {} 2704} 2705 2706--- Verification --- 2707 2708qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK! 2709qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 2710qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 2711 2712 2713=== Mode full; Bitmap Sync on-success without failure === 2714 2715--- Preparing image & VM --- 2716 2717{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 2718{"return": {}} 2719 2720--- Write #0 --- 2721 2722write -P0x49 0x0000000 0x10000 2723{"return": ""} 2724write -P0x6c 0x0100000 0x10000 2725{"return": ""} 2726write -P0x6f 0x2000000 0x10000 2727{"return": ""} 2728write -P0x76 0x3ff0000 0x10000 2729{"return": ""} 2730{ 2731 "bitmaps": {} 2732} 2733 2734--- Reference Backup #0 --- 2735 2736{} 2737{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2738{"return": {}} 2739{} 2740{} 2741{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2742{"return": {}} 2743{} 2744{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 2745{"return": {}} 2746{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2747 2748--- Add Bitmap --- 2749 2750{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 2751{"return": {}} 2752 2753--- Write #1 --- 2754 2755write -P0x65 0x0000000 0x10000 2756{"return": ""} 2757write -P0x77 0x00f8000 0x10000 2758{"return": ""} 2759write -P0x72 0x2008000 0x10000 2760{"return": ""} 2761write -P0x69 0x3fe0000 0x10000 2762{"return": ""} 2763{ 2764 "bitmaps": { 2765 "drive0": [ 2766 { 2767 "busy": false, 2768 "count": 393216, 2769 "granularity": 65536, 2770 "name": "bitmap0", 2771 "persistent": false, 2772 "recording": true 2773 } 2774 ] 2775 } 2776} 2777 2778= Checking Bitmap bitmap0 = 2779expecting 6 dirty sectors; have 6. OK! 2780 2781--- Reference Backup #1 --- 2782 2783{} 2784{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2785{"return": {}} 2786{} 2787{} 2788{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2789{"return": {}} 2790{} 2791{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 2792{"return": {}} 2793{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2794 2795--- Test Backup #1 --- 2796 2797{} 2798{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2799{"return": {}} 2800{} 2801{} 2802{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2803{"return": {}} 2804{} 2805{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 2806{"return": {}} 2807 2808--- Write #2 --- 2809 2810write -P0x74 0x0010000 0x10000 2811{"return": ""} 2812write -P0x69 0x00e8000 0x10000 2813{"return": ""} 2814write -P0x6e 0x2018000 0x10000 2815{"return": ""} 2816write -P0x67 0x3fe0000 0x20000 2817{"return": ""} 2818{ 2819 "bitmaps": { 2820 "backup-top": [ 2821 { 2822 "busy": false, 2823 "count": 67108864, 2824 "granularity": 65536, 2825 "persistent": false, 2826 "recording": false 2827 }, 2828 { 2829 "busy": false, 2830 "count": 458752, 2831 "granularity": 65536, 2832 "persistent": false, 2833 "recording": false 2834 } 2835 ], 2836 "drive0": [ 2837 { 2838 "busy": false, 2839 "count": 0, 2840 "granularity": 65536, 2841 "persistent": false, 2842 "recording": false 2843 }, 2844 { 2845 "busy": false, 2846 "count": 458752, 2847 "granularity": 65536, 2848 "persistent": false, 2849 "recording": true 2850 }, 2851 { 2852 "busy": true, 2853 "count": 393216, 2854 "granularity": 65536, 2855 "name": "bitmap0", 2856 "persistent": false, 2857 "recording": true 2858 } 2859 ] 2860 } 2861} 2862 2863= Checking Bitmap bitmap0 = 2864expecting 6 dirty sectors; have 6. OK! 2865 2866= Checking Bitmap (anonymous) = 2867expecting 7 dirty sectors; have 7. OK! 2868 2869{"execute": "job-finalize", "arguments": {"id": "backup_1"}} 2870{"return": {}} 2871{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2872{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2873{ 2874 "bitmaps": { 2875 "drive0": [ 2876 { 2877 "busy": false, 2878 "count": 458752, 2879 "granularity": 65536, 2880 "name": "bitmap0", 2881 "persistent": false, 2882 "recording": true 2883 } 2884 ] 2885 } 2886} 2887 2888= Checking Bitmap bitmap0 = 2889expecting 7 dirty sectors; have 7. OK! 2890 2891--- Write #3 --- 2892 2893write -P0xaa 0x0010000 0x30000 2894{"return": ""} 2895write -P0xbb 0x00d8000 0x10000 2896{"return": ""} 2897write -P0xcc 0x2028000 0x10000 2898{"return": ""} 2899write -P0xdd 0x3fc0000 0x10000 2900{"return": ""} 2901{ 2902 "bitmaps": { 2903 "drive0": [ 2904 { 2905 "busy": false, 2906 "count": 786432, 2907 "granularity": 65536, 2908 "name": "bitmap0", 2909 "persistent": false, 2910 "recording": true 2911 } 2912 ] 2913 } 2914} 2915 2916= Checking Bitmap bitmap0 = 2917expecting 12 dirty sectors; have 12. OK! 2918 2919--- Reference Backup #2 --- 2920 2921{} 2922{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2923{"return": {}} 2924{} 2925{} 2926{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2927{"return": {}} 2928{} 2929{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 2930{"return": {}} 2931{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2932 2933--- Test Backup #2 --- 2934 2935{} 2936{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 2937{"return": {}} 2938{} 2939{} 2940{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 2941{"return": {}} 2942{} 2943{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 2944{"return": {}} 2945{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 2946{"return": {}} 2947{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2948{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 2949{ 2950 "bitmaps": { 2951 "drive0": [ 2952 { 2953 "busy": false, 2954 "count": 0, 2955 "granularity": 65536, 2956 "name": "bitmap0", 2957 "persistent": false, 2958 "recording": true 2959 } 2960 ] 2961 } 2962} 2963 2964= Checking Bitmap bitmap0 = 2965expecting 0 dirty sectors; have 0. OK! 2966 2967--- Cleanup --- 2968 2969{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 2970{"return": {}} 2971{ 2972 "bitmaps": {} 2973} 2974 2975--- Verification --- 2976 2977qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 2978qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 2979qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 2980 2981 2982=== Mode full; Bitmap Sync always with simulated failure === 2983 2984--- Preparing image & VM --- 2985 2986{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 2987{"return": {}} 2988 2989--- Write #0 --- 2990 2991write -P0x49 0x0000000 0x10000 2992{"return": ""} 2993write -P0x6c 0x0100000 0x10000 2994{"return": ""} 2995write -P0x6f 0x2000000 0x10000 2996{"return": ""} 2997write -P0x76 0x3ff0000 0x10000 2998{"return": ""} 2999{ 3000 "bitmaps": {} 3001} 3002 3003--- Reference Backup #0 --- 3004 3005{} 3006{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3007{"return": {}} 3008{} 3009{} 3010{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3011{"return": {}} 3012{} 3013{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 3014{"return": {}} 3015{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3016 3017--- Add Bitmap --- 3018 3019{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 3020{"return": {}} 3021 3022--- Write #1 --- 3023 3024write -P0x65 0x0000000 0x10000 3025{"return": ""} 3026write -P0x77 0x00f8000 0x10000 3027{"return": ""} 3028write -P0x72 0x2008000 0x10000 3029{"return": ""} 3030write -P0x69 0x3fe0000 0x10000 3031{"return": ""} 3032{ 3033 "bitmaps": { 3034 "drive0": [ 3035 { 3036 "busy": false, 3037 "count": 393216, 3038 "granularity": 65536, 3039 "name": "bitmap0", 3040 "persistent": false, 3041 "recording": true 3042 } 3043 ] 3044 } 3045} 3046 3047= Checking Bitmap bitmap0 = 3048expecting 6 dirty sectors; have 6. OK! 3049 3050--- Reference Backup #1 --- 3051 3052{} 3053{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3054{"return": {}} 3055{} 3056{} 3057{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3058{"return": {}} 3059{} 3060{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 3061{"return": {}} 3062{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3063 3064--- Test Backup #1 --- 3065 3066{} 3067{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3068{"return": {}} 3069{} 3070{} 3071{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3072{"return": {}} 3073{} 3074{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 3075{"return": {}} 3076 3077--- Write #2 --- 3078 3079write -P0x74 0x0010000 0x10000 3080{"return": ""} 3081write -P0x69 0x00e8000 0x10000 3082{"return": ""} 3083write -P0x6e 0x2018000 0x10000 3084{"return": ""} 3085write -P0x67 0x3fe0000 0x20000 3086{"return": ""} 3087{ 3088 "bitmaps": { 3089 "backup-top": [ 3090 { 3091 "busy": false, 3092 "count": 67108864, 3093 "granularity": 65536, 3094 "persistent": false, 3095 "recording": false 3096 }, 3097 { 3098 "busy": false, 3099 "count": 458752, 3100 "granularity": 65536, 3101 "persistent": false, 3102 "recording": false 3103 } 3104 ], 3105 "drive0": [ 3106 { 3107 "busy": false, 3108 "count": 0, 3109 "granularity": 65536, 3110 "persistent": false, 3111 "recording": false 3112 }, 3113 { 3114 "busy": false, 3115 "count": 458752, 3116 "granularity": 65536, 3117 "persistent": false, 3118 "recording": true 3119 }, 3120 { 3121 "busy": true, 3122 "count": 393216, 3123 "granularity": 65536, 3124 "name": "bitmap0", 3125 "persistent": false, 3126 "recording": true 3127 } 3128 ] 3129 } 3130} 3131 3132= Checking Bitmap bitmap0 = 3133expecting 6 dirty sectors; have 6. OK! 3134 3135= Checking Bitmap (anonymous) = 3136expecting 7 dirty sectors; have 7. OK! 3137 3138{"execute": "job-cancel", "arguments": {"id": "backup_1"}} 3139{"return": {}} 3140{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3141{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3142{ 3143 "bitmaps": { 3144 "drive0": [ 3145 { 3146 "busy": false, 3147 "count": 458752, 3148 "granularity": 65536, 3149 "name": "bitmap0", 3150 "persistent": false, 3151 "recording": true 3152 } 3153 ] 3154 } 3155} 3156 3157= Checking Bitmap bitmap0 = 3158expecting 7 dirty sectors; have 7. OK! 3159 3160--- Write #3 --- 3161 3162write -P0xaa 0x0010000 0x30000 3163{"return": ""} 3164write -P0xbb 0x00d8000 0x10000 3165{"return": ""} 3166write -P0xcc 0x2028000 0x10000 3167{"return": ""} 3168write -P0xdd 0x3fc0000 0x10000 3169{"return": ""} 3170{ 3171 "bitmaps": { 3172 "drive0": [ 3173 { 3174 "busy": false, 3175 "count": 786432, 3176 "granularity": 65536, 3177 "name": "bitmap0", 3178 "persistent": false, 3179 "recording": true 3180 } 3181 ] 3182 } 3183} 3184 3185= Checking Bitmap bitmap0 = 3186expecting 12 dirty sectors; have 12. OK! 3187 3188--- Reference Backup #2 --- 3189 3190{} 3191{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3192{"return": {}} 3193{} 3194{} 3195{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3196{"return": {}} 3197{} 3198{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 3199{"return": {}} 3200{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3201 3202--- Test Backup #2 --- 3203 3204{} 3205{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3206{"return": {}} 3207{} 3208{} 3209{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3210{"return": {}} 3211{} 3212{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 3213{"return": {}} 3214{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 3215{"return": {}} 3216{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3217{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3218{ 3219 "bitmaps": { 3220 "drive0": [ 3221 { 3222 "busy": false, 3223 "count": 0, 3224 "granularity": 65536, 3225 "name": "bitmap0", 3226 "persistent": false, 3227 "recording": true 3228 } 3229 ] 3230 } 3231} 3232 3233= Checking Bitmap bitmap0 = 3234expecting 0 dirty sectors; have 0. OK! 3235 3236--- Cleanup --- 3237 3238{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 3239{"return": {}} 3240{ 3241 "bitmaps": {} 3242} 3243 3244--- Verification --- 3245 3246qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 3247qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 3248qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 3249 3250 3251=== Mode full; Bitmap Sync always with intermediate failure === 3252 3253--- Preparing image & VM --- 3254 3255{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}} 3256{"return": {}} 3257 3258--- Write #0 --- 3259 3260write -P0x49 0x0000000 0x10000 3261{"return": ""} 3262write -P0x6c 0x0100000 0x10000 3263{"return": ""} 3264write -P0x6f 0x2000000 0x10000 3265{"return": ""} 3266write -P0x76 0x3ff0000 0x10000 3267{"return": ""} 3268{ 3269 "bitmaps": {} 3270} 3271 3272--- Reference Backup #0 --- 3273 3274{} 3275{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3276{"return": {}} 3277{} 3278{} 3279{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3280{"return": {}} 3281{} 3282{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 3283{"return": {}} 3284{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3285 3286--- Add Bitmap --- 3287 3288{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 3289{"return": {}} 3290 3291--- Write #1 --- 3292 3293write -P0x65 0x0000000 0x10000 3294{"return": ""} 3295write -P0x77 0x00f8000 0x10000 3296{"return": ""} 3297write -P0x72 0x2008000 0x10000 3298{"return": ""} 3299write -P0x69 0x3fe0000 0x10000 3300{"return": ""} 3301{ 3302 "bitmaps": { 3303 "drive0": [ 3304 { 3305 "busy": false, 3306 "count": 393216, 3307 "granularity": 65536, 3308 "name": "bitmap0", 3309 "persistent": false, 3310 "recording": true 3311 } 3312 ] 3313 } 3314} 3315 3316= Checking Bitmap bitmap0 = 3317expecting 6 dirty sectors; have 6. OK! 3318 3319--- Reference Backup #1 --- 3320 3321{} 3322{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3323{"return": {}} 3324{} 3325{} 3326{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3327{"return": {}} 3328{} 3329{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 3330{"return": {}} 3331{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3332 3333{"return": ""} 3334 3335--- Test Backup #1 --- 3336 3337{} 3338{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3339{"return": {}} 3340{} 3341{} 3342{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3343{"return": {}} 3344{} 3345{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 3346{"return": {}} 3347{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3348{"data": {"device": "backup_1", "error": "Input/output error", "len": 67108864, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3349{ 3350 "bitmaps": { 3351 "drive0": [ 3352 { 3353 "busy": false, 3354 "count": 66125824, 3355 "granularity": 65536, 3356 "name": "bitmap0", 3357 "persistent": false, 3358 "recording": true 3359 } 3360 ] 3361 } 3362} 3363 3364= Checking Bitmap bitmap0 = 3365expecting 1009 dirty sectors; have 1009. OK! 3366 3367--- Write #3 --- 3368 3369write -P0xaa 0x0010000 0x30000 3370{"return": ""} 3371write -P0xbb 0x00d8000 0x10000 3372{"return": ""} 3373write -P0xcc 0x2028000 0x10000 3374{"return": ""} 3375write -P0xdd 0x3fc0000 0x10000 3376{"return": ""} 3377{ 3378 "bitmaps": { 3379 "drive0": [ 3380 { 3381 "busy": false, 3382 "count": 66453504, 3383 "granularity": 65536, 3384 "name": "bitmap0", 3385 "persistent": false, 3386 "recording": true 3387 } 3388 ] 3389 } 3390} 3391 3392= Checking Bitmap bitmap0 = 3393expecting 1014 dirty sectors; have 1014. OK! 3394 3395--- Reference Backup #2 --- 3396 3397{} 3398{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3399{"return": {}} 3400{} 3401{} 3402{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3403{"return": {}} 3404{} 3405{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 3406{"return": {}} 3407{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3408 3409--- Test Backup #2 --- 3410 3411{} 3412{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3413{"return": {}} 3414{} 3415{} 3416{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3417{"return": {}} 3418{} 3419{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 3420{"return": {}} 3421{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 3422{"return": {}} 3423{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3424{"data": {"device": "backup_2", "len": 66453504, "offset": 66453504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3425{ 3426 "bitmaps": { 3427 "drive0": [ 3428 { 3429 "busy": false, 3430 "count": 0, 3431 "granularity": 65536, 3432 "name": "bitmap0", 3433 "persistent": false, 3434 "recording": true 3435 } 3436 ] 3437 } 3438} 3439 3440= Checking Bitmap bitmap0 = 3441expecting 0 dirty sectors; have 0. OK! 3442 3443--- Cleanup --- 3444 3445{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 3446{"return": {}} 3447{ 3448 "bitmaps": {} 3449} 3450 3451--- Verification --- 3452 3453qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK! 3454qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 3455qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 3456 3457 3458=== Mode full; Bitmap Sync always without failure === 3459 3460--- Preparing image & VM --- 3461 3462{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 3463{"return": {}} 3464 3465--- Write #0 --- 3466 3467write -P0x49 0x0000000 0x10000 3468{"return": ""} 3469write -P0x6c 0x0100000 0x10000 3470{"return": ""} 3471write -P0x6f 0x2000000 0x10000 3472{"return": ""} 3473write -P0x76 0x3ff0000 0x10000 3474{"return": ""} 3475{ 3476 "bitmaps": {} 3477} 3478 3479--- Reference Backup #0 --- 3480 3481{} 3482{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3483{"return": {}} 3484{} 3485{} 3486{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3487{"return": {}} 3488{} 3489{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 3490{"return": {}} 3491{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3492 3493--- Add Bitmap --- 3494 3495{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 3496{"return": {}} 3497 3498--- Write #1 --- 3499 3500write -P0x65 0x0000000 0x10000 3501{"return": ""} 3502write -P0x77 0x00f8000 0x10000 3503{"return": ""} 3504write -P0x72 0x2008000 0x10000 3505{"return": ""} 3506write -P0x69 0x3fe0000 0x10000 3507{"return": ""} 3508{ 3509 "bitmaps": { 3510 "drive0": [ 3511 { 3512 "busy": false, 3513 "count": 393216, 3514 "granularity": 65536, 3515 "name": "bitmap0", 3516 "persistent": false, 3517 "recording": true 3518 } 3519 ] 3520 } 3521} 3522 3523= Checking Bitmap bitmap0 = 3524expecting 6 dirty sectors; have 6. OK! 3525 3526--- Reference Backup #1 --- 3527 3528{} 3529{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3530{"return": {}} 3531{} 3532{} 3533{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3534{"return": {}} 3535{} 3536{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 3537{"return": {}} 3538{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3539 3540--- Test Backup #1 --- 3541 3542{} 3543{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3544{"return": {}} 3545{} 3546{} 3547{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3548{"return": {}} 3549{} 3550{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "full", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 3551{"return": {}} 3552 3553--- Write #2 --- 3554 3555write -P0x74 0x0010000 0x10000 3556{"return": ""} 3557write -P0x69 0x00e8000 0x10000 3558{"return": ""} 3559write -P0x6e 0x2018000 0x10000 3560{"return": ""} 3561write -P0x67 0x3fe0000 0x20000 3562{"return": ""} 3563{ 3564 "bitmaps": { 3565 "backup-top": [ 3566 { 3567 "busy": false, 3568 "count": 67108864, 3569 "granularity": 65536, 3570 "persistent": false, 3571 "recording": false 3572 }, 3573 { 3574 "busy": false, 3575 "count": 458752, 3576 "granularity": 65536, 3577 "persistent": false, 3578 "recording": false 3579 } 3580 ], 3581 "drive0": [ 3582 { 3583 "busy": false, 3584 "count": 0, 3585 "granularity": 65536, 3586 "persistent": false, 3587 "recording": false 3588 }, 3589 { 3590 "busy": false, 3591 "count": 458752, 3592 "granularity": 65536, 3593 "persistent": false, 3594 "recording": true 3595 }, 3596 { 3597 "busy": true, 3598 "count": 393216, 3599 "granularity": 65536, 3600 "name": "bitmap0", 3601 "persistent": false, 3602 "recording": true 3603 } 3604 ] 3605 } 3606} 3607 3608= Checking Bitmap bitmap0 = 3609expecting 6 dirty sectors; have 6. OK! 3610 3611= Checking Bitmap (anonymous) = 3612expecting 7 dirty sectors; have 7. OK! 3613 3614{"execute": "job-finalize", "arguments": {"id": "backup_1"}} 3615{"return": {}} 3616{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3617{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3618{ 3619 "bitmaps": { 3620 "drive0": [ 3621 { 3622 "busy": false, 3623 "count": 458752, 3624 "granularity": 65536, 3625 "name": "bitmap0", 3626 "persistent": false, 3627 "recording": true 3628 } 3629 ] 3630 } 3631} 3632 3633= Checking Bitmap bitmap0 = 3634expecting 7 dirty sectors; have 7. OK! 3635 3636--- Write #3 --- 3637 3638write -P0xaa 0x0010000 0x30000 3639{"return": ""} 3640write -P0xbb 0x00d8000 0x10000 3641{"return": ""} 3642write -P0xcc 0x2028000 0x10000 3643{"return": ""} 3644write -P0xdd 0x3fc0000 0x10000 3645{"return": ""} 3646{ 3647 "bitmaps": { 3648 "drive0": [ 3649 { 3650 "busy": false, 3651 "count": 786432, 3652 "granularity": 65536, 3653 "name": "bitmap0", 3654 "persistent": false, 3655 "recording": true 3656 } 3657 ] 3658 } 3659} 3660 3661= Checking Bitmap bitmap0 = 3662expecting 12 dirty sectors; have 12. OK! 3663 3664--- Reference Backup #2 --- 3665 3666{} 3667{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3668{"return": {}} 3669{} 3670{} 3671{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3672{"return": {}} 3673{} 3674{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 3675{"return": {}} 3676{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3677 3678--- Test Backup #2 --- 3679 3680{} 3681{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3682{"return": {}} 3683{} 3684{} 3685{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3686{"return": {}} 3687{} 3688{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 3689{"return": {}} 3690{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 3691{"return": {}} 3692{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3693{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3694{ 3695 "bitmaps": { 3696 "drive0": [ 3697 { 3698 "busy": false, 3699 "count": 0, 3700 "granularity": 65536, 3701 "name": "bitmap0", 3702 "persistent": false, 3703 "recording": true 3704 } 3705 ] 3706 } 3707} 3708 3709= Checking Bitmap bitmap0 = 3710expecting 0 dirty sectors; have 0. OK! 3711 3712--- Cleanup --- 3713 3714{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 3715{"return": {}} 3716{ 3717 "bitmaps": {} 3718} 3719 3720--- Verification --- 3721 3722qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 3723qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 3724qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 3725 3726 3727=== Mode top; Bitmap Sync on-success with simulated failure === 3728 3729--- Preparing image & VM --- 3730 3731{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 3732{"return": {}} 3733 3734--- Write #0 --- 3735 3736write -P0x49 0x0000000 0x10000 3737{"return": ""} 3738write -P0x6c 0x0100000 0x10000 3739{"return": ""} 3740write -P0x6f 0x2000000 0x10000 3741{"return": ""} 3742write -P0x76 0x3ff0000 0x10000 3743{"return": ""} 3744{ 3745 "bitmaps": {} 3746} 3747 3748--- Reference Backup #0 --- 3749 3750{} 3751{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3752{"return": {}} 3753{} 3754{} 3755{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3756{"return": {}} 3757{} 3758{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 3759{"return": {}} 3760{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3761 3762--- Add Bitmap --- 3763 3764{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 3765{"return": {}} 3766 3767--- Write #1 --- 3768 3769write -P0x65 0x0000000 0x10000 3770{"return": ""} 3771write -P0x77 0x00f8000 0x10000 3772{"return": ""} 3773write -P0x72 0x2008000 0x10000 3774{"return": ""} 3775write -P0x69 0x3fe0000 0x10000 3776{"return": ""} 3777{ 3778 "bitmaps": { 3779 "drive0": [ 3780 { 3781 "busy": false, 3782 "count": 393216, 3783 "granularity": 65536, 3784 "name": "bitmap0", 3785 "persistent": false, 3786 "recording": true 3787 } 3788 ] 3789 } 3790} 3791 3792= Checking Bitmap bitmap0 = 3793expecting 6 dirty sectors; have 6. OK! 3794 3795--- Reference Backup #1 --- 3796 3797{} 3798{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3799{"return": {}} 3800{} 3801{} 3802{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3803{"return": {}} 3804{} 3805{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 3806{"return": {}} 3807{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3808 3809--- Test Backup #1 --- 3810 3811{} 3812{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3813{"return": {}} 3814{} 3815{} 3816{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3817{"return": {}} 3818{} 3819{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 3820{"return": {}} 3821 3822--- Write #2 --- 3823 3824write -P0x74 0x0010000 0x10000 3825{"return": ""} 3826write -P0x69 0x00e8000 0x10000 3827{"return": ""} 3828write -P0x6e 0x2018000 0x10000 3829{"return": ""} 3830write -P0x67 0x3fe0000 0x20000 3831{"return": ""} 3832{ 3833 "bitmaps": { 3834 "backup-top": [ 3835 { 3836 "busy": false, 3837 "count": 67108864, 3838 "granularity": 65536, 3839 "persistent": false, 3840 "recording": false 3841 }, 3842 { 3843 "busy": false, 3844 "count": 458752, 3845 "granularity": 65536, 3846 "persistent": false, 3847 "recording": false 3848 } 3849 ], 3850 "drive0": [ 3851 { 3852 "busy": false, 3853 "count": 0, 3854 "granularity": 65536, 3855 "persistent": false, 3856 "recording": false 3857 }, 3858 { 3859 "busy": false, 3860 "count": 458752, 3861 "granularity": 65536, 3862 "persistent": false, 3863 "recording": true 3864 }, 3865 { 3866 "busy": true, 3867 "count": 393216, 3868 "granularity": 65536, 3869 "name": "bitmap0", 3870 "persistent": false, 3871 "recording": true 3872 } 3873 ] 3874 } 3875} 3876 3877= Checking Bitmap bitmap0 = 3878expecting 6 dirty sectors; have 6. OK! 3879 3880= Checking Bitmap (anonymous) = 3881expecting 7 dirty sectors; have 7. OK! 3882 3883{"execute": "job-cancel", "arguments": {"id": "backup_1"}} 3884{"return": {}} 3885{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3886{"data": {"device": "backup_1", "len": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3887{ 3888 "bitmaps": { 3889 "drive0": [ 3890 { 3891 "busy": false, 3892 "count": 655360, 3893 "granularity": 65536, 3894 "name": "bitmap0", 3895 "persistent": false, 3896 "recording": true 3897 } 3898 ] 3899 } 3900} 3901 3902= Checking Bitmap bitmap0 = 3903expecting 10 dirty sectors; have 10. OK! 3904 3905--- Write #3 --- 3906 3907write -P0xaa 0x0010000 0x30000 3908{"return": ""} 3909write -P0xbb 0x00d8000 0x10000 3910{"return": ""} 3911write -P0xcc 0x2028000 0x10000 3912{"return": ""} 3913write -P0xdd 0x3fc0000 0x10000 3914{"return": ""} 3915{ 3916 "bitmaps": { 3917 "drive0": [ 3918 { 3919 "busy": false, 3920 "count": 983040, 3921 "granularity": 65536, 3922 "name": "bitmap0", 3923 "persistent": false, 3924 "recording": true 3925 } 3926 ] 3927 } 3928} 3929 3930= Checking Bitmap bitmap0 = 3931expecting 15 dirty sectors; have 15. OK! 3932 3933--- Reference Backup #2 --- 3934 3935{} 3936{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3937{"return": {}} 3938{} 3939{} 3940{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3941{"return": {}} 3942{} 3943{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 3944{"return": {}} 3945{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3946 3947--- Test Backup #2 --- 3948 3949{} 3950{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 3951{"return": {}} 3952{} 3953{} 3954{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 3955{"return": {}} 3956{} 3957{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 3958{"return": {}} 3959{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 3960{"return": {}} 3961{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3962{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 3963{ 3964 "bitmaps": { 3965 "drive0": [ 3966 { 3967 "busy": false, 3968 "count": 0, 3969 "granularity": 65536, 3970 "name": "bitmap0", 3971 "persistent": false, 3972 "recording": true 3973 } 3974 ] 3975 } 3976} 3977 3978= Checking Bitmap bitmap0 = 3979expecting 0 dirty sectors; have 0. OK! 3980 3981--- Cleanup --- 3982 3983{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 3984{"return": {}} 3985{ 3986 "bitmaps": {} 3987} 3988 3989--- Verification --- 3990 3991qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 3992qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 3993qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 3994 3995 3996=== Mode top; Bitmap Sync on-success with intermediate failure === 3997 3998--- Preparing image & VM --- 3999 4000{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}} 4001{"return": {}} 4002 4003--- Write #0 --- 4004 4005write -P0x49 0x0000000 0x10000 4006{"return": ""} 4007write -P0x6c 0x0100000 0x10000 4008{"return": ""} 4009write -P0x6f 0x2000000 0x10000 4010{"return": ""} 4011write -P0x76 0x3ff0000 0x10000 4012{"return": ""} 4013{ 4014 "bitmaps": {} 4015} 4016 4017--- Reference Backup #0 --- 4018 4019{} 4020{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4021{"return": {}} 4022{} 4023{} 4024{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4025{"return": {}} 4026{} 4027{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 4028{"return": {}} 4029{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4030 4031--- Add Bitmap --- 4032 4033{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 4034{"return": {}} 4035 4036--- Write #1 --- 4037 4038write -P0x65 0x0000000 0x10000 4039{"return": ""} 4040write -P0x77 0x00f8000 0x10000 4041{"return": ""} 4042write -P0x72 0x2008000 0x10000 4043{"return": ""} 4044write -P0x69 0x3fe0000 0x10000 4045{"return": ""} 4046{ 4047 "bitmaps": { 4048 "drive0": [ 4049 { 4050 "busy": false, 4051 "count": 393216, 4052 "granularity": 65536, 4053 "name": "bitmap0", 4054 "persistent": false, 4055 "recording": true 4056 } 4057 ] 4058 } 4059} 4060 4061= Checking Bitmap bitmap0 = 4062expecting 6 dirty sectors; have 6. OK! 4063 4064--- Reference Backup #1 --- 4065 4066{} 4067{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4068{"return": {}} 4069{} 4070{} 4071{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4072{"return": {}} 4073{} 4074{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 4075{"return": {}} 4076{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4077 4078{"return": ""} 4079 4080--- Test Backup #1 --- 4081 4082{} 4083{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4084{"return": {}} 4085{} 4086{} 4087{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4088{"return": {}} 4089{} 4090{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 4091{"return": {}} 4092{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4093{"data": {"device": "backup_1", "error": "Input/output error", "len": 458752, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4094{ 4095 "bitmaps": { 4096 "drive0": [ 4097 { 4098 "busy": false, 4099 "count": 393216, 4100 "granularity": 65536, 4101 "name": "bitmap0", 4102 "persistent": false, 4103 "recording": true 4104 } 4105 ] 4106 } 4107} 4108 4109= Checking Bitmap bitmap0 = 4110expecting 6 dirty sectors; have 6. OK! 4111 4112--- Write #3 --- 4113 4114write -P0xaa 0x0010000 0x30000 4115{"return": ""} 4116write -P0xbb 0x00d8000 0x10000 4117{"return": ""} 4118write -P0xcc 0x2028000 0x10000 4119{"return": ""} 4120write -P0xdd 0x3fc0000 0x10000 4121{"return": ""} 4122{ 4123 "bitmaps": { 4124 "drive0": [ 4125 { 4126 "busy": false, 4127 "count": 917504, 4128 "granularity": 65536, 4129 "name": "bitmap0", 4130 "persistent": false, 4131 "recording": true 4132 } 4133 ] 4134 } 4135} 4136 4137= Checking Bitmap bitmap0 = 4138expecting 14 dirty sectors; have 14. OK! 4139 4140--- Reference Backup #2 --- 4141 4142{} 4143{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4144{"return": {}} 4145{} 4146{} 4147{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4148{"return": {}} 4149{} 4150{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 4151{"return": {}} 4152{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4153 4154--- Test Backup #2 --- 4155 4156{} 4157{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4158{"return": {}} 4159{} 4160{} 4161{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4162{"return": {}} 4163{} 4164{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 4165{"return": {}} 4166{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 4167{"return": {}} 4168{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4169{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4170{ 4171 "bitmaps": { 4172 "drive0": [ 4173 { 4174 "busy": false, 4175 "count": 0, 4176 "granularity": 65536, 4177 "name": "bitmap0", 4178 "persistent": false, 4179 "recording": true 4180 } 4181 ] 4182 } 4183} 4184 4185= Checking Bitmap bitmap0 = 4186expecting 0 dirty sectors; have 0. OK! 4187 4188--- Cleanup --- 4189 4190{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 4191{"return": {}} 4192{ 4193 "bitmaps": {} 4194} 4195 4196--- Verification --- 4197 4198qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK! 4199qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 4200qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 4201 4202 4203=== Mode top; Bitmap Sync on-success without failure === 4204 4205--- Preparing image & VM --- 4206 4207{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 4208{"return": {}} 4209 4210--- Write #0 --- 4211 4212write -P0x49 0x0000000 0x10000 4213{"return": ""} 4214write -P0x6c 0x0100000 0x10000 4215{"return": ""} 4216write -P0x6f 0x2000000 0x10000 4217{"return": ""} 4218write -P0x76 0x3ff0000 0x10000 4219{"return": ""} 4220{ 4221 "bitmaps": {} 4222} 4223 4224--- Reference Backup #0 --- 4225 4226{} 4227{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4228{"return": {}} 4229{} 4230{} 4231{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4232{"return": {}} 4233{} 4234{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 4235{"return": {}} 4236{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4237 4238--- Add Bitmap --- 4239 4240{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 4241{"return": {}} 4242 4243--- Write #1 --- 4244 4245write -P0x65 0x0000000 0x10000 4246{"return": ""} 4247write -P0x77 0x00f8000 0x10000 4248{"return": ""} 4249write -P0x72 0x2008000 0x10000 4250{"return": ""} 4251write -P0x69 0x3fe0000 0x10000 4252{"return": ""} 4253{ 4254 "bitmaps": { 4255 "drive0": [ 4256 { 4257 "busy": false, 4258 "count": 393216, 4259 "granularity": 65536, 4260 "name": "bitmap0", 4261 "persistent": false, 4262 "recording": true 4263 } 4264 ] 4265 } 4266} 4267 4268= Checking Bitmap bitmap0 = 4269expecting 6 dirty sectors; have 6. OK! 4270 4271--- Reference Backup #1 --- 4272 4273{} 4274{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4275{"return": {}} 4276{} 4277{} 4278{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4279{"return": {}} 4280{} 4281{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 4282{"return": {}} 4283{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4284 4285--- Test Backup #1 --- 4286 4287{} 4288{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4289{"return": {}} 4290{} 4291{} 4292{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4293{"return": {}} 4294{} 4295{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 4296{"return": {}} 4297 4298--- Write #2 --- 4299 4300write -P0x74 0x0010000 0x10000 4301{"return": ""} 4302write -P0x69 0x00e8000 0x10000 4303{"return": ""} 4304write -P0x6e 0x2018000 0x10000 4305{"return": ""} 4306write -P0x67 0x3fe0000 0x20000 4307{"return": ""} 4308{ 4309 "bitmaps": { 4310 "backup-top": [ 4311 { 4312 "busy": false, 4313 "count": 67108864, 4314 "granularity": 65536, 4315 "persistent": false, 4316 "recording": false 4317 }, 4318 { 4319 "busy": false, 4320 "count": 458752, 4321 "granularity": 65536, 4322 "persistent": false, 4323 "recording": false 4324 } 4325 ], 4326 "drive0": [ 4327 { 4328 "busy": false, 4329 "count": 0, 4330 "granularity": 65536, 4331 "persistent": false, 4332 "recording": false 4333 }, 4334 { 4335 "busy": false, 4336 "count": 458752, 4337 "granularity": 65536, 4338 "persistent": false, 4339 "recording": true 4340 }, 4341 { 4342 "busy": true, 4343 "count": 393216, 4344 "granularity": 65536, 4345 "name": "bitmap0", 4346 "persistent": false, 4347 "recording": true 4348 } 4349 ] 4350 } 4351} 4352 4353= Checking Bitmap bitmap0 = 4354expecting 6 dirty sectors; have 6. OK! 4355 4356= Checking Bitmap (anonymous) = 4357expecting 7 dirty sectors; have 7. OK! 4358 4359{"execute": "job-finalize", "arguments": {"id": "backup_1"}} 4360{"return": {}} 4361{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4362{"data": {"device": "backup_1", "len": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4363{ 4364 "bitmaps": { 4365 "drive0": [ 4366 { 4367 "busy": false, 4368 "count": 458752, 4369 "granularity": 65536, 4370 "name": "bitmap0", 4371 "persistent": false, 4372 "recording": true 4373 } 4374 ] 4375 } 4376} 4377 4378= Checking Bitmap bitmap0 = 4379expecting 7 dirty sectors; have 7. OK! 4380 4381--- Write #3 --- 4382 4383write -P0xaa 0x0010000 0x30000 4384{"return": ""} 4385write -P0xbb 0x00d8000 0x10000 4386{"return": ""} 4387write -P0xcc 0x2028000 0x10000 4388{"return": ""} 4389write -P0xdd 0x3fc0000 0x10000 4390{"return": ""} 4391{ 4392 "bitmaps": { 4393 "drive0": [ 4394 { 4395 "busy": false, 4396 "count": 786432, 4397 "granularity": 65536, 4398 "name": "bitmap0", 4399 "persistent": false, 4400 "recording": true 4401 } 4402 ] 4403 } 4404} 4405 4406= Checking Bitmap bitmap0 = 4407expecting 12 dirty sectors; have 12. OK! 4408 4409--- Reference Backup #2 --- 4410 4411{} 4412{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4413{"return": {}} 4414{} 4415{} 4416{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4417{"return": {}} 4418{} 4419{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 4420{"return": {}} 4421{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4422 4423--- Test Backup #2 --- 4424 4425{} 4426{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4427{"return": {}} 4428{} 4429{} 4430{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4431{"return": {}} 4432{} 4433{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 4434{"return": {}} 4435{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 4436{"return": {}} 4437{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4438{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4439{ 4440 "bitmaps": { 4441 "drive0": [ 4442 { 4443 "busy": false, 4444 "count": 0, 4445 "granularity": 65536, 4446 "name": "bitmap0", 4447 "persistent": false, 4448 "recording": true 4449 } 4450 ] 4451 } 4452} 4453 4454= Checking Bitmap bitmap0 = 4455expecting 0 dirty sectors; have 0. OK! 4456 4457--- Cleanup --- 4458 4459{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 4460{"return": {}} 4461{ 4462 "bitmaps": {} 4463} 4464 4465--- Verification --- 4466 4467qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 4468qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 4469qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 4470 4471 4472=== Mode top; Bitmap Sync always with simulated failure === 4473 4474--- Preparing image & VM --- 4475 4476{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 4477{"return": {}} 4478 4479--- Write #0 --- 4480 4481write -P0x49 0x0000000 0x10000 4482{"return": ""} 4483write -P0x6c 0x0100000 0x10000 4484{"return": ""} 4485write -P0x6f 0x2000000 0x10000 4486{"return": ""} 4487write -P0x76 0x3ff0000 0x10000 4488{"return": ""} 4489{ 4490 "bitmaps": {} 4491} 4492 4493--- Reference Backup #0 --- 4494 4495{} 4496{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4497{"return": {}} 4498{} 4499{} 4500{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4501{"return": {}} 4502{} 4503{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 4504{"return": {}} 4505{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4506 4507--- Add Bitmap --- 4508 4509{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 4510{"return": {}} 4511 4512--- Write #1 --- 4513 4514write -P0x65 0x0000000 0x10000 4515{"return": ""} 4516write -P0x77 0x00f8000 0x10000 4517{"return": ""} 4518write -P0x72 0x2008000 0x10000 4519{"return": ""} 4520write -P0x69 0x3fe0000 0x10000 4521{"return": ""} 4522{ 4523 "bitmaps": { 4524 "drive0": [ 4525 { 4526 "busy": false, 4527 "count": 393216, 4528 "granularity": 65536, 4529 "name": "bitmap0", 4530 "persistent": false, 4531 "recording": true 4532 } 4533 ] 4534 } 4535} 4536 4537= Checking Bitmap bitmap0 = 4538expecting 6 dirty sectors; have 6. OK! 4539 4540--- Reference Backup #1 --- 4541 4542{} 4543{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4544{"return": {}} 4545{} 4546{} 4547{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4548{"return": {}} 4549{} 4550{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 4551{"return": {}} 4552{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4553 4554--- Test Backup #1 --- 4555 4556{} 4557{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4558{"return": {}} 4559{} 4560{} 4561{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4562{"return": {}} 4563{} 4564{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 4565{"return": {}} 4566 4567--- Write #2 --- 4568 4569write -P0x74 0x0010000 0x10000 4570{"return": ""} 4571write -P0x69 0x00e8000 0x10000 4572{"return": ""} 4573write -P0x6e 0x2018000 0x10000 4574{"return": ""} 4575write -P0x67 0x3fe0000 0x20000 4576{"return": ""} 4577{ 4578 "bitmaps": { 4579 "backup-top": [ 4580 { 4581 "busy": false, 4582 "count": 67108864, 4583 "granularity": 65536, 4584 "persistent": false, 4585 "recording": false 4586 }, 4587 { 4588 "busy": false, 4589 "count": 458752, 4590 "granularity": 65536, 4591 "persistent": false, 4592 "recording": false 4593 } 4594 ], 4595 "drive0": [ 4596 { 4597 "busy": false, 4598 "count": 0, 4599 "granularity": 65536, 4600 "persistent": false, 4601 "recording": false 4602 }, 4603 { 4604 "busy": false, 4605 "count": 458752, 4606 "granularity": 65536, 4607 "persistent": false, 4608 "recording": true 4609 }, 4610 { 4611 "busy": true, 4612 "count": 393216, 4613 "granularity": 65536, 4614 "name": "bitmap0", 4615 "persistent": false, 4616 "recording": true 4617 } 4618 ] 4619 } 4620} 4621 4622= Checking Bitmap bitmap0 = 4623expecting 6 dirty sectors; have 6. OK! 4624 4625= Checking Bitmap (anonymous) = 4626expecting 7 dirty sectors; have 7. OK! 4627 4628{"execute": "job-cancel", "arguments": {"id": "backup_1"}} 4629{"return": {}} 4630{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4631{"data": {"device": "backup_1", "len": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4632{ 4633 "bitmaps": { 4634 "drive0": [ 4635 { 4636 "busy": false, 4637 "count": 458752, 4638 "granularity": 65536, 4639 "name": "bitmap0", 4640 "persistent": false, 4641 "recording": true 4642 } 4643 ] 4644 } 4645} 4646 4647= Checking Bitmap bitmap0 = 4648expecting 7 dirty sectors; have 7. OK! 4649 4650--- Write #3 --- 4651 4652write -P0xaa 0x0010000 0x30000 4653{"return": ""} 4654write -P0xbb 0x00d8000 0x10000 4655{"return": ""} 4656write -P0xcc 0x2028000 0x10000 4657{"return": ""} 4658write -P0xdd 0x3fc0000 0x10000 4659{"return": ""} 4660{ 4661 "bitmaps": { 4662 "drive0": [ 4663 { 4664 "busy": false, 4665 "count": 786432, 4666 "granularity": 65536, 4667 "name": "bitmap0", 4668 "persistent": false, 4669 "recording": true 4670 } 4671 ] 4672 } 4673} 4674 4675= Checking Bitmap bitmap0 = 4676expecting 12 dirty sectors; have 12. OK! 4677 4678--- Reference Backup #2 --- 4679 4680{} 4681{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4682{"return": {}} 4683{} 4684{} 4685{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4686{"return": {}} 4687{} 4688{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 4689{"return": {}} 4690{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4691 4692--- Test Backup #2 --- 4693 4694{} 4695{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4696{"return": {}} 4697{} 4698{} 4699{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4700{"return": {}} 4701{} 4702{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 4703{"return": {}} 4704{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 4705{"return": {}} 4706{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4707{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4708{ 4709 "bitmaps": { 4710 "drive0": [ 4711 { 4712 "busy": false, 4713 "count": 0, 4714 "granularity": 65536, 4715 "name": "bitmap0", 4716 "persistent": false, 4717 "recording": true 4718 } 4719 ] 4720 } 4721} 4722 4723= Checking Bitmap bitmap0 = 4724expecting 0 dirty sectors; have 0. OK! 4725 4726--- Cleanup --- 4727 4728{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 4729{"return": {}} 4730{ 4731 "bitmaps": {} 4732} 4733 4734--- Verification --- 4735 4736qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 4737qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 4738qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 4739 4740 4741=== Mode top; Bitmap Sync always with intermediate failure === 4742 4743--- Preparing image & VM --- 4744 4745{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "blkdebug", "image": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "inject-error": [{"errno": 5, "event": "read_aio", "immediately": false, "once": true, "state": 3}], "set-state": [{"event": "flush_to_disk", "new-state": 2, "state": 1}, {"event": "read_aio", "new-state": 3, "state": 2}]}, "node-name": "drive0"}} 4746{"return": {}} 4747 4748--- Write #0 --- 4749 4750write -P0x49 0x0000000 0x10000 4751{"return": ""} 4752write -P0x6c 0x0100000 0x10000 4753{"return": ""} 4754write -P0x6f 0x2000000 0x10000 4755{"return": ""} 4756write -P0x76 0x3ff0000 0x10000 4757{"return": ""} 4758{ 4759 "bitmaps": {} 4760} 4761 4762--- Reference Backup #0 --- 4763 4764{} 4765{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4766{"return": {}} 4767{} 4768{} 4769{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4770{"return": {}} 4771{} 4772{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 4773{"return": {}} 4774{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4775 4776--- Add Bitmap --- 4777 4778{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 4779{"return": {}} 4780 4781--- Write #1 --- 4782 4783write -P0x65 0x0000000 0x10000 4784{"return": ""} 4785write -P0x77 0x00f8000 0x10000 4786{"return": ""} 4787write -P0x72 0x2008000 0x10000 4788{"return": ""} 4789write -P0x69 0x3fe0000 0x10000 4790{"return": ""} 4791{ 4792 "bitmaps": { 4793 "drive0": [ 4794 { 4795 "busy": false, 4796 "count": 393216, 4797 "granularity": 65536, 4798 "name": "bitmap0", 4799 "persistent": false, 4800 "recording": true 4801 } 4802 ] 4803 } 4804} 4805 4806= Checking Bitmap bitmap0 = 4807expecting 6 dirty sectors; have 6. OK! 4808 4809--- Reference Backup #1 --- 4810 4811{} 4812{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4813{"return": {}} 4814{} 4815{} 4816{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4817{"return": {}} 4818{} 4819{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 4820{"return": {}} 4821{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4822 4823{"return": ""} 4824 4825--- Test Backup #1 --- 4826 4827{} 4828{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4829{"return": {}} 4830{} 4831{} 4832{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4833{"return": {}} 4834{} 4835{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 4836{"return": {}} 4837{"data": {"action": "report", "device": "backup_1", "operation": "read"}, "event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4838{"data": {"device": "backup_1", "error": "Input/output error", "len": 458752, "offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4839{ 4840 "bitmaps": { 4841 "drive0": [ 4842 { 4843 "busy": false, 4844 "count": 393216, 4845 "granularity": 65536, 4846 "name": "bitmap0", 4847 "persistent": false, 4848 "recording": true 4849 } 4850 ] 4851 } 4852} 4853 4854= Checking Bitmap bitmap0 = 4855expecting 6 dirty sectors; have 6. OK! 4856 4857--- Write #3 --- 4858 4859write -P0xaa 0x0010000 0x30000 4860{"return": ""} 4861write -P0xbb 0x00d8000 0x10000 4862{"return": ""} 4863write -P0xcc 0x2028000 0x10000 4864{"return": ""} 4865write -P0xdd 0x3fc0000 0x10000 4866{"return": ""} 4867{ 4868 "bitmaps": { 4869 "drive0": [ 4870 { 4871 "busy": false, 4872 "count": 917504, 4873 "granularity": 65536, 4874 "name": "bitmap0", 4875 "persistent": false, 4876 "recording": true 4877 } 4878 ] 4879 } 4880} 4881 4882= Checking Bitmap bitmap0 = 4883expecting 14 dirty sectors; have 14. OK! 4884 4885--- Reference Backup #2 --- 4886 4887{} 4888{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4889{"return": {}} 4890{} 4891{} 4892{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4893{"return": {}} 4894{} 4895{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 4896{"return": {}} 4897{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4898 4899--- Test Backup #2 --- 4900 4901{} 4902{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4903{"return": {}} 4904{} 4905{} 4906{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4907{"return": {}} 4908{} 4909{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 4910{"return": {}} 4911{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 4912{"return": {}} 4913{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4914{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4915{ 4916 "bitmaps": { 4917 "drive0": [ 4918 { 4919 "busy": false, 4920 "count": 0, 4921 "granularity": 65536, 4922 "name": "bitmap0", 4923 "persistent": false, 4924 "recording": true 4925 } 4926 ] 4927 } 4928} 4929 4930= Checking Bitmap bitmap0 = 4931expecting 0 dirty sectors; have 0. OK! 4932 4933--- Cleanup --- 4934 4935{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 4936{"return": {}} 4937{ 4938 "bitmaps": {} 4939} 4940 4941--- Verification --- 4942 4943qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Mismatch, OK! 4944qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 4945qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 4946 4947 4948=== Mode top; Bitmap Sync always without failure === 4949 4950--- Preparing image & VM --- 4951 4952{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 4953{"return": {}} 4954 4955--- Write #0 --- 4956 4957write -P0x49 0x0000000 0x10000 4958{"return": ""} 4959write -P0x6c 0x0100000 0x10000 4960{"return": ""} 4961write -P0x6f 0x2000000 0x10000 4962{"return": ""} 4963write -P0x76 0x3ff0000 0x10000 4964{"return": ""} 4965{ 4966 "bitmaps": {} 4967} 4968 4969--- Reference Backup #0 --- 4970 4971{} 4972{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 4973{"return": {}} 4974{} 4975{} 4976{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 4977{"return": {}} 4978{} 4979{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_0", "sync": "full", "target": "ref_target_0", "x-perf": {"max-workers": 1}}} 4980{"return": {}} 4981{"data": {"device": "ref_backup_0", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 4982 4983--- Add Bitmap --- 4984 4985{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 4986{"return": {}} 4987 4988--- Write #1 --- 4989 4990write -P0x65 0x0000000 0x10000 4991{"return": ""} 4992write -P0x77 0x00f8000 0x10000 4993{"return": ""} 4994write -P0x72 0x2008000 0x10000 4995{"return": ""} 4996write -P0x69 0x3fe0000 0x10000 4997{"return": ""} 4998{ 4999 "bitmaps": { 5000 "drive0": [ 5001 { 5002 "busy": false, 5003 "count": 393216, 5004 "granularity": 65536, 5005 "name": "bitmap0", 5006 "persistent": false, 5007 "recording": true 5008 } 5009 ] 5010 } 5011} 5012 5013= Checking Bitmap bitmap0 = 5014expecting 6 dirty sectors; have 6. OK! 5015 5016--- Reference Backup #1 --- 5017 5018{} 5019{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 5020{"return": {}} 5021{} 5022{} 5023{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 5024{"return": {}} 5025{} 5026{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_1", "sync": "full", "target": "ref_target_1", "x-perf": {"max-workers": 1}}} 5027{"return": {}} 5028{"data": {"device": "ref_backup_1", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 5029 5030--- Test Backup #1 --- 5031 5032{} 5033{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 5034{"return": {}} 5035{} 5036{} 5037{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 5038{"return": {}} 5039{} 5040{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_1", "sync": "top", "target": "backup_target_1", "x-perf": {"max-workers": 1}}} 5041{"return": {}} 5042 5043--- Write #2 --- 5044 5045write -P0x74 0x0010000 0x10000 5046{"return": ""} 5047write -P0x69 0x00e8000 0x10000 5048{"return": ""} 5049write -P0x6e 0x2018000 0x10000 5050{"return": ""} 5051write -P0x67 0x3fe0000 0x20000 5052{"return": ""} 5053{ 5054 "bitmaps": { 5055 "backup-top": [ 5056 { 5057 "busy": false, 5058 "count": 67108864, 5059 "granularity": 65536, 5060 "persistent": false, 5061 "recording": false 5062 }, 5063 { 5064 "busy": false, 5065 "count": 458752, 5066 "granularity": 65536, 5067 "persistent": false, 5068 "recording": false 5069 } 5070 ], 5071 "drive0": [ 5072 { 5073 "busy": false, 5074 "count": 0, 5075 "granularity": 65536, 5076 "persistent": false, 5077 "recording": false 5078 }, 5079 { 5080 "busy": false, 5081 "count": 458752, 5082 "granularity": 65536, 5083 "persistent": false, 5084 "recording": true 5085 }, 5086 { 5087 "busy": true, 5088 "count": 393216, 5089 "granularity": 65536, 5090 "name": "bitmap0", 5091 "persistent": false, 5092 "recording": true 5093 } 5094 ] 5095 } 5096} 5097 5098= Checking Bitmap bitmap0 = 5099expecting 6 dirty sectors; have 6. OK! 5100 5101= Checking Bitmap (anonymous) = 5102expecting 7 dirty sectors; have 7. OK! 5103 5104{"execute": "job-finalize", "arguments": {"id": "backup_1"}} 5105{"return": {}} 5106{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 5107{"data": {"device": "backup_1", "len": 458752, "offset": 458752, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 5108{ 5109 "bitmaps": { 5110 "drive0": [ 5111 { 5112 "busy": false, 5113 "count": 458752, 5114 "granularity": 65536, 5115 "name": "bitmap0", 5116 "persistent": false, 5117 "recording": true 5118 } 5119 ] 5120 } 5121} 5122 5123= Checking Bitmap bitmap0 = 5124expecting 7 dirty sectors; have 7. OK! 5125 5126--- Write #3 --- 5127 5128write -P0xaa 0x0010000 0x30000 5129{"return": ""} 5130write -P0xbb 0x00d8000 0x10000 5131{"return": ""} 5132write -P0xcc 0x2028000 0x10000 5133{"return": ""} 5134write -P0xdd 0x3fc0000 0x10000 5135{"return": ""} 5136{ 5137 "bitmaps": { 5138 "drive0": [ 5139 { 5140 "busy": false, 5141 "count": 786432, 5142 "granularity": 65536, 5143 "name": "bitmap0", 5144 "persistent": false, 5145 "recording": true 5146 } 5147 ] 5148 } 5149} 5150 5151= Checking Bitmap bitmap0 = 5152expecting 12 dirty sectors; have 12. OK! 5153 5154--- Reference Backup #2 --- 5155 5156{} 5157{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 5158{"return": {}} 5159{} 5160{} 5161{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 5162{"return": {}} 5163{} 5164{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "ref_backup_2", "sync": "full", "target": "ref_target_2", "x-perf": {"max-workers": 1}}} 5165{"return": {}} 5166{"data": {"device": "ref_backup_2", "len": 67108864, "offset": 67108864, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 5167 5168--- Test Backup #2 --- 5169 5170{} 5171{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 5172{"return": {}} 5173{} 5174{} 5175{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 5176{"return": {}} 5177{} 5178{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "backup_2", "sync": "bitmap", "target": "backup_target_2", "x-perf": {"max-workers": 1}}} 5179{"return": {}} 5180{"execute": "job-finalize", "arguments": {"id": "backup_2"}} 5181{"return": {}} 5182{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 5183{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}} 5184{ 5185 "bitmaps": { 5186 "drive0": [ 5187 { 5188 "busy": false, 5189 "count": 0, 5190 "granularity": 65536, 5191 "name": "bitmap0", 5192 "persistent": false, 5193 "recording": true 5194 } 5195 ] 5196 } 5197} 5198 5199= Checking Bitmap bitmap0 = 5200expecting 0 dirty sectors; have 0. OK! 5201 5202--- Cleanup --- 5203 5204{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "bitmap0", "node": "drive0"}} 5205{"return": {}} 5206{ 5207 "bitmaps": {} 5208} 5209 5210--- Verification --- 5211 5212qemu_img compare "TEST_DIR/PID-bsync1" "TEST_DIR/PID-fbackup1" ==> Identical, OK! 5213qemu_img compare "TEST_DIR/PID-bsync2" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 5214qemu_img compare "TEST_DIR/PID-img" "TEST_DIR/PID-fbackup2" ==> Identical, OK! 5215 5216 5217=== API failure tests === 5218 5219--- Preparing image & VM --- 5220 5221{"execute": "blockdev-add", "arguments": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-img"}, "node-name": "drive0"}} 5222{"return": {}} 5223 5224{} 5225{"execute": "job-dismiss", "arguments": {"id": "bdc-file-job"}} 5226{"return": {}} 5227{} 5228{} 5229{"execute": "job-dismiss", "arguments": {"id": "bdc-fmt-job"}} 5230{"return": {}} 5231{} 5232 5233{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 65536, "name": "bitmap0", "node": "drive0"}} 5234{"return": {}} 5235 5236-- Testing invalid QMP commands -- 5237 5238-- Sync mode incremental tests -- 5239 5240{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5241{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}} 5242 5243{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5244{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}} 5245 5246{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5247{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}} 5248 5249{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5250{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'incremental' sync mode"}} 5251 5252{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5253{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5254 5255{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5256{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}} 5257 5258{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5259{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}} 5260 5261{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5262{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5263 5264{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5265{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}} 5266 5267{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "incremental", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5268{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be 'on-success' when using sync mode 'incremental'"}} 5269 5270-- Sync mode bitmap tests -- 5271 5272{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5273{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}} 5274 5275{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5276{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}} 5277 5278{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5279{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}} 5280 5281{"execute": "blockdev-backup", "arguments": {"device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5282{"error": {"class": "GenericError", "desc": "must provide a valid bitmap name for 'bitmap' sync mode"}} 5283 5284{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5285{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5286 5287{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5288{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5289 5290{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5291{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5292 5293{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5294{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5295 5296{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "bitmap", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5297{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}} 5298 5299-- Sync mode full tests -- 5300 5301{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5302{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}} 5303 5304{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5305{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}} 5306 5307{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5308{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}} 5309 5310{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5311{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5312 5313{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5314{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5315 5316{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5317{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5318 5319{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5320{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5321 5322{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5323{"error": {"class": "GenericError", "desc": "Bitmap sync mode 'never' has no meaningful effect when combined with sync mode 'full'"}} 5324 5325{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "full", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5326{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}} 5327 5328-- Sync mode top tests -- 5329 5330{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5331{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}} 5332 5333{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5334{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}} 5335 5336{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5337{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}} 5338 5339{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5340{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5341 5342{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5343{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5344 5345{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5346{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5347 5348{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5349{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5350 5351{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5352{"error": {"class": "GenericError", "desc": "Bitmap sync mode 'never' has no meaningful effect when combined with sync mode 'top'"}} 5353 5354{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "top", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5355{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}} 5356 5357-- Sync mode none tests -- 5358 5359{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5360{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}} 5361 5362{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5363{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}} 5364 5365{"execute": "blockdev-backup", "arguments": {"bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5366{"error": {"class": "GenericError", "desc": "Cannot specify bitmap sync mode without a bitmap"}} 5367 5368{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5369{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5370 5371{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5372{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5373 5374{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5375{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5376 5377{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap404", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5378{"error": {"class": "GenericError", "desc": "Bitmap 'bitmap404' could not be found"}} 5379 5380{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "on-success", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5381{"error": {"class": "GenericError", "desc": "sync mode 'none' does not produce meaningful bitmap outputs"}} 5382 5383{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "always", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5384{"error": {"class": "GenericError", "desc": "sync mode 'none' does not produce meaningful bitmap outputs"}} 5385 5386{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "bitmap-mode": "never", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5387{"error": {"class": "GenericError", "desc": "sync mode 'none' does not produce meaningful bitmap outputs"}} 5388 5389{"execute": "blockdev-backup", "arguments": {"bitmap": "bitmap0", "device": "drive0", "filter-node-name": "backup-top", "job-id": "api_job", "sync": "none", "target": "backup_target", "x-perf": {"max-workers": 1}}} 5390{"error": {"class": "GenericError", "desc": "Bitmap sync mode must be given when providing a bitmap"}} 5391 5392