render / rpms / libvirt

Forked from rpms/libvirt 10 months ago
Clone
7a3408
From fd2d738d9c12aeea42167e0de3662af5a64d93d5 Mon Sep 17 00:00:00 2001
7a3408
Message-Id: <fd2d738d9c12aeea42167e0de3662af5a64d93d5@dist-git>
7a3408
From: Peter Krempa <pkrempa@redhat.com>
7a3408
Date: Tue, 22 Sep 2015 16:59:41 +0200
7a3408
Subject: [PATCH] conf: Add XML parser flag that will allow us to do
7a3408
 incompatible updates
7a3408
7a3408
https://bugzilla.redhat.com/show_bug.cgi?id=1252685
7a3408
7a3408
Add a new parser flag that will mark code paths that parse XML files
7a3408
wich will not be used with existing VM state so that post parse
7a3408
callbacks can possibly do ABI incompatible changes if needed.
7a3408
7a3408
(cherry picked from commit 59173c3dd94fc090d2776be3986a1014ddbf2396)
7a3408
7a3408
Conflicts:
7a3408
	src/qemu/qemu_driver.c - context
7a3408
7a3408
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7a3408
---
7a3408
 src/conf/domain_conf.h    |  2 ++
7a3408
 src/qemu/qemu_driver.c    | 12 ++++++++----
7a3408
 src/qemu/qemu_migration.c |  3 ++-
7a3408
 3 files changed, 12 insertions(+), 5 deletions(-)
7a3408
7a3408
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
7a3408
index 63685c6..bac64b3 100644
7a3408
--- a/src/conf/domain_conf.h
7a3408
+++ b/src/conf/domain_conf.h
7a3408
@@ -2613,6 +2613,8 @@ typedef enum {
7a3408
     /* don't validate os.type and arch against capabilities. Prevents
7a3408
      * VMs from disappearing when qemu is removed and libvirtd is restarted */
7a3408
     VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS = 1 << 8,
7a3408
+    /* allow updates in post parse callback that would break ABI otherwise */
7a3408
+    VIR_DOMAIN_DEF_PARSE_ABI_UPDATE = 1 << 9,
7a3408
 } virDomainDefParseFlags;
7a3408
 
7a3408
 typedef enum {
7a3408
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
7a3408
index 0f3e987..f15b14a 100644
7a3408
--- a/src/qemu/qemu_driver.c
7a3408
+++ b/src/qemu/qemu_driver.c
7a3408
@@ -1714,7 +1714,8 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
7a3408
     unsigned int start_flags = VIR_QEMU_PROCESS_START_COLD;
7a3408
     virQEMUCapsPtr qemuCaps = NULL;
7a3408
     virCapsPtr caps = NULL;
7a3408
-    unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
7a3408
+    unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE |
7a3408
+                               VIR_DOMAIN_DEF_PARSE_ABI_UPDATE;
7a3408
 
7a3408
     virCheckFlags(VIR_DOMAIN_START_PAUSED |
7a3408
                   VIR_DOMAIN_START_AUTODESTROY |
7a3408
@@ -7179,7 +7180,8 @@ static char *qemuConnectDomainXMLToNative(virConnectPtr conn,
7a3408
         goto cleanup;
7a3408
 
7a3408
     def = virDomainDefParseString(xmlData, caps, driver->xmlopt,
7a3408
-                                  VIR_DOMAIN_DEF_PARSE_INACTIVE);
7a3408
+                                  VIR_DOMAIN_DEF_PARSE_INACTIVE |
7a3408
+                                  VIR_DOMAIN_DEF_PARSE_ABI_UPDATE);
7a3408
     if (!def)
7a3408
         goto cleanup;
7a3408
 
7a3408
@@ -7494,7 +7496,8 @@ static virDomainPtr qemuDomainDefineXMLFlags(virConnectPtr conn, const char *xml
7a3408
     virQEMUCapsPtr qemuCaps = NULL;
7a3408
     virQEMUDriverConfigPtr cfg;
7a3408
     virCapsPtr caps = NULL;
7a3408
-    unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
7a3408
+    unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE |
7a3408
+                               VIR_DOMAIN_DEF_PARSE_ABI_UPDATE;
7a3408
 
7a3408
     virCheckFlags(VIR_DOMAIN_DEFINE_VALIDATE, NULL);
7a3408
 
7a3408
@@ -8449,7 +8452,8 @@ static int qemuDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
7a3408
     virDomainDefPtr vmdef = NULL;
7a3408
     virDomainDeviceDefPtr dev = NULL, dev_copy = NULL;
7a3408
     int ret = -1;
7a3408
-    unsigned int affect, parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
7a3408
+    unsigned int affect, parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE |
7a3408
+                                       VIR_DOMAIN_DEF_PARSE_ABI_UPDATE;
7a3408
     virQEMUCapsPtr qemuCaps = NULL;
7a3408
     qemuDomainObjPrivatePtr priv;
7a3408
     virQEMUDriverConfigPtr cfg = NULL;
7a3408
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
7a3408
index 93f561f..cb82687 100644
7a3408
--- a/src/qemu/qemu_migration.c
7a3408
+++ b/src/qemu/qemu_migration.c
7a3408
@@ -1257,7 +1257,8 @@ qemuMigrationCookieXMLParse(qemuMigrationCookiePtr mig,
7a3408
         }
7a3408
         mig->persistent = virDomainDefParseNode(doc, nodes[0],
7a3408
                                                 caps, driver->xmlopt,
7a3408
-                                                VIR_DOMAIN_DEF_PARSE_INACTIVE);
7a3408
+                                                VIR_DOMAIN_DEF_PARSE_INACTIVE |
7a3408
+                                                VIR_DOMAIN_DEF_PARSE_ABI_UPDATE);
7a3408
         if (!mig->persistent) {
7a3408
             /* virDomainDefParseNode already reported
7a3408
              * an error for us */
7a3408
-- 
7a3408
2.5.3
7a3408