[libvirt] [PATCH v4 1/2] Add VIR_TYPED_PARAM_STRING

Eric Blake eblake at redhat.com
Tue Oct 25 23:51:36 UTC 2011


On 10/25/2011 03:31 PM, Eric Blake wrote:
>> Here's what I'm squashing in:
>
> Good thing I haven't pushed yet - I just realized another problem.
>

> But on Get interfaces, like virDomainGetMemoryParamaters, params is an
> output-only interface; it can be uninitialized memory on entry, so we
> must not base our behavior on the client's contents. Rather, the typed
> parameter check has to either be done by each the callback (where we
> write each hypervisor driver to not output strings unless they first
> check flags), or can be factored into libvirt.c (hypervisors can blindly
> write back all parameters, then libvirt.c does a post-process pass that
> shrinks the array size to skip past all string entries).

Shoot, we have another problem.  The current Get interfaces are 
documented as returning 0 on success, rather than the number of 
successfully returned elements.  virDomainGetSchedulerParameters is 
hard-wired in the RPC protocol to not pass an array length, and we 
repeated that mistake in virDomainGetSchedulerParamatersFlags.  That 
means we _can't_ reduce *nparams by doing libvirt.c filtering of the 
results.  And if that is the case, then each hypervisor driver _has_ to 
do filtering manually, to return the right *nparams value in the first 
place - that is, if they ever want to pass back strings.

But virDomainGetBlkioParameters, virDomainGetMemoryParameters, and 
virDomainBlockStatsFlags could be "fixed" to return the number of 
elements populated, rather than 0.  Are we okay making that sort of API 
change?  I'll ask again when I post this as a v5.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list