Bug 64467 - Http2 tomact server taking time in responding when 1st StreamId is a large integer value like 2147483641
Summary: Http2 tomact server taking time in responding when 1st StreamId is a large in...
Status: RESOLVED FIXED
Alias: None
Product: Tomcat 9
Classification: Unclassified
Component: Connectors (show other bugs)
Version: 9.0.29
Hardware: PC All
: P2 normal (vote)
Target Milestone: -----
Assignee: Tomcat Developers Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-05-22 10:05 UTC by Prateek Kohli
Modified: 2020-05-22 10:41 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Prateek Kohli 2020-05-22 10:05:20 UTC
Java version - jdk1.8.0_201

We are running a Tomcat Http2 Server and a Jetty http2 client.

When we send the 1st request from jetty client to tomcat server with streamId as 2147483641, the 1st response from tomcat comes after almost 5 seconds.

After further debugging we got to know that the problem seems to be because of the below code in Http2UpgradeHandler class:

private void closeIdleStreams(int newMaxActiveRemoteStreamId) throws Http2Exception 
{
         for (int i = maxActiveRemoteStreamId + 2; i < 
                                newMaxActiveRemoteStreamId; i += 2) 
            {

             Stream stream = getStream(i, false);
             if (stream != null) {
                 stream.closeIfIdle();
             }
         }
         maxActiveRemoteStreamId = newMaxActiveRemoteStreamId;
     }

When we take 1st StreamId as 2147483641, the above loop takes around 4~5 seconds to execute and hence, the response is delayed.
Comment 1 Mark Thomas 2020-05-22 10:41:49 UTC
Thanks for the report and the research into the root cause.

Fixed in:
- master for 10.0.0-M6 onwards
- 9.0.x for 9.0.36 onwards
- 8.5.x for 8.5.56 onwards