summaryrefslogtreecommitdiffstats
path: root/nova/console
diff options
context:
space:
mode:
authorRussell Bryant <rbryant@redhat.com>2013-06-10 21:18:37 -0400
committerRussell Bryant <rbryant@redhat.com>2013-06-14 11:38:22 -0400
commit2bcdb2057188a1a1bd1731ff713631e8a30e4f20 (patch)
tree774f85092371effcef463ff92fd17b3f1bf5a411 /nova/console
parent77595f8e08a61507ad5c7c990651fd4f8131c150 (diff)
downloadnova-2bcdb2057188a1a1bd1731ff713631e8a30e4f20.tar.gz
nova-2bcdb2057188a1a1bd1731ff713631e8a30e4f20.tar.xz
nova-2bcdb2057188a1a1bd1731ff713631e8a30e4f20.zip
Add rpc client side version control.
This is a first pass at client side version control for rpc. It allows you to configure a max version of messages that clients are allowed to send. You can find one example of how clients need to adapt in the conductor rpcapi. All other changes in rpc apis since the grizzly release are not applicable to this. Some future improvements to this could be reporting the versions supported by running services and having that be discoverable via the API. We could also consider allow setting these client side version caps via the API. For now, recommended values for these config options while attempting a rolling upgrade will just have to be documented. The config options allow specifying specific rpc api version numbers if desired, but an alias of 'grizzly' is also supported. So typically at the start of a rolling upgrade you'd have: [upgrade_levels] compute=grizzly conductor=grizzly scheduler=grizzly ... etc ... And as you update all instances of a service, you would remove that bit from your configuration across the deployment using your config management system of choice. DocImpact Implements blueprint rpc-version-control. Change-Id: I2c0fd6dd7484c87823846d7c31d6525d93cd1b43
Diffstat (limited to 'nova/console')
-rw-r--r--nova/console/rpcapi.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/nova/console/rpcapi.py b/nova/console/rpcapi.py
index 86debae32..7a78b52c2 100644
--- a/nova/console/rpcapi.py
+++ b/nova/console/rpcapi.py
@@ -31,6 +31,11 @@ rpcapi_opts = [
CONF = cfg.CONF
CONF.register_opts(rpcapi_opts)
+rpcapi_cap_opt = cfg.StrOpt('console',
+ default=None,
+ help='Set a version cap for messages sent to console services')
+CONF.register_opt(rpcapi_cap_opt, 'upgrade_levels')
+
class ConsoleAPI(nova.openstack.common.rpc.proxy.RpcProxy):
'''Client side of the console rpc API.
@@ -39,6 +44,10 @@ class ConsoleAPI(nova.openstack.common.rpc.proxy.RpcProxy):
1.0 - Initial version.
1.1 - Added get_backdoor_port()
+
+ ... Grizzly supports message version 1.1. So, any changes to existing
+ methods in 2.x after that point should be done such that they can
+ handle the version_cap being set to 1.1.
'''
#
@@ -51,11 +60,18 @@ class ConsoleAPI(nova.openstack.common.rpc.proxy.RpcProxy):
#
BASE_RPC_API_VERSION = '1.0'
+ VERSION_ALIASES = {
+ 'grizzly': '1.1',
+ }
+
def __init__(self, topic=None):
topic = topic if topic else CONF.console_topic
+ version_cap = self.VERSION_ALIASES.get(CONF.upgrade_levels.console,
+ CONF.upgrade_levels.console)
super(ConsoleAPI, self).__init__(
topic=topic,
- default_version=self.BASE_RPC_API_VERSION)
+ default_version=self.BASE_RPC_API_VERSION,
+ version_cap=version_cap)
def add_console(self, ctxt, instance_id):
self.cast(ctxt, self.make_msg('add_console', instance_id=instance_id))