[libvirt] [PATCH 01/24] qemu: monitor: Extract call of 'query-blockstats' and add new API for it

Peter Krempa pkrempa at redhat.com
Wed Jul 26 10:00:31 UTC 2017


Allow getting the raw data from query-blockstats, so that we can use it
to detect the backing chain later on.
---
 src/qemu/qemu_monitor.c      | 15 +++++++++++++++
 src/qemu/qemu_monitor.h      |  2 ++
 src/qemu/qemu_monitor_json.c | 44 +++++++++++++++++++++++++++++---------------
 src/qemu/qemu_monitor_json.h |  2 ++
 4 files changed, 48 insertions(+), 15 deletions(-)

diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 2b0afcc21..19082d8bf 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -2242,6 +2242,21 @@ qemuMonitorGetBlockInfo(qemuMonitorPtr mon)


 /**
+ * qemuMonitorQueryBlockstats:
+ * @mon: monitor object
+ *
+ * Returns data from a call to 'query-blockstats'.
+ */
+virJSONValuePtr
+qemuMonitorQueryBlockstats(qemuMonitorPtr mon)
+{
+    QEMU_CHECK_MONITOR_JSON_NULL(mon);
+
+    return qemuMonitorJSONQueryBlockstats(mon);
+}
+
+
+/**
  * qemuMonitorGetAllBlockStatsInfo:
  * @mon: monitor object
  * @ret_stats: pointer that is filled with a hash table containing the stats
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 1697db55c..31f7e97ba 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -523,6 +523,8 @@ int qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon,
 int qemuMonitorBlockIOStatusToError(const char *status);
 virHashTablePtr qemuMonitorGetBlockInfo(qemuMonitorPtr mon);

+virJSONValuePtr qemuMonitorQueryBlockstats(qemuMonitorPtr mon);
+
 typedef struct _qemuBlockStats qemuBlockStats;
 typedef qemuBlockStats *qemuBlockStatsPtr;
 struct _qemuBlockStats {
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 65b1fbb8e..b8a68154a 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -2061,34 +2061,49 @@ qemuMonitorJSONGetOneBlockStatsInfo(virJSONValuePtr dev,
 }


-int
-qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon,
-                                    virHashTablePtr hash,
-                                    bool backingChain)
+virJSONValuePtr
+qemuMonitorJSONQueryBlockstats(qemuMonitorPtr mon)
 {
-    int ret = -1;
-    int nstats = 0;
-    int rc;
-    size_t i;
     virJSONValuePtr cmd;
     virJSONValuePtr reply = NULL;
-    virJSONValuePtr devices;
+    virJSONValuePtr ret = NULL;

     if (!(cmd = qemuMonitorJSONMakeCommand("query-blockstats", NULL)))
-        return -1;
+        return NULL;

-    if ((rc = qemuMonitorJSONCommand(mon, cmd, &reply)) < 0)
+    if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
         goto cleanup;

     if (qemuMonitorJSONCheckError(cmd, reply) < 0)
         goto cleanup;

-    if (!(devices = virJSONValueObjectGetArray(reply, "return"))) {
+    if (!(ret = virJSONValueObjectStealArray(reply, "return"))) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("blockstats reply was missing device list"));
+                       _("query-blockstats reply was missing device list"));
         goto cleanup;
     }

+ cleanup:
+    virJSONValueFree(cmd);
+    virJSONValueFree(reply);
+    return ret;
+}
+
+
+int
+qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon,
+                                    virHashTablePtr hash,
+                                    bool backingChain)
+{
+    int ret = -1;
+    int nstats = 0;
+    int rc;
+    size_t i;
+    virJSONValuePtr devices;
+
+    if (!(devices = qemuMonitorJSONQueryBlockstats(mon)))
+        return -1;
+
     for (i = 0; i < virJSONValueArraySize(devices); i++) {
         virJSONValuePtr dev = virJSONValueArrayGet(devices, i);
         const char *dev_name;
@@ -2120,8 +2135,7 @@ qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon,
     ret = nstats;

  cleanup:
-    virJSONValueFree(cmd);
-    virJSONValueFree(reply);
+    virJSONValueFree(devices);
     return ret;
 }

diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
index d090d5709..7462967b5 100644
--- a/src/qemu/qemu_monitor_json.h
+++ b/src/qemu/qemu_monitor_json.h
@@ -81,6 +81,8 @@ int qemuMonitorJSONSetMemoryStatsPeriod(qemuMonitorPtr mon,
                                         int period);
 int qemuMonitorJSONGetBlockInfo(qemuMonitorPtr mon,
                                 virHashTablePtr table);
+
+virJSONValuePtr qemuMonitorJSONQueryBlockstats(qemuMonitorPtr mon);
 int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitorPtr mon,
                                         virHashTablePtr hash,
                                         bool backingChain);
-- 
2.13.2




More information about the libvir-list mailing list