From ffc5f7e9f57ae911339fd42cfbaefe0115198c39 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Fri, 13 Feb 2026 15:48:18 -0800 Subject: [PATCH 01/10] Added prefix for test database to make it unique between runs --- .../src/test/java/com/clickhouse/client/insert/InsertTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java b/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java index ee3239d1d..7e338ed07 100644 --- a/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java +++ b/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java @@ -395,7 +395,7 @@ public void testInsertMetricsOperationId() throws Exception { @Test(groups = { "integration" }) public void testInsertSettingsAddDatabase() throws Exception { final String tableName = "insert_settings_database_test"; - final String new_database = "new_database"; + final String new_database = client.getDefaultDatabase() + "_new_database"; final String createDatabaseSQL = "CREATE DATABASE " + new_database; final String createTableSQL = "CREATE TABLE " + new_database + "." + tableName + " (Id UInt32, event_ts Timestamp, name String, p1 Int64, p2 String) ENGINE = MergeTree() ORDER BY ()"; From 6f2be2ff3a1d3acbf6963e6957791ed3fad876f6 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Fri, 13 Feb 2026 15:49:42 -0800 Subject: [PATCH 02/10] Fixed create database statement --- .../clickhouse/client/insert/InsertTests.java | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java b/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java index 7e338ed07..4488df049 100644 --- a/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java +++ b/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java @@ -396,32 +396,36 @@ public void testInsertMetricsOperationId() throws Exception { public void testInsertSettingsAddDatabase() throws Exception { final String tableName = "insert_settings_database_test"; final String new_database = client.getDefaultDatabase() + "_new_database"; - final String createDatabaseSQL = "CREATE DATABASE " + new_database; + final String createDatabaseSQL = "CREATE IF NOT EXISTS DATABASE " + new_database; final String createTableSQL = "CREATE TABLE " + new_database + "." + tableName + " (Id UInt32, event_ts Timestamp, name String, p1 Int64, p2 String) ENGINE = MergeTree() ORDER BY ()"; final String dropDatabaseSQL = "DROP DATABASE IF EXISTS " + new_database; - client.execute(dropDatabaseSQL).get(EXECUTE_CMD_TIMEOUT, TimeUnit.SECONDS); - client.execute(createDatabaseSQL).get(EXECUTE_CMD_TIMEOUT, TimeUnit.SECONDS); - client.execute(createTableSQL).get(EXECUTE_CMD_TIMEOUT, TimeUnit.SECONDS); + try { + client.execute(dropDatabaseSQL).get(EXECUTE_CMD_TIMEOUT, TimeUnit.SECONDS); + client.execute(createDatabaseSQL).get(EXECUTE_CMD_TIMEOUT, TimeUnit.SECONDS); + client.execute(createTableSQL).get(EXECUTE_CMD_TIMEOUT, TimeUnit.SECONDS); - InsertSettings insertSettings = settings.setInputStreamCopyBufferSize(8198 * 2) - .setDeduplicationToken(RandomStringUtils.randomAlphabetic(36)) - .setQueryId(String.valueOf(UUID.randomUUID())) - .setDatabase(new_database); + InsertSettings insertSettings = settings.setInputStreamCopyBufferSize(8198 * 2) + .setDeduplicationToken(RandomStringUtils.randomAlphabetic(36)) + .setQueryId(String.valueOf(UUID.randomUUID())) + .setDatabase(new_database); - ByteArrayOutputStream data = new ByteArrayOutputStream(); - PrintWriter writer = new PrintWriter(data); - for (int i = 0; i < 1000; i++) { - writer.printf("%d\t%s\t%s\t%d\t%s\n", i, "2021-01-01 00:00:00", "name" + i, i, "p2"); - } - writer.flush(); - InsertResponse response = client.insert(tableName, new ByteArrayInputStream(data.toByteArray()), - ClickHouseFormat.TSV, insertSettings).get(EXECUTE_CMD_TIMEOUT, TimeUnit.SECONDS); - assertEquals((int)response.getWrittenRows(), 1000 ); + ByteArrayOutputStream data = new ByteArrayOutputStream(); + PrintWriter writer = new PrintWriter(data); + for (int i = 0; i < 1000; i++) { + writer.printf("%d\t%s\t%s\t%d\t%s\n", i, "2021-01-01 00:00:00", "name" + i, i, "p2"); + } + writer.flush(); + InsertResponse response = client.insert(tableName, new ByteArrayInputStream(data.toByteArray()), + ClickHouseFormat.TSV, insertSettings).get(EXECUTE_CMD_TIMEOUT, TimeUnit.SECONDS); + assertEquals((int) response.getWrittenRows(), 1000); - List records = client.queryAll("SELECT * FROM " + new_database + "." + tableName); - assertEquals(records.size(), 1000); + List records = client.queryAll("SELECT * FROM " + new_database + "." + tableName); + assertEquals(records.size(), 1000); + } finally { + client.execute(dropDatabaseSQL); + } } @Test(groups = {"integration"}, dataProviderClass = InsertTests.class, dataProvider = "logCommentDataProvider") From c86b6df3cfcf5632fa898858f51cc66d6d692e65 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Sat, 14 Feb 2026 11:35:58 -0800 Subject: [PATCH 03/10] Fixed create database statement --- .../src/test/java/com/clickhouse/client/insert/InsertTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java b/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java index 4488df049..724fe5212 100644 --- a/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java +++ b/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java @@ -396,7 +396,7 @@ public void testInsertMetricsOperationId() throws Exception { public void testInsertSettingsAddDatabase() throws Exception { final String tableName = "insert_settings_database_test"; final String new_database = client.getDefaultDatabase() + "_new_database"; - final String createDatabaseSQL = "CREATE IF NOT EXISTS DATABASE " + new_database; + final String createDatabaseSQL = "CREATE DATABASE IF NOT EXISTS " + new_database; final String createTableSQL = "CREATE TABLE " + new_database + "." + tableName + " (Id UInt32, event_ts Timestamp, name String, p1 Int64, p2 String) ENGINE = MergeTree() ORDER BY ()"; final String dropDatabaseSQL = "DROP DATABASE IF EXISTS " + new_database; From 97d673b421084d4292e7ab0dc58e4619c145beaf Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Sat, 14 Feb 2026 13:13:50 -0800 Subject: [PATCH 04/10] fixed networktimeout value from ms to s --- jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java index aaf4be005..1d56016bf 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java @@ -646,7 +646,7 @@ public void testNetworkTimeout() throws Exception { executorService.shutdown(); executorService.awaitTermination(20, TimeUnit.SECONDS); Assert.assertTrue(conn.isClosed()); - Assert.assertFalse(conn.isValid(5000)); + Assert.assertFalse(conn.isValid(5)); conn.close(); } @@ -666,7 +666,7 @@ public void testNetworkTimeout() throws Exception { fail("Exception expected"); } catch (Exception e) { Assert.assertFalse(conn.isClosed()); - Assert.assertTrue(conn.isValid(5000)); + Assert.assertTrue(conn.isValid(5)); } } From 6b812c7c4f981eedc599b15d3e194c60d07635a7 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Sat, 14 Feb 2026 13:36:29 -0800 Subject: [PATCH 05/10] added system output to debug CI problem --- client-v2/src/main/java/com/clickhouse/client/api/Client.java | 1 + jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java | 1 + 2 files changed, 2 insertions(+) diff --git a/client-v2/src/main/java/com/clickhouse/client/api/Client.java b/client-v2/src/main/java/com/clickhouse/client/api/Client.java index 9d983decb..c35cf4add 100644 --- a/client-v2/src/main/java/com/clickhouse/client/api/Client.java +++ b/client-v2/src/main/java/com/clickhouse/client/api/Client.java @@ -1178,6 +1178,7 @@ public boolean ping(long timeout) { return true; } } catch (Exception e) { + e.printStackTrace(); LOG.debug("Failed to connect to the server (Duration: {})", durationSince(startTime), e); return false; } diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java index b3238e872..754807461 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java @@ -474,6 +474,7 @@ public boolean isValid(int timeout) throws SQLException { throw new SQLException("Timeout must be >= 0", ExceptionUtils.SQL_STATE_CLIENT_ERROR); } if (isClosed()) { + System.out.println("Connection is closed"); return false; } return timeout == 0 From d57a8946da62dfc33038bd922eec29ff927f5c31 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Sat, 14 Feb 2026 14:14:31 -0800 Subject: [PATCH 06/10] Split test in two. Added debug output --- .../main/java/com/clickhouse/client/api/Client.java | 1 + .../test/java/com/clickhouse/jdbc/ConnectionTest.java | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/client-v2/src/main/java/com/clickhouse/client/api/Client.java b/client-v2/src/main/java/com/clickhouse/client/api/Client.java index c35cf4add..739a139fc 100644 --- a/client-v2/src/main/java/com/clickhouse/client/api/Client.java +++ b/client-v2/src/main/java/com/clickhouse/client/api/Client.java @@ -1704,6 +1704,7 @@ public CompletableFuture query(String sqlQuery, Map query(String sqlQuery, Map queryParams) { diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java index 1d56016bf..748a7377b 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java @@ -630,7 +630,8 @@ public void abortTest() throws SQLException { } @Test(groups = {"integration"}) - public void testNetworkTimeout() throws Exception { + public void testNetworkTimeoutCausesConnectionClosure() throws Exception { + System.out.println("testNetworkTimeoutCausesConnectionClosure ---- "); try (Connection conn = this.getJdbcConnection()) { Assert.assertThrows(SQLException.class, () -> conn.setNetworkTimeout(null, 1000)); Assert.assertThrows(SQLException.class, () -> conn.setNetworkTimeout(Executors.newSingleThreadExecutor(), -1)); @@ -657,6 +658,12 @@ public void testNetworkTimeout() throws Exception { Assert.assertTrue(e.getMessage().contains("closed")); } } + System.out.println("testNetworkTimeoutCausesConnectionClosure ---- "); + } + + @Test(groups = {"integration"}) + public void testHandlingTimeoutWithoutTimeoutIsSet() throws Exception { + System.out.println("testHandlingTimeoutWithoutTimeoutIsSet ---- "); Properties connConfig = new Properties(); connConfig.setProperty(ClientConfigProperties.SOCKET_OPERATION_TIMEOUT.getKey(), "10"); @@ -684,6 +691,7 @@ public void testNetworkTimeout() throws Exception { stmtExecutor.awaitTermination(10, TimeUnit.SECONDS); } } + System.out.println("testHandlingTimeoutWithoutTimeoutIsSet ---- "); } @Test(groups = { "integration" }) From 64f6c74d057d07601737c708c6dbde2a9be35638 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Sat, 14 Feb 2026 17:11:06 -0800 Subject: [PATCH 07/10] increased timeout to more realistic values --- .../java/com/clickhouse/jdbc/ConnectionTest.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java index 748a7377b..c5901db2d 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java @@ -636,18 +636,18 @@ public void testNetworkTimeoutCausesConnectionClosure() throws Exception { Assert.assertThrows(SQLException.class, () -> conn.setNetworkTimeout(null, 1000)); Assert.assertThrows(SQLException.class, () -> conn.setNetworkTimeout(Executors.newSingleThreadExecutor(), -1)); - int timeout = 10; + int timeout = (int) TimeUnit.SECONDS.toMillis(1); ExecutorService executorService = Executors.newSingleThreadExecutor(); - conn.setNetworkTimeout(executorService, timeout); + conn.setNetworkTimeout(executorService, timeout); // timeout in ms Assert.assertEquals(conn.getNetworkTimeout(), timeout); Statement stmt = conn.createStatement(); try (ResultSet rs = stmt.executeQuery("SELECT sleepEachRow(1) FROM system.numbers LIMIT 2")) { fail("Exception expected"); } catch (Exception e) { executorService.shutdown(); - executorService.awaitTermination(20, TimeUnit.SECONDS); + executorService.awaitTermination(5, TimeUnit.SECONDS); Assert.assertTrue(conn.isClosed()); - Assert.assertFalse(conn.isValid(5)); + Assert.assertFalse(conn.isValid(5)); // timeout in seconds conn.close(); } @@ -665,21 +665,22 @@ public void testNetworkTimeoutCausesConnectionClosure() throws Exception { public void testHandlingTimeoutWithoutTimeoutIsSet() throws Exception { System.out.println("testHandlingTimeoutWithoutTimeoutIsSet ---- "); + int timeout = (int) TimeUnit.SECONDS.toMillis(1); Properties connConfig = new Properties(); - connConfig.setProperty(ClientConfigProperties.SOCKET_OPERATION_TIMEOUT.getKey(), "10"); + connConfig.setProperty(ClientConfigProperties.SOCKET_OPERATION_TIMEOUT.getKey(), String.valueOf(timeout)); // in ms try (Connection conn = getJdbcConnection(connConfig)) { Statement stmt = conn.createStatement(); try (ResultSet rs = stmt.executeQuery("SELECT sleepEachRow(1) FROM system.numbers LIMIT 2")) { fail("Exception expected"); } catch (Exception e) { Assert.assertFalse(conn.isClosed()); - Assert.assertTrue(conn.isValid(5)); + Assert.assertTrue(conn.isValid(5)); // in seconds } } try (Connection conn = getJdbcConnection(connConfig)) { ExecutorService executorService = Executors.newSingleThreadExecutor(); - conn.setNetworkTimeout(executorService, 10); + conn.setNetworkTimeout(executorService, timeout); // ms try (Statement stmt1 = conn.createStatement(); Statement stmt2 = conn.createStatement()) { ScheduledExecutorService stmtExecutor = Executors.newScheduledThreadPool(2); long t1 = System.currentTimeMillis(); From 10b698fbf69d17e01b6dcca38d99dc3ae294a6ce Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Sat, 14 Feb 2026 17:38:18 -0800 Subject: [PATCH 08/10] removed debug output --- .../src/main/java/com/clickhouse/client/api/Client.java | 1 - .../src/main/java/com/clickhouse/jdbc/ConnectionImpl.java | 1 - .../src/test/java/com/clickhouse/jdbc/ConnectionTest.java | 5 ----- 3 files changed, 7 deletions(-) diff --git a/client-v2/src/main/java/com/clickhouse/client/api/Client.java b/client-v2/src/main/java/com/clickhouse/client/api/Client.java index 739a139fc..92022c858 100644 --- a/client-v2/src/main/java/com/clickhouse/client/api/Client.java +++ b/client-v2/src/main/java/com/clickhouse/client/api/Client.java @@ -1178,7 +1178,6 @@ public boolean ping(long timeout) { return true; } } catch (Exception e) { - e.printStackTrace(); LOG.debug("Failed to connect to the server (Duration: {})", durationSince(startTime), e); return false; } diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java index 754807461..b3238e872 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java @@ -474,7 +474,6 @@ public boolean isValid(int timeout) throws SQLException { throw new SQLException("Timeout must be >= 0", ExceptionUtils.SQL_STATE_CLIENT_ERROR); } if (isClosed()) { - System.out.println("Connection is closed"); return false; } return timeout == 0 diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java index c5901db2d..799a2016c 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java @@ -631,7 +631,6 @@ public void abortTest() throws SQLException { @Test(groups = {"integration"}) public void testNetworkTimeoutCausesConnectionClosure() throws Exception { - System.out.println("testNetworkTimeoutCausesConnectionClosure ---- "); try (Connection conn = this.getJdbcConnection()) { Assert.assertThrows(SQLException.class, () -> conn.setNetworkTimeout(null, 1000)); Assert.assertThrows(SQLException.class, () -> conn.setNetworkTimeout(Executors.newSingleThreadExecutor(), -1)); @@ -658,13 +657,10 @@ public void testNetworkTimeoutCausesConnectionClosure() throws Exception { Assert.assertTrue(e.getMessage().contains("closed")); } } - System.out.println("testNetworkTimeoutCausesConnectionClosure ---- "); } @Test(groups = {"integration"}) public void testHandlingTimeoutWithoutTimeoutIsSet() throws Exception { - System.out.println("testHandlingTimeoutWithoutTimeoutIsSet ---- "); - int timeout = (int) TimeUnit.SECONDS.toMillis(1); Properties connConfig = new Properties(); connConfig.setProperty(ClientConfigProperties.SOCKET_OPERATION_TIMEOUT.getKey(), String.valueOf(timeout)); // in ms @@ -692,7 +688,6 @@ public void testHandlingTimeoutWithoutTimeoutIsSet() throws Exception { stmtExecutor.awaitTermination(10, TimeUnit.SECONDS); } } - System.out.println("testHandlingTimeoutWithoutTimeoutIsSet ---- "); } @Test(groups = { "integration" }) From e1623c976341a269bba28ad89d50dc3128442979 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Sat, 14 Feb 2026 18:18:12 -0800 Subject: [PATCH 09/10] removed change from unwanted place --- client-v2/src/main/java/com/clickhouse/client/api/Client.java | 1 - 1 file changed, 1 deletion(-) diff --git a/client-v2/src/main/java/com/clickhouse/client/api/Client.java b/client-v2/src/main/java/com/clickhouse/client/api/Client.java index 92022c858..9d983decb 100644 --- a/client-v2/src/main/java/com/clickhouse/client/api/Client.java +++ b/client-v2/src/main/java/com/clickhouse/client/api/Client.java @@ -1703,7 +1703,6 @@ public CompletableFuture query(String sqlQuery, Map query(String sqlQuery, Map queryParams) { From 67bdb5a3a7a0805b15ca59220c1199ac9ce89dfb Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Sun, 15 Feb 2026 10:09:39 -0800 Subject: [PATCH 10/10] Made number of rows as constant --- .../java/com/clickhouse/client/insert/InsertTests.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java b/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java index 724fe5212..6ffdfea5e 100644 --- a/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java +++ b/client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java @@ -413,16 +413,17 @@ public void testInsertSettingsAddDatabase() throws Exception { ByteArrayOutputStream data = new ByteArrayOutputStream(); PrintWriter writer = new PrintWriter(data); - for (int i = 0; i < 1000; i++) { + final int rows = 1000; + for (int i = 0; i < rows; i++) { writer.printf("%d\t%s\t%s\t%d\t%s\n", i, "2021-01-01 00:00:00", "name" + i, i, "p2"); } writer.flush(); InsertResponse response = client.insert(tableName, new ByteArrayInputStream(data.toByteArray()), ClickHouseFormat.TSV, insertSettings).get(EXECUTE_CMD_TIMEOUT, TimeUnit.SECONDS); - assertEquals((int) response.getWrittenRows(), 1000); + assertEquals((int) response.getWrittenRows(), rows); List records = client.queryAll("SELECT * FROM " + new_database + "." + tableName); - assertEquals(records.size(), 1000); + assertEquals(records.size(), rows); } finally { client.execute(dropDatabaseSQL); }