[Libvir] Re: [PATCH] Re: Proposal: Check availability of driver calls (repost)

Daniel Veillard veillard at redhat.com
Wed Aug 1 14:19:42 UTC 2007


On Wed, Aug 01, 2007 at 02:45:57PM +0100, Richard W.M. Jones wrote:
> Daniel Veillard wrote:
> >>+typedef enum {
> >>+    /* Driver supports V1-style virDomainMigrate, ie. 
> >>domainMigratePrepare/
> >>+     * domainMigratePerform/domainMigrateFinish.
> >>+     */
> >>+    VIR_DRV_FEATURE_MIGRATION_V1 = 1,
> >>+
> >>+    /* Driver is not local. */
> >>+    VIR_DRV_FEATURE_REMOTE = 2,
> >>+} virDrvFeature;
> >
> >  Probably best done with defines than enums, as you want to be able to 
> >  compose
> >them the fact it comes from a type doesn't help, and I have learnt the 
> >hard way
> >that enums sucks in C in general.
> 
> What in particular?  I'm not particularly concerned either way since 
> enums are basically just as unsafe as #defines in C, but it is nice for 
> the library user to be able to connect the argument prototype 
> ("virDrvFeature feature") to the list of permitted types.
> 
> >>+typedef int
> >>+    (*virDrvSupportsFeature) (virConnectPtr conn, virDrvFeature 
> >>feature);
> >
> > I would rather use , int features) where you OR the features, allows
> >to know in one call if you get what you want or not.
> 
> In the case where you've got multiple different migration possibilities 
> (VIR_DRV_FEATURE_MIGRATE_V1 & VIR_DRV_FEATURE_MIGRATE_V2) then this 
> saves you one remote call in the legacy case (VIR_DRV_FEATURE_MIGRATE_V2 
> not supported so we have to do a second remote call to check 
> VIR_DRV_FEATURE_MIGRATE_V1).

  You seems to think it's useful only for migrate. I want that to be
usable for a lot more. You talk to a remote server, you want to know if
it supports any of the entry point in the driver table, how do you do this ?

> On the other hand, it complicates the interface.  You need to return an 
> array rather than a single int.  (OK, so you can return a bit array, but 
> now the feature list had better always be <= 32 entries long).  And in 
> the case where someone queries VIR_DRV_FEATURE_MIGRATE_V1 & 
> VIR_DRV_FEATURE_REMOTE you need to have two different drivers answering 
> a single request.
> 
> I think this complicates things unnecessarily ...

  I think this would be a waste to design it with a single narrowly focused
usage in mind, when it can be far more generally useful.

Daniel

-- 
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard      | virtualization library  http://libvirt.org/
veillard at redhat.com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine  http://rpmfind.net/




More information about the libvir-list mailing list