Skip to content

Commit 53543e8

Browse files
committed
Added handling unknown configuration parameters in client
1 parent 53609c5 commit 53543e8

File tree

4 files changed

+41
-3
lines changed

4 files changed

+41
-3
lines changed

client-v2/src/main/java/com/clickhouse/client/api/Client.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ public Builder setOption(String key, String value) {
345345
if (key.equals(ClientConfigProperties.BEARERTOKEN_AUTH.getKey())) {
346346
useBearerTokenAuth(value);
347347
}
348+
348349
return this;
349350
}
350351

client-v2/src/main/java/com/clickhouse/client/api/ClientConfigProperties.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ public Object parseValue(String value) {
184184
SSL_SOCKET_SNI("ssl_socket_sni", String.class,""),
185185
;
186186

187+
public static final String NO_THROW_ON_UNKNOWN_CONFIG = "no_throw_on_unknown_config";
188+
187189
private static final Logger LOG = LoggerFactory.getLogger(ClientConfigProperties.class);
188190

189191
private final String key;
@@ -341,7 +343,12 @@ public static Map<String, Object> parseConfigMap(Map<String, String> configMap)
341343
}
342344

343345
if (!tmpMap.isEmpty()) {
344-
LOG.warn("Unknown and unmapped config properties: {}", tmpMap);
346+
String msg = "Unknown and unmapped config properties: " + tmpMap.keySet();
347+
if (configMap.containsKey(NO_THROW_ON_UNKNOWN_CONFIG)) {
348+
LOG.warn(msg);
349+
} else {
350+
throw new ClientMisconfigurationException(msg);
351+
}
345352
}
346353

347354
return parsedConfig;
@@ -401,8 +408,6 @@ public static Map<String, String> toKeyValuePairs(String str) {
401408
return Collections.unmodifiableMap(map);
402409
}
403410

404-
405-
406411
public static String mapToString(Map<?,?> map, Function<Object, String> valueConverter) {
407412
StringBuilder sb = new StringBuilder();
408413
for (Map.Entry<?, ?> entry : map.entrySet()) {

client-v2/src/main/java/com/clickhouse/client/api/ServerException.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ public class ServerException extends ClickHouseException {
66

77
public static final int TABLE_NOT_FOUND = 60;
88

9+
public static final int UNKNOWN_SETTING = 115;
10+
911
private final int code;
1012

1113
private final int transportProtocolCode;

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import com.clickhouse.client.api.ClientConfigProperties;
55
import com.clickhouse.client.api.ClientException;
66
import com.clickhouse.client.api.ClientFaultCause;
7+
import com.clickhouse.client.api.ClientMisconfigurationException;
78
import com.clickhouse.client.api.ConnectionReuseStrategy;
9+
import com.clickhouse.client.api.ServerException;
810
import com.clickhouse.client.api.command.CommandResponse;
911
import com.clickhouse.client.api.enums.Protocol;
1012
import com.clickhouse.client.api.insert.InsertSettings;
@@ -27,6 +29,7 @@
2729
import org.testng.annotations.DataProvider;
2830
import org.testng.annotations.Test;
2931
import org.testng.util.Strings;
32+
import wiremock.org.eclipse.jetty.server.Server;
3033

3134
import java.io.ByteArrayInputStream;
3235
import java.net.ConnectException;
@@ -443,6 +446,33 @@ public void testServerSettings() throws Exception {
443446
}
444447
}
445448

449+
@Test(groups = {"integration"})
450+
public void testUnknownClientSettings() throws Exception {
451+
try (Client client = newClient().setOption("unknown_setting", "value").build()) {
452+
Assert.fail("Exception expected");
453+
} catch (Exception ex) {
454+
Assert.assertTrue(ex instanceof ClientMisconfigurationException);
455+
Assert.assertTrue(ex.getMessage().contains("unknown_setting"));
456+
}
457+
458+
try (Client client = newClient().setOption(ClientConfigProperties.NO_THROW_ON_UNKNOWN_CONFIG, "what ever").setOption("unknown_setting", "value").build()) {
459+
Assert.assertTrue(client.ping());
460+
}
461+
462+
try (Client client = newClient().setOption(ClientConfigProperties.SERVER_SETTING_PREFIX + "unknown_setting", "value").build()) {
463+
try {
464+
client.execute("SELECT 1");
465+
Assert.fail("Exception expected");
466+
} catch (ServerException e) {
467+
Assert.assertEquals(e.getCode(), ServerException.UNKNOWN_SETTING);
468+
}
469+
}
470+
471+
try (Client client = newClient().setOption(ClientConfigProperties.HTTP_HEADER_PREFIX + "unknown_setting", "value").build()) {
472+
Assert.assertTrue(client.ping());
473+
}
474+
}
475+
446476
public boolean isVersionMatch(String versionExpression, Client client) {
447477
List<GenericRecord> serverVersion = client.queryAll("SELECT version()");
448478
return ClickHouseVersion.of(serverVersion.get(0).getString(1)).check(versionExpression);

0 commit comments

Comments
 (0)