[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 15/15] iotest 046: test simultaneous cluster writ
From: |
Anton Nefedov |
Subject: |
[Qemu-devel] [PATCH v2 15/15] iotest 046: test simultaneous cluster write error case |
Date: |
Thu, 1 Jun 2017 18:14:33 +0300 |
Signed-off-by: Anton Nefedov <address@hidden>
---
tests/qemu-iotests/046 | 38 +++++++++++++++++++++++++++++++++++++-
tests/qemu-iotests/046.out | 23 +++++++++++++++++++++++
2 files changed, 60 insertions(+), 1 deletion(-)
diff --git a/tests/qemu-iotests/046 b/tests/qemu-iotests/046
index f2ebecf..c210b55 100755
--- a/tests/qemu-iotests/046
+++ b/tests/qemu-iotests/046
@@ -29,7 +29,8 @@ status=1 # failure is the default!
_cleanup()
{
- _cleanup_test_img
+ _cleanup_test_img
+ rm "$TEST_DIR/blkdebug.conf"
}
trap "_cleanup; exit \$status" 0 1 2 3 15
@@ -188,6 +189,37 @@ overlay_io | $QEMU_IO blkdebug::"$TEST_IMG" |
_filter_qemu_io |\
sed -e 's/bytes at offset [0-9]*/bytes at offset XXX/g'
echo
+echo "== Concurrency error case =="
+
+# 1. 1st request allocated the cluster, stop before it writes and updates L2
+# 2. 2nd request starts at the same cluster must complete write and start
+# waiting for the 1st to update L2
+# 3. Resume the 1st request to make it fail (injected error)
+# 4. 2nd request must wake and fail as well
+# 1 cluster will end up leaked
+cat > "$TEST_DIR/blkdebug.conf" <<EOF
+[inject-error]
+event = "write_aio"
+sector = "0xb00"
+EOF
+function error_io()
+{
+cat <<EOF
+discard 0x120000 0x20000
+break write_aio A
+aio_write -P 180 0x120000 0x200
+wait_break A
+aio_write -P 181 0x120200 0x10000
+resume A
+EOF
+}
+
+error_io | $QEMU_IO "blkdebug:$TEST_DIR/blkdebug.conf:$TEST_IMG" |
_filter_qemu_io |\
+ sed -e 's/bytes at offset [0-9]*/bytes at offset XXX/g'
+
+_check_test_img -r leaks
+
+echo
echo "== Verify image content =="
function verify_io()
@@ -259,6 +291,10 @@ function verify_io()
# Undefined content for 0x10c000 0x8000
echo read -P 160 0x114000 0x8000
echo read -P 17 0x11c000 0x4000
+
+ echo read -P ${discarded:-18} 0x120000 0x10000
+ echo read -P 181 0x130000 0x200
+ echo read -P ${discarded:-19} 0x130200 0xfe00
}
verify_io | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
diff --git a/tests/qemu-iotests/046.out b/tests/qemu-iotests/046.out
index ca2c740..a065102 100644
--- a/tests/qemu-iotests/046.out
+++ b/tests/qemu-iotests/046.out
@@ -140,6 +140,23 @@ wrote 32768/32768 bytes at offset XXX
wrote 98304/98304 bytes at offset XXX
96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+== Concurrency error case ==
+discard 131072/131072 bytes at offset XXX
+128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+blkdebug: Suspended request 'A'
+blkdebug: Resuming request 'A'
+aio_write failed: Input/output error
+aio_write failed: Input/output error
+Leaked cluster 22 refcount=1 reference=0
+Repairing cluster 22 refcount=1 reference=0
+The following inconsistencies were found and repaired:
+
+ 1 leaked clusters
+ 0 corruptions
+
+Double checking the fixed image now...
+No errors were found on the image.
+
== Verify image content ==
read 65536/65536 bytes at offset 0
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
@@ -235,5 +252,11 @@ read 32768/32768 bytes at offset 1130496
32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 16384/16384 bytes at offset 1163264
16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+read 65536/65536 bytes at offset 1179648
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+read 512/512 bytes at offset 1245184
+512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+read 65024/65024 bytes at offset 1245696
+63.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
No errors were found on the image.
*** done
--
2.7.4
- Re: [Qemu-devel] [PATCH v2 03/15] blkdebug: support BDRV_REQ_ALLOCATE, (continued)
- [Qemu-devel] [PATCH v2 07/15] qcow2: set inactive flag, Anton Nefedov, 2017/06/01
- [Qemu-devel] [PATCH v2 10/15] qcow2: handle_prealloc(): find out if area zeroed by earlier preallocation, Anton Nefedov, 2017/06/01
- [Qemu-devel] [PATCH v2 06/15] qcow2: preallocation at image expand, Anton Nefedov, 2017/06/01
- [Qemu-devel] [PATCH v2 08/15] qcow2: truncate preallocated space, Anton Nefedov, 2017/06/01
- [Qemu-devel] [PATCH v2 09/15] qcow2: check space leak at the end of the image, Anton Nefedov, 2017/06/01
- [Qemu-devel] [PATCH v2 11/15] qcow2: fix misleading comment about L2 linking, Anton Nefedov, 2017/06/01
- [Qemu-devel] [PATCH v2 12/15] qcow2-cluster: slightly refactor handle_dependencies(), Anton Nefedov, 2017/06/01
- [Qemu-devel] [PATCH v2 13/15] qcow2-cluster: make handle_dependencies() logic easier to follow, Anton Nefedov, 2017/06/01
- [Qemu-devel] [PATCH v2 15/15] iotest 046: test simultaneous cluster write error case,
Anton Nefedov <=
- [Qemu-devel] [PATCH v2 14/15] qcow2: allow concurrent unaligned writes to the same clusters, Anton Nefedov, 2017/06/01
- Re: [Qemu-devel] [PATCH v2 00/15] qcow2: space preallocation and COW improvements, John Snow, 2017/06/01