Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,10 @@ public boolean isTestConnection() {

@Override
protected void initLocalObjectsImpl() {
jdbcClient = createJdbcClient();
}

private JdbcClient createJdbcClient() {
JdbcClientConfig jdbcClientConfig = new JdbcClientConfig()
.setCatalog(this.name)
.setUser(getJdbcUser())
Expand All @@ -236,7 +240,7 @@ protected void initLocalObjectsImpl() {
.setConnectionPoolMaxWaitTime(getConnectionPoolMaxWaitTime())
.setConnectionPoolKeepAlive(isConnectionPoolKeepAlive());

jdbcClient = JdbcClient.createJdbcClient(jdbcClientConfig);
return JdbcClient.createJdbcClient(jdbcClientConfig);
}

@Override
Expand Down Expand Up @@ -337,9 +341,13 @@ public List<Column> getColumnsFromQuery(String query) {

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());
Expand All @@ -360,30 +368,31 @@ private void testJdbcConnection() throws DdlException {
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);
throw new DdlException(errorMessage, e);
}
}

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()) {
Expand All @@ -395,11 +404,11 @@ private void testBeToJdbcConnection() throws DdlException {
}
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);
Expand All @@ -413,14 +422,13 @@ private void testBeToJdbcConnection() throws DdlException {
}
}

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;
}
}