From ec8c1c00b455231fc59bb78567164c76d9206b8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Jul 2026 20:25:40 +0000 Subject: [PATCH 1/4] build(deps): bump at.yawk.lz4:lz4-java from 1.10.4 to 1.11.1 Bumps [at.yawk.lz4:lz4-java](https://github.com/yawkat/lz4-java) from 1.10.4 to 1.11.1. - [Release notes](https://github.com/yawkat/lz4-java/releases) - [Changelog](https://github.com/yawkat/lz4-java/blob/main/CHANGES.md) - [Commits](https://github.com/yawkat/lz4-java/compare/v1.10.4...v1.11.1) --- updated-dependencies: - dependency-name: at.yawk.lz4:lz4-java dependency-version: 1.11.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a2a48964c..7e402d341 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ 4.0.1 0.31.1 3.23.4 - 1.10.4 + 1.11.1 0.9.5 1.0.6 2.0.7 From 4d78042eeabeb6d61547eacd3b1e7c91516d4cd3 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Mon, 27 Jul 2026 16:28:02 -0700 Subject: [PATCH 2/4] Fix the issue with tests --- client-v2/src/test/java/com/clickhouse/client/ProxyTests.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java b/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java index 51fb2ccd9..6d696369b 100644 --- a/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java +++ b/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java @@ -25,7 +25,9 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Random; import java.util.concurrent.ExecutionException; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; @@ -221,7 +223,9 @@ private Client.Builder clientBuilder(int proxyPort, boolean onlyNewImplementatio } private int initProxy() { + int port = ThreadLocalRandom.current().nextInt(10000, 50000); WireMockServer wireMock = new WireMockServer(WireMockConfiguration.options() + .port(port) // .notifier(new Slf4jNotifier(true)) ); wireMock.start(); From c351ef82efd4a574721374e79056d94aab9e59f7 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Mon, 27 Jul 2026 16:33:53 -0700 Subject: [PATCH 3/4] Use dynamic port --- .../src/test/java/com/clickhouse/client/ProxyTests.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java b/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java index 6d696369b..288be2c01 100644 --- a/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java +++ b/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java @@ -1,9 +1,9 @@ package com.clickhouse.client; +import com.clickhouse.client.api.ClickHouseException; import com.clickhouse.client.api.Client; import com.clickhouse.client.api.ClientException; import com.clickhouse.client.api.ClientMisconfigurationException; -import com.clickhouse.client.api.ClickHouseException; import com.clickhouse.client.api.enums.Protocol; import com.clickhouse.client.api.enums.ProxyType; import com.clickhouse.client.api.insert.InsertResponse; @@ -25,9 +25,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Random; import java.util.concurrent.ExecutionException; -import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; @@ -223,9 +221,8 @@ private Client.Builder clientBuilder(int proxyPort, boolean onlyNewImplementatio } private int initProxy() { - int port = ThreadLocalRandom.current().nextInt(10000, 50000); WireMockServer wireMock = new WireMockServer(WireMockConfiguration.options() - .port(port) + .dynamicPort() // .notifier(new Slf4jNotifier(true)) ); wireMock.start(); From 80ef37d92a70c57894764a690ded6baa647e5ef8 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Mon, 27 Jul 2026 22:15:03 -0700 Subject: [PATCH 4/4] Fixed tests --- .../client/metrics/MetricsTest.java | 47 +++++++++++++------ .../clickhouse/client/query/QueryTests.java | 14 ++++-- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/client-v2/src/test/java/com/clickhouse/client/metrics/MetricsTest.java b/client-v2/src/test/java/com/clickhouse/client/metrics/MetricsTest.java index 401917404..fd36c18eb 100644 --- a/client-v2/src/test/java/com/clickhouse/client/metrics/MetricsTest.java +++ b/client-v2/src/test/java/com/clickhouse/client/metrics/MetricsTest.java @@ -19,12 +19,13 @@ import org.testng.annotations.Test; import java.time.temporal.ChronoUnit; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import static org.testng.Assert.assertEquals; -import static org.testng.Assert.fail; public class MetricsTest extends BaseIntegrationTest { private MeterRegistry meterRegistry; @@ -67,25 +68,38 @@ public void testRegisterMetrics() throws Exception { Assert.assertEquals((int) available.value(), 1); Assert.assertEquals((int) leased.value(), 0); - final long maxDelay = isCloud() ? 300 : 15; + CountDownLatch responsesReady = new CountDownLatch(2); + CountDownLatch releaseResponses = new CountDownLatch(1); Runnable task = () -> { - long t1 = System.currentTimeMillis(); try (QueryResponse response = client.query("SELECT 1").get()) { - long t = System.currentTimeMillis() - t1; - Assert.assertTrue(t < maxDelay, "Unexpected delay (t = " + t + ", but expected < " + maxDelay + " ms)"); - Assert.assertEquals((int) available.value(), 0); - Assert.assertEquals((int) leased.value(), 1); + responsesReady.countDown(); + Assert.assertTrue(releaseResponses.await(10, TimeUnit.SECONDS), + "Timed out waiting to release query responses"); } catch (Exception e) { - e.printStackTrace(); - fail("Failed to to request", e); + throw new RuntimeException("Failed to execute request", e); } }; - ExecutorService executor = Executors.newFixedThreadPool(3); - executor.submit(task); - executor.submit(task); - executor.shutdown(); - executor.awaitTermination(10, TimeUnit.SECONDS); + ExecutorService executor = Executors.newFixedThreadPool(2); + Future firstQuery = executor.submit(task); + Future secondQuery = executor.submit(task); + try { + try { + Assert.assertTrue(responsesReady.await(10, TimeUnit.SECONDS), + "Timed out waiting for concurrent query responses"); + Assert.assertEquals((int) available.value(), 0); + Assert.assertEquals((int) leased.value(), 2); + } finally { + releaseResponses.countDown(); + } + firstQuery.get(10, TimeUnit.SECONDS); + secondQuery.get(10, TimeUnit.SECONDS); + } finally { + releaseResponses.countDown(); + executor.shutdownNow(); + } + Assert.assertTrue(executor.awaitTermination(10, TimeUnit.SECONDS), + "Timed out waiting for query executor to terminate"); Assert.assertEquals((int) available.value(), 2); Assert.assertEquals((int) leased.value(), 0); @@ -95,7 +109,10 @@ public void testRegisterMetrics() throws Exception { Assert.assertEquals((int) available.value(), 2); Assert.assertEquals((int) leased.value(), 0); - task.run(); + try (QueryResponse response = client.query("SELECT 1").get()) { + Assert.assertEquals((int) available.value(), 0); + Assert.assertEquals((int) leased.value(), 1); + } Assert.assertEquals((int) available.value(), 1); Assert.assertEquals((int) leased.value(), 0); diff --git a/client-v2/src/test/java/com/clickhouse/client/query/QueryTests.java b/client-v2/src/test/java/com/clickhouse/client/query/QueryTests.java index e8230716c..f3a25feff 100644 --- a/client-v2/src/test/java/com/clickhouse/client/query/QueryTests.java +++ b/client-v2/src/test/java/com/clickhouse/client/query/QueryTests.java @@ -11,10 +11,10 @@ import com.clickhouse.client.api.ClientException; import com.clickhouse.client.api.ServerException; import com.clickhouse.client.api.command.CommandSettings; -import com.clickhouse.client.api.http.ClickHouseHttpProto; import com.clickhouse.client.api.data_formats.ClickHouseBinaryFormatReader; import com.clickhouse.client.api.data_formats.internal.BinaryStreamReader; import com.clickhouse.client.api.enums.Protocol; +import com.clickhouse.client.api.http.ClickHouseHttpProto; import com.clickhouse.client.api.insert.InsertResponse; import com.clickhouse.client.api.insert.InsertSettings; import com.clickhouse.client.api.internal.DataTypeConverter; @@ -1029,6 +1029,10 @@ public void testIntegerDataTypes() { @Test(groups = {"integration"}) public void testFloatDataTypes() { + final boolean usesPreciseFloatParsing = isVersionMatch("[26.7,)"); + final float expectedMaxFloat32 = usesPreciseFloatParsing ? Float.MAX_VALUE : 3.4028233E38F; + final double expectedMinFloat64 = usesPreciseFloatParsing ? Double.MIN_VALUE : 0.0D; + final List columns = Arrays.asList( "min_float32 Float32", "max_float32 Float32", @@ -1060,12 +1064,12 @@ public void testFloatDataTypes() { }); verifiers.add(r -> { - Assert.assertEquals(r.getFloat("max_float32"), 3.4028233E38F); // TODO: investigate why it's not Float.MAX_VALUE returned from server - Assert.assertEquals(r.getFloat(2), 3.4028233E38F); + Assert.assertEquals(r.getFloat("max_float32"), expectedMaxFloat32); + Assert.assertEquals(r.getFloat(2), expectedMaxFloat32); }); verifiers.add(r -> { - Assert.assertEquals(r.getDouble("min_float64"), 0.0D); // TODO: investigate why it's not Double.MIN_VALUE returned from server - Assert.assertEquals(r.getDouble(3), 0.0D); + Assert.assertEquals(r.getDouble("min_float64"), expectedMinFloat64); + Assert.assertEquals(r.getDouble(3), expectedMinFloat64); }); verifiers.add(r -> { Assert.assertEquals(r.getDouble("max_float64"), Double.MAX_VALUE);