Skip to content

Commit 42b4a2a

Browse files
committed
Merge pull request AsyncHttpClient#33 from jloomis/master
separate responseTimeout from idleConnectionTimeout
2 parents 35a7a7d + a6caf68 commit 42b4a2a

File tree

4 files changed

+22
-9
lines changed

4 files changed

+22
-9
lines changed

src/main/java/com/ning/http/client/AsyncHttpClientConfig.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public class AsyncHttpClientConfig {
5757
protected int maxConnectionPerHost;
5858
protected int connectionTimeOutInMs;
5959
protected int idleConnectionInPoolTimeoutInMs;
60+
protected int idleConnectionTimeoutInMs;
6061
protected int requestTimeoutInMs;
6162
protected boolean redirectEnabled;
6263
protected int maxDefaultRedirects;
@@ -89,6 +90,7 @@ private AsyncHttpClientConfig(int maxTotalConnections,
8990
int maxConnectionPerHost,
9091
int connectionTimeOutInMs,
9192
int idleConnectionInPoolTimeoutInMs,
93+
int idleConnectionTimeoutInMs,
9294
int requestTimeoutInMs,
9395
boolean redirectEnabled,
9496
int maxDefaultRedirects,
@@ -117,6 +119,7 @@ private AsyncHttpClientConfig(int maxTotalConnections,
117119
this.maxConnectionPerHost = maxConnectionPerHost;
118120
this.connectionTimeOutInMs = connectionTimeOutInMs;
119121
this.idleConnectionInPoolTimeoutInMs = idleConnectionInPoolTimeoutInMs;
122+
this.idleConnectionTimeoutInMs = idleConnectionTimeoutInMs;
120123
this.requestTimeoutInMs = requestTimeoutInMs;
121124
this.redirectEnabled = redirectEnabled;
122125
this.maxDefaultRedirects = maxDefaultRedirects;
@@ -188,10 +191,9 @@ public int getConnectionTimeoutInMs() {
188191
* Return the maximum time in millisecond an {@link com.ning.http.client.AsyncHttpClient} can stay idle.
189192
*
190193
* @return the maximum time in millisecond an {@link com.ning.http.client.AsyncHttpClient} can stay idle.
191-
* @deprecated Please use {@link com.ning.http.client.AsyncHttpClientConfig#getIdleConnectionInPoolTimeoutInMs()}
192194
*/
193195
public int getIdleConnectionTimeoutInMs() {
194-
return idleConnectionInPoolTimeoutInMs;
196+
return idleConnectionTimeoutInMs;
195197
}
196198

197199
/**
@@ -451,6 +453,7 @@ public static class Builder {
451453
private int defaultMaxConnectionPerHost = Integer.getInteger(ASYNC_CLIENT + "defaultMaxConnectionsPerHost", -1);
452454
private int defaultConnectionTimeOutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultConnectionTimeoutInMS", 60 * 1000);
453455
private int defaultIdleConnectionInPoolTimeoutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultIdleConnectionInPoolTimeoutInMS", 60 * 1000);
456+
private int defaultIdleConnectionTimeoutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultIdleConnectionTimeoutInMS", 60 * 1000);
454457
private int defaultRequestTimeoutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultRequestTimeoutInMS", 60 * 1000);
455458
private boolean redirectEnabled = Boolean.getBoolean(ASYNC_CLIENT + "defaultRedirectsEnabled");
456459
private int maxDefaultRedirects = Integer.getInteger(ASYNC_CLIENT + "defaultMaxRedirects", 5);
@@ -531,10 +534,9 @@ public Builder setConnectionTimeoutInMs(int defaultConnectionTimeOutInMs) {
531534
* @param defaultIdleConnectionTimeoutInMs
532535
* the maximum time in millisecond an {@link com.ning.http.client.AsyncHttpClient} can stay idle.
533536
* @return a {@link Builder}
534-
* @deprecated Please use {@link Builder#setIdleConnectionInPoolTimeoutInMs(int)}
535537
*/
536538
public Builder setIdleConnectionTimeoutInMs(int defaultIdleConnectionTimeoutInMs) {
537-
this.defaultIdleConnectionInPoolTimeoutInMs = defaultIdleConnectionTimeoutInMs;
539+
this.defaultIdleConnectionTimeoutInMs = defaultIdleConnectionTimeoutInMs;
538540
return this;
539541
}
540542

@@ -905,6 +907,7 @@ public Builder(AsyncHttpClientConfig prototype) {
905907
connectionsPool = prototype.getConnectionsPool();
906908
defaultConnectionTimeOutInMs = prototype.getConnectionTimeoutInMs();
907909
defaultIdleConnectionInPoolTimeoutInMs = prototype.getIdleConnectionInPoolTimeoutInMs();
910+
defaultIdleConnectionTimeoutInMs = prototype.getIdleConnectionTimeoutInMs();
908911
defaultMaxConnectionPerHost = prototype.getMaxConnectionPerHost();
909912
maxDefaultRedirects = prototype.getMaxRedirects();
910913
defaultMaxTotalConnections = prototype.getMaxTotalConnections();
@@ -955,6 +958,7 @@ public AsyncHttpClientConfig build() {
955958
defaultMaxConnectionPerHost,
956959
defaultConnectionTimeOutInMs,
957960
defaultIdleConnectionInPoolTimeoutInMs,
961+
defaultIdleConnectionTimeoutInMs,
958962
defaultRequestTimeoutInMs,
959963
redirectEnabled,
960964
maxDefaultRedirects,

src/main/java/com/ning/http/client/AsyncHttpClientConfigBean.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ void configureDefaults() {
4848
maxConnectionPerHost = Integer.getInteger(ASYNC_CLIENT + "defaultMaxConnectionsPerHost", -1);
4949
connectionTimeOutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultConnectionTimeoutInMS", 60 * 1000);
5050
idleConnectionInPoolTimeoutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultIdleConnectionInPoolTimeoutInMS", 60 * 1000);
51+
idleConnectionTimeoutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultIdleConnectionTimeoutInMS", 60 * 1000);
5152
requestTimeoutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultRequestTimeoutInMS", 60 * 1000);
5253
redirectEnabled = Boolean.getBoolean(ASYNC_CLIENT + "defaultRedirectsEnabled");
5354
maxDefaultRedirects = Integer.getInteger(ASYNC_CLIENT + "defaultMaxRedirects", 5);
@@ -110,6 +111,11 @@ public AsyncHttpClientConfigBean setIdleConnectionInPoolTimeoutInMs(int idleConn
110111
return this;
111112
}
112113

114+
public AsyncHttpClientConfigBean setIdleConnectionTimeoutInMs(int idleConnectionTimeoutInMs) {
115+
this.idleConnectionTimeoutInMs = idleConnectionTimeoutInMs;
116+
return this;
117+
}
118+
113119
public AsyncHttpClientConfigBean setRequestTimeoutInMs(int requestTimeoutInMs) {
114120
this.requestTimeoutInMs = requestTimeoutInMs;
115121
return this;

src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1844,7 +1844,7 @@ public static <T> NettyResponseFuture<T> newFuture(URI uri,
18441844
NettyAsyncHttpProvider provider) {
18451845

18461846
NettyResponseFuture<T> f = new NettyResponseFuture<T>(uri, request, asyncHandler, nettyRequest,
1847-
requestTimeout(config, request.getPerRequestConfig()), provider);
1847+
requestTimeout(config, request.getPerRequestConfig()), config.getIdleConnectionTimeoutInMs(), provider);
18481848

18491849
if (request.getHeaders().getFirstValue("Expect") != null
18501850
&& request.getHeaders().getFirstValue("Expect").equalsIgnoreCase("100-Continue")) {

src/main/java/com/ning/http/client/providers/netty/NettyResponseFuture.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ enum STATE {
6060
private final AtomicBoolean isCancelled = new AtomicBoolean(false);
6161
private AsyncHandler<V> asyncHandler;
6262
private final int responseTimeoutInMs;
63+
private final int idleConnectionTimeoutInMs;
6364
private Request request;
6465
private HttpRequest nettyRequest;
6566
private final AtomicReference<V> content = new AtomicReference<V>();
@@ -72,6 +73,7 @@ enum STATE {
7273
private final AtomicBoolean inAuth = new AtomicBoolean(false);
7374
private final AtomicBoolean statusReceived = new AtomicBoolean(false);
7475
private final AtomicLong touch = new AtomicLong(System.currentTimeMillis());
76+
private final long start = System.currentTimeMillis();
7577
private final NettyAsyncHttpProvider asyncHttpProvider;
7678
private final AtomicReference<STATE> state = new AtomicReference<STATE>(STATE.NEW);
7779
private final AtomicBoolean contentProcessed = new AtomicBoolean(false);
@@ -89,10 +91,12 @@ public NettyResponseFuture(URI uri,
8991
AsyncHandler<V> asyncHandler,
9092
HttpRequest nettyRequest,
9193
int responseTimeoutInMs,
94+
int idleConnectionTimeoutInMs,
9295
NettyAsyncHttpProvider asyncHttpProvider) {
9396

9497
this.asyncHandler = asyncHandler;
9598
this.responseTimeoutInMs = responseTimeoutInMs;
99+
this.idleConnectionTimeoutInMs = idleConnectionTimeoutInMs;
96100
this.request = request;
97101
this.nettyRequest = nettyRequest;
98102
this.uri = uri;
@@ -169,7 +173,9 @@ public boolean cancel(boolean force) {
169173
* @return <code>true</code> if response has expired and should be terminated.
170174
*/
171175
public boolean hasExpired() {
172-
return responseTimeoutInMs != -1 && ((System.currentTimeMillis() - touch.get()) >= responseTimeoutInMs);
176+
long now = System.currentTimeMillis();
177+
return idleConnectionTimeoutInMs != -1 && ((now - touch.get()) >= idleConnectionTimeoutInMs)
178+
|| responseTimeoutInMs != -1 && ((now - start) >= responseTimeoutInMs);
173179
}
174180

175181
/**
@@ -202,9 +208,6 @@ public V get(long l, TimeUnit tu) throws InterruptedException, TimeoutException,
202208
latch.await();
203209
} else {
204210
expired = !latch.await(l, tu);
205-
if (!contentProcessed.get() && expired && ((System.currentTimeMillis() - touch.get()) <= l)) {
206-
return get(l, tu);
207-
}
208211
}
209212

210213
if (expired) {

0 commit comments

Comments
 (0)