From 4803074f2c02c87310c486f66fb66be98533805f Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Fri, 1 Jun 2012 12:29:24 -0700 Subject: Fixes affinity filters when hints is None * Fixes bug 1007573 * Includes failing tests Change-Id: I827588f0694c5dd7b5e8ff3173d4794a55946d81 --- nova/scheduler/filters/affinity_filter.py | 6 ++--- nova/tests/scheduler/test_host_filters.py | 37 +++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) (limited to 'nova') diff --git a/nova/scheduler/filters/affinity_filter.py b/nova/scheduler/filters/affinity_filter.py index e6e7a116a..e774d7e17 100644 --- a/nova/scheduler/filters/affinity_filter.py +++ b/nova/scheduler/filters/affinity_filter.py @@ -35,7 +35,7 @@ class DifferentHostFilter(AffinityFilter): def host_passes(self, host_state, filter_properties): context = filter_properties['context'] - scheduler_hints = filter_properties['scheduler_hints'] + scheduler_hints = filter_properties.get('scheduler_hints') or {} me = host_state.host affinity_uuids = scheduler_hints.get('different_host', []) @@ -54,7 +54,7 @@ class SameHostFilter(AffinityFilter): def host_passes(self, host_state, filter_properties): context = filter_properties['context'] - scheduler_hints = filter_properties['scheduler_hints'] + scheduler_hints = filter_properties.get('scheduler_hints') or {} me = host_state.host affinity_uuids = scheduler_hints.get('same_host', []) @@ -68,7 +68,7 @@ class SameHostFilter(AffinityFilter): class SimpleCIDRAffinityFilter(AffinityFilter): def host_passes(self, host_state, filter_properties): - scheduler_hints = filter_properties['scheduler_hints'] + scheduler_hints = filter_properties.get('scheduler_hints') or {} affinity_cidr = scheduler_hints.get('cidr', '/24') affinity_host_addr = scheduler_hints.get('build_near_host_ip') diff --git a/nova/tests/scheduler/test_host_filters.py b/nova/tests/scheduler/test_host_filters.py index e848a8951..59e424fed 100644 --- a/nova/tests/scheduler/test_host_filters.py +++ b/nova/tests/scheduler/test_host_filters.py @@ -137,6 +137,18 @@ class HostFiltersTestCase(test.TestCase): self.assertFalse(filt_cls.host_passes(host, filter_properties)) + def test_affinity_different_filter_handles_none(self): + filt_cls = self.class_map['DifferentHostFilter']() + host = fakes.FakeHostState('host1', 'compute', {}) + instance = fakes.FakeInstance(context=self.context, + params={'host': 'host2'}) + instance_uuid = instance.uuid + + filter_properties = {'context': self.context.elevated(), + 'scheduler_hints': None} + + self.assertTrue(filt_cls.host_passes(host, filter_properties)) + def test_affinity_same_filter_passes(self): filt_cls = self.class_map['SameHostFilter']() host = fakes.FakeHostState('host1', 'compute', {}) @@ -163,6 +175,18 @@ class HostFiltersTestCase(test.TestCase): self.assertFalse(filt_cls.host_passes(host, filter_properties)) + def test_affinity_same_filter_handles_none(self): + filt_cls = self.class_map['SameHostFilter']() + host = fakes.FakeHostState('host1', 'compute', {}) + instance = fakes.FakeInstance(context=self.context, + params={'host': 'host2'}) + instance_uuid = instance.uuid + + filter_properties = {'context': self.context.elevated(), + 'scheduler_hints': None} + + self.assertTrue(filt_cls.host_passes(host, filter_properties)) + def test_affinity_simple_cidr_filter_passes(self): filt_cls = self.class_map['SimpleCIDRAffinityFilter']() host = fakes.FakeHostState('host1', 'compute', {}) @@ -193,6 +217,19 @@ class HostFiltersTestCase(test.TestCase): self.assertFalse(filt_cls.host_passes(host, filter_properties)) + def test_affinity_simple_cidr_filter_handles_none(self): + filt_cls = self.class_map['SimpleCIDRAffinityFilter']() + host = fakes.FakeHostState('host1', 'compute', {}) + + affinity_ip = flags.FLAGS.my_ip.split('.')[0:3] + affinity_ip.append('100') + affinity_ip = str.join('.', affinity_ip) + + filter_properties = {'context': self.context.elevated(), + 'scheduler_hints': None} + + self.assertTrue(filt_cls.host_passes(host, filter_properties)) + def test_compute_filter_passes(self): self._stub_service_is_up(True) filt_cls = self.class_map['ComputeFilter']() -- cgit