All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: marcandre.lureau@redhat.com, qemu-devel@nongnu.org,
	mdroth@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH v2 13/16] docs/devel/qapi-code-gen: Rewrite compatibility considerations
Date: Fri, 13 Sep 2019 17:05:03 +0200	[thread overview]
Message-ID: <87tv9g8cf4.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <60b61f7c-fe08-e78b-dd52-775959af99d9@redhat.com> (Eric Blake's message of "Tue, 10 Sep 2019 11:42:33 -0500")

Eric Blake <eblake@redhat.com> writes:

> On 9/10/19 1:37 AM, Markus Armbruster wrote:
>> We have some compatibility advice buried in sections "Enumeration
>> types" and "Struct types".  Compatibility is actually about commands
>> and events.  It devolves to the types used there.  All kinds of types,
>> not just enumerations and structs.
>> 
>> Replace the existing advice by a new section "Compatibility
>> considerations".
>> 
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>>  docs/devel/qapi-code-gen.txt | 95 +++++++++++++++++++++++-------------
>>  1 file changed, 60 insertions(+), 35 deletions(-)
>> 
>
>> +== Compatibility considerations ==
>> +
>> +Maintaining backward compatibility at the Client JSON Protocol level
>> +while evolving the schema requires some care.  This section is about
>> +syntactic compatibility.  Necessary, but not sufficient for actual
>> +compatibility.
>
> This last sentence no verb.  Maybe:
>
> s/compatibility.  Necessary/compatibility, which is necessary/
> s/sufficient/sufficient,/

Sold.

>> +
>> +Clients send commands with argument data, and receive command
>> +responses with return data and events with event data.
>> +
>> +Adding opt-in functionality to the send direction is backwards
>> +compatible: adding commands, optional arguments, enumeration values,
>> +union and alternate branches; turning an argument type into an
>> +alternate of that type; making mandatory arguments optional.  Clients
>> +oblivious of the new functionality continue to work.
>> +
>> +Incompatible changes include removing commands, command arguments,
>> +enumeration values, union and alternate branches, adding mandatory
>> +command arguments, and making optional arguments mandatory.
>> +
>> +The specified behavior of an absent optional argument should remain
>> +the same.  With proper documentation, this policy still allows some
>> +flexibility; for example, when an optional 'buffer-size' argument is
>> +specified to default to a sensible buffer size, the actual default
>> +value can still be changed.  The specified default behavior is not the
>> +exact size of the buffer, only that the default size is sensible.
>> +
>> +Adding functionality to the receive direction is generally backwards
>> +compatible: adding events, adding return and event data members.
>> +Clients are expected to ignore the ones they don't know.
>> +
>> +Removing "unreachable" stuff like events that can't be triggered
>> +anymore, optional return or event data members that can't be sent
>> +anymore, and return or event data member (enumeration) values that
>> +can't be sent anymore makes no difference to clients, except for
>> +introspection.  The latter can conceivably confuse clients, so tread
>> +carefully.
>> +
>> +Incompatible changes include removing return and event data members.
>> +
>> +Any change to a command definition's 'data' or one of the types used
>> +there (recursively) needs to consider send direction compatibility.
>> +
>> +Any change to a command definition's 'return', an event definition's
>> +'data', or one of the types used there (recursively) needs to consider
>> +receive direction compatibility.
>> +
>> +Any change to types used in both contexts need to consider both.
>> +
>> +Members of enumeration types, complex types and alternate types may be
>> +reordered freely.  For enumerations and alternate types, this doesn't
>> +affect the wire encoding.  For complex types, this might make the
>> +implementation emit JSON object members in a different order, which
>> +the Client JSON Protocol permits.
>
> Worth mentioning that type names themselves are NOT part of the
> interface, and may be freely renamed?

Care to suggest a suitable sentence?

> Reviewed-by: Eric Blake <eblake@redhat.com>

Thanks!


  reply	other threads:[~2019-09-13 15:05 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-10  6:37 [Qemu-devel] [PATCH v2 00/16] qapi: Schema language cleanups & doc improvements Markus Armbruster
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 01/16] scripts/git.orderfile: Match QAPI schema more precisely Markus Armbruster
2019-09-10  6:56   ` Philippe Mathieu-Daudé
2019-09-10 13:41   ` Eric Blake
2019-09-13 14:14     ` Markus Armbruster
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 02/16] qapi: Drop check_type()'s redundant parameter @allow_optional Markus Armbruster
2019-09-10 13:45   ` Eric Blake
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 03/16] qapi: Drop support for boxed alternate arguments Markus Armbruster
2019-09-10 14:54   ` Eric Blake
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 04/16] docs/devel/qapi-code-gen: Minor specification fixes Markus Armbruster
2019-09-10 15:10   ` Eric Blake
2019-09-13 14:23     ` Markus Armbruster
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 05/16] tests/qapi-schema: Demonstrate bad reporting of funny characters Markus Armbruster
2019-09-10 15:12   ` Eric Blake
2019-09-13 14:24     ` Markus Armbruster
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 06/16] qapi: Restrict strings to printable ASCII Markus Armbruster
2019-09-10 15:22   ` Eric Blake
2019-09-13 14:28     ` Markus Armbruster
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 07/16] qapi: Drop support for escape sequences other than \\ Markus Armbruster
2019-09-10 15:28   ` Eric Blake
2019-09-13 14:38     ` Markus Armbruster
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 08/16] qapi: Permit 'boxed' with empty type Markus Armbruster
2019-09-10 16:28   ` Eric Blake
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 09/16] qapi: Permit alternates with just one branch Markus Armbruster
2019-09-10 16:30   ` Eric Blake
2019-09-13 14:47     ` Markus Armbruster
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 10/16] qapi: Permit omitting all flat union branches Markus Armbruster
2019-09-10 16:32   ` Eric Blake
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 11/16] qapi: Adjust frontend errors to say enum value, not member Markus Armbruster
2019-09-10 16:33   ` Eric Blake
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 12/16] docs/devel/qapi-code-gen: Reorder sections for readability Markus Armbruster
2019-09-10 16:36   ` Eric Blake
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 13/16] docs/devel/qapi-code-gen: Rewrite compatibility considerations Markus Armbruster
2019-09-10 16:42   ` Eric Blake
2019-09-13 15:05     ` Markus Armbruster [this message]
2019-09-17 16:11       ` Eric Blake
2019-09-23 11:44         ` Markus Armbruster
2019-09-23 13:00           ` Eric Blake
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 14/16] docs/devel/qapi-code-gen: Rewrite introduction to schema Markus Armbruster
2019-09-10 16:50   ` Eric Blake
2019-09-13 15:16     ` Markus Armbruster
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 15/16] docs/devel/qapi-code-gen: Improve QAPI schema language doc Markus Armbruster
2019-09-10 17:37   ` Eric Blake
2019-09-13 15:39     ` Markus Armbruster
2019-09-17 16:14       ` Eric Blake
2019-09-23 11:45         ` Markus Armbruster
2019-09-10  6:37 ` [Qemu-devel] [PATCH v2 16/16] qapi: Tweak code to match docs/devel/qapi-code-gen.txt Markus Armbruster
2019-09-10 17:45   ` Eric Blake
2019-09-10  7:09 ` [Qemu-devel] [PATCH v2 00/16] qapi: Schema language cleanups & doc improvements no-reply
2019-09-10 22:32 ` no-reply

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=87tv9g8cf4.fsf@dusky.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=eblake@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mdroth@linux.vnet.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.