> -----Ursprüngliche Nachricht-----
> Von: Konstantin Kolinko <knst.koli...@gmail.com>
> Gesendet: Mittwoch, 9. März 2022 00:52
> An: Tomcat Users List <users@tomcat.apache.org>
> Betreff: Re: Many IllegalStateException when using http2 protocol
> 
> пн, 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.ja
> va: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.jav
> a:59)
> >                 at org.apache.coyote.Response.doWrite(Response.java:625)
> >                 at
> org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.ja
> va:340)
> >                 at
> org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.j
> ava:783)
> >                 at
> org.apache.catalina.connector.OutputBuffer.realWriteChars(OutputBuffer.ja
> va:453)
> >                 at
> org.apache.catalina.connector.OutputBuffer.flushCharBuffer(OutputBuffer.j
> ava: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.
> 
> Best regards,
> Konstantin Kolinko

Good observation about the GZip-Filter!
We are using compression="force" in our connector.
I modified some http2 settings (raised some limits) and set compression="off" 
... up to now, the error disappeared.
As I modified several settings, I will carefully revert the changes step by 
step to figure out which connector parameter is causing this error.
Maybe the GZip-Filter doesn’t work well with the http2 protocol in tomcat.
I will investigate and post the results.

Thanks!
Thomas

> 
> >             }
> >
> > The generated java file from the jsp file only catches IOException:
> > ...
> >       if (!(t instanceof jakarta.servlet.jsp.SkipPageException)){
> >         out = _jspx_out;
> >         if (out != null && out.getBufferSize() != 0)
> >           try {
> >             if (response.isCommitted()) {
> >               out.flush();
> >             } else {
> >               out.clearBuffer();
> >             }
> >           } catch (java.io.IOException e) {}
> >         if (_jspx_page_context != null)
> _jspx_page_context.handlePageException(t);
> >         else throw new ServletException(t);
> >       }
> >
> > It seems like the browser is sometimes closing the stream and this causes
> Tomcat to write exceptions in the localhost-logfile.
> >
> > Is there any way to prevent this?
> > It is strange, that it didn’t happen with Tomcat 9 or maybe a Firefox-Update
> is causing the issue(?) Access-log shows Firefox 97.
> >
> > Greetings, Thomas
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to