[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Making QEMU easier for management tools and applications
From: |
Stefan Hajnoczi |
Subject: |
Re: Making QEMU easier for management tools and applications |
Date: |
Mon, 20 Jan 2020 09:55:54 +0000 |
On Thu, Jan 16, 2020 at 12:03:14PM +0100, Kashyap Chamarthy wrote:
> On Thu, Jan 02, 2020 at 02:47:22PM +0000, Stefan Hajnoczi wrote:
> > On Sat, Dec 21, 2019 at 10:02:23AM +0100, Markus Armbruster wrote:
> > > Stefan Hajnoczi <address@hidden> writes:
>
> [...]
>
> > > > 2. scripts/qmp/ contains command-line tools for QMP communication.
> > > > They could use some polish and then be shipped.
> > >
> > > MAINTAINERS blames them on me, but they're effectively unmaintained.
> > > Prerequisite for shipping: having a maintainer who actually gives a
> > > damn.
> > ...
> > > * scripts/qmp/qmp-shell
> > >
> > > Half-hearted attempt at a human-friendly wrapper around the JSON
> > > syntax. I have no use for this myself.
> >
> > I think this one is used by people. John Snow comes to mind.
>
> FWIW I too frequently use 'qmp-shell'. And some of the examples in this
> document[1] are demonstrated with it.
>
> I'm reasonably happy with it (particularly the persistent history
> captured in ~/.qmp-shell_history), and it has some "known issues" that
> can trip up a new user. The one that immediately jumps to mind:
> asynchronous events won't be printed without a prompt from the user --
> e.g. after a `blockdev-commit`, you won't see BLOCK_JOB_{READY,
> COMPLETED} events printed unless you manually hit enter from the
> 'qmp-shell'.
>
> (Not complaining; I have a long-standing TODO to make time to
> investigate this.)
>
> [1] https://qemu.readthedocs.io/en/latest/interop/live-block-operations.html
John and I discussed async events in the past. qmp-shell currently uses
the input() built-in function. If we modify it with a
select(2)/poll(2)-style function that monitors both stdin and the QMP
socket then it could print QMP events as soon as they are received.
There might be a nicer way of doing it, but pseudo-code for the idea is:
def input_with_events(prompt):
while True:
print(prompt, end='', flush=True)
readable_files = select([sys.stdin, qmp_socket])
if qmp_socket in readable_files:
print_qmp_events()
# stdin is ready, read a line
return input()
Stefan
signature.asc
Description: PGP signature
Re: Making QEMU easier for management tools and applications, Dr. David Alan Gilbert, 2020/01/02
Re: Making QEMU easier for management tools and applications, Dr. David Alan Gilbert, 2020/01/02
Re: Making QEMU easier for management tools and applications, Kevin Wolf, 2020/01/07