Hello Mark,

thanks for the update.

The commit looked promising. I tried with Tomcat 10.1 M17 but unfortunately it 
didn't help.

The partly loaded website is still occuring.


Setting http2 logging to fine, I can see the following stack:


19-Sep-2022 20:07:16.651 FEIN [https-openssl-nio-443-exec-9] 
org.apache.coyote.AbstractProcessor.setErrorState Error state [CLOSE_NOW] 
reported while processing request
org.apache.coyote.CloseNowException: Connection [1], Stream [23], This stream 
is not writable
at org.apache.coyote.http2.Stream.doStreamCancel(Stream.java:258)
at 
org.apache.coyote.http2.Http2UpgradeHandler.reserveWindowSize(Http2UpgradeHandler.java:919)
at org.apache.coyote.http2.Stream$StreamOutputBuffer.flush(Stream.java:945)
at org.apache.coyote.http2.Stream$StreamOutputBuffer.flush(Stream.java:891)
at org.apache.coyote.http2.Stream$StreamOutputBuffer.end(Stream.java:990)
at 
org.apache.coyote.http11.filters.GzipOutputFilter.end(GzipOutputFilter.java:128)
at org.apache.coyote.http2.Http2OutputBuffer.end(Http2OutputBuffer.java:71)
at 
org.apache.coyote.http2.StreamProcessor.finishResponse(StreamProcessor.java:230)
at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:391)
at org.apache.coyote.Response.action(Response.java:210)
at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:258)
at org.apache.catalina.connector.Response.finishResponse(Response.java:418)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:388)
at org.apache.coyote.http2.StreamProcessor.service(StreamProcessor.java:426)
at 
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.http2.StreamProcessor.process(StreamProcessor.java:87)
at org.apache.coyote.http2.StreamRunnable.run(StreamRunnable.java:35)
at 
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at 
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at 
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.apache.coyote.http2.StreamException: Connection [1], Stream 
[23], This stream is not writable
at org.apache.coyote.http2.Stream.doStreamCancel(Stream.java:250)
... 20 more



Looks like the Exception bubbles up from the last line of tthis method:

    void doStreamCancel(String msg, Http2Error error) throws CloseNowException {
        StreamException se = new StreamException(msg, error, getIdAsInt());
        // Prevent the application making further writes
        streamOutputBuffer.closed = true;
        // Prevent Tomcat's error handling trying to write
        coyoteResponse.setError();
        coyoteResponse.setErrorReported();
        // Trigger a reset once control returns to Tomcat
        streamOutputBuffer.reset = se;
        throw new CloseNowException(msg, se);
    }

The CloseNowException() bubbles up without being caught maybe (?)
Stream.write(...) is not contained here.

Greetings, Thoas

________________________________
Von: Mark Thomas <ma...@apache.org>
Gesendet: Montag, 19. September 2022 19:22
An: users@tomcat.apache.org
Betreff: Re: AW: AW: Tomcat 10 with Http2 and compression sometimes closes 
connection with Firefox

Thomas,

Please update to the latest 10.1.x release and re-test. There is what
looks like a fix for this issue in 10.1.0-M12:

https://github.com/apache/tomcat/commit/b738fa6ee0e6789b104e652d95c982827e9753dd

Mark


