Skip to content

Commit e12e8d4

Browse files
authored
Changed connectTimeout's type to java.time.Duration (#1862)
* Changed connectTimeout's type to java.time.Duration
1 parent deb01a6 commit e12e8d4

16 files changed

+66
-28
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.asynchttpclient.proxy.ProxyServerSelector;
3737

3838
import java.io.IOException;
39+
import java.time.Duration;
3940
import java.util.List;
4041
import java.util.Map;
4142
import java.util.concurrent.ThreadFactory;
@@ -78,11 +79,11 @@ public interface AsyncHttpClientConfig {
7879

7980

8081
/**
81-
* Return the maximum time in millisecond an {@link AsyncHttpClient} can wait when connecting to a remote host
82+
* Return the maximum time an {@link AsyncHttpClient} can wait when connecting to a remote host
8283
*
83-
* @return the maximum time in millisecond an {@link AsyncHttpClient} can wait when connecting to a remote host
84+
* @return the maximum time an {@link AsyncHttpClient} can wait when connecting to a remote host
8485
*/
85-
int getConnectTimeout();
86+
Duration getConnectTimeout();
8687

8788
/**
8889
* Return the maximum time in millisecond an {@link AsyncHttpClient} can stay idle.

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.asynchttpclient.proxy.ProxyServerSelector;
3636
import org.asynchttpclient.util.ProxyUtils;
3737

38+
import java.time.Duration;
3839
import java.util.Collections;
3940
import java.util.HashMap;
4041
import java.util.LinkedList;
@@ -130,7 +131,7 @@ public class DefaultAsyncHttpClientConfig implements AsyncHttpClientConfig {
130131
private final int webSocketMaxFrameSize;
131132

132133
// timeouts
133-
private final int connectTimeout;
134+
private final Duration connectTimeout;
134135
private final int requestTimeout;
135136
private final int readTimeout;
136137
private final int shutdownQuietPeriod;
@@ -215,7 +216,7 @@ private DefaultAsyncHttpClientConfig(// http
215216
boolean enablewebSocketCompression,
216217

217218
// timeouts
218-
int connectTimeout,
219+
Duration connectTimeout,
219220
int requestTimeout,
220221
int readTimeout,
221222
int shutdownQuietPeriod,
@@ -472,7 +473,7 @@ public int getWebSocketMaxFrameSize() {
472473

473474
// timeouts
474475
@Override
475-
public int getConnectTimeout() {
476+
public Duration getConnectTimeout() {
476477
return connectTimeout;
477478
}
478479

@@ -795,7 +796,7 @@ public static class Builder {
795796
private int webSocketMaxFrameSize = defaultWebSocketMaxFrameSize();
796797

797798
// timeouts
798-
private int connectTimeout = defaultConnectTimeout();
799+
private Duration connectTimeout = defaultConnectTimeout();
799800
private int requestTimeout = defaultRequestTimeout();
800801
private int readTimeout = defaultReadTimeout();
801802
private int shutdownQuietPeriod = defaultShutdownQuietPeriod();
@@ -1058,7 +1059,7 @@ public Builder setWebSocketMaxFrameSize(int webSocketMaxFrameSize) {
10581059
}
10591060

10601061
// timeouts
1061-
public Builder setConnectTimeout(int connectTimeout) {
1062+
public Builder setConnectTimeout(Duration connectTimeout) {
10621063
this.connectTimeout = connectTimeout;
10631064
return this;
10641065
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.io.IOException;
1919
import java.io.InputStream;
20+
import java.time.Duration;
2021
import java.util.Properties;
2122

2223
public final class AsyncHttpClientConfigDefaults {
@@ -110,8 +111,8 @@ public static int defaultAcquireFreeChannelTimeout() {
110111
return AsyncHttpClientConfigHelper.getAsyncHttpClientConfig().getInt(ASYNC_CLIENT_CONFIG_ROOT + ACQUIRE_FREE_CHANNEL_TIMEOUT);
111112
}
112113

113-
public static int defaultConnectTimeout() {
114-
return AsyncHttpClientConfigHelper.getAsyncHttpClientConfig().getInt(ASYNC_CLIENT_CONFIG_ROOT + CONNECTION_TIMEOUT_CONFIG);
114+
public static Duration defaultConnectTimeout() {
115+
return AsyncHttpClientConfigHelper.getAsyncHttpClientConfig().getDuration(ASYNC_CLIENT_CONFIG_ROOT + CONNECTION_TIMEOUT_CONFIG);
115116
}
116117

117118
public static int defaultPooledConnectionIdleTimeout() {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.io.IOException;
1919
import java.io.InputStream;
20+
import java.time.Duration;
2021
import java.util.Properties;
2122
import java.util.concurrent.ConcurrentHashMap;
2223

@@ -110,5 +111,9 @@ public int getInt(String key) {
110111
public boolean getBoolean(String key) {
111112
return Boolean.parseBoolean(getString(key));
112113
}
114+
115+
public Duration getDuration(String key) {
116+
return Duration.parse(getString(key));
117+
}
113118
}
114119
}

client/src/main/java/org/asynchttpclient/netty/channel/ChannelManager.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,10 @@ private static Bootstrap newBootstrap(ChannelFactory<? extends Channel> channelF
211211
.option(ChannelOption.SO_KEEPALIVE, config.isSoKeepAlive())
212212
.option(ChannelOption.AUTO_CLOSE, false);
213213

214-
if (config.getConnectTimeout() > 0) {
215-
bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.getConnectTimeout());
214+
long connectTimeout = config.getConnectTimeout().toMillis();
215+
if (connectTimeout > 0) {
216+
connectTimeout = Math.min(connectTimeout, Integer.MAX_VALUE);
217+
bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, (int) connectTimeout);
216218
}
217219

218220
if (config.getSoLinger() >= 0) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ org.asynchttpclient.threadPoolName=AsyncHttpClient
22
org.asynchttpclient.maxConnections=-1
33
org.asynchttpclient.maxConnectionsPerHost=-1
44
org.asynchttpclient.acquireFreeChannelTimeout=0
5-
org.asynchttpclient.connectTimeout=5000
5+
org.asynchttpclient.connectTimeout=PT5S
66
org.asynchttpclient.pooledConnectionIdleTimeout=60000
77
org.asynchttpclient.connectionPoolCleanerPeriod=100
88
org.asynchttpclient.readTimeout=60000

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.asynchttpclient.config.AsyncHttpClientConfigHelper;
2121

2222
import java.lang.reflect.Method;
23+
import java.time.Duration;
2324

2425
import static org.asynchttpclient.config.AsyncHttpClientConfigDefaults.ASYNC_CLIENT_CONFIG_ROOT;
2526
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -49,8 +50,8 @@ public void testDefaultMaxConnectionPerHost() {
4950

5051
@RepeatedIfExceptionsTest(repeats = 5)
5152
public void testDefaultConnectTimeOut() {
52-
assertEquals(AsyncHttpClientConfigDefaults.defaultConnectTimeout(), 5 * 1000);
53-
testIntegerSystemProperty("connectTimeout", "defaultConnectTimeout", "100");
53+
assertEquals(AsyncHttpClientConfigDefaults.defaultConnectTimeout(), Duration.ofSeconds(5));
54+
testDurationSystemProperty("connectTimeout", "defaultConnectTimeout", "PT0.1S");
5455
}
5556

5657
@RepeatedIfExceptionsTest(repeats = 5)
@@ -205,4 +206,21 @@ private static void testStringSystemProperty(String propertyName, String methodN
205206
System.clearProperty(ASYNC_CLIENT_CONFIG_ROOT + propertyName);
206207
}
207208
}
209+
210+
private static void testDurationSystemProperty(String propertyName, String methodName, String value) {
211+
String previous = System.getProperty(ASYNC_CLIENT_CONFIG_ROOT + propertyName);
212+
System.setProperty(ASYNC_CLIENT_CONFIG_ROOT + propertyName, value);
213+
AsyncHttpClientConfigHelper.reloadProperties();
214+
try {
215+
Method method = AsyncHttpClientConfigDefaults.class.getMethod(methodName);
216+
assertEquals(method.invoke(null), Duration.parse(value));
217+
} catch (Exception e) {
218+
fail("Couldn't find or execute method : " + methodName, e);
219+
}
220+
if (previous != null) {
221+
System.setProperty(ASYNC_CLIENT_CONFIG_ROOT + propertyName, previous);
222+
} else {
223+
System.clearProperty(ASYNC_CLIENT_CONFIG_ROOT + propertyName);
224+
}
225+
}
208226
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import org.junit.jupiter.api.RepeatedTest;
2020

21+
import java.time.Duration;
22+
2123
import static org.asynchttpclient.Dsl.asyncHttpClient;
2224
import static org.asynchttpclient.Dsl.config;
2325
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -30,7 +32,7 @@ public void multipleSslRequestsWithDelayAndKeepAlive() throws Exception {
3032
AsyncHttpClientConfig config = config()
3133
.setFollowRedirect(true)
3234
.setKeepAlive(true)
33-
.setConnectTimeout(10000)
35+
.setConnectTimeout(Duration.ofSeconds(10))
3436
.setPooledConnectionIdleTimeout(60000)
3537
.setRequestTimeout(10000)
3638
.setMaxConnectionsPerHost(-1)

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

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

2828
import java.io.IOException;
2929
import java.io.OutputStream;
30+
import java.time.Duration;
3031
import java.util.Date;
3132

3233
import static org.asynchttpclient.Dsl.asyncHttpClient;
@@ -74,7 +75,7 @@ public void testGetRedirectFinalUrl() throws Exception {
7475
.setKeepAlive(true)
7576
.setMaxConnectionsPerHost(1)
7677
.setMaxConnections(1)
77-
.setConnectTimeout(1000)
78+
.setConnectTimeout(Duration.ofSeconds(1))
7879
.setRequestTimeout(1000)
7980
.setFollowRedirect(true)
8081
.build();

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.eclipse.jetty.server.ServerConnector;
2929
import org.junit.jupiter.api.function.ThrowingSupplier;
3030

31+
import java.time.Duration;
3132
import java.util.ArrayList;
3233
import java.util.Arrays;
3334
import java.util.List;
@@ -163,7 +164,7 @@ public void onThrowable(Throwable t) {
163164

164165
@RepeatedIfExceptionsTest(repeats = 5)
165166
public void multipleMaxConnectionOpenTest() throws Exception {
166-
try (AsyncHttpClient client = asyncHttpClient(config().setKeepAlive(true).setConnectTimeout(5000).setMaxConnections(1))) {
167+
try (AsyncHttpClient client = asyncHttpClient(config().setKeepAlive(true).setConnectTimeout(Duration.ofSeconds(5)).setMaxConnections(1))) {
167168
String body = "hello there";
168169

169170
// once
@@ -180,7 +181,7 @@ public void multipleMaxConnectionOpenTest() throws Exception {
180181

181182
@RepeatedIfExceptionsTest(repeats = 5)
182183
public void multipleMaxConnectionOpenTestWithQuery() throws Exception {
183-
try (AsyncHttpClient c = asyncHttpClient(config().setKeepAlive(true).setConnectTimeout(5000).setMaxConnections(1))) {
184+
try (AsyncHttpClient c = asyncHttpClient(config().setKeepAlive(true).setConnectTimeout(Duration.ofSeconds(5)).setMaxConnections(1))) {
184185
String body = "hello there";
185186

186187
// once

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

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

3737
import java.io.IOException;
3838
import java.io.OutputStream;
39+
import java.time.Duration;
3940
import java.util.concurrent.CountDownLatch;
4041
import java.util.concurrent.atomic.AtomicInteger;
4142

@@ -67,7 +68,7 @@ public void testMaxConnectionsWithinThreads() throws Exception {
6768
String[] urls = {getTargetUrl(), getTargetUrl()};
6869

6970
AsyncHttpClientConfig config = config()
70-
.setConnectTimeout(1000)
71+
.setConnectTimeout(Duration.ofSeconds(1))
7172
.setRequestTimeout(5000)
7273
.setKeepAlive(true)
7374
.setMaxConnections(1)

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.asynchttpclient.Response;
2525

2626
import java.io.IOException;
27+
import java.time.Duration;
2728
import java.util.ArrayList;
2829
import java.util.List;
2930
import java.util.concurrent.CountDownLatch;
@@ -42,7 +43,7 @@ public void testMaxTotalConnectionsExceedingException() throws IOException {
4243
String[] urls = {"https://google.com", "https://github.com"};
4344

4445
AsyncHttpClientConfig config = config()
45-
.setConnectTimeout(1000)
46+
.setConnectTimeout(Duration.ofSeconds(1))
4647
.setRequestTimeout(5000)
4748
.setKeepAlive(false)
4849
.setMaxConnections(1)
@@ -82,7 +83,7 @@ public void testMaxTotalConnections() throws Exception {
8283
final AtomicReference<String> failedUrl = new AtomicReference<>();
8384

8485
AsyncHttpClientConfig config = config()
85-
.setConnectTimeout(1000)
86+
.setConnectTimeout(Duration.ofSeconds(1))
8687
.setRequestTimeout(5000)
8788
.setKeepAlive(false)
8889
.setMaxConnections(2)

client/src/test/java/org/asynchttpclient/netty/RetryNonBlockingIssueTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.junit.jupiter.api.BeforeEach;
3232

3333
import java.io.IOException;
34+
import java.time.Duration;
3435
import java.util.ArrayList;
3536
import java.util.List;
3637
import java.util.Map;
@@ -79,7 +80,7 @@ public void testRetryNonBlocking() throws Exception {
7980
AsyncHttpClientConfig config = config()
8081
.setKeepAlive(true)
8182
.setMaxConnections(100)
82-
.setConnectTimeout(60000)
83+
.setConnectTimeout(Duration.ofMinutes(1))
8384
.setRequestTimeout(30000)
8485
.build();
8586

@@ -107,7 +108,7 @@ public void testRetryNonBlockingAsyncConnect() throws Exception {
107108
AsyncHttpClientConfig config = config()
108109
.setKeepAlive(true)
109110
.setMaxConnections(100)
110-
.setConnectTimeout(60000)
111+
.setConnectTimeout(Duration.ofMinutes(1))
111112
.setRequestTimeout(30000)
112113
.build();
113114

client/src/test/java/org/asynchttpclient/request/body/BodyChunkTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.asynchttpclient.request.body.generator.InputStreamBodyGenerator;
2525

2626
import java.io.ByteArrayInputStream;
27+
import java.time.Duration;
2728
import java.util.concurrent.Future;
2829

2930
import static org.asynchttpclient.Dsl.asyncHttpClient;
@@ -39,7 +40,7 @@ public class BodyChunkTest extends AbstractBasicTest {
3940
public void negativeContentTypeTest() throws Exception {
4041

4142
AsyncHttpClientConfig config = config()
42-
.setConnectTimeout(100)
43+
.setConnectTimeout(Duration.ofMillis(100))
4344
.setMaxConnections(50)
4445
.setRequestTimeout(5 * 60 * 1000) // 5 minutes
4546
.build();

client/src/test/java/org/asynchttpclient/request/body/ChunkingTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.io.BufferedInputStream;
2828
import java.io.InputStream;
2929
import java.nio.file.Files;
30+
import java.time.Duration;
3031
import java.util.concurrent.ExecutionException;
3132

3233
import static org.asynchttpclient.Dsl.asyncHttpClient;
@@ -105,7 +106,7 @@ private static DefaultAsyncHttpClientConfig.Builder httpClientBuilder() {
105106
.setKeepAlive(true)
106107
.setMaxConnectionsPerHost(1)
107108
.setMaxConnections(1)
108-
.setConnectTimeout(1000)
109+
.setConnectTimeout(Duration.ofSeconds(1))
109110
.setRequestTimeout(1000)
110111
.setFollowRedirect(true);
111112
}

client/src/test/java/org/asynchttpclient/request/body/TransferListenerTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import java.io.File;
3030
import java.io.IOException;
31+
import java.time.Duration;
3132
import java.util.Enumeration;
3233
import java.util.concurrent.atomic.AtomicBoolean;
3334
import java.util.concurrent.atomic.AtomicInteger;
@@ -115,9 +116,9 @@ public void basicPutFileTest() throws Exception {
115116

116117
File file = createTempFile(1024 * 100 * 10);
117118

118-
int timeout = (int) (file.length() / 1000);
119+
long timeout = file.length() / 1000;
119120

120-
try (AsyncHttpClient client = asyncHttpClient(config().setConnectTimeout(timeout))) {
121+
try (AsyncHttpClient client = asyncHttpClient(config().setConnectTimeout(Duration.ofMillis(timeout)))) {
121122
TransferCompletionHandler tl = new TransferCompletionHandler();
122123
tl.addTransferListener(new TransferListener() {
123124

0 commit comments

Comments
 (0)