On 08/03/2022 23:52, Konstantin Kolinko wrote:
пн, 7 мар. 2022 г. в 16:26, Thomas Hoffmann (Speed4Trade GmbH)
<thomas.hoffm...@speed4trade.com.invalid>:
Hello,
Since upgrading from Tomcat 9.0.56 to Tomcat 10.0.16, the localhost-logfile is
filling up with stacks of the form:
07-Mar-2022 07:24:01.780 SCHWERWIEGEND [https-openssl-nio-443-exec-21]
org.apache.catalina.core.ApplicationDispatcher.invoke Servlet.service() for
servlet [jsp] threw exception
java.lang.IllegalStateException: Connection [66], Stream [113], Unable
to write to stream once it has been closed
at
org.apache.coyote.http2.Stream$StreamOutputBuffer.doWrite(Stream.java:843)
at
org.apache.coyote.http11.filters.GzipOutputFilter$FakeOutputStream.write(GzipOutputFilter.java:159)
at
java.base/java.util.zip.DeflaterOutputStream.deflate(DeflaterOutputStream.java:252)
at
java.base/java.util.zip.DeflaterOutputStream.write(DeflaterOutputStream.java:210)
at
java.base/java.util.zip.GZIPOutputStream.write(GZIPOutputStream.java:148)
at
org.apache.coyote.http11.filters.GzipOutputFilter.doWrite(GzipOutputFilter.java:69)
at
org.apache.coyote.http2.Http2OutputBuffer.doWrite(Http2OutputBuffer.java:59)
at org.apache.coyote.Response.doWrite(Response.java:625)
at
org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:340)
at
org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:783)
at
org.apache.catalina.connector.OutputBuffer.realWriteChars(OutputBuffer.java:453)
at
org.apache.catalina.connector.OutputBuffer.flushCharBuffer(OutputBuffer.java:788)
at
org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:727)
at
org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:505)
at
org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:148)
at
org.apache.catalina.filters.ExpiresFilter$XPrintWriter.write(ExpiresFilter.java:850)
at
org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:275)
at java.base/java.io.PrintWriter.write(PrintWriter.java:506)
at
org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:275)
at java.base/java.io.PrintWriter.write(PrintWriter.java:506)
at
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:112)
at
org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:160)
at
org.apache.jsp.WEB_002dINF.jsp.businessrelations.ticket_005frelations_inc_jsp._jspService(ticket_005frelations_inc_jsp.java:702)
...
The jsp-file varies between the stacktraces, so it is not related to a certain
jsp-File.
The stream.java looks like (which didn’t change from Tomcat 9 to 10):
@Override
public final synchronized int doWrite(ByteBuffer chunk) throws
IOException {
if (closed) {
throw new IllegalStateException(
sm.getString("stream.closed", getConnectionId(),
getIdAsString()));
I wonder why it throws an ISE here, instead of a proper IOException
as declared by this method.
(It looks like a bug, but I have not investigated the history of this code yet.)
There is nothing suspicious in the stacktrace. An unusual bit of
configuration here is having enabled a GzipOutputFilter.
The ISE would be down to me. It was a few years ago now but it looks
like I wrote that code on the basis that it would only happen if the
application did something it shouldn't. Given that it can be triggered
by the client dropping the connection I'll change it to IOE (assuming
all the tests pass).
Mark
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org