diff options
| author | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-06-01 12:29:24 -0700 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-06-07 13:19:24 -0700 |
| commit | 4803074f2c02c87310c486f66fb66be98533805f (patch) | |
| tree | 43b7d4f8c365dda2af84ed4feece745de499f762 /nova | |
| parent | 089300fd4bcecaacd2ea3fa345a1b6b2c5b2ab61 (diff) | |
Fixes affinity filters when hints is None
* Fixes bug 1007573
* Includes failing tests
Change-Id: I827588f0694c5dd7b5e8ff3173d4794a55946d81
Diffstat (limited to 'nova')
| -rw-r--r-- | nova/scheduler/filters/affinity_filter.py | 6 | ||||
| -rw-r--r-- | nova/tests/scheduler/test_host_filters.py | 37 |
2 files changed, 40 insertions, 3 deletions
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']() |
