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 18:49:18 UTC

[shardingsphere] branch master updated: Refactor MGRMySQLDatabaseDiscoveryType.updateMemberState (#17040)

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 e826b154fe1 Refactor MGRMySQLDatabaseDiscoveryType.updateMemberState (#17040)
e826b154fe1 is described below

commit e826b154fe1846bb7227032386d6ea3c2d4b33d8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Apr 24 02:48:58 2022 +0800

    Refactor MGRMySQLDatabaseDiscoveryType.updateMemberState (#17040)
    
    * Refactor MySQLNormalReplicationMySQLDatabaseDiscoveryType
    
    * Refactor MGRMySQLDatabaseDiscoveryType
    
    * Refactor MGRMySQLDatabaseDiscoveryType
---
 .../type/mgr/MGRMySQLDatabaseDiscoveryType.java    | 50 ++++++++++------------
 ...ormalReplicationMySQLDatabaseDiscoveryType.java |  4 +-
 2 files changed, 25 insertions(+), 29 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/type/mgr/MGRMySQLDatabaseDiscoveryType.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
index 174e2daf953..9824d9ef8c9 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/MGRMySQLDatabaseDiscoveryType.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
@@ -102,23 +102,28 @@ public final class MGRMySQLDatabaseDiscoveryType extends AbstractMySQLDatabaseDi
     
     @Override
     public void updateMemberState(final String databaseName, final Map<String, DataSource> dataSourceMap, final String groupName) {
-        Collection<String> memberDataSourceURLs = findMemberDataSourceURLs(dataSourceMap);
-        if (!memberDataSourceURLs.isEmpty()) {
-            determineDisabledDataSource(databaseName, dataSourceMap, memberDataSourceURLs, groupName);
+        Collection<String> memberDatabaseInstanceURLs = findMemberDatabaseInstanceURLs(dataSourceMap);
+        if (memberDatabaseInstanceURLs.isEmpty()) {
+            return;
+        }
+        for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
+            if (!entry.getKey().equals(getPrimaryDataSource())) {
+                StorageNodeStatus storageNodeStatus = isDisabledDataSource(memberDatabaseInstanceURLs, entry.getValue()) ? StorageNodeStatus.DISABLED : StorageNodeStatus.ENABLED;
+                ShardingSphereEventBus.getInstance().post(new DataSourceDisabledEvent(databaseName, groupName, entry.getKey(), new StorageNodeDataSource(StorageNodeRole.MEMBER, storageNodeStatus)));
+            }
         }
     }
     
-    private Collection<String> findMemberDataSourceURLs(final Map<String, DataSource> dataSourceMap) {
+    private Collection<String> findMemberDatabaseInstanceURLs(final Map<String, DataSource> dataSourceMap) {
         Collection<String> result = new LinkedList<>();
         try (
                 Connection connection = dataSourceMap.get(getPrimaryDataSource()).getConnection();
-                Statement statement = connection.createStatement()) {
-            ResultSet resultSet = statement.executeQuery(QUERY_MEMBER_LIST);
+                Statement statement = connection.createStatement();
+                ResultSet resultSet = statement.executeQuery(QUERY_MEMBER_LIST)) {
             while (resultSet.next()) {
-                if (!"ONLINE".equals(resultSet.getString("MEMBER_STATE"))) {
-                    continue;
+                if ("ONLINE".equals(resultSet.getString("MEMBER_STATE"))) {
+                    result.add(String.format("%s:%s", resultSet.getString("MEMBER_HOST"), resultSet.getString("MEMBER_PORT")));
                 }
-                result.add(String.format("%s:%s", resultSet.getString("MEMBER_HOST"), resultSet.getString("MEMBER_PORT")));
             }
         } catch (final SQLException ex) {
             log.error("An exception occurred while find member data source urls", ex);
@@ -126,27 +131,18 @@ public final class MGRMySQLDatabaseDiscoveryType extends AbstractMySQLDatabaseDi
         return result;
     }
     
-    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;
-            }
-            boolean disable = true;
-            String url;
-            try (Connection connection = entry.getValue().getConnection()) {
-                url = connection.getMetaData().getURL();
-                for (String each : memberDataSourceURLs) {
-                    if (null != url && url.contains(each)) {
-                        disable = false;
-                        break;
-                    }
+    private boolean isDisabledDataSource(final Collection<String> memberDataSourceURLs, final DataSource dataSource) {
+        try (Connection connection = dataSource.getConnection()) {
+            String url = connection.getMetaData().getURL();
+            for (String each : memberDataSourceURLs) {
+                if (null != url && url.contains(each)) {
+                    return false;
                 }
-            } catch (final SQLException ex) {
-                log.error("An exception occurred while find data source urls", ex);
             }
-            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-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationMySQLDatabaseDiscoveryType.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/MySQLNormalReplicationMySQLD [...]
index ea78d43cdf6..16f98fc900f 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/MySQLNormalReplicationMySQLDatabaseDiscoveryType.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
@@ -69,12 +69,12 @@ public final class MySQLNormalReplicationMySQLDatabaseDiscoveryType extends Abst
     public void updateMemberState(final String databaseName, final Map<String, DataSource> dataSourceMap, final String groupName) {
         for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
             if (!entry.getKey().equals(getPrimaryDataSource())) {
-                determineDatasourceState(databaseName, entry.getKey(), entry.getValue(), groupName);
+                postDataSourceDisabledEvent(databaseName, entry.getKey(), entry.getValue(), groupName);
             }
         }
     }
     
-    private void determineDatasourceState(final String databaseName, final String datasourceName, final DataSource dataSource, final String groupName) {
+    private void postDataSourceDisabledEvent(final String databaseName, final String datasourceName, final DataSource dataSource, final String groupName) {
         try (
                 Connection connection = dataSource.getConnection();
                 Statement statement = connection.createStatement()) {