diff options
Diffstat (limited to 'http-client/src/main/java/ai/vespa/hosted/client/AbstractHttpClient.java')
-rw-r--r-- | http-client/src/main/java/ai/vespa/hosted/client/AbstractHttpClient.java | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/http-client/src/main/java/ai/vespa/hosted/client/AbstractHttpClient.java b/http-client/src/main/java/ai/vespa/hosted/client/AbstractHttpClient.java index 6a76ef65082..68741d6d509 100644 --- a/http-client/src/main/java/ai/vespa/hosted/client/AbstractHttpClient.java +++ b/http-client/src/main/java/ai/vespa/hosted/client/AbstractHttpClient.java @@ -79,9 +79,9 @@ public abstract class AbstractHttpClient implements HttpClient { .asURI()) .build(); builder.headers.forEach((name, values) -> values.forEach(value -> request.setHeader(name, value))); + request.setEntity(builder.entity); - try (HttpEntity entity = builder.entity.get()) { - request.setEntity(entity); + try { try { return handler.apply(execute(request, contextWithTimeout(builder)), request); } @@ -90,15 +90,16 @@ public abstract class AbstractHttpClient implements HttpClient { throw RetryException.wrap(e, request); } } - catch (IOException e) { - throw new UncheckedIOException("failed closing request entity", e); - } catch (RetryException e) { if (thrown == null) thrown = e.getCause(); else thrown.addSuppressed(e.getCause()); + if (builder.entity != null && ! builder.entity.isRepeatable()) { + log.log(WARNING, "Cannot retry " + request + " as entity is not repeatable"); + break; + } log.log(FINE, e.getCause(), () -> request + " failed; will retry"); } } @@ -151,7 +152,7 @@ public abstract class AbstractHttpClient implements HttpClient { private HttpURL.Query query = Query.empty(); private List<Supplier<Query>> dynamicQuery = new ArrayList<>(); private Map<String, List<String>> headers = new LinkedHashMap<>(); - private Supplier<HttpEntity> entity = () -> null; + private HttpEntity entity; private RequestConfig config = HttpClient.defaultRequestConfig; private ResponseVerifier verifier = HttpClient.throwOnError; private ExceptionHandler catcher = HttpClient.retryAll; @@ -177,7 +178,7 @@ public abstract class AbstractHttpClient implements HttpClient { } @Override - public RequestBuilder body(Supplier<HttpEntity> entity) { + public RequestBuilder body(HttpEntity entity) { this.entity = requireNonNull(entity); return this; } |