[Libvir] PATCH 13/20: create internal stateful driver API

Daniel Veillard veillard at redhat.com
Fri Jun 22 13:10:57 UTC 2007


On Fri, Jun 22, 2007 at 03:07:08AM +0100, Daniel P. Berrange wrote:
> Some drivers are stateless (Xen, test), while others are stateful (QEMU).
> The later can only be accessed via the daemon. This patch adds a new internal
> driver API to allow drivers to register a set of functions for performing
> work on daemon startup, shutdown and reload. It makes the QEMU driver in
> qemud/driver.c provide implementations of these funtions. It adapts the
> qemud/qemud.c to call these new global driver functions. Finally it fixes
> the idle timeout shutdown of the daemon disabled in an earlier patch.
> NB this patch adds 3 new exported symbols for private use by the daemon.

[...]
> +typedef int (*virDrvStateInitialize) (void);
> +typedef int (*virDrvStateCleanup) (void);
> +typedef int (*virDrvStateReload) (void);
> +typedef int (*virDrvStateActive) (void);
> +
> +typedef struct _virStateDriver virStateDriver;
> +typedef virStateDriver *virStateDriverPtr;
> +
> +struct _virStateDriver {
> +    virDrvStateInitialize  initialize;
> +    virDrvStateCleanup     cleanup;
> +    virDrvStateReload      reload;
> +    virDrvStateActive      active;
> +};
>  
>  /*
>   * Registration
> @@ -324,6 +338,7 @@ struct _virNetworkDriver {
>   */
>  int virRegisterDriver(virDriverPtr);
>  int virRegisterNetworkDriver(virNetworkDriverPtr);
> +int virRegisterStateDriver(virStateDriverPtr);


  Hum, shouldn't that be more closely associated to the virDriver itself
it looks completely orthogonal, so I'm a bit surprized.

>  #ifdef __cplusplus
>  }
> diff -r 968ca2c71e5f src/internal.h
> --- a/src/internal.h	Thu Jun 21 21:20:57 2007 -0400
> +++ b/src/internal.h	Thu Jun 21 21:20:58 2007 -0400
> @@ -214,6 +214,15 @@ int		virFreeNetwork	(virConnectPtr conn,
>  #define virGetDomain(c,n,u) __virGetDomain((c),(n),(u))
>  #define virGetNetwork(c,n,u) __virGetNetwork((c),(n),(u))
>  
> +int __virStateInitialize(void);
> +int __virStateCleanup(void);
> +int __virStateReload(void);
> +int __virStateActive(void);
> +#define virStateInitialize() __virStateInitialize()
> +#define virStateCleanup() __virStateCleanup()
> +#define virStateReload() __virStateReload()
> +#define virStateActive() __virStateActive()

  Funky, a small comment why we do this might help newbies going
over the code.

  /*
   * those function are exported by the library but not supposed to be
   * used for normal use of libvirt.
   */
 or something similar.

> --- a/src/libvirt.c	Thu Jun 21 21:20:57 2007 -0400
> +++ b/src/libvirt.c	Thu Jun 21 21:20:58 2007 -0400
> @@ -40,6 +40,8 @@ static int virDriverTabCount = 0;
>  static int virDriverTabCount = 0;
>  static virNetworkDriverPtr virNetworkDriverTab[MAX_DRIVERS];
>  static int virNetworkDriverTabCount = 0;
> +static virStateDriverPtr virStateDriverTab[MAX_DRIVERS];
> +static int virStateDriverTabCount = 0;
>  static int initialized = 0;

  I'm still a bit surprized this is separate from the drivers,
somehow I would have expected the virStateDriverPtr to be a subfield
of virDriver

> diff -r 968ca2c71e5f src/libvirt_sym.version
> --- a/src/libvirt_sym.version	Thu Jun 21 21:20:57 2007 -0400
> +++ b/src/libvirt_sym.version	Thu Jun 21 21:20:58 2007 -0400
> @@ -101,5 +101,10 @@
>  
>  	__virEventRegisterImpl;
>  
> + 	__virStateInitialize;
> + 	__virStateCleanup;
> + 	__virStateReload;
> + 	__virStateActive;
> +

  Are all the __functions used by the daemon ? making a quick check in the
end and adding a comment would make sense.

  But I think the patch is fine even if I'm a bit surprised about the way
state is handled. I would have though it was a per driver property and hence
associated to the driver structure.

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