render / rpms / libvirt

Forked from rpms/libvirt 9 months ago
Clone
9119d9
From 32637190ee1024b114635d1b9fd42a9367f7ad2d Mon Sep 17 00:00:00 2001
9119d9
Message-Id: <32637190ee1024b114635d1b9fd42a9367f7ad2d@dist-git>
9119d9
From: Peter Krempa <pkrempa@redhat.com>
9119d9
Date: Fri, 21 Nov 2014 15:04:10 +0100
9119d9
Subject: [PATCH] storage: Allow parsing of RBD backing strings when building
9119d9
 backing chain
9119d9
9119d9
https://bugzilla.redhat.com/show_bug.cgi?id=1164528
9119d9
9119d9
As we now have a common function to parse backing store string for RBD
9119d9
backing store we can reuse it in the backing store walker so that we
9119d9
don't fail on files backed by RBD storage.
9119d9
9119d9
This patch also adds a few tests to verify that the parsing works as
9119d9
expected.
9119d9
9119d9
(cherry picked from commit 930b77598b4a8481ad98c786e77e372dc6b803cc)
9119d9
9119d9
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
9119d9
---
9119d9
 src/util/virstoragefile.c |  6 +++++-
9119d9
 tests/virstoragetest.c    | 43 +++++++++++++++++++++++++++++++++++++++++++
9119d9
 2 files changed, 48 insertions(+), 1 deletion(-)
9119d9
9119d9
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
9119d9
index 94fb3cd..ba4d830 100644
9119d9
--- a/src/util/virstoragefile.c
9119d9
+++ b/src/util/virstoragefile.c
9119d9
@@ -2437,8 +2437,12 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src,
9119d9
             goto cleanup;
9119d9
         break;
9119d9
 
9119d9
-    case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
9119d9
     case VIR_STORAGE_NET_PROTOCOL_RBD:
9119d9
+        if (virStorageSourceParseRBDColonString(path, src) < 0)
9119d9
+            goto cleanup;
9119d9
+        break;
9119d9
+
9119d9
+    case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
9119d9
     case VIR_STORAGE_NET_PROTOCOL_LAST:
9119d9
     case VIR_STORAGE_NET_PROTOCOL_NONE:
9119d9
         virReportError(VIR_ERR_INTERNAL_ERROR,
9119d9
diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
9119d9
index ee6f576..2601edc 100644
9119d9
--- a/tests/virstoragetest.c
9119d9
+++ b/tests/virstoragetest.c
9119d9
@@ -972,6 +972,49 @@ mymain(void)
9119d9
                (&wrap, &qcow2), EXP_WARN,
9119d9
                (&wrap, &qcow2), ALLOW_PROBE | EXP_WARN);
9119d9
 
9119d9
+    /* Rewrite qcow2 to use an rbd: protocol as backend */
9119d9
+    virCommandFree(cmd);
9119d9
+    cmd = virCommandNewArgList(qemuimg, "rebase", "-u", "-f", "qcow2",
9119d9
+                               "-F", "raw", "-b", "rbd:testshare",
9119d9
+                               "qcow2", NULL);
9119d9
+    if (virCommandRun(cmd, NULL) < 0)
9119d9
+        ret = -1;
9119d9
+    qcow2.expBackingStoreRaw = "rbd:testshare";
9119d9
+
9119d9
+    /* Qcow2 file with backing protocol instead of file */
9119d9
+    testFileData rbd1 = {
9119d9
+        .path = "testshare",
9119d9
+        .type = VIR_STORAGE_TYPE_NETWORK,
9119d9
+        .format = VIR_STORAGE_FILE_RAW,
9119d9
+        .protocol = VIR_STORAGE_NET_PROTOCOL_RBD,
9119d9
+    };
9119d9
+    TEST_CHAIN(19, absqcow2, VIR_STORAGE_FILE_QCOW2,
9119d9
+               (&qcow2, &rbd1), EXP_PASS,
9119d9
+               (&qcow2, &rbd1), ALLOW_PROBE | EXP_PASS);
9119d9
+
9119d9
+    /* Rewrite qcow2 to use an rbd: protocol as backend */
9119d9
+    virCommandFree(cmd);
9119d9
+    cmd = virCommandNewArgList(qemuimg, "rebase", "-u", "-f", "qcow2",
9119d9
+                               "-F", "raw", "-b", "rbd:testshare:id=asdf:mon_host=example.com",
9119d9
+                               "qcow2", NULL);
9119d9
+    if (virCommandRun(cmd, NULL) < 0)
9119d9
+        ret = -1;
9119d9
+    qcow2.expBackingStoreRaw = "rbd:testshare:id=asdf:mon_host=example.com";
9119d9
+
9119d9
+    /* Qcow2 file with backing protocol instead of file */
9119d9
+    testFileData rbd2 = {
9119d9
+        .path = "testshare",
9119d9
+        .type = VIR_STORAGE_TYPE_NETWORK,
9119d9
+        .format = VIR_STORAGE_FILE_RAW,
9119d9
+        .protocol = VIR_STORAGE_NET_PROTOCOL_RBD,
9119d9
+        .secret = "asdf",
9119d9
+        .hostname = "example.com",
9119d9
+    };
9119d9
+    TEST_CHAIN(20, absqcow2, VIR_STORAGE_FILE_QCOW2,
9119d9
+               (&qcow2, &rbd2), EXP_PASS,
9119d9
+               (&qcow2, &rbd2), ALLOW_PROBE | EXP_PASS);
9119d9
+
9119d9
+
9119d9
     /* Rewrite wrap and qcow2 back to 3-deep chain, absolute backing */
9119d9
     virCommandFree(cmd);
9119d9
     cmd = virCommandNewArgList(qemuimg, "rebase", "-u", "-f", "qcow2",
9119d9
-- 
9119d9
2.1.3
9119d9