From 67376d34ed6bf68b15ac87ef444887cbc27dc6b0 Mon Sep 17 00:00:00 2001 From: Wangpan Date: Wed, 9 Jan 2013 19:33:43 +0800 Subject: 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 --- nova/virt/libvirt/driver.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'nova/virt') 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') -- cgit