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 Daniel Stucky <da...@attensity.com> on 2012/05/04 08:59:43 UTC

Question in Timeouts when writing data

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


Re: Question in Timeouts when writing data

Posted by Oleg Kalnichevski <ol...@apache.org>.
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