You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/04/22 12:52:27 UTC

[shardingsphere] branch master updated: Add DatabaseDiscoveryEngine (#17013)

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

duanzhengqiang 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 098db67976e Add DatabaseDiscoveryEngine (#17013)
098db67976e is described below

commit 098db67976e438b7667323256637e98cf4f65f50
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Apr 22 20:52:15 2022 +0800

    Add DatabaseDiscoveryEngine (#17013)
    
    * Add DatabaseDiscoveryEngine
    
    * Rename useless disabledDataSourceNames parameter of DatabaseDiscoveryType.updatePrimaryDataSource
    
    * Rename useless disabledDataSourceNames parameter of DatabaseDiscoveryType.updatePrimaryDataSource
    
    * Add DatabaseDiscoveryType.determinePrimaryDataSource()
---
 .../dbdiscovery/spi/DatabaseDiscoveryType.java     | 25 ++++--
 .../algorithm/DatabaseDiscoveryEngine.java         | 97 ++++++++++++++++++++++
 .../dbdiscovery/heartbeat/HeartbeatJob.java        |  6 +-
 .../dbdiscovery/rule/DatabaseDiscoveryRule.java    | 11 +--
 .../fixture/CoreFixtureDatabaseDiscoveryType.java  | 13 ++-
 .../DistSQLFixtureDatabaseDiscoveryType.java       | 13 ++-
 .../mysql/AbstractDatabaseDiscoveryType.java       | 28 ++-----
 .../type/ShowSlaveStatusDatabaseDiscoveryType.java |  4 +-
 .../mysql/type/MGRDatabaseDiscoveryTypeTest.java   |  8 +-
 .../ShowSlaveStatusDatabaseDiscoveryTypeTest.java  |  6 +-
 .../opengauss/OpenGaussDatabaseDiscoveryType.java  | 19 +----
 .../OpenGaussDatabaseDiscoveryTypeTest.java        |  6 +-
 12 files changed, 165 insertions(+), 71 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 b7d2265e264..7405b6e6121 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
@@ -21,7 +21,6 @@ import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithm;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
-import java.util.Collection;
 import java.util.Map;
 
 /**
@@ -39,14 +38,12 @@ public interface DatabaseDiscoveryType extends ShardingSphereAlgorithm {
     void checkDatabaseDiscoveryConfiguration(String databaseName, Map<String, DataSource> dataSourceMap) throws SQLException;
     
     /**
-     * Update primary data source.
-     *
-     * @param databaseName database name
+     * Determine primary data source.
+     * 
      * @param dataSourceMap data source map
-     * @param disabledDataSourceNames disabled data source names
-     * @param groupName group name
+     * @return primary data source name
      */
-    void updatePrimaryDataSource(String databaseName, Map<String, DataSource> dataSourceMap, Collection<String> disabledDataSourceNames, String groupName);
+    String determinePrimaryDataSource(Map<String, DataSource> dataSourceMap);
     
     /**
      * Update member state.
@@ -63,4 +60,18 @@ public interface DatabaseDiscoveryType extends ShardingSphereAlgorithm {
      * @return primary data source
      */
     String getPrimaryDataSource();
+    
+    /**
+     * Get old primary data source.
+     * 
+     * @return old primary data source
+     */
+    String getOldPrimaryDataSource();
+    
+    /**
+     * Get old primary data source.
+     * 
+     * @param oldPrimaryDataSource old primary data source
+     */
+    void setOldPrimaryDataSource(String oldPrimaryDataSource);
 }
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
new file mode 100644
index 00000000000..51f091abbb4
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.dbdiscovery.algorithm;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType;
+import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
+import org.apache.shardingsphere.infra.metadata.schema.QualifiedDatabase;
+import org.apache.shardingsphere.infra.rule.event.impl.PrimaryDataSourceChangedEvent;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Database discovery engine.
+ */
+@RequiredArgsConstructor
+public final class DatabaseDiscoveryEngine {
+    
+    private final DatabaseDiscoveryType databaseDiscoveryType;
+    
+    /**
+     * Check database discovery configuration.
+     *
+     * @param databaseName database name
+     * @param dataSourceMap data source map
+     * @throws SQLException SQL exception
+     */
+    public void checkDatabaseDiscoveryConfiguration(final String databaseName, final Map<String, DataSource> dataSourceMap) throws SQLException {
+        databaseDiscoveryType.checkDatabaseDiscoveryConfiguration(databaseName, dataSourceMap);
+    }
+    
+    /**
+     * Update primary data source.
+     *
+     * @param databaseName database name
+     * @param dataSourceMap data source map
+     * @param disabledDataSourceNames disabled data source names
+     * @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()) {
+            return;
+        }
+        if (!newPrimaryDataSource.equals(databaseDiscoveryType.getOldPrimaryDataSource())) {
+            databaseDiscoveryType.setOldPrimaryDataSource(newPrimaryDataSource);
+            ShardingSphereEventBus.getInstance().post(new PrimaryDataSourceChangedEvent(new QualifiedDatabase(databaseName, groupName, newPrimaryDataSource)));
+        }
+    }
+    
+    private Map<String, DataSource> getActiveDataSourceMap(final Map<String, DataSource> dataSourceMap, final Collection<String> disabledDataSourceNames) {
+        Map<String, DataSource> result = new HashMap<>(dataSourceMap);
+        if (!disabledDataSourceNames.isEmpty()) {
+            result.entrySet().removeIf(each -> disabledDataSourceNames.contains(each.getKey()));
+        }
+        return result;
+    }
+    
+    /**
+     * Update member state.
+     *
+     * @param databaseName database name
+     * @param dataSourceMap data source map
+     * @param groupName group name
+     */
+    public void updateMemberState(final String databaseName, final Map<String, DataSource> dataSourceMap, final String groupName) {
+        databaseDiscoveryType.updateMemberState(databaseName, dataSourceMap, groupName);
+    }
+    
+    /**
+     * 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 ab33ab27f97..08516d665c6 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
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.dbdiscovery.heartbeat;
 
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.dbdiscovery.algorithm.DatabaseDiscoveryEngine;
 import org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType;
 import org.apache.shardingsphere.elasticjob.api.ShardingContext;
 import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;
@@ -44,7 +45,8 @@ public final class HeartbeatJob implements SimpleJob {
     
     @Override
     public void execute(final ShardingContext shardingContext) {
-        databaseDiscoveryType.updatePrimaryDataSource(schemaName, dataSourceMap, disabledDataSourceNames, groupName);
-        databaseDiscoveryType.updateMemberState(schemaName, dataSourceMap, groupName);
+        DatabaseDiscoveryEngine engine = new DatabaseDiscoveryEngine(databaseDiscoveryType);
+        engine.updatePrimaryDataSource(schemaName, dataSourceMap, disabledDataSourceNames, groupName);
+        engine.updateMemberState(schemaName, dataSourceMap, 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 e795be7472e..56ab36c2062 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
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.rule;
 
 import com.google.common.base.Strings;
 import lombok.Getter;
+import org.apache.shardingsphere.dbdiscovery.algorithm.DatabaseDiscoveryEngine;
 import org.apache.shardingsphere.dbdiscovery.algorithm.config.AlgorithmProvidedDatabaseDiscoveryRuleConfiguration;
 import org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
 import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
@@ -107,17 +108,17 @@ public final class DatabaseDiscoveryRule implements SchemaRule, DataSourceContai
         for (Entry<String, DatabaseDiscoveryDataSourceRule> entry : dataSourceRules.entrySet()) {
             String groupName = entry.getKey();
             DatabaseDiscoveryDataSourceRule dataSourceRule = entry.getValue();
-            DatabaseDiscoveryType databaseDiscoveryType = dataSourceRule.getDatabaseDiscoveryType();
+            DatabaseDiscoveryEngine engine = new DatabaseDiscoveryEngine(dataSourceRule.getDatabaseDiscoveryType());
             Map<String, DataSource> originalDataSourceMap = new HashMap<>(dataSourceMap);
             Collection<String> disabledDataSourceNames = dataSourceRule.getDisabledDataSourceNames();
             try {
-                databaseDiscoveryType.checkDatabaseDiscoveryConfiguration(databaseName, originalDataSourceMap);
+                engine.checkDatabaseDiscoveryConfiguration(databaseName, originalDataSourceMap);
             } catch (final SQLException ex) {
                 throw new ShardingSphereException(ex);
             }
-            databaseDiscoveryType.updatePrimaryDataSource(databaseName, originalDataSourceMap, disabledDataSourceNames, groupName);
-            dataSourceRule.updatePrimaryDataSourceName(databaseDiscoveryType.getPrimaryDataSource());
-            databaseDiscoveryType.updateMemberState(databaseName, originalDataSourceMap, groupName);
+            engine.updatePrimaryDataSource(databaseName, originalDataSourceMap, disabledDataSourceNames, groupName);
+            dataSourceRule.updatePrimaryDataSourceName(engine.getPrimaryDataSource());
+            engine.updateMemberState(databaseName, originalDataSourceMap, 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 eb2cf58e694..ff3f6d2a27b 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
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.dbdiscovery.fixture;
 import org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType;
 
 import javax.sql.DataSource;
-import java.util.Collection;
 import java.util.Map;
 
 public final class CoreFixtureDatabaseDiscoveryType implements DatabaseDiscoveryType {
@@ -30,7 +29,8 @@ public final class CoreFixtureDatabaseDiscoveryType implements DatabaseDiscovery
     }
     
     @Override
-    public void updatePrimaryDataSource(final String databaseName, final Map<String, DataSource> activeDataSourceMap, final Collection<String> disabledDataSourceNames, final String groupName) {
+    public String determinePrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
+        return "primary";
     }
     
     @Override
@@ -42,6 +42,15 @@ public final class CoreFixtureDatabaseDiscoveryType implements DatabaseDiscovery
         return "primary";
     }
     
+    @Override
+    public String getOldPrimaryDataSource() {
+        return null;
+    }
+    
+    @Override
+    public void setOldPrimaryDataSource(final String oldPrimaryDataSource) {
+    }
+    
     @Override
     public String getType() {
         return "CORE.FIXTURE";
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 338360b5ecf..083b27e127c 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
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.dbdiscovery.distsql.handler.fixture;
 import org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType;
 
 import javax.sql.DataSource;
-import java.util.Collection;
 import java.util.Map;
 
 public final class DistSQLFixtureDatabaseDiscoveryType implements DatabaseDiscoveryType {
@@ -30,7 +29,8 @@ public final class DistSQLFixtureDatabaseDiscoveryType implements DatabaseDiscov
     }
     
     @Override
-    public void updatePrimaryDataSource(final String databaseName, final Map<String, DataSource> dataSourceMap, final Collection<String> disabledDataSourceNames, final String groupName) {
+    public String determinePrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
+        return null;
     }
     
     @Override
@@ -42,6 +42,15 @@ public final class DistSQLFixtureDatabaseDiscoveryType implements DatabaseDiscov
         return null;
     }
     
+    @Override
+    public String getOldPrimaryDataSource() {
+        return null;
+    }
+    
+    @Override
+    public void setOldPrimaryDataSource(final String oldPrimaryDataSource) {
+    }
+    
     @Override
     public String getType() {
         return "DISTSQL.FIXTURE";
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 51ca2431d95..f552c327822 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
@@ -17,23 +17,22 @@
 
 package org.apache.shardingsphere.dbdiscovery.mysql;
 
+import lombok.Getter;
+import lombok.Setter;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
-import org.apache.shardingsphere.infra.metadata.schema.QualifiedDatabase;
-import org.apache.shardingsphere.infra.rule.event.impl.PrimaryDataSourceChangedEvent;
 
 import javax.sql.DataSource;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.util.Collection;
-import java.util.HashMap;
 import java.util.Map;
 
 /**
  * Abstract database discovery type.
  */
+@Getter
+@Setter
 @Slf4j
 public abstract class AbstractDatabaseDiscoveryType implements DatabaseDiscoveryType {
     
@@ -42,22 +41,7 @@ public abstract class AbstractDatabaseDiscoveryType implements DatabaseDiscovery
     protected abstract String getPrimaryDataSourceURL(Statement statement) throws SQLException;
     
     @Override
-    public void updatePrimaryDataSource(final String databaseName, final Map<String, DataSource> dataSourceMap, final Collection<String> disabledDataSourceNames, final String groupName) {
-        Map<String, DataSource> activeDataSourceMap = new HashMap<>(dataSourceMap);
-        if (!disabledDataSourceNames.isEmpty()) {
-            activeDataSourceMap.entrySet().removeIf(each -> disabledDataSourceNames.contains(each.getKey()));
-        }
-        String newPrimaryDataSource = determinePrimaryDataSource(activeDataSourceMap);
-        if (newPrimaryDataSource.isEmpty()) {
-            return;
-        }
-        if (!newPrimaryDataSource.equals(oldPrimaryDataSource)) {
-            oldPrimaryDataSource = newPrimaryDataSource;
-            ShardingSphereEventBus.getInstance().post(new PrimaryDataSourceChangedEvent(new QualifiedDatabase(databaseName, groupName, newPrimaryDataSource)));
-        }
-    }
-    
-    private String determinePrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
+    public final String determinePrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
         String primaryDataSourceURL = findPrimaryDataSourceURL(dataSourceMap);
         return findPrimaryDataSourceName(primaryDataSourceURL, dataSourceMap);
     }
@@ -94,7 +78,7 @@ public abstract class AbstractDatabaseDiscoveryType implements DatabaseDiscovery
     }
     
     @Override
-    public String getPrimaryDataSource() {
+    public final String getPrimaryDataSource() {
         return oldPrimaryDataSource;
     }
 }
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 ced3a18c81a..d04d3fce8d9 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
@@ -42,13 +42,13 @@ import java.util.Properties;
 /**
  * Show slave status database discovery type.
  */
+@Getter
+@Setter
 @Slf4j
 public final class ShowSlaveStatusDatabaseDiscoveryType extends AbstractDatabaseDiscoveryType {
     
     private static final String SHOW_SLAVE_STATUS = "SHOW SLAVE STATUS";
     
-    @Getter
-    @Setter
     private Properties props = new Properties();
     
     @Override
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/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/MGRDatabaseDiscoveryTypeTest.java
index ab9429cb785..a9b1967fe1d 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/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/MGRDatabaseDiscoveryTypeTest.java
@@ -35,7 +35,6 @@ import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -45,8 +44,8 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.mockStatic;
-import static org.mockito.Mockito.when;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 public final class MGRDatabaseDiscoveryTypeTest {
     
@@ -92,7 +91,7 @@ public final class MGRDatabaseDiscoveryTypeTest {
     }
     
     @Test
-    public void assertUpdatePrimaryDataSource() throws SQLException {
+    public void assertDeterminePrimaryDataSource() throws SQLException {
         List<DataSource> dataSources = new LinkedList<>();
         List<Connection> connections = new LinkedList<>();
         List<Statement> statements = new LinkedList<>();
@@ -122,8 +121,7 @@ public final class MGRDatabaseDiscoveryTypeTest {
             dataSourceMap.put(String.format("ds_%s", i), dataSources.get(i));
         }
         mgrDatabaseDiscoveryType.getProps().setProperty("group-name", "group_name");
-        mgrDatabaseDiscoveryType.updatePrimaryDataSource("discovery_db", dataSourceMap, Collections.emptySet(), "group_name");
-        assertThat(mgrDatabaseDiscoveryType.getPrimaryDataSource(), is("ds_2"));
+        assertThat(mgrDatabaseDiscoveryType.determinePrimaryDataSource(dataSourceMap), is("ds_2"));
     }
     
     // TODO Fix me
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/ShowSlaveStatusDatabaseDiscoveryTypeTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/ShowSlaveStatusDatabaseDiscoveryTypeTest.java
index e539d8dd839..3ae250027ef 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/ShowSlaveStatusDatabaseDiscoveryTypeTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/ShowSlaveStatusDatabaseDiscoveryTypeTest.java
@@ -25,7 +25,6 @@ import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -47,12 +46,11 @@ public final class ShowSlaveStatusDatabaseDiscoveryTypeTest {
     }
     
     @Test
-    public void assertUpdatePrimaryDataSource() throws SQLException {
+    public void assertDeterminePrimaryDataSource() throws SQLException {
         Map<String, DataSource> dataSourceMap = new HashMap<>(2, 1);
         dataSourceMap.put("ds_0", getDataSource(false, 3306));
         dataSourceMap.put("ds_1", getDataSource(true, 3307));
-        showSlaveStatusDatabaseDiscoveryType.updatePrimaryDataSource("discovery_db", dataSourceMap, Collections.emptySet(), "group_name");
-        assertThat(showSlaveStatusDatabaseDiscoveryType.getPrimaryDataSource(), is("ds_0"));
+        assertThat(showSlaveStatusDatabaseDiscoveryType.determinePrimaryDataSource(dataSourceMap), is("ds_0"));
     }
     
     private DataSource getDataSource(final boolean slave, final int port) throws SQLException {
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 e152c48e1c3..3187e0bc92b 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
@@ -22,9 +22,7 @@ import lombok.Setter;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
-import org.apache.shardingsphere.infra.metadata.schema.QualifiedDatabase;
 import org.apache.shardingsphere.infra.rule.event.impl.DataSourceDisabledEvent;
-import org.apache.shardingsphere.infra.rule.event.impl.PrimaryDataSourceChangedEvent;
 import org.apache.shardingsphere.infra.storage.StorageNodeDataSource;
 import org.apache.shardingsphere.infra.storage.StorageNodeRole;
 import org.apache.shardingsphere.infra.storage.StorageNodeStatus;
@@ -34,7 +32,6 @@ import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.util.Collection;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
@@ -42,6 +39,8 @@ import java.util.Properties;
 /**
  * OpenGauss database discovery type.
  */
+@Getter
+@Setter
 @Slf4j
 public final class OpenGaussDatabaseDiscoveryType implements DatabaseDiscoveryType {
     
@@ -59,19 +58,7 @@ public final class OpenGaussDatabaseDiscoveryType implements DatabaseDiscoveryTy
     }
     
     @Override
-    public void updatePrimaryDataSource(final String databaseName, final Map<String, DataSource> dataSourceMap, final Collection<String> disabledDataSourceNames, final String groupName) {
-        String newPrimaryDataSource = determinePrimaryDataSource(dataSourceMap);
-        if (newPrimaryDataSource.isEmpty()) {
-            oldPrimaryDataSource = "";
-            return;
-        }
-        if (!newPrimaryDataSource.equals(oldPrimaryDataSource)) {
-            oldPrimaryDataSource = newPrimaryDataSource;
-            ShardingSphereEventBus.getInstance().post(new PrimaryDataSourceChangedEvent(new QualifiedDatabase(databaseName, groupName, newPrimaryDataSource)));
-        }
-    }
-    
-    private String determinePrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
+    public String determinePrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
         String result = "";
         for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
             try (Connection connection = entry.getValue().getConnection();
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussDatabaseDiscoveryTypeTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussDatabaseDiscoveryTypeTest.java
index d4d8813a3cd..488ac0f1483 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussDatabaseDiscoveryTypeTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussDatabaseDiscoveryTypeTest.java
@@ -25,7 +25,6 @@ import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -64,7 +63,7 @@ public final class OpenGaussDatabaseDiscoveryTypeTest {
     }
     
     @Test
-    public void assertUpdatePrimaryDataSource() throws SQLException {
+    public void assertDeterminePrimaryDataSource() throws SQLException {
         List<DataSource> dataSources = new LinkedList<>();
         List<Connection> connections = new LinkedList<>();
         List<Statement> statements = new LinkedList<>();
@@ -91,7 +90,6 @@ public final class OpenGaussDatabaseDiscoveryTypeTest {
         for (int i = 0; i < 3; i++) {
             dataSourceMap.put(String.format("ds_%s", i), dataSources.get(i));
         }
-        ogHaType.updatePrimaryDataSource("discovery_db", dataSourceMap, Collections.emptySet(), "group_name");
-        assertThat(ogHaType.getPrimaryDataSource(), is("ds_2"));
+        assertThat(ogHaType.determinePrimaryDataSource(dataSourceMap), is("ds_2"));
     }
 }