diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-07-26 21:59:21 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-07-26 21:59:21 +0000 |
| commit | 53046eb4e01d6676469fbeaeba2876e7b3df6c7c (patch) | |
| tree | bdbe074135ca459df2dfefc8c73068b558f63482 /nova | |
| parent | 66f9e085aae73ecfbf9ac3a1447917fa99d8a606 (diff) | |
| parent | cce8270d30a4d8e4a9e6c021056d10e65dc0831c (diff) | |
| download | nova-53046eb4e01d6676469fbeaeba2876e7b3df6c7c.tar.gz nova-53046eb4e01d6676469fbeaeba2876e7b3df6c7c.tar.xz nova-53046eb4e01d6676469fbeaeba2876e7b3df6c7c.zip | |
Merge "Send a full instance via rpc for finish_resize."
Diffstat (limited to 'nova')
| -rw-r--r-- | nova/compute/manager.py | 47 | ||||
| -rw-r--r-- | nova/compute/rpcapi.py | 7 | ||||
| -rw-r--r-- | nova/tests/compute/test_compute.py | 25 | ||||
| -rw-r--r-- | nova/tests/compute/test_rpcapi.py | 5 |
4 files changed, 46 insertions, 38 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 559d7c33d..c969d9762 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -298,7 +298,7 @@ def _get_additional_capabilities(): class ComputeManager(manager.SchedulerDependentManager): """Manages the running instances from creation to destruction.""" - RPC_API_VERSION = '1.13' + RPC_API_VERSION = '1.14' def __init__(self, compute_driver=None, *args, **kwargs): """Load configuration options and connect to the hypervisor.""" @@ -1592,7 +1592,7 @@ class ComputeManager(manager.SchedulerDependentManager): self._notify_about_instance_usage(context, instance_ref, "resize.end", network_info=network_info) - def _finish_resize(self, context, instance_ref, migration_ref, disk_info, + def _finish_resize(self, context, instance, migration_ref, disk_info, image): resize_instance = False old_instance_type_id = migration_ref['old_instance_type_id'] @@ -1600,9 +1600,9 @@ class ComputeManager(manager.SchedulerDependentManager): if old_instance_type_id != new_instance_type_id: instance_type = instance_types.get_instance_type( new_instance_type_id) - instance_ref = self._instance_update( + instance = self._instance_update( context, - instance_ref.uuid, + instance['uuid'], instance_type_id=instance_type['id'], memory_mb=instance_type['memory_mb'], vcpus=instance_type['vcpus'], @@ -1611,42 +1611,42 @@ class ComputeManager(manager.SchedulerDependentManager): resize_instance = True # NOTE(tr3buchet): setup networks on destination host - self.network_api.setup_networks_on_host(context, instance_ref, + self.network_api.setup_networks_on_host(context, instance, migration_ref['dest_compute']) - network_info = self._get_instance_nw_info(context, instance_ref) + network_info = self._get_instance_nw_info(context, instance) - self._instance_update(context, instance_ref.uuid, + self._instance_update(context, instance['uuid'], task_state=task_states.RESIZE_FINISH) self._notify_about_instance_usage( - context, instance_ref, "finish_resize.start", + context, instance, "finish_resize.start", network_info=network_info) - self.driver.finish_migration(context, migration_ref, instance_ref, + self.driver.finish_migration(context, migration_ref, instance, disk_info, self._legacy_nw_info(network_info), image, resize_instance) - instance_ref = self._instance_update(context, - instance_ref.uuid, - vm_state=vm_states.RESIZED, - host=migration_ref['dest_compute'], - launched_at=timeutils.utcnow(), - task_state=None) + instance = self._instance_update(context, + instance['uuid'], + vm_state=vm_states.RESIZED, + host=migration_ref['dest_compute'], + launched_at=timeutils.utcnow(), + task_state=None) self.db.migration_update(context, migration_ref.id, {'status': 'finished'}) self._notify_about_instance_usage( - context, instance_ref, "finish_resize.end", + context, instance, "finish_resize.end", network_info=network_info) @exception.wrap_exception(notifier=notifier, publisher_id=publisher_id()) @checks_instance_lock @wrap_instance_fault - def finish_resize(self, context, instance_uuid, migration_id, disk_info, - image): + def finish_resize(self, context, migration_id, disk_info, image, + instance_uuid=None, instance=None): """Completes the migration process. Sets up the newly transferred disk and turns on the instance at its @@ -1654,17 +1654,18 @@ class ComputeManager(manager.SchedulerDependentManager): """ migration_ref = self.db.migration_get(context, migration_id) - instance_ref = self.db.instance_get_by_uuid(context, - migration_ref.instance_uuid) + if not instance: + instance = self.db.instance_get_by_uuid(context, + migration_ref.instance_uuid) try: - self._finish_resize(context, instance_ref, migration_ref, + self._finish_resize(context, instance, migration_ref, disk_info, image) except Exception, error: with excutils.save_and_reraise_exception(): LOG.error(_('%s. Setting instance vm_state to ERROR') % error, - instance=instance_ref) - self._set_instance_error_state(context, instance_ref.uuid) + instance=instance) + self._set_instance_error_state(context, instance['uuid']) @exception.wrap_exception(notifier=notifier, publisher_id=publisher_id()) @checks_instance_lock diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py index 18c86e462..1688273ff 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -74,6 +74,7 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): check_can_live_migrate_source() 1.12 - Remove instance_uuid, add instance argument to confirm_resize() 1.13 - Remove instance_uuid, add instance argument to detach_volume() + 1.14 - Remove instance_uuid, add instance argument to finish_resize() ''' BASE_RPC_API_VERSION = '1.0' @@ -147,10 +148,12 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): def finish_resize(self, ctxt, instance, migration_id, image, disk_info, host): + instance_p = jsonutils.to_primitive(instance) self.cast(ctxt, self.make_msg('finish_resize', - instance_uuid=instance['uuid'], migration_id=migration_id, + instance=instance_p, migration_id=migration_id, image=image, disk_info=disk_info), - topic=_compute_topic(self.topic, ctxt, host, None)) + topic=_compute_topic(self.topic, ctxt, host, None), + version='1.14') def finish_revert_resize(self, ctxt, instance, migration_id, host): self.cast(ctxt, self.make_msg('finish_revert_resize', diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index dd8efc974..90493b977 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -1088,13 +1088,14 @@ class ComputeTestCase(BaseTestCase): self.stubs.Set(self.compute.driver, 'finish_migration', fake) context = self.context.elevated() - instance = self._create_fake_instance() + instance = jsonutils.to_primitive(self._create_fake_instance()) self.compute.prep_resize(context, instance['uuid'], 1, {}, filter_properties={}) migration_ref = db.migration_get_by_instance_and_status(context, instance['uuid'], 'pre-migrating') - self.compute.finish_resize(context, instance['uuid'], - int(migration_ref['id']), {}, {}) + self.compute.finish_resize(context, + migration_id=int(migration_ref['id']), + disk_info={}, image={}, instance=instance) self.compute.terminate_instance(self.context, instance['uuid']) def test_finish_resize_handles_error(self): @@ -1109,15 +1110,15 @@ class ComputeTestCase(BaseTestCase): self.stubs.Set(self.compute.driver, 'finish_migration', throw_up) context = self.context.elevated() - instance = self._create_fake_instance() + instance = jsonutils.to_primitive(self._create_fake_instance()) self.compute.prep_resize(context, instance['uuid'], 1, {}, filter_properties={}) migration_ref = db.migration_get_by_instance_and_status(context, instance['uuid'], 'pre-migrating') self.assertRaises(test.TestingException, self.compute.finish_resize, - context, instance['uuid'], - int(migration_ref['id']), {}, {}) + context, migration_id=int(migration_ref['id']), + disk_info={}, image={}, instance=instance) instance = db.instance_get_by_uuid(context, instance['uuid']) self.assertEqual(instance['vm_state'], vm_states.ERROR) @@ -1184,7 +1185,7 @@ class ComputeTestCase(BaseTestCase): old_time = datetime.datetime(2012, 4, 1) cur_time = datetime.datetime(2012, 12, 21, 12, 21) timeutils.set_time_override(old_time) - instance = self._create_fake_instance() + instance = jsonutils.to_primitive(self._create_fake_instance()) context = self.context.elevated() old_type_id = instance_types.get_instance_type_by_name( 'm1.tiny')['id'] @@ -1203,8 +1204,9 @@ class ComputeTestCase(BaseTestCase): timeutils.set_time_override(cur_time) test_notifier.NOTIFICATIONS = [] - self.compute.finish_resize(context, instance['uuid'], - int(migration_ref['id']), {}, {}) + self.compute.finish_resize(context, + migration_id=int(migration_ref['id']), disk_info={}, image={}, + instance=instance) self.assertEquals(len(test_notifier.NOTIFICATIONS), 2) msg = test_notifier.NOTIFICATIONS[0] @@ -1361,8 +1363,9 @@ class ComputeTestCase(BaseTestCase): self.compute.resize_instance(context, inst_ref['uuid'], migration_ref['id'], {}) - self.compute.finish_resize(context, inst_ref['uuid'], - int(migration_ref['id']), {}, {}) + self.compute.finish_resize(context, + migration_id=int(migration_ref['id']), disk_info={}, + image={}, instance=jsonutils.to_primitive(inst_ref)) # Prove that the instance size is now the new size inst_ref = db.instance_get_by_uuid(context, instance['uuid']) diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py index 48aa60b98..6bac3c99f 100644 --- a/nova/tests/compute/test_rpcapi.py +++ b/nova/tests/compute/test_rpcapi.py @@ -52,7 +52,7 @@ class ComputeRpcAPITestCase(test.TestCase): 'add_fixed_ip_to_instance', 'attach_volume', 'check_can_live_migrate_destination', 'check_can_live_migrate_source', 'confirm_resize', - 'detach_volume', 'get_console_output', + 'detach_volume', 'finish_resize', 'get_console_output', 'pause_instance', 'reboot_instance', 'suspend_instance', 'unpause_instance' ] @@ -161,7 +161,8 @@ class ComputeRpcAPITestCase(test.TestCase): def test_finish_resize(self): self._test_compute_api('finish_resize', 'cast', instance=self.fake_instance, migration_id='id', - image='image', disk_info='disk_info', host='host') + image='image', disk_info='disk_info', host='host', + version='1.14') def test_finish_revert_resize(self): self._test_compute_api('finish_revert_resize', 'cast', |
