summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-02-08 20:49:31 +0000
committerGerrit Code Review <review@openstack.org>2012-02-08 20:49:31 +0000
commit1a0c3d5d2fbbafd545b8c70cedf82ef5973c5534 (patch)
tree7c6e6d74a30884cf8e68858c4b6552a6694fe151
parent513796626d6564e1a30ed664fca7bd6ce9ff762a (diff)
parent5d85be45a53d0a065622e84de30c65c1ce75faca (diff)
downloadnova-1a0c3d5d2fbbafd545b8c70cedf82ef5973c5534.tar.gz
nova-1a0c3d5d2fbbafd545b8c70cedf82ef5973c5534.tar.xz
nova-1a0c3d5d2fbbafd545b8c70cedf82ef5973c5534.zip
Merge "Handle service failures during finish_resize gracefully"
-rw-r--r--nova/compute/manager.py74
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