[libvirt] RFC [2/3]: The lock manager plugin driver API

Daniel P. Berrange berrange at redhat.com
Mon Sep 13 12:30:00 UTC 2010


On Fri, Sep 10, 2010 at 02:01:16PM -0600, Eric Blake wrote:
> On 09/10/2010 10:00 AM, Daniel P. Berrange wrote:
> >
> >typedef struct _virLockManagerDriver virLockManagerDriver;
> >typedef virLockManagerDriver *virLockManagerDriverPtr;
> >
> >/* Which callbacks are supported */
> >typedef enum {
> >     VIR_LOCK_MANAGER_DRIVER_RESOURCES = (1<<  0),
> >     VIR_LOCK_MANAGER_DRIVER_MIGRATE   = (1<<  0),
> 
> Same value?
> 
> >     VIR_LOCK_MANAGER_DRIVER_HOTPLUG   = (1<<  1),
> >};
> >
> >struct _virLockManagerDriver {
> >     /**
> >      * @version: the newest implemented plugin ABI version
> >      * @flags: the implemented plugin optional extras
> >      */
> >     unsigned int version;
> >     unsigned int flags;
> >
> >     /**
> >      * load_drv:
> >      * @version: the libvirt requested plugin ABI version
> >      * @flags: the libvirt requested plugin optional extras
> >      *
> >      * Allow the plugin to validate the libvirt requested
> >      * plugin version / flags. This allows it to reject
> >      * use of versions which are too old. A plugin may
> >      * be loaded multiple times, for different libvirt
> >      * drivers
> >      *
> >      * Returns -1 if the requested version/flags were inadequate
> >      */
> >     int (*load_drv)(unsigned int version,
> >                     unsigned int flags);
> >
> >     /**
> >      * unload_drv:
> >      *
> >      * Called to release any resources prior to the plugin
> >      * being unloaded from memory. Returns -1 to prevent
> >      * plugin unloading.
> >      */
> >     int (*load_drv)(void);
> 
> s/load_drv/unload_drv/ or this won't compile.  Are these two callbacks 
> mandatory, or can they be NULL in the case that the driver only supports 
> exactly what it recorded in version/flags?
> 
> >/**
> >  * virLockManagerPluginLoad:
> >  * @name: the name of the plugin
> >  *
> >  * Attempt to load the plugin $(libdir)/libvirt/lock-manager/@name.so
> >  * The plugin driver entry point will be resolved&  invoked to obtain
> >  * the lock manager driver
> 
> Returns NULL on failure, but is there any way to distinguish between 
> levels of failure (file not found vs. plugin_init failed vs. load_drv 
> callback failed), since that might be useful in diagnosing the problem?

We'll report errors via the normal libvirt error & logging APIs
so that should still be diagnosable.

Daniel
-- 
|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list