diff options
16 files changed, 108 insertions, 79 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/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); |