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

zhonghongsheng 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 62eca8a  Adjust disable or enable slave datasource logic (#16375)
62eca8a is described below

commit 62eca8a2060d640c1fe9df9025481cb030bfcacc
Author: zhaojinchao <[email protected]>
AuthorDate: Fri Mar 25 21:07:08 2022 +0800

    Adjust disable or enable slave datasource logic (#16375)
---
 .../dbdiscovery/mysql/AbstractDatabaseDiscoveryType.java       | 10 ----------
 .../dbdiscovery/mysql/type/MGRDatabaseDiscoveryType.java       |  7 +++++--
 .../mysql/type/ShowSlaveStatusDatabaseDiscoveryType.java       |  5 ++++-
 3 files changed, 9 insertions(+), 13 deletions(-)

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 e0164f9..c3bf80b 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
@@ -30,7 +30,6 @@ import java.sql.Statement;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * Abstract database discovery type.
@@ -42,8 +41,6 @@ public abstract class AbstractDatabaseDiscoveryType 
implements DatabaseDiscovery
     
     protected abstract String getPrimaryDataSourceURL(Statement statement) 
throws SQLException;
     
-    protected abstract void determineMemberDataSourceState(String schemaName, 
Map<String, DataSource> dataSourceMap, String groupName);
-    
     @Override
     public void updatePrimaryDataSource(final String schemaName, final 
Map<String, DataSource> dataSourceMap, final Collection<String> 
disabledDataSourceNames, final String groupName) {
         Map<String, DataSource> activeDataSourceMap = new 
HashMap<>(dataSourceMap);
@@ -60,13 +57,6 @@ public abstract class AbstractDatabaseDiscoveryType 
implements DatabaseDiscovery
         }
     }
     
-    @Override
-    public void updateMemberState(final String schemaName, final Map<String, 
DataSource> dataSourceMap, final String groupName) {
-        Map<String, DataSource> activeDataSourceMap = 
dataSourceMap.entrySet().stream()
-                .filter(each -> 
!each.getKey().equals(oldPrimaryDataSource)).collect(Collectors.toMap(Map.Entry::getKey,
 Map.Entry::getValue));
-        determineMemberDataSourceState(schemaName, activeDataSourceMap, 
groupName);
-    }
-    
     private String determinePrimaryDataSource(final Map<String, DataSource> 
dataSourceMap) {
         String primaryDataSourceURL = findPrimaryDataSourceURL(dataSourceMap);
         return findPrimaryDataSourceName(primaryDataSourceURL, dataSourceMap);
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 f55e4ff..263cc10 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
@@ -153,7 +153,7 @@ public final class MGRDatabaseDiscoveryType extends 
AbstractDatabaseDiscoveryTyp
     }
     
     @Override
-    protected void determineMemberDataSourceState(final String schemaName, 
final Map<String, DataSource> dataSourceMap, final String groupName) {
+    public void updateMemberState(final String schemaName, final Map<String, 
DataSource> dataSourceMap, final String groupName) {
         List<String> memberDataSourceURLs = 
findMemberDataSourceURLs(dataSourceMap);
         if (memberDataSourceURLs.isEmpty()) {
             return;
@@ -163,7 +163,7 @@ public final class MGRDatabaseDiscoveryType extends 
AbstractDatabaseDiscoveryTyp
     
     private List<String> findMemberDataSourceURLs(final Map<String, 
DataSource> dataSourceMap) {
         List<String> result = new LinkedList<>();
-        try (Connection connection = 
dataSourceMap.values().stream().findFirst().get().getConnection();
+        try (Connection connection = 
dataSourceMap.get(getPrimaryDataSource()).getConnection();
              Statement statement = connection.createStatement()) {
             ResultSet resultSet = statement.executeQuery(MEMBER_LIST);
             while (resultSet.next()) {
@@ -180,6 +180,9 @@ public final class MGRDatabaseDiscoveryType extends 
AbstractDatabaseDiscoveryTyp
     
     private void determineDisabledDataSource(final String schemaName, final 
Map<String, DataSource> dataSourceMap, final List<String> memberDataSourceURLs, 
final String groupName) {
         for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
+            if (entry.getKey().equals(getPrimaryDataSource())) {
+                continue;
+            }
             boolean disable = true;
             String url;
             try (Connection connection = entry.getValue().getConnection()) {
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 0033cb6..91aabed 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
@@ -87,8 +87,11 @@ public final class ShowSlaveStatusDatabaseDiscoveryType 
extends AbstractDatabase
     }
     
     @Override
-    protected void determineMemberDataSourceState(final String schemaName, 
final Map<String, DataSource> dataSourceMap, final String groupName) {
+    public void updateMemberState(final String schemaName, final Map<String, 
DataSource> dataSourceMap, final String groupName) {
         for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
+            if (entry.getKey().equals(getPrimaryDataSource())) {
+                continue;
+            }
             determineDatasourceState(schemaName, entry.getKey(), 
entry.getValue(), groupName);
         }
     }

Reply via email to