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());