diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-09-19 00:21:17 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-09-19 00:21:17 +0000 |
commit | 1a8af2e03edfe9bfbfbfd7d65623813f6e149476 (patch) | |
tree | f4036d4fa077e29852a8c6938dc7d7e73e562981 | |
parent | 1def743412a3a697243b757c0ce6d5786a9b3229 (diff) | |
parent | 9673be2201f020feb065e9378e19cec561d5cc08 (diff) | |
download | nova-1a8af2e03edfe9bfbfbfd7d65623813f6e149476.tar.gz |
Merge "Fixes NoneType vcpu list returned by Libvirt driver" into stable/havana
-rw-r--r-- | nova/tests/virt/libvirt/test_libvirt.py | 25 | ||||
-rw-r--r-- | nova/virt/libvirt/driver.py | 6 |
2 files changed, 28 insertions, 3 deletions
diff --git a/nova/tests/virt/libvirt/test_libvirt.py b/nova/tests/virt/libvirt/test_libvirt.py index cd69a83946..3b426cf0bb 100644 --- a/nova/tests/virt/libvirt/test_libvirt.py +++ b/nova/tests/virt/libvirt/test_libvirt.py @@ -5174,9 +5174,32 @@ class LibvirtConnTestCase(test.TestCase): conn.lookupByID(2).AndReturn(DiagFakeDomain(5)) self.mox.ReplayAll() - self.assertEqual(5, driver.get_vcpu_used()) + def test_failing_vcpu_count_none(self): + """Domain will return zero if the current number of vcpus used + is None. This is in case of VM state starting up or shutting + down. None type returned is counted as zero. + """ + + class DiagFakeDomain(object): + def __init__(self): + pass + + def vcpus(self): + return None + + driver = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) + conn = driver._conn + self.mox.StubOutWithMock(driver, 'list_instance_ids') + conn.lookupByID = self.mox.CreateMockAnything() + + driver.list_instance_ids().AndReturn([1]) + conn.lookupByID(1).AndReturn(DiagFakeDomain()) + + self.mox.ReplayAll() + self.assertEqual(0, 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 9abfedef4e..150024e3be 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -3454,7 +3454,7 @@ class LibvirtDriver(driver.ComputeDriver): def get_vcpu_used(self): """Get vcpu usage number of physical computer. - :returns: The total number of vcpu that currently used. + :returns: The total number of vcpu(s) that are currently being used. """ @@ -3473,7 +3473,9 @@ class LibvirtDriver(driver.ComputeDriver): " %(id)s, exception: %(ex)s") % {"id": dom_id, "ex": e}) else: - total += len(vcpus[1]) + if vcpus is not None and len(vcpus) > 1: + total += len(vcpus[1]) + except exception.InstanceNotFound: LOG.info(_("libvirt can't find a domain with id: %s") % dom_id) continue |