You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by yx...@apache.org on 2022/04/23 15:13:07 UTC

[shardingsphere] branch master updated: Rename AbstractMySQLDatabaseDiscoveryType & Refactor DatabaseDiscoveryEngine (#17038)

This is an automated email from the ASF dual-hosted git repository.

yx9o 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 4193edfb508 Rename AbstractMySQLDatabaseDiscoveryType & Refactor DatabaseDiscoveryEngine (#17038)
4193edfb508 is described below

commit 4193edfb5083d7cb4e3ea86a7298a45d0688f2e9
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Apr 23 23:13:00 2022 +0800

    Rename AbstractMySQLDatabaseDiscoveryType & Refactor DatabaseDiscoveryEngine (#17038)
    
    * Rename AbstractMySQLDatabaseDiscoveryType
    
    * Rename MGRMySQLDatabaseDiscoveryType
    
    * Refactor AbstractMySQLDatabaseDiscoveryType
    
    * Refactor AbstractMySQLDatabaseDiscoveryType
    
    * Refactor OpenGaussNormalReplicationDatabaseDiscoveryType
    
    * Refactor OpenGaussNormalReplicationDatabaseDiscoveryType
    
    * Refactor OpenGaussNormalReplicationDatabaseDiscoveryType
    
    * Refactor OpenGaussNormalReplicationDatabaseDiscoveryType
    
    * Refactor OpenGaussNormalReplicationDatabaseDiscoveryType
    
    * Refactor DatabaseDiscoveryEngine
    
    * Refactor StorageNodeDataSource
---
 .../dbdiscovery/spi/DatabaseDiscoveryType.java     |  6 +--
 .../algorithm/DatabaseDiscoveryEngine.java         | 21 +++------
 .../dbdiscovery/heartbeat/HeartbeatJob.java        |  7 ++-
 .../dbdiscovery/rule/DatabaseDiscoveryRule.java    |  4 +-
 .../fixture/CoreFixtureDatabaseDiscoveryType.java  |  2 +-
 .../rule/DatabaseDiscoveryDataSourceRuleTest.java  | 10 ++---
 ...orithmProviderConfigurationYamlSwapperTest.java |  4 +-
 .../DistSQLFixtureDatabaseDiscoveryType.java       |  2 +-
 ...ava => AbstractMySQLDatabaseDiscoveryType.java} | 50 ++++++++++++----------
 ...ype.java => MGRMySQLDatabaseDiscoveryType.java} | 27 ++++--------
 ...rmalReplicationMySQLDatabaseDiscoveryType.java} | 17 +++-----
 ...ingsphere.dbdiscovery.spi.DatabaseDiscoveryType |  4 +-
 .../type/mgr/MGRDatabaseDiscoveryTypeTest.java     |  8 ++--
 ...NormalReplicationDatabaseDiscoveryTypeTest.java |  4 +-
 ...aussNormalReplicationDatabaseDiscoveryType.java | 44 +++++++++----------
 ...NormalReplicationDatabaseDiscoveryTypeTest.java |  2 +-
 .../DatabaseDiscoverySpringNamespaceTest.java      |  4 +-
 .../infra/storage/StorageNodeDataSource.java       |  5 ++-
 18 files changed, 99 insertions(+), 122 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 6dbb65886f0..f0fda7cc8dd 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
