diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-02-08 20:49:31 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-02-08 20:49:31 +0000 |
| commit | 1a0c3d5d2fbbafd545b8c70cedf82ef5973c5534 (patch) | |
| tree | 7c6e6d74a30884cf8e68858c4b6552a6694fe151 | |
| parent | 513796626d6564e1a30ed664fca7bd6ce9ff762a (diff) | |
| parent | 5d85be45a53d0a065622e84de30c65c1ce75faca (diff) | |
| download | nova-1a0c3d5d2fbbafd545b8c70cedf82ef5973c5534.tar.gz nova-1a0c3d5d2fbbafd545b8c70cedf82ef5973c5534.tar.xz nova-1a0c3d5d2fbbafd545b8c70cedf82ef5973c5534.zip | |
Merge "Handle service failures during finish_resize gracefully"
| -rw-r--r-- | nova/compute/manager.py | 74 |
1 files changed, 39 insertions, 35 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index c7cd1baaf..5103ffdd6 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -1272,6 +1272,42 @@ class ComputeManager(manager.SchedulerDependentManager): rpc.cast(context, topic, {'method': 'finish_resize', 'args': params}) + def _finish_resize(self, context, instance_ref, migration_ref, disk_info): + resize_instance = False + old_instance_type_id = migration_ref['old_instance_type_id'] + new_instance_type_id = migration_ref['new_instance_type_id'] + 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( + context, + instance_ref.uuid, + instance_type_id=instance_type['id'], + memory_mb=instance_type['memory_mb'], + vcpus=instance_type['vcpus'], + root_gb=instance_type['root_gb'], + ephemeral_gb=instance_type['ephemeral_gb']) + resize_instance = True + + network_info = self._get_instance_nw_info(context, instance_ref) + + # Have to look up image here since we depend on disk_format later + image_meta = _get_image_meta(context, instance_ref['image_ref']) + + self.driver.finish_migration(context, migration_ref, instance_ref, + disk_info, + self._legacy_nw_info(network_info), + image_meta, resize_instance) + + self._instance_update(context, + instance_ref.uuid, + vm_state=vm_states.ACTIVE, + host=migration_ref['dest_compute'], + task_state=task_states.RESIZE_VERIFY) + + self.db.migration_update(context, migration_ref.id, + {'status': 'finished'}) + @exception.wrap_exception(notifier=notifier, publisher_id=publisher_id()) @checks_instance_lock @wrap_instance_fault @@ -1284,52 +1320,20 @@ class ComputeManager(manager.SchedulerDependentManager): """ migration_ref = self.db.migration_get(context, migration_id) - resize_instance = False instance_ref = self.db.instance_get_by_uuid(context, migration_ref.instance_uuid) - old_instance_type_id = migration_ref['old_instance_type_id'] - new_instance_type_id = migration_ref['new_instance_type_id'] - if old_instance_type_id != new_instance_type_id: - instance_type = instance_types.get_instance_type( - new_instance_type_id) - self.db.instance_update(context, instance_ref.uuid, - dict(instance_type_id=instance_type['id'], - memory_mb=instance_type['memory_mb'], - vcpus=instance_type['vcpus'], - root_gb=instance_type['root_gb'], - ephemeral_gb=instance_type['ephemeral_gb'])) - resize_instance = True - - instance_ref = self.db.instance_get_by_uuid(context, - instance_ref.uuid) - - network_info = self._get_instance_nw_info(context, instance_ref) - - # Have to look up image here since we depend on disk_format later - image_meta = _get_image_meta(context, instance_ref['image_ref']) try: - self.driver.finish_migration(context, migration_ref, instance_ref, - disk_info, - self._legacy_nw_info(network_info), - image_meta, resize_instance) + self._finish_resize(context, instance_ref, migration_ref, + disk_info) except Exception, error: with utils.save_and_reraise_exception(): msg = _('%s. Setting instance vm_state to ERROR') LOG.error(msg % error) self._instance_update(context, - instance_uuid, + instance_ref.uuid, vm_state=vm_states.ERROR) - self._instance_update(context, - instance_uuid, - vm_state=vm_states.ACTIVE, - host=migration_ref['dest_compute'], - task_state=task_states.RESIZE_VERIFY) - - self.db.migration_update(context, migration_id, - {'status': 'finished', }) - @exception.wrap_exception(notifier=notifier, publisher_id=publisher_id()) @checks_instance_lock @wrap_instance_fault |
