From 81e50b746b4d35f98b0f86c46c6b9ec3c4ee6442 Mon Sep 17 00:00:00 2001 From: Jian Wen Date: Thu, 16 May 2013 01:45:57 +0800 Subject: libvirt: Catch VIR_ERR_NO_DOMAIN in list_instances Commit 25f50d9a didn't catch the exact exception for looking up deleted domain. Partly fixes LP Bug #1032741. Change-Id: I6c6f7d8a736c833488b6cb8e00530dc4138f1424 --- nova/tests/test_libvirt.py | 4 ++++ nova/virt/libvirt/driver.py | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index b482ea8c9..93bd4b450 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -1072,6 +1072,10 @@ class LibvirtConnTestCase(test.TestCase): libvirt_driver.LibvirtDriver._conn.listDomainsID = lambda: [0, 1] libvirt_driver.LibvirtDriver._conn.listDefinedDomains = lambda: [] + self.mox.StubOutWithMock(libvirt.libvirtError, "get_error_code") + libvirt.libvirtError.get_error_code().AndReturn( + libvirt.VIR_ERR_NO_DOMAIN) + self.mox.ReplayAll() conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) instances = conn.list_instances() diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 6af67bde5..175a3efae 100755 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -673,9 +673,10 @@ class LibvirtDriver(driver.ComputeDriver): if domain_id != 0: domain = self._conn.lookupByID(domain_id) names.append(domain.name()) - except libvirt.libvirtError: - # Instance was deleted while listing... ignore it - pass + except libvirt.libvirtError as e: + if e.get_error_code() != libvirt.VIR_ERR_NO_DOMAIN: + # Ignore deleted instance while listing + raise # extend instance list to contain also defined domains names.extend([vm for vm in self._conn.listDefinedDomains() -- cgit