[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