diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-03-12 11:45:59 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-03-12 11:45:59 +0000 |
| commit | 562b0787421b145c4a91ccbbcacfc74c340cead8 (patch) | |
| tree | 96024250aa2184f86135e2fdf45ade64121d0925 | |
| parent | ae251b99a3fb6aa99ec8898152d79dfa2c026a92 (diff) | |
| parent | f97f6214dac7951cb4d91bf24e9ceb3a43e65938 (diff) | |
| download | nova-562b0787421b145c4a91ccbbcacfc74c340cead8.tar.gz nova-562b0787421b145c4a91ccbbcacfc74c340cead8.tar.xz nova-562b0787421b145c4a91ccbbcacfc74c340cead8.zip | |
Merge "Handle vcpu counting failures gracefully"
| -rw-r--r-- | nova/tests/test_libvirt.py | 29 | ||||
| -rwxr-xr-x | nova/virt/libvirt/driver.py | 6 |
2 files changed, 34 insertions, 1 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index 55b6aaec4..3e379a292 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -3532,6 +3532,35 @@ class LibvirtConnTestCase(test.TestCase): } self.assertEqual(actual, expect) + def test_failing_vcpu_count(self): + """Domain can fail to return the vcpu description in case it's + just starting up or shutting down. Make sure None is handled + gracefully. + """ + + class DiagFakeDomain(object): + def __init__(self, vcpus): + self._vcpus = vcpus + + def vcpus(self): + if self._vcpus is None: + return None + else: + return ([1] * self._vcpus, [True] * self._vcpus) + + driver = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) + conn = driver._conn + self.mox.StubOutWithMock(driver, 'list_instance_ids') + self.mox.StubOutWithMock(conn, 'lookupByID') + + driver.list_instance_ids().AndReturn([1, 2]) + conn.lookupByID(1).AndReturn(DiagFakeDomain(None)) + conn.lookupByID(2).AndReturn(DiagFakeDomain(5)) + + self.mox.ReplayAll() + + self.assertEqual(5, driver.get_vcpu_used()) + def test_get_instance_capabilities(self): conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 5e6b0e742..e7e6b716f 100755 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -2563,7 +2563,11 @@ class LibvirtDriver(driver.ComputeDriver): try: dom = self._conn.lookupByID(dom_id) vcpus = dom.vcpus() - total += len(vcpus[1]) + if vcpus is None: + LOG.debug(_("couldn't obtain the vpu count from domain id:" + " %s") % dom_id) + else: + total += len(vcpus[1]) except libvirt.libvirtError as err: if err.get_error_code() == libvirt.VIR_ERR_NO_DOMAIN: LOG.debug(_("List of domains returned by libVirt: %s") |
