From 4b82c3e148b3db495ede12b9c38ff37a9aa8a4ee Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Thu, 24 Jan 2019 16:33:56 +0800 Subject: [PATCH 1/2] Fix thrift protocol, use path to locate exporter. --- .../org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java | 5 +++++ .../org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java index d171ce12435..58058f4f64f 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java +++ b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java @@ -163,6 +163,7 @@ private Object decode(TProtocol protocol) // version String serviceName; + String path; long id; TMessage message; @@ -171,6 +172,7 @@ private Object decode(TProtocol protocol) protocol.readI16(); protocol.readByte(); serviceName = protocol.readString(); + path = protocol.readString(); id = protocol.readI64(); message = protocol.readMessageBegin(); } catch (TException e) { @@ -181,6 +183,7 @@ private Object decode(TProtocol protocol) RpcInvocation result = new RpcInvocation(); result.setAttachment(Constants.INTERFACE_KEY, serviceName); + result.setAttachment(Constants.PATH_KEY, path); result.setMethodName(message.name); String argsClassName = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class) @@ -496,6 +499,8 @@ private void encodeRequest(Channel channel, ChannelBuffer buffer, Request reques protocol.writeByte(VERSION); // service name protocol.writeString(serviceName); + // path + protocol.writeString(inv.getAttachment(Constants.PATH_KEY)); // dubbo request id protocol.writeI64(request.getId()); protocol.getTransport().flush(); diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java index 958d8e63234..055af6f8bb3 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java +++ b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java @@ -63,9 +63,9 @@ public CompletableFuture reply(ExchangeChannel channel, Object msg) thro if (msg instanceof Invocation) { Invocation inv = (Invocation) msg; - String serviceName = inv.getAttachments().get(Constants.INTERFACE_KEY); + String path = inv.getAttachments().get(Constants.PATH_KEY); String serviceKey = serviceKey(channel.getLocalAddress().getPort(), - serviceName, null, null); + path, null, null); DubboExporter exporter = (DubboExporter) exporterMap.get(serviceKey); if (exporter == null) { throw new RemotingException(channel, From ede7c98d86410b7eb1e10b2069108ec5b7b419dc Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Thu, 24 Jan 2019 20:10:02 +0800 Subject: [PATCH 2/2] Fix UT --- .../dubbo/rpc/protocol/thrift/ThriftCodecTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodecTest.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodecTest.java index c738a46a32a..c2277f7fba5 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodecTest.java +++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/org/apache/dubbo/rpc/protocol/thrift/ThriftCodecTest.java @@ -93,6 +93,8 @@ public void testEncodeRequest() throws Exception { Assertions.assertEquals(ThriftCodec.VERSION, protocol.readByte()); // service name Assertions.assertEquals(Demo.Iface.class.getName(), protocol.readString()); + // path + Assertions.assertEquals(Demo.Iface.class.getName(), protocol.readString()); // dubbo request id Assertions.assertEquals(request.getId(), protocol.readI64()); @@ -148,6 +150,8 @@ public void testDecodeReplyResponse() throws Exception { protocol.writeI16(Short.MAX_VALUE); protocol.writeByte(ThriftCodec.VERSION); protocol.writeString(Demo.Iface.class.getName()); + // path + protocol.writeString(Demo.Iface.class.getName()); protocol.writeI64(request.getId()); protocol.getTransport().flush(); headerLength = bos.size(); @@ -221,6 +225,8 @@ public void testDecodeExceptionResponse() throws Exception { protocol.writeI16(Short.MAX_VALUE); protocol.writeByte(ThriftCodec.VERSION); protocol.writeString(Demo.class.getName()); + // path + protocol.writeString(Demo.class.getName()); protocol.writeI64(request.getId()); protocol.getTransport().flush(); headerLength = bos.size(); @@ -396,6 +402,9 @@ public void testDecodeRequest() throws Exception { protocol.writeString( ((RpcInvocation) request.getData()) .getAttachment(Constants.INTERFACE_KEY)); + protocol.writeString( + ((RpcInvocation) request.getData()) + .getAttachment(Constants.PATH_KEY)); protocol.writeI64(request.getId()); protocol.getTransport().flush(); headerLength = bos.size(); @@ -448,6 +457,7 @@ private Request createRequest() { invocation.setParameterTypes(new Class[]{String.class}); invocation.setAttachment(Constants.INTERFACE_KEY, Demo.Iface.class.getName()); + invocation.setAttachment(Constants.PATH_KEY, Demo.Iface.class.getName()); Request request = new Request(1L);