* [Qemu-devel] [PATCH] qtest.py: Wait for the result of qtest commands
@ 2019-01-31 12:38 Alberto Garcia
2019-02-01 5:51 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Alberto Garcia @ 2019-01-31 12:38 UTC (permalink / raw)
To: qemu-devel
Cc: Alberto Garcia, qemu-block, Max Reitz, Markus Armbruster,
Eduardo Habkost, Cleber Rosa, Peter Xu
The cmd() method of the QEMUQtestProtocol class sends a qtest command
to QEMU but doesn't wait for the return message ("OK", "FAIL", "ERR").
Because of this, it can return control to the caller before the
command has actually finished.
In cases like clock_step or clock_set this means that cmd() can return
before all the timers triggered by the clock change have been fired.
This can be fixed by making cmd() wait for the output of the qtest
command.
This fixes iotests 093 and 136, which are flaky since commit
8258292e18c39480b64eba9f3551 when the machine is under heavy workload.
Signed-off-by: Alberto Garcia <berto@igalia.com>
---
scripts/qtest.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/scripts/qtest.py b/scripts/qtest.py
index adf1fe3f26..afac3fe900 100644
--- a/scripts/qtest.py
+++ b/scripts/qtest.py
@@ -31,6 +31,7 @@ class QEMUQtestProtocol(object):
"""
self._address = address
self._sock = self._get_sock()
+ self._sockfile = None
if server:
self._sock.bind(self._address)
self._sock.listen(1)
@@ -49,6 +50,7 @@ class QEMUQtestProtocol(object):
@raise socket.error on socket connection errors
"""
self._sock.connect(self._address)
+ self._sockfile = self._sock.makefile()
def accept(self):
"""
@@ -57,6 +59,7 @@ class QEMUQtestProtocol(object):
@raise socket.error on socket connection errors
"""
self._sock, _ = self._sock.accept()
+ self._sockfile = self._sock.makefile()
def cmd(self, qtest_cmd):
"""
@@ -65,9 +68,12 @@ class QEMUQtestProtocol(object):
@param qtest_cmd: qtest command text to be sent
"""
self._sock.sendall((qtest_cmd + "\n").encode('utf-8'))
+ resp = self._sockfile.readline()
+ return resp
def close(self):
self._sock.close()
+ self._sockfile.close()
def settimeout(self, timeout):
self._sock.settimeout(timeout)
--
2.11.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [Qemu-block] [PATCH] qtest.py: Wait for the result of qtest commands
2019-01-31 12:38 [Qemu-devel] [PATCH] qtest.py: Wait for the result of qtest commands Alberto Garcia
@ 2019-02-01 5:51 ` Stefan Hajnoczi
2019-02-01 12:44 ` Kevin Wolf
2019-02-01 14:12 ` [Qemu-devel] " Max Reitz
2 siblings, 0 replies; 4+ messages in thread
From: Stefan Hajnoczi @ 2019-02-01 5:51 UTC (permalink / raw)
To: Alberto Garcia
Cc: qemu-devel, Eduardo Habkost, qemu-block, Markus Armbruster,
Peter Xu, Max Reitz, Cleber Rosa
[-- Attachment #1: Type: text/plain, Size: 872 bytes --]
On Thu, Jan 31, 2019 at 02:38:10PM +0200, Alberto Garcia wrote:
> The cmd() method of the QEMUQtestProtocol class sends a qtest command
> to QEMU but doesn't wait for the return message ("OK", "FAIL", "ERR").
> Because of this, it can return control to the caller before the
> command has actually finished.
>
> In cases like clock_step or clock_set this means that cmd() can return
> before all the timers triggered by the clock change have been fired.
> This can be fixed by making cmd() wait for the output of the qtest
> command.
>
> This fixes iotests 093 and 136, which are flaky since commit
> 8258292e18c39480b64eba9f3551 when the machine is under heavy workload.
>
> Signed-off-by: Alberto Garcia <berto@igalia.com>
> ---
> scripts/qtest.py | 6 ++++++
> 1 file changed, 6 insertions(+)
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [Qemu-block] [PATCH] qtest.py: Wait for the result of qtest commands
2019-01-31 12:38 [Qemu-devel] [PATCH] qtest.py: Wait for the result of qtest commands Alberto Garcia
2019-02-01 5:51 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
@ 2019-02-01 12:44 ` Kevin Wolf
2019-02-01 14:12 ` [Qemu-devel] " Max Reitz
2 siblings, 0 replies; 4+ messages in thread
From: Kevin Wolf @ 2019-02-01 12:44 UTC (permalink / raw)
To: Alberto Garcia
Cc: qemu-devel, Eduardo Habkost, qemu-block, Markus Armbruster,
Peter Xu, Max Reitz, Cleber Rosa
Am 31.01.2019 um 13:38 hat Alberto Garcia geschrieben:
> The cmd() method of the QEMUQtestProtocol class sends a qtest command
> to QEMU but doesn't wait for the return message ("OK", "FAIL", "ERR").
> Because of this, it can return control to the caller before the
> command has actually finished.
>
> In cases like clock_step or clock_set this means that cmd() can return
> before all the timers triggered by the clock change have been fired.
> This can be fixed by making cmd() wait for the output of the qtest
> command.
>
> This fixes iotests 093 and 136, which are flaky since commit
> 8258292e18c39480b64eba9f3551 when the machine is under heavy workload.
>
> Signed-off-by: Alberto Garcia <berto@igalia.com>
Thanks, applied to the block branch.
Kevin
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] qtest.py: Wait for the result of qtest commands
2019-01-31 12:38 [Qemu-devel] [PATCH] qtest.py: Wait for the result of qtest commands Alberto Garcia
2019-02-01 5:51 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2019-02-01 12:44 ` Kevin Wolf
@ 2019-02-01 14:12 ` Max Reitz
2 siblings, 0 replies; 4+ messages in thread
From: Max Reitz @ 2019-02-01 14:12 UTC (permalink / raw)
To: Alberto Garcia, qemu-devel
Cc: qemu-block, Markus Armbruster, Eduardo Habkost, Cleber Rosa,
Peter Xu
[-- Attachment #1: Type: text/plain, Size: 821 bytes --]
On 31.01.19 13:38, Alberto Garcia wrote:
> The cmd() method of the QEMUQtestProtocol class sends a qtest command
> to QEMU but doesn't wait for the return message ("OK", "FAIL", "ERR").
> Because of this, it can return control to the caller before the
> command has actually finished.
>
> In cases like clock_step or clock_set this means that cmd() can return
> before all the timers triggered by the clock change have been fired.
> This can be fixed by making cmd() wait for the output of the qtest
> command.
>
> This fixes iotests 093 and 136, which are flaky since commit
> 8258292e18c39480b64eba9f3551 when the machine is under heavy workload.
>
> Signed-off-by: Alberto Garcia <berto@igalia.com>
> ---
> scripts/qtest.py | 6 ++++++
> 1 file changed, 6 insertions(+)
Thanks a lot!
Max
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-02-01 14:13 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-01-31 12:38 [Qemu-devel] [PATCH] qtest.py: Wait for the result of qtest commands Alberto Garcia
2019-02-01 5:51 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2019-02-01 12:44 ` Kevin Wolf
2019-02-01 14:12 ` [Qemu-devel] " Max Reitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).