You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by gu...@apache.org on 2021/12/10 13:16:12 UTC

[dubbo] branch 3.0 updated: [3.0-Triple] fix `grpc-message` messy code (#9375)

This is an automated email from the ASF dual-hosted git repository.

guohao pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 437c1e9  [3.0-Triple] fix `grpc-message` messy code (#9375)
437c1e9 is described below

commit 437c1e9479ed516be8a73ac7a6014c6c46be597b
Author: earthchen <ea...@gmail.com>
AuthorDate: Fri Dec 10 21:15:47 2021 +0800

    [3.0-Triple] fix `grpc-message` messy code (#9375)
    
    * sync fork
    
    * fix `grpc-message` charset error
---
 .../apache/dubbo/rpc/protocol/tri/AbstractStream.java   |  6 ++++--
 .../org/apache/dubbo/rpc/protocol/tri/GrpcStatus.java   | 17 +++++++++++++++--
 .../rpc/protocol/tri/InboundTransportObserver.java      |  2 +-
 .../dubbo/rpc/protocol/tri/UnaryClientStream.java       |  2 +-
 .../apache/dubbo/rpc/protocol/tri/GrpcStatusTest.java   |  2 +-
 5 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractStream.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractStream.java
index 5ba50e9..c03a4a1 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractStream.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/AbstractStream.java
@@ -333,11 +333,13 @@ public abstract class AbstractStream implements Stream {
 
     private Metadata getTrailers(GrpcStatus grpcStatus) {
         Metadata metadata = new DefaultMetadata();
-        metadata.put(TripleHeaderEnum.MESSAGE_KEY.getHeader(), getGrpcMessage(grpcStatus));
+        String grpcMessage = getGrpcMessage(grpcStatus);
+        grpcMessage = GrpcStatus.encodeMessage(grpcMessage);
+        metadata.put(TripleHeaderEnum.MESSAGE_KEY.getHeader(), grpcMessage);
         metadata.put(TripleHeaderEnum.STATUS_KEY.getHeader(), String.valueOf(grpcStatus.code.code));
         Status.Builder builder = Status.newBuilder()
             .setCode(grpcStatus.code.code)
-            .setMessage(getGrpcMessage(grpcStatus));
+            .setMessage(grpcMessage);
         Throwable throwable = grpcStatus.cause;
         if (throwable == null) {
             Status status = builder.build();
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/GrpcStatus.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/GrpcStatus.java
index b1eab70..1ae5be5 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/GrpcStatus.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/GrpcStatus.java
@@ -149,13 +149,21 @@ public class GrpcStatus {
         }
     }
 
-    public static String fromMessage(String raw) {
+    public static String decodeMessage(String raw) {
         if (StringUtils.isEmpty(raw)) {
             return "";
         }
         return QueryStringDecoder.decodeComponent(raw);
     }
 
+
+    public static String encodeMessage(String raw) {
+        if (StringUtils.isEmpty(raw)) {
+            return "";
+        }
+        return encodeComponent(raw);
+    }
+
     public GrpcStatus withCause(Throwable cause) {
         this.cause = cause;
         return this;
@@ -182,8 +190,13 @@ public class GrpcStatus {
             return "";
         }
         String output = limitSizeTo4KB(msg);
+        return encodeComponent(output);
+    }
+
+
+    private static String encodeComponent(String raw) {
         QueryStringEncoder encoder = new QueryStringEncoder("");
-        encoder.addParam("", output);
+        encoder.addParam("", raw);
         // ?=
         return encoder.toString().substring(2);
     }
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/InboundTransportObserver.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/InboundTransportObserver.java
index 43050f1..911dffa 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/InboundTransportObserver.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/InboundTransportObserver.java
@@ -54,7 +54,7 @@ public abstract class InboundTransportObserver implements TransportObserver {
             return status;
         }
         final String raw = metadata.get(TripleHeaderEnum.MESSAGE_KEY.getHeader()).toString();
-        status = status.withDescription(GrpcStatus.fromMessage(raw));
+        status = status.withDescription(GrpcStatus.decodeMessage(raw));
         return status;
     }
 }
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/UnaryClientStream.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/UnaryClientStream.java
index f1eae16..2873e82 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/UnaryClientStream.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/UnaryClientStream.java
@@ -64,7 +64,7 @@ public class UnaryClientStream extends AbstractClientStream implements Stream {
                 // support others type but now only support this
             }
         } catch (InvalidProtocolBufferException e) {
-            e.printStackTrace();
+            LOGGER.error("tran from grpc-status-details error", e);
         }
         return map;
     }
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/GrpcStatusTest.java b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/GrpcStatusTest.java
index 0d49a0f..289d26a 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/GrpcStatusTest.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/GrpcStatusTest.java
@@ -28,7 +28,7 @@ class GrpcStatusTest {
         final GrpcStatus status = GrpcStatus.fromCode(GrpcStatus.Code.INTERNAL)
                 .withDescription(origin);
         Assertions.assertNotEquals(origin, status.toMessage());
-        final String decoded = GrpcStatus.fromMessage(status.toMessage());
+        final String decoded = GrpcStatus.decodeMessage(status.toMessage());
         Assertions.assertEquals(origin, decoded);
     }