[libvirt] [RFC PATCH REBASE 04/10] backup: qemu: monitor: add drive-backup command

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Fri May 5 06:22:25 UTC 2017


---
 src/qemu/qemu_monitor.c      | 14 ++++++++++++++
 src/qemu/qemu_monitor.h      |  5 +++++
 src/qemu/qemu_monitor_json.c | 34 ++++++++++++++++++++++++++++++++++
 src/qemu/qemu_monitor_json.h |  5 +++++
 4 files changed, 58 insertions(+)

diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 1d40d52..934a2c8 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -4316,3 +4316,17 @@ qemuMonitorEventPanicInfoFree(qemuMonitorEventPanicInfoPtr info)
 
     VIR_FREE(info);
 }
+
+
+int
+qemuMonitorDriveBackup(virJSONValuePtr actions,
+                       const char *device, const char *target,
+                       const char *bitmap, const char *format,
+                       unsigned long long speed, bool reuse)
+{
+    VIR_DEBUG("actions=%p, device=%s, target=%s, bitmap=%s format=%s speed==%llu",
+              actions, device, target, bitmap, format, speed);
+
+    return qemuMonitorJSONDriveBackup(actions, device, target, bitmap, format,
+                                      speed, reuse);
+}
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 12f98be..f0196b8 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -1125,4 +1125,9 @@ int qemuMonitorSetBlockThreshold(qemuMonitorPtr mon,
 
 virJSONValuePtr qemuMonitorQueryNamedBlockNodes(qemuMonitorPtr mon);
 
+int qemuMonitorDriveBackup(virJSONValuePtr actions,
+                           const char *device, const char *target,
+                           const char *bitmap, const char *format,
+                           unsigned long long speed, bool reuse);
+
 #endif /* QEMU_MONITOR_H */
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 0837290..b3446ee 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -7647,5 +7647,39 @@ qemuMonitorJSONQueryNamedBlockNodes(qemuMonitorPtr mon)
     virJSONValueFree(cmd);
     virJSONValueFree(reply);
 
+  return ret;
+}
+
+
+int
+qemuMonitorJSONDriveBackup(virJSONValuePtr actions,
+                           const char *device, const char *target,
+                           const char *bitmap, const char *format,
+                           unsigned long long speed, bool reuse)
+{
+    int ret = -1;
+    virJSONValuePtr cmd;
+
+    cmd = qemuMonitorJSONMakeCommandRaw(true,
+                                        "drive-backup",
+                                        "s:device", device,
+                                        "s:target", target,
+                                        "S:bitmap", bitmap,
+                                        "s:sync", bitmap ? "incremental" : "full",
+                                        "S:format", format,
+                                        "Y:speed", speed,
+                                        "S:mode", reuse ? "existing" : NULL,
+                                        NULL);
+    if (!cmd)
+        return -1;
+
+    if (virJSONValueArrayAppend(actions, cmd) < 0)
+        goto cleanup;
+
+    ret = 0;
+    cmd = NULL;
+
+ cleanup:
+    virJSONValueFree(cmd);
     return ret;
 }
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
index d090d57..24c4fba 100644
--- a/src/qemu/qemu_monitor_json.h
+++ b/src/qemu/qemu_monitor_json.h
@@ -522,4 +522,9 @@ int qemuMonitorJSONSetBlockThreshold(qemuMonitorPtr mon,
 virJSONValuePtr qemuMonitorJSONQueryNamedBlockNodes(qemuMonitorPtr mon)
     ATTRIBUTE_NONNULL(1);
 
+int qemuMonitorJSONDriveBackup(virJSONValuePtr actions,
+                               const char *device, const char *target,
+                               const char *bitmap, const char *format,
+                               unsigned long long speed, bool reuse)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
 #endif /* QEMU_MONITOR_JSON_H */
-- 
1.8.3.1




More information about the libvir-list mailing list