Skip to content

Commit e4b5960

Browse files
algolia-botshortcutsmillotpFluf22
committed
feat(generators): allow per-spec timeouts [skip-bc] (generated)
algolia/api-clients-automation#4173 Co-authored-by: algolia-bot <[email protected]> Co-authored-by: Clément Vannicatte <[email protected]> Co-authored-by: Pierre Millot <[email protected]> Co-authored-by: Thomas Raffray <[email protected]>
1 parent 68678f1 commit e4b5960

12 files changed

+149
-22
lines changed

algoliasearch/src/main/java/com/algolia/ApiClient.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.fasterxml.jackson.core.type.TypeReference;
1212
import java.io.Closeable;
1313
import java.io.IOException;
14+
import java.time.Duration;
1415
import java.util.List;
1516
import java.util.concurrent.CompletableFuture;
1617
import java.util.concurrent.ExecutorService;
@@ -30,7 +31,16 @@ public abstract class ApiClient implements Closeable {
3031
private AuthInterceptor authInterceptor;
3132

3233
/** Constructs a new instance of the {@link ApiClient}. */
33-
protected ApiClient(String appId, String apiKey, String clientName, @Nullable ClientOptions options, List<Host> defaultHosts) {
34+
protected ApiClient(
35+
String appId,
36+
String apiKey,
37+
String clientName,
38+
@Nullable ClientOptions options,
39+
List<Host> defaultHosts,
40+
Duration connectTimeout,
41+
Duration readTimeout,
42+
Duration writeTimeout
43+
) {
3444
if (appId == null || appId.isEmpty()) {
3545
throw new AlgoliaRuntimeException("`appId` is missing.");
3646
}
@@ -41,11 +51,20 @@ protected ApiClient(String appId, String apiKey, String clientName, @Nullable Cl
4151
this.executor = clientOptions.getExecutor();
4252
this.requester = clientOptions.getCustomRequester() != null
4353
? clientOptions.getCustomRequester()
44-
: defaultRequester(appId, apiKey, clientName, clientOptions, defaultHosts);
54+
: defaultRequester(appId, apiKey, clientName, clientOptions, defaultHosts, connectTimeout, readTimeout, writeTimeout);
4555
}
4656

4757
/** Creates a default {@link Requester} for executing API requests. */
48-
private Requester defaultRequester(String appId, String apiKey, String clientName, ClientOptions options, List<Host> defaultHosts) {
58+
private Requester defaultRequester(
59+
String appId,
60+
String apiKey,
61+
String clientName,
62+
ClientOptions options,
63+
List<Host> defaultHosts,
64+
Duration connectTimeout,
65+
Duration readTimeout,
66+
Duration writeTimeout
67+
) {
4968
AlgoliaAgent algoliaAgent = new AlgoliaAgent(BuildConfig.VERSION)
5069
.addSegment(new AlgoliaAgent.Segment(clientName, BuildConfig.VERSION))
5170
.addSegments(options.getAlgoliaAgentSegments());
@@ -58,7 +77,10 @@ private Requester defaultRequester(String appId, String apiKey, String clientNam
5877
HttpRequester.Builder builder = new HttpRequester.Builder(serializer)
5978
.addInterceptor(authInterceptor)
6079
.addInterceptor(new UserAgentInterceptor(algoliaAgent))
61-
.addInterceptor(new RetryStrategy(statefulHosts));
80+
.addInterceptor(new RetryStrategy(statefulHosts))
81+
.setConnectTimeout(connectTimeout)
82+
.setReadTimeout(readTimeout)
83+
.setWriteTimeout(writeTimeout);
6284
if (options.getRequesterConfig() != null) {
6385
options.getRequesterConfig().accept(builder);
6486
}

algoliasearch/src/main/java/com/algolia/api/AbtestingClient.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.algolia.model.abtesting.*;
1111
import com.algolia.utils.*;
1212
import com.fasterxml.jackson.core.type.TypeReference;
13+
import java.time.Duration;
1314
import java.util.ArrayList;
1415
import java.util.EnumSet;
1516
import java.util.List;
@@ -34,7 +35,16 @@ public AbtestingClient(String appId, String apiKey, String region) {
3435
}
3536

3637
public AbtestingClient(String appId, String apiKey, String region, ClientOptions options) {
37-
super(appId, apiKey, "Abtesting", options, getDefaultHosts(region));
38+
super(
39+
appId,
40+
apiKey,
41+
"Abtesting",
42+
options,
43+
getDefaultHosts(region),
44+
Duration.ofMillis(2000L),
45+
Duration.ofMillis(5000L),
46+
Duration.ofMillis(30000L)
47+
);
3848
}
3949

4050
private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {

algoliasearch/src/main/java/com/algolia/api/AnalyticsClient.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.algolia.model.analytics.*;
1111
import com.algolia.utils.*;
1212
import com.fasterxml.jackson.core.type.TypeReference;
13+
import java.time.Duration;
1314
import java.util.ArrayList;
1415
import java.util.EnumSet;
1516
import java.util.List;
@@ -34,7 +35,16 @@ public AnalyticsClient(String appId, String apiKey, String region) {
3435
}
3536

3637
public AnalyticsClient(String appId, String apiKey, String region, ClientOptions options) {
37-
super(appId, apiKey, "Analytics", options, getDefaultHosts(region));
38+
super(
39+
appId,
40+
apiKey,
41+
"Analytics",
42+
options,
43+
getDefaultHosts(region),
44+
Duration.ofMillis(2000L),
45+
Duration.ofMillis(5000L),
46+
Duration.ofMillis(30000L)
47+
);
3848
}
3949

4050
private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {

algoliasearch/src/main/java/com/algolia/api/IngestionClient.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.algolia.model.ingestion.*;
1111
import com.algolia.utils.*;
1212
import com.fasterxml.jackson.core.type.TypeReference;
13+
import java.time.Duration;
1314
import java.util.ArrayList;
1415
import java.util.EnumSet;
1516
import java.util.List;
@@ -26,7 +27,16 @@ public IngestionClient(String appId, String apiKey, String region) {
2627
}
2728

2829
public IngestionClient(String appId, String apiKey, String region, ClientOptions options) {
29-
super(appId, apiKey, "Ingestion", options, getDefaultHosts(region));
30+
super(
31+
appId,
32+
apiKey,
33+
"Ingestion",
34+
options,
35+
getDefaultHosts(region),
36+
Duration.ofMillis(25000L),
37+
Duration.ofMillis(25000L),
38+
Duration.ofMillis(25000L)
39+
);
3040
}
3141

3242
private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {

algoliasearch/src/main/java/com/algolia/api/InsightsClient.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.algolia.model.insights.*;
1111
import com.algolia.utils.*;
1212
import com.fasterxml.jackson.core.type.TypeReference;
13+
import java.time.Duration;
1314
import java.util.ArrayList;
1415
import java.util.EnumSet;
1516
import java.util.List;
@@ -34,7 +35,16 @@ public InsightsClient(String appId, String apiKey, String region) {
3435
}
3536

3637
public InsightsClient(String appId, String apiKey, String region, ClientOptions options) {
37-
super(appId, apiKey, "Insights", options, getDefaultHosts(region));
38+
super(
39+
appId,
40+
apiKey,
41+
"Insights",
42+
options,
43+
getDefaultHosts(region),
44+
Duration.ofMillis(2000L),
45+
Duration.ofMillis(5000L),
46+
Duration.ofMillis(30000L)
47+
);
3848
}
3949

4050
private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {

algoliasearch/src/main/java/com/algolia/api/MonitoringClient.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.algolia.model.monitoring.*;
1111
import com.algolia.utils.*;
1212
import com.fasterxml.jackson.core.type.TypeReference;
13+
import java.time.Duration;
1314
import java.util.ArrayList;
1415
import java.util.EnumSet;
1516
import java.util.List;
@@ -24,7 +25,16 @@ public MonitoringClient(String appId, String apiKey) {
2425
}
2526

2627
public MonitoringClient(String appId, String apiKey, ClientOptions options) {
27-
super(appId, apiKey, "Monitoring", options, getDefaultHosts());
28+
super(
29+
appId,
30+
apiKey,
31+
"Monitoring",
32+
options,
33+
getDefaultHosts(),
34+
Duration.ofMillis(2000L),
35+
Duration.ofMillis(5000L),
36+
Duration.ofMillis(30000L)
37+
);
2838
}
2939

3040
private static List<Host> getDefaultHosts() {

algoliasearch/src/main/java/com/algolia/api/PersonalizationClient.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.algolia.model.personalization.*;
1111
import com.algolia.utils.*;
1212
import com.fasterxml.jackson.core.type.TypeReference;
13+
import java.time.Duration;
1314
import java.util.ArrayList;
1415
import java.util.EnumSet;
1516
import java.util.List;
@@ -26,7 +27,16 @@ public PersonalizationClient(String appId, String apiKey, String region) {
2627
}
2728

2829
public PersonalizationClient(String appId, String apiKey, String region, ClientOptions options) {
29-
super(appId, apiKey, "Personalization", options, getDefaultHosts(region));
30+
super(
31+
appId,
32+
apiKey,
33+
"Personalization",
34+
options,
35+
getDefaultHosts(region),
36+
Duration.ofMillis(2000L),
37+
Duration.ofMillis(5000L),
38+
Duration.ofMillis(30000L)
39+
);
3040
}
3141

3242
private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {

algoliasearch/src/main/java/com/algolia/api/QuerySuggestionsClient.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.algolia.model.querysuggestions.*;
1111
import com.algolia.utils.*;
1212
import com.fasterxml.jackson.core.type.TypeReference;
13+
import java.time.Duration;
1314
import java.util.ArrayList;
1415
import java.util.EnumSet;
1516
import java.util.List;
@@ -26,7 +27,16 @@ public QuerySuggestionsClient(String appId, String apiKey, String region) {
2627
}
2728

2829
public QuerySuggestionsClient(String appId, String apiKey, String region, ClientOptions options) {
29-
super(appId, apiKey, "QuerySuggestions", options, getDefaultHosts(region));
30+
super(
31+
appId,
32+
apiKey,
33+
"QuerySuggestions",
34+
options,
35+
getDefaultHosts(region),
36+
Duration.ofMillis(2000L),
37+
Duration.ofMillis(5000L),
38+
Duration.ofMillis(30000L)
39+
);
3040
}
3141

3242
private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {

algoliasearch/src/main/java/com/algolia/api/RecommendClient.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.algolia.model.recommend.*;
1111
import com.algolia.utils.*;
1212
import com.fasterxml.jackson.core.type.TypeReference;
13+
import java.time.Duration;
1314
import java.util.ArrayList;
1415
import java.util.Collections;
1516
import java.util.EnumSet;
@@ -28,7 +29,16 @@ public RecommendClient(String appId, String apiKey) {
2829
}
2930

3031
public RecommendClient(String appId, String apiKey, ClientOptions options) {
31-
super(appId, apiKey, "Recommend", options, getDefaultHosts(appId));
32+
super(
33+
appId,
34+
apiKey,
35+
"Recommend",
36+
options,
37+
getDefaultHosts(appId),
38+
Duration.ofMillis(2000L),
39+
Duration.ofMillis(5000L),
40+
Duration.ofMillis(30000L)
41+
);
3242
}
3343

3444
private static List<Host> getDefaultHosts(String appId) {

algoliasearch/src/main/java/com/algolia/api/SearchClient.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,16 @@ public SearchClient(String appId, String apiKey) {
4040
}
4141

4242
public SearchClient(String appId, String apiKey, ClientOptions options) {
43-
super(appId, apiKey, "Search", options, getDefaultHosts(appId));
43+
super(
44+
appId,
45+
apiKey,
46+
"Search",
47+
options,
48+
getDefaultHosts(appId),
49+
Duration.ofMillis(2000L),
50+
Duration.ofMillis(5000L),
51+
Duration.ofMillis(30000L)
52+
);
4453
}
4554

4655
private static List<Host> getDefaultHosts(String appId) {

algoliasearch/src/main/java/com/algolia/config/ClientOptions.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,9 @@ public static class Builder {
124124
private final List<AlgoliaAgent.Segment> algoliaAgentSegments = new ArrayList<>();
125125
private final Map<String, String> defaultHeaders = new HashMap<>();
126126
private LogLevel logLevel = LogLevel.NONE;
127-
private Duration connectTimeout = Duration.ofSeconds(2);
128-
private Duration writeTimeout = Duration.ofSeconds(30);
129-
private Duration readTimeout = Duration.ofSeconds(5);
127+
private Duration connectTimeout = Duration.ZERO;
128+
private Duration writeTimeout = Duration.ZERO;
129+
private Duration readTimeout = Duration.ZERO;
130130
private CompressionType compressionType = CompressionType.NONE;
131131

132132
public Builder setRequester(Requester requester) {

algoliasearch/src/main/java/com/algolia/internal/HttpRequester.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.fasterxml.jackson.core.type.TypeReference;
1111
import com.fasterxml.jackson.databind.JavaType;
1212
import java.io.IOException;
13+
import java.time.Duration;
1314
import java.util.ArrayList;
1415
import java.util.Collections;
1516
import java.util.List;
@@ -34,9 +35,9 @@ public final class HttpRequester implements Requester {
3435
/** Private constructor initialized using the builder pattern. */
3536
private HttpRequester(Builder builder, ClientConfig config) {
3637
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
37-
.connectTimeout(config.getConnectTimeout())
38-
.readTimeout(config.getReadTimeout())
39-
.writeTimeout(config.getWriteTimeout())
38+
.connectTimeout(config.getConnectTimeout() == Duration.ZERO ? builder.connectTimeout : config.getConnectTimeout())
39+
.readTimeout(config.getReadTimeout() == Duration.ZERO ? builder.readTimeout : config.getReadTimeout())
40+
.writeTimeout(config.getWriteTimeout() == Duration.ZERO ? builder.writeTimeout : config.getWriteTimeout())
4041
.addInterceptor(new HeaderInterceptor(config.getDefaultHeaders()))
4142
.addNetworkInterceptor(new LogInterceptor(config.getLogger(), config.getLogLevel()));
4243
builder.interceptors.forEach(clientBuilder::addInterceptor);
@@ -192,11 +193,11 @@ public void close() throws IOException {
192193
public static class Builder {
193194

194195
private final List<Interceptor> interceptors = new ArrayList<>();
195-
196196
private final List<Interceptor> networkInterceptors = new ArrayList<>();
197-
197+
private Duration connectTimeout = Duration.ofSeconds(2);
198+
private Duration writeTimeout = Duration.ofSeconds(30);
199+
private Duration readTimeout = Duration.ofSeconds(5);
198200
private Consumer<OkHttpClient.Builder> clientConfig;
199-
200201
private final JsonSerializer serializer;
201202

202203
public Builder(JsonSerializer serializer) {
@@ -229,6 +230,21 @@ public Builder setHttpClientConfig(Consumer<OkHttpClient.Builder> config) {
229230
return this;
230231
}
231232

233+
public Builder setConnectTimeout(Duration connectTimeout) {
234+
this.connectTimeout = connectTimeout;
235+
return this;
236+
}
237+
238+
public Builder setWriteTimeout(Duration writeTimeout) {
239+
this.writeTimeout = writeTimeout;
240+
return this;
241+
}
242+
243+
public Builder setReadTimeout(Duration readTimeout) {
244+
this.readTimeout = readTimeout;
245+
return this;
246+
}
247+
232248
/**
233249
* Builds and returns a HttpRequester instance.
234250
*

0 commit comments

Comments
 (0)