diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-06-13 11:21:07 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-06-13 11:21:07 +0200 |
commit | 2f4aeb3d4784fd64ae422073bf6a18411ccad4f0 (patch) | |
tree | 3872e988443789778cd0e8a84b363ddabbd28055 /metrics-proxy | |
parent | df3a61afdbd380db3d610cebb58107b2893a1bfd (diff) |
Specify timeout for non-blocking I/O in http clients
Diffstat (limited to 'metrics-proxy')
3 files changed, 13 insertions, 6 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsRetriever.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsRetriever.java index 8d33ee19c78..1cb6e1d665b 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsRetriever.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsRetriever.java @@ -56,7 +56,6 @@ public class ApplicationMetricsRetriever extends AbstractComponent implements Ru private long pollCount = 0; private boolean stopped; - // Non-final for testing private final AtomicReference<Duration> taskTimeout; @Inject @@ -187,12 +186,15 @@ public class ApplicationMetricsRetriever extends AbstractComponent implements Ru static CloseableHttpAsyncClient createHttpClient() { return VespaAsyncHttpClientBuilder.create() - .setIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(2).build()) + .setIOReactorConfig(IOReactorConfig.custom() + .setSoTimeout(Timeout.ofMilliseconds(HTTP_SOCKET_TIMEOUT)) + .setIoThreadCount(2) + .build()) .setUserAgent("application-metrics-retriever") .setDefaultRequestConfig(RequestConfig.custom() - .setConnectTimeout(Timeout.ofMilliseconds(HTTP_CONNECT_TIMEOUT)) - .setResponseTimeout(Timeout.ofMilliseconds(HTTP_SOCKET_TIMEOUT)) - .build()) + .setConnectTimeout(Timeout.ofMilliseconds(HTTP_CONNECT_TIMEOUT)) + .setResponseTimeout(Timeout.ofMilliseconds(HTTP_SOCKET_TIMEOUT)) + .build()) .build(); } 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 677b0e065ad..b41e9d5c8a8 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 @@ -12,6 +12,7 @@ import org.apache.hc.core5.http.Method; import org.apache.hc.core5.http.nio.support.BasicRequestProducer; import org.apache.hc.core5.http.nio.support.BasicResponseConsumer; import org.apache.hc.core5.http.nio.support.classic.AbstractClassicEntityConsumer; +import org.apache.hc.core5.reactor.IOReactorConfig; import org.apache.hc.core5.util.Timeout; import java.io.IOException; @@ -33,7 +34,7 @@ public abstract class HttpMetricFetcher { private final static Logger log = Logger.getLogger(HttpMetricFetcher.class.getName()); public final static String STATE_PATH = "/state/v1/"; // The call to apache will do 3 retries. As long as we check the services in series, we can't have this too high. - public static int CONNECTION_TIMEOUT = 5000; + public static volatile int CONNECTION_TIMEOUT = 5000; private final static int SOCKET_TIMEOUT = 60000; private final static int BUFFER_SIZE = 0x40000; // 256k private final URI url; @@ -97,6 +98,9 @@ public abstract class HttpMetricFetcher { private static CloseableHttpAsyncClient createHttpClient() { CloseableHttpAsyncClient client = VespaAsyncHttpClientBuilder.create() .setUserAgent("metrics-proxy-http-client") + .setIOReactorConfig(IOReactorConfig.custom() + .setSoTimeout(Timeout.ofMilliseconds(SOCKET_TIMEOUT)) + .build()) .setDefaultRequestConfig(RequestConfig.custom() .setConnectionRequestTimeout(Timeout.ofMilliseconds(SOCKET_TIMEOUT)) .setConnectTimeout(Timeout.ofMilliseconds(CONNECTION_TIMEOUT)) diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MockHttpServer.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MockHttpServer.java index e2c0bbd73ee..e8c57162b31 100644 --- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MockHttpServer.java +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MockHttpServer.java @@ -45,6 +45,7 @@ public class MockHttpServer { } private class MyHandler implements HttpHandler { + @Override public void handle(HttpExchange t) throws IOException { synchronized (MockHttpServer.this) { t.sendResponseHeaders(200, response != null ? response.length() : 0); |