From aa3c8f72aef207400f76855bee197a0c6a8aafa9 Mon Sep 17 00:00:00 2001 From: dingjiefei <1264677051@qq.com> Date: Sat, 25 Nov 2023 19:06:51 +0800 Subject: [PATCH 1/2] add judgement for SimpleForwardingServerCall in method ServerStreamHelper.getServerStream --- .../io/grpc/internal/ServerStreamHelper.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/jraft-extension/rpc-grpc-impl/src/main/java/io/grpc/internal/ServerStreamHelper.java b/jraft-extension/rpc-grpc-impl/src/main/java/io/grpc/internal/ServerStreamHelper.java index 73abb4173..803fe63df 100644 --- a/jraft-extension/rpc-grpc-impl/src/main/java/io/grpc/internal/ServerStreamHelper.java +++ b/jraft-extension/rpc-grpc-impl/src/main/java/io/grpc/internal/ServerStreamHelper.java @@ -16,10 +16,10 @@ */ package io.grpc.internal; -import io.grpc.ServerCall; - import com.alipay.sofa.jraft.util.internal.ReferenceFieldUpdater; import com.alipay.sofa.jraft.util.internal.Updaters; +import io.grpc.ForwardingServerCall; +import io.grpc.ServerCall; /** * Get grpc's server stream. @@ -33,9 +33,18 @@ public class ServerStreamHelper { ServerCallImpl.class, "stream"); + private static final ReferenceFieldUpdater, ServerCall> SERVER_CALL_GETTER = Updaters + .newReferenceFieldUpdater( + ForwardingServerCall.SimpleForwardingServerCall.class, + "delegate"); + public static ServerStream getServerStream(final ServerCall call) { - if (call instanceof ServerCallImpl) { - return STREAM_GETTER.get((ServerCallImpl) call); + ServerCall lastServerCall = call; + if (call instanceof ForwardingServerCall.SimpleForwardingServerCall) { + lastServerCall = SERVER_CALL_GETTER.get((ForwardingServerCall.SimpleForwardingServerCall) call); + } + if (lastServerCall instanceof ServerCallImpl) { + return STREAM_GETTER.get((ServerCallImpl) lastServerCall); } return null; } From e1449a4d7e4d742096c79fa9dcdeb342f0e626ee Mon Sep 17 00:00:00 2001 From: dingjiefei <1264677051@qq.com> Date: Mon, 27 Nov 2023 15:23:18 +0800 Subject: [PATCH 2/2] code format --- .../java/io/grpc/internal/ServerStreamHelper.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/jraft-extension/rpc-grpc-impl/src/main/java/io/grpc/internal/ServerStreamHelper.java b/jraft-extension/rpc-grpc-impl/src/main/java/io/grpc/internal/ServerStreamHelper.java index 803fe63df..390f23abd 100644 --- a/jraft-extension/rpc-grpc-impl/src/main/java/io/grpc/internal/ServerStreamHelper.java +++ b/jraft-extension/rpc-grpc-impl/src/main/java/io/grpc/internal/ServerStreamHelper.java @@ -28,15 +28,15 @@ */ public class ServerStreamHelper { - private static final ReferenceFieldUpdater, ServerStream> STREAM_GETTER = Updaters - .newReferenceFieldUpdater( - ServerCallImpl.class, - "stream"); + private static final ReferenceFieldUpdater, ServerStream> STREAM_GETTER = Updaters + .newReferenceFieldUpdater( + ServerCallImpl.class, + "stream"); private static final ReferenceFieldUpdater, ServerCall> SERVER_CALL_GETTER = Updaters - .newReferenceFieldUpdater( - ForwardingServerCall.SimpleForwardingServerCall.class, - "delegate"); + .newReferenceFieldUpdater( + ForwardingServerCall.SimpleForwardingServerCall.class, + "delegate"); public static ServerStream getServerStream(final ServerCall call) { ServerCall lastServerCall = call;