Skip to content

Commit 5609c18

Browse files
authored
Merge pull request #1772 from ClickHouse/small_fixes
[client-v2] Connection reuse strategy parameter
2 parents 82f8b21 + 00b6d04 commit 5609c18

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

client-v2/src/main/java/com/clickhouse/client/api/internal/HttpAPIClientHelper.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.clickhouse.client.api.Client;
66
import com.clickhouse.client.api.ClientException;
77
import com.clickhouse.client.api.ClientMisconfigurationException;
8+
import com.clickhouse.client.api.ConnectionReuseStrategy;
89
import com.clickhouse.client.api.ServerException;
910
import com.clickhouse.client.api.enums.ProxyType;
1011
import com.clickhouse.client.config.ClickHouseClientOption;
@@ -158,8 +159,21 @@ private HttpClientConnectionManager basicConnectionManager(SSLContext sslContext
158159

159160
private HttpClientConnectionManager poolConnectionManager(SSLContext sslContext, SocketConfig socketConfig) {
160161
PoolingHttpClientConnectionManagerBuilder connMgrBuilder = PoolingHttpClientConnectionManagerBuilder.create()
161-
.setConnPoolPolicy(PoolReusePolicy.LIFO)
162-
.setPoolConcurrencyPolicy(PoolConcurrencyPolicy.STRICT);
162+
.setPoolConcurrencyPolicy(PoolConcurrencyPolicy.LAX);
163+
164+
ConnectionReuseStrategy connectionReuseStrategy =
165+
ConnectionReuseStrategy.valueOf(chConfiguration.get("connection_reuse_strategy"));
166+
switch (connectionReuseStrategy) {
167+
case LIFO:
168+
connMgrBuilder.setConnPoolPolicy(PoolReusePolicy.LIFO);
169+
break;
170+
case FIFO:
171+
connMgrBuilder.setConnPoolPolicy(PoolReusePolicy.FIFO);
172+
break;
173+
default:
174+
throw new ClientMisconfigurationException("Unknown connection reuse strategy: " + connectionReuseStrategy);
175+
}
176+
LOG.info("Connection reuse strategy: {}", connectionReuseStrategy);
163177

164178
connMgrBuilder.setDefaultConnectionConfig(createConnectionConfig());
165179
connMgrBuilder.setMaxConnTotal(Integer.MAX_VALUE); // as we do not know how many routes we will have

client-v2/src/test/java/com/clickhouse/client/ConnectionManagementTests.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.clickhouse.client.api.Client;
44
import com.clickhouse.client.api.ConnectionInitiationException;
5+
import com.clickhouse.client.api.ConnectionReuseStrategy;
56
import com.clickhouse.client.api.enums.ProxyType;
67
import com.clickhouse.client.api.query.GenericRecord;
78
import com.clickhouse.client.api.query.QueryResponse;
@@ -150,17 +151,39 @@ public void testConnectionRequestTimeout() {
150151

151152
try (Client client = clientBuilder.build()) {
152153
CompletableFuture<QueryResponse> f1 = client.query("select 1");
154+
Thread.sleep(500L);
153155
CompletableFuture<QueryResponse> f2 = client.query("select 1");
154156
f2.get();
155157
} catch (ExecutionException e) {
156158
e.printStackTrace();
157-
Assert.assertTrue(e.getCause() instanceof ConnectionInitiationException);
158-
Assert.assertTrue(e.getCause().getCause() instanceof ConnectionRequestTimeoutException);
159+
Assert.assertEquals(e.getCause().getClass(), ConnectionInitiationException.class);
160+
Assert.assertEquals(e.getCause().getCause().getClass(), ConnectionRequestTimeoutException.class);
159161
} catch (Exception e) {
160162
e.printStackTrace();
161163
Assert.fail("Unexpected exception", e);
162164
} finally {
163165
proxy.stop();
164166
}
165167
}
168+
169+
@Test
170+
public void testConnectionReuseStrategy() {
171+
ClickHouseNode server = getServer(ClickHouseProtocol.HTTP);
172+
173+
try (Client client = new Client.Builder()
174+
.addEndpoint(server.getBaseUri())
175+
.setUsername("default")
176+
.setPassword(getPassword())
177+
.useNewImplementation(true)
178+
.setConnectionReuseStrategy(ConnectionReuseStrategy.LIFO)
179+
.build()) {
180+
181+
List<GenericRecord> records = client.queryAll("SELECT timezone()");
182+
Assert.assertTrue(records.size() > 0);
183+
Assert.assertEquals(records.get(0).getString(1), "UTC");
184+
} catch (Exception e) {
185+
e.printStackTrace();
186+
Assert.fail(e.getMessage());
187+
}
188+
}
166189
}

0 commit comments

Comments
 (0)