On 9/15/23 20:41, Denis V. Lunev wrote:
> Original check is broken as supposed reading from 2 different clusters
> results in read from the same file offset twice. This is definitely
> wrong.
>
> We should be sure that
> * the content of both clusters is correct after repair
> * clusters are at the different offsets after repair
> In order to check the latter we write some content into the first one
> and validate that fact.
>
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> ---
> tests/qemu-iotests/tests/parallels-checks | 14 ++++++++++----
> tests/qemu-iotests/tests/parallels-checks.out | 16 ++++++++++++----
> 2 files changed, 22 insertions(+), 8 deletions(-)
>
> diff --git a/tests/qemu-iotests/tests/parallels-checks b/tests/qemu-iotests/tests/parallels-checks
> index f4ca50295e..df99558486 100755
> --- a/tests/qemu-iotests/tests/parallels-checks
> +++ b/tests/qemu-iotests/tests/parallels-checks
> @@ -117,14 +117,20 @@ echo "== check second cluster =="
> echo "== repair image =="
> _check_test_img -r all
>
> +echo "== check the first cluster =="
> +{ $QEMU_IO -r -c "read -P 0x11 0 $CLUSTER_SIZE" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
> +
> echo "== check second cluster =="
> { $QEMU_IO -r -c "read -P 0x11 $CLUSTER_SIZE $CLUSTER_SIZE" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
>
> -echo "== check first cluster on host =="
> -printf "content: 0x%02x\n" `peek_file_le $TEST_IMG $(($CLUSTER_SIZE)) 1`
> +echo "== write another pattern to the first clusters =="
> +{ $QEMU_IO -c "write -P 0x66 0 $CLUSTER_SIZE" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
> +
> +echo "== check the first cluster =="
> +{ $QEMU_IO -r -c "read -P 0x66 0 $CLUSTER_SIZE" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
>
> -echo "== check second cluster on host =="
> -printf "content: 0x%02x\n" `peek_file_le $TEST_IMG $(($CLUSTER_SIZE)) 1`
> +echo "== check the second cluster (deduplicated) =="
> +{ $QEMU_IO -r -c "read -P 0x11 $CLUSTER_SIZE $CLUSTER_SIZE" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
>
> # Clear image
> _make_test_img $SIZE
> diff --git a/tests/qemu-iotests/tests/parallels-checks.out b/tests/qemu-iotests/tests/parallels-checks.out
> index 74a5e29260..1325d2b611 100644
> --- a/tests/qemu-iotests/tests/parallels-checks.out
> +++ b/tests/qemu-iotests/tests/parallels-checks.out
> @@ -55,13 +55,21 @@ The following inconsistencies were found and repaired:
>
> Double checking the fixed image now...
> No errors were found on the image.
> +== check the first cluster ==
> +read 1048576/1048576 bytes at offset 0
> +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> == check second cluster ==
> read 1048576/1048576 bytes at offset 1048576
> 1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -== check first cluster on host ==
> -content: 0x11
> -== check second cluster on host ==
> -content: 0x11
> +== write another pattern to the first clusters ==
> +wrote 1048576/1048576 bytes at offset 0
> +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +== check the first cluster ==
> +read 1048576/1048576 bytes at offset 0
> +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +== check the second cluster (deduplicated) ==
> +read 1048576/1048576 bytes at offset 1048576
> +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4194304
> == TEST DATA_OFF CHECK ==
> == write pattern to first cluster ==
Reviewed-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com>