diff options
| -rw-r--r-- | nova/compute/manager.py | 29 | ||||
| -rw-r--r-- | nova/compute/rpcapi.py | 9 | ||||
| -rw-r--r-- | nova/tests/compute/test_compute.py | 10 | ||||
| -rw-r--r-- | nova/tests/compute/test_rpcapi.py | 4 |
4 files changed, 28 insertions, 24 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 4acccf0a3..253850cea 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -217,7 +217,7 @@ def _get_image_meta(context, image_ref): class ComputeManager(manager.SchedulerDependentManager): """Manages the running instances from creation to destruction.""" - RPC_API_VERSION = '2.5' + RPC_API_VERSION = '2.6' def __init__(self, compute_driver=None, *args, **kwargs): """Load configuration options and connect to the hypervisor.""" @@ -1624,7 +1624,7 @@ class ComputeManager(manager.SchedulerDependentManager): LOG.audit(_('Migrating'), context=context, instance=instance) self.compute_rpcapi.resize_instance(context, instance, - migration_ref['id'], image, reservations) + migration_ref, image, reservations) extra_usage_info = dict( new_instance_type=instance_type['name'], @@ -1637,20 +1637,21 @@ class ComputeManager(manager.SchedulerDependentManager): @exception.wrap_exception(notifier=notifier, publisher_id=publisher_id()) @reverts_task_state @wrap_instance_fault - def resize_instance(self, context, instance, - migration_id, image, reservations=None): + def resize_instance(self, context, instance, image, + reservations=None, migration=None, migration_id=None): """Starts the migration of a running instance to another host.""" context = context.elevated() - migration_ref = self.db.migration_get(context, migration_id) + if not migration: + migration = self.db.migration_get(context, migration_id) with self._error_out_instance_on_exception(context, instance['uuid'], reservations): instance_type_ref = self.db.instance_type_get(context, - migration_ref.new_instance_type_id) + migration['new_instance_type_id']) network_info = self._get_instance_nw_info(context, instance) self.db.migration_update(context, - migration_id, + migration['id'], {'status': 'migrating'}) self._instance_update(context, instance['uuid'], @@ -1664,7 +1665,7 @@ class ComputeManager(manager.SchedulerDependentManager): context, instance['uuid']) disk_info = self.driver.migrate_disk_and_power_off( - context, instance, migration_ref['dest_host'], + context, instance, migration['dest_host'], instance_type_ref, self._legacy_nw_info(network_info), block_device_info) @@ -1677,23 +1678,23 @@ class ComputeManager(manager.SchedulerDependentManager): self.volume_api.terminate_connection(context, volume, connector) - if migration_ref['dest_compute'] != \ - migration_ref['source_compute']: + if migration['dest_compute'] != migration['source_compute']: self.network_api.migrate_instance_start(context, instance, self.host) self.db.migration_update(context, - migration_id, + migration['id'], {'status': 'post-migrating'}) self._instance_update(context, instance['uuid'], - host=migration_ref['dest_compute'], + host=migration['dest_compute'], task_state=task_states.RESIZE_MIGRATED, expected_task_state=task_states. RESIZE_MIGRATING) - self.compute_rpcapi.finish_resize(context, instance, migration_id, - image, disk_info, migration_ref['dest_compute'], reservations) + self.compute_rpcapi.finish_resize(context, instance, + migration['id'], image, disk_info, + migration['dest_compute'], reservations) self._notify_about_instance_usage(context, instance, "resize.end", network_info=network_info) diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py index 6a47bb096..e9d82361f 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -133,6 +133,7 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): 2.3 - Adds volume_id to reserve_block_device_name() 2.4 - Add bdms to terminate_instance 2.5 - Add block device and network info to reboot_instance + 2.6 - Remove migration_id, add migration to resize_instance ''' # @@ -411,13 +412,15 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): instance=instance_p), topic=_compute_topic(self.topic, ctxt, None, instance)) - def resize_instance(self, ctxt, instance, migration_id, image, + def resize_instance(self, ctxt, instance, migration, image, reservations=None): topic = _compute_topic(self.topic, ctxt, None, instance) instance_p = jsonutils.to_primitive(instance) + migration_p = jsonutils.to_primitive(migration) self.cast(ctxt, self.make_msg('resize_instance', - instance=instance_p, migration_id=migration_id, - image=image, reservations=reservations), topic) + instance=instance_p, migration=migration_p, + image=image, reservations=reservations), topic, + version='2.6') def resume_instance(self, ctxt, instance): instance_p = jsonutils.to_primitive(instance) diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index c56d0b1ae..d61d1182b 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -1744,7 +1744,7 @@ class ComputeTestCase(BaseTestCase): instance['uuid'], 'pre-migrating') self.compute.resize_instance(context, instance=instance, - migration_id=migration_ref['id'], + migration=migration_ref, image={}) timeutils.set_time_override(cur_time) test_notifier.NOTIFICATIONS = [] @@ -1870,7 +1870,7 @@ class ComputeTestCase(BaseTestCase): #verify self.assertRaises(test.TestingException, self.compute.resize_instance, context, instance=instance, - migration_id=migration_ref['id'], image={}, + migration=migration_ref, image={}, reservations=reservations) instance = db.instance_get_by_uuid(context, instance['uuid']) self.assertEqual(instance['vm_state'], vm_states.ERROR) @@ -1894,7 +1894,7 @@ class ComputeTestCase(BaseTestCase): db.instance_update(self.context, instance['uuid'], {"task_state": task_states.RESIZE_PREP}) self.compute.resize_instance(context, instance=instance, - migration_id=migration_ref['id'], + migration=migration_ref, image={}) inst = db.instance_get_by_uuid(context, instance['uuid']) self.assertEqual(migration_ref['dest_compute'], inst['host']) @@ -1940,7 +1940,7 @@ class ComputeTestCase(BaseTestCase): db.instance_update(self.context, instance["uuid"], {"task_state": task_states.RESIZE_PREP}) self.compute.resize_instance(context, instance=instance, - migration_id=migration_ref['id'], + migration=migration_ref, image={}) self.compute.finish_resize(context, migration_id=int(migration_ref['id']), disk_info={}, @@ -2029,7 +2029,7 @@ class ComputeTestCase(BaseTestCase): {"task_state": task_states.RESIZE_PREP}) self.assertRaises(test.TestingException, self.compute.resize_instance, context, instance=inst_ref, - migration_id=migration_ref['id'], image={}, + migration=migration_ref, image={}, reservations=reservations) inst_ref = db.instance_get_by_uuid(context, inst_ref['uuid']) self.assertEqual(inst_ref['vm_state'], vm_states.ERROR) diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py index 2fa6bf9ee..dd374ac55 100644 --- a/nova/tests/compute/test_rpcapi.py +++ b/nova/tests/compute/test_rpcapi.py @@ -273,8 +273,8 @@ class ComputeRpcAPITestCase(test.TestCase): def test_resize_instance(self): self._test_compute_api('resize_instance', 'cast', - instance=self.fake_instance, migration_id='id', image='image', - reservations=list('fake_res')) + instance=self.fake_instance, migration={'id': 'fake_id'}, + image='image', reservations=list('fake_res'), version='2.6') def test_resume_instance(self): self._test_compute_api('resume_instance', 'cast', |
