fix(agents): add url params for cassandra driver

This commit is contained in:
K 2026-07-08 19:32:52 +03:00 committed by GitHub
parent ee34a17e82
commit 1d64d66184
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 2 deletions

View File

@ -163,7 +163,13 @@ public final class CassandraAgent extends AbstractJdbcAgent {
String baseUrl = "jdbc:cassandra://" + params.getHost() + ":" + params.getPort();
String keyspace = coalesce(params.getDatabase()).trim();
// Cassandra rejects an empty keyspace path; omit it so DBX can connect first and list keyspaces.
return keyspace.isEmpty() ? baseUrl : baseUrl + "/" + keyspace;
String url = keyspace.isEmpty() ? baseUrl : baseUrl + "/" + keyspace;
// Multi-DC clusters require localdatacenter=<dc>
String extraParams = coalesce(params.getUrl_params()).trim();
while (extraParams.startsWith("?") || extraParams.startsWith("&")) {
extraParams = extraParams.substring(1);
}
return extraParams.isEmpty() ? url : url + "?" + extraParams;
}
private static List<String> targetColumns(String options) {

View File

@ -31,4 +31,22 @@ class CassandraAgentTest extends JdbcFakeExecutionBehaviorTest {
assertEquals("jdbc:cassandra://127.0.0.1:9042/app_keyspace", CassandraAgent.buildUrl(params));
}
@Test
void appendsUrlParamsForMultiDcLocalDatacenter() {
ConnectParams params = new ConnectParams(
"127.0.0.1", 9042, "app_keyspace", "cassandra", "cassandra", "localdatacenter=dc1", "", false
);
assertEquals("jdbc:cassandra://127.0.0.1:9042/app_keyspace?localdatacenter=dc1", CassandraAgent.buildUrl(params));
}
@Test
void stripsLeadingQuestionMarkFromUrlParams() {
ConnectParams params = new ConnectParams(
"127.0.0.1", 9042, "", "cassandra", "cassandra", "?localdatacenter=dc1", "", false
);
assertEquals("jdbc:cassandra://127.0.0.1:9042?localdatacenter=dc1", CassandraAgent.buildUrl(params));
}
}

View File

@ -4575,7 +4575,9 @@ function openExternalUrl(url: string) {
? 'CLIENT_LOCALE=en_US.utf8;DB_LOCALE=en_US.utf8'
: form.db_type === 'spark'
? 'catalog=paimon_catalog'
: 'sslmode=disable'
: form.db_type === 'cassandra'
? 'localdatacenter=dc1'
: 'sslmode=disable'
"
/>
</div>