This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new 6fe7c9087e3 branch-2.1: [hotfix](jdbc catalog) Fix jdbcclient repeated
initialization (#51038)
6fe7c9087e3 is described below
commit 6fe7c9087e38d0891799275ade725fae3e29d71b
Author: zy-kkk <[email protected]>
AuthorDate: Wed May 21 12:05:30 2025 +0800
branch-2.1: [hotfix](jdbc catalog) Fix jdbcclient repeated initialization
(#51038)
pick #51036
---
.../doris/datasource/jdbc/JdbcExternalCatalog.java | 50 +++++++++++++---------
1 file changed, 29 insertions(+), 21 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java
index 34afa08ff8d..b562a0329fb 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java
@@ -220,6 +220,10 @@ public class JdbcExternalCatalog extends ExternalCatalog {
@Override
protected void initLocalObjectsImpl() {
+ jdbcClient = createJdbcClient();
+ }
+
+ private JdbcClient createJdbcClient() {
JdbcClientConfig jdbcClientConfig = new JdbcClientConfig()
.setCatalog(this.name)
.setUser(getJdbcUser())
@@ -236,7 +240,7 @@ public class JdbcExternalCatalog extends ExternalCatalog {
.setConnectionPoolMaxWaitTime(getConnectionPoolMaxWaitTime())
.setConnectionPoolKeepAlive(isConnectionPoolKeepAlive());
- jdbcClient = JdbcClient.createJdbcClient(jdbcClientConfig);
+ return JdbcClient.createJdbcClient(jdbcClientConfig);
}
@Override
@@ -337,9 +341,13 @@ public class JdbcExternalCatalog extends ExternalCatalog {
public void configureJdbcTable(JdbcTable jdbcTable, String tableName) {
makeSureInitialized();
+ setCommonJdbcTableProperties(jdbcTable, tableName, this.jdbcClient);
+ }
+
+ private void setCommonJdbcTableProperties(JdbcTable jdbcTable, String
tableName, JdbcClient jdbcClient) {
jdbcTable.setCatalogId(this.getId());
jdbcTable.setExternalTableName(tableName);
- jdbcTable.setJdbcTypeName(this.getDatabaseTypeName());
+ jdbcTable.setJdbcTypeName(jdbcClient.getDbType());
jdbcTable.setJdbcUrl(this.getJdbcUrl());
jdbcTable.setJdbcUser(this.getJdbcUser());
jdbcTable.setJdbcPasswd(this.getJdbcPasswd());
@@ -360,22 +368,23 @@ public class JdbcExternalCatalog extends ExternalCatalog {
return;
}
if (isTestConnection()) {
+ JdbcClient testClient = null;
try {
- initLocalObjectsImpl();
- testFeToJdbcConnection();
- testBeToJdbcConnection();
+ testClient = createJdbcClient();
+ testFeToJdbcConnection(testClient);
+ testBeToJdbcConnection(testClient);
} finally {
- if (jdbcClient != null) {
- jdbcClient.closeClient();
- jdbcClient = null;
+ if (testClient != null) {
+ testClient.closeClient();
+ testClient = null;
}
}
}
}
- private void testFeToJdbcConnection() throws DdlException {
+ private void testFeToJdbcConnection(JdbcClient testClient) throws
DdlException {
try {
- jdbcClient.testConnection();
+ testClient.testConnection();
} catch (JdbcClientException e) {
String errorMessage = "Test FE Connection to JDBC Failed: " +
e.getMessage();
LOG.warn(errorMessage, e);
@@ -383,7 +392,7 @@ public class JdbcExternalCatalog extends ExternalCatalog {
}
}
- private void testBeToJdbcConnection() throws DdlException {
+ private void testBeToJdbcConnection(JdbcClient testClient) throws
DdlException {
Backend aliveBe = null;
for (Backend be :
Env.getCurrentSystemInfo().getIdToBackend().values()) {
if (be.isAlive()) {
@@ -395,11 +404,11 @@ public class JdbcExternalCatalog extends ExternalCatalog {
}
TNetworkAddress address = new TNetworkAddress(aliveBe.getHost(),
aliveBe.getBrpcPort());
try {
- JdbcTable jdbcTable = getTestConnectionJdbcTable();
+ JdbcTable testTable = getTestConnectionJdbcTable(testClient);
PJdbcTestConnectionRequest request =
InternalService.PJdbcTestConnectionRequest.newBuilder()
- .setJdbcTable(ByteString.copyFrom(new
TSerializer().serialize(jdbcTable.toThrift())))
- .setJdbcTableType(jdbcTable.getJdbcTableType().getValue())
- .setQueryStr(jdbcClient.getTestQuery()).build();
+ .setJdbcTable(ByteString.copyFrom(new
TSerializer().serialize(testTable.toThrift())))
+ .setJdbcTableType(testTable.getJdbcTableType().getValue())
+ .setQueryStr(testClient.getTestQuery()).build();
InternalService.PJdbcTestConnectionResult result = null;
Future<PJdbcTestConnectionResult> future =
BackendServiceProxy.getInstance()
.testJdbcConnection(address, request);
@@ -413,14 +422,13 @@ public class JdbcExternalCatalog extends ExternalCatalog {
}
}
- private JdbcTable getTestConnectionJdbcTable() throws DdlException {
- JdbcTable jdbcTable = new JdbcTable(0, "test_jdbc_connection",
Lists.newArrayList(),
+ private JdbcTable getTestConnectionJdbcTable(JdbcClient testClient) throws
DdlException {
+ JdbcTable testTable = new JdbcTable(0, "test_jdbc_connection",
Lists.newArrayList(),
TableType.JDBC_EXTERNAL_TABLE);
- this.configureJdbcTable(jdbcTable, "test_jdbc_connection");
-
+ setCommonJdbcTableProperties(testTable, "test_jdbc_connection",
testClient);
// Special checksum computation
-
jdbcTable.setCheckSum(JdbcResource.computeObjectChecksum(this.getDriverUrl()));
+
testTable.setCheckSum(JdbcResource.computeObjectChecksum(this.getDriverUrl()));
- return jdbcTable;
+ return testTable;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]