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

Osier Yang jyang at redhat.com
Tue May 31 10:05:54 UTC 2011


于 2011年05月31日 17:38, Daniel P. Berrange 写道:
> 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

Thanks, applied.

Regards
Osier




More information about the libvir-list mailing list