hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: Question in Timeouts when writing data
Date Fri, 04 May 2012 11:07:12 GMT
On Fri, 2012-05-04 at 08:59 +0200, Daniel Stucky wrote:
> Hi,
> 
> the SMILA project uses HttpClient 4.1.2 and is very happy with it.
> 
> In order to improve system availability and reliability we did some tests on "what happens
to the HTTP communication on disconnects" (e.g. a physical disconnect of the network cable).
> As it is not possible to check beforehand if a connection is available and an operation
is executable successfully we experimented with timeouts:
> 
> Using something like
> client.getParams().setParameter(HttpConnectionParams.SO_TIMEOUT, 30000);
> helps when reading data from a server response.
> 
> But what about writing to the server ? Checking the documentation and the code  we could
not find anything that addresses timeouts on write operations.
> The current behavior on my machine (Ubuntu 10) is that the call blocks for about 15 minutes
and then the following exception is thrown:
> 
> do_ypcall: clnt_call: RPC: Unable to send; errno = Network is unreachable
> YPBINDPROC_DOMAIN: Domain not bound
> java.net.UnknownHostException: <machine-name>
>             at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
>             at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:850)
>             at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1201)
>             at java.net.InetAddress.getAllByName0(InetAddress.java:1154)
>             at java.net.InetAddress.getAllByName(InetAddress.java:1084)
>             at java.net.InetAddress.getAllByName(InetAddress.java:1020)
>             at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:242)
>             at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:130)
>             at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
>             at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
>             at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
>             at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
>             at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
>             at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
>             at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
>             at ...
> 
> Is there anything we can do to improve the situation with write operations ?
> This is critical because HTTP communication consists always of write/read pairs (from
the client perspective).
> 
> Bye,
> Daniel
> 

Java classic (blocking) i/o model does not support timeouts on write
operations. There is not much we can do about it. However, if the
connection gets reset during a write operation I believe the operation
should get unblocked with a SocketException of some sort. Unfortunately
I cannot say if unplugging the cable should be enough to simulate a
connection reset.

Oleg 


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


Mime
View raw message