diff options
| -rw-r--r-- | nova/tests/fakelibvirt.py | 3 | ||||
| -rw-r--r-- | nova/tests/test_libvirt.py | 3 | ||||
| -rw-r--r-- | nova/virt/libvirt/driver.py | 16 |
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: |
