aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-01-26 22:38:25 +0100
committerGitHub <noreply@github.com>2023-01-26 22:38:25 +0100
commitd4b26ebeaece0b61c1fcf726104485950f1efc98 (patch)
tree05286450277d9310b7ead906c54c0bc87a0af1de
parent2cd8172ae72a600f95d6488beb56a12e3ed3ce72 (diff)
parente6c1238c7c5ba306faca4e7335f6c2782416768a (diff)
Merge pull request #25757 from vespa-engine/balder/avoid-deprecated-apache-http-methods
Avoid deprecated apache http 5.2 methods, by adding it to the builder.
-rw-r--r--config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigVerification.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/application/ConfigConvergenceChecker.java9
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/application/HttpProxy.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/LogRetriever.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/SecretStoreValidator.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/SimpleHttpFetcher.java20
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/TesterClient.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetriever.java11
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterProtonMetricsRetriever.java14
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/metrics/MetricsV2Handler.java4
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/metrics/PrometheusV1Handler.java4
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java2
-rw-r--r--http-utils/src/main/java/ai/vespa/util/http/hc5/VespaHttpClientBuilder.java76
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java15
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/controller/RetryingClusterControllerClientFactory.java14
-rw-r--r--vespaclient-java/src/main/java/com/yahoo/vespa/filedistribution/status/FileDistributionStatusClient.java2
17 files changed, 109 insertions, 80 deletions
diff --git a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigVerification.java b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigVerification.java
index 45a12223b44..bb864fa1708 100644
--- a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigVerification.java
+++ b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ConfigVerification.java
@@ -8,7 +8,6 @@ import com.yahoo.slime.SlimeUtils;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.classic.BasicHttpClientResponseHandler;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
-import org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager;
import java.io.IOException;
import java.util.ArrayDeque;
@@ -39,7 +38,7 @@ public class ConfigVerification {
for (String arg : args) {
configservers.add(prefix + arg + ":" + port + "/config/v2/tenant/" + tenant + "/application/" + appName + "/environment/" + environment + "/region/" + region + "/instance/" + instance + "/?recursive=true");
}
- try (CloseableHttpClient httpClient = VespaHttpClientBuilder.create(BasicHttpClientConnectionManager::new).build()) {
+ try (CloseableHttpClient httpClient = VespaHttpClientBuilder.custom().buildClient()) {
System.exit(compareConfigs(listConfigs(configservers, httpClient), httpClient));
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
index b11355df689..ca06fe202d9 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
@@ -214,7 +214,7 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
public static class Builder {
private TenantRepository tenantRepository;
private Optional<Provisioner> hostProvisioner;
- private HttpProxy httpProxy = new HttpProxy(new SimpleHttpFetcher());
+ private HttpProxy httpProxy = new HttpProxy(new SimpleHttpFetcher(Duration.ofSeconds(30)));
private Clock clock = Clock.systemUTC();
private ConfigserverConfig configserverConfig = new ConfigserverConfig.Builder().build();
private Orchestrator orchestrator;
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/ConfigConvergenceChecker.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/ConfigConvergenceChecker.java
index 4e02964fa58..132d3d913e7 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/ConfigConvergenceChecker.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/ConfigConvergenceChecker.java
@@ -14,6 +14,7 @@ import com.yahoo.config.model.api.ServiceInfo;
import org.apache.hc.client5.http.async.methods.SimpleHttpRequest;
import org.apache.hc.client5.http.async.methods.SimpleHttpResponse;
import org.apache.hc.client5.http.async.methods.SimpleRequestBuilder;
+import org.apache.hc.client5.http.config.ConnectionConfig;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder;
@@ -280,23 +281,23 @@ public class ConfigConvergenceChecker extends AbstractComponent {
}
}
- @SuppressWarnings("deprecation")
private static RequestConfig createRequestConfig(Duration timeout) {
return RequestConfig.custom()
.setConnectionRequestTimeout(Timeout.ofSeconds(1))
.setResponseTimeout(Timeout.ofMilliseconds(timeout.toMillis()))
- .setConnectTimeout(Timeout.ofSeconds(1))
.build();
}
- @SuppressWarnings("deprecation")
private static CloseableHttpAsyncClient createHttpClient() {
return VespaAsyncHttpClientBuilder
.create(tlsStrategy ->
PoolingAsyncClientConnectionManagerBuilder.create()
.setMaxConnTotal(100)
.setMaxConnPerRoute(10)
- .setConnectionTimeToLive(TimeValue.ofMilliseconds(1))
+ .setDefaultConnectionConfig(ConnectionConfig.custom()
+ .setTimeToLive(TimeValue.ofMilliseconds(1))
+ .setConnectTimeout(Timeout.ofSeconds(1))
+ .build())
.setTlsStrategy(tlsStrategy)
.build())
.setIOReactorConfig(IOReactorConfig.custom()
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/HttpProxy.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/HttpProxy.java
index 1168898d126..0aa86ab211a 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/HttpProxy.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/HttpProxy.java
@@ -21,18 +21,15 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
+import java.time.Duration;
import java.util.List;
-import java.util.logging.Logger;
import static java.nio.charset.StandardCharsets.UTF_8;
public class HttpProxy {
-
- private static final Logger logger = Logger.getLogger(HttpProxy.class.getName());
-
private final HttpFetcher fetcher;
- @Inject public HttpProxy(NodeHostnameVerifier verifier) { this(new SimpleHttpFetcher(verifier)); }
+ @Inject public HttpProxy(NodeHostnameVerifier verifier) { this(new SimpleHttpFetcher(Duration.ofSeconds(30), verifier)); }
public HttpProxy(HttpFetcher fetcher) { this.fetcher = fetcher; }
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/LogRetriever.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/LogRetriever.java
index 17a3b186beb..5d1d8da3648 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/LogRetriever.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/LogRetriever.java
@@ -18,7 +18,7 @@ import java.util.Optional;
*/
public class LogRetriever {
- private final CloseableHttpClient httpClient = VespaHttpClientBuilder.create().build();
+ private final CloseableHttpClient httpClient = VespaHttpClientBuilder.custom().buildClient();
@SuppressWarnings("deprecation")
public HttpResponse getLogs(String logServerUri, Optional<Instant> deployTime) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SecretStoreValidator.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SecretStoreValidator.java
index 78fdf0a4a02..47bfc3662b5 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SecretStoreValidator.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SecretStoreValidator.java
@@ -33,7 +33,7 @@ public class SecretStoreValidator {
private static final String PROTOCOL = "http://";
private static final String AWS_PARAMETER_VALIDATION_HANDLER_POSTFIX = ":4080/validate-secret-store";
private final SecretStore secretStore;
- private final CloseableHttpClient httpClient = VespaHttpClientBuilder.create().build();
+ private final CloseableHttpClient httpClient = VespaHttpClientBuilder.custom().buildClient();;
public SecretStoreValidator(SecretStore secretStore) {
this.secretStore = secretStore;
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SimpleHttpFetcher.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SimpleHttpFetcher.java
index da4e5d24c48..5b332d3f434 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SimpleHttpFetcher.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SimpleHttpFetcher.java
@@ -8,14 +8,13 @@ import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
-import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
-import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.util.Timeout;
import java.io.IOException;
import java.net.SocketTimeoutException;
import java.net.URI;
+import java.time.Duration;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -24,13 +23,15 @@ public class SimpleHttpFetcher implements HttpFetcher {
private final CloseableHttpClient client;
- public SimpleHttpFetcher() { this(null); }
-
- public SimpleHttpFetcher(NodeHostnameVerifier verifier) {
- HttpClientBuilder b = verifier != null
- ? VespaHttpClientBuilder.create(PoolingHttpClientConnectionManager::new, verifier::verify)
- : VespaHttpClientBuilder.create();
- this.client = b.build();
+ public SimpleHttpFetcher(Duration connectTimeout) {
+ this(connectTimeout, null);
+ }
+ public SimpleHttpFetcher(Duration connectTimeout, NodeHostnameVerifier verifier) {
+ VespaHttpClientBuilder builder = VespaHttpClientBuilder.custom().connectTimeout(Timeout.of(connectTimeout));
+ if (verifier != null) {
+ builder.hostnameVerifier(verifier::verify);
+ }
+ this.client = builder.buildClient();
}
@Override
@@ -41,7 +42,6 @@ public class SimpleHttpFetcher implements HttpFetcher {
request.addHeader("Connection", "Close");
request.setConfig(
RequestConfig.custom()
- .setConnectTimeout(Timeout.ofMilliseconds(params.readTimeoutMs))
.setResponseTimeout(Timeout.ofMilliseconds(params.readTimeoutMs))
.build());
try (CloseableHttpResponse response = client.execute(request)) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/TesterClient.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/TesterClient.java
index 4b339f72fa6..6393243a92f 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/TesterClient.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/TesterClient.java
@@ -23,7 +23,7 @@ import java.util.logging.Logger;
*/
public class TesterClient {
- private final CloseableHttpClient httpClient = VespaHttpClientBuilder.create().build();
+ private final CloseableHttpClient httpClient = VespaHttpClientBuilder.custom().buildClient();
private static final Logger logger = Logger.getLogger(TesterClient.class.getName());
public HttpResponse getStatus(String testerHostname, int port) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetriever.java b/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetriever.java
index 1577e807036..61c0c17264c 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetriever.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetriever.java
@@ -55,17 +55,14 @@ public class ClusterDeploymentMetricsRetriever {
private static final ExecutorService executor = Executors.newFixedThreadPool(10, new DaemonThreadFactory("cluster-deployment-metrics-retriever-"));
- @SuppressWarnings("deprecation")
private static final CloseableHttpClient httpClient =
- VespaHttpClientBuilder
- .create(registry -> new PoolingHttpClientConnectionManager(registry,
- null,
- null,
- TimeValue.ofMinutes(1)))
+ VespaHttpClientBuilder.custom()
+ .connectTimeout(Timeout.ofSeconds(10))
+ .connectionManagerFactory(registry -> new PoolingHttpClientConnectionManager(registry, null, null, TimeValue.ofMinutes(1)))
+ .apacheBuilder()
.setDefaultRequestConfig(
RequestConfig.custom()
.setConnectionRequestTimeout(Timeout.ofSeconds(60))
- .setConnectTimeout(Timeout.ofSeconds(10))
.setResponseTimeout(Timeout.ofSeconds(10))
.build())
.build();
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterProtonMetricsRetriever.java b/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterProtonMetricsRetriever.java
index 0dbe0131e9b..c137b80e951 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterProtonMetricsRetriever.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterProtonMetricsRetriever.java
@@ -12,7 +12,6 @@ import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
-import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.util.Timeout;
@@ -27,15 +26,12 @@ public class ClusterProtonMetricsRetriever {
private static final Logger log = Logger.getLogger(ClusterProtonMetricsRetriever.class.getName());
- @SuppressWarnings("deprecation")
private static final CloseableHttpClient httpClient = VespaHttpClientBuilder
- .create(PoolingHttpClientConnectionManager::new)
- .setDefaultRequestConfig(
- RequestConfig.custom()
- .setConnectTimeout(Timeout.ofSeconds(10))
- .setResponseTimeout(Timeout.ofSeconds(10))
- .build())
- .build();
+ .custom()
+ .connectTimeout(Timeout.ofSeconds(10))
+ .apacheBuilder()
+ .setDefaultRequestConfig(RequestConfig.custom().setResponseTimeout(Timeout.ofSeconds(10)).build())
+ .build();
public Map<String, ProtonMetricsAggregator> requestMetricsGroupedByCluster(Collection<URI> hosts) {
diff --git a/container-core/src/main/java/com/yahoo/container/handler/metrics/MetricsV2Handler.java b/container-core/src/main/java/com/yahoo/container/handler/metrics/MetricsV2Handler.java
index 4a74d841ce2..7c1b0cc3099 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/metrics/MetricsV2Handler.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/metrics/MetricsV2Handler.java
@@ -61,12 +61,10 @@ public class MetricsV2Handler extends HttpHandlerBase {
}
}
- @SuppressWarnings("deprecation")
private static CloseableHttpClient createHttpClient() {
- return VespaHttpClientBuilder.create()
+ return VespaHttpClientBuilder.custom().connectTimeout(HTTP_CONNECT_TIMEOUT, MILLISECONDS).apacheBuilder()
.setUserAgent("application-metrics-retriever")
.setDefaultRequestConfig(RequestConfig.custom()
- .setConnectTimeout(HTTP_CONNECT_TIMEOUT, MILLISECONDS)
.setResponseTimeout(HTTP_SOCKET_TIMEOUT, MILLISECONDS)
.build())
.build();
diff --git a/container-core/src/main/java/com/yahoo/container/handler/metrics/PrometheusV1Handler.java b/container-core/src/main/java/com/yahoo/container/handler/metrics/PrometheusV1Handler.java
index f830a55e940..960cb795ad6 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/metrics/PrometheusV1Handler.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/metrics/PrometheusV1Handler.java
@@ -62,12 +62,10 @@ public class PrometheusV1Handler extends HttpHandlerBase {
}
}
- @SuppressWarnings("deprecation")
private static CloseableHttpClient createHttpClient() {
- return VespaHttpClientBuilder.create()
+ return VespaHttpClientBuilder.custom().connectTimeout(HTTP_CONNECT_TIMEOUT, MILLISECONDS).apacheBuilder()
.setUserAgent("application-prometheus-receiver")
.setDefaultRequestConfig(RequestConfig.custom()
- .setConnectTimeout(HTTP_CONNECT_TIMEOUT, MILLISECONDS)
.setResponseTimeout(HTTP_SOCKET_TIMEOUT, MILLISECONDS)
.build())
.build();
diff --git a/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java b/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java
index 2c5c1ad83fe..0d0a4c3b695 100644
--- a/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java
+++ b/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java
@@ -74,7 +74,7 @@ import java.util.stream.Stream;
*/
final class ProgramParser {
- public yqlplusParser prepareParser(String programName, String input) throws IOException {
+ public yqlplusParser prepareParser(String programName, String input) {
return prepareParser(programName, new CaseInsensitiveCharStream(CharStreams.fromString(input)));
}
diff --git a/http-utils/src/main/java/ai/vespa/util/http/hc5/VespaHttpClientBuilder.java b/http-utils/src/main/java/ai/vespa/util/http/hc5/VespaHttpClientBuilder.java
index a33c4c119c2..4f2bdfb213e 100644
--- a/http-utils/src/main/java/ai/vespa/util/http/hc5/VespaHttpClientBuilder.java
+++ b/http-utils/src/main/java/ai/vespa/util/http/hc5/VespaHttpClientBuilder.java
@@ -1,18 +1,23 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.util.http.hc5;
+import org.apache.hc.client5.http.config.ConnectionConfig;
+import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
-import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.core5.http.config.Registry;
import org.apache.hc.core5.http.config.RegistryBuilder;
+import org.apache.hc.core5.util.TimeValue;
+import org.apache.hc.core5.util.Timeout;
import javax.net.ssl.HostnameVerifier;
+import java.util.concurrent.TimeUnit;
+
import static com.yahoo.security.tls.MixedMode.PLAINTEXT_CLIENT_MIXED_SERVER;
import static com.yahoo.security.tls.TransportSecurityUtils.getInsecureMixedMode;
import static com.yahoo.security.tls.TransportSecurityUtils.getSystemTlsContext;
@@ -20,36 +25,65 @@ import static com.yahoo.security.tls.TransportSecurityUtils.isTransportSecurityE
/**
* Sync HTTP client builder <em>for internal Vespa communications over http/https.</em>
- *
* Configures Vespa mTLS and handles TLS mixed mode automatically.
- * Custom connection managers must be configured through {@link #create(HttpClientConnectionManagerFactory)}.
+ * Custom connection managers must be configured through {@link #connectionManagerFactory(HttpClientConnectionManagerFactory)}.
*
* @author jonmv
*/
public class VespaHttpClientBuilder {
+ private HttpClientConnectionManagerFactory connectionManagerFactory = PoolingHttpClientConnectionManager::new;
+ private HostnameVerifier hostnameVerifier = new NoopHostnameVerifier();
+ private boolean rewriteHttpToHttps = true;
+ private final ConnectionConfig.Builder connectionConfigBuilder = ConnectionConfig.custom();
public interface HttpClientConnectionManagerFactory {
- HttpClientConnectionManager create(Registry<ConnectionSocketFactory> socketFactories);
+ PoolingHttpClientConnectionManager create(Registry<ConnectionSocketFactory> socketFactories);
}
- public static HttpClientBuilder create() {
- return create(PoolingHttpClientConnectionManager::new);
+ private VespaHttpClientBuilder() {
}
- public static HttpClientBuilder create(HttpClientConnectionManagerFactory connectionManagerFactory) {
- return create(connectionManagerFactory, new NoopHostnameVerifier());
+ public static VespaHttpClientBuilder custom() {
+ return new VespaHttpClientBuilder();
}
- public static HttpClientBuilder create(HttpClientConnectionManagerFactory connectionManagerFactory,
- HostnameVerifier hostnameVerifier) {
- return create(connectionManagerFactory, hostnameVerifier, true);
+ public VespaHttpClientBuilder connectionManagerFactory(HttpClientConnectionManagerFactory connectionManagerFactory) {
+ this.connectionManagerFactory = connectionManagerFactory;
+ return this;
}
- public static HttpClientBuilder create(HttpClientConnectionManagerFactory connectionManagerFactory,
- HostnameVerifier hostnameVerifier,
- boolean rewriteHttpToHttps) {
+ public VespaHttpClientBuilder hostnameVerifier(HostnameVerifier hostnameVerifier) {
+ this.hostnameVerifier = hostnameVerifier;
+ return this;
+ }
+ public VespaHttpClientBuilder rewriteHttpToHttps(boolean enable) {
+ this.rewriteHttpToHttps = enable;
+ return this;
+ }
+ public VespaHttpClientBuilder connectTimeout(long connectTimeout, TimeUnit timeUnit) {
+ connectionConfigBuilder.setConnectTimeout(connectTimeout, timeUnit);
+ return this;
+ }
+ public VespaHttpClientBuilder connectTimeout(Timeout connectTimeout) {
+ connectionConfigBuilder.setConnectTimeout(connectTimeout);
+ return this;
+ }
+ public VespaHttpClientBuilder socketTimeout(long connectTimeout, TimeUnit timeUnit) {
+ connectionConfigBuilder.setConnectTimeout(connectTimeout, timeUnit);
+ return this;
+ }
+ public VespaHttpClientBuilder validateAfterInactivity(TimeValue validateAfterInactivity) {
+ connectionConfigBuilder.setValidateAfterInactivity(validateAfterInactivity);
+ return this;
+ }
+ public VespaHttpClientBuilder socketTimeout(Timeout connectTimeout) {
+ connectionConfigBuilder.setConnectTimeout(connectTimeout);
+ return this;
+ }
+
+ public HttpClientBuilder apacheBuilder() {
HttpClientBuilder builder = HttpClientBuilder.create();
- addSslSocketFactory(builder, connectionManagerFactory, hostnameVerifier);
+ addSslSocketFactory(builder, new HttpClientConnectionManagerFactoryProxy(), hostnameVerifier);
if (rewriteHttpToHttps)
addHttpsRewritingRoutePlanner(builder);
@@ -60,6 +94,18 @@ public class VespaHttpClientBuilder {
return builder;
}
+ public CloseableHttpClient buildClient() {
+ return apacheBuilder().build();
+ }
+
+ private class HttpClientConnectionManagerFactoryProxy implements HttpClientConnectionManagerFactory {
+ @Override
+ public PoolingHttpClientConnectionManager create(Registry<ConnectionSocketFactory> socketFactories) {
+ PoolingHttpClientConnectionManager manager = connectionManagerFactory.create(socketFactories);
+ manager.setDefaultConnectionConfig(connectionConfigBuilder.build());
+ return manager;
+ }
+ }
private static void addSslSocketFactory(HttpClientBuilder builder, HttpClientConnectionManagerFactory connectionManagerFactory,
HostnameVerifier hostnameVerifier) {
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java
index f766bebe4a2..75853ec9eda 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java
@@ -7,8 +7,6 @@ import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
-import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
-import org.apache.hc.core5.http.io.SocketConfig;
import org.apache.hc.core5.util.Timeout;
import java.io.IOException;
@@ -81,19 +79,14 @@ public abstract class HttpMetricFetcher {
}
}
- @SuppressWarnings("deprecation")
private static CloseableHttpClient createHttpClient() {
- return VespaHttpClientBuilder.create(registry -> {
- var mgr = new PoolingHttpClientConnectionManager(registry);
- mgr.setDefaultSocketConfig(SocketConfig.custom()
- .setSoTimeout(Timeout.ofMilliseconds(SOCKET_TIMEOUT))
- .build());
- return mgr;
- })
+ return VespaHttpClientBuilder.custom()
+ .connectTimeout(Timeout.ofMilliseconds(CONNECTION_TIMEOUT))
+ .socketTimeout(Timeout.ofMilliseconds(CONNECTION_TIMEOUT))
+ .apacheBuilder()
.setUserAgent("metrics-proxy-http-client")
.setDefaultRequestConfig(RequestConfig.custom()
.setConnectionRequestTimeout(Timeout.ofMilliseconds(SOCKET_TIMEOUT))
- .setConnectTimeout(Timeout.ofMilliseconds(CONNECTION_TIMEOUT))
.setResponseTimeout(Timeout.ofMilliseconds(SOCKET_TIMEOUT))
.build())
.build();
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/controller/RetryingClusterControllerClientFactory.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/controller/RetryingClusterControllerClientFactory.java
index 479d6bfe079..e70a05dcb7c 100644
--- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/controller/RetryingClusterControllerClientFactory.java
+++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/controller/RetryingClusterControllerClientFactory.java
@@ -8,6 +8,7 @@ import com.yahoo.component.annotation.Inject;
import com.yahoo.component.AbstractComponent;
import com.yahoo.vespa.applicationmodel.HostName;
import org.apache.hc.core5.http.message.BasicHeader;
+import org.apache.hc.core5.util.Timeout;
import java.io.IOException;
import java.util.List;
@@ -19,16 +20,19 @@ import java.util.logging.Logger;
*/
public class RetryingClusterControllerClientFactory extends AbstractComponent implements ClusterControllerClientFactory {
- private static Logger log = Logger.getLogger(RetryingClusterControllerClientFactory.class.getName());
+ private static final Logger log = Logger.getLogger(RetryingClusterControllerClientFactory.class.getName());
private final HttpClient client;
@Inject
public RetryingClusterControllerClientFactory() {
- this(AbstractHttpClient.wrapping(VespaHttpClientBuilder.create()
- .setUserAgent("orchestrator-cluster-controller-client")
- .setDefaultHeaders(List.of(new BasicHeader("Accept", "application/json")))
- .build()));
+ this(AbstractHttpClient.wrapping(VespaHttpClientBuilder
+ .custom()
+ .connectTimeout(Timeout.ofSeconds(5))
+ .apacheBuilder()
+ .setUserAgent("orchestrator-cluster-controller-client")
+ .setDefaultHeaders(List.of(new BasicHeader("Accept", "application/json")))
+ .build()));
}
RetryingClusterControllerClientFactory(HttpClient client) {
diff --git a/vespaclient-java/src/main/java/com/yahoo/vespa/filedistribution/status/FileDistributionStatusClient.java b/vespaclient-java/src/main/java/com/yahoo/vespa/filedistribution/status/FileDistributionStatusClient.java
index bb4cc91134e..bb532589750 100644
--- a/vespaclient-java/src/main/java/com/yahoo/vespa/filedistribution/status/FileDistributionStatusClient.java
+++ b/vespaclient-java/src/main/java/com/yahoo/vespa/filedistribution/status/FileDistributionStatusClient.java
@@ -78,7 +78,7 @@ public class FileDistributionStatusClient {
.setConnectionRequestTimeout(timeoutInMillis)
.setResponseTimeout(timeoutInMillis)
.build();
- try (CloseableHttpClient httpClient = VespaHttpClientBuilder.create().build()) {
+ try (CloseableHttpClient httpClient = VespaHttpClientBuilder.custom().connectTimeout(timeoutInMillis).buildClient()) {
URI statusUri = createStatusApiUri();
if (debug)
System.out.println("URI:" + statusUri);