[libvirt] [PATCH] lxc: Seperate domain config loading

Daniel P. Berrange berrange at redhat.com
Fri May 20 14:31:13 UTC 2011


On Wed, May 18, 2011 at 04:57:53PM +0800, Osier Yang wrote:
> This patch seperate the domain config loading just as qemu driver
> does, first loading config of running or trasient domains, then
> of persistent inactive domains. And only try to reconnect the
> monitor of running domains, so that it won't always throws errors
> saying can't connect to domain monitor.
> 
> And as "virDomainLoadConfig->virDomainAssignDef->virDomainObjAssignDef",
> already do things like "vm->newDef = def", removed the codes
> in "lxcReconnectVM" that does the same work.
> ---
>  src/lxc/lxc_driver.c |   30 +++++++++++++++---------------
>  1 files changed, 15 insertions(+), 15 deletions(-)
> 
> diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
> index 2bb592d..ccf20e4 100644
> --- a/src/lxc/lxc_driver.c
> +++ b/src/lxc/lxc_driver.c
> @@ -1521,6 +1521,10 @@ static int lxcVmStart(virConnectPtr conn,
>      if (virDomainObjSetDefTransient(driver->caps, vm, false) < 0)
>          goto cleanup;
>  
> +    /* Write domain status to disk. */
> +    if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0)
> +        goto cleanup;
> +
>      rc = 0;
>  

If we introduce that, then I think you need to have the inverse
in  lxcVmCleanup to delete it.


>  cleanup:
> @@ -1586,7 +1590,6 @@ static int lxcDomainStartWithFlags(virDomainPtr dom, unsigned int flags)
>          event = virDomainEventNewFromObj(vm,
>                                           VIR_DOMAIN_EVENT_STARTED,
>                                           VIR_DOMAIN_EVENT_STARTED_BOOTED);
> -
>  cleanup:
>      if (vm)
>          virDomainObjUnlock(vm);
> @@ -1925,18 +1928,6 @@ lxcReconnectVM(void *payload, const void *name ATTRIBUTE_UNUSED, void *opaque)
>          goto cleanup;
>      }
>  
> -    if ((config = virDomainConfigFile(driver->stateDir,
> -                                      vm->def->name)) == NULL)
> -        goto cleanup;
> -
> -    /* Try and load the live config */
> -    tmp = virDomainDefParseFile(driver->caps, config, 0);
> -    VIR_FREE(config);
> -    if (tmp) {
> -        vm->newDef = vm->def;
> -        vm->def = tmp;
> -    }
> -
>      if (vm->pid != 0) {
>          vm->def->id = vm->pid;
>          virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
> @@ -2029,6 +2020,17 @@ static int lxcStartup(int privileged)
>      lxc_driver->caps->privateDataAllocFunc = lxcDomainObjPrivateAlloc;
>      lxc_driver->caps->privateDataFreeFunc = lxcDomainObjPrivateFree;
>  
> +    /* Get all the running persistent or transient configs first */
> +    if (virDomainLoadAllConfigs(lxc_driver->caps,
> +                                &lxc_driver->domains,
> +                                lxc_driver->stateDir,
> +                                NULL,
> +                                1, NULL, NULL) < 0)
> +        goto cleanup;
> +
> +    virHashForEach(lxc_driver->domains.objs, lxcReconnectVM, lxc_driver);
> +
> +    /* Then inactive persistent configs */
>      if (virDomainLoadAllConfigs(lxc_driver->caps,
>                                  &lxc_driver->domains,
>                                  lxc_driver->configDir,
> @@ -2036,8 +2038,6 @@ static int lxcStartup(int privileged)
>                                  0, NULL, NULL) < 0)
>          goto cleanup;
>  
> -    virHashForEach(lxc_driver->domains.objs, lxcReconnectVM, lxc_driver);
> -
>      lxcDriverUnlock(lxc_driver);
>  
>      lxcAutostartConfigs(lxc_driver);


Looks good apart from the missing cleanup

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 :|




More information about the libvir-list mailing list