From: Kevin Wolf <kwolf@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Markus Armbruster <armbru@redhat.com>,
Avi Kivity <avi@redhat.com>, Adam Litke <agl@us.ibm.com>,
qemu-devel@nongnu.org, Luiz Capitulino <lcapitulino@redhat.com>
Subject: Re: [Qemu-devel] Re: [PATCH 00/15] QAPI Round 1 (core code generator) (v2)
Date: Thu, 17 Mar 2011 15:04:27 +0100 [thread overview]
Message-ID: <4D8214EB.1060303@redhat.com> (raw)
In-Reply-To: <4D820C8D.1040205@codemonkey.ws>
Am 17.03.2011 14:28, schrieb Anthony Liguori:
> On 03/17/2011 08:15 AM, Kevin Wolf wrote:
>> Am 17.03.2011 13:46, schrieb Anthony Liguori:
>>> On 03/17/2011 07:21 AM, Kevin Wolf wrote:
>>>>>> Another detail is that, event extension is more important than command
>>>>>> extension, because it's probably going to happen. I think it would be very
>>>>>> bad to add new events just because we wanted to add a new field.
>>>>> The way this is typically handled is that signals tend to pass
>>>>> structures instead of lots of fields. For instance, most of the GDK
>>>>> events just pass a structure for the event (like GdkButtonEvent).
>>>> Can we do that with existing events or would we break the external
>>>> interface because we'd have to nest everything one level deeper?
>>> We have to introduce new versions of existing events anyway so we can
>>> make sure to nest the structures appropriately. I think BLOCK_IO_ERROR
>>> is the only one that isn't doing this today FWIW.
>> But then we must always send both events in order to maintain
>> compatibility, right? That sucks.
>
> No, it's more complicated than that unfortunately. The old events are
> "broadcast events". The new event/signal model requires explicit
> registration. There is a capabilities negotiation feature that let's us
> disable broadcast events.
>
> So from the wire perspective, a newer client will never see/care about
> broadcast events.
Right, it can disable them (i.e. some events are registered by default
and there's a command/capability that unregisters all events). But
what's the problem if the client re-enables one of these events by
registering for it?
Adding new events means that we need to have code to generate (that's
what I meant when I said "send") both events for a single action.
Especially if we happen to do it again in the future, this is going to
get really ugly.
>> If I understand right, the problem with the current events isn't even on
>> the protocol level, which would be visible externally,
>
> No, the problem with the old events is that they aren't
> registered/maskable. So even if you don't care about BLOCK_IO_ERROR,
> you're getting the notification. Plus, we'd like to add the ability to
> add a tag to events when we register them.
What's the problem with registering them? If you want to stop client
from doing this you must introduce a special case for obsolete events
that cannot be registered. Do we gain anything from this?
> The other problem is that events are all global today. BLOCK_IO_ERROR
> is a good example of this. It's really an error that's specific to a
> block device and it passes the name of the block device that it's
> specific to as an argument. But if we have a masking mechanism it could
> only globally enable/disable BLOCK_IO_ERROR for all devices.
>
> It would be much nicer to be able to enable the event for specific block
> devices. This requires some protocol visible changes. I'm still
> writing up these changes but hope to have something for review soon.
I wonder if the old, more generic event couldn't be generated
automatically if the more specific signal is triggered in the block code.
>> but just that it
>> doesn't map to the C interface in the way you like.
>
> I think I've maybe been using "C interface" to much. The current event
> wire protocol doesn't map to any client interface well.
If you mean their broadcast style, that's not really related to nesting
or struct vs. argument.
Kevin
next prev parent reply other threads:[~2011-03-17 14:02 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-11 23:05 [Qemu-devel] [PATCH 00/15] QAPI Round 1 (core code generator) (v2) Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 01/15] qapi: add code generator for qmp-types (v2) Anthony Liguori
2011-03-11 23:12 ` [Qemu-devel] " Anthony Liguori
2011-03-12 11:29 ` [Qemu-devel] " Blue Swirl
2011-03-12 15:00 ` Anthony Liguori
2011-03-18 14:18 ` Luiz Capitulino
2011-03-18 14:14 ` [Qemu-devel] " Luiz Capitulino
2011-03-11 23:05 ` [Qemu-devel] [PATCH 02/15] qapi: add code generator for type marshallers Anthony Liguori
2011-03-18 15:13 ` [Qemu-devel] " Luiz Capitulino
2011-03-11 23:05 ` [Qemu-devel] [PATCH 03/15] qapi: add core QMP server support (v2) Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 04/15] qapi: add signal support to core QMP server Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 05/15] qapi: add QAPI module type Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 06/15] qapi: add code generators for QMP command marshaling Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 07/15] qapi: add query-version QMP command Anthony Liguori
2011-03-12 11:19 ` Blue Swirl
2011-03-12 15:06 ` Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 08/15] qapi: add new QMP server that uses CharDriverState (v2) Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 09/15] vl: add a new -qmp2 option to expose experimental QMP server Anthony Liguori
2011-03-11 23:14 ` [Qemu-devel] " Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 10/15] qapi: add QMP quit command Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 11/15] qapi: add QMP qmp_capabilities command Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 12/15] qapi: add QMP put-event command Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 13/15] qapi: add code generator for libqmp (v2) Anthony Liguori
2011-03-12 11:10 ` Blue Swirl
2011-03-12 14:53 ` Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 14/15] qapi: add test-libqmp Anthony Liguori
2011-03-12 11:23 ` Blue Swirl
2011-03-12 14:59 ` Anthony Liguori
2011-03-11 23:05 ` [Qemu-devel] [PATCH 15/15] qapi: generate HTML report for test-libqmp Anthony Liguori
2011-03-16 14:34 ` [Qemu-devel] Re: [PATCH 00/15] QAPI Round 1 (core code generator) (v2) Luiz Capitulino
2011-03-16 14:49 ` Paolo Bonzini
2011-03-16 15:00 ` Luiz Capitulino
2011-03-16 16:06 ` Anthony Liguori
2011-03-16 16:03 ` Anthony Liguori
2011-03-16 16:31 ` Paolo Bonzini
2011-03-16 18:06 ` Anthony Liguori
2011-03-16 15:59 ` Anthony Liguori
2011-03-16 18:09 ` Luiz Capitulino
2011-03-16 18:32 ` Anthony Liguori
2011-03-16 19:27 ` Luiz Capitulino
2011-03-16 20:00 ` Anthony Liguori
2011-03-18 14:10 ` Luiz Capitulino
2011-03-18 14:22 ` Anthony Liguori
2011-03-17 12:21 ` Kevin Wolf
2011-03-17 12:46 ` Anthony Liguori
2011-03-17 13:15 ` Kevin Wolf
2011-03-17 13:28 ` Anthony Liguori
2011-03-17 14:04 ` Kevin Wolf [this message]
2011-03-17 15:49 ` Anthony Liguori
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=4D8214EB.1060303@redhat.com \
--to=kwolf@redhat.com \
--cc=agl@us.ibm.com \
--cc=anthony@codemonkey.ws \
--cc=armbru@redhat.com \
--cc=avi@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).