[PATCH 7/8] qemu: refactor qemuDomainDefineXMLFlags
Nikolay Shirokovskiy
nshirokovskiy at virtuozzo.com
Thu Mar 5 13:26:52 UTC 2020
On 03.03.2020 11:19, Nikolay Shirokovskiy wrote:
> Let's move objlist restoring to cleanup section so that we can
> handle failure of actions between virDomainObjListAdd and
> virDomainDefSave.
>
> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
> ---
> src/qemu/qemu_driver.c | 32 ++++++++++++++++----------------
> 1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 4553ebfb80..e1b9240893 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -7630,7 +7630,7 @@ qemuDomainDefineXMLFlags(virConnectPtr conn,
>
> if (!(def = virDomainDefParseString(xml, driver->xmlopt,
> NULL, parse_flags)))
> - goto cleanup;
> + return NULL;
>
> if (virXMLCheckIllegalChars("name", def->name, "\n") < 0)
> goto cleanup;
> @@ -7644,10 +7644,23 @@ qemuDomainDefineXMLFlags(virConnectPtr conn,
> goto cleanup;
> def = NULL;
>
> + if (virDomainDefSave(vm->newDef ? vm->newDef : vm->def,
> + driver->xmlopt, cfg->configDir) < 0)
> + goto cleanup;
> +
> vm->persistent = 1;
>
> - if (virDomainDefSave(vm->newDef ? vm->newDef : vm->def,
> - driver->xmlopt, cfg->configDir) < 0) {
> + event = virDomainEventLifecycleNewFromObj(vm,
> + VIR_DOMAIN_EVENT_DEFINED,
> + !oldDef ?
> + VIR_DOMAIN_EVENT_DEFINED_ADDED :
> + VIR_DOMAIN_EVENT_DEFINED_UPDATED);
> +
> + VIR_INFO("Creating domain '%s'", vm->def->name);
> + dom = virGetDomain(conn, vm->def->name, vm->def->uuid, vm->def->id);
> +
> + cleanup:
> + if (!def) {
if (!dom && !def)
Nikolay
> if (oldDef) {
> /* There is backup so this VM was defined before.
> * Just restore the backup. */
> @@ -7660,22 +7673,9 @@ qemuDomainDefineXMLFlags(virConnectPtr conn,
> } else {
> /* Brand new domain. Remove it */
> VIR_INFO("Deleting domain '%s'", vm->def->name);
> - vm->persistent = 0;
> qemuDomainRemoveInactiveJob(driver, vm);
> }
> - goto cleanup;
> }
> -
> - event = virDomainEventLifecycleNewFromObj(vm,
> - VIR_DOMAIN_EVENT_DEFINED,
> - !oldDef ?
> - VIR_DOMAIN_EVENT_DEFINED_ADDED :
> - VIR_DOMAIN_EVENT_DEFINED_UPDATED);
> -
> - VIR_INFO("Creating domain '%s'", vm->def->name);
> - dom = virGetDomain(conn, vm->def->name, vm->def->uuid, vm->def->id);
> -
> - cleanup:
> virDomainDefFree(oldDef);
> virDomainDefFree(def);
> virDomainObjEndAPI(&vm);
>
More information about the libvir-list
mailing list