You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Neeme Praks (JIRA)" <ji...@apache.org> on 2013/09/09 16:35:51 UTC

[jira] [Commented] (HTTPCLIENT-1396) PoolingClientConnectionManager seems to create one connection too many?

    [ https://issues.apache.org/jira/browse/HTTPCLIENT-1396?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13761885#comment-13761885 ] 

Neeme Praks commented on HTTPCLIENT-1396:
-----------------------------------------

Sample output on my machine:
{noformat}
2013-09-09 17:31:32.816:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
2013-09-09 17:31:32.818:INFO::jetty-6.1.26
2013-09-09 17:31:32.837:INFO::Started SocketConnector@0.0.0.0:52678
sending requests to http://localhost:52678/
response  OK: 1
response  OK: 2
response  OK: 3
response  OK: 4
response  OK: 5
response  OK: 6
response  OK: 7
response  OK: 8
response  OK: 9
response  OK: 10
response  OK: 11
response  OK: 12
response  OK: 13
response  OK: 14
response  OK: 15
response  OK: 16
response  OK: 17
response NOK: java.net.SocketTimeoutException: Read timed out
response  OK: 19
response  OK: 20
2013-09-09 17:31:39.441:INFO::Stopped SocketConnector@0.0.0.0:52678
{noformat}

Exception stacktrace:
{noformat}
java.net.SocketTimeoutException: Read timed out
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(SocketInputStream.java:129)
	at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
	at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
	at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:1)
	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
	at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
	at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
	at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
	at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
	at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
	at org.apache.http.impl.conn.TestPoolingConnManagerWithJetty$ClientWorker.run(TestPoolingConnManagerWithJetty.java:167)
{noformat}

                
> PoolingClientConnectionManager seems to create one connection too many?
> -----------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1396
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1396
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.2.5
>         Environment: Any
>            Reporter: Neeme Praks
>            Priority: Minor
>         Attachments: TestPoolingConnManagerWithJetty.java
>
>
> See attached Junit test.
> You'll also need Jetty dependency:
>     <dependency>
>       <groupId>org.mortbay.jetty</groupId>
>       <artifactId>jetty</artifactId>
>       <version>6.1.26</version>
>       <scope>test</scope>
>     </dependency>
> What the test does:
> * sets up a HTTP server (Jetty) with N number of threads processing requests (MAX_CONNECTIONS constant).
> * sets up HttpClient with same N number of max connections (PoolingClientConnectionManager)
> * sets up X workers, trying to connect to the server at the same time.
> *Expected result*: although throughput is throttled (limited number of threads and connections), all workers should get successful response.
> *Actual result:* at least one of the workers will get "java.net.SocketTimeoutException: Read timed out" error.
> *Workaround:* limit HttpClient max connections to MAX_CONNECTIONS-1 and the test will pass.
> Seems to be some off-by-one bug somewhere in PoolingClientConnectionManager.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org