Bug 64467

Summary: Http2 tomact server taking time in responding when 1st StreamId is a large integer value like 2147483641
Product: Tomcat 9 Reporter: Prateek Kohli <prateek.kohli>
Component: ConnectorsAssignee: Tomcat Developers Mailing List <dev>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P2    
Version: 9.0.29   
Target Milestone: -----   
Hardware: PC   
OS: All   

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