summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-03-03 20:06:21 +0000
committerGerrit Code Review <review@openstack.org>2013-03-03 20:06:21 +0000
commit587e03962f99300c089a1fe99aef567931a4c8ea (patch)
tree080224e53765197edb3370e977f0927efd42f3fd
parenta9be29baefafd3d7f80a098cce7226c1db2c1834 (diff)
parente03a3df8869ad5303aaba0f006c17d0927fa6dab (diff)
downloadnova-587e03962f99300c089a1fe99aef567931a4c8ea.tar.gz
nova-587e03962f99300c089a1fe99aef567931a4c8ea.tar.xz
nova-587e03962f99300c089a1fe99aef567931a4c8ea.zip
Merge "Refactor compute manager _get_instances_by_driver"
-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 619316e9e..9979187f9 100755
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -388,21 +388,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
@@ -410,9 +403,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 088332647..bbe8e0c81 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -3697,14 +3697,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()
@@ -3714,6 +3714,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 = []
@@ -3729,14 +3730,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()