Skip to content

Commit

Permalink
Added #responseTimeout to RequestConfig
Browse files Browse the repository at this point in the history
  • Loading branch information
ok2c committed Oct 22, 2018
1 parent b74cb12 commit 75ca519
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public class RequestConfig implements Cloneable {
private final Collection<String> proxyPreferredAuthSchemes;
private final Timeout connectionRequestTimeout;
private final Timeout connectTimeout;
private final Timeout responseTimeout;
private final boolean contentCompressionEnabled;
private final boolean hardCancellationEnabled;

Expand All @@ -65,7 +66,7 @@ public class RequestConfig implements Cloneable {
*/
protected RequestConfig() {
this(false, null, null, false, false, 0, false, null, null,
DEFAULT_CONNECTION_REQUEST_TIMEOUT, DEFAULT_CONNECT_TIMEOUT, false, false);
DEFAULT_CONNECTION_REQUEST_TIMEOUT, DEFAULT_CONNECT_TIMEOUT, null, false, false);
}

RequestConfig(
Expand All @@ -80,6 +81,7 @@ protected RequestConfig() {
final Collection<String> proxyPreferredAuthSchemes,
final Timeout connectionRequestTimeout,
final Timeout connectTimeout,
final Timeout responseTimeout,
final boolean contentCompressionEnabled,
final boolean hardCancellationEnabled) {
super();
Expand All @@ -94,6 +96,7 @@ protected RequestConfig() {
this.proxyPreferredAuthSchemes = proxyPreferredAuthSchemes;
this.connectionRequestTimeout = connectionRequestTimeout;
this.connectTimeout = connectTimeout;
this.responseTimeout = responseTimeout;
this.contentCompressionEnabled = contentCompressionEnabled;
this.hardCancellationEnabled = hardCancellationEnabled;
}
Expand Down Expand Up @@ -230,7 +233,6 @@ public Timeout getConnectionRequestTimeout() {
* such as {@code SSL} or {@code TLS} protocol negotiation).
* <p>
* A timeout value of zero is interpreted as an infinite timeout.
* A negative value is interpreted as undefined (system default).
* </p>
* <p>
* Default: 3 minutes
Expand All @@ -240,6 +242,26 @@ public Timeout getConnectTimeout() {
return connectTimeout;
}

/**
* Determines the timeout until arrival of a response from the opposite
* endpoint.
* <p>
* A timeout value of zero is interpreted as an infinite timeout.
* </p>
* <p>
* Please note that response timeout may be unsupported by
* HTTP transports with message multiplexing.
* </p>
* <p>
* Default: {@code null}
* </p>
*
* @since 5.0
*/
public Timeout getResponseTimeout() {
return responseTimeout;
}

/**
* Determines whether the target server is requested to compress content.
* <p>
Expand Down Expand Up @@ -343,6 +365,7 @@ public static class Builder {
private Collection<String> proxyPreferredAuthSchemes;
private Timeout connectionRequestTimeout;
private Timeout connectTimeout;
private Timeout responseTimeout;
private boolean contentCompressionEnabled;
private boolean hardCancellationEnabled;

Expand Down Expand Up @@ -422,6 +445,16 @@ public Builder setConnectTimeout(final long connectTimeout, final TimeUnit timeU
return this;
}

public Builder setResponseTimeout(final Timeout responseTimeout) {
this.responseTimeout = responseTimeout;
return this;
}

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

public Builder setContentCompressionEnabled(final boolean contentCompressionEnabled) {
this.contentCompressionEnabled = contentCompressionEnabled;
return this;
Expand All @@ -445,6 +478,7 @@ public RequestConfig build() {
proxyPreferredAuthSchemes,
connectionRequestTimeout != null ? connectionRequestTimeout : DEFAULT_CONNECTION_REQUEST_TIMEOUT,
connectTimeout != null ? connectTimeout : DEFAULT_CONNECT_TIMEOUT,
responseTimeout,
contentCompressionEnabled,
hardCancellationEnabled);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,11 @@ public Cancellable execute(final AsyncClientExchangeHandler exchangeHandler, fin
if (log.isDebugEnabled()) {
log.debug(ConnPoolSupport.getId(endpoint) + ": executing " + ConnPoolSupport.getId(exchangeHandler));
}
final RequestConfig requestConfig = context.getRequestConfig();
final Timeout responseTimeout = requestConfig.getResponseTimeout();
if (responseTimeout != null) {
endpoint.setSocketTimeout(responseTimeout);
}
endpoint.execute(exchangeHandler, context);
if (context.getRequestConfig().isHardCancellationEnabled()) {
return new Cancellable() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ public void sendRequest(
}
final Timeout connectionRequestTimeout = requestConfig.getConnectionRequestTimeout();
final Timeout connectTimeout = requestConfig.getConnectTimeout();
final Timeout responseTimeout = requestConfig.getResponseTimeout();
final HttpHost target = new HttpHost(request.getAuthority(), request.getScheme());

final Future<AsyncConnectionEndpoint> leaseFuture = leaseEndpoint(
Expand Down Expand Up @@ -393,6 +394,9 @@ public void streamEnd(final List<? extends Header> trailers) throws HttpExceptio
}

};
if (responseTimeout != null) {
endpoint.setSocketTimeout(responseTimeout);
}
endpoint.execute(internalExchangeHandler, pushHandlerFactory, clientContext);
}

Expand Down Expand Up @@ -463,6 +467,10 @@ public void execute(
}
}

public void setSocketTimeout(final Timeout timeout) {
connectionEndpoint.setSocketTimeout(timeout);
}

@Override
public void releaseAndReuse() {
if (released.compareAndSet(false, true)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,11 @@ public ClassicHttpResponse execute(final ClassicHttpRequest request, final HttpC
if (!endpoint.isConnected()) {
connectEndpoint(endpoint, context);
}
final RequestConfig requestConfig = context.getRequestConfig();
final Timeout responseTimeout = requestConfig.getResponseTimeout();
if (responseTimeout != null) {
endpoint.setSocketTimeout(responseTimeout);
}
return endpoint.execute(request, requestExecutor, context);
}

Expand Down

0 comments on commit 75ca519

Please sign in to comment.