qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 4/5] python: qmp_shell: add -e/--exit-on-error option


From: Damien Hedde
Subject: Re: [PATCH 4/5] python: qmp_shell: add -e/--exit-on-error option
Date: Wed, 23 Feb 2022 17:46:40 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1


On 2/23/22 17:43, Damien Hedde wrote:


On 2/23/22 16:44, Daniel P. Berrangé wrote:
On Wed, Feb 23, 2022 at 10:41:11AM -0500, John Snow wrote:
On Wed, Feb 23, 2022 at 10:27 AM Daniel P. Berrangé <berrange@redhat.com> wrote:

On Wed, Feb 23, 2022 at 10:22:11AM -0500, John Snow wrote:
On Mon, Feb 21, 2022 at 10:55 AM Damien Hedde
<damien.hedde@greensocs.com> wrote:

This option makes qmp_shell exit (with error code 1)
as soon as one of the following error occurs:
+ command parsing error
+ disconnection
+ command failure (response is an error)

_execute_cmd() method now returns None or the response
so that read_exec_command() can do the last check.

This is meant to be used in combination with an input file
redirection. It allows to store a list of commands
into a file and try to run them by qmp_shell and easily
see if it failed or not.

Signed-off-by: Damien Hedde <damien.hedde@greensocs.com>

Based on this patch, it looks like you really want something
scriptable, so I think the qemu-send idea that Dan has suggested might
be the best way to go. Are you still hoping to use the interactive
"short" QMP command format? That might be a bad idea, given how flaky
the parsing is -- and how we don't actually have a published standard
for that format. We've *never* liked the bad parsing here, so I have a
reluctance to use it in more places.

I don't really care of the command format. I was just using the one expected by qmp-shell to avoid providing another script.
I think it's better not to use some standard syntax like json.
I wanted to say the opposite: it's best to use json.
As long as we can store the commands into a file and tests them easily, it's ok. The crucial feature is the "stop as soon something unexpected happens" so that we can easily spot an issue.

I'm having the naive idea that a script file could be as simple as a
list of QMP commands to send:

[
     {"execute": "block-dirty-bitmap-add", "arguments": { ... }},
     ...
]

I used this format at some point because it's so trivial to feed into the QMP tools. Even used a yaml version of that to get the "human readability" that goes with it.


I'd really recommend against creating a new format for the script
file, especially one needing opening & closing  [] like this, as
that isn't so amenable to dynamic usage/creation. ie you can't
just append an extcra command to an existing file.

IMHO, the "file" format should be identical to the result of
capturing the socket data off the wire. ie just a concatenation
of QMP commands, with no extra wrapping / change in format.
>>
Eugh. That's just so hard to parse, because there's no off-the-shelf
tooling for "load a sequence of JSON documents". Nothing in Python
does it. :\

It isn't that hard if you require each JSON doc to be followed by
a newline.

Feed one line at a time to the JSON parser, until you get a complete
JSON doc, process that, then re-init the parser and carry on feeding
it lines until it emits the next JSON doc, and so on.


I agree it's doable. I can look into that.

It makes me think that I've managed to modify the chardev 'file' backend
a few months ago so that it can be used with an input file on the cli. This allowed to give such raw qmp file directly with the -qmp option instead of using an intermediate socket and a script issuing the same file. But I gave up with this approach because then it can't stop if a command failed without hacking into the receiving side in qemu.

--
Damien






reply via email to

[Prev in Thread] Current Thread [Next in Thread]