You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2023/09/01 09:05:51 UTC

[dubbo] branch 3.3.0-beta.1-release updated: fix h1 and grpc status code (#12994)

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

liujun pushed a commit to branch 3.3.0-beta.1-release
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.3.0-beta.1-release by this push:
     new cfd0be3a3a fix h1 and grpc status code (#12994)
cfd0be3a3a is described below

commit cfd0be3a3a542269ad080ede13deae6ac6745f55
Author: icodening <cl...@gmail.com>
AuthorDate: Fri Sep 1 17:05:45 2023 +0800

    fix h1 and grpc status code (#12994)
---
 .../dubbo/remoting/http12/AbstractServerHttpChannelObserver.java   | 3 +++
 .../rpc/protocol/tri/h12/AbstractServerTransportListener.java      | 2 +-
 .../protocol/tri/h12/grpc/GrpcHttp2ServerTransportListener.java    | 7 +++++++
 .../tri/h12/http1/DefaultHttp11ServerTransportListener.java        | 2 ++
 4 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/AbstractServerHttpChannelObserver.java b/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/AbstractServerHttpChannelObserver.java
index 3e0b2a9b75..adc23ec718 100644
--- a/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/AbstractServerHttpChannelObserver.java
+++ b/dubbo-remoting/dubbo-remoting-http12/src/main/java/org/apache/dubbo/remoting/http12/AbstractServerHttpChannelObserver.java
@@ -16,6 +16,7 @@
  */
 package org.apache.dubbo.remoting.http12;
 
+import org.apache.dubbo.remoting.http12.exception.EncodeException;
 import org.apache.dubbo.remoting.http12.exception.HttpStatusException;
 import org.apache.dubbo.remoting.http12.message.HttpMessageCodec;
 
@@ -119,6 +120,8 @@ public abstract class AbstractServerHttpChannelObserver implements CustomizableH
             HttpOutputMessage httpOutputMessage = encodeHttpOutputMessage(errorResponse);
             this.httpMessageCodec.encode(httpOutputMessage.getBody(), errorResponse);
             getHttpChannel().writeMessage(httpOutputMessage);
+        } catch (Throwable ex) {
+            throwable = new EncodeException(ex);
         } finally {
             doOnCompleted(throwable);
         }
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/AbstractServerTransportListener.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/AbstractServerTransportListener.java
index a294d61e2a..1e442d1e5c 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/AbstractServerTransportListener.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/AbstractServerTransportListener.java
@@ -161,7 +161,7 @@ public abstract class AbstractServerTransportListener<HEADER extends RequestMeta
             throw new UnsupportedMediaTypeException(contentType);
         }
         this.httpMessageCodec = httpMessageCodec;
-        this.serviceDescriptor = findServiceDescriptor(invoker, serviceName, hasStub);
+        setServiceDescriptor(findServiceDescriptor(invoker, serviceName, hasStub));
         setHttpMessageListener(newHttpMessageListener());
         onMetadataCompletion(metadata);
     }
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/grpc/GrpcHttp2ServerTransportListener.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/grpc/GrpcHttp2ServerTransportListener.java
index 19f1680ef1..43ae3ec817 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/grpc/GrpcHttp2ServerTransportListener.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/grpc/GrpcHttp2ServerTransportListener.java
@@ -29,6 +29,7 @@ import org.apache.dubbo.remoting.http12.message.MethodMetadata;
 import org.apache.dubbo.remoting.http12.message.StreamingDecoder;
 import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.RpcInvocation;
+import org.apache.dubbo.rpc.TriRpcStatus;
 import org.apache.dubbo.rpc.model.FrameworkModel;
 import org.apache.dubbo.rpc.model.MethodDescriptor;
 import org.apache.dubbo.rpc.model.ServiceDescriptor;
@@ -66,10 +67,16 @@ public class GrpcHttp2ServerTransportListener extends GenericHttp2ServerTranspor
     private void grpcTrailersCustomize(HttpHeaders httpHeaders, Throwable throwable) {
         httpHeaders.set(GrpcHeaderNames.GRPC_STATUS.getName(), "0");
         if (throwable != null) {
+            httpHeaders.set(GrpcHeaderNames.GRPC_STATUS.getName(), httpStatusToGrpcStatus(throwable));
             httpHeaders.set(GrpcHeaderNames.GRPC_MESSAGE.getName(), throwable.getMessage());
         }
     }
 
+    private static String httpStatusToGrpcStatus(Throwable throwable) {
+        //http status code map to grpc status code
+        return String.valueOf(TriRpcStatus.INTERNAL.code.code);
+    }
+
     @Override
     protected RpcInvocation buildRpcInvocation(Invoker<?> invoker, ServiceDescriptor serviceDescriptor, MethodDescriptor methodDescriptor) {
         RpcInvocation rpcInvocation = super.buildRpcInvocation(invoker, serviceDescriptor, methodDescriptor);
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http1/DefaultHttp11ServerTransportListener.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http1/DefaultHttp11ServerTransportListener.java
index e8c880753e..c7d34b1a87 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http1/DefaultHttp11ServerTransportListener.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/http1/DefaultHttp11ServerTransportListener.java
@@ -81,6 +81,8 @@ public class DefaultHttp11ServerTransportListener extends AbstractServerTranspor
         MethodDescriptor methodDescriptor = findMethodDescriptor(getServiceDescriptor(), originalMethodName, hasStub);
         MethodMetadata methodMetadata = MethodMetadata.fromMethodDescriptor(methodDescriptor);
         RpcInvocation rpcInvocation = buildRpcInvocation(getInvoker(), getServiceDescriptor(), methodDescriptor);
+        setMethodDescriptor(methodDescriptor);
+        setMethodMetadata(methodMetadata);
         setRpcInvocation(rpcInvocation);
         HttpMessageCodec httpMessageCodec = getHttpMessageCodec();
         ListeningDecoder listeningDecoder = newListeningDecoder(httpMessageCodec, methodMetadata.getActualRequestTypes());