[libvirt] [PATCH] lxc: Seperate domain config loading
Osier Yang
jyang at redhat.com
Sat May 21 06:43:12 UTC 2011
于 2011年05月20日 22:31, Daniel P. Berrange 写道:
> 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.
Doesn't it already deleted in lxcVmCleanup?
<snip>
virFileDeletePid(driver->stateDir, vm->def->name);
virDomainDeleteConfig(driver->stateDir, NULL, vm);
</snip>
>
>
>> 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
More information about the libvir-list
mailing list