https://bz.apache.org/bugzilla/show_bug.cgi?id=65780

--- Comment #2 from Dapeng Zhang <zdap...@google.com> ---
A stacktrace is the following:

SEVERE: Exception while executing runnable
io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed@77087c61
java.lang.NullPointerException
        at
org.apache.catalina.connector.CoyoteOutputStream.isReady(CoyoteOutputStream.java:162)
        at
io.grpc.servlet.AsyncServletOutputStreamWriter.runOrBuffer(AsyncServletOutputStreamWriter.java:186)
        at
io.grpc.servlet.AsyncServletOutputStreamWriter.complete(AsyncServletOutputStreamWriter.java:129)
        at
io.grpc.servlet.ServletServerStream$Sink.writeTrailers(ServletServerStream.java:290)
        at
io.grpc.internal.AbstractServerStream.close(AbstractServerStream.java:126)
        at
io.grpc.internal.ServerCallImpl.closeInternal(ServerCallImpl.java:223)
        at io.grpc.internal.ServerCallImpl.close(ServerCallImpl.java:207)
        at
io.grpc.PartialForwardingServerCall.close(PartialForwardingServerCall.java:48)
        at io.grpc.ForwardingServerCall.close(ForwardingServerCall.java:22)
        at
io.grpc.ForwardingServerCall$SimpleForwardingServerCall.close(ForwardingServerCall.java:39)
        at
io.grpc.testing.integration.TestServiceImpl$6$1.close(TestServiceImpl.java:521)
        at
io.grpc.PartialForwardingServerCall.close(PartialForwardingServerCall.java:48)
        at io.grpc.ForwardingServerCall.close(ForwardingServerCall.java:22)
        at
io.grpc.ForwardingServerCall$SimpleForwardingServerCall.close(ForwardingServerCall.java:39)
        at
io.grpc.testing.integration.TestServiceImpl$5$1.close(TestServiceImpl.java:494)
        at
io.grpc.PartialForwardingServerCall.close(PartialForwardingServerCall.java:48)
        at io.grpc.ForwardingServerCall.close(ForwardingServerCall.java:22)
        at
io.grpc.ForwardingServerCall$SimpleForwardingServerCall.close(ForwardingServerCall.java:39)
        at
io.grpc.testing.integration.TestServiceImpl$4$1.close(TestServiceImpl.java:467)
        at
io.grpc.stub.ServerCalls$ServerCallStreamObserverImpl.onCompleted(ServerCalls.java:395)
        at
io.grpc.testing.integration.TestServiceImpl.unaryCall(TestServiceImpl.java:116)
        at
io.grpc.testing.integration.TestServiceGrpc$MethodHandlers.invoke(TestServiceGrpc.java:762)
        at
io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182)
        at
io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:340)
        at
io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:866)
        at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
        at
io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
        at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)


This is observed in the standard error running tests of
https://github.com/grpc/grpc-java/pull/8596 . It only fails intermittently, and
stack trace can be from a different isReady() call. 


> 2. No. isReady means that the write call will not block, not that it will 
> return without an error of some sort.

Yes. I'm just siting part of the javadoc. The full javadoc is:

public abstract boolean isReady()
This method can be used to determine if data can be written without blocking.
Returns:
true if a write to this ServletOutputStream will succeed, otherwise returns
false.

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to