summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/tests/fakelibvirt.py3
-rw-r--r--nova/tests/test_libvirt.py3
-rw-r--r--nova/virt/libvirt/driver.py16
3 files changed, 17 insertions, 5 deletions
diff --git a/nova/tests/fakelibvirt.py b/nova/tests/fakelibvirt.py
index 4350a8878..d533760b9 100644
--- a/nova/tests/fakelibvirt.py
+++ b/nova/tests/fakelibvirt.py
@@ -478,6 +478,9 @@ class Connection(object):
node_cores,
node_threads]
+ def numOfDomains(self):
+ return len(self._running_vms)
+
def listDomainsID(self):
return self._running_vms.keys()
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index 55e8286ad..55163b4c4 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -759,6 +759,7 @@ class LibvirtConnTestCase(test.TestCase):
def test_list_instances(self):
self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, '_conn')
libvirt_driver.LibvirtDriver._conn.lookupByID = self.fake_lookup
+ libvirt_driver.LibvirtDriver._conn.numOfDomains = lambda: 2
libvirt_driver.LibvirtDriver._conn.listDomainsID = lambda: [0, 1]
self.mox.ReplayAll()
@@ -810,6 +811,7 @@ class LibvirtConnTestCase(test.TestCase):
return FakeVirtDomain(xml[id])
self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, '_conn')
+ libvirt_driver.LibvirtDriver._conn.numOfDomains = lambda: 4
libvirt_driver.LibvirtDriver._conn.listDomainsID = lambda: range(4)
libvirt_driver.LibvirtDriver._conn.lookupByID = fake_lookup
@@ -869,6 +871,7 @@ class LibvirtConnTestCase(test.TestCase):
return FakeVirtDomain(xml[1])
self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, '_conn')
+ libvirt_driver.LibvirtDriver._conn.numOfDomains = lambda: 4
libvirt_driver.LibvirtDriver._conn.listDomainsID = lambda: range(4)
libvirt_driver.LibvirtDriver._conn.lookupByID = fake_lookup
libvirt_driver.LibvirtDriver._conn.lookupByName = fake_lookup_name
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 96ae61d70..1c9a755bf 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -390,9 +390,15 @@ class LibvirtDriver(driver.ComputeDriver):
except libvirt.libvirtError:
return False
+ # TODO(Shrews): Remove when libvirt Bugzilla bug # 836647 is fixed.
+ def list_instance_ids(self):
+ if self._conn.numOfDomains() == 0:
+ return []
+ return self._conn.listDomainsID()
+
def list_instances(self):
return [self._conn.lookupByID(x).name()
- for x in self._conn.listDomainsID()
+ for x in self.list_instance_ids()
if x != 0] # We skip domains with ID 0 (hypervisors).
@staticmethod
@@ -415,7 +421,7 @@ class LibvirtDriver(driver.ComputeDriver):
def list_instances_detail(self):
infos = []
- for domain_id in self._conn.listDomainsID():
+ for domain_id in self.list_instance_ids():
domain = self._conn.lookupByID(domain_id)
info = self._map_to_instance_info(domain)
infos.append(info)
@@ -1811,7 +1817,7 @@ class LibvirtDriver(driver.ComputeDriver):
Return all block devices in use on this node.
"""
devices = []
- for dom_id in self._conn.listDomainsID():
+ for dom_id in self.list_instance_ids():
domain = self._conn.lookupByID(dom_id)
try:
doc = etree.fromstring(domain.XMLDesc(0))
@@ -1925,7 +1931,7 @@ class LibvirtDriver(driver.ComputeDriver):
"""
total = 0
- for dom_id in self._conn.listDomainsID():
+ for dom_id in self.list_instance_ids():
dom = self._conn.lookupByID(dom_id)
vcpus = dom.vcpus()
if vcpus is None:
@@ -1952,7 +1958,7 @@ class LibvirtDriver(driver.ComputeDriver):
idx3 = m.index('Cached:')
if FLAGS.libvirt_type == 'xen':
used = 0
- for domain_id in self._conn.listDomainsID():
+ for domain_id in self.list_instance_ids():
# skip dom0
dom_mem = int(self._conn.lookupByID(domain_id).info()[2])
if domain_id != 0: