diff options
| -rw-r--r-- | nova/scheduler/filters/affinity_filter.py | 5 | ||||
| -rw-r--r-- | nova/tests/scheduler/test_host_filters.py | 26 |
2 files changed, 30 insertions, 1 deletions
diff --git a/nova/scheduler/filters/affinity_filter.py b/nova/scheduler/filters/affinity_filter.py index b4e1a3034..e2a38b1e6 100644 --- a/nova/scheduler/filters/affinity_filter.py +++ b/nova/scheduler/filters/affinity_filter.py @@ -18,7 +18,6 @@ import netaddr from nova.compute import api as compute -from nova import flags from nova.scheduler import filters @@ -39,6 +38,8 @@ class DifferentHostFilter(AffinityFilter): me = host_state.host affinity_uuids = scheduler_hints.get('different_host', []) + if isinstance(affinity_uuids, basestring): + affinity_uuids = [affinity_uuids] if affinity_uuids: return not any([i for i in affinity_uuids if self._affinity_host(context, i) == me]) @@ -57,6 +58,8 @@ class SameHostFilter(AffinityFilter): me = host_state.host affinity_uuids = scheduler_hints.get('same_host', []) + if isinstance(affinity_uuids, basestring): + affinity_uuids = [affinity_uuids] if affinity_uuids: return any([i for i in affinity_uuids diff --git a/nova/tests/scheduler/test_host_filters.py b/nova/tests/scheduler/test_host_filters.py index cb619dbac..c6fabc1b5 100644 --- a/nova/tests/scheduler/test_host_filters.py +++ b/nova/tests/scheduler/test_host_filters.py @@ -124,6 +124,19 @@ class HostFiltersTestCase(test.TestCase): self.assertTrue(filt_cls.host_passes(host, filter_properties)) + def test_affinity_different_filter_no_list_passes(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': { + 'different_host': instance_uuid}} + + self.assertTrue(filt_cls.host_passes(host, filter_properties)) + def test_affinity_different_filter_fails(self): filt_cls = self.class_map['DifferentHostFilter']() host = fakes.FakeHostState('host1', 'compute', {}) @@ -149,6 +162,19 @@ class HostFiltersTestCase(test.TestCase): self.assertTrue(filt_cls.host_passes(host, filter_properties)) + def test_affinity_same_filter_no_list_passes(self): + filt_cls = self.class_map['SameHostFilter']() + host = fakes.FakeHostState('host1', 'compute', {}) + instance = fakes.FakeInstance(context=self.context, + params={'host': 'host1'}) + instance_uuid = instance.uuid + + filter_properties = {'context': self.context.elevated(), + 'scheduler_hints': { + 'same_host': instance_uuid}} + + 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', {}) |
