
Daniel Veillard wrote:
On Wed, Mar 09, 2011 at 11:45:49PM -0700, Jim Fehlig wrote:
Add a new xen driver based on libxenlight [1], which is the primary toolstack starting with Xen 4.1.0. The driver is stateful, runs privileged only, and is accessed with libxl:/// URI.
V5: - Ensure events are unregistered when domain private data is destroyed. Discovered and fixed by Markus Gross.
V4: - Handle restart of libvirtd, reconnecting to previously started domains - Rebased to current master - Tested against Xen 4.1 RC7-pre (c/s 22961:c5d121fd35c0)
V3: - Reserve vnc port within driver when autoport=yes
V2: - Update to Xen 4.1 RC6-pre (c/s 22940:5a4710640f81) - Rebased to current master - Plug memory leaks found by Stefano Stabellini and valgrind - Handle SHUTDOWN_crash domain death event
[1] http://lists.xensource.com/archives/html/xen-devel/2009-11/msg00436.html
[...]
It's great to have documentation, but ... I just regret that we are unable to hide how we connect to the Xen server, after all libvirt was precisely designed to try to minimize the change on the application stack as the lower layers of virtualization evolves, and here we fail.
Yes, well said - and I agree. I mentioned this concern early on, but unfortunately it was on IRC instead of the list where it could get more discussion.
Sure the URI is a very minimal part compared to the actual XML description and code but the fact we are using a different driver internally could possibly be masked to the user.
Can we make an attempt at hiding how we connect to Xen here like we did with the "unified" driver but while keeping with different subdirectories and drivers.
I'm experimenting with an idea that seems to be quite fruitful. In daemon/libvirtd.c, I moved the registration of libxl driver before qemu to prevent qemu from being default if libxenlight is available but xend is not. And in startup of libxl driver, I try to connect to xen:/// URI (legacy toolstack will be tried first) and silently disable the driver if successful. I've tested this approach with xend disabled, which essentially disables xen_unified, and libxl driver is selected by default and when specifying xen:///. With xend enabled, libxl driver is not loaded and xen_unified is selected by default and when using xen:///. I hope I'm not overlooking a flaw in this approach :-). Unless there are objections to this solution, I can provide a much nicer V6! The documentation will simply be a few comments in the existing xen hypervisor doc.
Ideally if virt-manager could connect though the new stack without knowing, then that mean we suceeded and really adding value here.
I've tested virt-manager and it behaves as you wish :-).
+ (uint8_t *)dom_xml, strlen(dom_xml) + 1)) { + libxlError(VIR_ERR_INTERNAL_ERROR, + _("libxenlight failed to store userdata")); + goto error; + }
Bonus point for the Xen guys here, the per-domain data storage is a great idea, suits us well and simplify data handling a lot ! I assume it follows on migrations etc... Maybe we should register "libvirt-xml" in their small registry in tools/libxl/libxl.h
Yep, I'll send a patch to xen-devel.
It would be nice to grab in domains created by other means if we have a chance.
I'm not sure we want to be interfering with domains created by other libxl clients, which will be waiting for events, domain death, etc. for domains under their control.
[...]
+static int +libxlStartup(int privileged) { + const libxl_version_info *ver_info; + char *log_file = NULL; + + /* Check that the user is root, silently disable if not */ + if (!privileged) { + VIR_INFO0("Not running privileged, disabling libxenlight driver"); + return 0; + }
okay so fo local management we will always go though remote to talk to the libvirtd daemon, right ?
Yes.
Okay, I tried t make sure libxl_domain_shutdown() is really asynchronous in all cases, I somehow failed, can you confirm ?
Yes, AFAIK that is the case. Stefano, is that true? I'll incorporate the rest of your comments in V6 after we have agreed on a solution to the connection issue. Thanks! Jim