diff options
author | jonmv <venstad@gmail.com> | 2023-04-25 13:52:23 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-04-25 13:52:23 +0200 |
commit | 6bf90f4877890d6781dba66c877b117da527a8f1 (patch) | |
tree | 506c1910e8b704957cb97c0b32579adb91995102 /vespa-feed-client | |
parent | dab097c727e05113571d00494d269078501aa79e (diff) |
Copy request config to mutate
Diffstat (limited to 'vespa-feed-client')
-rw-r--r-- | vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java b/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java index c240018df11..c188e7936c6 100644 --- a/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java +++ b/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/ApacheCluster.java @@ -53,7 +53,7 @@ class ApacheCluster implements Cluster { private final List<BasicHeader> defaultHeaders = Arrays.asList(new BasicHeader(HttpHeaders.USER_AGENT, String.format("vespa-feed-client/%s", Vespa.VERSION)), new BasicHeader("Vespa-Client-Version", Vespa.VERSION)); private final Header gzipEncodingHeader = new BasicHeader(HttpHeaders.CONTENT_ENCODING, "gzip"); - private final RequestConfig.Builder requestConfig; + private final RequestConfig requestConfig; private final Compression compression; private int someNumber = 0; @@ -90,7 +90,7 @@ class ApacheCluster implements Cluster { request.setScheme(endpoint.url.getScheme()); request.setAuthority(new URIAuthority(endpoint.url.getHost(), portOf(endpoint.url))); long timeoutMillis = wrapped.timeout() == null ? 190_000 : wrapped.timeout().toMillis() * 11 / 10 + 1_000; - request.setConfig(requestConfig.setResponseTimeout(Timeout.ofMilliseconds(timeoutMillis)).build()); + request.setConfig(RequestConfig.copy(requestConfig).setResponseTimeout(Timeout.ofMilliseconds(timeoutMillis)).build()); defaultHeaders.forEach(request::setHeader); wrapped.headers().forEach((name, value) -> request.setHeader(name, value.get())); if (wrapped.body() != null) { @@ -108,10 +108,11 @@ class ApacheCluster implements Cluster { @Override public void failed(Exception ex) { vessel.completeExceptionally(ex); } @Override public void cancelled() { vessel.cancel(false); } }); - Future<?> cancellation = timeoutExecutor.schedule(() -> { - future.cancel(true); - vessel.cancel(true); - }, timeoutMillis + 10_000, TimeUnit.MILLISECONDS); + // We've seen some requests time out, even with a response timeout, + // so we schedule this to be absolutely sure we don't hang (for ever). + Future<?> cancellation = timeoutExecutor.schedule(() -> { future.cancel(true); vessel.cancel(true); }, + timeoutMillis + 10_000, + TimeUnit.MILLISECONDS); vessel.whenComplete((__, ___) -> cancellation.cancel(true)); } catch (Throwable thrown) { @@ -196,12 +197,12 @@ class ApacheCluster implements Cluster { } @SuppressWarnings("deprecation") - private static RequestConfig.Builder createRequestConfig(FeedClientBuilderImpl b) { + private static RequestConfig createRequestConfig(FeedClientBuilderImpl b) { RequestConfig.Builder builder = RequestConfig.custom() .setConnectTimeout(Timeout.ofSeconds(10)) .setConnectionRequestTimeout(Timeout.DISABLED); if (b.proxy != null) builder.setProxy(new HttpHost(b.proxy.getScheme(), b.proxy.getHost(), b.proxy.getPort())); - return builder; + return builder.build(); } private static class ApacheHttpResponse implements HttpResponse { |