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]

Reply via email to