diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a7f520d..847bd95a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ ### Improvements - Add implementation information to `Jar` manifest [PR #847](https://github.com/influxdata/influxdb-java/pull/847) +### Fixes +- Only the request to /write endpoint should be compressed by GZIP [PR #851](https://github.com/influxdata/influxdb-java/pull/851) + ## 2.22 [2021-09-17] ### Improvements diff --git a/src/main/java/org/influxdb/impl/GzipRequestInterceptor.java b/src/main/java/org/influxdb/impl/GzipRequestInterceptor.java index 8969780d..adaa3d52 100644 --- a/src/main/java/org/influxdb/impl/GzipRequestInterceptor.java +++ b/src/main/java/org/influxdb/impl/GzipRequestInterceptor.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.regex.Pattern; import okhttp3.Interceptor; import okhttp3.MediaType; @@ -19,6 +20,8 @@ */ final class GzipRequestInterceptor implements Interceptor { + private static final Pattern WRITE_PATTERN = Pattern.compile(".*/write", Pattern.CASE_INSENSITIVE); + private AtomicBoolean enabled = new AtomicBoolean(false); GzipRequestInterceptor() { @@ -48,6 +51,10 @@ public Response intercept(final Interceptor.Chain chain) throws IOException { return chain.proceed(originalRequest); } + if (!WRITE_PATTERN.matcher(originalRequest.url().encodedPath()).matches()) { + return chain.proceed(originalRequest); + } + Request compressedRequest = originalRequest.newBuilder().header("Content-Encoding", "gzip") .method(originalRequest.method(), gzip(body)).build(); return chain.proceed(compressedRequest); diff --git a/src/test/java/org/influxdb/InfluxDBTest.java b/src/test/java/org/influxdb/InfluxDBTest.java index 38b5fcfa..2598b9f2 100644 --- a/src/test/java/org/influxdb/InfluxDBTest.java +++ b/src/test/java/org/influxdb/InfluxDBTest.java @@ -41,6 +41,8 @@ import java.util.function.Consumer; import java.util.regex.Pattern; +import static org.assertj.core.api.Assertions.assertThat; + /** * Test the InfluxDB API. * @@ -1457,6 +1459,18 @@ public String call() throws Exception { Assertions.assertTrue(MyInfluxDBBean.OKHTTP_BUILDER.interceptors().isEmpty()); } + @Test + public void testQueryPostWithGZIPCompression() { + this.influxDB.enableGzip(); + String database = "db_gzip_" + System.currentTimeMillis(); + this.influxDB.query(new Query(String.format("CREATE DATABASE %s", database), null, true)); + QueryResult query = this.influxDB.query(new Query("SHOW DATABASES", null, true)); + assertThat(query.getResults()).hasSize(1); + assertThat(query.getResults().get(0).getSeries()).hasSize(1); + assertThat(query.getResults().get(0).getSeries().get(0).getValues()).contains(Collections.singletonList(database)); + this.influxDB.query(new Query(String.format("DROP DATABASE %s", database), null, true)); + } + private static final class MyInfluxDBBean { static final OkHttpClient.Builder OKHTTP_BUILDER = new OkHttpClient.Builder();