diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-01-23 18:37:10 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-01-23 18:37:10 +0000 |
| commit | 4573344edffb285717e23f70823a4f7068d5a952 (patch) | |
| tree | fd0e1ee0cbc017843b29a830d21b36bcda660ef3 | |
| parent | 9159e3be63b45aedaab83d5e92149779e4823807 (diff) | |
| parent | 67376d34ed6bf68b15ac87ef444887cbc27dc6b0 (diff) | |
| download | nova-4573344edffb285717e23f70823a4f7068d5a952.tar.gz nova-4573344edffb285717e23f70823a4f7068d5a952.tar.xz nova-4573344edffb285717e23f70823a4f7068d5a952.zip | |
Merge "Map libvirt error to InstanceNotFound in get_instance_disk_info"
| -rw-r--r-- | nova/tests/test_libvirt.py | 19 | ||||
| -rw-r--r-- | nova/virt/libvirt/driver.py | 10 |
2 files changed, 28 insertions, 1 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index 75e758cde..f96536893 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -4747,6 +4747,25 @@ class LibvirtDriverTestCase(test.TestCase): self.libvirtconnection._cleanup_resize(ins_ref, _fake_network_info(self.stubs, 1)) + def test_get_instance_disk_info_exception(self): + instance_name = "fake-instance-name" + + class FakeExceptionDomain(FakeVirtDomain): + def __init__(self): + super(FakeExceptionDomain, self).__init__() + + def XMLDesc(self, *args): + raise libvirt.libvirtError("Libvirt error") + + def fake_lookup_by_name(instance_name): + return FakeExceptionDomain() + + self.stubs.Set(self.libvirtconnection, '_lookup_by_name', + fake_lookup_by_name) + self.assertRaises(exception.InstanceNotFound, + self.libvirtconnection.get_instance_disk_info, + instance_name) + class LibvirtVolumeUsageTestCase(test.TestCase): """Test for nova.virt.libvirt.libvirt_driver.LibvirtDriver diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index e4da5cbde..7439ad40a 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -2831,7 +2831,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') |
