From b0037e7b64399fff0469916faac8e13b703c98df Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Mon, 4 Jul 2022 16:35:14 +0200 Subject: [PATCH 1/3] fix: use gzip compression only for /write endpoint --- .../java/org/influxdb/impl/GzipRequestInterceptor.java | 7 +++++++ src/test/java/org/influxdb/InfluxDBTest.java | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/org/influxdb/impl/GzipRequestInterceptor.java b/src/main/java/org/influxdb/impl/GzipRequestInterceptor.java index 8969780d9..adaa3d528 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 38b5fcfa3..db442a4b6 100644 --- a/src/test/java/org/influxdb/InfluxDBTest.java +++ b/src/test/java/org/influxdb/InfluxDBTest.java @@ -1457,6 +1457,13 @@ public String call() throws Exception { Assertions.assertTrue(MyInfluxDBBean.OKHTTP_BUILDER.interceptors().isEmpty()); } + @Test + public void testQueryPostWithGZIPCompression() { + this.influxDB.enableGzip(); + String command = String.format("CREATE DATABASE db_gzip_%d", System.currentTimeMillis()); + this.influxDB.query(new Query(command, null, true)); + } + private static final class MyInfluxDBBean { static final OkHttpClient.Builder OKHTTP_BUILDER = new OkHttpClient.Builder(); From ca62a0612723960c209496e8ff4daa2e1340993a Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Mon, 4 Jul 2022 16:44:24 +0200 Subject: [PATCH 2/3] docs: update CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a7f520da..847bd95ad 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 From 918bfb389583811a9b9c2d9674c9d04053bca58b Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Mon, 4 Jul 2022 20:13:59 +0200 Subject: [PATCH 3/3] chore: add check that database exists --- src/test/java/org/influxdb/InfluxDBTest.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/influxdb/InfluxDBTest.java b/src/test/java/org/influxdb/InfluxDBTest.java index db442a4b6..2598b9f23 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. * @@ -1460,8 +1462,13 @@ public String call() throws Exception { @Test public void testQueryPostWithGZIPCompression() { this.influxDB.enableGzip(); - String command = String.format("CREATE DATABASE db_gzip_%d", System.currentTimeMillis()); - this.influxDB.query(new Query(command, null, true)); + 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 {