summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorWangpan <hzwangpan@corp.netease.com>2013-01-09 19:33:43 +0800
committerWangpan <hzwangpan@corp.netease.com>2013-01-10 11:43:12 +0800
commit67376d34ed6bf68b15ac87ef444887cbc27dc6b0 (patch)
treeaec69d3759bd5eaaae2b9f1d44a6dff9cc90e831 /nova/virt
parent5a87a506420c31a9490fccc7eac3f02e834ef9bc (diff)
Map libvirt error to InstanceNotFound in get_instance_disk_info
When getting instance disk info, the instance may be destroyed/deleted, and a libvirtError will be raised in XMLDesc method, so catching and mapping it to InstanceNotFound and the caller can handle it correctly. Fixes bug #1064581 Change-Id: I07fed3e82e10dad4cb84ae5c8650ada351c24e78
Diffstat (limited to 'nova/virt')
-rw-r--r--nova/virt/libvirt/driver.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 1f75c7ee2..32a7cc1ef 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -2763,7 +2763,15 @@ class LibvirtDriver(driver.ComputeDriver):
disk_info = []
virt_dom = self._lookup_by_name(instance_name)
- xml = virt_dom.XMLDesc(0)
+ try:
+ xml = virt_dom.XMLDesc(0)
+ except libvirt.libvirtError as ex:
+ error_code = ex.get_error_code()
+ msg = _("Error from libvirt while getting description of "
+ "%(instance_name)s: [Error Code %(error_code)s] "
+ "%(ex)s") % locals()
+ LOG.warn(msg)
+ raise exception.InstanceNotFound(instance_id=instance_name)
doc = etree.fromstring(xml)
disk_nodes = doc.findall('.//devices/disk')
path_nodes = doc.findall('.//devices/disk/source')