On Fri, Apr 29, 2011 at 03:21:03PM +0800, Osier Yang wrote: > Otherwise if there are inactive lxc domains, lxcStartup will > try to reconnect to sockets of these domains, which results in > errors in libvirtd log. > --- > src/lxc/lxc_driver.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c > index e905302..ef7827b 100644 > --- a/src/lxc/lxc_driver.c > +++ b/src/lxc/lxc_driver.c > @@ -1992,6 +1992,9 @@ lxcReconnectVM(void *payload, const void *name ATTRIBUTE_UNUSED, void *opaque) > > virDomainObjLock(vm); > > + if (!virDomainObjIsActive(vm)) > + goto cleanup; > + > priv = vm->privateData; > if ((priv->monitor = lxcMonitorClient(driver, vm)) < 0) { > goto cleanup; I don't see how this can be correct. The startup code does: if (virDomainLoadAllConfigs(lxc_driver->caps, &lxc_driver->domains, lxc_driver->configDir, lxc_driver->autostartDir, 0, NULL, NULL) < 0) goto cleanup; virHashForEach(lxc_driver->domains.objs, lxcReconnectVM, lxc_driver); So, at the point 'lxcReconnectVM' is called 'virDomainIsActive' will return false for *every* single VM, even ones that *are* active. You can't use 'virDomainIsActive' in this way, until we've loaded the live state XML, which is later on in the lxcReconnectVM method. So, AFAICT, this patch means we will never reconnect to any LXC VMs now. The correct solution, is to refactor LXC driver startup to work the same way as the QEMU driver startup. - Load all the live state XML files (to pick up running VMs) - Reconnect to all VMs - Load all the persistent config XML files (to pick up any additional inactive guets) Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list