summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell Bryant <rbryant@redhat.com>2012-10-24 15:58:05 -0400
committerRussell Bryant <rbryant@redhat.com>2012-10-24 18:47:13 -0400
commit33c21d743d9b20006c44c3152e1c5ce4ce7605fc (patch)
treeb31b23eda5b54b340b20de38cdfdcab61c65a8ac
parent151a4a7548549871e5d489ee0e86e64259266ff0 (diff)
Send full migration data to finish_resize.
This patch updates the finish_resize method in the compute rpc api to receive all of the migration data instead of just the migration id. This avoids an unnecessary database read in finish_resize. Part of blueprint no-db-compute. Change-Id: I4791551a13a8b73e7a5c22ab9f49cdab7db8de1f
-rw-r--r--nova/compute/manager.py36
-rw-r--r--nova/compute/rpcapi.py9
-rw-r--r--nova/tests/compute/test_compute.py13
-rw-r--r--nova/tests/compute/test_rpcapi.py4
4 files changed, 33 insertions, 29 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index e3a6a2986..be21e6dd1 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -216,7 +216,7 @@ def _get_image_meta(context, image_ref):
class ComputeManager(manager.SchedulerDependentManager):
"""Manages the running instances from creation to destruction."""
- RPC_API_VERSION = '2.7'
+ RPC_API_VERSION = '2.8'
def __init__(self, compute_driver=None, *args, **kwargs):
"""Load configuration options and connect to the hypervisor."""
@@ -1678,9 +1678,9 @@ class ComputeManager(manager.SchedulerDependentManager):
self.network_api.migrate_instance_start(context, instance,
self.host)
- self.db.migration_update(context,
- migration['id'],
- {'status': 'post-migrating'})
+ migration = self.db.migration_update(context,
+ migration['id'],
+ {'status': 'post-migrating'})
self._instance_update(context, instance['uuid'],
host=migration['dest_compute'],
@@ -1689,17 +1689,17 @@ class ComputeManager(manager.SchedulerDependentManager):
RESIZE_MIGRATING)
self.compute_rpcapi.finish_resize(context, instance,
- migration['id'], image, disk_info,
+ migration, image, disk_info,
migration['dest_compute'], reservations)
self._notify_about_instance_usage(context, instance, "resize.end",
network_info=network_info)
- def _finish_resize(self, context, instance, migration_ref, disk_info,
+ def _finish_resize(self, context, instance, migration, disk_info,
image):
resize_instance = False
- old_instance_type_id = migration_ref['old_instance_type_id']
- new_instance_type_id = migration_ref['new_instance_type_id']
+ old_instance_type_id = migration['old_instance_type_id']
+ new_instance_type_id = migration['new_instance_type_id']
if old_instance_type_id != new_instance_type_id:
instance_type = instance_types.get_instance_type(
new_instance_type_id)
@@ -1715,12 +1715,11 @@ class ComputeManager(manager.SchedulerDependentManager):
# NOTE(tr3buchet): setup networks on destination host
self.network_api.setup_networks_on_host(context, instance,
- migration_ref['dest_compute'])
+ migration['dest_compute'])
- if migration_ref['dest_compute'] != \
- migration_ref['source_compute']:
+ if migration['dest_compute'] != migration['source_compute']:
self.network_api.migrate_instance_finish(context, instance,
- migration_ref['dest_compute'])
+ migration['dest_compute'])
network_info = self._get_instance_nw_info(context, instance)
@@ -1743,7 +1742,7 @@ class ComputeManager(manager.SchedulerDependentManager):
self.volume_api.initialize_connection(context, volume,
connector)
- self.driver.finish_migration(context, migration_ref, instance,
+ self.driver.finish_migration(context, migration, instance,
disk_info,
self._legacy_nw_info(network_info),
image, resize_instance,
@@ -1757,7 +1756,7 @@ class ComputeManager(manager.SchedulerDependentManager):
expected_task_state=task_states.
RESIZE_FINISH)
- self.db.migration_update(context, migration_ref.id,
+ self.db.migration_update(context, migration['id'],
{'status': 'finished'})
self._notify_about_instance_usage(
@@ -1767,17 +1766,18 @@ class ComputeManager(manager.SchedulerDependentManager):
@exception.wrap_exception(notifier=notifier, publisher_id=publisher_id())
@reverts_task_state
@wrap_instance_fault
- def finish_resize(self, context, migration_id, disk_info, image,
- instance, reservations=None):
+ def finish_resize(self, context, disk_info, image, instance,
+ reservations=None, migration=None, migration_id=None):
"""Completes the migration process.
Sets up the newly transferred disk and turns on the instance at its
new host machine.
"""
- migration_ref = self.db.migration_get(context, migration_id)
+ if not migration:
+ migration = self.db.migration_get(context, migration_id)
try:
- self._finish_resize(context, instance, migration_ref,
+ self._finish_resize(context, instance, migration,
disk_info, image)
self._quota_commit(context, reservations)
except Exception, error:
diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py
index e0988d92b..cb1ddede8 100644
--- a/nova/compute/rpcapi.py
+++ b/nova/compute/rpcapi.py
@@ -135,6 +135,7 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy):
2.5 - Add block device and network info to reboot_instance
2.6 - Remove migration_id, add migration to resize_instance
2.7 - Remove migration_id, add migration to confirm_resize
+ 2.8 - Remove migration_id, add migration to finish_resize
'''
#
@@ -223,13 +224,15 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy):
instance=instance_p, volume_id=volume_id),
topic=_compute_topic(self.topic, ctxt, None, instance))
- def finish_resize(self, ctxt, instance, migration_id, image, disk_info,
+ def finish_resize(self, ctxt, instance, migration, image, disk_info,
host, reservations=None):
instance_p = jsonutils.to_primitive(instance)
+ migration_p = jsonutils.to_primitive(migration)
self.cast(ctxt, self.make_msg('finish_resize',
- instance=instance_p, migration_id=migration_id,
+ instance=instance_p, migration=migration_p,
image=image, disk_info=disk_info, reservations=reservations),
- topic=_compute_topic(self.topic, ctxt, host, None))
+ topic=_compute_topic(self.topic, ctxt, host, None),
+ version='2.8')
def finish_revert_resize(self, ctxt, instance, migration_id, host,
reservations=None):
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index d61d1182b..d989c488e 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -1616,7 +1616,7 @@ class ComputeTestCase(BaseTestCase):
db.instance_update(self.context, instance["uuid"],
{"task_state": task_states.RESIZE_MIGRATED})
self.compute.finish_resize(context,
- migration_id=int(migration_ref['id']),
+ migration=jsonutils.to_primitive(migration_ref),
disk_info={}, image={}, instance=instance,
reservations=reservations)
self.compute.terminate_instance(self.context, instance=instance)
@@ -1646,7 +1646,8 @@ class ComputeTestCase(BaseTestCase):
db.instance_update(self.context, instance["uuid"],
{"task_state": task_states.RESIZE_MIGRATED})
self.assertRaises(test.TestingException, self.compute.finish_resize,
- context, migration_id=int(migration_ref['id']),
+ context,
+ migration=jsonutils.to_primitive(migration_ref),
disk_info={}, image={}, instance=instance,
reservations=reservations)
@@ -1750,8 +1751,8 @@ class ComputeTestCase(BaseTestCase):
test_notifier.NOTIFICATIONS = []
self.compute.finish_resize(context,
- migration_id=int(migration_ref['id']), disk_info={}, image={},
- instance=instance)
+ migration=jsonutils.to_primitive(migration_ref),
+ disk_info={}, image={}, instance=instance)
self.assertEquals(len(test_notifier.NOTIFICATIONS), 2)
msg = test_notifier.NOTIFICATIONS[0]
@@ -1943,8 +1944,8 @@ class ComputeTestCase(BaseTestCase):
migration=migration_ref,
image={})
self.compute.finish_resize(context,
- migration_id=int(migration_ref['id']), disk_info={},
- image={}, instance=instance)
+ migration=jsonutils.to_primitive(migration_ref),
+ disk_info={}, image={}, instance=instance)
# Prove that the instance size is now the new size
inst_ref = db.instance_get_by_uuid(context, instance['uuid'])
diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py
index ee863cc8a..460fbc24a 100644
--- a/nova/tests/compute/test_rpcapi.py
+++ b/nova/tests/compute/test_rpcapi.py
@@ -137,9 +137,9 @@ class ComputeRpcAPITestCase(test.TestCase):
def test_finish_resize(self):
self._test_compute_api('finish_resize', 'cast',
- instance=self.fake_instance, migration_id='id',
+ instance=self.fake_instance, migration={'id': 'foo'},
image='image', disk_info='disk_info', host='host',
- reservations=list('fake_res'))
+ reservations=list('fake_res'), version='2.8')
def test_finish_revert_resize(self):
self._test_compute_api('finish_revert_resize', 'cast',