summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/scheduler/host_manager.py7
-rw-r--r--nova/tests/scheduler/test_host_manager.py13
2 files changed, 12 insertions, 8 deletions
diff --git a/nova/scheduler/host_manager.py b/nova/scheduler/host_manager.py
index b472220bd..8d17349fa 100644
--- a/nova/scheduler/host_manager.py
+++ b/nova/scheduler/host_manager.py
@@ -328,10 +328,13 @@ class HostManager(object):
name_to_cls_map = dict([(x.host, x) for x in hosts])
if ignore_hosts:
_strip_ignore_hosts(name_to_cls_map, ignore_hosts)
+ if not name_to_cls_map:
+ return []
if force_hosts:
_match_forced_hosts(name_to_cls_map, force_hosts)
- if not name_to_cls_map:
- return []
+ # NOTE(vish): Skip filters on forced hosts.
+ if name_to_cls_map:
+ return name_to_cls_map.values()
hosts = name_to_cls_map.itervalues()
return self.filter_handler.get_filtered_objects(filter_classes,
diff --git a/nova/tests/scheduler/test_host_manager.py b/nova/tests/scheduler/test_host_manager.py
index ae7774bac..91e719ab6 100644
--- a/nova/tests/scheduler/test_host_manager.py
+++ b/nova/tests/scheduler/test_host_manager.py
@@ -82,11 +82,12 @@ class HostManagerTestCase(test.TestCase):
self.host_manager._choose_host_filters(specified_filters).AndReturn(
[FakeFilterClass1])
- def _verify_result(self, info, result):
+ def _verify_result(self, info, result, filters=True):
for x in info['got_fprops']:
self.assertEqual(x, info['expected_fprops'])
- self.assertEqual(set(info['expected_objs']), set(info['got_objs']))
- self.assertEqual(set(result), set(info['got_objs']))
+ if filters:
+ self.assertEqual(set(info['expected_objs']), set(info['got_objs']))
+ self.assertEqual(set(info['expected_objs']), set(result))
def test_get_filtered_hosts(self):
fake_properties = {'moo': 1, 'cow': 2}
@@ -143,7 +144,7 @@ class HostManagerTestCase(test.TestCase):
result = self.host_manager.get_filtered_hosts(self.fake_hosts,
fake_properties)
- self._verify_result(info, result)
+ self._verify_result(info, result, False)
def test_get_filtered_hosts_with_no_matching_force_hosts(self):
fake_properties = {'force_hosts': ['fake_host5', 'fake_host6']}
@@ -156,7 +157,7 @@ class HostManagerTestCase(test.TestCase):
result = self.host_manager.get_filtered_hosts(self.fake_hosts,
fake_properties)
- self._verify_result(info, result)
+ self._verify_result(info, result, False)
def test_get_filtered_hosts_with_ignore_and_force(self):
# Ensure ignore_hosts processed before force_hosts in host filters.
@@ -172,7 +173,7 @@ class HostManagerTestCase(test.TestCase):
result = self.host_manager.get_filtered_hosts(self.fake_hosts,
fake_properties)
- self._verify_result(info, result)
+ self._verify_result(info, result, False)
def test_update_service_capabilities(self):
service_states = self.host_manager.service_states