Derp
This commit is contained in:
@@ -402,22 +402,30 @@ 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.db.instance_get(instance_id)
|
||||
self._cast_compute_message('revert_resize', context, instance_id)
|
||||
migration_ref = self.db.migration_get_by_instance_and_status(context,
|
||||
instance_id, 'finished')
|
||||
if not migration_ref:
|
||||
raise exception.Error(_("No finished migrations found for
|
||||
instance"))
|
||||
|
||||
params = { 'migration_id': migration_ref['id'])
|
||||
self._cast_compute_message('revert_resize', context, instance_id,
|
||||
migration_ref['dest_compute'], params=params)
|
||||
|
||||
def confirm_resize(self, context, instance_id):
|
||||
"""Confirms a migration/resize, deleting the 'old' instance in the
|
||||
process."""
|
||||
context = context.elevated()
|
||||
migration_ref = self.db.migration_get_by_instance(context,
|
||||
instance_id)
|
||||
if migration_ref['status'] != 'finished':
|
||||
raise exception.Error(_("Migration has incorrect status %s" %
|
||||
migration_ref['status']))
|
||||
migration_ref = self.db.migration_get_by_instance_and_status(context,
|
||||
instance_id, 'finished')
|
||||
if not migration_ref:
|
||||
raise exception.Error(_("No finished migrations found for
|
||||
instance"))
|
||||
instance_ref = self.db.instance_get(context, instance_id)
|
||||
|
||||
self._cast_compute_message('terminate_instance', context, instance_id,
|
||||
migration_ref['source_compute'])
|
||||
params = { 'migration_id': migration_ref['id'])
|
||||
self._cast_compute_message('confirm_resize', context, instance_id,
|
||||
migration_ref['source_compute'], params=param)
|
||||
|
||||
self.db.instance_update(context, instance_id,
|
||||
{'host': migration_ref['dest_compute'], })
|
||||
|
||||
@@ -380,15 +380,41 @@ class ComputeManager(manager.Manager):
|
||||
"""Update instance state when async task completes."""
|
||||
self._update_state(context, instance_id)
|
||||
|
||||
@exception.wrap_exception
|
||||
@echecks_instance_lock
|
||||
def confirm_resize(self, context, instance_id, migration_id):
|
||||
""" Destroys the source instance """
|
||||
context = context.elevated()
|
||||
instance_ref = self.db.instance_get(context, instance_id)
|
||||
migration_ref = self.db.migration_get(context, migration_id)
|
||||
self.driver.destroy(instance_ref)
|
||||
self.db.migration_update(context, migration_id,
|
||||
{ 'status': 'confirmed' })
|
||||
|
||||
@exception.wrap_exception
|
||||
@checks_instance_lock
|
||||
def revert_resize(self, context, instance_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 source machine"""
|
||||
pass
|
||||
|
||||
instance_ref = self.db.instance_get(context, instance_id)
|
||||
migration_ref = self.db.migration_get(context, migration_id)
|
||||
|
||||
if migration_ref['source_compute'] == instance_ref['host']:
|
||||
self.driver.power_on(instance_ref)
|
||||
self.db.migration_update(context, migration_id,
|
||||
{ 'status': 'reverted' })
|
||||
else:
|
||||
self.driver.destroy(instance_ref)
|
||||
topic = self.db.queue_get_for(context, FLAGS.compute_topic,
|
||||
instance_ref['host'])
|
||||
rpc.cast(context, topic,
|
||||
{ 'method': 'resize_instance',
|
||||
'args': {
|
||||
'migration_id': migration_ref['id'],
|
||||
'instance_id': instance_id,
|
||||
},
|
||||
})
|
||||
|
||||
@exception.wrap_exception
|
||||
@checks_instance_lock
|
||||
|
||||
@@ -1952,10 +1952,11 @@ def migration_get(context, id, session=None):
|
||||
|
||||
|
||||
@require_admin_context
|
||||
def migration_get_by_instance(context, instance_id):
|
||||
def migration_get_by_instance_and_status(context, instance_id, status):
|
||||
session = get_session()
|
||||
result = session.query(models.Migration).\
|
||||
filter_by(instance_id=instance_id).first()
|
||||
filter_by(instance_id=instance_id).
|
||||
filter_by(status=status).first()
|
||||
if not result:
|
||||
raise exception.NotFound(_("No migration found with instance id %s")
|
||||
% migration_id)
|
||||
|
||||
Reference in New Issue
Block a user