From a819c028efd0a346127a737d361f538c25ce87e1 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Thu, 5 Jan 2012 18:15:29 -0500 Subject: [PATCH] Use instance_properties in resize. This just makes resize behave a bit more like create, which is useful for custom filtering. Change-Id: I10ba726712d8f601f5ee97e0bb033bd7339a7a88 --- nova/scheduler/distributed_scheduler.py | 10 ++++++---- nova/tests/scheduler/test_distributed_scheduler.py | 4 ++-- nova/tests/test_compute.py | 6 ++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/nova/scheduler/distributed_scheduler.py b/nova/scheduler/distributed_scheduler.py index c4823efa..a7cd97da 100644 --- a/nova/scheduler/distributed_scheduler.py +++ b/nova/scheduler/distributed_scheduler.py @@ -394,10 +394,12 @@ class DistributedScheduler(driver.Scheduler): selected_filters = self._choose_host_filters() # Filter out original host - if ('original_host' in request_spec and - request_spec.get('avoid_original_host', True)): - hosts = [(h, hi) for h, hi in hosts - if h != request_spec['original_host']] + try: + if request_spec['avoid_original_host']: + original_host = request_spec['instance_properties']['host'] + hosts = [(h, hi) for h, hi in hosts if h != original_host] + except (KeyError, TypeError): + pass # TODO(sandy): We're only using InstanceType-based specs # currently. Later we'll need to snoop for more detailed diff --git a/nova/tests/scheduler/test_distributed_scheduler.py b/nova/tests/scheduler/test_distributed_scheduler.py index 047c8c51..36d2ddc5 100644 --- a/nova/tests/scheduler/test_distributed_scheduler.py +++ b/nova/tests/scheduler/test_distributed_scheduler.py @@ -313,7 +313,7 @@ class DistributedSchedulerTestCase(test.TestCase): _fake_choose_host_filters) hosts = [('host1', '1info'), ('host2', '2info'), ('host3', '3info')] - request_spec = dict(original_host='host2', + request_spec = dict(instance_properties=dict(host='host2'), avoid_original_host=True) filtered = sched._filter_hosts('compute', request_spec, hosts, {}) @@ -333,7 +333,7 @@ class DistributedSchedulerTestCase(test.TestCase): _fake_choose_host_filters) hosts = [('host1', '1info'), ('host2', '2info'), ('host3', '3info')] - request_spec = dict(original_host='host2', + request_spec = dict(instance_properties=dict(host='host2'), avoid_original_host=False) filtered = sched._filter_hosts('compute', request_spec, hosts, {}) diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index a4a5faa4..fb38e7b9 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -2060,7 +2060,8 @@ class ComputeAPITestCase(BaseTestCase): def test_resize_request_spec(self): def _fake_cast(context, args): request_spec = args['args']['request_spec'] - self.assertEqual(request_spec['original_host'], 'host2') + instance_properties = request_spec['instance_properties'] + self.assertEqual(instance_properties['host'], 'host2') self.assertEqual(request_spec['avoid_original_host'], True) self.stubs.Set(self.compute_api, '_cast_scheduler_message', @@ -2078,7 +2079,8 @@ class ComputeAPITestCase(BaseTestCase): def test_resize_request_spec_noavoid(self): def _fake_cast(context, args): request_spec = args['args']['request_spec'] - self.assertEqual(request_spec['original_host'], 'host2') + instance_properties = request_spec['instance_properties'] + self.assertEqual(instance_properties['host'], 'host2') self.assertEqual(request_spec['avoid_original_host'], False) self.stubs.Set(self.compute_api, '_cast_scheduler_message',