From: Avi Kivity <avi@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Luiz Capitulino <lcapitulino@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 19/22] qapi: add QMP put-event command
Date: Thu, 10 Mar 2011 17:45:11 +0200 [thread overview]
Message-ID: <4D78F207.70306@redhat.com> (raw)
In-Reply-To: <4D78EF67.4060009@codemonkey.ws>
On 03/10/2011 05:33 PM, Anthony Liguori wrote:
>
> We pretty much need to keep the QEMU signature the same. That would
> mean an internal signature of:
>
> BlockIoErrorEvent *qmp_connect_block_io_error_event(Error **errp)
> {
> }
>
> So the marshal function would then need to do something like:
>
> void qmp_marshal_connect_block_io_error_event(QmpState *state, QDict
> *args, QObject **ret_data, Error **errp)
> {
> BlockIoErrorEvent *ev;
> QObject *tag = qdict_get_obj(args, "tag");
>
> ev = qmp_connect_block_io_error_event(errp);
> qmp_state_add_connection(state, ev->signal, tag);
> }
That can be mashed around however we like.
>
> That's not too bad, but would the schema be:
>
> [ 'connect-block-io-error-event', {}, 'BLOCK_IO_ERROR' ]
>
> Or would it be:
>
> [ 'connect-block-io-error-event', { 'tag': 'variant' }, 'none' ]
>
> I'm really opposed to adding a variant type to the schema. I'm also
> not a big fan of there not being a 1-1 relationship to the wire
> protocol and the C API.
>
> I think it's easy to rationalize 'this is how events are marshalled'
> vs. 'for events, a totally different declaration is generated'.
Under my latest proposal it wouldn't be in the schema at all (like
command tags are not in the schema) since it's a protocol-level entity.
>> I don't think it's an accurate description. We marshall an event as
>> a json object according to the schema above (BLOCK_IO_ERROR). How we
>> marshall a subscription to an event, or an unsubscription to an
>> event, depends on how we specify the protocol.
>
> It's not really a subscription to an event. It is an event.
No, the event happens (potentially) multiple times. Or zero. You don't
"get" the event, you ask qemu to notify you.
>
> Maybe signal accessor is the wrong word. Maybe signal factory conveys
> a better notion of what it is.
It's even more confusing to me.
>
>>>
>>> > { 'execute': 'get-block-io-error-event' }
>>> < { 'return' : 32 }
>>> ...
>>> < { 'event': 'BLOCK_IO_ERROR', 'data': { 'action': 'stop', 'device':
>>> 'ide0-hd0', 'operation': 'read' }, 'tag': 32 }
>>> ...
>>> > { 'execute': 'put-event', 'arguments': { 'tag': 32 } }
>>
>> Well, I may be biased, but I prefer my variant.
>>
>> btw, it's good to decree that a subscription is immediately followed
>> by an event with the current state (which means events have to
>> provide state and be idempotent); so the subscribe-and-query pattern
>> is provided automatically.
>
> Not all events are updates of data. BLOCK_IO_ERROR is a great example
> of this. There is no useful information that can be sent after a
> connection.
You could say the blockdev's state is fine, or it has encountered an error.
How do you detect if there's an error if you've crashed (you=client in
this case)?
>
>> btw2, I now nominate subscribe and unsubscribe as replacements for
>> get and put.
>
> Subscribe implies sub/pub in my mind and we're not publishing events
> so I don't think it fits the model.
>
> A pub/sub event model would be interesting to think through but
> without a global namespace and object model, I don't think we can make
> it fit well.
I feel we're still not communicating. What does 'get-*-event' mean?
I think you're using some nomenclature that is unfamiliar to me.
> That's why I'm using signal/slots. It's much more conducive to a
> procedural model.
I still don't follow. We have a connection, over which we ask the other
side to let us know when something happens, then that other side lets us
know when it happens, then we ask it to stop, then it stops. There are
no signals or slots anywhere. If there are in the code, let's not mix
it up with the protocol.
>> That makes a C centric wire protocol. Clients don't have to be C.
>
> But a C client is by far the most important of all clients--QEMU. If
> we use QMP extensively internally, then we guarantee that the API is
> expressive and robust.
No, internally we have the most scope to fix mistakes.
>
> If we build the API only for third-party clients, we end up with
> pretty much what we have today. An API with good intentions but
> that's more or less impossible to use in practice.
Or we have something that's nice for C but hard to use or inconsistent
with whatever language a management client is written in.
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2011-03-10 15:45 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-07 1:22 [Qemu-devel] [PATCH 00/22] QAPI Round 1 Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 01/22] Add hard build dependency on glib Anthony Liguori
2011-03-07 10:59 ` Daniel P. Berrange
2011-03-07 13:55 ` Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 02/22] qerror: expose a function to format an error Anthony Liguori
2011-03-07 11:14 ` Stefan Hajnoczi
2011-03-07 13:38 ` Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 03/22] qapi: add Error object Anthony Liguori
2011-03-07 11:06 ` Daniel P. Berrange
2011-03-07 13:59 ` Anthony Liguori
2011-03-07 14:24 ` Anthony Liguori
2011-03-07 11:38 ` Stefan Hajnoczi
2011-03-07 13:36 ` Anthony Liguori
2011-03-07 13:55 ` Stefan Hajnoczi
2011-03-07 1:22 ` [Qemu-devel] [PATCH 04/22] qerror: split out the reporting bits of QError Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 05/22] qerror: add new error message for invalid enum values Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 06/22] qapi: add JSON parsing error message Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 07/22] json: propagate error from parser Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 08/22] qapi: add code generator for qmp-types Anthony Liguori
2011-03-07 1:57 ` Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 09/22] qapi: add code generator for type marshallers Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 10/22] qapi: add core QMP server support Anthony Liguori
2011-03-07 13:09 ` Stefan Hajnoczi
2011-03-07 13:39 ` Anthony Liguori
2011-03-07 13:46 ` Daniel P. Berrange
2011-03-07 13:54 ` Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 11/22] qapi: add signal support to core QMP server Anthony Liguori
2011-03-07 13:21 ` Stefan Hajnoczi
2011-03-07 13:53 ` Anthony Liguori
2011-03-07 14:36 ` Stefan Hajnoczi
2011-03-07 14:41 ` Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 12/22] qapi: add QAPI module type Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 13/22] qapi: add code generators for QMP command marshaling Anthony Liguori
2011-03-07 13:27 ` Stefan Hajnoczi
2011-03-07 13:44 ` Anthony Liguori
2011-03-07 14:38 ` Stefan Hajnoczi
2011-03-07 1:22 ` [Qemu-devel] [PATCH 14/22] qapi: add query-version QMP command Anthony Liguori
2011-03-07 13:35 ` Stefan Hajnoczi
2011-03-07 13:41 ` Anthony Liguori
2011-03-09 13:28 ` Avi Kivity
2011-03-09 13:44 ` Anthony Liguori
2011-03-09 13:51 ` Avi Kivity
2011-03-09 14:13 ` Anthony Liguori
2011-03-09 13:36 ` Avi Kivity
2011-03-09 14:11 ` Anthony Liguori
2011-03-09 14:37 ` Avi Kivity
2011-03-09 14:47 ` Anthony Liguori
2011-03-10 12:41 ` Avi Kivity
2011-03-10 12:46 ` Avi Kivity
2011-03-10 13:52 ` Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 15/22] qapi: add new QMP server that uses CharDriverState Anthony Liguori
2011-03-07 13:52 ` Stefan Hajnoczi
2011-03-07 14:02 ` Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 16/22] vl: add a new -qmp2 option to expose experimental QMP server Anthony Liguori
2011-03-07 1:22 ` [Qemu-devel] [PATCH 17/22] qapi: add QMP quit command Anthony Liguori
2011-03-07 1:23 ` [Qemu-devel] [PATCH 18/22] qapi: add QMP qmp_capabilities command Anthony Liguori
2011-03-07 1:23 ` [Qemu-devel] [PATCH 19/22] qapi: add QMP put-event command Anthony Liguori
2011-03-09 13:31 ` Avi Kivity
2011-03-09 13:48 ` Anthony Liguori
2011-03-09 13:58 ` Avi Kivity
2011-03-09 14:26 ` Anthony Liguori
2011-03-10 12:39 ` Avi Kivity
2011-03-10 14:12 ` Anthony Liguori
2011-03-10 14:24 ` Avi Kivity
2011-03-10 15:30 ` Avi Kivity
2011-03-10 15:41 ` Anthony Liguori
2011-03-10 15:49 ` Avi Kivity
2011-03-10 16:42 ` Anthony Liguori
2011-03-12 20:37 ` Avi Kivity
2011-03-10 15:33 ` Anthony Liguori
2011-03-10 15:45 ` Avi Kivity [this message]
2011-03-10 16:04 ` Anthony Liguori
2011-03-12 20:42 ` Avi Kivity
2011-03-12 23:30 ` Anthony Liguori
2011-03-07 1:23 ` [Qemu-devel] [PATCH 20/22] qapi: add code generator for libqmp Anthony Liguori
2011-03-07 1:23 ` [Qemu-devel] [PATCH 21/22] qapi: add test-libqmp Anthony Liguori
2011-03-07 1:23 ` [Qemu-devel] [PATCH 22/22] qapi: generate HTML report for test-libqmp Anthony Liguori
2011-03-07 2:11 ` Anthony Liguori
2011-03-07 1:26 ` [Qemu-devel] [PATCH] qapi: qmp-types.c and qmp-types.h Anthony Liguori
2011-03-07 1:27 ` [Qemu-devel] [PATCH] qapi: qmp-marshal-types.c and qmp-marshal-types.h Anthony Liguori
2011-03-07 1:28 ` [Qemu-devel] [PATCH] qapi: add qmp-marshal.c and qmp.h Anthony Liguori
2011-03-07 1:29 ` [Qemu-devel] [PATCH] qapi: add libqmp.c and libqmp.h Anthony Liguori
2011-03-07 15:08 ` [Qemu-devel] [PATCH 00/22] QAPI Round 1 Stefan Hajnoczi
2011-03-07 15:59 ` Anthony Liguori
2011-03-08 11:12 ` Avi Kivity
2011-03-08 13:35 ` Anthony Liguori
2011-03-08 13:45 ` Avi Kivity
2011-03-08 13:54 ` Anthony Liguori
2011-03-08 14:00 ` Avi Kivity
2011-03-08 14:10 ` Anthony Liguori
2011-03-08 14:17 ` Avi Kivity
2011-03-08 14:20 ` Anthony Liguori
2011-03-08 14:38 ` Anthony Liguori
2011-03-08 14:52 ` Avi Kivity
2011-03-08 15:03 ` Anthony Liguori
2011-03-08 17:44 ` Avi Kivity
2011-03-08 19:19 ` Anthony Liguori
2011-03-09 8:51 ` Avi Kivity
2011-03-09 13:12 ` Anthony Liguori
2011-03-09 13:14 ` Avi Kivity
2011-03-09 13:51 ` Anthony Liguori
2011-03-09 13:55 ` Avi Kivity
2011-03-09 14:15 ` Anthony Liguori
2011-03-09 13:51 ` Michael Roth
2011-03-07 20:59 ` Anthony Liguori
2011-03-07 22:00 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D78F207.70306@redhat.com \
--to=avi@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=armbru@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).