[libvirt] [PATCH] conf: Properly parse <backingStore/>

Peter Krempa posted 1 patch 6 years, 5 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/35f2b726d96661e4a207218d2fc20c09eca2e131.1510152416.git.pkrempa@redhat.com
src/conf/domain_conf.c                                     | 14 ++++++--------
.../qemuxml2xmlout-disk-active-commit.xml                  |  1 +
.../qemuxml2xmlout-disk-backing-chains-active.xml          |  3 +++
.../qemuxml2xmlout-disk-mirror-active.xml                  |  4 ++++
.../qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml  |  4 ++++
.../qemuxml2xmlout-seclabel-static-labelskip.xml           |  1 +
6 files changed, 19 insertions(+), 8 deletions(-)
[libvirt] [PATCH] conf: Properly parse <backingStore/>
Posted by Peter Krempa 6 years, 5 months ago
The terminator would not be parsed properly since the XPath selector was
looking for an populated element, and also the code did not bother
assigning the terminating virStorageSourcePtr to the backingStore
property of the parent.

Some tests would catch it if there wasn't bigger fallout from the change
to backing store termination in a693fdba0111. Fix them properly now.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1509110
---
 src/conf/domain_conf.c                                     | 14 ++++++--------
 .../qemuxml2xmlout-disk-active-commit.xml                  |  1 +
 .../qemuxml2xmlout-disk-backing-chains-active.xml          |  3 +++
 .../qemuxml2xmlout-disk-mirror-active.xml                  |  4 ++++
 .../qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml  |  4 ++++
 .../qemuxml2xmlout-seclabel-static-labelskip.xml           |  1 +
 6 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 7dfd7b54e..a1ca307c4 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8545,23 +8545,21 @@ virDomainDiskBackingStoreParse(xmlXPathContextPtr ctxt,
     char *idx = NULL;
     int ret = -1;

-    if (!(ctxt->node = virXPathNode("./backingStore[*]", ctxt))) {
+    if (!(ctxt->node = virXPathNode("./backingStore", ctxt))) {
         ret = 0;
         goto cleanup;
     }

-    if (!(type = virXMLPropString(ctxt->node, "type"))) {
-        /* terminator does not have a type */
-        if (VIR_ALLOC(backingStore) < 0)
-            goto cleanup;
+    if (VIR_ALLOC(backingStore) < 0)
+        goto cleanup;

+    /* terminator does not have a type */
+    if (!(type = virXMLPropString(ctxt->node, "type"))) {
+        VIR_STEAL_PTR(src->backingStore, backingStore);
         ret = 0;
         goto cleanup;
     }

-    if (VIR_ALLOC(backingStore) < 0)
-        goto cleanup;
-
     if (!(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) &&
         (idx = virXMLPropString(ctxt->node, "index")) &&
         virStrToLong_uip(idx, NULL, 10, &backingStore->id) < 0) {
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-active-commit.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-active-commit.xml
index 5766e4aea..cc26af109 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-active-commit.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-active-commit.xml
@@ -20,6 +20,7 @@
       <backingStore type='block' index='1'>
         <format type='raw'/>
         <source dev='/dev/HostVG/QEMUGuest1'/>
+        <backingStore/>
       </backingStore>
       <mirror type='block' job='active-commit'>
         <format type='raw'/>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-backing-chains-active.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-backing-chains-active.xml
index 828defcc2..d1fd2442c 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-backing-chains-active.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-backing-chains-active.xml
@@ -49,6 +49,7 @@
                 <backingStore type='file' index='6'>
                   <format type='raw'/>
                   <source file='/tmp/Fedora-17-x86_64-Live-KDE.iso'/>
+                  <backingStore/>
                 </backingStore>
               </backingStore>
             </backingStore>
@@ -63,6 +64,7 @@
       <source protocol='gluster' name='Volume1/Image'>
         <host name='example.org' port='6000'/>
       </source>
+      <backingStore/>
       <target dev='vdc' bus='virtio'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
     </disk>
@@ -79,6 +81,7 @@
       <backingStore type='file' index='1'>
         <format type='qcow2'/>
         <source file='/tmp/image.qcow'/>
+        <backingStore/>
       </backingStore>
       <target dev='vdd' bus='virtio'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-active.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-active.xml
index 252bde338..c1e8a33ec 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-active.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-active.xml
@@ -16,6 +16,7 @@
     <emulator>/usr/bin/qemu-system-i686</emulator>
     <disk type='block' device='disk'>
       <source dev='/dev/HostVG/QEMUGuest1'/>
+      <backingStore/>
       <mirror type='block' job='copy' ready='yes'>
         <source dev='/dev/HostVG/QEMUGuest1Copy'/>
       </mirror>
@@ -24,12 +25,14 @@
     </disk>
     <disk type='block' device='cdrom'>
       <source dev='/dev/HostVG/QEMUGuest2'/>
+      <backingStore/>
       <target dev='hdc' bus='ide'/>
       <readonly/>
       <address type='drive' controller='0' bus='1' target='0' unit='0'/>
     </disk>
     <disk type='file' device='disk'>
       <source file='/tmp/data.img'/>
+      <backingStore/>
       <mirror type='file' file='/tmp/copy.img' format='qcow2' job='copy'>
         <format type='qcow2'/>
         <source file='/tmp/copy.img'/>
@@ -39,6 +42,7 @@
     </disk>
     <disk type='file' device='disk'>
       <source file='/tmp/logs.img'/>
+      <backingStore/>
       <mirror type='file' file='/tmp/logcopy.img' format='qcow2' job='copy' ready='abort'>
         <format type='qcow2'/>
         <source file='/tmp/logcopy.img'/>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml
index f4bd39a58..e390bc02f 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml
@@ -16,6 +16,7 @@
     <emulator>/usr/bin/qemu-system-i686</emulator>
     <disk type='block' device='disk'>
       <source dev='/dev/HostVG/QEMUGuest1'/>
+      <backingStore/>
       <mirror type='file' file='/dev/HostVG/QEMUGuest1Copy' job='copy' ready='yes'>
         <source file='/dev/HostVG/QEMUGuest1Copy'/>
       </mirror>
@@ -24,12 +25,14 @@
     </disk>
     <disk type='block' device='cdrom'>
       <source dev='/dev/HostVG/QEMUGuest2'/>
+      <backingStore/>
       <target dev='hdc' bus='ide'/>
       <readonly/>
       <address type='drive' controller='0' bus='1' target='0' unit='0'/>
     </disk>
     <disk type='file' device='disk'>
       <source file='/tmp/data.img'/>
+      <backingStore/>
       <mirror type='file' file='/tmp/copy.img' format='qcow2' job='copy'>
         <format type='qcow2'/>
         <source file='/tmp/copy.img'/>
@@ -39,6 +42,7 @@
     </disk>
     <disk type='file' device='disk'>
       <source file='/tmp/logs.img'/>
+      <backingStore/>
       <target dev='vdb' bus='virtio'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </disk>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-seclabel-static-labelskip.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-seclabel-static-labelskip.xml
index 91f573db7..d37b950cb 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-seclabel-static-labelskip.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-seclabel-static-labelskip.xml
@@ -18,6 +18,7 @@
       <source dev='/dev/HostVG/QEMUGuest1'>
         <seclabel model='selinux' labelskip='yes'/>
       </source>
+      <backingStore/>
       <target dev='hda' bus='ide'/>
       <address type='drive' controller='0' bus='0' target='0' unit='0'/>
     </disk>
-- 
2.14.3

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] conf: Properly parse <backingStore/>
Posted by John Ferlan 6 years, 5 months ago

On 11/08/2017 09:46 AM, Peter Krempa wrote:
> The terminator would not be parsed properly since the XPath selector was
> looking for an populated element, and also the code did not bother
> assigning the terminating virStorageSourcePtr to the backingStore
> property of the parent.
> 
> Some tests would catch it if there wasn't bigger fallout from the change
> to backing store termination in a693fdba0111. Fix them properly now.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1509110
> ---
>  src/conf/domain_conf.c                                     | 14 ++++++--------
>  .../qemuxml2xmlout-disk-active-commit.xml                  |  1 +
>  .../qemuxml2xmlout-disk-backing-chains-active.xml          |  3 +++
>  .../qemuxml2xmlout-disk-mirror-active.xml                  |  4 ++++
>  .../qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml  |  4 ++++
>  .../qemuxml2xmlout-seclabel-static-labelskip.xml           |  1 +
>  6 files changed, 19 insertions(+), 8 deletions(-)
> 

FAIL: qemuhotplugtest
44) base-live+disk-scsi-wwn ATTACH disk-scsi-duplicate-wwn            ...
In
'/home/jferlan/git/libvirt.work/tests/qemuhotplugtestdomains/qemuhotplug-base-live+disk-scsi-wwn+disk-scsi-duplicate-wwn.xml':
Offset 693
Expect [t]
Actual [backingStore/>
      <t]

... ^[[31m^[[1mFAILED^[[0m

Once fixed,

Reviewed-by: John Ferlan <jferlan@redhat.com>

John

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list