[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