qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] QMP: Spec: Private Extensions support
Date: Thu, 18 Feb 2010 15:54:04 -0600	[thread overview]
Message-ID: <4B7DB6FC.7040900@codemonkey.ws> (raw)
In-Reply-To: <20100218182458.07c3be6c@redhat.com>

On 02/18/2010 02:24 PM, Luiz Capitulino wrote:
> Vendors might want to add their own extensions to QMP, as JSON itself
> (and several other protocols) allow this someway, I think QMP should
> allow too.
>
> We just have to choose a naming convention that is guaranteed not to
> clash with any future new commands, arguments, parameters and event
> names.
>
> Signed-off-by: Luiz Capitulino<lcapitulino@redhat.com>
> ---
>   QMP/qmp-spec.txt |   23 +++++++++++++++++++++++
>   1 files changed, 23 insertions(+), 0 deletions(-)
>
> diff --git a/QMP/qmp-spec.txt b/QMP/qmp-spec.txt
> index f3c0327..bc92c7e 100644
> --- a/QMP/qmp-spec.txt
> +++ b/QMP/qmp-spec.txt
> @@ -215,3 +215,26 @@ Additionally, Clients must not assume any particular:
>   - Order of json-object members or json-array elements
>   - Amount of errors generated by a command, that is, new errors can be added
>     to any existing command in newer versions of the Server
> +
> +6 Private Extensions
> +--------------------
> +
> +QMP provides a special naming convention to allow the creation of independent
> +namespaces, which allows vendors to introduce private extensions to the
> +protocol. It is guaranteed that no future QMP version will expose any name
> +that follows this convention.
> +
> +Private extensions must be in the following format:
> +
> +v_NAMESPACE__NAME
> +
> + Where,
> +
> +- NAME is any argument, command, event or parameter name
> +- NAMESPACE is the namespace that NAME belongs to
> +
> +For example, the following command:
> +
> +v_ABC__insert
> +
> +Is called 'insert' and is part of the 'ABC' namespace.
>    

We need a bit more than just this.  Here's my suggestion:

6. Downstream modification of QMP
-----------------------------------------------------------

We strongly recommend that downstream consumers of QEMU do _not_
modify the behaviour of any QMP command or introduce new QMP commands.
This is important to allow management tools to support both upstream and
downstream versions of QMP without special logic.

However, we recognize that it is sometimes impossible for downstreams to
avoid modifying QMP.  If this happens, the following rules should be 
observed
to attempt to preserve long term compatibility and interoperability.

1) Only introduce new commands.  If you want to change an existing command,
leave the old command in place and introduce a new one with the new 
behaviour.

2) Only introduce new asynchronous messages.  Do not change an existing 
message.

3) Only introduce new error types and only use those error types in new 
commands.
New commands can use existing error types, but you should never add a 
new error type
to an existing command.

4) Do not introduce any new capabilities.  Capabilities directly affect 
a client's ability to
parse the protocol correctly and new capabilities can not be supported 
in an upstream
compatible way.  Please work capabilities through upstream first.

5) QMP names will never begin with '__' (double underscore).  When 
introducing new
commands, asynchronous events, or error messages, a downstream must 
prefix those
names with a '__' to ensure future compatibility with upstream.

6) To ensure compatibility with other downstreams, it is strongly 
recommended that
you prefix the commands with '__RFQDN_' where RFQDN is a valid, reverse 
fully
qualified domain name which you control.  For example, a qemu-kvm 
specific monitor
command would be:

  (qemu) __org.linux-kvm_enable_irqchip

7) Do not change the QMP banner.  QMP supports introspection which will 
allow a
management tool to differentiate between a downstream QMP session and an
upstream QMP session.

Regards,

Anthony Liguori

  reply	other threads:[~2010-02-18 21:54 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-18 20:24 [Qemu-devel] [PATCH] QMP: Spec: Private Extensions support Luiz Capitulino
2010-02-18 21:54 ` Anthony Liguori [this message]
2010-02-19 12:04   ` Luiz Capitulino
2010-02-19 13:04   ` Markus Armbruster
2010-02-19 14:01     ` Anthony Liguori
2010-02-22 13:06       ` Markus Armbruster
2010-03-05 19:00   ` Markus Armbruster
2010-03-18 12:36     ` Luiz Capitulino
2010-05-06 15:52     ` Markus Armbruster
2010-05-06 17:49       ` Anthony Liguori
2010-05-07  9:49         ` [Qemu-devel] [PATCH] QMP: Add "Downstream extension of QMP" to spec Markus Armbruster
2010-05-07 19:54           ` [Qemu-devel] " Luiz Capitulino
2010-05-10  7:16             ` [Qemu-devel] [PATCH v2] " Markus Armbruster
2010-05-11 20:01               ` [Qemu-devel] " Luiz Capitulino

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=4B7DB6FC.7040900@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --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).