From: Anthony Liguori <anthony@codemonkey.ws>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: qemu list <qemu-devel@nongnu.org>,
Markus Armbruster <armbru@redhat.com>,
agl@us.ibm.com, Amit Shah <amit.shah@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: [Qemu-devel] Re: Should QMP be RPC to internal C interfaces?
Date: Mon, 30 Aug 2010 11:26:55 -0500 [thread overview]
Message-ID: <4C7BDBCF.3090502@codemonkey.ws> (raw)
In-Reply-To: <20100830131602.2e846845@doriath>
On 08/30/2010 11:16 AM, Luiz Capitulino wrote:
> On Mon, 30 Aug 2010 10:38:45 -0500
> Anthony Liguori<anthony@codemonkey.ws> wrote:
>
>
>> On 08/30/2010 10:28 AM, Anthony Liguori wrote:
>>
>>> Having two interfaces guarantees failure. What's the separation
>>> between internal and external? Is qdev internal or external?
>>>
>> Let me put it another way, compatibility cannot be an after thought.
>>
>> We need to think deeply about compatibility when we design our
>> interfaces and we're going to have to redesign interfaces with
>> compatibility in mind. It's a hard problem but it's solvable. Just
>> defaulting arguments in QMP doesn't do anything to improve compatibility.
>>
> The point is: C compat sucks, QMP's doesn't. QMP will suck too if we direct
> map the two.
>
Prove it because I don't believe you :-)
Here's a counter example. Let's say we have function do_something that
takes three arguments. We add a forth additional argument and default
it. And old client can call with three arguments and it just works
because the default is "do what we used to do".
How do we discover if this new version of do_something supports four
arguments instead of three? Do we ignore unknown arguments? We can't
because that fourth argument may be important (but guess what, we do
today and that's busted). Because I might be passing "do something new"
as the fourth argument because I expressly didn't want the old behavior.
Okay, so now we have to add a mechanism to enumerate function names and
their arguments. Now I can detect the fourth argument. What if the
argument is a structure and we want to add a new field to the structure?
How do I know, as a client, that I can add another field to the
structure and that field will be respected?
You'd end up writing a full blown schema and then enforcing the schema.
As a client, you'd have to download the schema and then try to detect
the features a command supported. That's an absolutely awful compat
interface IMHO especially if you have different downstream schemas.
On the other hand, introducing a new function that takes a fourth
argument, or a new type of structure with an added argument simplifies
the problem tremendously. It means we might have four versions of the
same function but that's unavoidable. Flattening this for the client
makes their lives much simpler.
>> We cannot radically change our internal implementations and expect to
>> bridge it all in some special sauce code somewhere.
>>
>> This also suggests that we're going to have to practice deprecation to
>> evolve our APIs in a reasonable fashion.
>>
> Deprecation should be mostly used for bad defined commands, not for simple
> extensions.
>
It's better to talk about concrete things so please give an example of
how you can provide compatibility in QMP that you can't do in C and we
can discuss it.
My position is that we aren't any closer to having compatible APIs then
we were with the human monitor. I think we need to focus on
compatibility and that that has to be solved as the QEMU interface
level. I contend that it's not solvable at the QMP level.
Regards,
Anthony Liguori
Regards,
Anthony Liguori
next prev parent reply other threads:[~2010-08-30 16:27 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-27 5:27 [Qemu-devel] [PATCH v3 0/3] virtio-balloon: Don't wait indefinitely for guest response Amit Shah
2010-08-27 5:27 ` [Qemu-devel] [PATCH v3 1/3] balloon: Don't try fetching info if guest is unresponsive Amit Shah
2010-08-27 5:27 ` [Qemu-devel] [PATCH v3 2/3] qerror: Add a new MACHINE_STOPPED error message Amit Shah
2010-08-27 9:29 ` [Qemu-devel] " Daniel P. Berrange
2010-08-27 12:39 ` Anthony Liguori
2010-08-27 12:58 ` Daniel P. Berrange
2010-08-27 13:59 ` Markus Armbruster
2010-08-27 14:15 ` Luiz Capitulino
2010-08-27 14:59 ` Anthony Liguori
2010-08-27 15:33 ` Daniel P. Berrange
2010-08-27 15:45 ` Anthony Liguori
2010-08-27 16:08 ` Luiz Capitulino
2010-08-27 19:02 ` Anthony Liguori
2010-08-27 19:24 ` Luiz Capitulino
2010-08-27 19:37 ` Anthony Liguori
2010-08-27 20:58 ` Luiz Capitulino
2010-08-30 14:52 ` Should QMP be RPC to internal C interfaces? (was: [Qemu-devel] Re: [PATCH v3 2/3] qerror: Add a new MACHINE_STOPPED error message) Markus Armbruster
2010-08-30 15:28 ` [Qemu-devel] Re: Should QMP be RPC to internal C interfaces? Anthony Liguori
2010-08-30 15:38 ` Anthony Liguori
2010-08-30 16:16 ` Luiz Capitulino
2010-08-30 16:26 ` Anthony Liguori [this message]
2010-08-31 12:48 ` Markus Armbruster
2010-08-31 12:58 ` Luiz Capitulino
2010-08-31 13:05 ` Anthony Liguori
2010-08-31 8:47 ` Markus Armbruster
2010-08-31 13:03 ` Anthony Liguori
2010-08-28 0:52 ` [Qemu-devel] Re: [PATCH v3 2/3] qerror: Add a new MACHINE_STOPPED error message Amit Shah
2010-08-30 8:30 ` Markus Armbruster
2010-08-30 13:06 ` Anthony Liguori
2010-08-30 15:01 ` Markus Armbruster
2010-08-30 19:17 ` [Qemu-devel] [PATCH] Disable virtio-balloon memory stats interface Adam Litke
2010-08-31 3:42 ` [Qemu-devel] " Amit Shah
2010-09-08 10:57 ` Amit Shah
2010-08-27 5:27 ` [Qemu-devel] [PATCH v3 3/3] balloon: Don't try fetching info if machine is stopped Amit Shah
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=4C7BDBCF.3090502@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=agl@us.ibm.com \
--cc=amit.shah@redhat.com \
--cc=armbru@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=pbonzini@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).