On Fri, 2008-04-04 at 14:35 +0000, John Baxter wrote:
> Hi Folks,
> Im hope some one can shed some light on this for me. Im currently doing a
> prototype and decided i would do it with the httpclient4.0 alpha3 version. I
> have or will have a multi-threaded scenario so i have a very similar set up
> as the ClientMultiThreadedExecution example located here
> http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/ClientMultiThreadedExecution.java
>
> Anyways i have the use case that should my server go down, my app will wait
> till it comes back up. So i have a worker thread that polls the server or
> tries to poll the server every 30 seconds. Now i re-use the same httpclient
> instance right throughout the whole application
>
> Now what i see in the log file is as follows
> 18203 [Thread-1] DEBUG org.apache.http.impl.client.ClientParamsStack -
> 'http.protocol.max-redirects': null
> 18203 [Thread-1] DEBUG org.apache.http.impl.client.ClientParamsStack -
> 'http.connection-manager.timeout': null
> 18203 [Thread-1] DEBUG
> org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager -
> ThreadSafeClientConnManager.getConnection:
> HttpRoute[{}->http://localhost:8080], timeout = 0
> 18203 [Thread-1] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute - No
> free connections. HttpRoute[{}->http://localhost:8080]
The connection manager blocks because it has run of free connections.
Apparently your application is leaking connections.
> 18203 [Thread-1] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute -
> Need to wait for connection. HttpRoute[{}->http://localhost:8080]
>
> My problem is that the client just hangs and i think it is due to the "Need
> to wait for connection" part.
>
> 18203 [Thread-1] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute -
> Need to wait for connection. HttpRoute[{}->http://localhost:8080]
> How long does a thread wait until it gets a free connection?? infinity?
It will block infinitely because the connection manager timeout value is
set to zero.
ThreadSafeClientConnManager.getConnection:
HttpRoute[{}->http://localhost:8080], timeout = 0
> ? Or how is it released?? My polling thread is just hanging. I restart the
> server but the polling thread is still waiting/hanging.
>
> I have taken the same scenario and used the http client 3.1 and have no
> problems like above.
>
> I think i read somewhere that the connection is returned back to the pool
> when the input stream is closed. Now if the server is down, i dont get a
> response input stream, so does the httpget.abort release the connection back
> to the pool?
Yes, it does.
> I dont think it has anything to do with the TIME_WAIT state either, once the
> thread enters the "need to wait for connection" it will hang for infinity. I
> tried to get a hold of the current threads connection but the API doesnt give
> me that chance, just so i could close the connection myself and not be
> dependant on whats underneath to clean up.
>
> Anybody any input as to why my polling thread just hangs in a wait state for
> infinity??
Because of a connection leak somewhere. It can be either in your code or
in Httpclient itself. Please upgrade to the latest SVN snapshot and
re-test. If the problem persists, let me know.
Oleg
>
> Cheers,
> JB
>
>
> _________________________________________________________________
> Love Hotmail? It just got better – Drag and Drop capabilities, new Reading
> Panes making it easier to read your mail, enhanced security settings, 5GB of
> FREE storage? New Windows Live Hotmail. Get your free account here
> http://get.live.com/mail/overview/
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]