iotests: 153: Wait for an answer to QMP commands

There are various actions in this test that must be executed
sequentially, as the result of it depends on the state triggered by the
previous one.

If the last argument of _send_qemu_cmd() is an empty string, it just
sends the QMP commands without waiting for an answer. While unlikely, it
may happen that the next action in the test gets invoked before QEMU
processes the QMP request.

This issue seems to be easier to reproduce on servers with limited
resources or highly loaded.

With this change, we wait for an answer on all _send_qemu_cmd() calls.

Signed-off-by: Sergio Lopez <slp@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Sergio Lopez 2019-03-15 12:46:55 +01:00 committed by Kevin Wolf
parent 2345bde647
commit 9cd97956cf
2 changed files with 12 additions and 6 deletions

View File

@ -155,7 +155,7 @@ for opts1 in "" "read-only=on" "read-only=on,force-share=on"; do
_img_info -U | grep 'file format' _img_info -U | grep 'file format'
fi fi
done done
_send_qemu_cmd $h "{ 'execute': 'quit', }" "" _send_qemu_cmd $h "{ 'execute': 'quit' }" ''
echo echo
echo "Round done" echo "Round done"
_cleanup_qemu _cleanup_qemu
@ -219,7 +219,7 @@ echo "Adding drive"
_send_qemu_cmd $QEMU_HANDLE \ _send_qemu_cmd $QEMU_HANDLE \
"{ 'execute': 'human-monitor-command', "{ 'execute': 'human-monitor-command',
'arguments': { 'command-line': 'drive_add 0 if=none,id=d0,file=${TEST_IMG}' } }" \ 'arguments': { 'command-line': 'drive_add 0 if=none,id=d0,file=${TEST_IMG}' } }" \
"" 'return'
_run_cmd $QEMU_IO "${TEST_IMG}" -c 'write 0 512' _run_cmd $QEMU_IO "${TEST_IMG}" -c 'write 0 512'
@ -230,7 +230,7 @@ echo "== Closing an image should unlock it =="
_send_qemu_cmd $QEMU_HANDLE \ _send_qemu_cmd $QEMU_HANDLE \
"{ 'execute': 'human-monitor-command', "{ 'execute': 'human-monitor-command',
'arguments': { 'command-line': 'drive_del d0' } }" \ 'arguments': { 'command-line': 'drive_del d0' } }" \
"" 'return'
_run_cmd $QEMU_IO "${TEST_IMG}" -c 'write 0 512' _run_cmd $QEMU_IO "${TEST_IMG}" -c 'write 0 512'
@ -239,7 +239,7 @@ for d in d0 d1; do
_send_qemu_cmd $QEMU_HANDLE \ _send_qemu_cmd $QEMU_HANDLE \
"{ 'execute': 'human-monitor-command', "{ 'execute': 'human-monitor-command',
'arguments': { 'command-line': 'drive_add 0 if=none,id=$d,file=${TEST_IMG},readonly=on' } }" \ 'arguments': { 'command-line': 'drive_add 0 if=none,id=$d,file=${TEST_IMG},readonly=on' } }" \
"" 'return'
done done
_run_cmd $QEMU_IMG info "${TEST_IMG}" _run_cmd $QEMU_IMG info "${TEST_IMG}"
@ -247,7 +247,7 @@ _run_cmd $QEMU_IMG info "${TEST_IMG}"
_send_qemu_cmd $QEMU_HANDLE \ _send_qemu_cmd $QEMU_HANDLE \
"{ 'execute': 'human-monitor-command', "{ 'execute': 'human-monitor-command',
'arguments': { 'command-line': 'drive_del d0' } }" \ 'arguments': { 'command-line': 'drive_del d0' } }" \
"" 'return'
_run_cmd $QEMU_IO "${TEST_IMG}" -c 'write 0 512' _run_cmd $QEMU_IO "${TEST_IMG}" -c 'write 0 512'
@ -255,7 +255,7 @@ echo "Closing the other"
_send_qemu_cmd $QEMU_HANDLE \ _send_qemu_cmd $QEMU_HANDLE \
"{ 'execute': 'human-monitor-command', "{ 'execute': 'human-monitor-command',
'arguments': { 'command-line': 'drive_del d1' } }" \ 'arguments': { 'command-line': 'drive_del d1' } }" \
"" 'return'
_run_cmd $QEMU_IO "${TEST_IMG}" -c 'write 0 512' _run_cmd $QEMU_IO "${TEST_IMG}" -c 'write 0 512'

View File

@ -417,6 +417,7 @@ Is another process using the image [TEST_DIR/t.qcow2]?
_qemu_img_wrapper commit -b TEST_DIR/t.qcow2.b TEST_DIR/t.qcow2.c _qemu_img_wrapper commit -b TEST_DIR/t.qcow2.b TEST_DIR/t.qcow2.c
{"return": {}} {"return": {}}
Adding drive Adding drive
{"return": "OKrn"}
_qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512 _qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512
can't open device TEST_DIR/t.qcow2: Failed to get "write" lock can't open device TEST_DIR/t.qcow2: Failed to get "write" lock
@ -425,16 +426,21 @@ Creating overlay with qemu-img when the guest is running should be allowed
_qemu_img_wrapper create -f qcow2 -b TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.overlay _qemu_img_wrapper create -f qcow2 -b TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.overlay
== Closing an image should unlock it == == Closing an image should unlock it ==
{"return": ""}
_qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512 _qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512
Adding two and closing one Adding two and closing one
{"return": "OKrn"}
{"return": "OKrn"}
_qemu_img_wrapper info TEST_DIR/t.qcow2 _qemu_img_wrapper info TEST_DIR/t.qcow2
{"return": ""}
_qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512 _qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512
can't open device TEST_DIR/t.qcow2: Failed to get "write" lock can't open device TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image [TEST_DIR/t.qcow2]? Is another process using the image [TEST_DIR/t.qcow2]?
Closing the other Closing the other
{"return": ""}
_qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512 _qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512