deprecate usage of transport aliases

This change starts the deprecation process for the transport aliases.

The first step is deprecate this one cycle. To ensure deployer have
updated they configuration during Newton Then in Octacia we will deprecate
'aliases' kwargs of transportURL() and get_transport() for consuming
application.

Related-bug: #1424728

Change-Id: I314cefa5fb1803fa7e21e3e34300e5ced31bba89
This commit is contained in:
Mehdi Abaakouk 2015-05-06 09:55:23 +02:00 committed by Mehdi Abaakouk (sileht)
parent 7809cdc602
commit 4d0f7ab652
2 changed files with 29 additions and 3 deletions

View File

@ -14,6 +14,7 @@
# under the License. # under the License.
import fixtures import fixtures
import mock
from mox3 import mox from mox3 import mox
from oslo_config import cfg from oslo_config import cfg
import six import six
@ -112,7 +113,8 @@ class GetTransportTestCase(test_utils.BaseTestCase):
allowed=[]))), allowed=[]))),
] ]
def test_get_transport(self): @mock.patch('oslo_messaging.transport.LOG')
def test_get_transport(self, fake_logger):
self.config(rpc_backend=self.rpc_backend, self.config(rpc_backend=self.rpc_backend,
control_exchange=self.control_exchange, control_exchange=self.control_exchange,
transport_url=self.transport_url) transport_url=self.transport_url)
@ -142,6 +144,12 @@ class GetTransportTestCase(test_utils.BaseTestCase):
kwargs['aliases'] = self.aliases kwargs['aliases'] = self.aliases
transport_ = oslo_messaging.get_transport(self.conf, **kwargs) transport_ = oslo_messaging.get_transport(self.conf, **kwargs)
if self.aliases is not None:
self.assertEqual(fake_logger.warning.mock_calls,
[mock.call('legacy "rpc_backend" is deprecated, '
'"testfoo" must be replaced by '
'"%s"' % self.aliases.get('testfoo'))])
self.assertIsNotNone(transport_) self.assertIsNotNone(transport_)
self.assertIs(transport_.conf, self.conf) self.assertIs(transport_.conf, self.conf)
self.assertIs(transport_._driver, drvr) self.assertIs(transport_._driver, drvr)

View File

@ -27,6 +27,8 @@ __all__ = [
'set_transport_defaults', 'set_transport_defaults',
] ]
import logging
from oslo_config import cfg from oslo_config import cfg
import six import six
from six.moves.urllib import parse from six.moves.urllib import parse
@ -34,6 +36,7 @@ from stevedore import driver
from oslo_messaging import exceptions from oslo_messaging import exceptions
LOG = logging.getLogger(__name__)
_transport_opts = [ _transport_opts = [
cfg.StrOpt('transport_url', cfg.StrOpt('transport_url',
@ -240,7 +243,7 @@ class TransportURL(object):
:type virtual_host: str :type virtual_host: str
:param hosts: a list of TransportHost objects :param hosts: a list of TransportHost objects
:type hosts: list :type hosts: list
:param aliases: A map of transport alias to transport name :param aliases: DEPRECATED: A map of transport alias to transport name
:type aliases: dict :type aliases: dict
""" """
@ -259,13 +262,28 @@ class TransportURL(object):
else: else:
self.aliases = aliases self.aliases = aliases
self._deprecation_logged = False
@property @property
def transport(self): def transport(self):
if self._transport is None: if self._transport is None:
transport = self.conf.rpc_backend transport = self.conf.rpc_backend
else: else:
transport = self._transport transport = self._transport
return self.aliases.get(transport, transport) final_transport = self.aliases.get(transport, transport)
if not self._deprecation_logged and final_transport != transport:
# NOTE(sileht): The first step is deprecate this one cycle.
# To ensure deployer have updated they configuration during Octavia
# Then in P we will deprecate aliases kwargs of TransportURL() and
# get_transport() for consuming application
LOG.warning('legacy "rpc_backend" is deprecated, '
'"%(legacy_transport)s" must be replaced by '
'"%(final_transport)s"' % {
'legacy_transport': transport,
'final_transport': final_transport})
self._deprecation_logged = True
return final_transport
@transport.setter @transport.setter
def transport(self, value): def transport(self, value):