]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
testDomainSnapshotCreateXML: Extract snapshot redefinition code
authorPeter Krempa <pkrempa@redhat.com>
Wed, 12 Jan 2022 14:40:55 +0000 (15:40 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 14 Jan 2022 17:11:58 +0000 (18:11 +0100)
The test driver code was copied from qemu but wasn't refactored
recently. Split out the redefinition code similarly to what qemu driver
did.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/test/test_driver.c

index dde7bf1b8eff7a5555a7cac1da702053c6cac282..e772b2be2bc94ae7754d83efcf2464b8ccd0cd27 100644 (file)
@@ -8739,6 +8739,33 @@ testDomainSnapshotAlignDisks(virDomainObj *vm,
     return virDomainSnapshotAlignDisks(def, NULL, align_location, true);
 }
 
+
+static virDomainSnapshotPtr
+testDomainSnapshotRedefine(virDomainObj *vm,
+                           virDomainPtr domain,
+                           virDomainSnapshotDef *snapdeftmp,
+                           virDomainMomentObj **snapout,
+                           virDomainXMLOption *xmlopt,
+                           unsigned int flags)
+{
+    virDomainMomentObj *snap = NULL;
+    g_autoptr(virDomainSnapshotDef) snapdef = virObjectRef(snapdeftmp);
+
+    if (virDomainSnapshotRedefinePrep(vm, &snapdef, &snap, xmlopt, flags) < 0)
+        return NULL;
+
+    if (!snap) {
+        if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, snapdef)))
+            return NULL;
+        snapdef = NULL;
+    }
+
+    *snapout = snap;
+
+    return virGetDomainSnapshot(domain, snap->def->name);
+}
+
+
 static virDomainSnapshotPtr
 testDomainSnapshotCreateXML(virDomainPtr domain,
                             const char *xmlDesc,
@@ -8805,37 +8832,32 @@ testDomainSnapshotCreateXML(virDomainPtr domain,
         goto cleanup;
 
     if (redefine) {
-        if (virDomainSnapshotRedefinePrep(vm, &def, &snap,
-                                          privconn->xmlopt,
-                                          flags) < 0)
-            goto cleanup;
-    } else {
-        if (!(def->parent.dom = virDomainDefCopy(vm->def,
-                                                 privconn->xmlopt,
-                                                 NULL,
-                                                 true)))
-            goto cleanup;
-
-        if (testDomainSnapshotAlignDisks(vm, def, flags) < 0)
-            goto cleanup;
+        snapshot = testDomainSnapshotRedefine(vm, domain, def, &snap,
+                                              privconn->xmlopt, flags);
+        goto cleanup;
     }
 
-    if (!snap) {
-        if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, def)))
-            goto cleanup;
-        def = NULL;
-    }
+    if (!(def->parent.dom = virDomainDefCopy(vm->def,
+                                             privconn->xmlopt,
+                                             NULL,
+                                             true)))
+        goto cleanup;
 
-    if (!redefine) {
-        snap->def->parent_name = g_strdup(virDomainSnapshotGetCurrentName(vm->snapshots));
+    if (testDomainSnapshotAlignDisks(vm, def, flags) < 0)
+        goto cleanup;
 
-        if ((flags & VIR_DOMAIN_SNAPSHOT_CREATE_HALT) &&
-            virDomainObjIsActive(vm)) {
-            testDomainShutdownState(domain, vm,
-                                    VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT);
-            event = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED,
-                                    VIR_DOMAIN_EVENT_STOPPED_FROM_SNAPSHOT);
-        }
+    if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, def)))
+        goto cleanup;
+    def = NULL;
+
+    snap->def->parent_name = g_strdup(virDomainSnapshotGetCurrentName(vm->snapshots));
+
+    if ((flags & VIR_DOMAIN_SNAPSHOT_CREATE_HALT) &&
+        virDomainObjIsActive(vm)) {
+        testDomainShutdownState(domain, vm,
+                                VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT);
+        event = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED,
+                                                  VIR_DOMAIN_EVENT_STOPPED_FROM_SNAPSHOT);
     }
 
     snapshot = virGetDomainSnapshot(domain, snap->def->name);