qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Victor Toso <victortoso@redhat.com>
Cc: qemu-devel@nongnu.org,  Eric Blake <eblake@redhat.com>,
	 John Snow <jsnow@redhat.com>,
	 Michael Roth <michael.roth@amd.com>,
	 Kevin Wolf <kwolf@redhat.com>
Subject: Re: [PATCH v1 12/16] qapi: fix example of blockdev-add command
Date: Wed, 31 Aug 2022 16:53:49 +0200	[thread overview]
Message-ID: <87y1v45urm.fsf@pond.sub.org> (raw)
In-Reply-To: <20220831134725.j7lsf7nzt2tc3glr@tapioca> (Victor Toso's message of "Wed, 31 Aug 2022 15:47:25 +0200")

Victor Toso <victortoso@redhat.com> writes:

> Hi,
>
> On Wed, Aug 31, 2022 at 03:16:54PM +0200, Markus Armbruster wrote:
>> Cc: Kevin for an improved chance of getting any nonsense I might write
>> corrected.
>>
>> Victor Toso <victortoso@redhat.com> writes:
>>
>> > Hi,
>> >
>> > On Wed, Aug 31, 2022 at 01:40:50PM +0200, Markus Armbruster wrote:
>> >> Victor Toso <victortoso@redhat.com> writes:
>> >>
>> >> > The example output is setting optional member "backing" with null.
>> >> > This has no runtime impact. Remove it.
>> >> >
>> >> > Problem was noticed when using the example as a test case for Go
>> >> > bindings.
>> >>
>> >> "Fix example" and "problem" implies there's something wrong.
>> >> "No runtime impact" sounds like it's redundant, but not wrong.
>> >> Wrong or not wrong?
>> >
>> > I take your comment is more about the wording which is confusing.
>> >
>> > Would it be better if I change to:
>> > '''
>> >    The example output is setting optional member "backing" with
>> >    null. While this has no runtime impact, setting optional
>> >    members with empty value should not be encouraged. Remove it.
>> > '''
>> >
>> > While I think the above is true, my main reason for proposing
>> > this change is to re-use the example as a test case, but I'm not
>> > sure if adding anything related to it would make it better (only
>> > more confusing!).
>> 
>> I had a closer look at the schema.
>> 
>> The definition of backing is
>> 
>>     ##
>>     # @BlockdevOptionsGenericCOWFormat:
>>     #
>>     # Driver specific block device options for image format that have no option
>>     # besides their data source and an optional backing file.
>>     #
>>     # @backing: reference to or definition of the backing file block
>>     #           device, null disables the backing file entirely.
>>     #           Defaults to the backing file stored the image file.
>>     #
>>     # Since: 2.9
>>     ##
>>     { 'struct': 'BlockdevOptionsGenericCOWFormat',
>>       'base': 'BlockdevOptionsGenericFormat',
>>       'data': { '*backing': 'BlockdevRefOrNull' } }
>> 
>> Meaning, if I remember correctly (with some help from commit
>> c42e8742f52's message):
>> 
>> 1. Present @backing
>> 
>> 1.a. of type 'str' means use the existing block device with this ID as
>>      backing image
>> 
>> 1.b. of type 'BlockdevOptions' means use the new block device defined by
>>      it as backing image
>> 
>> 1.c. that is null means use no backing image
>>
>> 2. Absent @backing means default to the backing file named in the COW
>>    image.
>
> Over the wire, how you get the difference between 1.c and 2? Are
> you saying that for optional member "backing" we should be
> explicit sending null over the wire?

In the QAPI schema language, absent optional members do not default to
any specific value.  Or in other words, "absent" is distinct from
"present with value V" for any value V.

Now, the *semantics* of "absent" are often identical to some default
value.  Documentation should then say something like (default:
DEFAULT-VALUE).

In this particular instance, it isn't: "absent" means something else
than any possible value.

Aside: no, I don't like this part of the QAPI schema language design
either.  "Absent defaults to DEFAULT-VALUE" is easier to explain and
understand.

Back to your question: to get 1.c., you pass a member "backing": null on
the wire, and to get 2., you pass no "backing" member.

>> Therefore, ...
>>
>> >
>> > Cheers,
>> > Victor
>> >
>> >> > Signed-off-by: Victor Toso <victortoso@redhat.com>
>> >> > ---
>> >> >  qapi/block-core.json | 4 +---
>> >> >  1 file changed, 1 insertion(+), 3 deletions(-)
>> >> >
>> >> > diff --git a/qapi/block-core.json b/qapi/block-core.json
>> >> > index dcc6d41494..302164d575 100644
>> >> > --- a/qapi/block-core.json
>> >> > +++ b/qapi/block-core.json
>> >> > @@ -1542,9 +1542,7 @@
>> >> >  #      "arguments": { "driver": "qcow2",
>> >> >  #                     "node-name": "node1534",
>> >> >  #                     "data-file": { "driver": "file",
>> >> > -#                                    "filename": "hd1.qcow2" },
>> >> > -#                     "backing": null } }
>> >> > -#
>> >> > +#                                    "filename": "hd1.qcow2" } } }
>> >> >  # <- { "return": {} }
>> >> >  #
>> >> >  # -> { "execute": "blockdev-snapshot",
>> >>
>>
>> ... your patch changes the example from 1.c. to 2.  Which is probably
>> not what you intended.
>
> Yep, you are correct but not just with my patch. It is confusing
> that an optional member must be set to JSON Null over the wire..
> I'll need to think a bit more on this.
>
> Many many thanks for your review. Really appreciate it.

You're welcome!



  reply	other threads:[~2022-08-31 14:57 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-30 16:15 [PATCH v1 00/16] qapi examples fixes and rfc for another generator Victor Toso
2022-08-30 16:15 ` [PATCH v1 01/16] qapi: fix example of query-ballon command Victor Toso
2022-08-30 16:15 ` [PATCH v1 02/16] qapi: fix example of query-vnc command Victor Toso
2022-08-30 16:15 ` [PATCH v1 03/16] qapi: fix example of query-spice command Victor Toso
2022-08-31 11:50   ` Markus Armbruster
2022-08-31 12:55     ` Victor Toso
2022-08-31 13:22       ` Markus Armbruster
2022-09-01 14:08         ` Gerd Hoffmann
2022-08-30 16:15 ` [PATCH v1 04/16] qapi: fix example of query-rocker-of-dpa-flows command Victor Toso
2022-08-31 11:51   ` Markus Armbruster
2022-08-30 16:15 ` [PATCH v1 05/16] qapi: fix example of query-dump-guest-memory-capability command Victor Toso
2022-08-30 16:15 ` [PATCH v1 06/16] qapi: fix example of query-blockstats command Victor Toso
2022-08-30 16:15 ` [PATCH v1 07/16] qapi: fix example of BLOCK_JOB_READY event Victor Toso
2022-08-30 16:15 ` [PATCH v1 08/16] qapi: fix example of NIC_RX_FILTER_CHANGED event Victor Toso
2022-08-31 11:37   ` Markus Armbruster
2022-08-30 16:15 ` [PATCH v1 09/16] qapi: fix example of DEVICE_UNPLUG_GUEST_ERROR event Victor Toso
2022-08-30 16:15 ` [PATCH v1 10/16] qapi: fix example of MEM_UNPLUG_ERROR event Victor Toso
2022-08-30 16:15 ` [PATCH v1 11/16] qapi: fix examples of blockdev-add with qcow2 Victor Toso
2022-08-30 16:15 ` [PATCH v1 12/16] qapi: fix example of blockdev-add command Victor Toso
2022-08-31 11:40   ` Markus Armbruster
2022-08-31 12:45     ` Victor Toso
2022-08-31 13:16       ` Markus Armbruster
2022-08-31 13:47         ` Victor Toso
2022-08-31 14:53           ` Markus Armbruster [this message]
2022-09-01  7:56             ` Victor Toso
2022-09-01 11:13               ` Markus Armbruster
2022-09-02  8:02                 ` Victor Toso
2022-08-30 16:15 ` [PATCH v1 13/16] qapi: fix example of query-hotpluggable-cpus command Victor Toso
2022-08-30 16:15 ` [PATCH v1 14/16] qapi: fix example of query-migrate command Victor Toso
2022-08-31 11:52   ` Markus Armbruster
2022-08-30 16:15 ` [PATCH v1 15/16] qapi: fix examples of events missing timestamp Victor Toso
2022-08-30 16:15 ` [PATCH v1 16/16] RFC: add a generator for qapi's examples Victor Toso
2022-08-31 12:01   ` Markus Armbruster
2022-08-31 13:32     ` Victor Toso
2022-08-31 14:57       ` Markus Armbruster
2022-09-01  8:37         ` Victor Toso

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=87y1v45urm.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=eblake@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=qemu-devel@nongnu.org \
    --cc=victortoso@redhat.com \
    /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).