Skip to content

Commit 857287c

Browse files
authored
Merge pull request #1282 from zhicwu/main
Repsect node-specific credentials
2 parents afd15ee + c55573f commit 857287c

File tree

3 files changed

+51
-19
lines changed

3 files changed

+51
-19
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* error while converting Nested values to Java maps.
55
* incorrect algorithm extracted from PEM. [#1274](https://github.com/ClickHouse/clickhouse-java/issues/1274)
66
* transaction failure introduced 0.4.0.
7+
* respect node-specific credentials. [#1114](https://github.com/ClickHouse/clickhouse-java/issues/1114)
78

89
## 0.4.1, 2023-02-19
910
### Breaking Changes

clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseRequest.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,12 @@ protected void checkSealed() {
427427
* @return non-null client
428428
*/
429429
protected ClickHouseClient getClient() {
430-
return client != null ? client : ClickHouseClient.newInstance(getServer().getProtocol());
430+
if (client != null) {
431+
return client;
432+
}
433+
434+
ClickHouseNode node = getServer();
435+
return ClickHouseClient.newInstance(node.getCredentials().orElse(null), node.getProtocol());
431436
}
432437

433438
/**
@@ -540,7 +545,7 @@ public boolean hasOutputStream() {
540545
public final ClickHouseNode getServer() {
541546
ClickHouseNode node = serverRef.get();
542547
if (node == null) {
543-
node = server.apply(getConfig().getNodeSelector());
548+
node = server.apply(getClient().getConfig().getNodeSelector());
544549
if (!serverRef.compareAndSet(null, node)) {
545550
node = serverRef.get();
546551
}
@@ -556,13 +561,15 @@ public final ClickHouseNode getServer() {
556561
public ClickHouseConfig getConfig() {
557562
if (config == null) {
558563
ClickHouseConfig clientConfig = getClient().getConfig();
559-
if (options.isEmpty()) {
564+
ClickHouseNode node = getServer();
565+
if (options.isEmpty()
566+
&& clientConfig.getDefaultCredentials().equals(node.getCredentials(clientConfig))) {
560567
config = clientConfig;
561568
} else {
562569
Map<ClickHouseOption, Serializable> merged = new HashMap<>();
563570
merged.putAll(clientConfig.getAllOptions());
564571
merged.putAll(options);
565-
config = new ClickHouseConfig(merged, clientConfig.getDefaultCredentials(),
572+
config = new ClickHouseConfig(merged, node.getCredentials(clientConfig),
566573
clientConfig.getNodeSelector(), clientConfig.getMetricRegistry().orElse(null));
567574
}
568575
}

clickhouse-client/src/test/java/com/clickhouse/client/ClickHouseRequestTest.java

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
public class ClickHouseRequestTest {
4444
@Test(groups = { "unit" })
4545
public void testBuild() {
46-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
46+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
4747
Assert.assertNotNull(request);
4848

4949
ClickHouseConfig config = request.getConfig();
@@ -85,6 +85,30 @@ public void testBuild() {
8585
Assert.assertEquals(m.getStatements().get(0), sql);
8686
}
8787

88+
@Test(groups = { "unit" })
89+
public void testCredentials() {
90+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
91+
Assert.assertNotNull(request.getConfig().getDefaultCredentials());
92+
Assert.assertEquals(request.getConfig().getDefaultCredentials().getUserName(),
93+
ClickHouseDefaults.USER.getDefaultValue());
94+
Assert.assertEquals(request.getConfig().getDefaultCredentials().getPassword(),
95+
ClickHouseDefaults.PASSWORD.getDefaultValue());
96+
97+
final String user = "somebody";
98+
final String password = "seCrets";
99+
request = ClickHouseClient.newInstance().read(ClickHouseNode.builder()
100+
.credentials(ClickHouseCredentials.fromUserAndPassword(user, password)).build());
101+
Assert.assertNotNull(request.getConfig().getDefaultCredentials());
102+
Assert.assertEquals(request.getConfig().getDefaultCredentials().getUserName(), user);
103+
Assert.assertEquals(request.getConfig().getDefaultCredentials().getPassword(), password);
104+
105+
request = ClickHouseClient.newInstance()
106+
.read(ClickHouseNode.of("tcp://localhost/default?user=" + user + "&password=" + password));
107+
Assert.assertNotNull(request.getConfig().getDefaultCredentials());
108+
Assert.assertEquals(request.getConfig().getDefaultCredentials().getUserName(), user);
109+
Assert.assertEquals(request.getConfig().getDefaultCredentials().getPassword(), password);
110+
}
111+
88112
@Test(groups = { "unit" })
89113
public void testConfigChangeListener() {
90114
final ClickHouseConfig config = new ClickHouseConfig();
@@ -111,7 +135,7 @@ public void settingChanged(ClickHouseRequest<?> source, String setting, Serializ
111135
}
112136
};
113137
final ClickHouseParameterizedQuery select3 = ClickHouseParameterizedQuery.of(config, "select 3");
114-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
138+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
115139
request.setChangeListener(listener);
116140
Assert.assertTrue(changedOptions.isEmpty(), "Should have no option changed");
117141
Assert.assertTrue(changedProperties.isEmpty(), "Should have no property changed");
@@ -173,7 +197,7 @@ public void settingChanged(ClickHouseRequest<?> source, String setting, Serializ
173197

174198
@Test(groups = { "unit" })
175199
public void testServerListener() {
176-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
200+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
177201
final List<Object[]> serverChanges = new ArrayList<>();
178202
request.setServerListener(
179203
(currentServer, newServer) -> serverChanges
@@ -199,7 +223,7 @@ public void testServerListener() {
199223

200224
@Test(groups = { "unit" })
201225
public void testCopy() {
202-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
226+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
203227
request.compressServerResponse(true, ClickHouseCompression.BROTLI, 2);
204228
request.decompressClientRequest(true, ClickHouseCompression.ZSTD, 5);
205229
request.external(ClickHouseExternalTable.builder().content(new ByteArrayInputStream(new byte[0]))
@@ -251,7 +275,7 @@ public void testCopy() {
251275

252276
@Test(groups = { "unit" })
253277
public void testFormat() {
254-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
278+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
255279
Assert.assertEquals(request.getFormat(),
256280
(ClickHouseFormat) ClickHouseDefaults.FORMAT.getEffectiveDefaultValue());
257281
request.format(ClickHouseFormat.TabSeparatedRawWithNamesAndTypes);
@@ -274,7 +298,7 @@ public void testFormat() {
274298
@Test(groups = { "unit" })
275299
public void testGetSetting() {
276300
ClickHouseRequest<?> request = ClickHouseClient.newInstance()
277-
.connect("http://localhost?custom_settings=a%3D1%2Cb%3D2");
301+
.read("http://localhost?custom_settings=a%3D1%2Cb%3D2");
278302
Assert.assertEquals(request.getSetting("a", boolean.class), true);
279303
Assert.assertEquals(request.getSetting("a", Boolean.class), true);
280304
Assert.assertEquals(request.getSetting("a", false), true);
@@ -290,7 +314,7 @@ public void testGetSetting() {
290314

291315
@Test(groups = { "unit" })
292316
public void testInputData() throws IOException {
293-
Mutation request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build()).write();
317+
Mutation request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build()).write();
294318
Assert.assertEquals(request.getConfig().getFormat(), ClickHouseDataConfig.DEFAULT_FORMAT);
295319
Assert.assertEquals(request.getConfig().getRequestCompressAlgorithm(), ClickHouseCompression.NONE);
296320
Assert.assertEquals(request.getConfig().getRequestCompressLevel(),
@@ -356,7 +380,7 @@ public void testInputData() throws IOException {
356380

357381
@Test(groups = { "unit" })
358382
public void testInputStreamAndCustomWriter() throws IOException {
359-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
383+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
360384
Assert.assertFalse(request.hasInputStream());
361385
Assert.assertFalse(request.getInputStream().isPresent());
362386
Assert.assertFalse(request.getWriter().isPresent());
@@ -401,7 +425,7 @@ public void testInputStreamAndCustomWriter() throws IOException {
401425
public void testNamedParameters() {
402426
// String sql = "select xxx from xxx settings max_execution_time =
403427
// :max_execution_time";
404-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
428+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
405429

406430
String sql = "select :a,:b,:a";
407431
request.query(sql).params("1", "2");
@@ -410,7 +434,7 @@ public void testNamedParameters() {
410434

411435
@Test(groups = { "unit" })
412436
public void testOptions() {
413-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
437+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
414438

415439
Assert.assertEquals(request.options, Collections.emptyMap());
416440
Properties props = new Properties();
@@ -430,7 +454,7 @@ public void testOptions() {
430454
@Test(groups = { "unit" })
431455
public void testParams() {
432456
String sql = "select :one as one, :two as two, * from my_table where key=:key and arr[:idx] in numbers(:range)";
433-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build())
457+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build())
434458
.query(sql);
435459
Assert.assertEquals(request.getQuery(), sql);
436460
request.params(ClickHouseByteValue.of(Byte.MIN_VALUE));
@@ -475,7 +499,7 @@ public void testParams() {
475499

476500
@Test(groups = { "unit" })
477501
public void testSeal() {
478-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
502+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
479503
request.compressServerResponse(true, ClickHouseCompression.BROTLI, 2);
480504
request.decompressClientRequest(true, ClickHouseCompression.ZSTD, 5);
481505
request.external(ClickHouseExternalTable.builder().content(new ByteArrayInputStream(new byte[0]))
@@ -504,7 +528,7 @@ public void testSeal() {
504528
@Test(groups = { "unit" })
505529
public void testSession() {
506530
String sessionId = UUID.randomUUID().toString();
507-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
531+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
508532
Assert.assertEquals(request.getSessionId().isPresent(), false);
509533
Assert.assertEquals(request.getSessionId(), Optional.empty());
510534
Assert.assertEquals(request.getConfig().isSessionCheck(), false);
@@ -563,7 +587,7 @@ public void testSession() {
563587

564588
@Test(groups = { "unit" })
565589
public void testSettings() {
566-
ClickHouseRequest<?> request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build());
590+
ClickHouseRequest<?> request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build());
567591
Assert.assertEquals(request.getStatements().size(), 0);
568592
request.set("enable_optimize_predicate_expression", 1);
569593
Assert.assertEquals(request.getStatements().size(), 1);
@@ -576,7 +600,7 @@ public void testSettings() {
576600

577601
@Test(groups = { "unit" })
578602
public void testMutation() {
579-
Mutation request = ClickHouseClient.newInstance().connect(ClickHouseNode.builder().build()).write();
603+
Mutation request = ClickHouseClient.newInstance().read(ClickHouseNode.builder().build()).write();
580604
request.table("test_table").format(ClickHouseFormat.Arrow).data(new ByteArrayInputStream(new byte[0]));
581605

582606
String expectedSql = "INSERT INTO test_table\n FORMAT Arrow";

0 commit comments

Comments
 (0)