qemu: backup: Extract calculations of bitmaps to merge for incremental backup

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>
This commit is contained in:
Peter Krempa 2019-12-12 15:20:48 +01:00
parent d0e829e232
commit 3323e85bf6

View File

@ -170,6 +170,30 @@ qemuBackupDiskDataCleanup(virDomainObjPtr vm,
}
static virJSONValuePtr
qemuBackupDiskPrepareOneBitmapsChain(virDomainMomentDefPtr *incremental,
virStorageSourcePtr backingChain)
{
g_autoptr(virJSONValue) ret = NULL;
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(ret,
backingChain->nodeformat,
(*incremental)->name) < 0)
return NULL;
incremental++;
}
return g_steal_pointer(&ret);
}
static int
qemuBackupDiskPrepareOneBitmaps(struct qemuBackupDiskData *dd,
@ -179,21 +203,10 @@ qemuBackupDiskPrepareOneBitmaps(struct qemuBackupDiskData *dd,
g_autoptr(virJSONValue) mergebitmaps = NULL;
g_autoptr(virJSONValue) mergebitmapsstore = NULL;
if (!(mergebitmaps = virJSONValueNewArray()))
if (!(mergebitmaps = qemuBackupDiskPrepareOneBitmapsChain(incremental,
dd->domdisk->src)))
return -1;
/* 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,
(*incremental)->name) < 0)
return -1;
incremental++;
}
if (!(mergebitmapsstore = virJSONValueCopy(mergebitmaps)))
return -1;