diff options
author | jonmv <venstad@gmail.com> | 2022-05-03 07:30:55 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-05-03 07:30:55 +0200 |
commit | 3592e408848787f75e721bf2d6f99f3f010f6610 (patch) | |
tree | 8a41d51e4bbc420bc1dbc65d76e79e3f8ab423d3 /http-client | |
parent | e046ae79779261b09f85bcf4c04c906b83075775 (diff) |
Revert "Merge pull request #22394 from vespa-engine/revert-22374-jonmv/remove-last-controller-jersey-client"
This reverts commit e046ae79779261b09f85bcf4c04c906b83075775, reversing
changes made to d2066c0a0c04e2aa2ada12a5c85f5eae9ff65b02.
Diffstat (limited to 'http-client')
-rw-r--r-- | http-client/src/main/java/ai/vespa/hosted/client/AbstractHttpClient.java | 15 | ||||
-rw-r--r-- | http-client/src/main/java/ai/vespa/hosted/client/HttpClient.java | 8 |
2 files changed, 14 insertions, 9 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 68741d6d509..6a76ef65082 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 { + try (HttpEntity entity = builder.entity.get()) { + request.setEntity(entity); try { return handler.apply(execute(request, contextWithTimeout(builder)), request); } @@ -90,16 +90,15 @@ 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"); } } @@ -152,7 +151,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 HttpEntity entity; + private Supplier<HttpEntity> entity = () -> null; private RequestConfig config = HttpClient.defaultRequestConfig; private ResponseVerifier verifier = HttpClient.throwOnError; private ExceptionHandler catcher = HttpClient.retryAll; @@ -178,7 +177,7 @@ public abstract class AbstractHttpClient implements HttpClient { } @Override - public RequestBuilder body(HttpEntity entity) { + public RequestBuilder body(Supplier<HttpEntity> entity) { this.entity = requireNonNull(entity); return this; } diff --git a/http-client/src/main/java/ai/vespa/hosted/client/HttpClient.java b/http-client/src/main/java/ai/vespa/hosted/client/HttpClient.java index b41b16c25be..16a419bf324 100644 --- a/http-client/src/main/java/ai/vespa/hosted/client/HttpClient.java +++ b/http-client/src/main/java/ai/vespa/hosted/client/HttpClient.java @@ -78,7 +78,13 @@ public interface HttpClient extends Closeable { RequestBuilder body(byte[] json); /** Sets the request body. */ - RequestBuilder body(HttpEntity entity); + default RequestBuilder body(HttpEntity entity) { + if (entity.isRepeatable()) return body(() -> entity); + throw new IllegalArgumentException("entitiy must be repeatable, or a supplier must be used"); + } + + /** Sets the request body. */ + RequestBuilder body(Supplier<HttpEntity> entity); /** Sets query parameters without a value, like {@code ?debug&recursive}. */ default RequestBuilder emptyParameters(String... keys) { |