diff options
author | Morgan Jones <morgan@parelastic.com> | 2016-10-06 16:14:42 -0400 |
---|---|---|
committer | Morgan Jones <morgan@parelastic.com> | 2016-10-07 09:38:08 -0400 |
commit | 18f23a71777cdab1a397cafe0a677d9692eccacd (patch) | |
tree | de52dcfdf80b5348b1d21202f2ad53c3ff19d7e8 /trove/conductor | |
parent | 473d360b906dba80f0f914e88b461221c1bfd5f3 (diff) | |
download | trove-18f23a71777cdab1a397cafe0a677d9692eccacd.tar.gz |
Fix RPC Versioning
Modifies how the APIs for Conductor, Guest, and Taskmanager
handle versioning for olso_messaging.
Closes-Bug: 1631106
Change-Id: I2b9d50e15ac98041c427b74cac63ac231cb4b53e
Co-Authored-By: Amrith Kumar <amrith@tesora.com>
Diffstat (limited to 'trove/conductor')
-rw-r--r-- | trove/conductor/api.py | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/trove/conductor/api.py b/trove/conductor/api.py index d83aef5c..757416b2 100644 --- a/trove/conductor/api.py +++ b/trove/conductor/api.py @@ -16,28 +16,50 @@ from oslo_log import log as logging import oslo_messaging as messaging from trove.common import cfg -from trove.common.rpc import version as rpc_version from trove.common.serializable_notification import SerializableNotification from trove import rpc - CONF = cfg.CONF LOG = logging.getLogger(__name__) class API(object): - """API for interacting with trove conductor.""" + """API for interacting with trove conductor. + + API version history: + * 1.0 - Initial version. + + When updating this API, also update API_LATEST_VERSION + """ + + # API_LATEST_VERSION should bump the minor number each time + # a method signature is added or changed + API_LATEST_VERSION = '1.0' + + # API_BASE_VERSION should only change on major version upgrade + API_BASE_VERSION = '1.0' + + VERSION_ALIASES = { + 'icehouse': '1.0', + 'juno': '1.0', + 'kilo': '1.0', + 'liberty': '1.0', + 'mitaka': '1.0', + 'newton': '1.0', + + 'latest': API_LATEST_VERSION + } def __init__(self, context): self.context = context super(API, self).__init__() + version_cap = self.VERSION_ALIASES.get( + CONF.upgrade_levels.conductor, CONF.upgrade_levels.conductor) target = messaging.Target(topic=CONF.conductor_queue, - version=rpc_version.RPC_API_VERSION) + version=version_cap) - self.version_cap = rpc_version.VERSION_ALIASES.get( - CONF.upgrade_levels.conductor) - self.client = self.get_client(target, self.version_cap) + self.client = self.get_client(target, version_cap) def get_client(self, target, version_cap, serializer=None): return rpc.get_client(target, @@ -47,8 +69,9 @@ class API(object): def heartbeat(self, instance_id, payload, sent=None): LOG.debug("Making async call to cast heartbeat for instance: %s" % instance_id) + version = self.API_BASE_VERSION - cctxt = self.client.prepare(version=self.version_cap) + cctxt = self.client.prepare(version=version) cctxt.cast(self.context, "heartbeat", instance_id=instance_id, sent=sent, @@ -58,8 +81,9 @@ class API(object): **backup_fields): LOG.debug("Making async call to cast update_backup for instance: %s" % instance_id) + version = self.API_BASE_VERSION - cctxt = self.client.prepare(version=self.version_cap) + cctxt = self.client.prepare(version=version) cctxt.cast(self.context, "update_backup", instance_id=instance_id, backup_id=backup_id, @@ -69,14 +93,16 @@ class API(object): def report_root(self, instance_id, user): LOG.debug("Making async call to cast report_root for instance: %s" % instance_id) - cctxt = self.client.prepare(version=self.version_cap) + version = self.API_BASE_VERSION + cctxt = self.client.prepare(version=version) cctxt.cast(self.context, "report_root", instance_id=instance_id, user=user) def notify_end(self, **notification_args): LOG.debug("Making async call to cast end notification") - cctxt = self.client.prepare(version=self.version_cap) + version = self.API_BASE_VERSION + cctxt = self.client.prepare(version=version) context = self.context serialized = SerializableNotification.serialize(context, context.notification) @@ -86,7 +112,8 @@ class API(object): def notify_exc_info(self, message, exception): LOG.debug("Making async call to cast error notification") - cctxt = self.client.prepare(version=self.version_cap) + version = self.API_BASE_VERSION + cctxt = self.client.prepare(version=version) context = self.context serialized = SerializableNotification.serialize(context, context.notification) |