]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: Allow parsing of RBD backing strings when building backing chain
authorPeter Krempa <pkrempa@redhat.com>
Tue, 4 Nov 2014 16:35:16 +0000 (17:35 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 21 Nov 2014 13:37:02 +0000 (14:37 +0100)
As we now have a common function to parse backing store string for RBD
backing store we can reuse it in the backing store walker so that we
don't fail on files backed by RBD storage.

This patch also adds a few tests to verify that the parsing works as
expected.

src/util/virstoragefile.c
tests/virstoragetest.c

index 8d831b10ccbfbac41df8ee8b2cf49c6609c27e71..a2e544a036b3102c81dc212777b7d99397017f9a 100644 (file)
@@ -2458,8 +2458,12 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src,
             goto cleanup;
         break;
 
-    case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
     case VIR_STORAGE_NET_PROTOCOL_RBD:
+        if (virStorageSourceParseRBDColonString(path, src) < 0)
+            goto cleanup;
+        break;
+
+    case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
     case VIR_STORAGE_NET_PROTOCOL_LAST:
     case VIR_STORAGE_NET_PROTOCOL_NONE:
         virReportError(VIR_ERR_INTERNAL_ERROR,
index ee6f576df9e893d31d42210fd5b789c2bfc6d827..2601edc93b925273db30f19da0d326da91bf221a 100644 (file)
@@ -972,6 +972,49 @@ mymain(void)
                (&wrap, &qcow2), EXP_WARN,
                (&wrap, &qcow2), ALLOW_PROBE | EXP_WARN);
 
+    /* Rewrite qcow2 to use an rbd: protocol as backend */
+    virCommandFree(cmd);
+    cmd = virCommandNewArgList(qemuimg, "rebase", "-u", "-f", "qcow2",
+                               "-F", "raw", "-b", "rbd:testshare",
+                               "qcow2", NULL);
+    if (virCommandRun(cmd, NULL) < 0)
+        ret = -1;
+    qcow2.expBackingStoreRaw = "rbd:testshare";
+
+    /* Qcow2 file with backing protocol instead of file */
+    testFileData rbd1 = {
+        .path = "testshare",
+        .type = VIR_STORAGE_TYPE_NETWORK,
+        .format = VIR_STORAGE_FILE_RAW,
+        .protocol = VIR_STORAGE_NET_PROTOCOL_RBD,
+    };
+    TEST_CHAIN(19, absqcow2, VIR_STORAGE_FILE_QCOW2,
+               (&qcow2, &rbd1), EXP_PASS,
+               (&qcow2, &rbd1), ALLOW_PROBE | EXP_PASS);
+
+    /* Rewrite qcow2 to use an rbd: protocol as backend */
+    virCommandFree(cmd);
+    cmd = virCommandNewArgList(qemuimg, "rebase", "-u", "-f", "qcow2",
+                               "-F", "raw", "-b", "rbd:testshare:id=asdf:mon_host=example.com",
+                               "qcow2", NULL);
+    if (virCommandRun(cmd, NULL) < 0)
+        ret = -1;
+    qcow2.expBackingStoreRaw = "rbd:testshare:id=asdf:mon_host=example.com";
+
+    /* Qcow2 file with backing protocol instead of file */
+    testFileData rbd2 = {
+        .path = "testshare",
+        .type = VIR_STORAGE_TYPE_NETWORK,
+        .format = VIR_STORAGE_FILE_RAW,
+        .protocol = VIR_STORAGE_NET_PROTOCOL_RBD,
+        .secret = "asdf",
+        .hostname = "example.com",
+    };
+    TEST_CHAIN(20, absqcow2, VIR_STORAGE_FILE_QCOW2,
+               (&qcow2, &rbd2), EXP_PASS,
+               (&qcow2, &rbd2), ALLOW_PROBE | EXP_PASS);
+
+
     /* Rewrite wrap and qcow2 back to 3-deep chain, absolute backing */
     virCommandFree(cmd);
     cmd = virCommandNewArgList(qemuimg, "rebase", "-u", "-f", "qcow2",