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

Reply via email to