]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: block: Add code to fetch block node data by node name
authorPeter Krempa <pkrempa@redhat.com>
Thu, 16 Mar 2017 11:30:16 +0000 (12:30 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 27 Mar 2017 08:35:19 +0000 (10:35 +0200)
To allow updating stats based on the node name, add a helper function
that will fetch the required data from 'query-named-block-nodes' and
return it in hash table for easy lookup.

src/qemu/qemu_block.c
src/qemu/qemu_block.h

index e3190784212d5f43aee9bd859e82820bcd0b39ff..586d56809dc5f0d95503b6f05643fc84394b1c53 100644 (file)
@@ -380,3 +380,49 @@ qemuBlockNodeNamesDetect(virQEMUDriverPtr driver,
 
     return ret;
 }
+
+
+static int
+qemuBlockFillNodeData(size_t pos ATTRIBUTE_UNUSED,
+                      virJSONValuePtr item,
+                      void *opaque)
+{
+    virHashTablePtr table = opaque;
+    const char *name;
+
+    if (!(name = virJSONValueObjectGetString(item, "node-name")))
+        return 1;
+
+    if (virHashAddEntry(table, name, item) < 0)
+        return -1;
+
+    return 0;
+}
+
+
+/**
+ * qemuBlockGetNodeData:
+ * @data: JSON object returned from query-named-block-nodes
+ *
+ * Returns a hash table organized by the node name of the JSON value objects of
+ * data for given qemu block nodes.
+ *
+ * Returns a filled virHashTablePtr on success NULL on error.
+ */
+virHashTablePtr
+qemuBlockGetNodeData(virJSONValuePtr data)
+{
+    virHashTablePtr ret = NULL;
+
+    if (!(ret = virHashCreate(50, virJSONValueHashFree)))
+        return NULL;
+
+    if (virJSONValueArrayForeachSteal(data, qemuBlockFillNodeData, ret) < 0)
+        goto error;
+
+    return ret;
+
+ error:
+    virHashFree(ret);
+    return NULL;
+}
index 56f4a74dd913fc864373f3720d75b401a2f48854..9d6a24643537ef6f20d34e278b861c375153cb46 100644 (file)
@@ -48,4 +48,7 @@ int
 qemuBlockNodeNamesDetect(virQEMUDriverPtr driver,
                          virDomainObjPtr vm);
 
+virHashTablePtr
+qemuBlockGetNodeData(virJSONValuePtr data);
+
 #endif /* __QEMU_BLOCK_H__ */