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

Eric Blake eblake at redhat.com
Fri Sep 10 20:01:16 UTC 2010


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?

>   */
> virLockManagerPluginPtr virLockManagerPluginLoad(const char *name);

No documentation for virLockMAnagerPluginUnload?

> int virLockManagerPluginUnload(virLockManagerPluginPtr);
>

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list