diff options
author | Vishvananda Ishaya <vishvananda@gmail.com> | 2013-02-05 09:54:25 -0800 |
---|---|---|
committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2013-02-05 12:25:55 -0800 |
commit | 32bdea27c17eda9fdb2ac70a2556af6dc073dede (patch) | |
tree | 9c20a424fc53da607bb7618592844e187e04c6c9 | |
parent | 139d15a40557066a39a1c2ba48c81711a9dd3730 (diff) | |
download | nova-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.py | 7 | ||||
-rw-r--r-- | nova/tests/scheduler/test_host_manager.py | 13 |
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 |