On 05/11/2011 06:16 PM, Stefan Berger wrote:
On 05/11/2011 06:32 PM, Eric Blake wrote:
> The public API has no flags argument, so neither should the internal
> callback API. This simplifies the RPC generator.
>
>
> static virNWFilterPtr
> nwfilterDefine(virConnectPtr conn,
> - const char *xml,
> - unsigned int flags ATTRIBUTE_UNUSED) {
> + const char *xml)
> +{
> virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData;
> virNWFilterDefPtr def;
> virNWFilterObjPtr nwfilter = NULL;
I assume this causes not interoperability problems between libvirt
versions. I initially introduced the flag because other define functions
had it also and thought I'd leave the option of having flags open.
For a single libvirt binary, there are no issues (the driver code is
linked privately, and we are allowed to change the API of anything in
libvirt_private.syms without impact to public interfaces). And between
libvirt binaries, we have the fortunate situation that the over-the-wire
protocol didn't pass a flags argument. Thus, when calling the API, you
had this scenario:
virNWFilterDefineXML(no flags) -> remote callback(0 flag) -> RPC
over-wire format (no flags) -> virNWFilterDefineXML(no flags) ->
nwfilter callback (0 flag)
Removing the flag argument means that every step along the path has the
same number of arguments, all without having to invent or ignore a 0
flag argument, and without any externally visible changes. And when
mixing an older server with a newer client, or a newer client with an
older server, then the older side will still be passing and ignoring an
extra argument internally, with no change in behavior.
Meanwhile, the only way to use a flags argument is to introduce a new
API; if and when we introduce a new virNWFilterDefineXMLFlags(), we will
also introduce a new RPC call that also preserves that flags argument
over the wire. Whether we then change the driver.h callback to re-add a
flags argument at that time, and share the callback between both APIs,
or whether we have two driver.h callbacks, is a choice we can make at
that time.
ACK
Thanks; I've gone ahead and pushed this (I wrote it on top of Matthias'
generator whitelist patch, and had worried that it might not rebase
well, but thankfully it worked without a hitch).
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org