Bug 64829

Summary: HTTP2 : GOAWAY sent with Protocol Error and Frame Size Error
Product: Tomcat 9 Reporter: Arshiya <arshiya.shariff>
Component: CatalinaAssignee: Tomcat Developers Mailing List <dev>
Severity: regression    
Priority: P2    
Version: 9.0.39   
Target Milestone: -----   
Hardware: HP   
OS: Linux   

Description Arshiya 2020-10-20 06:04:24 UTC
Created attachment 37512 [details]

Sub-Component - Coyote

OS : Redhat Linux


Embedded Tomcat version 9.0.39 is implemented to transport http/2 packets between 2 systems (h2c connection).
Http2 packets of payload size 55KB sent from the client are processed asynchronously .
The content-type of request/response is application/json. For few requests Tomcat sends GOAWAY with reason that seems irrelevant .

1)GOAWAY with PROTOCOL ERROR : The content length header value [55294] does not agree with the size of the data received [55295]
Where, both the content length header value and the size of the data received is 55295 bytes  
2)GOAWAY with FRAME_SIZE_ERROR : The payload is [6386210] bytes long but the max frame size is [16384]
Where , the payload size is only around 55 KB
Please find attached the PCAPs for reference.

We have tried and reproduced these exceptions with a sample code implementing embedded tomcat version 9.0.39 with payload size of around 55KB . Please find below the steps to reproduce. I have attached the sample code / input JMX file to reproduce the issue. 
Steps to Reproduce:

With JMeter as simulation client, on configuring 700 threads (700 connections) to connect towards Tomcat Server 9.0.39 embedded in our system and on sending 20 requests per second with payload of 55KB (same request with just one json value sent uniquely via the Random number generator)and on letting the test run in an infinite loop , few requests are getting timed out . On analysing the PCAP for the particular request we see that tomcat sends GOAWAY with  PROTOCOL ERROR / FRAME_SIZE_ERROR where the reason seems to be incorrect.

JMeter 5.3 with additional HTTP2 sampler.
No of threads: 700
Ramp-up period:10 seconds	
Payload size: around 55KB
Constant Throughput Timer added to limit the tps to 20.
Random Variable Generator added to the JSON request to uniquely identify for which request the exception is printed and to map it in the PCAP collected .
Response Timeout : 5000 ms

Sample application attached .
MaxThreads configured in tomcat is 200(all other parameters are the tomcat defaults).
The input requests are processed asynchronously with 40 threads.

Embedded tomcat 9.0.39

Resolution/Clarification requested:
Can you please explain the root cause for this . 

Thanks in advance.
Comment 1 Remy Maucherat 2020-10-23 12:59:10 UTC

*** This bug has been marked as a duplicate of bug 64830 ***