summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-09-19 00:21:17 +0000
committerGerrit Code Review <review@openstack.org>2014-09-19 00:21:17 +0000
commit1a8af2e03edfe9bfbfbfd7d65623813f6e149476 (patch)
treef4036d4fa077e29852a8c6938dc7d7e73e562981
parent1def743412a3a697243b757c0ce6d5786a9b3229 (diff)
parent9673be2201f020feb065e9378e19cec561d5cc08 (diff)
downloadnova-1a8af2e03edfe9bfbfbfd7d65623813f6e149476.tar.gz
Merge "Fixes NoneType vcpu list returned by Libvirt driver" into stable/havana
-rw-r--r--nova/tests/virt/libvirt/test_libvirt.py25
-rw-r--r--nova/virt/libvirt/driver.py6
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