[Libvir] State of driver backend infrastructure

Daniel Veillard veillard at redhat.com
Mon Jun 12 22:52:57 UTC 2006


On Mon, Jun 12, 2006 at 11:19:00PM +0100, Daniel P. Berrange wrote:
> I'm looking to get more of the test driver backend working, and so decided
> it was time to audit the state of the driver backend infrastructure. There
> are a couple of areas which could do with some work:
> 
>  * Driver specific data. The virConnect & virDomain structs have explicit
>    fields for Xen related data:
> 
>    virConnect:
> 
>     int handle;   /* internal handle used for hypercall */
>     struct xs_handle *xshandle;   /* handle to talk to the xenstore */
> 
>    virDomain:
> 
>     int handle;             /* internal handle for the domnain ID */
> 
> 
>    One idea for resolving this is to have an array of slots, one per
>    drivers in which drivers can store data they need.
> 
>       void **handles
> 
>    Or perhaps, to allow simple int type too
> 
>       void union {
>         int  num;
>         void *ptr
>       } *handles

  Hum, I think I would worry when we have half a dozen back-ends, virConnect
content is opaque, allocated/freed only by the library so changing that
later won't generate any kind of API or ABI issues. Having explicit pointers
at worse may loose a few bytes per connections, and on the other hand having
the explicit types there ease debugging. So at this point I think there isn't
really to worry about it.

> 
>  * Connect URIs.  The 'virDomainOpen' and 'virDomainOpenReadOnly' methods
>    have an optional parameter 'name'. The Xen drivers currently ignore
>    this, or expect it to be NULL / the string "Xen". For sake of back-compat
>    we'll ned to preserve existing behaviour for NULL, but we should hook
>    up URI parsing for the XenD backend to allow non local connections to
>    work.

  yes, that's an area which need refining.

>  This gives the question of what format should the URI be for
>    Xen domains ?  Although 'http://' is the protocol XenD uses, this isn't
>    likely a good idea, because a later VMWare driver might also use a
>     http based protocol. So, perhaps we should use generic URIs:?
> 
>         xend://somehost:port/

yes I was thinking of somthing like this. The only annoying point is that 
xend isn't really a protocol i.e. it deviates a bit from URI real semantic
and one could think of multiple xend access types (see Anthony's patch for
Xend XML-RPC though ssh on xen-devel), but we could do things like

          xend:///var/run/xend/socket

          xendssh://user@somehost:port

while being relatively clean w.r.t RFC 2396 and Co.

>  * Driver method hookup. The libvirt.c file has alot of methods which are
>    either not hooked up to the driver backend, or hooked up, but still have
>    duplicated (redundant?) Xen specific calls. Here is the complete status:

  Okay, I need to clean them up, please bugzilla this I will fix this soonish.

>     virGetVersion:
>     
>      - Hardcodes support for Xen HV. No virConnectPtr handle, so
>        how would we call out to driver backends ?
>     

  yes that's an API bug :-\ , I'm afraid that mean I will have to make a
release breaking compatibility, annoying, better do that as soon as possible.

>     virConnectClose:
>     
>      - Does not call out to driver backends, simply free's struct

  okay need to call the virDrvClose if non NULL.
>     
>     virConnectGetType:
>     
>      - Does not call out to driver backends, hardcodes Xen HV

  Should return the value of virDrvGetType() or the string identifying the
driver if NULL

>     
>     virConnectGetVersion
>     
>      - Does not call out to driver backends, hardcodes Xen HV

  Should return value of virDrvGetVersion()

>     
>     virConnectListDomains
>     
>      - Calls out to drivers, but also has duplicated code for 
>        XenD & XenStore

  Should remove the fallback, that should just work

>     virConnectNumOfDomains
>     
>      - Calls out to drivers, but also has duplicated code for 
>        XenD & XenStore

  same as previous
>     
>     virDomainLookupByID
>     
>      - Calls out to drivers, but also has duplicated code for 
>        XenD & XenStore
 same as previous
>     
>     virDomainLookupByUUID
>     
>      - Calls out to drivers, but also has duplicated code for 
>        XenD & XenStore

  same as previous

>     virDomainLookupByName
>     
>      - Calls out to drivers, but also has duplicated code for 
>        XenD & XenStore
>     
   same as previous

>     
>     virDomainCreateLinux
>     
>      - Does not call out to driver backends, hardcodes XenD

  that one is a bit complex because that's multistep, but yeah
if needed the meat of the routine should just be moved in the xend driver.

>     
>     virDomainLookupByUUIDString
>     
>      - OK  (but delegates to virDomainLookupByUUID)
>     
>     
>     virDomainDestroy
>     
>      - Does not call out to driver backends, hardcodes XenD & Xen HV
>     

  bad need fixing to call the driver entry point.

>     virDomainFree
>     
>      - Does not call out to driver backends, simply free's struct
>     

  same as previous

>     virDomainSuspend
>     
>      - Does not call out to driver backends, hardcodes XenD & Xen HV
>     
> 
  same as previous

>     virDomainResume
>     
>      - Does not call out to driver backends, hardcodes XenD & Xen HV
> 
  same as previous

>     
>     virDomainSave
>     
>      - Does not call out to driver backends, hardcodes XenD
> 
  same as previous

>     
>     virDomainRestore
>     
>      - Does not call out to driver backends, hardcodes XenD
> 
  same as previous

>     
>     virDomainShutdown
>     
>      - Does not call out to driver backends, hardcodes XenD
> 
  same as previous

>     
>     virDomainReboot
>     
>      - Does not call out to driver backends, hardcodes XenD
> 
  same as previous

>     
>     virDomainGetUUID
>     
>      - Does not call out to driver backends, hardcodes XenD
>     
>     
>     virDomainGetName
>     
>      - OK
>     
>     
>     virDomainGetUUIDString
>     
>      - OK  (but delegates to virDomainGetUUID)
>     
>     
>     virDomainGetOSType
>     
>      - Does not call out to driver backends, calls function in XenStore driver
>     
>     
>     virDomainGetMaxMemory
>     
>      - Does not call out to driver backends, hardcodes XenD, Xen HV, XenStore
>     
>     
>     virDomainGetXMLDesc
>     
>      - Does not call out to driver backends, hardcodes XenD

  Those 3 need to call the corresponding driver entries.

>     
>     virDomainSetMaxMemory
>     
>      - OK
>     
>     
>     virDomainSetMemory
>     
>      - OK
>     
>     
>     virDomainGetInfo
>     
>      - Calls out to drivers, but also has duplicated code for 
>        XenD & XenStore
>     

  fall back need to be removed

>     virNodeGetInfo
>     
>      - OK
>     
>     
>     virDomainDefineXML
>     
>      - OK
>     
>     
>     virDomainUndefineXML
>     
>      - OK
>     
>     
>     virDomainListDefinedDomains
>     
>      - No implemented
>     
>     
>     virDomainCreate
>     
>      - No implemented

  I need to implement the entry point but I'm waiting on Xend changes to
support defined but not running domains.

> My immediate needs for testing, are to hook up more of the methods which
> aren't connected to the driver backends.

  Okay I need to clean this up, should not be that hard except the Version
API change needed, :-\ maybe I can avoid this by using the version extraction
from the first activated driver found.

Thanks a lot for going though this !

Daniel

-- 
Daniel Veillard      | Red Hat http://redhat.com/
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