You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by John Baxter <j_...@hotmail.com> on 2008/04/04 16:35:58 UTC

ClientMultiThreaded Example

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]
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?? 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? 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??

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/

Re: ClientMultiThreaded Example

Posted by Sam Berlin <sb...@gmail.com>.
> > 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 think this was a bug in the last released HttpClient alpha (in that
it didn't explicitly release the connection back).  The latest
snapshot from people.apache.org fixes it.  (See
https://issues.apache.org/jira/browse/HTTPCLIENT-759 , or depending on
the timing of the abort
alsohttps://issues.apache.org/jira/browse/HTTPCLIENT-760 ).

Sam

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


Re: ClientMultiThreaded Example

Posted by Oleg Kalnichevski <ol...@apache.org>.
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: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org