On Fri, Feb 06, 2009 at 11:13:37AM -0500, John Levon wrote:
On Fri, Feb 06, 2009 at 11:09:31AM +0000, Daniel P. Berrange wrote:
> On Fri, Feb 06, 2009 at 09:53:04AM +0000, Gihan Munasinghe wrote:
> > Is there a specific reason for not having a "free_memory" with in the
> > "virNodeInfo" structure.
>
> All public structures are part of the public ABI and channot
> be changed once added. virNodeInfo existed long before the
> free memory API came about, hence its not present there.
Can I get a clarification about adding to the end of such structures?
Often APIs do this with an explicit warning not to embed structures,
take sizeof() etc. The other usual choice is to make the structure
really opaque and provide accessors behind functions.
We've used a mix of techniques - the virDomain/Network/Storage structs
are all opaque. The Interface/Block stats ones allow for sizeof().
The others are all fixed.
If we don't do either, I'd be very worried by at least
virDomainInterfaceStatsStruct, virDomainBlockStatsStruct,
virNodeInfo, virVcpuInfo. We'll surely end up with a proliferation of
virFoo2() calls for virFoo2Structs.
The interface/block stats functions both take a sizeof() parameter
to allow possible extension. NodeInfo/VcpuInfo do not.
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|