icodening opened a new issue, #11760:
URL: https://github.com/apache/dubbo/issues/11760

   断点如图所示
   <img width="862" alt="image" 
src="https://user-images.githubusercontent.com/42876375/223464666-524c6c91-46e8-41cf-96dd-37862c22f3b0.png";>
   
   异常堆栈如下
   ````
   org.apache.dubbo.rpc.RpcException: Failed to invoke remote proxy method 
greetStream to 
registry://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?application=tri-stub-server&dubbo=2.0.2&executor-management-mode=default&file.cache=true&pid=44013&proxy=nativestub&registry=zookeeper&release=3.2.0-beta.5&timestamp=1678202159924,
 cause: / by zero
        at 
org.apache.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:135)
        at 
org.apache.dubbo.config.invoker.DelegateProviderMetaDataInvoker.invoke(DelegateProviderMetaDataInvoker.java:55)
        at 
org.apache.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:56)
        at 
org.apache.dubbo.rpc.filter.ClassLoaderCallbackFilter.invoke(ClassLoaderCallbackFilter.java:38)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at 
org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:79)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at 
org.apache.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:45)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at 
org.apache.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:101)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at 
org.apache.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:54)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at 
org.apache.dubbo.metrics.filter.MetricsFilter.invoke(MetricsFilter.java:49)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at 
org.apache.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:192)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at 
org.apache.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:54)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at org.apache.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:41)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at 
org.apache.dubbo.rpc.filter.ProfilerServerFilter.invoke(ProfilerServerFilter.java:63)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at 
org.apache.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:144)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:327)
        at 
org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CallbackRegistrationInvoker.invoke(FilterChainBuilder.java:194)
        at 
org.apache.dubbo.rpc.protocol.tri.call.AbstractServerCallListener.invoke(AbstractServerCallListener.java:65)
        at 
org.apache.dubbo.rpc.protocol.tri.call.BiStreamServerCallListener.<init>(BiStreamServerCallListener.java:34)
        at 
org.apache.dubbo.rpc.protocol.tri.call.AbstractServerCall.startInternalCall(AbstractServerCall.java:386)
        at 
org.apache.dubbo.rpc.protocol.tri.call.AbstractServerCall.startCall(AbstractServerCall.java:119)
        at 
org.apache.dubbo.rpc.protocol.tri.call.AbstractServerCall.onHeader(AbstractServerCall.java:114)
        at 
org.apache.dubbo.rpc.protocol.tri.stream.TripleServerStream$ServerTransportObserver.processHeader(TripleServerStream.java:425)
        at 
org.apache.dubbo.rpc.protocol.tri.stream.TripleServerStream$ServerTransportObserver.lambda$onHeader$0(TripleServerStream.java:328)
        at 
org.apache.dubbo.common.threadpool.serial.SerializingExecutor.run(SerializingExecutor.java:102)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at 
org.apache.dubbo.common.threadlocal.InternalRunnable.run(InternalRunnable.java:41)
        at java.base/java.lang.Thread.run(Thread.java:833)
   Caused by: java.lang.ArithmeticException: / by zero
        at 
org.apache.dubbo.sample.tri.stub.GreeterImpl.greetStream(GreeterImpl.java:212)
        at 
org.apache.dubbo.rpc.stub.BiStreamMethodHandler.invoke(BiStreamMethodHandler.java:35)
        at org.apache.dubbo.rpc.stub.StubInvoker.doInvoke(StubInvoker.java:38)
        at 
org.apache.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:100)
        ... 37 more
   [11:16:12:012] ERROR call.AbstractServerCall:  [DUBBO] Process request 
failed. service=org.apache.dubbo.sample.tri.Greeter method=greetStream, dubbo 
version: 3.2.0-beta.5, current host: 192.168.1.3, error code: 4-11. This may be 
caused by , go to https://dubbo.apache.org/faq/4/11 to find instructions. 
   java.lang.NullPointerException: Cannot invoke 
"org.apache.dubbo.common.stream.StreamObserver.onNext(Object)" because 
"this.requestObserver" is null
        at 
