summaryrefslogtreecommitdiff
path: root/trove/conductor
diff options
context:
space:
mode:
authorMorgan Jones <morgan@parelastic.com>2016-10-06 16:14:42 -0400
committerMorgan Jones <morgan@parelastic.com>2016-10-07 09:38:08 -0400
commit18f23a71777cdab1a397cafe0a677d9692eccacd (patch)
treede52dcfdf80b5348b1d21202f2ad53c3ff19d7e8 /trove/conductor
parent473d360b906dba80f0f914e88b461221c1bfd5f3 (diff)
downloadtrove-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.py51
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)