diff --git a/oslo_messaging/tests/test_transport.py b/oslo_messaging/tests/test_transport.py index a9d7dc6b2..b8561f116 100644 --- a/oslo_messaging/tests/test_transport.py +++ b/oslo_messaging/tests/test_transport.py @@ -14,6 +14,7 @@ # under the License. import fixtures +import mock from mox3 import mox from oslo_config import cfg import six @@ -112,7 +113,8 @@ class GetTransportTestCase(test_utils.BaseTestCase): 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, control_exchange=self.control_exchange, transport_url=self.transport_url) @@ -142,6 +144,12 @@ class GetTransportTestCase(test_utils.BaseTestCase): kwargs['aliases'] = self.aliases 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.assertIs(transport_.conf, self.conf) self.assertIs(transport_._driver, drvr) diff --git a/oslo_messaging/transport.py b/oslo_messaging/transport.py index aa8867dde..abac3dfec 100644 --- a/oslo_messaging/transport.py +++ b/oslo_messaging/transport.py @@ -27,6 +27,8 @@ __all__ = [ 'set_transport_defaults', ] +import logging + from oslo_config import cfg import six from six.moves.urllib import parse @@ -34,6 +36,7 @@ from stevedore import driver from oslo_messaging import exceptions +LOG = logging.getLogger(__name__) _transport_opts = [ cfg.StrOpt('transport_url', @@ -240,7 +243,7 @@ class TransportURL(object): :type virtual_host: str :param hosts: a list of TransportHost objects :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 """ @@ -259,13 +262,28 @@ class TransportURL(object): else: self.aliases = aliases + self._deprecation_logged = False + @property def transport(self): if self._transport is None: transport = self.conf.rpc_backend else: 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 def transport(self, value):