Skip to content

Commit

Permalink
feat(generators): allow per-spec timeouts [skip-bc] (generated)
Browse files Browse the repository at this point in the history
algolia/api-clients-automation#4173

Co-authored-by: algolia-bot <accounts+algolia-api-client-bot@algolia.com>
Co-authored-by: Clément Vannicatte <vannicattec@gmail.com>
Co-authored-by: Pierre Millot <pierre.millot@algolia.com>
Co-authored-by: Thomas Raffray <Fluf22@users.noreply.github.com>
  • Loading branch information
4 people committed Dec 5, 2024
1 parent 68678f1 commit e4b5960
Show file tree
Hide file tree
Showing 12 changed files with 149 additions and 22 deletions.
30 changes: 26 additions & 4 deletions algoliasearch/src/main/java/com/algolia/ApiClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import java.io.Closeable;
import java.io.IOException;
import java.time.Duration;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
Expand All @@ -30,7 +31,16 @@ public abstract class ApiClient implements Closeable {
private AuthInterceptor authInterceptor;

/** Constructs a new instance of the {@link ApiClient}. */
protected ApiClient(String appId, String apiKey, String clientName, @Nullable ClientOptions options, List<Host> defaultHosts) {
protected ApiClient(
String appId,
String apiKey,
String clientName,
@Nullable ClientOptions options,
List<Host> defaultHosts,
Duration connectTimeout,
Duration readTimeout,
Duration writeTimeout
) {
if (appId == null || appId.isEmpty()) {
throw new AlgoliaRuntimeException("`appId` is missing.");
}
Expand All @@ -41,11 +51,20 @@ protected ApiClient(String appId, String apiKey, String clientName, @Nullable Cl
this.executor = clientOptions.getExecutor();
this.requester = clientOptions.getCustomRequester() != null
? clientOptions.getCustomRequester()
: defaultRequester(appId, apiKey, clientName, clientOptions, defaultHosts);
: defaultRequester(appId, apiKey, clientName, clientOptions, defaultHosts, connectTimeout, readTimeout, writeTimeout);
}

/** Creates a default {@link Requester} for executing API requests. */
private Requester defaultRequester(String appId, String apiKey, String clientName, ClientOptions options, List<Host> defaultHosts) {
private Requester defaultRequester(
String appId,
String apiKey,
String clientName,
ClientOptions options,
List<Host> defaultHosts,
Duration connectTimeout,
Duration readTimeout,
Duration writeTimeout
) {
AlgoliaAgent algoliaAgent = new AlgoliaAgent(BuildConfig.VERSION)
.addSegment(new AlgoliaAgent.Segment(clientName, BuildConfig.VERSION))
.addSegments(options.getAlgoliaAgentSegments());
Expand All @@ -58,7 +77,10 @@ private Requester defaultRequester(String appId, String apiKey, String clientNam
HttpRequester.Builder builder = new HttpRequester.Builder(serializer)
.addInterceptor(authInterceptor)
.addInterceptor(new UserAgentInterceptor(algoliaAgent))
.addInterceptor(new RetryStrategy(statefulHosts));
.addInterceptor(new RetryStrategy(statefulHosts))
.setConnectTimeout(connectTimeout)
.setReadTimeout(readTimeout)
.setWriteTimeout(writeTimeout);
if (options.getRequesterConfig() != null) {
options.getRequesterConfig().accept(builder);
}
Expand Down
12 changes: 11 additions & 1 deletion algoliasearch/src/main/java/com/algolia/api/AbtestingClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.algolia.model.abtesting.*;
import com.algolia.utils.*;
import com.fasterxml.jackson.core.type.TypeReference;
import java.time.Duration;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
Expand All @@ -34,7 +35,16 @@ public AbtestingClient(String appId, String apiKey, String region) {
}

public AbtestingClient(String appId, String apiKey, String region, ClientOptions options) {
super(appId, apiKey, "Abtesting", options, getDefaultHosts(region));
super(
appId,
apiKey,
"Abtesting",
options,
getDefaultHosts(region),
Duration.ofMillis(2000L),
Duration.ofMillis(5000L),
Duration.ofMillis(30000L)
);
}

private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {
Expand Down
12 changes: 11 additions & 1 deletion algoliasearch/src/main/java/com/algolia/api/AnalyticsClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.algolia.model.analytics.*;
import com.algolia.utils.*;
import com.fasterxml.jackson.core.type.TypeReference;
import java.time.Duration;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
Expand All @@ -34,7 +35,16 @@ public AnalyticsClient(String appId, String apiKey, String region) {
}

public AnalyticsClient(String appId, String apiKey, String region, ClientOptions options) {
super(appId, apiKey, "Analytics", options, getDefaultHosts(region));
super(
appId,
apiKey,
"Analytics",
options,
getDefaultHosts(region),
Duration.ofMillis(2000L),
Duration.ofMillis(5000L),
Duration.ofMillis(30000L)
);
}

private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {
Expand Down
12 changes: 11 additions & 1 deletion algoliasearch/src/main/java/com/algolia/api/IngestionClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.algolia.model.ingestion.*;
import com.algolia.utils.*;
import com.fasterxml.jackson.core.type.TypeReference;
import java.time.Duration;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
Expand All @@ -26,7 +27,16 @@ public IngestionClient(String appId, String apiKey, String region) {
}

public IngestionClient(String appId, String apiKey, String region, ClientOptions options) {
super(appId, apiKey, "Ingestion", options, getDefaultHosts(region));
super(
appId,
apiKey,
"Ingestion",
options,
getDefaultHosts(region),
Duration.ofMillis(25000L),
Duration.ofMillis(25000L),
Duration.ofMillis(25000L)
);
}

private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {
Expand Down
12 changes: 11 additions & 1 deletion algoliasearch/src/main/java/com/algolia/api/InsightsClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.algolia.model.insights.*;
import com.algolia.utils.*;
import com.fasterxml.jackson.core.type.TypeReference;
import java.time.Duration;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
Expand All @@ -34,7 +35,16 @@ public InsightsClient(String appId, String apiKey, String region) {
}

public InsightsClient(String appId, String apiKey, String region, ClientOptions options) {
super(appId, apiKey, "Insights", options, getDefaultHosts(region));
super(
appId,
apiKey,
"Insights",
options,
getDefaultHosts(region),
Duration.ofMillis(2000L),
Duration.ofMillis(5000L),
Duration.ofMillis(30000L)
);
}

private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.algolia.model.monitoring.*;
import com.algolia.utils.*;
import com.fasterxml.jackson.core.type.TypeReference;
import java.time.Duration;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
Expand All @@ -24,7 +25,16 @@ public MonitoringClient(String appId, String apiKey) {
}

public MonitoringClient(String appId, String apiKey, ClientOptions options) {
super(appId, apiKey, "Monitoring", options, getDefaultHosts());
super(
appId,
apiKey,
"Monitoring",
options,
getDefaultHosts(),
Duration.ofMillis(2000L),
Duration.ofMillis(5000L),
Duration.ofMillis(30000L)
);
}

private static List<Host> getDefaultHosts() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.algolia.model.personalization.*;
import com.algolia.utils.*;
import com.fasterxml.jackson.core.type.TypeReference;
import java.time.Duration;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
Expand All @@ -26,7 +27,16 @@ public PersonalizationClient(String appId, String apiKey, String region) {
}

public PersonalizationClient(String appId, String apiKey, String region, ClientOptions options) {
super(appId, apiKey, "Personalization", options, getDefaultHosts(region));
super(
appId,
apiKey,
"Personalization",
options,
getDefaultHosts(region),
Duration.ofMillis(2000L),
Duration.ofMillis(5000L),
Duration.ofMillis(30000L)
);
}

private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.algolia.model.querysuggestions.*;
import com.algolia.utils.*;
import com.fasterxml.jackson.core.type.TypeReference;
import java.time.Duration;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
Expand All @@ -26,7 +27,16 @@ public QuerySuggestionsClient(String appId, String apiKey, String region) {
}

public QuerySuggestionsClient(String appId, String apiKey, String region, ClientOptions options) {
super(appId, apiKey, "QuerySuggestions", options, getDefaultHosts(region));
super(
appId,
apiKey,
"QuerySuggestions",
options,
getDefaultHosts(region),
Duration.ofMillis(2000L),
Duration.ofMillis(5000L),
Duration.ofMillis(30000L)
);
}

private static List<Host> getDefaultHosts(String region) throws AlgoliaRuntimeException {
Expand Down
12 changes: 11 additions & 1 deletion algoliasearch/src/main/java/com/algolia/api/RecommendClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.algolia.model.recommend.*;
import com.algolia.utils.*;
import com.fasterxml.jackson.core.type.TypeReference;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
Expand All @@ -28,7 +29,16 @@ public RecommendClient(String appId, String apiKey) {
}

public RecommendClient(String appId, String apiKey, ClientOptions options) {
super(appId, apiKey, "Recommend", options, getDefaultHosts(appId));
super(
appId,
apiKey,
"Recommend",
options,
getDefaultHosts(appId),
Duration.ofMillis(2000L),
Duration.ofMillis(5000L),
Duration.ofMillis(30000L)
);
}

private static List<Host> getDefaultHosts(String appId) {
Expand Down
11 changes: 10 additions & 1 deletion algoliasearch/src/main/java/com/algolia/api/SearchClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,16 @@ public SearchClient(String appId, String apiKey) {
}

public SearchClient(String appId, String apiKey, ClientOptions options) {
super(appId, apiKey, "Search", options, getDefaultHosts(appId));
super(
appId,
apiKey,
"Search",
options,
getDefaultHosts(appId),
Duration.ofMillis(2000L),
Duration.ofMillis(5000L),
Duration.ofMillis(30000L)
);
}

private static List<Host> getDefaultHosts(String appId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,9 @@ public static class Builder {
private final List<AlgoliaAgent.Segment> algoliaAgentSegments = new ArrayList<>();
private final Map<String, String> defaultHeaders = new HashMap<>();
private LogLevel logLevel = LogLevel.NONE;
private Duration connectTimeout = Duration.ofSeconds(2);
private Duration writeTimeout = Duration.ofSeconds(30);
private Duration readTimeout = Duration.ofSeconds(5);
private Duration connectTimeout = Duration.ZERO;
private Duration writeTimeout = Duration.ZERO;
private Duration readTimeout = Duration.ZERO;
private CompressionType compressionType = CompressionType.NONE;

public Builder setRequester(Requester requester) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JavaType;
import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Expand All @@ -34,9 +35,9 @@ public final class HttpRequester implements Requester {
/** Private constructor initialized using the builder pattern. */
private HttpRequester(Builder builder, ClientConfig config) {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.connectTimeout(config.getConnectTimeout())
.readTimeout(config.getReadTimeout())
.writeTimeout(config.getWriteTimeout())
.connectTimeout(config.getConnectTimeout() == Duration.ZERO ? builder.connectTimeout : config.getConnectTimeout())
.readTimeout(config.getReadTimeout() == Duration.ZERO ? builder.readTimeout : config.getReadTimeout())
.writeTimeout(config.getWriteTimeout() == Duration.ZERO ? builder.writeTimeout : config.getWriteTimeout())
.addInterceptor(new HeaderInterceptor(config.getDefaultHeaders()))
.addNetworkInterceptor(new LogInterceptor(config.getLogger(), config.getLogLevel()));
builder.interceptors.forEach(clientBuilder::addInterceptor);
Expand Down Expand Up @@ -192,11 +193,11 @@ public void close() throws IOException {
public static class Builder {

private final List<Interceptor> interceptors = new ArrayList<>();

private final List<Interceptor> networkInterceptors = new ArrayList<>();

private Duration connectTimeout = Duration.ofSeconds(2);
private Duration writeTimeout = Duration.ofSeconds(30);
private Duration readTimeout = Duration.ofSeconds(5);
private Consumer<OkHttpClient.Builder> clientConfig;

private final JsonSerializer serializer;

public Builder(JsonSerializer serializer) {
Expand Down Expand Up @@ -229,6 +230,21 @@ public Builder setHttpClientConfig(Consumer<OkHttpClient.Builder> config) {
return this;
}

public Builder setConnectTimeout(Duration connectTimeout) {
this.connectTimeout = connectTimeout;
return this;
}

public Builder setWriteTimeout(Duration writeTimeout) {
this.writeTimeout = writeTimeout;
return this;
}

public Builder setReadTimeout(Duration readTimeout) {
this.readTimeout = readTimeout;
return this;
}

/**
* Builds and returns a HttpRequester instance.
*
Expand Down

0 comments on commit e4b5960

Please sign in to comment.