[libvirt] [PATCH 09/10] qemu: block: refactor and rename qemuBuildGlusterDriveJSONHosts

Peter Krempa pkrempa at redhat.com
Mon Jul 10 12:07:41 UTC 2017


New name is qemuBlockStorageSourceBuildHostsJSONSocketAddress since it
formats the JSON object in accordance with qemu's SocketAddress type.

Since the new naming in qemu uses 'inet' instead of 'tcp' add a
compatibility layer for gluster which uses the old name.
---
 src/qemu/qemu_block.c | 42 ++++++++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index 3dbb5586d..73f209060 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -430,9 +430,17 @@ qemuBlockGetNodeData(virJSONValuePtr data)
 }


-/* builds the hosts array */
+/**
+ * qemuBlockStorageSourceBuildHostsJSONSocketAddress:
+ * @src: disk storage source
+ * @legacy: use 'tcp' instead of 'inet' for compatibility reasons
+ *
+ * Formats src->hosts into a json object conforming to the 'SocketAddress' type
+ * in qemu.
+ */
 static virJSONValuePtr
-qemuBuildGlusterDriveJSONHosts(virStorageSourcePtr src)
+qemuBlockStorageSourceBuildHostsJSONSocketAddress(virStorageSourcePtr src,
+                                                  bool legacy)
 {
     virJSONValuePtr servers = NULL;
     virJSONValuePtr server = NULL;
@@ -446,24 +454,27 @@ qemuBuildGlusterDriveJSONHosts(virStorageSourcePtr src)

     for (i = 0; i < src->nhosts; i++) {
         host = src->hosts + i;
-        transport = virStorageNetHostTransportTypeToString(host->transport);
-
-        if (virJSONValueObjectCreate(&server, "s:type", transport, NULL) < 0)
-            goto cleanup;

         switch ((virStorageNetHostTransport) host->transport) {
         case VIR_STORAGE_NET_HOST_TRANS_TCP:
-            if (virJSONValueObjectAdd(server,
-                                      "s:host", host->name,
-                                      "s:port", host->port,
-                                      NULL) < 0)
+            if (legacy)
+                transport = "tcp";
+            else
+                transport = "inet";
+
+            if (virJSONValueObjectCreate(&server,
+                                         "s:type", transport,
+                                         "s:host", host->name,
+                                         "s:port", host->port,
+                                         NULL) < 0)
                 goto cleanup;
             break;

         case VIR_STORAGE_NET_HOST_TRANS_UNIX:
-            if (virJSONValueObjectAdd(server,
-                                      "s:socket", host->socket,
-                                      NULL) < 0)
+            if (virJSONValueObjectCreate(&server,
+                                         "s:type", "unix",
+                                         "s:socket", host->socket,
+                                         NULL) < 0)
                 goto cleanup;
             break;

@@ -481,8 +492,7 @@ qemuBuildGlusterDriveJSONHosts(virStorageSourcePtr src)
         server = NULL;
     }

-    ret = servers;
-    servers = NULL;
+    VIR_STEAL_PTR(ret, servers);

  cleanup:
     virJSONValueFree(servers);
@@ -499,7 +509,7 @@ qemuBuildGlusterDriveJSON(virStorageSourcePtr src)
     virJSONValuePtr servers = NULL;
     virJSONValuePtr ret = NULL;

-    if (!(servers = qemuBuildGlusterDriveJSONHosts(src)))
+    if (!(servers = qemuBlockStorageSourceBuildHostsJSONSocketAddress(src, true)))
         return NULL;

      /* { driver:"gluster",
-- 
2.12.2




More information about the libvir-list mailing list