[libvirt] [PATCH v2 3/4] qemu: Move vm->persistent check into qemuDomainRemoveInactive

Martin Kletzander mkletzan at redhat.com
Thu Sep 24 09:02:34 UTC 2015


On Wed, Sep 23, 2015 at 03:00:36PM +0200, Michal Privoznik wrote:
>So far we have the following pattern occurring over and over
>again:
>
>  if (!vm->persistent)
>      qemuDomainRemoveInactive(driver, vm);
>

You could've done that earlier so you would save some lines in the
patches before.  Anyway, nice cleanup;

>It's safe to put the check into the function and save some LoC.
>
>Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>---
> src/qemu/qemu_domain.c    |  9 ++++++++-
> src/qemu/qemu_driver.c    | 42 ++++++++++++++++--------------------------
> src/qemu/qemu_migration.c | 14 +++++---------
> src/qemu/qemu_process.c   | 12 ++++--------
> 4 files changed, 33 insertions(+), 44 deletions(-)
>
>diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
>index 7d92f3a..367d662 100644
>--- a/src/qemu/qemu_domain.c
>+++ b/src/qemu/qemu_domain.c
>@@ -2632,7 +2632,14 @@ qemuDomainRemoveInactive(virQEMUDriverPtr driver,
> {
>     bool haveJob = true;
>     char *snapDir;
>-    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
>+    virQEMUDriverConfigPtr cfg;
>+
>+    if (vm->persistent) {
>+        /* Short-circuit, we don't want to remove a persistent domain */
>+        return;
>+    }
>+
>+    cfg = virQEMUDriverGetConfig(driver);
>
>     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
>         haveJob = false;
>diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>index 2a4b026..3532973 100644
>--- a/src/qemu/qemu_driver.c
>+++ b/src/qemu/qemu_driver.c
>@@ -1753,8 +1753,7 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
>     def = NULL;
>
>     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) {
>-        if (!vm->persistent)
>-            qemuDomainRemoveInactive(driver, vm);
>+        qemuDomainRemoveInactive(driver, vm);
>         goto cleanup;
>     }
>
>@@ -1764,8 +1763,7 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
>                          start_flags) < 0) {
>         virDomainAuditStart(vm, "booted", false);
>         qemuDomainObjEndJob(driver, vm);
>-        if (!vm->persistent)
>-            qemuDomainRemoveInactive(driver, vm);
>+        qemuDomainRemoveInactive(driver, vm);
>         goto cleanup;
>     }
>
>@@ -2250,7 +2248,7 @@ qemuDomainDestroyFlags(virDomainPtr dom,
>     ret = 0;
>  endjob:
>     qemuDomainObjEndJob(driver, vm);
>-    if (ret == 0 && !vm->persistent)
>+    if (ret == 0)
>         qemuDomainRemoveInactive(driver, vm);
>
>  cleanup:
>@@ -3273,7 +3271,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom,
>         }
>     }
>     qemuDomainObjEndAsyncJob(driver, vm);
>-    if (ret == 0 && !vm->persistent)
>+    if (ret == 0)
>         qemuDomainRemoveInactive(driver, vm);
>
>  cleanup:
>@@ -3774,7 +3772,7 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom,
>     }
>
>     qemuDomainObjEndAsyncJob(driver, vm);
>-    if (ret == 0 && flags & VIR_DUMP_CRASH && !vm->persistent)
>+    if (ret == 0 && flags & VIR_DUMP_CRASH)
>         qemuDomainRemoveInactive(driver, vm);
>
>  cleanup:
>@@ -4054,8 +4052,7 @@ processGuestPanicEvent(virQEMUDriverPtr driver,
>
>         virDomainAuditStop(vm, "destroyed");
>
>-        if (!vm->persistent)
>-            qemuDomainRemoveInactive(driver, vm);
>+        qemuDomainRemoveInactive(driver, vm);
>         break;
>
>     case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_RESTART:
>@@ -6831,7 +6828,7 @@ qemuDomainRestoreFlags(virConnectPtr conn,
>         VIR_WARN("Failed to close %s", path);
>
>     qemuDomainObjEndJob(driver, vm);
>-    if (ret < 0 && !vm->persistent)
>+    if (ret < 0)
>         qemuDomainRemoveInactive(driver, vm);
>
>  cleanup:
>@@ -7526,6 +7523,7 @@ static virDomainPtr qemuDomainDefineXMLFlags(virConnectPtr conn, const char *xml
>         } else {
>             /* Brand new domain. Remove it */
>             VIR_INFO("Deleting domain '%s'", vm->def->name);
>+            vm->persistent = 0;
>             qemuDomainRemoveInactive(driver, vm);
>         }
>         goto cleanup;
>@@ -7651,11 +7649,9 @@ qemuDomainUndefineFlags(virDomainPtr dom,
>      * domainDestroy and domainShutdown will take care of removing the
>      * domain obj from the hash table.
>      */
>-    if (virDomainObjIsActive(vm)) {
>-        vm->persistent = 0;
>-    } else {
>+    vm->persistent = 0;
>+    if (!virDomainObjIsActive(vm))
>         qemuDomainRemoveInactive(driver, vm);
>-    }
>
>     ret = 0;
>
>@@ -15550,12 +15546,9 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
>         }
>
>         if (qemuDomainSnapshotRevertInactive(driver, vm, snap) < 0) {
>-            if (!vm->persistent) {
>-                qemuDomainObjEndJob(driver, vm);
>-                qemuDomainRemoveInactive(driver, vm);
>-                goto cleanup;
>-            }
>-            goto endjob;
>+            qemuDomainObjEndJob(driver, vm);
>+            qemuDomainRemoveInactive(driver, vm);
>+            goto cleanup;
>         }
>         if (config)
>             virDomainObjAssignDef(vm, config, false, NULL);
>@@ -15575,12 +15568,9 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
>                                   start_flags);
>             virDomainAuditStart(vm, "from-snapshot", rc >= 0);
>             if (rc < 0) {
>-                if (!vm->persistent) {
>-                    qemuDomainObjEndJob(driver, vm);
>-                    qemuDomainRemoveInactive(driver, vm);
>-                    goto cleanup;
>-                }
>-                goto endjob;
>+                qemuDomainObjEndJob(driver, vm);
>+                qemuDomainRemoveInactive(driver, vm);
>+                goto cleanup;
>             }
>             detail = VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT;
>             event = virDomainEventLifecycleNewFromObj(vm,
>diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
>index 3dd3718..7440108 100644
>--- a/src/qemu/qemu_migration.c
>+++ b/src/qemu/qemu_migration.c
>@@ -3483,8 +3483,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
>         VIR_FREE(priv->origname);
>         virPortAllocatorRelease(driver->migrationPorts, priv->nbdPort);
>         priv->nbdPort = 0;
>-        if (!vm->persistent)
>-            qemuDomainRemoveInactive(driver, vm);
>+        qemuDomainRemoveInactive(driver, vm);
>     }
>     virDomainObjEndAPI(&vm);
>     qemuDomainEventQueue(driver, event);
>@@ -3873,8 +3872,7 @@ qemuMigrationConfirm(virConnectPtr conn,
>                                     flags, cancelled);
>
>     qemuMigrationJobFinish(driver, vm);
>-    if (!virDomainObjIsActive(vm) &&
>-        (!vm->persistent || (flags & VIR_MIGRATE_UNDEFINE_SOURCE))) {
>+    if (!virDomainObjIsActive(vm)) {
>         if (flags & VIR_MIGRATE_UNDEFINE_SOURCE)
>             virDomainDeleteConfig(cfg->configDir, cfg->autostartDir, vm);
>         qemuDomainRemoveInactive(driver, vm);
>@@ -5357,9 +5355,7 @@ qemuMigrationPerformJob(virQEMUDriverPtr driver,
>     }
>
>     qemuMigrationJobFinish(driver, vm);
>-    if (!virDomainObjIsActive(vm) &&
>-        (!vm->persistent ||
>-         (ret == 0 && (flags & VIR_MIGRATE_UNDEFINE_SOURCE)))) {
>+    if (!virDomainObjIsActive(vm) && ret == 0) {
>         if (flags & VIR_MIGRATE_UNDEFINE_SOURCE)
>             virDomainDeleteConfig(cfg->configDir, cfg->autostartDir, vm);
>         qemuDomainRemoveInactive(driver, vm);
>@@ -5435,7 +5431,7 @@ qemuMigrationPerformPhase(virQEMUDriverPtr driver,
>         qemuMigrationJobFinish(driver, vm);
>     else
>         qemuMigrationJobContinue(vm);
>-    if (!virDomainObjIsActive(vm) && !vm->persistent)
>+    if (!virDomainObjIsActive(vm))
>         qemuDomainRemoveInactive(driver, vm);
>
>  cleanup:
>@@ -5804,7 +5800,7 @@ qemuMigrationFinish(virQEMUDriverPtr driver,
>         VIR_WARN("Unable to encode migration cookie");
>
>     qemuMigrationJobFinish(driver, vm);
>-    if (!vm->persistent && !virDomainObjIsActive(vm))
>+    if (!virDomainObjIsActive(vm))
>         qemuDomainRemoveInactive(driver, vm);
>
>  cleanup:
>diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
>index 7187dc1..c9beadd 100644
>--- a/src/qemu/qemu_process.c
>+++ b/src/qemu/qemu_process.c
>@@ -323,8 +323,7 @@ qemuProcessHandleMonitorEOF(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
>     qemuProcessStop(driver, vm, stopReason, stopFlags);
>     virDomainAuditStop(vm, auditReason);
>
>-    if (!vm->persistent)
>-        qemuDomainRemoveInactive(driver, vm);
>+    qemuDomainRemoveInactive(driver, vm);
>
>  cleanup:
>     virObjectUnlock(vm);
>@@ -3898,8 +3897,7 @@ qemuProcessReconnect(void *opaque)
>         qemuProcessStop(driver, obj, state, stopFlags);
>     }
>
>-    if (!obj->persistent)
>-        qemuDomainRemoveInactive(driver, obj);
>+    qemuDomainRemoveInactive(driver, obj);
>
>  cleanup:
>     virDomainObjEndAPI(&obj);
>@@ -3943,8 +3941,7 @@ qemuProcessReconnectHelper(virDomainObjPtr obj,
>                          "might be incomplete"));
>        /* We can't spawn a thread and thus connect to monitor. Kill qemu. */
>         qemuProcessStop(src->driver, obj, VIR_DOMAIN_SHUTOFF_FAILED, 0);
>-        if (!obj->persistent)
>-            qemuDomainRemoveInactive(src->driver, obj);
>+        qemuDomainRemoveInactive(src->driver, obj);
>
>         virDomainObjEndAPI(&obj);
>         virObjectUnref(data->conn);
>@@ -5749,8 +5746,7 @@ qemuProcessAutoDestroy(virDomainObjPtr dom,
>
>     qemuDomainObjEndJob(driver, dom);
>
>-    if (!dom->persistent)
>-        qemuDomainRemoveInactive(driver, dom);
>+    qemuDomainRemoveInactive(driver, dom);
>
>     qemuDomainEventQueue(driver, event);
>
>--
>2.4.9
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150924/412af572/attachment-0001.sig>


More information about the libvir-list mailing list