summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xnova/compute/manager.py27
-rw-r--r--nova/tests/compute/test_compute.py17
2 files changed, 19 insertions, 25 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index ed95ff8df..c875c50e1 100755
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -379,21 +379,14 @@ class ComputeManager(manager.SchedulerDependentManager):
"""Return a list of instance records that match the instances found
on the hypervisor.
"""
- local_instances = []
try:
- # Try to find all local instances by uuid.
- # FIXME(comstud): Would be nice to consolidate this into
- # a single query to nova-conductor.
- for uuid in self.driver.list_instance_uuids():
- try:
- instance = self.conductor_api.instance_get_by_uuid(
- context, uuid)
- local_instances.append(instance)
- except exception.InstanceNotFound as e:
- LOG.error(_('Instance %(uuid)s found in the '
- 'hypervisor, but not in the database'),
- locals())
- continue
+ driver_uuids = self.driver.list_instance_uuids()
+ local_instances = self.conductor_api.instance_get_all_by_filters(
+ context, {'uuid': driver_uuids})
+ local_instance_uuids = [inst['uuid'] for inst in local_instances]
+ for uuid in set(driver_uuids) - set(local_instance_uuids):
+ LOG.error(_('Instance %(uuid)s found in the hypervisor, but '
+ 'not in the database'), locals())
return local_instances
except NotImplementedError:
pass
@@ -401,9 +394,9 @@ class ComputeManager(manager.SchedulerDependentManager):
# The driver doesn't support uuids listing, so we'll have
# to brute force.
driver_instances = self.driver.list_instances()
- all_instances = self.conductor_api.instance_get_all(context)
- name_map = dict([(instance['name'], instance)
- for instance in all_instances])
+ instances = self.conductor_api.instance_get_all_by_host(context,
+ self.host)
+ name_map = dict((instance['name'], instance) for instance in instances)
local_instances = []
for driver_instance in driver_instances:
instance = name_map.get(driver_instance)
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index 6eb5feb85..d6c9d23a8 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -3571,14 +3571,14 @@ class ComputeTestCase(BaseTestCase):
self.mox.StubOutWithMock(self.compute.driver,
'list_instance_uuids')
self.mox.StubOutWithMock(self.compute.conductor_api,
- 'instance_get_by_uuid')
+ 'instance_get_all_by_filters')
self.compute.driver.list_instance_uuids().AndReturn(
[inst['uuid'] for inst in driver_instances])
- for x in xrange(len(driver_instances)):
- self.compute.conductor_api.instance_get_by_uuid(fake_context,
- driver_instances[x]['uuid']).AndReturn(
- driver_instances[x])
+ self.compute.conductor_api.instance_get_all_by_filters(
+ fake_context, {'uuid': [inst['uuid'] for
+ inst in driver_instances]}).AndReturn(
+ driver_instances)
self.mox.ReplayAll()
@@ -3588,6 +3588,7 @@ class ComputeTestCase(BaseTestCase):
def test_get_instances_on_driver_fallback(self):
# Test getting instances when driver doesn't support
# 'list_instance_uuids'
+ self.compute.host = 'host'
fake_context = context.get_admin_context()
all_instances = []
@@ -3603,14 +3604,14 @@ class ComputeTestCase(BaseTestCase):
self.mox.StubOutWithMock(self.compute.driver,
'list_instances')
self.mox.StubOutWithMock(self.compute.conductor_api,
- 'instance_get_all')
+ 'instance_get_all_by_host')
self.compute.driver.list_instance_uuids().AndRaise(
NotImplementedError())
self.compute.driver.list_instances().AndReturn(
[inst['name'] for inst in driver_instances])
- self.compute.conductor_api.instance_get_all(
- fake_context).AndReturn(all_instances)
+ self.compute.conductor_api.instance_get_all_by_host(
+ fake_context, self.compute.host).AndReturn(all_instances)
self.mox.ReplayAll()