summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/compute/api.py15
-rw-r--r--nova/compute/manager.py25
-rw-r--r--nova/exception.py2
3 files changed, 28 insertions, 14 deletions
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 7857f06a5..207a3d27b 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -826,15 +826,17 @@ class API(base.Base):
def revert_resize(self, context, instance_id):
"""Reverts a resize, deleting the 'new' instance in the process."""
context = context.elevated()
+ instance_ref = self._get_instance(context, instance_id,
+ 'revert_resize')
migration_ref = self.db.migration_get_by_instance_and_status(context,
- instance_id, 'finished')
+ instance_ref['uuid'], 'finished')
if not migration_ref:
raise exception.MigrationNotFoundByStatus(instance_id=instance_id,
status='finished')
params = {'migration_id': migration_ref['id']}
self._cast_compute_message('revert_resize', context,
- migration_ref['dest_compute'], params=params)
+ instance_ref['uuid'], params=params)
self.db.migration_update(context, migration_ref['id'],
{'status': 'reverted'})
@@ -842,14 +844,17 @@ class API(base.Base):
def confirm_resize(self, context, instance_id):
"""Confirms a migration/resize and deletes the 'old' instance."""
context = context.elevated()
+ instance_ref = self._get_instance(context, instance_id,
+ 'confirm_resize')
migration_ref = self.db.migration_get_by_instance_and_status(context,
- instance_id, 'finished')
+ instance_ref['uuid'], 'finished')
if not migration_ref:
raise exception.MigrationNotFoundByStatus(instance_id=instance_id,
status='finished')
params = {'migration_id': migration_ref['id']}
self._cast_compute_message('confirm_resize', context,
- migration_ref['source_compute'], params=params)
+ instance_ref['uuid'],
+ params=params)
self.db.migration_update(context, migration_ref['id'],
{'status': 'confirmed'})
@@ -897,7 +902,7 @@ class API(base.Base):
self._cast_scheduler_message(context,
{"method": "prep_resize",
"args": {"topic": FLAGS.compute_topic,
- "instance_uuid": instance_ref['uuid'],
+ "instance_id": instance_ref['uuid'],
"flavor_id": new_instance_type['id']}})
@scheduler_api.reroute_compute("add_fixed_ip")
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index e00e3d0ab..9788f6147 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -89,6 +89,10 @@ def checks_instance_lock(function):
"""Decorator to prevent action against locked instances for non-admins."""
@functools.wraps(function)
def decorated_function(self, context, instance_id, *args, **kwargs):
+ #TODO(anyone): this being called instance_id is forcing a slightly
+ # confusing convention of pushing instance_uuids
+ # through an "instance_id" key in the queue args dict when
+ # casting through the compute API
LOG.info(_("check_instance_lock: decorating: |%s|"), function,
context=context)
LOG.info(_("check_instance_lock: arguments: |%(self)s| |%(context)s|"
@@ -664,10 +668,10 @@ class ComputeManager(manager.SchedulerDependentManager):
@exception.wrap_exception
@checks_instance_lock
- def confirm_resize(self, context, migration_id):
+ def confirm_resize(self, context, instance_id, migration_id):
"""Destroys the source instance."""
migration_ref = self.db.migration_get(context, migration_id)
- instance_ref = self.db.instance_get(context,
+ instance_ref = self.db.instance_get_by_uuid(context,
migration_ref.instance_uuid)
self.driver.destroy(instance_ref)
@@ -679,7 +683,7 @@ class ComputeManager(manager.SchedulerDependentManager):
@exception.wrap_exception
@checks_instance_lock
- def revert_resize(self, context, migration_id):
+ def revert_resize(self, context, instance_id, migration_id):
"""Destroys the new instance on the destination machine.
Reverts the model changes, and powers on the old instance on the
@@ -687,7 +691,7 @@ class ComputeManager(manager.SchedulerDependentManager):
"""
migration_ref = self.db.migration_get(context, migration_id)
- instance_ref = self.db.instance_get(context,
+ instance_ref = self.db.instance_get_by_uuid(context,
migration_ref.instance_uuid)
self.driver.destroy(instance_ref)
@@ -732,14 +736,19 @@ class ComputeManager(manager.SchedulerDependentManager):
@exception.wrap_exception
@checks_instance_lock
- def prep_resize(self, context, instance_uuid, flavor_id):
+ def prep_resize(self, context, instance_id, flavor_id):
"""Initiates the process of moving a running instance to another host.
Possibly changes the RAM and disk size in the process.
"""
context = context.elevated()
- instance_ref = self.db.instance_get_by_uuid(context, instance_uuid)
+
+ # Because of checks_instance_lock, this must currently be called
+ # instance_id. However, the compute API is always passing the UUID
+ # of the instance down
+ instance_ref = self.db.instance_get_by_uuid(context, instance_id)
+
if instance_ref['host'] == FLAGS.host:
raise exception.Error(_(
'Migration error: destination same as source!'))
@@ -747,7 +756,7 @@ class ComputeManager(manager.SchedulerDependentManager):
instance_type = self.db.instance_type_get_by_flavor_id(context,
flavor_id)
migration_ref = self.db.migration_create(context,
- {'instance_uuid': instance_uuid,
+ {'instance_uuid': instance_ref['uuid'],
'source_compute': instance_ref['host'],
'dest_compute': FLAGS.host,
'dest_host': self.driver.get_host_ip_addr(),
@@ -755,7 +764,7 @@ class ComputeManager(manager.SchedulerDependentManager):
'new_flavor_id': flavor_id,
'status': 'pre-migrating'})
- LOG.audit(_('instance %s: migrating to '), instance_uuid,
+ LOG.audit(_('instance %s: migrating'), instance_ref['uuid'],
context=context)
topic = self.db.queue_get_for(context, FLAGS.compute_topic,
instance_ref['host'])
diff --git a/nova/exception.py b/nova/exception.py
index 988940d6a..a98b0a36b 100644
--- a/nova/exception.py
+++ b/nova/exception.py
@@ -77,8 +77,8 @@ def wrap_db_error(f):
except Exception, e:
LOG.exception(_('DB exception wrapped.'))
raise DBError(e)
- return _wrap
_wrap.func_name = f.func_name
+ return _wrap
def wrap_exception(f):