diff --git a/oslo/messaging/rpc/dispatcher.py b/oslo/messaging/rpc/dispatcher.py index 28148443f..a5bad113d 100644 --- a/oslo/messaging/rpc/dispatcher.py +++ b/oslo/messaging/rpc/dispatcher.py @@ -29,7 +29,7 @@ from oslo.messaging import _utils as utils from oslo.messaging import localcontext from oslo.messaging import serializer as msg_serializer from oslo.messaging import server as msg_server -from oslo.messaging import target +from oslo.messaging import target as msg_target class RPCDispatcherError(msg_server.MessagingServerError): @@ -68,12 +68,24 @@ class RPCDispatcher(object): Endpoints may have a target attribute describing the namespace and version of the methods exposed by that object. All public methods on an endpoint object are remotely invokable by clients. + + """ - def __init__(self, endpoints, serializer): + def __init__(self, target, endpoints, serializer): + """Construct a rpc server dispatcher. + + :param target: the exchange, topic and server to listen on + :type target: Target + """ + self.endpoints = endpoints self.serializer = serializer or msg_serializer.NoOpSerializer() - self._default_target = target.Target() + self._default_target = msg_target.Target() + self._target = target + + def _listen(self, transport): + return transport._listen(self._target) @staticmethod def _is_namespace(target, namespace): diff --git a/oslo/messaging/rpc/server.py b/oslo/messaging/rpc/server.py index 690b03dff..aaa071671 100644 --- a/oslo/messaging/rpc/server.py +++ b/oslo/messaging/rpc/server.py @@ -121,9 +121,8 @@ def get_rpc_server(transport, target, endpoints, :param serializer: an optional entity serializer :type serializer: Serializer """ - dispatcher = rpc_dispatcher.RPCDispatcher(endpoints, serializer) - return msg_server.MessageHandlingServer(transport, target, - dispatcher, executor) + dispatcher = rpc_dispatcher.RPCDispatcher(target, endpoints, serializer) + return msg_server.MessageHandlingServer(transport, dispatcher, executor) class ExpectedException(Exception): diff --git a/oslo/messaging/server.py b/oslo/messaging/server.py index 68559a9d3..bc96c5718 100644 --- a/oslo/messaging/server.py +++ b/oslo/messaging/server.py @@ -61,7 +61,7 @@ class MessageHandlingServer(object): new tasks. """ - def __init__(self, transport, target, dispatcher, executor='blocking'): + def __init__(self, transport, dispatcher, executor='blocking'): """Construct a message handling server. The dispatcher parameter is a callable which is invoked with context @@ -73,8 +73,6 @@ class MessageHandlingServer(object): :param transport: the messaging transport :type transport: Transport - :param target: the exchange, topic and server to listen on - :type target: Target :param dispatcher: a callable which is invoked for each method :type dispatcher: callable :param executor: name of message executor - e.g. 'eventlet', 'blocking' @@ -83,7 +81,6 @@ class MessageHandlingServer(object): self.conf = transport.conf self.transport = transport - self.target = target self.dispatcher = dispatcher self.executor = executor @@ -116,9 +113,8 @@ class MessageHandlingServer(object): """ if self._executor is not None: return - try: - listener = self.transport._listen(self.target) + listener = self.dispatcher._listen(self.transport) except driver_base.TransportDriverError as ex: raise ServerListenError(self.target, ex) diff --git a/tests/test_rpc_dispatcher.py b/tests/test_rpc_dispatcher.py index 5b367b95e..5d20813da 100644 --- a/tests/test_rpc_dispatcher.py +++ b/tests/test_rpc_dispatcher.py @@ -97,7 +97,8 @@ class TestDispatcher(test_utils.BaseTestCase): endpoints.append(_FakeEndpoint(target)) serializer = None - dispatcher = messaging.RPCDispatcher(endpoints, serializer) + target = messaging.Target() + dispatcher = messaging.RPCDispatcher(target, endpoints, serializer) if self.dispatch_to is not None: endpoint = endpoints[self.dispatch_to['endpoint']] @@ -139,7 +140,8 @@ class TestSerializer(test_utils.BaseTestCase): def test_serializer(self): endpoint = _FakeEndpoint() serializer = msg_serializer.NoOpSerializer() - dispatcher = messaging.RPCDispatcher([endpoint], serializer) + target = messaging.Target() + dispatcher = messaging.RPCDispatcher(target, [endpoint], serializer) self.mox.StubOutWithMock(endpoint, 'foo') args = dict([(k, 'd' + v) for k, v in self.args.items()]) diff --git a/tests/test_rpc_server.py b/tests/test_rpc_server.py index 4fe0a59a8..1f2df2a13 100644 --- a/tests/test_rpc_server.py +++ b/tests/test_rpc_server.py @@ -105,7 +105,6 @@ class TestRPCServer(test_utils.BaseTestCase, ServerSetupMixin): self.assertIs(server.conf, self.conf) self.assertIs(server.transport, transport) - self.assertIs(server.target, target) self.assertIsInstance(server.dispatcher, messaging.RPCDispatcher) self.assertIs(server.dispatcher.endpoints, endpoints) self.assertIs(server.dispatcher.serializer, serializer)