On Wed, Aug 01, 2007 at 10:19:42AM -0400, Daniel Veillard wrote: > 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. Yes - as a concrete example - QEMU driver doesn't support save/restore. We have no way to find this out in virt-manager without actually trying to run the API & wait for it to fail. If we could query libvirt to ask if the driver supported a particular feature, we could disable the save/restore buttons/menus in virt-manager. Regards, Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list