summaryrefslogtreecommitdiffstats
path: root/metrics-proxy
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2022-06-13 11:21:07 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2022-06-13 11:21:07 +0200
commit2f4aeb3d4784fd64ae422073bf6a18411ccad4f0 (patch)
tree3872e988443789778cd0e8a84b363ddabbd28055 /metrics-proxy
parentdf3a61afdbd380db3d610cebb58107b2893a1bfd (diff)
Specify timeout for non-blocking I/O in http clients
Diffstat (limited to 'metrics-proxy')
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsRetriever.java12
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java6
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MockHttpServer.java1
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);