@@ -40,12 +40,12 @@ public interface DatabaseDiscoveryType extends ShardingSphereAlgorithm {
     HighlyAvailableStatus loadHighlyAvailableStatus(DataSource dataSource) throws SQLException;
     
     /**
-     * Find primary data source.
+     * Find primary data source name.
      * 
      * @param dataSourceMap data source map
-     * @return determined name of primary data source
+     * @return found name of primary data source
      */
-    Optional<String> findPrimaryDataSource(Map<String, DataSource> dataSourceMap);
+    Optional<String> findPrimaryDataSourceName(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 0375e9e6d24..7b7cfbcbec8 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
@@ -89,14 +89,16 @@ public final class DatabaseDiscoveryEngine {
      * @param dataSourceMap data source map
      * @param disabledDataSourceNames disabled data source names
      * @param groupName group name
+     * @return updated primary data source name
      */
-    public void updatePrimaryDataSource(final String databaseName, final Map<String, DataSource> dataSourceMap, final Collection<String> disabledDataSourceNames, final String groupName) {
-        Optional<String> newPrimaryDataSource = databaseDiscoveryType.findPrimaryDataSource(getActiveDataSourceMap(dataSourceMap, disabledDataSourceNames));
-        if (newPrimaryDataSource.isPresent() && !newPrimaryDataSource.get().equals(databaseDiscoveryType.getOldPrimaryDataSource())) {
-            databaseDiscoveryType.setOldPrimaryDataSource(newPrimaryDataSource.get());
-            ShardingSphereEventBus.getInstance().post(new PrimaryDataSourceChangedEvent(new QualifiedDatabase(databaseName, groupName, newPrimaryDataSource.get())));
+    public String updatePrimaryDataSource(final String databaseName, final Map<String, DataSource> dataSourceMap, final Collection<String> disabledDataSourceNames, final String groupName) {
+        Optional<String> newPrimaryDataSourceName = databaseDiscoveryType.findPrimaryDataSourceName(getActiveDataSourceMap(dataSourceMap, disabledDataSourceNames));
+        if (newPrimaryDataSourceName.isPresent() && !newPrimaryDataSourceName.get().equals(databaseDiscoveryType.getOldPrimaryDataSource())) {
+            databaseDiscoveryType.setOldPrimaryDataSource(newPrimaryDataSourceName.get());
+            ShardingSphereEventBus.getInstance().post(new PrimaryDataSourceChangedEvent(new QualifiedDatabase(databaseName, groupName, newPrimaryDataSourceName.get())));
         }
         databaseDiscoveryType.updateMemberState(databaseName, dataSourceMap, groupName);
+        return newPrimaryDataSourceName.orElseGet(databaseDiscoveryType::getPrimaryDataSource);
     }
     
     private Map<String, DataSource> getActiveDataSourceMap(final Map<String, DataSource> dataSourceMap, final Collection<String> disabledDataSourceNames) {
@@ -106,13 +108,4 @@ public final class DatabaseDiscoveryEngine {
         }
         return result;
     }
-    
-    /**
-     * Get primary data source.
-     *
-     * @return primary data source
-     */
-    public String getPrimaryDataSource() {
-        return databaseDiscoveryType.getPrimaryDataSource();
-    }
 }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/heartbeat/HeartbeatJob.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/heartbeat/HeartbeatJob.java
index 48cb1342ad0..4b925f52057 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/heartbeat/HeartbeatJob.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/heartbeat/HeartbeatJob.java
@@ -28,12 +28,12 @@ import java.util.Collection;
 import java.util.Map;
 
 /**
- * HA heartbeat job.
+ * Heartbeat job.
  */
 @RequiredArgsConstructor
 public final class HeartbeatJob implements SimpleJob {
     
-    private final String schemaName;
+    private final String databaseName;
     
     private final Map<String, DataSource> dataSourceMap;
     
@@ -45,7 +45,6 @@ public final class HeartbeatJob implements SimpleJob {
     
     @Override
     public void execute(final ShardingContext shardingContext) {
-        DatabaseDiscoveryEngine engine = new DatabaseDiscoveryEngine(databaseDiscoveryType);
-        engine.updatePrimaryDataSource(schemaName, dataSourceMap, disabledDataSourceNames, groupName);
+        new DatabaseDiscoveryEngine(databaseDiscoveryType).updatePrimaryDataSource(databaseName, dataSourceMap, disabledDataSourceNames, groupName);
     }
 }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
index 22e7f93d6fd..662e6b4af41 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
@@ -110,14 +110,12 @@ public final class DatabaseDiscoveryRule implements SchemaRule, DataSourceContai
             DatabaseDiscoveryDataSourceRule dataSourceRule = entry.getValue();
             DatabaseDiscoveryEngine engine = new DatabaseDiscoveryEngine(dataSourceRule.getDatabaseDiscoveryType());
             Map<String, DataSource> originalDataSourceMap = new HashMap<>(dataSourceMap);
-            Collection<String> disabledDataSourceNames = dataSourceRule.getDisabledDataSourceNames();
             try {
                 engine.checkHighlyAvailableStatus(databaseName, originalDataSourceMap);
             } catch (final SQLException ex) {
                 throw new ShardingSphereException(ex);
             }
-            engine.updatePrimaryDataSource(databaseName, originalDataSourceMap, disabledDataSourceNames, groupName);
-            dataSourceRule.updatePrimaryDataSourceName(engine.getPrimaryDataSource());
+            dataSourceRule.updatePrimaryDataSourceName(engine.updatePrimaryDataSource(databaseName, originalDataSourceMap, dataSourceRule.getDisabledDataSourceNames(), groupName));
         }
     }
     
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 ff1be3bd024..643ad823fc9 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
@@ -34,7 +34,7 @@ public final class CoreFixtureDatabaseDiscoveryType implements DatabaseDiscovery
     }
     
     @Override
-    public Optional<String> findPrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
+    public Optional<String> findPrimaryDataSourceName(final Map<String, DataSource> dataSourceMap) {
         return Optional.of("primary");
     }
     
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryDataSourceRuleTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryDataSourceRuleTest.java
index 883cee9f84f..5d845af3634 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryDataSourceRuleTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryDataSourceRuleTest.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.rule;
 
 import com.google.common.collect.ImmutableMap;
 import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
-import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRMySQLDatabaseDiscoveryType;
 import org.junit.Test;
 
 import java.util.Arrays;
@@ -35,24 +35,24 @@ public final class DatabaseDiscoveryDataSourceRuleTest {
     
     private final DatabaseDiscoveryDataSourceRule databaseDiscoveryDataSourceRule = new DatabaseDiscoveryDataSourceRule(
             new DatabaseDiscoveryDataSourceRuleConfiguration("test_pr", Arrays.asList("ds_0", "ds_1"), "ha_heartbeat", "discoveryTypeName"), new Properties(),
-            new MGRDatabaseDiscoveryType());
+            new MGRMySQLDatabaseDiscoveryType());
     
     @Test(expected = IllegalArgumentException.class)
     public void assertNewHADataSourceRuleWithoutName() {
         new DatabaseDiscoveryDataSourceRule(new DatabaseDiscoveryDataSourceRuleConfiguration("", Arrays.asList("ds_0", "ds_1"), "ha_heartbeat", "discoveryTypeName"),
-                new Properties(), new MGRDatabaseDiscoveryType());
+                new Properties(), new MGRMySQLDatabaseDiscoveryType());
     }
     
     @Test(expected = IllegalArgumentException.class)
     public void assertNewHADataSourceRuleWithNullDataSourceName() {
         new DatabaseDiscoveryDataSourceRule(new DatabaseDiscoveryDataSourceRuleConfiguration("ds", null, "ha_heartbeat", "discoveryTypeName"),
-                new Properties(), new MGRDatabaseDiscoveryType());
+                new Properties(), new MGRMySQLDatabaseDiscoveryType());
     }
     
     @Test(expected = IllegalArgumentException.class)
     public void assertNewHADataSourceRuleWithEmptyDataSourceName() {
         new DatabaseDiscoveryDataSourceRule(new DatabaseDiscoveryDataSourceRuleConfiguration("ds", Collections.emptyList(), "ha_heartbeat", "discoveryTypeName"),
-                new Properties(), new MGRDatabaseDiscoveryType());
+                new Properties(), new MGRMySQLDatabaseDiscoveryType());
     }
     
     @Test
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/yaml/swapper/DatabaseDiscoveryRuleAlgorithmProviderConfigurationYamlSwapperTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/yaml/swapper/DatabaseDiscoveryRuleAlgorithmProviderConfigurationYamlSwapperTest.java
index baaae0ebe2f..dbbf739fcc8 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/yaml/swapper/DatabaseDiscoveryRuleAlgorithmProviderConfigurationYamlSwapperTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/yaml/swapper/DatabaseDiscoveryRuleAlgorithmProviderConfigurationYamlSwapperTest.java
@@ -22,7 +22,7 @@ import org.apache.shardingsphere.dbdiscovery.algorithm.config.AlgorithmProvidedD
 import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
 import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryHeartBeatConfiguration;
 import org.apache.shardingsphere.dbdiscovery.constant.DatabaseDiscoveryOrder;
