Merge "Send a full instance via rpc for finish_resize."
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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'])
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user