1c7fc5bc2SBenoît CanetQA output created by 081 2c7fc5bc2SBenoît Canet 3c7fc5bc2SBenoît Canet== creating quorum files == 4c7fc5bc2SBenoît CanetFormatting 'TEST_DIR/1.IMGFMT', fmt=IMGFMT size=10485760 5c7fc5bc2SBenoît CanetFormatting 'TEST_DIR/2.IMGFMT', fmt=IMGFMT size=10485760 6c7fc5bc2SBenoît CanetFormatting 'TEST_DIR/3.IMGFMT', fmt=IMGFMT size=10485760 7c7fc5bc2SBenoît Canet 8c7fc5bc2SBenoît Canet== writing images == 9c7fc5bc2SBenoît Canetwrote 10485760/10485760 bytes at offset 0 10c7fc5bc2SBenoît Canet10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 11c7fc5bc2SBenoît Canet 12c7fc5bc2SBenoît Canet== checking quorum write == 13c7fc5bc2SBenoît Canetread 10485760/10485760 bytes at offset 0 14c7fc5bc2SBenoît Canet10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 15c7fc5bc2SBenoît Canetread 10485760/10485760 bytes at offset 0 16c7fc5bc2SBenoît Canet10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 17c7fc5bc2SBenoît Canetread 10485760/10485760 bytes at offset 0 18c7fc5bc2SBenoît Canet10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 19c7fc5bc2SBenoît Canet 20c7fc5bc2SBenoît Canet== corrupting image == 21c7fc5bc2SBenoît Canetwrote 10485760/10485760 bytes at offset 0 22c7fc5bc2SBenoît Canet10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 23c7fc5bc2SBenoît Canet 24c7fc5bc2SBenoît Canet== checking quorum correction == 25c7fc5bc2SBenoît Canetread 10485760/10485760 bytes at offset 0 26c7fc5bc2SBenoît Canet10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 27c7fc5bc2SBenoît Canet 286141f3bdSMax Reitz== checking mixed reference/option specification == 298e9e6530SMax ReitzTesting: 306141f3bdSMax ReitzQMP_VERSION 316141f3bdSMax Reitz{"return": {}} 326141f3bdSMax Reitz{"return": {}} 338e9e6530SMax Reitz{"return": {}} 34e3f66e03SMax Reitz{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "QUORUM_REPORT_BAD", "data": {"node-name": "drive2", "sectors-count": 20480, "sector-num": 0, "type": "read"}} 356141f3bdSMax Reitzread 10485760/10485760 bytes at offset 0 366141f3bdSMax Reitz10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 376141f3bdSMax Reitz{"return": ""} 3892548938SDominik Csapak{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 39*f389309dSStefan Hajnoczi{"return": {}} 406141f3bdSMax Reitz 416141f3bdSMax Reitz 42cf29a570SBenoît Canet== using quorum rewrite corrupted mode == 43cf29a570SBenoît Canetread 10485760/10485760 bytes at offset 0 44cf29a570SBenoît Canet10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 45cf29a570SBenoît Canet 46cf29a570SBenoît Canet== checking that quorum has corrected the corrupted file == 47cf29a570SBenoît Canetread 10485760/10485760 bytes at offset 0 48cf29a570SBenoît Canet10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 49cf29a570SBenoît Canet 50c61c644fSMax Reitz== using quorum rewrite corrupted mode without WRITE permission == 51c61c644fSMax Reitz-- corrupting -- 52c61c644fSMax Reitzwrote 1048576/1048576 bytes at offset 1048576 53c61c644fSMax Reitz1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 54c61c644fSMax Reitz 55c61c644fSMax Reitz-- running quorum -- 56c61c644fSMax ReitzTesting: -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 { 57c61c644fSMax Reitz "driver": "quorum", 58c61c644fSMax Reitz "node-name": "quorum", 59c61c644fSMax Reitz "read-only": true, 60c61c644fSMax Reitz "vote-threshold": 2, 61c61c644fSMax Reitz "rewrite-corrupted": true, 62c61c644fSMax Reitz "children": [ "file1", "file2", "file3" ] 63c61c644fSMax Reitz } -device virtio-scsi,id=scsi -device scsi-hd,id=quorum-drive,bus=scsi.0,drive=quorum 64c61c644fSMax ReitzQMP_VERSION 65c61c644fSMax Reitz{"return": {}} 66c61c644fSMax Reitz{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "QUORUM_REPORT_BAD", "data": {"node-name": "file2", "sectors-count": 20480, "sector-num": 0, "type": "read"}} 67c61c644fSMax Reitzread 10485760/10485760 bytes at offset 0 68c61c644fSMax Reitz10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 69c61c644fSMax Reitz{"return": ""} 70c61c644fSMax Reitz{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 71*f389309dSStefan Hajnoczi{"return": {}} 72c61c644fSMax Reitz 73c61c644fSMax Reitz-- checking that the image has been corrected -- 74c61c644fSMax Reitzread 10485760/10485760 bytes at offset 0 75c61c644fSMax Reitz10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 76c61c644fSMax Reitz 77c7fc5bc2SBenoît Canet== breaking quorum == 78c7fc5bc2SBenoît Canetwrote 10485760/10485760 bytes at offset 0 79c7fc5bc2SBenoît Canet10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 80cf29a570SBenoît Canetwrote 10485760/10485760 bytes at offset 0 81cf29a570SBenoît Canet10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 82c7fc5bc2SBenoît Canet 83c7fc5bc2SBenoît Canet== checking that quorum is broken == 848f9e835fSKevin Wolfread failed: Input/output error 8582c4c859SAlberto Garcia 8682c4c859SAlberto Garcia== checking the blkverify mode with broken content == 8782c4c859SAlberto Garciaquorum: offset=0 bytes=10485760 contents mismatch at offset 0 8882c4c859SAlberto Garcia 8982c4c859SAlberto Garcia== writing the same data to both files == 9082c4c859SAlberto Garciawrote 10485760/10485760 bytes at offset 0 9182c4c859SAlberto Garcia10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 9282c4c859SAlberto Garciawrote 10485760/10485760 bytes at offset 0 9382c4c859SAlberto Garcia10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 9482c4c859SAlberto Garcia 9582c4c859SAlberto Garcia== checking the blkverify mode with valid content == 9682c4c859SAlberto Garciaread 10485760/10485760 bytes at offset 0 9782c4c859SAlberto Garcia10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 9882c4c859SAlberto Garcia 9982c4c859SAlberto Garcia== checking the blkverify mode with invalid settings == 10036b9986bSThomas Huthqemu-io: can't open: blkverify=on can only be set if there are exactly two files and vote-threshold is 2 10104f600efSAlberto Garcia 10204f600efSAlberto Garcia== dynamically adding a child to a quorum == 10304f600efSAlberto GarciaTesting: 10404f600efSAlberto GarciaQMP_VERSION 10504f600efSAlberto Garcia{"return": {}} 10604f600efSAlberto Garcia{"return": {}} 10704f600efSAlberto Garcia{"return": {}} 10804f600efSAlberto Garcia{"return": {}} 10992548938SDominik Csapak{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 110*f389309dSStefan Hajnoczi{"return": {}} 11104f600efSAlberto Garcia 11204f600efSAlberto GarciaTesting: 11304f600efSAlberto GarciaQMP_VERSION 11404f600efSAlberto Garcia{"return": {}} 11504f600efSAlberto Garcia{"return": {}} 11604f600efSAlberto Garcia{"return": {}} 11704f600efSAlberto Garcia{"error": {"class": "GenericError", "desc": "Cannot add a child to a quorum in blkverify mode"}} 11892548938SDominik Csapak{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 119*f389309dSStefan Hajnoczi{"return": {}} 12004f600efSAlberto Garcia 12104f600efSAlberto Garcia 12204f600efSAlberto Garcia== dynamically removing a child from a quorum == 12304f600efSAlberto GarciaTesting: 12404f600efSAlberto GarciaQMP_VERSION 12504f600efSAlberto Garcia{"return": {}} 12604f600efSAlberto Garcia{"return": {}} 12704f600efSAlberto Garcia{"return": {}} 12892548938SDominik Csapak{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 129*f389309dSStefan Hajnoczi{"return": {}} 13004f600efSAlberto Garcia 13104f600efSAlberto GarciaTesting: 13204f600efSAlberto GarciaQMP_VERSION 13304f600efSAlberto Garcia{"return": {}} 13404f600efSAlberto Garcia{"return": {}} 13504f600efSAlberto Garcia{"error": {"class": "GenericError", "desc": "The number of children cannot be lower than the vote threshold 2"}} 13692548938SDominik Csapak{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 137*f389309dSStefan Hajnoczi{"return": {}} 13804f600efSAlberto Garcia 13904f600efSAlberto GarciaTesting: 14004f600efSAlberto GarciaQMP_VERSION 14104f600efSAlberto Garcia{"return": {}} 14204f600efSAlberto Garcia{"error": {"class": "GenericError", "desc": "blkverify=on can only be set if there are exactly two files and vote-threshold is 2"}} 143785ec4b1SConnor Kuehl{"error": {"class": "GenericError", "desc": "Cannot find device='drive0-quorum' nor node-name='drive0-quorum'"}} 14492548938SDominik Csapak{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 145*f389309dSStefan Hajnoczi{"return": {}} 14604f600efSAlberto Garcia 14704f600efSAlberto GarciaTesting: 14804f600efSAlberto GarciaQMP_VERSION 14904f600efSAlberto Garcia{"return": {}} 15004f600efSAlberto Garcia{"return": {}} 15104f600efSAlberto Garcia{"error": {"class": "GenericError", "desc": "The number of children cannot be lower than the vote threshold 2"}} 15292548938SDominik Csapak{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 153*f389309dSStefan Hajnoczi{"return": {}} 15404f600efSAlberto Garcia 155c7fc5bc2SBenoît Canet*** done 156