]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: checkpoint: Extract finalizing steps of checkpoint creation
authorPeter Krempa <pkrempa@redhat.com>
Thu, 3 Oct 2019 12:35:58 +0000 (14:35 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 24 Oct 2019 17:35:34 +0000 (19:35 +0200)
Extract the linking and saving bits of checkpoint creation into
qemuCheckpointCreateFinalize so that qemuCheckpointCreateXML is a bit
simpler and also makes it reusable in the backup code.

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

index 5d1d982f5215fae0cd91ade596d8b693bea4a6ac..6c3099ef76bd291c17f51f0bbd6b3bc434844c33 100644 (file)
@@ -429,6 +429,34 @@ qemuCheckpointCreate(virQEMUDriverPtr driver,
 }
 
 
+int
+qemuCheckpointCreateFinalize(virQEMUDriverPtr driver,
+                             virDomainObjPtr vm,
+                             virQEMUDriverConfigPtr cfg,
+                             virDomainMomentObjPtr chk,
+                             bool update_current)
+{
+    if (update_current)
+        virDomainCheckpointSetCurrent(vm->checkpoints, chk);
+
+    if (qemuCheckpointWriteMetadata(vm, chk, driver->caps,
+                                    driver->xmlopt,
+                                    cfg->checkpointDir) < 0) {
+        /* if writing of metadata fails, error out rather than trying
+         * to silently carry on without completing the checkpoint */
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("unable to save metadata for checkpoint %s"),
+                       chk->def->name);
+        virDomainCheckpointObjListRemove(vm->checkpoints, chk);
+        return -1;
+    }
+
+    virDomainCheckpointLinkParent(vm->checkpoints, chk);
+
+    return 0;
+}
+
+
 virDomainCheckpointPtr
 qemuCheckpointCreateXML(virDomainPtr domain,
                         virDomainObjPtr vm,
@@ -486,22 +514,8 @@ qemuCheckpointCreateXML(virDomainPtr domain,
     if (!chk)
         goto endjob;
 
-    if (update_current)
-        virDomainCheckpointSetCurrent(vm->checkpoints, chk);
-
-    if (qemuCheckpointWriteMetadata(vm, chk, driver->caps,
-                                    driver->xmlopt,
-                                    cfg->checkpointDir) < 0) {
-        /* if writing of metadata fails, error out rather than trying
-         * to silently carry on without completing the checkpoint */
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("unable to save metadata for checkpoint %s"),
-                       chk->def->name);
-        virDomainCheckpointObjListRemove(vm->checkpoints, chk);
+    if (qemuCheckpointCreateFinalize(driver, vm, cfg, chk, update_current) < 0)
         goto endjob;
-    }
-
-    virDomainCheckpointLinkParent(vm->checkpoints, chk);
 
     /* If we fail after this point, there's not a whole lot we can do;
      * we've successfully created the checkpoint, so we have to go
index 7fcbc9954108172a1c52b4b6e16babb82611002c..d0ea8f000f857ebb13202b6e3817ee64e4ca9c8e 100644 (file)
@@ -61,3 +61,10 @@ qemuCheckpointCreateCommon(virQEMUDriverPtr driver,
                            virDomainCheckpointDefPtr *def,
                            virJSONValuePtr *actions,
                            virDomainMomentObjPtr *chk);
+
+int
+qemuCheckpointCreateFinalize(virQEMUDriverPtr driver,
+                             virDomainObjPtr vm,
+                             virQEMUDriverConfigPtr cfg,
+                             virDomainMomentObjPtr chk,
+                             bool update_current);