Change in vdsm[master]: Refactor updateVmPolicy to use DOM manipulation
msivak at redhat.com
msivak at redhat.com
Wed Jun 18 12:05:36 UTC 2014
Martin Sivák has uploaded a new change for review.
Change subject: Refactor updateVmPolicy to use DOM manipulation
......................................................................
Refactor updateVmPolicy to use DOM manipulation
Change-Id: I475a70269c1f32e10f379b0743cfeefe642d4afd
Signed-off-by: Martin Sivak <msivak at redhat.com>
---
M vdsm/virt/vm.py
1 file changed, 52 insertions(+), 15 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/95/28895/1
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index ed4ac47..fb4f5f7 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -3700,24 +3700,25 @@
msg="updateVmPolicy got an empty policy.")
#
+ # Get the current QoS block
+ qos = self._getVmPolicy()
+ metadata_modified = False
+
+ #
# Process provided properties, remove property after it is processed
if 'vcpuLimit' in params:
- try:
- self._dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT,
- '<qos><vcpulimit>' +
- params['vcpuLimit'] +
- '</vcpulimit></qos>', 'ovirt',
- METADATA_VM_TUNE_URI, 0)
- except libvirt.libvirtError as e:
- self.log.exception("updateVmPolicy failed")
- if e.get_error_code() == libvirt.VIR_ERR_NO_DOMAIN:
- return errCode['noVM']
- else:
- return self._reportError(key='updateVmPolicyErr',
- msg=e.message)
- else:
- del params['vcpuLimit']
+ # Remove old value
+ vcpuLimit = qos.getElementsByTagName("vcpuLimit")
+ if vcpuLimit:
+ qos.removeChild(vcpuLimit[0])
+
+ vcpuLimit = XMLElement("vcpuLimit")
+ vcpuLimit.appendTextNode(str(params["vcpuLimit"]))
+ qos.appendChild(vcpuLimit)
+
+ metadata_modified = True
+ del params['vcpuLimit']
# Check remaining fields in params and report the list of unsupported
# params to the log
@@ -3726,8 +3727,44 @@
self.log.warn("updateVmPolicy got unknown parameters: %s",
", ".join(params.iterkeys()))
+ #
+ # Save modified metadata
+
+ if metadata_modified:
+ metadata_xml = qos.toprettyxml()
+
+ try:
+ self._dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT,
+ metadata_xml, 'ovirt',
+ METADATA_VM_TUNE_URI, 0)
+ except libvirt.libvirtError as e:
+ self.log.exception("updateVmPolicy failed")
+ if e.get_error_code() == libvirt.VIR_ERR_NO_DOMAIN:
+ return errCode['noVM']
+ else:
+ return self._reportError(key='updateVmPolicyErr',
+ msg=e.message)
+
return {'status': doneCode}
+ def _getVmPolicy(self):
+ #
+ # Get the current QoS block
+ metadata_xml = "<qos></qos>"
+
+ try:
+ metadata_xml = self._dom.metadata(
+ libvirt.VIR_DOMAIN_METADATA_ELEMENT,
+ METADATA_VM_TUNE_URI, 0)
+ except libvirt.libvirtError as e:
+ if e.get_error_code() != libvirt.VIR_ERR_NO_DOMAIN_METADATA:
+ return self._reportException(key='updateVmPolicyErr',
+ msg=e.message)
+
+ metadata = xml.dom.minidom.parseString(metadata_xml)
+ qos = metadata.getElementsByTagName("qos")[0]
+ return qos
+
def setIoTune(self, tunables):
for io_tune_change in tunables:
device_name = io_tune_change.get('name', None)
--
To view, visit http://gerrit.ovirt.org/28895
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I475a70269c1f32e10f379b0743cfeefe642d4afd
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Martin Sivák <msivak at redhat.com>
More information about the vdsm-patches
mailing list