On 04/29/2014 05:24 AM, Kevin Wolf wrote:
> Am 29.04.2014 um 11:44 hat Fam Zheng geschrieben:
>> In command definition, 'defaults' is now parsed as a dict of default
>> values. Only optional parameters will have effect in generated code.
>>
>> 'str' and 'int' are supported. In generated code, 'str' will be
>> converted to g_strdup'ed string pointer, 'int' will be identically
>> assigned.
>>

>>   { 'command': 'my-command',
>> -   'data': { 'arg1': 'str', '*arg2': 'str' },
>> +   'data': { 'arg1': 'str', '*arg2': 'str', '*arg3': 'int' },
>> +   'defaults': { 'arg2': 'default value for arg2', 'arg3': 12345 },
>>     'returns': 'str' }
> 
> I think we should document what effect setting a default has for the
> code generation, and that it can be left out even for optional arguments
> (because your example sets it for every optional member).

That includes documenting that omitting a defaults entry for an optional
parameter will now guarantee 0-initialization of that member.

> Also, for the actual qmp_foo() handler, I would very much prefer if it
> didn't get a has_foo argument which is meaningless because it is always
> true. Instead, the has_foo argument shouldn't even be generated in the
> first place if the schema has a default for foo.

Yes, that's a nice idea - anywhere we have a qapi-documented default, we
can simplify the code to take advantage of the default.  It's backward
compatible since none of the existing code has any contract on defaults.

Also, is the default value allowed to change between qemu versions?
What are the back-compat ramifications if two different releases want to
tweak an omitted variable to different defaults?  The documentation
should mention the rule of thumb that we plan on enforcing during
reviews.  I could go either way: the wire format is unimpacted by what
default value is used when an argument is omitted, and management can
always explicitly specify a parameter if they don't trust the default;
on the other hand, if changing a default changes visible behavior, then
we have not maintained ABI compatibility.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to