]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: backup: Extract calculations of bitmaps to merge for incremental backup
authorPeter Krempa <pkrempa@redhat.com>
Thu, 12 Dec 2019 14:20:48 +0000 (15:20 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 13 Dec 2019 12:22:55 +0000 (13:22 +0100)
Separate the for now incomplete code that collects the bitmaps to be
merged for an incremental backup into a separate function. This will
allow adding testing prior to the improvement of the algorithm to
include snapshots.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
src/qemu/qemu_backup.c

index 1cd466d2112e06b1fd37276aef2d037f8eb888b3..31949b539995f4c131b02f80c8690797ee689027 100644 (file)
@@ -170,30 +170,43 @@ qemuBackupDiskDataCleanup(virDomainObjPtr vm,
 }
 
 
-
-static int
-qemuBackupDiskPrepareOneBitmaps(struct qemuBackupDiskData *dd,
-                                virJSONValuePtr actions,
-                                virDomainMomentDefPtr *incremental)
+static virJSONValuePtr
+qemuBackupDiskPrepareOneBitmapsChain(virDomainMomentDefPtr *incremental,
+                                     virStorageSourcePtr backingChain)
 {
-    g_autoptr(virJSONValue) mergebitmaps = NULL;
-    g_autoptr(virJSONValue) mergebitmapsstore = NULL;
+    g_autoptr(virJSONValue) ret = NULL;
 
-    if (!(mergebitmaps = virJSONValueNewArray()))
-        return -1;
+    if (!(ret = virJSONValueNewArray()))
+        return NULL;
 
     /* TODO: this code works only if the bitmaps are present on a single node.
      * The algorithm needs to be changed so that it looks into the backing chain
      * so that we can combine all relevant bitmaps for a given backing chain */
     while (*incremental) {
-        if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(mergebitmaps,
-                                                             dd->domdisk->src->nodeformat,
+        if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(ret,
+                                                             backingChain->nodeformat,
                                                              (*incremental)->name) < 0)
-            return -1;
+            return NULL;
 
         incremental++;
     }
 
+    return g_steal_pointer(&ret);
+}
+
+
+static int
+qemuBackupDiskPrepareOneBitmaps(struct qemuBackupDiskData *dd,
+                                virJSONValuePtr actions,
+                                virDomainMomentDefPtr *incremental)
+{
+    g_autoptr(virJSONValue) mergebitmaps = NULL;
+    g_autoptr(virJSONValue) mergebitmapsstore = NULL;
+
+    if (!(mergebitmaps = qemuBackupDiskPrepareOneBitmapsChain(incremental,
+                                                              dd->domdisk->src)))
+        return -1;
+
     if (!(mergebitmapsstore = virJSONValueCopy(mergebitmaps)))
         return -1;