Skip to content

Commit

Permalink
Replaced socket and connect timeout request parameters with a single …
Browse files Browse the repository at this point in the history
…connection timeout request parameter. HTTP requests may be executed concurrently over a single HTTP/2 connection and no longer should overwrite connection socket timeout
  • Loading branch information
ok2c committed Nov 18, 2017
1 parent 47dfbfa commit 235348e
Show file tree
Hide file tree
Showing 21 changed files with 53 additions and 114 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,7 @@ public static void main(String[] args)throws Exception {

// Execute a GET with timeout settings and return response content as String.
executor.execute(Request.Get("http://somehost/")
.connectTimeout(Timeout.ofSeconds(1))
.socketTimeout(Timeout.ofSeconds(1))
).returnContent().asString();
.connectionTimeout(Timeout.ofSeconds(1))).returnContent().asString();

// Execute a POST with the 'expect-continue' handshake, using HTTP/1.1,
// containing a request body as String and return response content as byte array.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ public class FluentRequests {
public static void main(String[] args)throws Exception {
// Execute a GET with timeout settings and return response content as String.
Request.Get("http://somehost/")
.connectTimeout(Timeout.ofSeconds(1))
.socketTimeout(Timeout.ofSeconds(1))
.connectionTimeout(Timeout.ofSeconds(1))
.execute().returnContent().asString();

// Execute a POST with the 'expect-continue' handshake, using HTTP/1.1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,7 @@ public class Request {

private final HttpUriRequestBase request;
private Boolean useExpectContinue;
private Timeout socketTmeout;
private Timeout connectTimeout;
private Timeout connectionTimeout;
private HttpHost proxy;

private SimpleDateFormat dateFormatter;
Expand Down Expand Up @@ -171,11 +170,8 @@ ClassicHttpResponse internalExecute(
if (this.useExpectContinue != null) {
builder.setExpectContinueEnabled(this.useExpectContinue);
}
if (this.socketTmeout != null) {
builder.setSocketTimeout(this.socketTmeout);
}
if (this.connectTimeout != null) {
builder.setConnectTimeout(this.connectTimeout);
if (this.connectionTimeout != null) {
builder.setConnectionTimeout(this.connectionTimeout);
}
if (this.proxy != null) {
builder.setProxy(this.proxy);
Expand Down Expand Up @@ -283,13 +279,8 @@ public Request userAgent(final String agent) {

//// HTTP connection parameter operations

public Request socketTimeout(final Timeout timeout) {
this.socketTmeout = timeout;
return this;
}

public Request connectTimeout(final Timeout timeout) {
this.connectTimeout = timeout;
public Request connectionTimeout(final Timeout timeout) {
this.connectionTimeout = timeout;
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,7 @@ protected void after() {
protected void before() throws Throwable {
clientBuilder = HttpAsyncClientBuilder.create()
.setDefaultRequestConfig(RequestConfig.custom()
.setSocketTimeout(TIMEOUT)
.setConnectTimeout(TIMEOUT)
.setConnectionTimeout(TIMEOUT)
.setConnectionRequestTimeout(TIMEOUT)
.build())
.setConnectionManager(connManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,7 @@ protected void after() {
protected void before() throws Throwable {
clientBuilder = HttpAsyncClientBuilder.create()
.setDefaultRequestConfig(RequestConfig.custom()
.setSocketTimeout(TIMEOUT)
.setConnectTimeout(TIMEOUT)
.setConnectionTimeout(TIMEOUT)
.setConnectionRequestTimeout(TIMEOUT)
.build())
.setConnectionManager(connManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,7 @@ protected void after() {
protected void before() throws Throwable {
clientBuilder = HttpAsyncClientBuilder.create()
.setDefaultRequestConfig(RequestConfig.custom()
.setSocketTimeout(TIMEOUT)
.setConnectTimeout(TIMEOUT)
.setConnectionTimeout(TIMEOUT)
.setConnectionRequestTimeout(TIMEOUT)
.build())
.setConnectionManager(connManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,7 @@ protected void after() {
protected void before() throws Throwable {
clientBuilder = HttpAsyncClientBuilder.create()
.setDefaultRequestConfig(RequestConfig.custom()
.setSocketTimeout(TIMEOUT)
.setConnectTimeout(TIMEOUT)
.setConnectionTimeout(TIMEOUT)
.setConnectionRequestTimeout(TIMEOUT)
.build())
.setConnectionManager(connManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,7 @@ protected void after() {
protected void before() throws Throwable {
clientBuilder = HttpAsyncClientBuilder.create()
.setDefaultRequestConfig(RequestConfig.custom()
.setSocketTimeout(TIMEOUT)
.setConnectTimeout(TIMEOUT)
.setConnectionTimeout(TIMEOUT)
.setConnectionRequestTimeout(TIMEOUT)
.build())
.setConnectionManager(connManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,7 @@ public static Collection<Object[]> protocols() {
protected void before() throws Throwable {
clientBuilder = Http2AsyncClientBuilder.create()
.setDefaultRequestConfig(RequestConfig.custom()
.setSocketTimeout(TIMEOUT)
.setConnectTimeout(TIMEOUT)
.setConnectionTimeout(TIMEOUT)
.setConnectionRequestTimeout(TIMEOUT)
.build())
.setTlsStrategy(new BasicClientTlsStrategy(SSLTestContexts.createClientSSLContext()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,7 @@ public static Collection<Object[]> protocols() {
protected void before() throws Throwable {
clientBuilder = Http2AsyncClientBuilder.create()
.setDefaultRequestConfig(RequestConfig.custom()
.setSocketTimeout(TIMEOUT)
.setConnectTimeout(TIMEOUT)
.setConnectionTimeout(TIMEOUT)
.setConnectionRequestTimeout(TIMEOUT)
.build())
.setTlsStrategy(new H2TlsStrategy(SSLTestContexts.createClientSSLContext()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,7 @@ public static Collection<Object[]> protocols() {
protected void before() throws Throwable {
clientBuilder = Http2AsyncClientBuilder.create()
.setDefaultRequestConfig(RequestConfig.custom()
.setSocketTimeout(TIMEOUT)
.setConnectTimeout(TIMEOUT)
.setConnectionTimeout(TIMEOUT)
.setConnectionRequestTimeout(TIMEOUT)
.build())
.setTlsStrategy(new H2TlsStrategy(SSLTestContexts.createClientSSLContext()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,7 @@ protected void before() throws Throwable {
.build());
clientBuilder = HttpClientBuilder.create()
.setDefaultRequestConfig(RequestConfig.custom()
.setSocketTimeout(TIMEOUT)
.setConnectTimeout(TIMEOUT)
.setConnectionTimeout(TIMEOUT)
.setConnectionRequestTimeout(TIMEOUT)
.build())
.setConnectionManager(connManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,7 @@ public InetAddress[] resolve(final String host) throws UnknownHostException {
// Request configuration can be overridden at the request level.
// They will take precedence over the one set at the client level.
final RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig)
.setSocketTimeout(Timeout.ofSeconds(5))
.setConnectTimeout(Timeout.ofSeconds(5))
.setConnectionTimeout(Timeout.ofSeconds(5))
.setConnectionRequestTimeout(Timeout.ofSeconds(5))
.setProxy(new HttpHost("myotherproxy", 8080))
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@
public class RequestConfig implements Cloneable {

private static final Timeout DEFAULT_CONNECTION_REQUEST_TIMEOUT = Timeout.ofMinutes(3);
private static final Timeout DEFAULT_CONNECT_TIMEOUT = Timeout.ofMinutes(3);
private static final Timeout DEFAULT_SOCKET_TIMEOUT = Timeout.ZERO_MILLISECONDS;
private static final Timeout DEFAULT_CONNECTION_TIMEOUT = Timeout.ofMinutes(3);

public static final RequestConfig DEFAULT = new Builder().build();

Expand All @@ -57,16 +56,14 @@ public class RequestConfig implements Cloneable {
private final Collection<String> targetPreferredAuthSchemes;
private final Collection<String> proxyPreferredAuthSchemes;
private final Timeout connectionRequestTimeout;
private final Timeout connectTimeout;
private final Timeout socketTimeout;
private final Timeout connectionTimeout;
private final boolean contentCompressionEnabled;

/**
* Intended for CDI compatibility
*/
protected RequestConfig() {
this(false, null, null, false, false, 0, false, null, null,
DEFAULT_CONNECTION_REQUEST_TIMEOUT, DEFAULT_CONNECT_TIMEOUT, DEFAULT_SOCKET_TIMEOUT, false);
this(false, null, null, false, false, 0, false, null, null, DEFAULT_CONNECTION_REQUEST_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT, false);
}

RequestConfig(
Expand All @@ -80,8 +77,7 @@ protected RequestConfig() {
final Collection<String> targetPreferredAuthSchemes,
final Collection<String> proxyPreferredAuthSchemes,
final Timeout connectionRequestTimeout,
final Timeout connectTimeout,
final Timeout socketTimeout,
final Timeout connectionTimeout,
final boolean contentCompressionEnabled) {
super();
this.expectContinueEnabled = expectContinueEnabled;
Expand All @@ -94,8 +90,7 @@ protected RequestConfig() {
this.targetPreferredAuthSchemes = targetPreferredAuthSchemes;
this.proxyPreferredAuthSchemes = proxyPreferredAuthSchemes;
this.connectionRequestTimeout = connectionRequestTimeout;
this.connectTimeout = connectTimeout;
this.socketTimeout = socketTimeout;
this.connectionTimeout = connectionTimeout;
this.contentCompressionEnabled = contentCompressionEnabled;
}

Expand Down Expand Up @@ -228,7 +223,8 @@ public Timeout getConnectionRequestTimeout() {
}

/**
* Determines the timeout in milliseconds until a connection is established.
* Determines the timeout in milliseconds until a new connection is
* fully established or established connection transmits a data packet.
* A timeout value of zero is interpreted as an infinite timeout.
* <p>
* A timeout value of zero is interpreted as an infinite timeout.
Expand All @@ -237,25 +233,11 @@ public Timeout getConnectionRequestTimeout() {
* <p>
* Default: 3 minutes
* </p>
*
* @since 5.0
*/
public Timeout getConnectTimeout() {
return connectTimeout;
}

/**
* Defines the socket timeout ({@code SO_TIMEOUT}) in milliseconds,
* which is the timeout for waiting for data or, put differently,
* a maximum period inactivity between two consecutive data packets).
* <p>
* A timeout value of zero is interpreted as an infinite timeout.
* A negative value is interpreted as undefined (system default).
* </p>
* <p>
* Default: no timeout.
* </p>
*/
public Timeout getSocketTimeout() {
return socketTimeout;
public Timeout getConnectionTimeout() {
return connectionTimeout;
}

/**
Expand Down Expand Up @@ -289,8 +271,7 @@ public String toString() {
builder.append(", targetPreferredAuthSchemes=").append(targetPreferredAuthSchemes);
builder.append(", proxyPreferredAuthSchemes=").append(proxyPreferredAuthSchemes);
builder.append(", connectionRequestTimeout=").append(connectionRequestTimeout);
builder.append(", connectTimeout=").append(connectTimeout);
builder.append(", socketTimeout=").append(socketTimeout);
builder.append(", connectionTimeout=").append(connectionTimeout);
builder.append(", contentCompressionEnabled=").append(contentCompressionEnabled);
builder.append("]");
return builder.toString();
Expand All @@ -312,8 +293,7 @@ public static RequestConfig.Builder copy(final RequestConfig config) {
.setTargetPreferredAuthSchemes(config.getTargetPreferredAuthSchemes())
.setProxyPreferredAuthSchemes(config.getProxyPreferredAuthSchemes())
.setConnectionRequestTimeout(config.getConnectionRequestTimeout())
.setConnectTimeout(config.getConnectTimeout())
.setSocketTimeout(config.getSocketTimeout())
.setConnectionTimeout(config.getConnectionTimeout())
.setContentCompressionEnabled(config.isContentCompressionEnabled());
}

Expand All @@ -329,8 +309,7 @@ public static class Builder {
private Collection<String> targetPreferredAuthSchemes;
private Collection<String> proxyPreferredAuthSchemes;
private Timeout connectionRequestTimeout;
private Timeout connectTimeout;
private Timeout socketTimeout;
private Timeout connectionTimeout;
private boolean contentCompressionEnabled;

Builder() {
Expand All @@ -339,8 +318,7 @@ public static class Builder {
this.maxRedirects = 50;
this.authenticationEnabled = true;
this.connectionRequestTimeout = DEFAULT_CONNECTION_REQUEST_TIMEOUT;
this.connectTimeout = DEFAULT_CONNECT_TIMEOUT;
this.socketTimeout = DEFAULT_SOCKET_TIMEOUT;
this.connectionTimeout = DEFAULT_CONNECTION_TIMEOUT;
this.contentCompressionEnabled = true;
}

Expand Down Expand Up @@ -399,23 +377,13 @@ public Builder setConnectionRequestTimeout(final long connectionRequestTimeout,
return this;
}

public Builder setConnectTimeout(final Timeout connectTimeout) {
this.connectTimeout = connectTimeout;
public Builder setConnectionTimeout(final Timeout connectionTimeout) {
this.connectionTimeout = connectionTimeout;
return this;
}

public Builder setConnectTimeout(final long connectTimeout, final TimeUnit timeUnit) {
this.connectTimeout = Timeout.of(connectTimeout, timeUnit);
return this;
}

public Builder setSocketTimeout(final Timeout socketTimeout) {
this.socketTimeout = socketTimeout;
return this;
}

public Builder setSocketTimeout(final long socketTimeout, final TimeUnit timeUnit) {
this.socketTimeout = Timeout.of(socketTimeout, timeUnit);
this.connectionTimeout = Timeout.of(connectTimeout, timeUnit);
return this;
}

Expand All @@ -436,8 +404,7 @@ public RequestConfig build() {
targetPreferredAuthSchemes,
proxyPreferredAuthSchemes,
connectionRequestTimeout != null ? connectionRequestTimeout : DEFAULT_CONNECTION_REQUEST_TIMEOUT,
connectTimeout != null ? connectTimeout : DEFAULT_CONNECT_TIMEOUT,
socketTimeout != null ? socketTimeout : DEFAULT_SOCKET_TIMEOUT,
connectionTimeout != null ? connectionTimeout : DEFAULT_CONNECTION_TIMEOUT,
contentCompressionEnabled);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public void acquireConnection(
if (sessionRef.get() == null) {
final HttpHost target = route.getTargetHost();
final RequestConfig requestConfig = context.getRequestConfig();
connPool.getSession(target, requestConfig.getConnectTimeout(), new FutureCallback<IOSession>() {
connPool.getSession(target, requestConfig.getConnectionTimeout(), new FutureCallback<IOSession>() {

@Override
public void completed(final IOSession ioSession) {
Expand Down Expand Up @@ -153,7 +153,7 @@ public void connect(
} else {
final HttpHost target = endpoint.target;
final RequestConfig requestConfig = context.getRequestConfig();
connPool.getSession(target, requestConfig.getConnectTimeout(), new FutureCallback<IOSession>() {
connPool.getSession(target, requestConfig.getConnectionTimeout(), new FutureCallback<IOSession>() {

@Override
public void completed(final IOSession ioSession) {
Expand Down Expand Up @@ -194,7 +194,7 @@ public void execute(final AsyncClientExchangeHandler exchangeHandler, final Http
} else {
final HttpHost target = endpoint.target;
final RequestConfig requestConfig = context.getRequestConfig();
connPool.getSession(target, requestConfig.getConnectTimeout(), new FutureCallback<IOSession>() {
connPool.getSession(target, requestConfig.getConnectionTimeout(), new FutureCallback<IOSession>() {

@Override
public void completed(final IOSession ioSession) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,19 +183,19 @@ public void connect(
callback.completed(this);
} else {
final RequestConfig requestConfig = context.getRequestConfig();
final TimeValue timeout = requestConfig.getConnectionTimeout();
manager.connect(
endpoint,
connectionInitiator,
requestConfig.getConnectTimeout(),
timeout,
versionPolicy,
context,
new FutureCallback<AsyncConnectionEndpoint>() {

@Override
public void completed(final AsyncConnectionEndpoint endpoint) {
final TimeValue socketTimeout = requestConfig.getSocketTimeout();
if (TimeValue.isPositive(socketTimeout)) {
endpoint.setSocketTimeout(socketTimeout.toMillisIntBound());
if (TimeValue.isPositive(timeout)) {
endpoint.setSocketTimeout(timeout.toMillisIntBound());
}
callback.completed(InternalHttpAsyncExecRuntime.this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ public void sendRequest(
} else {
requestConfig = clientContext.getRequestConfig();
}
final Timeout connectTimeout = requestConfig.getConnectTimeout();
final Timeout connectTimeout = requestConfig.getConnectionTimeout();
final HttpHost target = new HttpHost(request.getAuthority(), request.getScheme());

final Future<IOSession> sessionFuture = connPool.getSession(target, connectTimeout, new FutureCallback<IOSession>() {
Expand Down
Loading

0 comments on commit 235348e

Please sign in to comment.