diff options
author | jonmv <venstad@gmail.com> | 2023-01-04 08:53:57 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-01-04 08:53:57 +0100 |
commit | eb0bf8c5bb18ad89ba03d290c6cedc6773b321bc (patch) | |
tree | fb27b08113e31c46015659d89eae0d92230b5711 /vespa-feed-client | |
parent | c9746a990c0daf8103dc7a09ab0d80ee87565a3b (diff) |
Use --compression gzip instead
Diffstat (limited to 'vespa-feed-client')
3 files changed, 38 insertions, 42 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 e2678503c68..1dda8912046 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 @@ -1,12 +1,11 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package ai.vespa.feed.client.impl; +import ai.vespa.feed.client.FeedClientBuilder.Compression; import ai.vespa.feed.client.HttpResponse; -import org.apache.hc.client5.http.async.methods.SimpleBody; import org.apache.hc.client5.http.async.methods.SimpleHttpRequest; import org.apache.hc.client5.http.async.methods.SimpleHttpResponse; import org.apache.hc.client5.http.config.RequestConfig; -import org.apache.hc.client5.http.entity.GzipCompressingEntity; import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient; import org.apache.hc.client5.http.impl.async.HttpAsyncClients; import org.apache.hc.client5.http.ssl.ClientTlsStrategyBuilder; @@ -15,17 +14,7 @@ import org.apache.hc.core5.http.ContentType; import org.apache.hc.core5.http.Header; import org.apache.hc.core5.http.HttpHeaders; import org.apache.hc.core5.http.HttpHost; -import org.apache.hc.core5.http.io.entity.BasicHttpEntity; -import org.apache.hc.core5.http.io.entity.ByteArrayEntity; -import org.apache.hc.core5.http.io.entity.StringEntity; import org.apache.hc.core5.http.message.BasicHeader; -import org.apache.hc.core5.http.message.BasicHttpRequest; -import org.apache.hc.core5.http.nio.AsyncEntityProducer; -import org.apache.hc.core5.http.nio.AsyncRequestProducer; -import org.apache.hc.core5.http.nio.entity.AsyncEntityProducers; -import org.apache.hc.core5.http.nio.entity.BasicAsyncEntityProducer; -import org.apache.hc.core5.http.nio.support.AsyncRequestBuilder; -import org.apache.hc.core5.http.nio.support.BasicRequestProducer; import org.apache.hc.core5.http2.config.H2Config; import org.apache.hc.core5.net.URIAuthority; import org.apache.hc.core5.reactor.IOReactorConfig; @@ -34,7 +23,6 @@ import org.apache.hc.core5.util.Timeout; import javax.net.ssl.SSLContext; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.UncheckedIOException; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; @@ -47,7 +35,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.zip.GZIPOutputStream; -import static java.nio.charset.StandardCharsets.UTF_8; import static org.apache.hc.core5.http.ssl.TlsCiphers.excludeH2Blacklisted; import static org.apache.hc.core5.http.ssl.TlsCiphers.excludeWeak; @@ -71,7 +58,7 @@ class ApacheCluster implements Cluster { for (URI endpoint : builder.endpoints) endpoints.add(new Endpoint(createHttpClient(builder), endpoint)); this.requestConfig = createRequestConfig(builder); - this.gzip = builder.gzipRequests; + this.gzip = builder.compression == Compression.gzip; } @Override diff --git a/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/FeedClientBuilderImpl.java b/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/FeedClientBuilderImpl.java index 13556b60a28..6886dc3d2b9 100644 --- a/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/FeedClientBuilderImpl.java +++ b/vespa-feed-client/src/main/java/ai/vespa/feed/client/impl/FeedClientBuilderImpl.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; import java.util.function.Supplier; +import static ai.vespa.feed.client.FeedClientBuilder.Compression.none; import static java.util.Objects.requireNonNull; /** @@ -50,7 +51,7 @@ public class FeedClientBuilderImpl implements FeedClientBuilder { boolean benchmark = true; boolean dryrun = false; boolean speedTest = false; - boolean gzipRequests = false; + Compression compression = none; URI proxy; @@ -202,8 +203,8 @@ public class FeedClientBuilderImpl implements FeedClientBuilder { } @Override - public FeedClientBuilderImpl setGzipRequests(boolean gzip) { - this.gzipRequests = gzip; + public FeedClientBuilderImpl setCompression(Compression compression) { + this.compression = compression; return this; } diff --git a/vespa-feed-client/src/test/java/ai/vespa/feed/client/impl/ApacheClusterTest.java b/vespa-feed-client/src/test/java/ai/vespa/feed/client/impl/ApacheClusterTest.java index e665a9f0693..33c043ea271 100644 --- a/vespa-feed-client/src/test/java/ai/vespa/feed/client/impl/ApacheClusterTest.java +++ b/vespa-feed-client/src/test/java/ai/vespa/feed/client/impl/ApacheClusterTest.java @@ -1,6 +1,8 @@ package ai.vespa.feed.client.impl; +import ai.vespa.feed.client.FeedClientBuilder.Compression; import ai.vespa.feed.client.HttpResponse; +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -34,32 +36,38 @@ class ApacheClusterTest { @Test void testClient() throws IOException, ExecutionException, InterruptedException, TimeoutException { - try (ApacheCluster cluster = new ApacheCluster(new FeedClientBuilderImpl(List.of(URI.create("http://localhost:" + server.port()))) - .setGzipRequests(true))) { - server.stubFor(any(anyUrl())) - .setResponse(okJson("{}").build()); + for (Compression compression : Compression.values()) { + try (ApacheCluster cluster = new ApacheCluster(new FeedClientBuilderImpl(List.of(URI.create("http://localhost:" + server.port()))) + .setCompression(compression))) { + server.stubFor(any(anyUrl())) + .setResponse(okJson("{}").build()); - CompletableFuture<HttpResponse> vessel = new CompletableFuture<>(); - cluster.dispatch(new HttpRequest("POST", - "/path", - Map.of("name1", () -> "value1", - "name2", () -> "value2"), - "content".getBytes(UTF_8), - Duration.ofSeconds(1)), - vessel); - HttpResponse response = vessel.get(5, TimeUnit.SECONDS); - assertEquals("{}", new String(response.body(), UTF_8)); - assertEquals(200, response.code()); + CompletableFuture<HttpResponse> vessel = new CompletableFuture<>(); + cluster.dispatch(new HttpRequest("POST", + "/path", + Map.of("name1", () -> "value1", + "name2", () -> "value2"), + "content".getBytes(UTF_8), + Duration.ofSeconds(1)), + vessel); + HttpResponse response = vessel.get(5, TimeUnit.SECONDS); + assertEquals("{}", new String(response.body(), UTF_8)); + assertEquals(200, response.code()); - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - try (OutputStream zip = new GZIPOutputStream(buffer)) { zip.write("content".getBytes(UTF_8)); } - server.verify(1, anyRequestedFor(anyUrl())); - server.verify(1, postRequestedFor(urlEqualTo("/path")).withHeader("name1", equalTo("value1")) - .withHeader("name2", equalTo("value2")) - .withHeader("Content-Type", equalTo("application/json; charset=UTF-8")) - .withHeader("Content-Encoding", equalTo("gzip")) - .withRequestBody(equalTo("content"))); - server.resetRequests(); + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + try (OutputStream zip = new GZIPOutputStream(buffer)) { zip.write("content".getBytes(UTF_8)); } + server.verify(1, anyRequestedFor(anyUrl())); + RequestPatternBuilder expected = postRequestedFor(urlEqualTo("/path")).withHeader("name1", equalTo("value1")) + .withHeader("name2", equalTo("value2")) + .withHeader("Content-Type", equalTo("application/json; charset=UTF-8")) + .withRequestBody(equalTo("content")); + expected = switch (compression) { + case none -> expected.withoutHeader("Content-Encoding"); + case gzip -> expected.withHeader("Content-Encoding", equalTo("gzip")); + }; + server.verify(1, expected); + server.resetRequests(); + } } } |