summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2013-02-05 09:54:25 -0800
committerVishvananda Ishaya <vishvananda@gmail.com>2013-02-05 12:25:55 -0800
commit32bdea27c17eda9fdb2ac70a2556af6dc073dede (patch)
tree9c20a424fc53da607bb7618592844e187e04c6c9
parent139d15a40557066a39a1c2ba48c81711a9dd3730 (diff)
downloadnova-32bdea27c17eda9fdb2ac70a2556af6dc073dede.tar.gz
nova-32bdea27c17eda9fdb2ac70a2556af6dc073dede.tar.xz
nova-32bdea27c17eda9fdb2ac70a2556af6dc073dede.zip
Return to skipping filters when using force_hosts.
The folsom behavior was to skip filtering when using force_hosts. This is useful for administrative tools. For example, one can verify a disabled node by launching instances on it even though the scheduler will ignore it for normal requests. This behavior was accidentally changed in commit 0d9ce8319d75bfbd69fe4e0759aeed38e6054e56 Change-Id: Ib529cf8eccc4d8abe67873cfc0467f6db9d4b522
-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