1QA output created by 081 2 3== creating quorum files == 4Formatting 'TEST_DIR/1.IMGFMT', fmt=IMGFMT size=10485760 5Formatting 'TEST_DIR/2.IMGFMT', fmt=IMGFMT size=10485760 6Formatting 'TEST_DIR/3.IMGFMT', fmt=IMGFMT size=10485760 7 8== writing images == 9wrote 10485760/10485760 bytes at offset 0 1010 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 11 12== checking quorum write == 13read 10485760/10485760 bytes at offset 0 1410 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 15read 10485760/10485760 bytes at offset 0 1610 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 17read 10485760/10485760 bytes at offset 0 1810 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 19 20== corrupting image == 21wrote 10485760/10485760 bytes at offset 0 2210 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 23 24== checking quorum correction == 25read 10485760/10485760 bytes at offset 0 2610 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 27 28== checking mixed reference/option specification == 29Testing: 30QMP_VERSION 31{"return": {}} 32{"return": {}} 33{"return": {}} 34{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "QUORUM_REPORT_BAD", "data": {"node-name": "drive2", "sectors-count": 20480, "sector-num": 0, "type": "read"}} 35read 10485760/10485760 bytes at offset 0 3610 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 37{"return": ""} 38{"return": {}} 39{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 40 41 42== using quorum rewrite corrupted mode == 43read 10485760/10485760 bytes at offset 0 4410 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 45 46== checking that quorum has corrected the corrupted file == 47read 10485760/10485760 bytes at offset 0 4810 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 49 50== using quorum rewrite corrupted mode without WRITE permission == 51-- corrupting -- 52wrote 1048576/1048576 bytes at offset 1048576 531 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 54 55-- running quorum -- 56Testing: -blockdev file,node-name=file1,filename=TEST_DIR/1.IMGFMT -blockdev file,node-name=file2,filename=TEST_DIR/2.IMGFMT -blockdev file,node-name=file3,filename=TEST_DIR/3.IMGFMT -blockdev { 57 "driver": "quorum", 58 "node-name": "quorum", 59 "read-only": true, 60 "vote-threshold": 2, 61 "rewrite-corrupted": true, 62 "children": [ "file1", "file2", "file3" ] 63 } -device virtio-scsi,id=scsi -device scsi-hd,id=quorum-drive,bus=scsi.0,drive=quorum 64QMP_VERSION 65{"return": {}} 66{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "QUORUM_REPORT_BAD", "data": {"node-name": "file2", "sectors-count": 20480, "sector-num": 0, "type": "read"}} 67read 10485760/10485760 bytes at offset 0 6810 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 69{"return": ""} 70{"return": {}} 71{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 72 73-- checking that the image has been corrected -- 74read 10485760/10485760 bytes at offset 0 7510 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 76 77== breaking quorum == 78wrote 10485760/10485760 bytes at offset 0 7910 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 80wrote 10485760/10485760 bytes at offset 0 8110 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 82 83== checking that quorum is broken == 84read failed: Input/output error 85 86== checking the blkverify mode with broken content == 87quorum: offset=0 bytes=10485760 contents mismatch at offset 0 88 89== writing the same data to both files == 90wrote 10485760/10485760 bytes at offset 0 9110 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 92wrote 10485760/10485760 bytes at offset 0 9310 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 94 95== checking the blkverify mode with valid content == 96read 10485760/10485760 bytes at offset 0 9710 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 98 99== checking the blkverify mode with invalid settings == 100qemu-io: can't open: blkverify=on can only be set if there are exactly two files and vote-threshold is 2 101 102== dynamically adding a child to a quorum == 103Testing: 104QMP_VERSION 105{"return": {}} 106{"return": {}} 107{"return": {}} 108{"return": {}} 109{"return": {}} 110{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 111 112Testing: 113QMP_VERSION 114{"return": {}} 115{"return": {}} 116{"return": {}} 117{"error": {"class": "GenericError", "desc": "Cannot add a child to a quorum in blkverify mode"}} 118{"return": {}} 119{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 120 121 122== dynamically removing a child from a quorum == 123Testing: 124QMP_VERSION 125{"return": {}} 126{"return": {}} 127{"return": {}} 128{"return": {}} 129{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 130 131Testing: 132QMP_VERSION 133{"return": {}} 134{"return": {}} 135{"error": {"class": "GenericError", "desc": "The number of children cannot be lower than the vote threshold 2"}} 136{"return": {}} 137{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 138 139Testing: 140QMP_VERSION 141{"return": {}} 142{"error": {"class": "GenericError", "desc": "blkverify=on can only be set if there are exactly two files and vote-threshold is 2"}} 143{"error": {"class": "GenericError", "desc": "Cannot find device='drive0-quorum' nor node-name='drive0-quorum'"}} 144{"return": {}} 145{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 146 147Testing: 148QMP_VERSION 149{"return": {}} 150{"return": {}} 151{"error": {"class": "GenericError", "desc": "The number of children cannot be lower than the vote threshold 2"}} 152{"return": {}} 153{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 154 155*** done 156