[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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



On Mon, May 30, 2011 at 05:54:20PM +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 |   31 +++++++++++++++----------------
>  1 files changed, 15 insertions(+), 16 deletions(-)
> 
> diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
> index 6ee13da..8eb87a2 100644
> --- a/src/lxc/lxc_driver.c
> +++ b/src/lxc/lxc_driver.c
> @@ -1522,6 +1522,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;
>  
>  cleanup:
> @@ -1909,8 +1913,6 @@ lxcReconnectVM(void *payload, const void *name ATTRIBUTE_UNUSED, void *opaque)
>  {
>      virDomainObjPtr vm = payload;
>      lxc_driver_t *driver = opaque;
> -    char *config = NULL;
> -    virDomainDefPtr tmp;
>      lxcDomainObjPrivatePtr priv;
>  
>      virDomainObjLock(vm);
> @@ -1926,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,
> @@ -2030,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,
> @@ -2037,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);

ACK

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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]