-import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRMySQLDatabaseDiscoveryType;
 import org.apache.shardingsphere.dbdiscovery.yaml.config.YamlDatabaseDiscoveryRuleConfiguration;
 import org.junit.Test;
 
@@ -86,6 +86,6 @@ public final class DatabaseDiscoveryRuleAlgorithmProviderConfigurationYamlSwappe
         heartBeatConfig.put("mgr_heartbeat", new DatabaseDiscoveryHeartBeatConfiguration(new Properties()));
         return swapper.swapToYamlConfiguration(
                 new AlgorithmProvidedDatabaseDiscoveryRuleConfiguration(Collections.singletonList(ruleConfig), heartBeatConfig,
-                        ImmutableMap.of("mgr", new MGRDatabaseDiscoveryType())));
+                        ImmutableMap.of("mgr", new MGRMySQLDatabaseDiscoveryType())));
     }
 }
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 035b0f7f9e6..5c53b7184f5 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
@@ -34,7 +34,7 @@ public final class DistSQLFixtureDatabaseDiscoveryType implements DatabaseDiscov
     }
     
     @Override
-    public Optional<String> findPrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
+    public Optional<String> findPrimaryDataSourceName(final Map<String, DataSource> dataSourceMap) {
         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/AbstractDatabaseDiscoveryType.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/AbstractMySQLDatabaseDiscoveryType.java
similarity index 66%
rename from shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/AbstractDatabaseDiscoveryType.java
rename to shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/AbstractMySQLDatabaseDiscoveryType.java
index c9af67d89d6..ef1e29dbb88 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/AbstractMySQLDatabaseDiscoveryType.java
@@ -29,30 +29,48 @@ import java.sql.Statement;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
+import java.util.Properties;
 
 /**
- * Abstract database discovery type.
+ * Abstract MySQL database discovery type.
  */
 @Getter
 @Setter
 @Slf4j
-public abstract class AbstractDatabaseDiscoveryType implements DatabaseDiscoveryType {
+public abstract class AbstractMySQLDatabaseDiscoveryType implements DatabaseDiscoveryType {
+    
+    private Properties props = new Properties();
     
     private String oldPrimaryDataSource;
     
     @Override
-    public final Optional<String> findPrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
-        return findPrimaryDataSourceName(loadPrimaryDataSourceURL(dataSourceMap), dataSourceMap);
+    public final Optional<String> findPrimaryDataSourceName(final Map<String, DataSource> dataSourceMap) {
+        String primaryDatabaseInstanceURL = loadPrimaryDatabaseInstanceURL(dataSourceMap);
+        return findPrimaryDataSourceName(dataSourceMap, primaryDatabaseInstanceURL);
+    }
+    
+    private Optional<String> findPrimaryDataSourceName(final Map<String, DataSource> dataSourceMap, final String primaryDatabaseInstanceURL) {
+        for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
+            try (Connection connection = entry.getValue().getConnection()) {
+                String url = connection.getMetaData().getURL();
+                if (null != url && url.contains(primaryDatabaseInstanceURL)) {
+                    return Optional.of(entry.getKey());
+                }
+            } catch (final SQLException ex) {
+                log.error("An exception occurred while find primary data source name", ex);
+            }
+        }
+        return Optional.empty();
     }
     
-    private String loadPrimaryDataSourceURL(final Map<String, DataSource> dataSourceMap) {
+    private String loadPrimaryDatabaseInstanceURL(final Map<String, DataSource> dataSourceMap) {
         for (DataSource each : dataSourceMap.values()) {
             try (
                     Connection connection = each.getConnection();
                     Statement statement = connection.createStatement()) {
-                Optional<String> primaryDataSourceURL = loadPrimaryDataSourceURL(statement);
-                if (primaryDataSourceURL.isPresent()) {
-                    return primaryDataSourceURL.get();
+                Optional<String> primaryDatabaseInstanceURL = loadPrimaryDatabaseInstanceURL(statement);
+                if (primaryDatabaseInstanceURL.isPresent()) {
+                    return primaryDatabaseInstanceURL.get();
                 }
             } catch (final SQLException ex) {
                 log.error("An exception occurred while find primary data source url", ex);
@@ -61,21 +79,7 @@ public abstract class AbstractDatabaseDiscoveryType implements DatabaseDiscovery
         return "";
     }
     
-    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()) {
-                String url = connection.getMetaData().getURL();
-                if (null != url && url.contains(primaryDataSourceURL)) {
-                    return Optional.of(entry.getKey());
-                }
-            } catch (final SQLException ex) {
-                log.error("An exception occurred while find primary data source name", ex);
-            }
-        }
-        return Optional.empty();
-    }
+    protected abstract Optional<String> loadPrimaryDatabaseInstanceURL(Statement statement) throws SQLException;
     
     @Override
     public final String getPrimaryDataSource() {
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/mgr/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/mgr/MGRMySQLDatabaseDiscoveryType.java
similarity index 87%
rename from shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/mgr/MGRDatabaseDiscoveryType.java
rename to shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/mgr/MGRMySQLDatabaseDiscoveryType.java
index bc34bcc16f6..174e2daf953 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/mgr/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/mgr/MGRMySQLDatabaseDiscoveryType.java
@@ -17,10 +17,8 @@
 
 package org.apache.shardingsphere.dbdiscovery.mysql.type.mgr;
 
-import lombok.Getter;
-import lombok.Setter;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.dbdiscovery.mysql.AbstractDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.AbstractMySQLDatabaseDiscoveryType;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.infra.rule.event.impl.DataSourceDisabledEvent;
 import org.apache.shardingsphere.infra.storage.StorageNodeDataSource;
@@ -34,17 +32,15 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Collection;
 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;
 
 /**
  * MGR database discovery type for MySQL.
  */
 @Slf4j
-public final class MGRDatabaseDiscoveryType extends AbstractDatabaseDiscoveryType {
+public final class MGRMySQLDatabaseDiscoveryType extends AbstractMySQLDatabaseDiscoveryType {
     
     private static final String QUERY_PLUGIN_STATUS = "SELECT PLUGIN_STATUS FROM information_schema.PLUGINS WHERE PLUGIN_NAME='group_replication'";
     
@@ -57,10 +53,6 @@ public final class MGRDatabaseDiscoveryType extends AbstractDatabaseDiscoveryTyp
     private static final String QUERY_PRIMARY_DATA_SOURCE = "SELECT MEMBER_HOST, MEMBER_PORT FROM performance_schema.replication_group_members WHERE MEMBER_ID = "
             + "(SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'group_replication_primary_member')";
     
-    @Getter
-    @Setter
-    private Properties props = new Properties();
-    
     @Override
     public MGRHighlyAvailableStatus loadHighlyAvailableStatus(final DataSource dataSource) throws SQLException {
         try (
@@ -99,7 +91,7 @@ public final class MGRDatabaseDiscoveryType extends AbstractDatabaseDiscoveryTyp
     }
     
     @Override
-    protected Optional<String> loadPrimaryDataSourceURL(final Statement statement) throws SQLException {
+    protected Optional<String> loadPrimaryDatabaseInstanceURL(final Statement statement) throws SQLException {
         try (ResultSet resultSet = statement.executeQuery(QUERY_PRIMARY_DATA_SOURCE)) {
             if (resultSet.next()) {
                 return Optional.of(String.format("%s:%s", resultSet.getString("MEMBER_HOST"), resultSet.getString("MEMBER_PORT")));
@@ -110,15 +102,14 @@ public final class MGRDatabaseDiscoveryType extends AbstractDatabaseDiscoveryTyp
     
     @Override
     public void updateMemberState(final String databaseName, final Map<String, DataSource> dataSourceMap, final String groupName) {
-        List<String> memberDataSourceURLs = findMemberDataSourceURLs(dataSourceMap);
-        if (memberDataSourceURLs.isEmpty()) {
-            return;
+        Collection<String> memberDataSourceURLs = findMemberDataSourceURLs(dataSourceMap);
+        if (!memberDataSourceURLs.isEmpty()) {
+            determineDisabledDataSource(databaseName, dataSourceMap, memberDataSourceURLs, groupName);
         }
-        determineDisabledDataSource(databaseName, dataSourceMap, memberDataSourceURLs, groupName);
     }
     
-    private List<String> findMemberDataSourceURLs(final Map<String, DataSource> dataSourceMap) {
-        List<String> result = new LinkedList<>();
+    private Collection<String> findMemberDataSourceURLs(final Map<String, DataSource> dataSourceMap) {
+        Collection<String> result = new LinkedList<>();
         try (
                 Connection connection = dataSourceMap.get(getPrimaryDataSource()).getConnection();
                 Statement statement = connection.createStatement()) {
@@ -135,7 +126,7 @@ public final class MGRDatabaseDiscoveryType extends AbstractDatabaseDiscoveryTyp
         return result;
     }
     
-    private void determineDisabledDataSource(final String databaseName, final Map<String, DataSource> dataSourceMap, final List<String> memberDataSourceURLs, final String groupName) {
+    private void determineDisabledDataSource(final String databaseName, final Map<String, DataSource> dataSourceMap, final Collection<String> memberDataSourceURLs, final String groupName) {
         for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
             if (entry.getKey().equals(getPrimaryDataSource())) {
                 continue;
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/replication/MySQLNormalReplicationDatabaseDiscoveryType.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationMySQLDataba [...]
similarity index 88%
rename from shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationDatabaseDiscoveryType.java
rename to shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationMySQLDatabaseDiscoveryType.java
index 7b6b89875a3..9d1598c6f02 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationDatabaseDiscoveryType.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationMySQLDatabaseDiscoveryType.java
@@ -17,10 +17,8 @@
 
 package org.apache.shardingsphere.dbdiscovery.mysql.type.replication;
 
-import lombok.Getter;
-import lombok.Setter;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.dbdiscovery.mysql.AbstractDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.AbstractMySQLDatabaseDiscoveryType;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.infra.rule.event.impl.DataSourceDisabledEvent;
 import org.apache.shardingsphere.infra.storage.StorageNodeDataSource;
@@ -35,31 +33,26 @@ import java.sql.Statement;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
-import java.util.Properties;
 
 /**
  * Normal replication database discovery type for MySQL.
  */
-@Getter
-@Setter
 @Slf4j
-public final class MySQLNormalReplicationDatabaseDiscoveryType extends AbstractDatabaseDiscoveryType {
+public final class MySQLNormalReplicationMySQLDatabaseDiscoveryType extends AbstractMySQLDatabaseDiscoveryType {
     
     private static final String SHOW_SLAVE_STATUS = "SHOW SLAVE STATUS";
     
-    private Properties props = new Properties();
-    
     @Override
     public MySQLNormalReplicationHighlyAvailableStatus loadHighlyAvailableStatus(final DataSource dataSource) throws SQLException {
         try (
                 Connection connection = dataSource.getConnection();
                 Statement statement = connection.createStatement()) {
-            return new MySQLNormalReplicationHighlyAvailableStatus(loadPrimaryDataSourceURL(statement).orElse(null));
+            return new MySQLNormalReplicationHighlyAvailableStatus(loadPrimaryDatabaseInstanceURL(statement).orElse(null));
         }
     }
     
     @Override
-    protected Optional<String> loadPrimaryDataSourceURL(final Statement statement) throws SQLException {
+    protected Optional<String> loadPrimaryDatabaseInstanceURL(final Statement statement) throws SQLException {
         try (ResultSet resultSet = statement.executeQuery(SHOW_SLAVE_STATUS)) {
             if (resultSet.next()) {
                 String masterHost = resultSet.getString("Master_Host");
@@ -87,7 +80,7 @@ public final class MySQLNormalReplicationDatabaseDiscoveryType extends AbstractD
                 Connection connection = dataSource.getConnection();
                 Statement statement = connection.createStatement()) {
             long replicationDelayMilliseconds = getSecondsBehindMaster(statement) * 1000L;
-            if (replicationDelayMilliseconds < Long.parseLong(props.getProperty("delay-milliseconds-threshold"))) {
+            if (replicationDelayMilliseconds < Long.parseLong(getProps().getProperty("delay-milliseconds-threshold"))) {
                 ShardingSphereEventBus.getInstance().post(new DataSourceDisabledEvent(databaseName, groupName, datasourceName,
                         new StorageNodeDataSource(StorageNodeRole.MEMBER, StorageNodeStatus.ENABLED, replicationDelayMilliseconds)));
             } else {
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType
index 5e3baa99cf6..bcc989cbe7d 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType
@@ -15,5 +15,5 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRDatabaseDiscoveryType
-org.apache.shardingsphere.dbdiscovery.mysql.type.replication.MySQLNormalReplicationDatabaseDiscoveryType
+org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRMySQLDatabaseDiscoveryType
+org.apache.shardingsphere.dbdiscovery.mysql.type.replication.MySQLNormalReplicationMySQLDatabaseDiscoveryType
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/mgr/MGRDatabaseDiscoveryTypeTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/mgr/MGRDatabaseDiscoveryTypeTest.java
index 18590f032d9..05940cea768 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/mgr/MGRDatabaseDiscoveryTypeTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/mgr/MGRDatabaseDiscoveryTypeTest.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.dbdiscovery.mysql.type.mgr;
 
 import com.google.common.eventbus.EventBus;
-import org.apache.shardingsphere.dbdiscovery.mysql.AbstractDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.AbstractMySQLDatabaseDiscoveryType;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.infra.rule.event.impl.DataSourceDisabledEvent;
 import org.apache.shardingsphere.infra.storage.StorageNodeDataSource;
@@ -54,7 +54,7 @@ import static org.mockito.Mockito.when;
 
 public final class MGRDatabaseDiscoveryTypeTest {
     
-    private final MGRDatabaseDiscoveryType databaseDiscoveryType = new MGRDatabaseDiscoveryType();
+    private final MGRMySQLDatabaseDiscoveryType databaseDiscoveryType = new MGRMySQLDatabaseDiscoveryType();
     
     @Test
     public void assertLoadHighlyAvailableStatus() throws SQLException {
@@ -107,7 +107,7 @@ public final class MGRDatabaseDiscoveryTypeTest {
             dataSourceMap.put(String.format("ds_%s", i), dataSources.get(i));
         }
         databaseDiscoveryType.getProps().setProperty("group-name", "group_name");
-        Optional<String> actual = databaseDiscoveryType.findPrimaryDataSource(dataSourceMap);
+        Optional<String> actual = databaseDiscoveryType.findPrimaryDataSourceName(dataSourceMap);
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("ds_2"));
     }
@@ -116,7 +116,7 @@ public final class MGRDatabaseDiscoveryTypeTest {
     @Ignore
     @Test
     public void assertUpdateMemberState() throws SQLException, IllegalAccessException, NoSuchFieldException {
-        Field declaredField = AbstractDatabaseDiscoveryType.class.getDeclaredField("oldPrimaryDataSource");
+        Field declaredField = AbstractMySQLDatabaseDiscoveryType.class.getDeclaredField("oldPrimaryDataSource");
         declaredField.setAccessible(true);
         declaredField.set(databaseDiscoveryType, "ds_0");
         EventBus eventBus = mock(EventBus.class);
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationDatabaseDiscoveryTypeTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationDatabas [...]
index 904c6b11a21..96edcf611c3 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationDatabaseDiscoveryTypeTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationDatabaseDiscoveryTypeTest.java
@@ -37,7 +37,7 @@ public final class MySQLNormalReplicationDatabaseDiscoveryTypeTest {
     
     @Test
     public void assertLoadHighlyAvailableStatus() throws SQLException {
-        MySQLNormalReplicationHighlyAvailableStatus actual = new MySQLNormalReplicationDatabaseDiscoveryType().loadHighlyAvailableStatus(mockDataSource(3306));
+        MySQLNormalReplicationHighlyAvailableStatus actual = new MySQLNormalReplicationMySQLDatabaseDiscoveryType().loadHighlyAvailableStatus(mockDataSource(3306));
         assertThat(actual.getPrimaryInstanceURL(), is("127.0.0.1:3306"));
     }
     
@@ -46,7 +46,7 @@ public final class MySQLNormalReplicationDatabaseDiscoveryTypeTest {
         Map<String, DataSource> dataSourceMap = new HashMap<>(2, 1);
         dataSourceMap.put("ds_0", mockDataSource(3306));
         dataSourceMap.put("ds_1", mockDataSource(3307));
-        Optional<String> actual = new MySQLNormalReplicationDatabaseDiscoveryType().findPrimaryDataSource(dataSourceMap);
+        Optional<String> actual = new MySQLNormalReplicationMySQLDatabaseDiscoveryType().findPrimaryDataSourceName(dataSourceMap);
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("ds_0"));
     }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryType.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicat [...]
index 4fd5213dca0..e7738dbe8c5 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryType.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryType.java
@@ -45,7 +45,7 @@ import java.util.Properties;
 @Slf4j
 public final class OpenGaussNormalReplicationDatabaseDiscoveryType implements DatabaseDiscoveryType {
     
-    private static final String DB_ROLE = "SELECT local_role,db_state FROM pg_stat_get_stream_replications()";
+    private static final String QUERY_DB_ROLE = "SELECT local_role,db_state FROM pg_stat_get_stream_replications()";
     
     private String oldPrimaryDataSource;
     
@@ -56,22 +56,20 @@ public final class OpenGaussNormalReplicationDatabaseDiscoveryType implements Da
         try (
                 Connection connection = dataSource.getConnection();
                 Statement statement = connection.createStatement();
-                ResultSet resultSet = statement.executeQuery(DB_ROLE)) {
+                ResultSet resultSet = statement.executeQuery(QUERY_DB_ROLE)) {
             return new OpenGaussNormalReplicationHighlyAvailableStatus(resultSet.next() && resultSet.getString("local_role").equals("Primary"));
         }
     }
     
     @Override
-    public Optional<String> findPrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
+    public Optional<String> findPrimaryDataSourceName(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 Optional.of(entry.getKey());
-                    }
+                    ResultSet resultSet = statement.executeQuery(QUERY_DB_ROLE)) {
+                if (resultSet.next() && "Primary".equals(resultSet.getString("local_role")) && "Normal".equals(resultSet.getString("db_state"))) {
+                    return Optional.of(entry.getKey());
                 }
             } catch (final SQLException ex) {
                 log.error("An exception occurred while find primary data source url", ex);
@@ -83,23 +81,23 @@ public final class OpenGaussNormalReplicationDatabaseDiscoveryType implements Da
     @Override
     public void updateMemberState(final String databaseName, final Map<String, DataSource> dataSourceMap, final String groupName) {
         for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
-            boolean disable = true;
-            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("Standby") && resultSet.getString("db_state").equals("Normal"))
-                            || entry.getKey().equals(oldPrimaryDataSource)) {
-                        disable = false;
-                    }
-                }
-            } catch (final SQLException ex) {
-                log.error("An exception occurred while find data source urls", ex);
+            StorageNodeStatus storageNodeStatus = isDisabledDataSource(entry.getKey(), entry.getValue()) ? StorageNodeStatus.DISABLED : StorageNodeStatus.ENABLED;
+            ShardingSphereEventBus.getInstance().post(new DataSourceDisabledEvent(databaseName, groupName, entry.getKey(), new StorageNodeDataSource(StorageNodeRole.MEMBER, storageNodeStatus)));
+        }
+    }
+    
+    private boolean isDisabledDataSource(final String dataSourceName, final DataSource dataSource) {
+        try (
+                Connection connection = dataSource.getConnection();
+                Statement statement = connection.createStatement();
+                ResultSet resultSet = statement.executeQuery(QUERY_DB_ROLE)) {
+            if (resultSet.next() && ((resultSet.getString("local_role").equals("Standby") && resultSet.getString("db_state").equals("Normal")) || dataSourceName.equals(oldPrimaryDataSource))) {
+                return false;
             }
-            ShardingSphereEventBus.getInstance().post(new DataSourceDisabledEvent(databaseName, groupName, entry.getKey(),
-                    new StorageNodeDataSource(StorageNodeRole.MEMBER, disable ? StorageNodeStatus.DISABLED : StorageNodeStatus.ENABLED)));
+        } catch (final SQLException ex) {
+            log.error("An exception occurred while find data source urls", ex);
         }
+        return true;
     }
     
     @Override
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryTypeTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalRepl [...]
index 590910d22da..a120dbddc1f 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryTypeTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryTypeTest.java
@@ -69,7 +69,7 @@ public final class OpenGaussNormalReplicationDatabaseDiscoveryTypeTest {
         for (int i = 0; i < 3; i++) {
             dataSourceMap.put(String.format("ds_%s", i), dataSources.get(i));
         }
-        Optional<String> actual = new OpenGaussNormalReplicationDatabaseDiscoveryType().findPrimaryDataSource(dataSourceMap);
+        Optional<String> actual = new OpenGaussNormalReplicationDatabaseDiscoveryType().findPrimaryDataSourceName(dataSourceMap);
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("ds_2"));
     }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-spring/shardingsphere-db-discovery-spring-namespace/src/test/java/org/apache/shardingsphere/dbdiscovery/spring/namespace/DatabaseDiscoverySpringNamespaceTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-spring/shardingsphere-db-discovery-spring-namespace/src/test/java/org/apache/shardingsphere/dbdiscovery/spring/namespace/DatabaseDiscoverySpringNamespaceTest.java
index 2da67df9ca2..685c892e45f 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-spring/shardingsphere-db-discovery-spring-namespace/src/test/java/org/apache/shardingsphere/dbdiscovery/spring/namespace/DatabaseDiscoverySpringNamespaceTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-spring/shardingsphere-db-discovery-spring-namespace/src/test/java/org/apache/shardingsphere/dbdiscovery/spring/namespace/DatabaseDiscoverySpringNamespaceTest.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.dbdiscovery.spring.namespace;
 import org.apache.shardingsphere.dbdiscovery.algorithm.config.AlgorithmProvidedDatabaseDiscoveryRuleConfiguration;
 import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
 import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryHeartBeatConfiguration;
-import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRMySQLDatabaseDiscoveryType;
 import org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType;
 import org.junit.Test;
 import org.springframework.test.context.ContextConfiguration;
@@ -54,7 +54,7 @@ public final class DatabaseDiscoverySpringNamespaceTest extends AbstractJUnit4Sp
     
     private void assertDiscoveryTypes(final Map<String, DatabaseDiscoveryType> discoveryTypes) {
         assertThat(discoveryTypes.size(), is(1));
-        assertThat(discoveryTypes.get("mgr"), instanceOf(MGRDatabaseDiscoveryType.class));
+        assertThat(discoveryTypes.get("mgr"), instanceOf(MGRMySQLDatabaseDiscoveryType.class));
         assertNotNull(discoveryTypes.get("mgr").getProps());
         assertThat(discoveryTypes.get("mgr").getProps().get("group-name"), is("92504d5b-6dec-11e8-91ea-246e9612aaf1"));
     }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/storage/StorageNodeDataSource.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/storage/StorageNodeDataSource.java
index 1c3340d8528..a8aa8540604 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/storage/StorageNodeDataSource.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/storage/StorageNodeDataSource.java
@@ -18,13 +18,13 @@
 package org.apache.shardingsphere.infra.storage;
 
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 /**
  * Data source of storage node.
  */
-@RequiredArgsConstructor
+@NoArgsConstructor
 @Getter
 @Setter
 public final class StorageNodeDataSource {
@@ -38,6 +38,7 @@ public final class StorageNodeDataSource {
     public StorageNodeDataSource(final StorageNodeRole role, final StorageNodeStatus status) {
         this.role = role.name().toLowerCase();
         this.status = status.name().toLowerCase();
+        replicationDelayMilliseconds = null;
     }
     
     public StorageNodeDataSource(final StorageNodeRole role, final StorageNodeStatus status, final Long replicationDelayMilliseconds) {