Skip to content

Commit 0ebfd64

Browse files
authored
Changed requestTimeout's type to java.time.Duration (#1864)
1 parent e12e8d4 commit 0ebfd64

28 files changed

+70
-53
lines changed

client/src/main/java/org/asynchttpclient/AsyncHttpClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@
120120
* Finally, you can configure the AsyncHttpClient using an {@link DefaultAsyncHttpClientConfig} instance.
121121
* <br>
122122
* <blockquote><pre>
123-
* AsyncHttpClient c = new AsyncHttpClient(new AsyncHttpClientConfig.Builder().setRequestTimeoutInMs(...).build());
123+
* AsyncHttpClient c = new AsyncHttpClient(new DefaultAsyncHttpClientConfig.Builder().setRequestTimeout(...).build());
124124
* Future&lt;Response&gt; f = c.prepareGet(TARGET_URL).execute();
125125
* Response r = f.get();
126126
* </pre></blockquote>

client/src/main/java/org/asynchttpclient/AsyncHttpClientConfig.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,11 @@ public interface AsyncHttpClientConfig {
105105
int getConnectionPoolCleanerPeriod();
106106

107107
/**
108-
* Return the maximum time in millisecond an {@link AsyncHttpClient} waits until the response is completed.
108+
* Return the maximum time an {@link AsyncHttpClient} waits until the response is completed.
109109
*
110-
* @return the maximum time in millisecond an {@link AsyncHttpClient} waits until the response is completed.
110+
* @return the maximum time an {@link AsyncHttpClient} waits until the response is completed.
111111
*/
112-
int getRequestTimeout();
112+
Duration getRequestTimeout();
113113

114114
/**
115115
* Is HTTP redirect enabled

client/src/main/java/org/asynchttpclient/DefaultAsyncHttpClientConfig.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public class DefaultAsyncHttpClientConfig implements AsyncHttpClientConfig {
132132

133133
// timeouts
134134
private final Duration connectTimeout;
135-
private final int requestTimeout;
135+
private final Duration requestTimeout;
136136
private final int readTimeout;
137137
private final int shutdownQuietPeriod;
138138
private final int shutdownTimeout;
@@ -217,7 +217,7 @@ private DefaultAsyncHttpClientConfig(// http
217217

218218
// timeouts
219219
Duration connectTimeout,
220-
int requestTimeout,
220+
Duration requestTimeout,
221221
int readTimeout,
222222
int shutdownQuietPeriod,
223223
int shutdownTimeout,
@@ -478,7 +478,7 @@ public Duration getConnectTimeout() {
478478
}
479479

480480
@Override
481-
public int getRequestTimeout() {
481+
public Duration getRequestTimeout() {
482482
return requestTimeout;
483483
}
484484

@@ -797,7 +797,7 @@ public static class Builder {
797797

798798
// timeouts
799799
private Duration connectTimeout = defaultConnectTimeout();
800-
private int requestTimeout = defaultRequestTimeout();
800+
private Duration requestTimeout = defaultRequestTimeout();
801801
private int readTimeout = defaultReadTimeout();
802802
private int shutdownQuietPeriod = defaultShutdownQuietPeriod();
803803
private int shutdownTimeout = defaultShutdownTimeout();
@@ -1064,7 +1064,7 @@ public Builder setConnectTimeout(Duration connectTimeout) {
10641064
return this;
10651065
}
10661066

1067-
public Builder setRequestTimeout(int requestTimeout) {
1067+
public Builder setRequestTimeout(Duration requestTimeout) {
10681068
this.requestTimeout = requestTimeout;
10691069
return this;
10701070
}

client/src/main/java/org/asynchttpclient/DefaultRequest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.net.InetAddress;
3030
import java.nio.ByteBuffer;
3131
import java.nio.charset.Charset;
32+
import java.time.Duration;
3233
import java.util.ArrayList;
3334
import java.util.Collections;
3435
import java.util.List;
@@ -57,7 +58,7 @@ public class DefaultRequest implements Request {
5758
private final Realm realm;
5859
private final File file;
5960
private final Boolean followRedirect;
60-
private final int requestTimeout;
61+
private final Duration requestTimeout;
6162
private final int readTimeout;
6263
private final long rangeOffset;
6364
private final Charset charset;
@@ -86,7 +87,7 @@ public DefaultRequest(String method,
8687
Realm realm,
8788
File file,
8889
Boolean followRedirect,
89-
int requestTimeout,
90+
Duration requestTimeout,
9091
int readTimeout,
9192
long rangeOffset,
9293
Charset charset,
@@ -111,7 +112,7 @@ public DefaultRequest(String method,
111112
this.realm = realm;
112113
this.file = file;
113114
this.followRedirect = followRedirect;
114-
this.requestTimeout = requestTimeout;
115+
this.requestTimeout = requestTimeout == null ? Duration.ZERO : requestTimeout;
115116
this.readTimeout = readTimeout;
116117
this.rangeOffset = rangeOffset;
117118
this.charset = charset;
@@ -220,7 +221,7 @@ public Boolean getFollowRedirect() {
220221
}
221222

222223
@Override
223-
public int getRequestTimeout() {
224+
public Duration getRequestTimeout() {
224225
return requestTimeout;
225226
}
226227

client/src/main/java/org/asynchttpclient/Request.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.net.InetAddress;
3131
import java.nio.ByteBuffer;
3232
import java.nio.charset.Charset;
33+
import java.time.Duration;
3334
import java.util.List;
3435

3536
/**
@@ -154,7 +155,7 @@ public interface Request {
154155
/**
155156
* @return the request timeout. Non zero values means "override config value".
156157
*/
157-
int getRequestTimeout();
158+
Duration getRequestTimeout();
158159

159160
/**
160161
* @return the read timeout. Non zero values means "override config value".

client/src/main/java/org/asynchttpclient/RequestBuilderBase.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.net.InetAddress;
3636
import java.nio.ByteBuffer;
3737
import java.nio.charset.Charset;
38+
import java.time.Duration;
3839
import java.util.ArrayList;
3940
import java.util.Collection;
4041
import java.util.Collections;
@@ -82,7 +83,7 @@ public abstract class RequestBuilderBase<T extends RequestBuilderBase<T>> {
8283
protected Realm realm;
8384
protected File file;
8485
protected Boolean followRedirect;
85-
protected int requestTimeout;
86+
protected Duration requestTimeout;
8687
protected int readTimeout;
8788
protected long rangeOffset;
8889
protected Charset charset;
@@ -503,7 +504,7 @@ public T setFollowRedirect(boolean followRedirect) {
503504
return asDerivedType();
504505
}
505506

506-
public T setRequestTimeout(int requestTimeout) {
507+
public T setRequestTimeout(Duration requestTimeout) {
507508
this.requestTimeout = requestTimeout;
508509
return asDerivedType();
509510
}

client/src/main/java/org/asynchttpclient/config/AsyncHttpClientConfigDefaults.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ public static int defaultReadTimeout() {
127127
return AsyncHttpClientConfigHelper.getAsyncHttpClientConfig().getInt(ASYNC_CLIENT_CONFIG_ROOT + READ_TIMEOUT_CONFIG);
128128
}
129129

130-
public static int defaultRequestTimeout() {
131-
return AsyncHttpClientConfigHelper.getAsyncHttpClientConfig().getInt(ASYNC_CLIENT_CONFIG_ROOT + REQUEST_TIMEOUT_CONFIG);
130+
public static Duration defaultRequestTimeout() {
131+
return AsyncHttpClientConfigHelper.getAsyncHttpClientConfig().getDuration(ASYNC_CLIENT_CONFIG_ROOT + REQUEST_TIMEOUT_CONFIG);
132132
}
133133

134134
public static int defaultConnectionTtl() {

client/src/main/java/org/asynchttpclient/netty/timeout/RequestTimeoutTimerTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class RequestTimeoutTimerTask extends TimeoutTimerTask {
2929
RequestTimeoutTimerTask(NettyResponseFuture<?> nettyResponseFuture,
3030
NettyRequestSender requestSender,
3131
TimeoutsHolder timeoutsHolder,
32-
int requestTimeout) {
32+
long requestTimeout) {
3333
super(nettyResponseFuture, requestSender, timeoutsHolder);
3434
this.requestTimeout = requestTimeout;
3535
}

client/src/main/java/org/asynchttpclient/netty/timeout/TimeoutsHolder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,12 @@ public TimeoutsHolder(Timer nettyTimer, NettyResponseFuture<?> nettyResponseFutu
5353
final int readTimeoutInMs = targetRequest.getReadTimeout();
5454
readTimeoutValue = readTimeoutInMs == 0 ? config.getReadTimeout() : readTimeoutInMs;
5555

56-
int requestTimeoutInMs = targetRequest.getRequestTimeout();
56+
long requestTimeoutInMs = targetRequest.getRequestTimeout().toMillis();
5757
if (requestTimeoutInMs == 0) {
58-
requestTimeoutInMs = config.getRequestTimeout();
58+
requestTimeoutInMs = config.getRequestTimeout().toMillis();
5959
}
6060

61-
if (requestTimeoutInMs != -1) {
61+
if (requestTimeoutInMs > -1) {
6262
requestTimeoutMillisTime = unpreciseMillisTime() + requestTimeoutInMs;
6363
requestTimeout = newTimeout(new RequestTimeoutTimerTask(nettyResponseFuture, requestSender, this, requestTimeoutInMs), requestTimeoutInMs);
6464
} else {

client/src/main/resources/org/asynchttpclient/config/ahc-default.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ org.asynchttpclient.connectTimeout=PT5S
66
org.asynchttpclient.pooledConnectionIdleTimeout=60000
77
org.asynchttpclient.connectionPoolCleanerPeriod=100
88
org.asynchttpclient.readTimeout=60000
9-
org.asynchttpclient.requestTimeout=60000
9+
org.asynchttpclient.requestTimeout=PT1M
1010
org.asynchttpclient.connectionTtl=-1
1111
org.asynchttpclient.followRedirect=false
1212
org.asynchttpclient.maxRedirects=5

client/src/test/java/org/asynchttpclient/AsyncHttpClientDefaultsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ public void testDefaultReadTimeout() {
6868

6969
@RepeatedIfExceptionsTest(repeats = 5)
7070
public void testDefaultRequestTimeout() {
71-
assertEquals(AsyncHttpClientConfigDefaults.defaultRequestTimeout(), 60 * 1000);
72-
testIntegerSystemProperty("requestTimeout", "defaultRequestTimeout", "100");
71+
assertEquals(AsyncHttpClientConfigDefaults.defaultRequestTimeout(), Duration.ofSeconds(60));
72+
testDurationSystemProperty("requestTimeout", "defaultRequestTimeout", "PT0.1S");
7373
}
7474

7575
@RepeatedIfExceptionsTest(repeats = 5)

client/src/test/java/org/asynchttpclient/AuthTimeoutTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import java.io.IOException;
2828
import java.io.OutputStream;
29+
import java.time.Duration;
2930
import java.util.concurrent.Future;
3031
import java.util.concurrent.TimeUnit;
3132
import java.util.concurrent.TimeoutException;
@@ -45,7 +46,7 @@
4546

4647
public class AuthTimeoutTest extends AbstractBasicTest {
4748

48-
private static final int REQUEST_TIMEOUT = 1000;
49+
private static final Duration REQUEST_TIMEOUT = Duration.ofSeconds(1);
4950
private static final int SHORT_FUTURE_TIMEOUT = 500; // shorter than REQUEST_TIMEOUT
5051
private static final int LONG_FUTURE_TIMEOUT = 1500; // longer than REQUEST_TIMEOUT
5152

client/src/test/java/org/asynchttpclient/BasicHttpTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import java.net.URLDecoder;
4444
import java.net.UnknownHostException;
4545
import java.nio.charset.StandardCharsets;
46+
import java.time.Duration;
4647
import java.util.Arrays;
4748
import java.util.Collections;
4849
import java.util.HashMap;
@@ -679,7 +680,7 @@ public void onThrowable(Throwable t) {
679680
@RepeatedIfExceptionsTest(repeats = 5)
680681
public void configTimeoutNotifiesOnThrowableAndFuture() throws Throwable {
681682
assertThrows(TimeoutException.class, () -> {
682-
withClient(config().setRequestTimeout(1_000)).run(client ->
683+
withClient(config().setRequestTimeout(Duration.ofSeconds(1))).run(client ->
683684
withServer(server).run(server -> {
684685
HttpHeaders headers = new DefaultHttpHeaders();
685686
headers.add("X-Delay", 5_000); // delay greater than timeout
@@ -724,7 +725,7 @@ public void onThrowable(Throwable t) {
724725
@RepeatedIfExceptionsTest(repeats = 5)
725726
public void configRequestTimeoutHappensInDueTime() throws Throwable {
726727
assertThrows(TimeoutException.class, () -> {
727-
withClient(config().setRequestTimeout(1_000)).run(client ->
728+
withClient(config().setRequestTimeout(Duration.ofSeconds(1))).run(client ->
728729
withServer(server).run(server -> {
729730
HttpHeaders h = new DefaultHttpHeaders();
730731
h.add(CONTENT_TYPE, HttpHeaderValues.APPLICATION_X_WWW_FORM_URLENCODED);

client/src/test/java/org/asynchttpclient/BasicHttpsTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.junit.jupiter.api.Timeout;
2727

2828
import javax.net.ssl.SSLHandshakeException;
29+
import java.time.Duration;
2930
import java.util.Arrays;
3031
import java.util.concurrent.ExecutionException;
3132
import java.util.concurrent.TimeUnit;
@@ -172,7 +173,7 @@ public void failInstantlyIfNotAllowedSelfSignedCertificate() throws Throwable {
172173
logger.debug(">>> failInstantlyIfNotAllowedSelfSignedCertificate");
173174

174175
assertThrows(SSLHandshakeException.class, () -> {
175-
withClient(config().setMaxRequestRetry(0).setRequestTimeout(2000)).run(client ->
176+
withClient(config().setMaxRequestRetry(0).setRequestTimeout(Duration.ofSeconds(2))).run(client ->
176177
withServer(server).run(server -> {
177178
try {
178179
client.prepareGet(getTargetUrl()).execute().get(TIMEOUT, SECONDS);

client/src/test/java/org/asynchttpclient/NoNullResponseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void multipleSslRequestsWithDelayAndKeepAlive() throws Exception {
3434
.setKeepAlive(true)
3535
.setConnectTimeout(Duration.ofSeconds(10))
3636
.setPooledConnectionIdleTimeout(60000)
37-
.setRequestTimeout(10000)
37+
.setRequestTimeout(Duration.ofSeconds(10))
3838
.setMaxConnectionsPerHost(-1)
3939
.setMaxConnections(-1)
4040
.build();

client/src/test/java/org/asynchttpclient/PerRequestTimeoutTest.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.eclipse.jetty.server.handler.AbstractHandler;
2525

2626
import java.io.IOException;
27+
import java.time.Duration;
2728
import java.util.concurrent.ExecutionException;
2829
import java.util.concurrent.Future;
2930
import java.util.concurrent.TimeUnit;
@@ -64,7 +65,9 @@ public AbstractHandler configureHandler() throws Exception {
6465
@RepeatedIfExceptionsTest(repeats = 5)
6566
public void testRequestTimeout() throws IOException {
6667
try (AsyncHttpClient client = asyncHttpClient()) {
67-
Future<Response> responseFuture = client.prepareGet(getTargetUrl()).setRequestTimeout(100).execute();
68+
Future<Response> responseFuture = client.prepareGet(getTargetUrl())
69+
.setRequestTimeout(Duration.ofMillis(100))
70+
.execute();
6871
Response response = responseFuture.get(2000, TimeUnit.MILLISECONDS);
6972
assertNull(response);
7073
} catch (InterruptedException e) {
@@ -95,8 +98,10 @@ public void testReadTimeout() throws IOException {
9598

9699
@RepeatedIfExceptionsTest(repeats = 5)
97100
public void testGlobalDefaultPerRequestInfiniteTimeout() throws IOException {
98-
try (AsyncHttpClient client = asyncHttpClient(config().setRequestTimeout(100))) {
99-
Future<Response> responseFuture = client.prepareGet(getTargetUrl()).setRequestTimeout(-1).execute();
101+
try (AsyncHttpClient client = asyncHttpClient(config().setRequestTimeout(Duration.ofMillis(100)))) {
102+
Future<Response> responseFuture = client.prepareGet(getTargetUrl())
103+
.setRequestTimeout(Duration.ofMillis(-1))
104+
.execute();
100105
Response response = responseFuture.get();
101106
assertNotNull(response);
102107
} catch (InterruptedException e) {
@@ -109,7 +114,7 @@ public void testGlobalDefaultPerRequestInfiniteTimeout() throws IOException {
109114

110115
@RepeatedIfExceptionsTest(repeats = 5)
111116
public void testGlobalRequestTimeout() throws IOException {
112-
try (AsyncHttpClient client = asyncHttpClient(config().setRequestTimeout(100))) {
117+
try (AsyncHttpClient client = asyncHttpClient(config().setRequestTimeout(Duration.ofMillis(100)))) {
113118
Future<Response> responseFuture = client.prepareGet(getTargetUrl()).execute();
114119
Response response = responseFuture.get(2000, TimeUnit.MILLISECONDS);
115120
assertNull(response);

client/src/test/java/org/asynchttpclient/RedirectConnectionUsageTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public void testGetRedirectFinalUrl() throws Exception {
7676
.setMaxConnectionsPerHost(1)
7777
.setMaxConnections(1)
7878
.setConnectTimeout(Duration.ofSeconds(1))
79-
.setRequestTimeout(1000)
79+
.setRequestTimeout(Duration.ofSeconds(1))
8080
.setFollowRedirect(true)
8181
.build();
8282

client/src/test/java/org/asynchttpclient/channel/MaxConnectionsInThreadsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public void testMaxConnectionsWithinThreads() throws Exception {
6969

7070
AsyncHttpClientConfig config = config()
7171
.setConnectTimeout(Duration.ofSeconds(1))
72-
.setRequestTimeout(5000)
72+
.setRequestTimeout(Duration.ofSeconds(5))
7373
.setKeepAlive(true)
7474
.setMaxConnections(1)
7575
.setMaxConnectionsPerHost(1)

client/src/test/java/org/asynchttpclient/channel/MaxTotalConnectionTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void testMaxTotalConnectionsExceedingException() throws IOException {
4444

4545
AsyncHttpClientConfig config = config()
4646
.setConnectTimeout(Duration.ofSeconds(1))
47-
.setRequestTimeout(5000)
47+
.setRequestTimeout(Duration.ofSeconds(5))
4848
.setKeepAlive(false)
4949
.setMaxConnections(1)
5050
.setMaxConnectionsPerHost(1)
@@ -84,7 +84,7 @@ public void testMaxTotalConnections() throws Exception {
8484

8585
AsyncHttpClientConfig config = config()
8686
.setConnectTimeout(Duration.ofSeconds(1))
87-
.setRequestTimeout(5000)
87+
.setRequestTimeout(Duration.ofSeconds(5))
8888
.setKeepAlive(false)
8989
.setMaxConnections(2)
9090
.setMaxConnectionsPerHost(1)

client/src/test/java/org/asynchttpclient/handler/BodyDeferringAsyncHandlerTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.io.PipedInputStream;
3434
import java.io.PipedOutputStream;
3535
import java.nio.charset.StandardCharsets;
36+
import java.time.Duration;
3637
import java.util.concurrent.ExecutionException;
3738
import java.util.concurrent.Future;
3839

@@ -61,7 +62,7 @@ public AbstractHandler configureHandler() throws Exception {
6162

6263
private static AsyncHttpClientConfig getAsyncHttpClientConfig() {
6364
// for this test brevity's sake, we are limiting to 1 retries
64-
return config().setMaxRequestRetry(0).setRequestTimeout(10000).build();
65+
return config().setMaxRequestRetry(0).setRequestTimeout(Duration.ofSeconds(10)).build();
6566
}
6667

6768
@RepeatedIfExceptionsTest(repeats = 5)
@@ -179,7 +180,7 @@ public void deferredInputStreamTrickWithFailure() throws Throwable {
179180

180181
@RepeatedIfExceptionsTest(repeats = 5)
181182
public void deferredInputStreamTrickWithCloseConnectionAndRetry() throws Throwable {
182-
try (AsyncHttpClient client = asyncHttpClient(config().setMaxRequestRetry(1).setRequestTimeout(10000).build())) {
183+
try (AsyncHttpClient client = asyncHttpClient(config().setMaxRequestRetry(1).setRequestTimeout(Duration.ofSeconds(10)).build())) {
183184
BoundRequestBuilder r = client.prepareGet(getTargetUrl()).addHeader("X-CLOSE-CONNECTION", Boolean.TRUE.toString());
184185
PipedOutputStream pos = new PipedOutputStream();
185186
PipedInputStream pis = new PipedInputStream(pos);

0 commit comments

Comments
 (0)