This is an automated email from the ASF dual-hosted git repository.
panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 3c5edf81232 Refactor DatabaseDiscoveryType (#17016)
3c5edf81232 is described below
commit 3c5edf812329eee36ea105f9301a8a24d4d71ca9
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Apr 22 22:39:15 2022 +0800
Refactor DatabaseDiscoveryType (#17016)
---
.../dbdiscovery/spi/DatabaseDiscoveryType.java | 5 ++--
.../algorithm/DatabaseDiscoveryEngine.java | 11 ++++----
.../fixture/CoreFixtureDatabaseDiscoveryType.java | 5 ++--
.../DistSQLFixtureDatabaseDiscoveryType.java | 5 ++--
.../mysql/AbstractDatabaseDiscoveryType.java | 31 +++++++++++-----------
.../mysql/type/MGRDatabaseDiscoveryType.java | 9 ++++---
.../type/ShowSlaveStatusDatabaseDiscoveryType.java | 13 ++++-----
.../opengauss/OpenGaussDatabaseDiscoveryType.java | 8 +++---
8 files changed, 46 insertions(+), 41 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryType.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryType.java
index 7405b6e6121..b704cc285cc 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryType.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryType.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithm;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Map;
+import java.util.Optional;
/**
* Database discovery type.
@@ -41,9 +42,9 @@ public interface DatabaseDiscoveryType extends
ShardingSphereAlgorithm {
* Determine primary data source.
*
* @param dataSourceMap data source map
- * @return primary data source name
+ * @return determined name of primary data source
*/
- String determinePrimaryDataSource(Map<String, DataSource> dataSourceMap);
+ Optional<String> determinePrimaryDataSource(Map<String, DataSource>
dataSourceMap);
/**
* Update member state.
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
index 51f091abbb4..d9996417e3d 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
@@ -28,6 +28,7 @@ import java.sql.SQLException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import java.util.Optional;
/**
* Database discovery engine.
@@ -57,13 +58,13 @@ public final class DatabaseDiscoveryEngine {
* @param groupName group name
*/
public void updatePrimaryDataSource(final String databaseName, final
Map<String, DataSource> dataSourceMap, final Collection<String>
disabledDataSourceNames, final String groupName) {
- String newPrimaryDataSource =
databaseDiscoveryType.determinePrimaryDataSource(getActiveDataSourceMap(dataSourceMap,
disabledDataSourceNames));
- if (newPrimaryDataSource.isEmpty()) {
+ Optional<String> newPrimaryDataSource =
databaseDiscoveryType.determinePrimaryDataSource(getActiveDataSourceMap(dataSourceMap,
disabledDataSourceNames));
+ if (!newPrimaryDataSource.isPresent()) {
return;
}
- if
(!newPrimaryDataSource.equals(databaseDiscoveryType.getOldPrimaryDataSource()))
{
-
databaseDiscoveryType.setOldPrimaryDataSource(newPrimaryDataSource);
- ShardingSphereEventBus.getInstance().post(new
PrimaryDataSourceChangedEvent(new QualifiedDatabase(databaseName, groupName,
newPrimaryDataSource)));
+ if
(!newPrimaryDataSource.get().equals(databaseDiscoveryType.getOldPrimaryDataSource()))
{
+
databaseDiscoveryType.setOldPrimaryDataSource(newPrimaryDataSource.get());
+ ShardingSphereEventBus.getInstance().post(new
PrimaryDataSourceChangedEvent(new QualifiedDatabase(databaseName, groupName,
newPrimaryDataSource.get())));
}
}
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreFixtureDatabaseDiscoveryType.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreFixtureDatabaseDiscoveryType.java
index ff3f6d2a27b..d1367c73fc0 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreFixtureDatabaseDiscoveryType.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreFixtureDatabaseDiscoveryType.java
@@ -21,6 +21,7 @@ import
org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType;
import javax.sql.DataSource;
import java.util.Map;
+import java.util.Optional;
public final class CoreFixtureDatabaseDiscoveryType implements
DatabaseDiscoveryType {
@@ -29,8 +30,8 @@ public final class CoreFixtureDatabaseDiscoveryType
implements DatabaseDiscovery
}
@Override
- public String determinePrimaryDataSource(final Map<String, DataSource>
dataSourceMap) {
- return "primary";
+ public Optional<String> determinePrimaryDataSource(final Map<String,
DataSource> dataSourceMap) {
+ return Optional.of("primary");
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLFixtureDatabaseDiscoveryType.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLFixtureDatabas
[...]
index 083b27e127c..947baace8f9 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLFixtureDatabaseDiscoveryType.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLFixtureDatabaseDiscoveryType.java
@@ -21,6 +21,7 @@ import
org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType;
import javax.sql.DataSource;
import java.util.Map;
+import java.util.Optional;
public final class DistSQLFixtureDatabaseDiscoveryType implements
DatabaseDiscoveryType {
@@ -29,8 +30,8 @@ public final class DistSQLFixtureDatabaseDiscoveryType
implements DatabaseDiscov
}
@Override
- public String determinePrimaryDataSource(final Map<String, DataSource>
dataSourceMap) {
- return null;
+ public Optional<String> determinePrimaryDataSource(final Map<String,
DataSource> dataSourceMap) {
+ return Optional.empty();
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/AbstractDatabaseDiscoveryType.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/AbstractDatabaseDiscoveryType.java
index f552c327822..c827cdcb54f 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/AbstractDatabaseDiscoveryType.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/AbstractDatabaseDiscoveryType.java
@@ -27,6 +27,8 @@ import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
/**
* Abstract database discovery type.
@@ -38,21 +40,18 @@ public abstract class AbstractDatabaseDiscoveryType
implements DatabaseDiscovery
private String oldPrimaryDataSource;
- protected abstract String getPrimaryDataSourceURL(Statement statement)
throws SQLException;
-
@Override
- public final String determinePrimaryDataSource(final Map<String,
DataSource> dataSourceMap) {
- String primaryDataSourceURL = findPrimaryDataSourceURL(dataSourceMap);
- return findPrimaryDataSourceName(primaryDataSourceURL, dataSourceMap);
+ public final Optional<String> determinePrimaryDataSource(final Map<String,
DataSource> dataSourceMap) {
+ return
findPrimaryDataSourceName(loadPrimaryDataSourceURL(dataSourceMap),
dataSourceMap);
}
- private String findPrimaryDataSourceURL(final Map<String, DataSource>
dataSourceMap) {
+ private String loadPrimaryDataSourceURL(final Map<String, DataSource>
dataSourceMap) {
for (DataSource each : dataSourceMap.values()) {
try (Connection connection = each.getConnection();
Statement statement = connection.createStatement()) {
- String primaryDataSourceURL =
getPrimaryDataSourceURL(statement);
- if (!primaryDataSourceURL.isEmpty()) {
- return primaryDataSourceURL;
+ Optional<String> primaryDataSourceURL =
loadPrimaryDataSourceURL(statement);
+ if (primaryDataSourceURL.isPresent()) {
+ return primaryDataSourceURL.get();
}
} catch (final SQLException ex) {
log.error("An exception occurred while find primary data
source url", ex);
@@ -61,20 +60,20 @@ public abstract class AbstractDatabaseDiscoveryType
implements DatabaseDiscovery
return "";
}
- private String findPrimaryDataSourceName(final String
primaryDataSourceURL, final Map<String, DataSource> dataSourceMap) {
- String result = "";
- for (Map.Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
- String url;
+ protected abstract Optional<String> loadPrimaryDataSourceURL(Statement
statement) throws SQLException;
+
+ private Optional<String> findPrimaryDataSourceName(final String
primaryDataSourceURL, final Map<String, DataSource> dataSourceMap) {
+ for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
try (Connection connection = entry.getValue().getConnection()) {
- url = connection.getMetaData().getURL();
+ String url = connection.getMetaData().getURL();
if (null != url && url.contains(primaryDataSourceURL)) {
- return entry.getKey();
+ return Optional.of(entry.getKey());
}
} catch (final SQLException ex) {
log.error("An exception occurred while find primary data
source name", ex);
}
}
- return result;
+ return Optional.empty();
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MGRDatabaseDiscoveryType.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MGRDatabaseDiscoveryType.java
index 7f800400035..f950d08f8b0 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MGRDatabaseDiscoveryType.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MGRDatabaseDiscoveryType.java
@@ -38,6 +38,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.Properties;
/**
@@ -65,7 +66,7 @@ public final class MGRDatabaseDiscoveryType extends
AbstractDatabaseDiscoveryTyp
@Override
public void checkDatabaseDiscoveryConfiguration(final String databaseName,
final Map<String, DataSource> dataSourceMap) throws SQLException {
- try (Connection connection =
dataSourceMap.values().stream().findFirst().get().getConnection();
+ try (Connection connection =
dataSourceMap.values().iterator().next().getConnection();
Statement statement = connection.createStatement()) {
checkPluginIsActive(statement);
checkMemberCount(statement);
@@ -143,12 +144,12 @@ public final class MGRDatabaseDiscoveryType extends
AbstractDatabaseDiscoveryTyp
}
@Override
- protected String getPrimaryDataSourceURL(final Statement statement) throws
SQLException {
+ protected Optional<String> loadPrimaryDataSourceURL(final Statement
statement) throws SQLException {
try (ResultSet resultSet =
statement.executeQuery(PRIMARY_DATA_SOURCE)) {
if (resultSet.next()) {
- return String.format("%s:%s",
resultSet.getString("MEMBER_HOST"), resultSet.getString("MEMBER_PORT"));
+ return Optional.of(String.format("%s:%s",
resultSet.getString("MEMBER_HOST"), resultSet.getString("MEMBER_PORT")));
}
- return "";
+ return Optional.empty();
}
}
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/ShowSlaveStatusDatabaseDiscoveryType.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/ShowSlaveStatusDatabaseDiscoveryType.java
index d04d3fce8d9..933fb22ac3f 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/ShowSlaveStatusDatabaseDiscoveryType.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/ShowSlaveStatusDatabaseDiscoveryType.java
@@ -37,6 +37,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.Properties;
/**
@@ -63,9 +64,9 @@ public final class ShowSlaveStatusDatabaseDiscoveryType
extends AbstractDatabase
for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
try (Connection connection = entry.getValue().getConnection();
Statement statement = connection.createStatement()) {
- String url = getPrimaryDataSourceURL(statement);
- if (!url.isEmpty() && !result.contains(url)) {
- result.add(url);
+ Optional<String> url = loadPrimaryDataSourceURL(statement);
+ if (url.isPresent() && !result.contains(url.get())) {
+ result.add(url.get());
}
}
}
@@ -73,16 +74,16 @@ public final class ShowSlaveStatusDatabaseDiscoveryType
extends AbstractDatabase
}
@Override
- protected String getPrimaryDataSourceURL(final Statement statement) throws
SQLException {
+ protected Optional<String> loadPrimaryDataSourceURL(final Statement
statement) throws SQLException {
try (ResultSet resultSet = statement.executeQuery(SHOW_SLAVE_STATUS)) {
if (resultSet.next()) {
String masterHost = resultSet.getString("Master_Host");
String masterPort = resultSet.getString("Master_Port");
if (null != masterHost && null != masterPort) {
- return String.format("%s:%s", masterHost, masterPort);
+ return Optional.of(String.format("%s:%s", masterHost,
masterPort));
}
}
- return "";
+ return Optional.empty();
}
}
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussDatabaseDiscoveryType.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussDatabaseDiscoveryType.java
index 3187e0bc92b..7462394cb7c 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussDatabaseDiscoveryType.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussDatabaseDiscoveryType.java
@@ -34,6 +34,7 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.Properties;
/**
@@ -58,22 +59,21 @@ public final class OpenGaussDatabaseDiscoveryType
implements DatabaseDiscoveryTy
}
@Override
- public String determinePrimaryDataSource(final Map<String, DataSource>
dataSourceMap) {
- String result = "";
+ public Optional<String> determinePrimaryDataSource(final Map<String,
DataSource> dataSourceMap) {
for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
try (Connection connection = entry.getValue().getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(DB_ROLE)) {
if (resultSet.next()) {
if (resultSet.getString("local_role").equals("Primary") &&
resultSet.getString("db_state").equals("Normal")) {
- return entry.getKey();
+ return Optional.of(entry.getKey());
}
}
} catch (final SQLException ex) {
log.error("An exception occurred while find primary data
source url", ex);
}
}
- return result;
+ return Optional.empty();
}
@Override