-
Bug
-
Resolution: Unresolved
-
P4
-
11, 12, 13
-
x86_64
-
linux
A DESCRIPTION OF THE PROBLEM :
HttpClient throws "java.io.IOException: too many concurrent streams" instead of opening additional connections.
When making high-volume asynchronous requests to an HTTP endpoint where the concurrent stream limit is exceeded, HttpClient starts failing rather than opening additional connections to handle the request throughput.
This makes using HttpClient difficult and unreliable in high throughput scenarios, since the caller has to manually handle a generic IOException, parse the text of the message to understand that the number of max concurrent streams has been exceeded, then create an additional HttpClient instance(s) and multiplex requests across them.
It is impossible for the caller to know how those requests should be multiplexed effectively, and error prone to have to parse the message of an exception to understand when to do so.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Create an HttpClient instance
2. Send high throughput asynchronous requests
3. Wait for the max concurrent streams to be exceeded
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
HttpClient creates additional connections so that asynchronous requests do not fail.
ACTUAL -
HttpClient asynchronous requests fail, essentially making HttpClient impossible to use asynchronously in high throughput scenarios.
FREQUENCY : always
HttpClient throws "java.io.IOException: too many concurrent streams" instead of opening additional connections.
When making high-volume asynchronous requests to an HTTP endpoint where the concurrent stream limit is exceeded, HttpClient starts failing rather than opening additional connections to handle the request throughput.
This makes using HttpClient difficult and unreliable in high throughput scenarios, since the caller has to manually handle a generic IOException, parse the text of the message to understand that the number of max concurrent streams has been exceeded, then create an additional HttpClient instance(s) and multiplex requests across them.
It is impossible for the caller to know how those requests should be multiplexed effectively, and error prone to have to parse the message of an exception to understand when to do so.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Create an HttpClient instance
2. Send high throughput asynchronous requests
3. Wait for the max concurrent streams to be exceeded
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
HttpClient creates additional connections so that asynchronous requests do not fail.
ACTUAL -
HttpClient asynchronous requests fail, essentially making HttpClient impossible to use asynchronously in high throughput scenarios.
FREQUENCY : always