]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: monitor: Add support for blockdev-backup via 'transaction'
authorPeter Krempa <pkrempa@redhat.com>
Fri, 27 Sep 2019 15:28:48 +0000 (17:28 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 10 Dec 2019 11:41:57 +0000 (12:41 +0100)
Implement the transaction actions generator for blockdev-backup.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.h
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_json.h
tests/qemumonitorjsontest.c

index a48305b046c643310fa2de12949d77979b789ed0..6e6678eb9bf987170b2f8f9f0649db3c16ef6436 100644 (file)
@@ -4615,3 +4615,16 @@ qemuMonitorTransactionSnapshotBlockdev(virJSONValuePtr actions,
 {
     return qemuMonitorJSONTransactionSnapshotBlockdev(actions, node, overlay);
 }
+
+
+int
+qemuMonitorTransactionBackup(virJSONValuePtr actions,
+                             const char *device,
+                             const char *jobname,
+                             const char *target,
+                             const char *bitmap,
+                             qemuMonitorTransactionBackupSyncMode syncmode)
+{
+    return qemuMonitorJSONTransactionBackup(actions, device, jobname, target,
+                                            bitmap, syncmode);
+}
index e2bfc420bb2170b6db9f1bb7a368c2045378483c..79e078fca422aa6e173870b72197983e90329274 100644 (file)
@@ -1392,3 +1392,18 @@ int
 qemuMonitorTransactionSnapshotBlockdev(virJSONValuePtr actions,
                                        const char *node,
                                        const char *overlay);
+
+typedef enum {
+    QEMU_MONITOR_TRANSACTION_BACKUP_SYNC_MODE_NONE = 0,
+    QEMU_MONITOR_TRANSACTION_BACKUP_SYNC_MODE_INCREMENTAL,
+    QEMU_MONITOR_TRANSACTION_BACKUP_SYNC_MODE_FULL,
+    QEMU_MONITOR_TRANSACTION_BACKUP_SYNC_MODE_LAST,
+} qemuMonitorTransactionBackupSyncMode;
+
+int
+qemuMonitorTransactionBackup(virJSONValuePtr actions,
+                             const char *device,
+                             const char *jobname,
+                             const char *target,
+                             const char *bitmap,
+                             qemuMonitorTransactionBackupSyncMode syncmode);
index 391f39668a4327ca53aeaeb6252c5740c4ce3b57..00e1d3ce1583ecf14e243b45305b75c467d909b8 100644 (file)
@@ -9198,6 +9198,35 @@ qemuMonitorJSONTransactionSnapshotBlockdev(virJSONValuePtr actions,
                                          NULL);
 }
 
+VIR_ENUM_DECL(qemuMonitorTransactionBackupSyncMode);
+VIR_ENUM_IMPL(qemuMonitorTransactionBackupSyncMode,
+              QEMU_MONITOR_TRANSACTION_BACKUP_SYNC_MODE_LAST,
+              "none",
+              "incremental",
+              "full");
+
+int
+qemuMonitorJSONTransactionBackup(virJSONValuePtr actions,
+                                 const char *device,
+                                 const char *jobname,
+                                 const char *target,
+                                 const char *bitmap,
+                                 qemuMonitorTransactionBackupSyncMode syncmode)
+{
+    const char *syncmodestr = qemuMonitorTransactionBackupSyncModeTypeToString(syncmode);
+
+    return qemuMonitorJSONTransactionAdd(actions,
+                                         "blockdev-backup",
+                                         "s:device", device,
+                                         "s:job-id", jobname,
+                                         "s:target", target,
+                                         "s:sync", syncmodestr,
+                                         "S:bitmap", bitmap,
+                                         "T:auto-finalize", VIR_TRISTATE_BOOL_YES,
+                                         "T:auto-dismiss", VIR_TRISTATE_BOOL_NO,
+                                         NULL);
+}
+
 
 static qemuMonitorJobInfoPtr
 qemuMonitorJSONGetJobInfoOne(virJSONValuePtr data)
index 25b568d6b0a48c06f3f0f63a95f1809de3bc87b2..5d05772fa2033500e1354440f8d25c86c64a1134 100644 (file)
@@ -667,3 +667,11 @@ int
 qemuMonitorJSONTransactionSnapshotBlockdev(virJSONValuePtr actions,
                                            const char *node,
                                            const char *overlay);
+
+int
+qemuMonitorJSONTransactionBackup(virJSONValuePtr actions,
+                                 const char *device,
+                                 const char *jobname,
+                                 const char *target,
+                                 const char *bitmap,
+                                 qemuMonitorTransactionBackupSyncMode syncmode);
index 21f17f42af8e67a641e2cd8ece37500e3ae01283..4f3bfad1d78a4e2e9ab38b849f7ecbd39a625372 100644 (file)
@@ -2962,7 +2962,13 @@ testQemuMonitorJSONTransaction(const void *opaque)
         qemuMonitorTransactionBitmapDisable(actions, "node4", "bitmap4") < 0 ||
         qemuMonitorTransactionBitmapMerge(actions, "node5", "bitmap5", &mergebitmaps) < 0 ||
         qemuMonitorTransactionSnapshotLegacy(actions, "dev6", "path", "qcow2", true) < 0 ||
-        qemuMonitorTransactionSnapshotBlockdev(actions, "node7", "overlay7") < 0)
+        qemuMonitorTransactionSnapshotBlockdev(actions, "node7", "overlay7") < 0 ||
+        qemuMonitorTransactionBackup(actions, "dev8", "job8", "target8", "bitmap8",
+                                     QEMU_MONITOR_TRANSACTION_BACKUP_SYNC_MODE_NONE) < 0 ||
+        qemuMonitorTransactionBackup(actions, "dev9", "job9", "target9", "bitmap9",
+                                     QEMU_MONITOR_TRANSACTION_BACKUP_SYNC_MODE_INCREMENTAL) < 0 ||
+        qemuMonitorTransactionBackup(actions, "devA", "jobA", "targetA", "bitmapA",
+                                     QEMU_MONITOR_TRANSACTION_BACKUP_SYNC_MODE_FULL) < 0)
         return -1;
 
     if (qemuMonitorTestAddItem(test, "transaction", "{\"return\":{}}") < 0)