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®istry=zookeeper&release=3.2.0-beta.5×tamp=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]
