diff options
| author | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-06-26 08:42:42 -0700 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-06-26 10:37:48 -0700 |
| commit | 4cb634daba753ffd1f351ab69cb3ffcd23013274 (patch) | |
| tree | 45803dfe484c5325ac72f2dd6cf0733dd86e2f9b | |
| parent | 1a169b8bf98a7fa0c1361ac942bbd9d4041f8e63 (diff) | |
Allow single uuid to be specified for affinity.
* Fixes bug 1017988
* Includes failing test for same_host and different_host
Change-Id: I91263512a9f76436dce5a8f00d4d97f841d08fec
| -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', {}) |
