mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-08 22:15:21 +00:00
lxc: Seperate domain config loading
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.
This commit is contained in:
parent
99110a6eff
commit
584ce634d7
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user