diff options
author | Russell Bryant <rbryant@redhat.com> | 2012-07-31 15:26:31 -0400 |
---|---|---|
committer | Russell Bryant <rbryant@redhat.com> | 2012-07-31 15:33:55 -0400 |
commit | 6a6fe2f6bf736583d9e2cde0733c6568877b7979 (patch) | |
tree | a12392d5f878477ded4557aa5265764eda11e7d7 | |
parent | 37dee20d2f963ca08e56a95be8c654e1920e4a2a (diff) | |
download | nova-6a6fe2f6bf736583d9e2cde0733c6568877b7979.tar.gz nova-6a6fe2f6bf736583d9e2cde0733c6568877b7979.tar.xz nova-6a6fe2f6bf736583d9e2cde0733c6568877b7979.zip |
Send a full instance in unrescue_instance.
Change the unrescue_instance method of the compute
rpc API to take a full instance over rpc instead of just
the instance UUID. This cuts down on database access needed
by nova-compute.
Part of blueprint no-db-messaging.
Change-Id: I9a693b347ce583aa350f4c10531b53e0f9813577
-rw-r--r-- | nova/compute/manager.py | 21 | ||||
-rw-r--r-- | nova/compute/rpcapi.py | 8 | ||||
-rw-r--r-- | nova/tests/compute/test_compute.py | 12 | ||||
-rw-r--r-- | nova/tests/compute/test_rpcapi.py | 4 |
4 files changed, 30 insertions, 15 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index e76c603e5..31428675c 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -272,7 +272,7 @@ def _get_image_meta(context, image_ref): class ComputeManager(manager.SchedulerDependentManager): """Manages the running instances from creation to destruction.""" - RPC_API_VERSION = '1.34' + RPC_API_VERSION = '1.35' def __init__(self, compute_driver=None, *args, **kwargs): """Load configuration options and connect to the hypervisor.""" @@ -1347,22 +1347,23 @@ class ComputeManager(manager.SchedulerDependentManager): @exception.wrap_exception(notifier=notifier, publisher_id=publisher_id()) @checks_instance_lock @wrap_instance_fault - def unrescue_instance(self, context, instance_uuid): + def unrescue_instance(self, context, instance=None, instance_uuid=None): """Rescue an instance on this host.""" - LOG.audit(_('Unrescuing'), context=context, - instance_uuid=instance_uuid) context = context.elevated() + if not instance: + instance = self.db.instance_get_by_uuid(context, instance_uuid) - instance_ref = self.db.instance_get_by_uuid(context, instance_uuid) - network_info = self._get_instance_nw_info(context, instance_ref) + LOG.audit(_('Unrescuing'), context=context, instance=instance) - with self.error_out_instance_on_exception(context, instance_uuid): - self.driver.unrescue(instance_ref, + network_info = self._get_instance_nw_info(context, instance) + + with self.error_out_instance_on_exception(context, instance['uuid']): + self.driver.unrescue(instance, self._legacy_nw_info(network_info)) - current_power_state = self._get_power_state(context, instance_ref) + current_power_state = self._get_power_state(context, instance) self._instance_update(context, - instance_uuid, + instance['uuid'], vm_state=vm_states.ACTIVE, task_state=None, power_state=current_power_state) diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py index 153348374..435cae50b 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -108,6 +108,8 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): set_admin_password() 1.34 - Remove instance_uuid, add instance argument to snapshot_instance() + 1.35 - Remove instance_uuid, add instance argument to + unrescue_instance() ''' BASE_RPC_API_VERSION = '1.0' @@ -460,9 +462,11 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): version='1.5') def unrescue_instance(self, ctxt, instance): + instance_p = jsonutils.to_primitive(instance) self.cast(ctxt, self.make_msg('unrescue_instance', - instance_uuid=instance['uuid']), - topic=_compute_topic(self.topic, ctxt, None, instance)) + instance=instance_p), + topic=_compute_topic(self.topic, ctxt, None, instance), + version='1.35') def change_instance_metadata(self, ctxt, instance, diff): self.cast(ctxt, self.make_msg('change_instance_metadata', diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index 46f06e7b3..d8bf703ea 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -444,10 +444,20 @@ class ComputeTestCase(BaseTestCase): instance = jsonutils.to_primitive(self._create_fake_instance()) instance_uuid = instance['uuid'] self.compute.run_instance(self.context, instance_uuid) + + # Make sure these methods work with both instance and instance_uuid + self.compute.rescue_instance(self.context, instance=instance) self.assertTrue(called['rescued']) - self.compute.unrescue_instance(self.context, instance_uuid) + self.compute.unrescue_instance(self.context, instance=instance) + self.assertTrue(called['unrescued']) + + self.compute.rescue_instance(self.context, instance_uuid=instance_uuid) + self.assertTrue(called['rescued']) + self.compute.unrescue_instance(self.context, + instance_uuid=instance_uuid) self.assertTrue(called['unrescued']) + self.compute.terminate_instance(self.context, instance_uuid) def test_power_on(self): diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py index cafd7fd55..3c9806b57 100644 --- a/nova/tests/compute/test_rpcapi.py +++ b/nova/tests/compute/test_rpcapi.py @@ -62,7 +62,7 @@ class ComputeRpcAPITestCase(test.TestCase): 'resize_instance', 'resume_instance', 'revert_resize', 'rollback_live_migration_at_destination', 'set_admin_password', 'snapshot_instance', 'start_instance', 'stop_instance', - 'suspend_instance', 'unpause_instance' + 'suspend_instance', 'unpause_instance', 'unrescue_instance' ] if 'rpcapi_class' in kwargs: @@ -336,7 +336,7 @@ class ComputeRpcAPITestCase(test.TestCase): def test_unrescue_instance(self): self._test_compute_api('unrescue_instance', 'cast', - instance=self.fake_instance) + instance=self.fake_instance, version='1.35') def test_change_instance_metadata(self): self._test_compute_api('change_instance_metadata', 'cast', |