Skip to content

Commit 2c7976b

Browse files
committed
improved code and added one more test
1 parent 48b092c commit 2c7976b

File tree

3 files changed

+29
-16
lines changed

3 files changed

+29
-16
lines changed

jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22

33
import com.clickhouse.client.api.Client;
44
import com.clickhouse.client.api.ClientConfigProperties;
5-
import com.clickhouse.client.api.ClientException;
6-
import com.clickhouse.client.api.data_formats.ClickHouseBinaryFormatReader;
75
import com.clickhouse.client.api.internal.ServerSettings;
86
import com.clickhouse.client.api.metadata.TableSchema;
97
import com.clickhouse.client.api.query.GenericRecord;
10-
import com.clickhouse.client.api.query.QueryResponse;
118
import com.clickhouse.client.api.query.QuerySettings;
129
import com.clickhouse.data.ClickHouseDataType;
13-
import com.clickhouse.data.ClickHouseFormat;
1410
import com.clickhouse.jdbc.internal.ExceptionUtils;
1511
import com.clickhouse.jdbc.internal.JdbcConfiguration;
1612
import com.clickhouse.jdbc.internal.JdbcUtils;
@@ -20,7 +16,6 @@
2016
import org.slf4j.Logger;
2117
import org.slf4j.LoggerFactory;
2218

23-
import java.io.Closeable;
2419
import java.sql.Array;
2520
import java.sql.Blob;
2621
import java.sql.CallableStatement;
@@ -49,7 +44,6 @@
4944
import java.util.Properties;
5045
import java.util.Set;
5146
import java.util.concurrent.Executor;
52-
import java.util.concurrent.TimeUnit;
5347
import java.util.stream.Collectors;
5448

5549
public class ConnectionImpl implements Connection, JdbcV2Wrapper {
@@ -643,9 +637,9 @@ public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLExc
643637

644638

645639
// Should be called by child object to notify about timeout.
646-
public void onNetworkTimeout() throws SQLException {
647-
if (isClosed() || networkTimeoutExecutor == null) {
648-
return; // we closed already so do nothing.
640+
public synchronized void onNetworkTimeout() {
641+
if (this.closed || networkTimeoutExecutor == null) {
642+
return; // we closed already or have not set network timeout so do nothing.
649643
}
650644

651645
networkTimeoutExecutor.execute(() -> {

jdbc-v2/src/main/java/com/clickhouse/jdbc/StatementImpl.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,7 @@ protected ResultSetImpl executeQueryImpl(String sql, QuerySettings settings) thr
183183

184184
protected void handleSocketTimeoutException(Exception e) {
185185
if (e.getCause() instanceof SocketTimeoutException || e instanceof SocketTimeoutException) {
186-
try {
187-
this.connection.onNetworkTimeout();
188-
} catch (SQLException e1) {
189-
LOG.warn("Failed to handle network timeout exception", e1);
190-
}
186+
this.connection.onNetworkTimeout();
191187
}
192188
}
193189

jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.UUID;
3131
import java.util.concurrent.ExecutorService;
3232
import java.util.concurrent.Executors;
33+
import java.util.concurrent.ScheduledExecutorService;
3334
import java.util.concurrent.TimeUnit;
3435

3536
import static org.testng.Assert.assertEquals;
@@ -425,10 +426,32 @@ public void testNetworkTimeout() throws Exception {
425426
Assert.assertTrue(e.getMessage().contains("closed"));
426427
}
427428
}
428-
try {
429429

430-
} catch (Exception e) {
430+
Properties connConfig = new Properties();
431+
connConfig.setProperty(ClientConfigProperties.SOCKET_OPERATION_TIMEOUT.getKey(), "10");
432+
try (Connection conn = getJdbcConnection(connConfig)) {
433+
Statement stmt = conn.createStatement();
434+
try (ResultSet rs = stmt.executeQuery("SELECT sleepEachRow(1) FROM system.numbers LIMIT 2")) {
435+
fail("Exception expected");
436+
} catch (Exception e) {
437+
Assert.assertFalse(conn.isClosed());
438+
Assert.assertTrue(conn.isValid(1000));
439+
}
440+
}
431441

442+
try (Connection conn = getJdbcConnection(connConfig)) {
443+
ExecutorService executorService = Executors.newSingleThreadExecutor();
444+
conn.setNetworkTimeout(executorService, 10);
445+
try (Statement stmt1 = conn.createStatement(); Statement stmt2 = conn.createStatement()) {
446+
ScheduledExecutorService stmtExecutor = Executors.newScheduledThreadPool(2);
447+
long t1 = System.currentTimeMillis();
448+
stmtExecutor.schedule(() -> stmt1.executeQuery("SELECT sleepEachRow(1) FROM system.numbers LIMIT 2"), 100, TimeUnit.MILLISECONDS);
449+
long t2 = System.currentTimeMillis() - t1;
450+
stmtExecutor.schedule(() -> stmt2.executeQuery("SELECT sleepEachRow(1) FROM system.numbers LIMIT 1"), 100 - t2, TimeUnit.MILLISECONDS);
451+
452+
stmtExecutor.shutdown();
453+
stmtExecutor.awaitTermination(10, TimeUnit.SECONDS);
454+
}
432455
}
433456
}
434457

0 commit comments

Comments
 (0)