diff options
author | Russell Bryant <rbryant@redhat.com> | 2012-07-31 15:31:55 -0400 |
---|---|---|
committer | Russell Bryant <rbryant@redhat.com> | 2012-07-31 15:33:55 -0400 |
commit | 14129b4af8795a28a62b69897dc5cd6602353cc9 (patch) | |
tree | 226cb9b9ce84c70a5f993906ab8ec9bb9bccb819 | |
parent | 6a6fe2f6bf736583d9e2cde0733c6568877b7979 (diff) | |
download | nova-14129b4af8795a28a62b69897dc5cd6602353cc9.tar.gz nova-14129b4af8795a28a62b69897dc5cd6602353cc9.tar.xz nova-14129b4af8795a28a62b69897dc5cd6602353cc9.zip |
Send a full instance in change_instance_metadata.
Change the change_instance_metadata 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.
These methods were moved in rpcapi.py and test_rpcapi.py but only because
the rest of the file was in alphabetical order. The move puts it in the
right place to maintain that order.
Part of blueprint no-db-messaging.
Change-Id: I7dd2fb7480010893f66c753b3d31a4556009efe0
-rw-r--r-- | nova/compute/manager.py | 12 | ||||
-rw-r--r-- | nova/compute/rpcapi.py | 15 | ||||
-rw-r--r-- | nova/tests/compute/test_compute.py | 3 | ||||
-rw-r--r-- | nova/tests/compute/test_rpcapi.py | 12 |
4 files changed, 24 insertions, 18 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 31428675c..fd0f9049a 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.35' + RPC_API_VERSION = '1.36' def __init__(self, compute_driver=None, *args, **kwargs): """Load configuration options and connect to the hypervisor.""" @@ -1371,12 +1371,14 @@ class ComputeManager(manager.SchedulerDependentManager): @exception.wrap_exception(notifier=notifier, publisher_id=publisher_id()) @checks_instance_lock @wrap_instance_fault - def change_instance_metadata(self, context, instance_uuid, diff): + def change_instance_metadata(self, context, diff, instance=None, + instance_uuid=None): """Update the metadata published to the instance.""" - instance_ref = self.db.instance_get_by_uuid(context, instance_uuid) + if not instance: + instance = self.db.instance_get_by_uuid(context, instance) LOG.debug(_("Changing instance metadata according to %(diff)r") % - locals(), instance=instance_ref) - self.driver.change_instance_metadata(context, instance_ref, diff) + locals(), instance=instance) + self.driver.change_instance_metadata(context, instance, diff) @exception.wrap_exception(notifier=notifier, publisher_id=publisher_id()) @checks_instance_lock diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py index 435cae50b..7bc9ddaf5 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -110,6 +110,8 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): snapshot_instance() 1.35 - Remove instance_uuid, add instance argument to unrescue_instance() + 1.36 - Remove instance_uuid, add instance argument to + change_instance_metadata() ''' BASE_RPC_API_VERSION = '1.0' @@ -147,6 +149,13 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): topic=_compute_topic(self.topic, ctxt, None, instance), version='1.9') + def change_instance_metadata(self, ctxt, instance, diff): + instance_p = jsonutils.to_primitive(instance) + self.cast(ctxt, self.make_msg('change_instance_metadata', + instance=instance_p, diff=diff), + topic=_compute_topic(self.topic, ctxt, None, instance), + version='1.36') + def check_can_live_migrate_destination(self, ctxt, instance, destination, block_migration, disk_over_commit): instance_p = jsonutils.to_primitive(instance) @@ -468,12 +477,6 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): 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', - instance_uuid=instance['uuid'], diff=diff), - topic=_compute_topic(self.topic, ctxt, None, instance), - version='1.3') - class SecurityGroupAPI(nova.openstack.common.rpc.proxy.RpcProxy): '''Client side of the security group rpc API. diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index d8bf703ea..5cee6f94d 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -3382,7 +3382,8 @@ class ComputeAPITestCase(BaseTestCase): def test_instance_metadata(self): meta_changes = [None] - def fake_change_instance_metadata(inst, ctxt, instance, diff): + def fake_change_instance_metadata(inst, ctxt, diff, instance=None, + instance_uuid=None): meta_changes[0] = diff self.stubs.Set(compute_rpcapi.ComputeAPI, 'change_instance_metadata', fake_change_instance_metadata) diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py index 3c9806b57..e099a776c 100644 --- a/nova/tests/compute/test_rpcapi.py +++ b/nova/tests/compute/test_rpcapi.py @@ -50,7 +50,7 @@ class ComputeRpcAPITestCase(test.TestCase): methods_with_instance = [ 'add_fixed_ip_to_instance', 'attach_volume', - 'check_can_live_migrate_destination', + 'change_instance_metadata', 'check_can_live_migrate_destination', 'check_can_live_migrate_source', 'confirm_resize', 'detach_volume', 'finish_resize', 'finish_revert_resize', 'get_console_output', 'get_diagnostics', 'get_vnc_console', @@ -132,6 +132,11 @@ class ComputeRpcAPITestCase(test.TestCase): instance=self.fake_instance, volume_id='id', mountpoint='mp', version='1.9') + def test_change_instance_metadata(self): + self._test_compute_api('change_instance_metadata', 'cast', + instance=self.fake_instance, diff={}, + version='1.36') + def test_check_can_live_migrate_destination(self): self._test_compute_api('check_can_live_migrate_destination', 'call', version='1.10', instance=self.fake_instance, @@ -337,8 +342,3 @@ class ComputeRpcAPITestCase(test.TestCase): def test_unrescue_instance(self): self._test_compute_api('unrescue_instance', 'cast', instance=self.fake_instance, version='1.35') - - def test_change_instance_metadata(self): - self._test_compute_api('change_instance_metadata', 'cast', - instance=self.fake_instance, diff={}, - version='1.3') |