org.apache.dubbo.rpc.protocol.tri.call.BiStreamServerCallListener.onMessage(BiStreamServerCallListener.java:47)
        at 
org.apache.dubbo.rpc.protocol.tri.call.AbstractServerCall.onMessage(AbstractServerCall.java:190)
        at 
org.apache.dubbo.rpc.protocol.tri.stream.TripleServerStream$ServerDecoderListener.onRawMessage(TripleServerStream.java:472)
        at 
org.apache.dubbo.rpc.protocol.tri.frame.TriDecoder.processBody(TriDecoder.java:140)
        at 
org.apache.dubbo.rpc.protocol.tri.frame.TriDecoder.deliver(TriDecoder.java:87)
        at 
org.apache.dubbo.rpc.protocol.tri.frame.TriDecoder.deframe(TriDecoder.java:57)
        at 
org.apache.dubbo.rpc.protocol.tri.stream.TripleServerStream$ServerTransportObserver.doOnData(TripleServerStream.java:438)
        at 
org.apache.dubbo.rpc.protocol.tri.stream.TripleServerStream$ServerTransportObserver.lambda$onData$2(TripleServerStream.java:431)
        at 
org.apache.dubbo.common.threadpool.serial.SerializingExecutor.run(SerializingExecutor.java:102)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at 
org.apache.dubbo.common.threadlocal.InternalRunnable.run(InternalRunnable.java:41)
        at java.base/java.lang.Thread.run(Thread.java:833)
   [11:16:12:012] ERROR serial.SerializingExecutor:  [DUBBO] Exception while 
executing runnable 
org.apache.dubbo.rpc.protocol.tri.stream.TripleServerStream$ServerTransportObserver$$Lambda$618/0x000000080148b1a8@3e1ffcc3,
 dubbo version: 3.2.0-beta.5, current host: 192.168.1.3, error code: 0-19. This 
may be caused by , go to https://dubbo.apache.org/faq/0/19 to find 
instructions. 
   java.lang.NullPointerException: Cannot invoke 
"org.apache.dubbo.common.stream.StreamObserver.onCompleted()" because 
"this.requestObserver" is null
        at 
org.apache.dubbo.rpc.protocol.tri.call.BiStreamServerCallListener.onComplete(BiStreamServerCallListener.java:61)
        at 
org.apache.dubbo.rpc.protocol.tri.call.AbstractServerCall.onComplete(AbstractServerCall.java:181)
        at 
org.apache.dubbo.rpc.protocol.tri.stream.TripleServerStream$ServerDecoderListener.close(TripleServerStream.java:477)
        at 
org.apache.dubbo.rpc.protocol.tri.frame.TriDecoder.deliver(TriDecoder.java:102)
        at 
org.apache.dubbo.rpc.protocol.tri.frame.TriDecoder.close(TriDecoder.java:68)
        at 
org.apache.dubbo.rpc.protocol.tri.stream.TripleServerStream$ServerTransportObserver.doOnData(TripleServerStream.java:440)
        at 
org.apache.dubbo.rpc.protocol.tri.stream.TripleServerStream$ServerTransportObserver.lambda$onData$2(TripleServerStream.java:431)
        at 
org.apache.dubbo.common.threadpool.serial.SerializingExecutor.run(SerializingExecutor.java:102)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at 
org.apache.dubbo.common.threadlocal.InternalRunnable.run(InternalRunnable.java:41)
        at java.base/java.lang.Thread.run(Thread.java:833)
   ````
   
   
从源码中得知在业务返回`StreamObserver`之前报错导致`BiStreamServerCallListener`没有成功初始化`StreamObserver`,最终在处理end
 stream后调用onComplete时出现了NPE
   
   `org.apache.dubbo.rpc.protocol.tri.call.AbstractServerCall` 源码177行如下:
   ````java
   @Override
   public final void onComplete() {
       if (listener == null) {
           // It will enter here when there is an error in the header
           return;
       }
       listener.onComplete();
   }
   ````


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to