On 04/21/2011 09:07 PM, KAMEZAWA Hiroyuki wrote:
Rebased ont the latest git tree, which makes this work easier.
s/ont/onto/
This series adds support for attach/detach/update disks of domain
config.
==
This patch adds functions for modify domain's persistent definition.
To do error recovery in easy way, we use a copy of vmdef and update it.
The whole sequence will be:
make a copy of domain definition.
if (flags & MODIFY_CONFIG)
update copied domain definition
if (flags & MODIF_LIVE)
do hotplug.
if (no error)
save copied one to the file and update cached definition.
else
discard copied definition.
This patch is mixuture of Eric Blake's work and mine.
From: Eric Blake <eblake(a)redhat.com>
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu(a)jp.fujitsu.com>
Changelog: v11 -> v12
- rebased and fixed hunks.
- renamed qemudDomain....to qemuDomain...
(virDomainObjCopyPersistentDef): make a copy of persistent vm definition
(qemuDomainAttach/Detach/UpdateDeviceConfig) : callbacks. now empty
(qemuDomainModifyDeviceFlags): add support for MODIFY_CONFIG and MODIFY_CURRENT
---
src/conf/domain_conf.c | 18 ++++++
src/conf/domain_conf.h | 3 +
src/libvirt_private.syms | 1 +
src/qemu/qemu_driver.c | 147 ++++++++++++++++++++++++++++++++++++----------
4 files changed, 137 insertions(+), 32 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 381e692..6c1098a 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -9509,3 +9509,21 @@ cleanup:
return ret;
}
+
+
+virDomainDefPtr
+virDomainObjCopyPersistentDef(virCapsPtr caps, virDomainObjPtr dom)
+{
+ char *xml;
+ virDomainDefPtr cur, ret;
+
+ cur = virDomainObjGetPersistentDef(caps, dom);
+
+ xml = virDomainDefFormat(cur, VIR_DOMAIN_XML_WRITE_FLAGS);
+ if (!xml)
+ return NULL;
+
+ ret = virDomainDefParseString(caps, xml, VIR_DOMAIN_XML_READ_FLAGS);
Cute. Maybe not the most efficient, but very compact addition :)
+
+ return ret;
But, it leaks xml.
+}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 6ea30b9..ddf111a 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1288,6 +1288,9 @@ int virDomainObjSetDefTransient(virCapsPtr caps,
virDomainDefPtr
virDomainObjGetPersistentDef(virCapsPtr caps,
virDomainObjPtr domain);
+virDomainDefPtr
+virDomainObjCopyPersistentDef(virCapsPtr caps, virDomainObjPtr dom);
+
void virDomainRemoveInactive(virDomainObjListPtr doms,
virDomainObjPtr dom);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index ba7739d..f732431 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -287,6 +287,7 @@ virDomainMemballoonModelTypeToString;
virDomainNetDefFree;
virDomainNetTypeToString;
virDomainObjAssignDef;
+virDomainObjCopyPersistentDef;
virDomainObjSetDefTransient;
virDomainObjGetPersistentDef;
Pre-existing unsorted line.
Beyond that, it looks right to me. ACK!
I squashed this in, then pushed.
diff --git i/src/conf/domain_conf.c w/src/conf/domain_conf.c
index 2d413e7..691e50e 100644
--- i/src/conf/domain_conf.c
+++ w/src/conf/domain_conf.c
@@ -9526,5 +9526,6 @@ virDomainObjCopyPersistentDef(virCapsPtr caps,
virDomainObjPtr dom)
ret = virDomainDefParseString(caps, xml, VIR_DOMAIN_XML_READ_FLAGS);
+ VIR_FREE(xml);
return ret;
}
diff --git i/src/libvirt_private.syms w/src/libvirt_private.syms
index 52d7b02..579c62f 100644
--- i/src/libvirt_private.syms
+++ w/src/libvirt_private.syms
@@ -288,7 +288,6 @@ virDomainNetDefFree;
virDomainNetTypeToString;
virDomainObjAssignDef;
virDomainObjCopyPersistentDef;
-virDomainObjSetDefTransient;
virDomainObjGetPersistentDef;
virDomainObjIsDuplicate;
virDomainObjListDeinit;
@@ -298,6 +297,7 @@ virDomainObjListInit;
virDomainObjListNumOfDomains;
virDomainObjLock;
virDomainObjRef;
+virDomainObjSetDefTransient;
virDomainObjUnlock;
virDomainObjUnref;
virDomainRemoveInactive;
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org