summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell Bryant <rbryant@redhat.com>2012-07-26 13:44:12 -0400
committerRussell Bryant <rbryant@redhat.com>2012-07-26 18:46:32 -0400
commita484f066008487ed89c27ec4bee8a64b011c20f6 (patch)
treed346afb0e450731e3ccabf39aad9bce36c9862df
parent9374157d27f5df34cdc5e78bc384f97382243013 (diff)
Send a full instance via rpc for get_vnc_console.
Change the get_vnc_console 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: I4443e65fd6a9aafdad21fda63ef04a03428288a9
-rw-r--r--nova/compute/manager.py12
-rw-r--r--nova/compute/rpcapi.py7
-rw-r--r--nova/tests/compute/test_compute.py30
-rw-r--r--nova/tests/compute/test_rpcapi.py5
4 files changed, 27 insertions, 27 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index 7168fdf3a..7ae875430 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -298,7 +298,7 @@ def _get_additional_capabilities():
class ComputeManager(manager.SchedulerDependentManager):
"""Manages the running instances from creation to destruction."""
- RPC_API_VERSION = '1.16'
+ RPC_API_VERSION = '1.17'
def __init__(self, compute_driver=None, *args, **kwargs):
"""Load configuration options and connect to the hypervisor."""
@@ -1926,12 +1926,14 @@ class ComputeManager(manager.SchedulerDependentManager):
@exception.wrap_exception(notifier=notifier, publisher_id=publisher_id())
@wrap_instance_fault
- def get_vnc_console(self, context, instance_uuid, console_type):
+ def get_vnc_console(self, context, console_type, instance_uuid=None,
+ instance=None):
"""Return connection information for a vnc console."""
context = context.elevated()
- instance_ref = self.db.instance_get_by_uuid(context, instance_uuid)
+ if not instance:
+ instance = self.db.instance_get_by_uuid(context, instance_uuid)
- LOG.debug(_("Getting vnc console"), instance=instance_ref)
+ LOG.debug(_("Getting vnc console"), instance=instance)
token = str(utils.gen_uuid())
if console_type == 'novnc':
@@ -1945,7 +1947,7 @@ class ComputeManager(manager.SchedulerDependentManager):
# Retrieve connect info from driver, and then decorate with our
# access info token
- connect_info = self.driver.get_vnc_console(instance_ref)
+ connect_info = self.driver.get_vnc_console(instance)
connect_info['token'] = token
connect_info['access_url'] = access_url
diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py
index 86bad50e2..6382716ad 100644
--- a/nova/compute/rpcapi.py
+++ b/nova/compute/rpcapi.py
@@ -78,6 +78,7 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy):
1.15 - Remove instance_uuid, add instance argument to
finish_revert_resize()
1.16 - Remove instance_uuid, add instance argument to get_diagnostics()
+ 1.17 - Remove instance_uuid, add instance argument to get_vnc_console()
'''
BASE_RPC_API_VERSION = '1.0'
@@ -189,9 +190,11 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy):
version='1.16')
def get_vnc_console(self, ctxt, instance, console_type):
+ instance_p = jsonutils.to_primitive(instance)
return self.call(ctxt, self.make_msg('get_vnc_console',
- instance_uuid=instance['uuid'], console_type=console_type),
- topic=_compute_topic(self.topic, ctxt, None, instance))
+ instance=instance, console_type=console_type),
+ topic=_compute_topic(self.topic, ctxt, None, instance),
+ version='1.17')
def host_maintenance_mode(self, ctxt, host_param, mode, host):
'''Set host maintenance mode
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index 591b2ebd4..e6bc8547f 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -802,48 +802,42 @@ class ComputeTestCase(BaseTestCase):
def test_novnc_vnc_console(self):
"""Make sure we can a vnc console for an instance."""
- instance = self._create_fake_instance()
+ instance = jsonutils.to_primitive(self._create_fake_instance())
self.compute.run_instance(self.context, instance['uuid'])
- console = self.compute.get_vnc_console(self.context,
- instance['uuid'],
- 'novnc')
+ console = self.compute.get_vnc_console(self.context, 'novnc',
+ instance=instance)
self.assert_(console)
self.compute.terminate_instance(self.context, instance['uuid'])
def test_xvpvnc_vnc_console(self):
"""Make sure we can a vnc console for an instance."""
- instance = self._create_fake_instance()
+ instance = jsonutils.to_primitive(self._create_fake_instance())
self.compute.run_instance(self.context, instance['uuid'])
- console = self.compute.get_vnc_console(self.context,
- instance['uuid'],
- 'xvpvnc')
+ console = self.compute.get_vnc_console(self.context, 'xvpvnc',
+ instance=instance)
self.assert_(console)
self.compute.terminate_instance(self.context, instance['uuid'])
def test_invalid_vnc_console_type(self):
"""Raise useful error if console type is an unrecognised string"""
- instance = self._create_fake_instance()
+ instance = jsonutils.to_primitive(self._create_fake_instance())
self.compute.run_instance(self.context, instance['uuid'])
self.assertRaises(exception.ConsoleTypeInvalid,
self.compute.get_vnc_console,
- self.context,
- instance['uuid'],
- 'invalid')
+ self.context, 'invalid', instance=instance)
self.compute.terminate_instance(self.context, instance['uuid'])
def test_missing_vnc_console_type(self):
"""Raise useful error is console type is None"""
- instance = self._create_fake_instance()
+ instance = jsonutils.to_primitive(self._create_fake_instance())
self.compute.run_instance(self.context, instance['uuid'])
self.assertRaises(exception.ConsoleTypeInvalid,
self.compute.get_vnc_console,
- self.context,
- instance['uuid'],
- None)
+ self.context, None, instance=instance)
self.compute.terminate_instance(self.context, instance['uuid'])
def test_diagnostics(self):
@@ -3679,9 +3673,9 @@ class ComputeAPITestCase(BaseTestCase):
self.mox.StubOutWithMock(rpc, 'call')
rpc_msg1 = {'method': 'get_vnc_console',
- 'args': {'instance_uuid': fake_instance['uuid'],
+ 'args': {'instance': fake_instance,
'console_type': fake_console_type},
- 'version': compute_rpcapi.ComputeAPI.BASE_RPC_API_VERSION}
+ 'version': '1.17'}
rpc_msg2 = {'method': 'authorize_console',
'args': fake_connect_info,
'version': '1.0'}
diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py
index e1b33210c..2bbb7e665 100644
--- a/nova/tests/compute/test_rpcapi.py
+++ b/nova/tests/compute/test_rpcapi.py
@@ -53,7 +53,7 @@ class ComputeRpcAPITestCase(test.TestCase):
'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_console_output', 'get_diagnostics', 'get_vnc_console',
'pause_instance', 'reboot_instance', 'suspend_instance',
'unpause_instance'
]
@@ -185,7 +185,8 @@ class ComputeRpcAPITestCase(test.TestCase):
def test_get_vnc_console(self):
self._test_compute_api('get_vnc_console', 'call',
- instance=self.fake_instance, console_type='type')
+ instance=self.fake_instance, console_type='type',
+ version='1.17')
def test_host_maintenance_mode(self):
self._test_compute_api('host_maintenance_mode', 'call',