|
27 | 27 |
|
28 | 28 | import com.clickhouse.client.ClickHouseChecker;
|
29 | 29 | import com.clickhouse.client.ClickHouseClient;
|
| 30 | +import com.clickhouse.client.ClickHouseClientBuilder; |
30 | 31 | import com.clickhouse.client.ClickHouseColumn;
|
31 | 32 | import com.clickhouse.client.ClickHouseConfig;
|
32 | 33 | import com.clickhouse.client.ClickHouseFormat;
|
33 | 34 | import com.clickhouse.client.ClickHouseNode;
|
34 | 35 | import com.clickhouse.client.ClickHouseNodeSelector;
|
| 36 | +import com.clickhouse.client.ClickHouseNodes; |
35 | 37 | import com.clickhouse.client.ClickHouseParameterizedQuery;
|
36 | 38 | import com.clickhouse.client.ClickHouseRecord;
|
37 | 39 | import com.clickhouse.client.ClickHouseRequest;
|
@@ -218,16 +220,33 @@ public ClickHouseConnectionImpl(ConnectionInfo connInfo) throws SQLException {
|
218 | 220 | jdbcConf = connInfo.getJdbcConfig();
|
219 | 221 |
|
220 | 222 | autoCommit = !jdbcConf.isJdbcCompliant() || jdbcConf.isAutoCommit();
|
221 |
| - |
222 |
| - ClickHouseNode node = connInfo.getServer(); |
223 |
| - log.debug("Connecting to: %s", node); |
224 |
| - |
225 | 223 | jvmTimeZone = TimeZone.getDefault();
|
226 | 224 |
|
227 |
| - client = ClickHouseClient.builder().options(ClickHouseDriver.toClientOptions(connInfo.getProperties())) |
228 |
| - .defaultCredentials(connInfo.getDefaultCredentials()) |
229 |
| - .nodeSelector(ClickHouseNodeSelector.of(node.getProtocol())).build(); |
230 |
| - clientRequest = client.connect(node); |
| 225 | + ClickHouseClientBuilder clientBuilder = ClickHouseClient.builder() |
| 226 | + .options(ClickHouseDriver.toClientOptions(connInfo.getProperties())) |
| 227 | + .defaultCredentials(connInfo.getDefaultCredentials()); |
| 228 | + ClickHouseNodes nodes = connInfo.getNodes(); |
| 229 | + final ClickHouseNode node; |
| 230 | + if (nodes.isSingleNode()) { |
| 231 | + try { |
| 232 | + node = nodes.apply(nodes.getNodeSelector()); |
| 233 | + } catch (Exception e) { |
| 234 | + throw SqlExceptionUtils.clientError("Failed to get single-node", e); |
| 235 | + } |
| 236 | + client = clientBuilder.nodeSelector(ClickHouseNodeSelector.of(node.getProtocol())).build(); |
| 237 | + clientRequest = client.connect(node); |
| 238 | + } else { |
| 239 | + log.debug("Selecting node from: %s", nodes); |
| 240 | + client = clientBuilder.nodeSelector(nodes.getNodeSelector()).build(); |
| 241 | + clientRequest = client.connect(nodes); |
| 242 | + try { |
| 243 | + node = clientRequest.getServer(); |
| 244 | + } catch (Exception e) { |
| 245 | + throw SqlExceptionUtils.clientError("No healthy node available", e); |
| 246 | + } |
| 247 | + } |
| 248 | + |
| 249 | + log.debug("Connecting to: %s", node); |
231 | 250 | ClickHouseConfig config = clientRequest.getConfig();
|
232 | 251 | String currentUser = null;
|
233 | 252 | TimeZone timeZone = null;
|
|
0 commit comments