On 01/08/2022 21:46, Thomas Hoffmann (Speed4Trade GmbH) wrote:
> Hello,
>
> I would create a ticket and sum up all the collected information about this 
> issue, if there are no further suggestions.
>
> Closing a single stream in http2 causes an internal exception in 
> StreamProcessor which bubbles up in different ways, depending whether 
> http-compression is active or not.
> In the first case it leads to closing the complete TCP connection.
>
> Thanks! Thomas
>
>
>> -----Ursprüngliche Nachricht-----
>> Von: Thomas Hoffmann (Speed4Trade GmbH)
>> <thomas.hoffm...@speed4trade.com.INVALID>
>> Gesendet: Donnerstag, 28. Juli 2022 22:25
>> An: Tomcat Users List <users@tomcat.apache.org>
>> Betreff: AW: AW: Tomcat 10 with Http2 and compression sometimes closes
>> connection with Firefox
>>
>> Hello Mark,
>>
>> I got a stack trace which also shows the involvement of the gzip filter. I 
>> set
>> the loglevel for the http2-StreamProcessor to get the details.
>> The stack trace was written when the problem with FF occurred.
>> FF closed one single stream in http2 connection and tomcat seemed to have
>> closed the whole TCP connection:
>>
>> 28-Jul-2022 22:16:40.939 FEIN [https-openssl-nio-443-exec-13]
>> org.apache.coyote.http2.StreamProcessor.process Connection [0], Stream
>> [23], An error occurred during processing that was fatal to the connection
>>                  java.lang.IllegalStateException: Connection [0], Stream 
>> [23], Unable
>> to write to stream once it has been closed
>>                                 at
>> org.apache.coyote.http2.Stream$StreamOutputBuffer.doWrite(Stream.java:
>> 880)
>>                                 at
>> org.apache.coyote.http11.filters.GzipOutputFilter$FakeOutputStream.write(
>> GzipOutputFilter.java:158)
>>                                 at
>> java.base/java.util.zip.GZIPOutputStream.finish(GZIPOutputStream.java:171
>> )
>>                                 at
>> org.apache.coyote.http11.filters.GzipOutputFilter.end(GzipOutputFilter.java
>> :125)
>>                                 at
>> org.apache.coyote.http2.Http2OutputBuffer.end(Http2OutputBuffer.java:71
>> )
>>                                 at
>> org.apache.coyote.http2.StreamProcessor.finishResponse(StreamProcessor.
>> java:209)
>>                                 at
>> org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:386)
>>                                 at
>> org.apache.coyote.http2.StreamProcessor.service(StreamProcessor.java:420
>> )
>>                                 at
>> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.ja
>> va:65)
>>                                 at
>> org.apache.coyote.http2.StreamProcessor.process(StreamProcessor.java:73
>> )
>>                                 at
>> org.apache.coyote.http2.StreamRunnable.run(StreamRunnable.java:35)
>>                                 at
>> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolE
>> xecutor.java:1136)
>>                                 at
>> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPool
>> Executor.java:635)
>>                                 at
>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThr
>> ead.java:61)
>>                                 at 
>> java.base/java.lang.Thread.run(Thread.java:833)
>>
>> I hope the stack shows the problem and helps to identify the problem.
>> Seems like the error handling has changed a bit with Tomcat 10.0.0 M8 with
>> http2 and is causing the issue.
>>
>> Thanks in advance!
>> Thomas
>>
>>> -----Ursprüngliche Nachricht-----
>>> Von: Thomas Hoffmann (Speed4Trade GmbH)
>>> <thomas.hoffm...@speed4trade.com.INVALID>
>>> Gesendet: Mittwoch, 27. Juli 2022 20:52
>>> An: Tomcat Users List <users@tomcat.apache.org>
>>> Betreff: AW: AW: Tomcat 10 with Http2 and compression sometimes closes
>>> connection with Firefox
>>>
>>> Oh... I also discovered an additional message in the wireshark dump.
>>> Tomcat replied with a goaway packet with the text:
>>>   Connection [22], Stream [19], An error occurred during processing
>>> that was fatal to the connection
>>>
>>>> -----Ursprüngliche Nachricht-----
>>>> Von: Thomas Hoffmann (Speed4Trade GmbH)
>>>> <thomas.hoffm...@speed4trade.com.INVALID>
>>>> Gesendet: Mittwoch, 27. Juli 2022 20:48
>>>> An: Tomcat Users List <users@tomcat.apache.org>
>>>> Betreff: AW: AW: Tomcat 10 with Http2 and compression sometimes
>>>> closes connection with Firefox
>>>>
>>>> Hello Mark,
>>>>
>>>> I did some further investigations. I hope I don’t bother you with this
>> topic.
>>>>
>>>> I was trying to narrow down the tomcat version where the problem
>>>> started to appear.
>>>> The problem with the interrupted connection started with 10.0.0-M8
>>>> With Tomcat 10.0.0-M7 everything works fine.
>>>>
>>>> Comparing the sources, there are some (maybe relevant) changes in
>>>> the
>>>> org.apache.coyote.http2 package from M7 --> M8:
>>>> - Http2AsynUpgradeHandler
>>>> - Http2UpgradeHandler
>>>> - Stream
>>>> - StreamProcessor
>>>>
>>>> The observed problem was, that the browser (firefox) was sending a
>>>> RST_Stream packet to close a single stream within the http2 protocol
>>>> and tomcat was closing the whole connection instead of closing just
>>>> that stream (wireshark dump would be available).
>>>>
>>>> In Stream.java a new method "doStreamCancel" was introduced (or an
>>>> old method was renamed) with release M8.
>>>> This looks related to the observed problem mentioned above.
>>>>
>>>> Does this information help to take a look again at this problem?
>>>> If I should try something or can assist with testing, just let me know.
>>>>
>>>> Thanks!
>>>> Thomas
>>>>
>>>>
>>>>
>>>>
>>>>> -----Ursprüngliche Nachricht-----
>>>>> Von: Thomas Hoffmann (Speed4Trade GmbH)
>>>>> <thomas.hoffm...@speed4trade.com.INVALID>
>>>>> Gesendet: Dienstag, 5. Juli 2022 09:59
>>>>> An: Tomcat Users List <users@tomcat.apache.org>
>>>>> Betreff: AW: AW: Tomcat 10 with Http2 and compression sometimes
>>>>> closes connection with Firefox
>>>>>
>>>>> Hallo Mark,
>>>>>
>>>>>> -----Ursprüngliche Nachricht-----
>>>>>> Von: Mark Thomas <ma...@apache.org>
>>>>>> Gesendet: Montag, 4. Juli 2022 19:37
>>>>>> An: users@tomcat.apache.org
>>>>>> Betreff: Re: AW: Tomcat 10 with Http2 and compression sometimes
>>>>>> closes connection with Firefox
>>>>>>
>>>>>> On 30/06/2022 07:40, Mark Thomas wrote:
>>>>>>
>>>>>> <snip/>
>>>>>>
>>>>>>> I think I'm going to need the sample app to investigate this.
>>>>>>
>>>>>> I have received the sample application and can recreate the issue.
>>>>>>
>>>>>> Going back to your original summary:
>>>>>>
>>>>>> <quote>
>>>>>> 1) Main page was requested by Firefox from Tomcat (GET ...)
>>>>>> 2) Tomcat sends the first compressed chunks of data to the
>>>>>> browser
>>>>>> 3) Firefox reads the first packages and notices, that additional
>>>>>> resources are needed (CSS, JS ...)
>>>>>> 4) While Tomcat is still sending the main page in chunks, the
>>>>>> browser is already requesting additional resources on other
>>>>>> channels
>>>>>> 5) Firefox is sending a RST_STREAM and closes that last
>>>>>> requested
>>>>>> stream(s)  (dunno why it does request first and then closes the
>>>>>> channel)
>>>>>> 6) Tomcat is sending a GoAway message to the browser
>>>>>> 7) Tomcat stops also sending the main page (on a different
>>>>>> channel) </quote>
>>>>>>
>>>>>> I tested with 10.0.x.
>>>>>>
>>>>>> I don't see the above sequence.
>>>>>>
>>>>>> I ran the test 4 times, closing the browser between each test
>>>>>>
>>>>>> When things go wrong it appears that FireFox is re-using the
>>>>>> main page
>>>>>> (ticket.jsp) from a cache.
>>>>>>
>>>>>> I see the additional resources being requested and then cancelled.
>>>>>>
>>>>>> I do not see any GOAWAY messages from Tomcat.
>>>>>>
>>>>>> I do see a single GOAWAY message from the browser to Tomcat
>> when
>>>>>> I close the browser window (as expected).
>>>>>>
>>>>>> I don't see anything going wrong on the Tomcat side.
>>>>>>
>>>>>> At the moment, this looks to me like an issue with Firefox
>>>>>> rather than with Tomcat.
>>>>>>
>>>>>> If you can narrow the test case to something that shows Tomcat
>>>>>> doing something wrong, then I'd be happy to look at this again.
>>>>>>
>>>>>> Mark
>>>>>>
>>>>>> ----------------------------------------------------------------
>>>>>> --
>>>>>> --
>>>>>> -
>>>>>
>>>>> Thank you very much for taking a look at it!
>>>>>
>>>>> I could also see that the browser cache is used sometimes.
>>>>> Sometimes the jsp is requested from the server, sometimes not.
>>>>>
>>>>> I did several tests again and the behaviour is not very
>>>>> consistent, thus it's hard to get a handle on the problem.
>>>>> I was also thinking about the possibility of a Firefox bug but
>>>>> this wouldn’t explain that:
>>>>> 1) It only happens with Tomcat 10.x and doesn’t show up with
>>>>> Tomcat 9.x
>>>>> 2) Users don’t report any problems with other internet websites
>>>>> (using
>>>>> Firefox)
>>>>>
>>>>> The GoAway seems to be sent from time to time by Tomcat, but not
>>>> always.
>>>>> I recorded one session which matches my last description:
>>>>> https://privfile.com/download.php?fid=62c3ec1170199-MTM2OTM=
>>>>> I set up another PC for testing, thus the IP addresses
>>>>> (source/target) differ and can be interpreted more easily.
>>>>> Maybe the last Capture was not readable without the keyfile, thus
>>>>> I exported it differently and it should be readable now.
>>>>>
>>>>> a) Is the behaviour according to the linked network trace an
>>>>> expected behaviour? (sending a GoAway after a rst_stream message)
>>>>> b) Have you been able to reproduce the error with Tomcat 9.x?
>>>>>
>>>>> If you have any hints or suggestions, how I could narrow it down,
>>>>> please drop a line.
>>>>> I don’t have any big or great ideas at the moment.
>>>>>
>>>>> Thank you very much!
>>>>> 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
>

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

Reply via email to