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

[shardingsphere] branch master updated: Refactor MGRHighlyAvailableStatus (#17063)

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

zhaojinchao 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 c92b02d9ef9 Refactor MGRHighlyAvailableStatus (#17063)
c92b02d9ef9 is described below

commit c92b02d9ef9fc2f645ac131cad167934e605c4a4
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Apr 24 20:03:55 2022 +0800

    Refactor MGRHighlyAvailableStatus (#17063)
    
    * Refactor DatabaseDiscoveryProviderAlgorithm.findPrimaryInstance()
    
    * Refactor DatabaseDiscoveryProviderAlgorithm.findPrimaryInstance()
    
    * Refactor MGRHighlyAvailableStatus
---
 .../dbdiscovery/mysql/type/mgr/MGRHighlyAvailableStatus.java     | 9 +++++----
 .../type/mgr/MGRMySQLDatabaseDiscoveryProviderAlgorithm.java     | 8 ++++----
 .../type/mgr/MGRDatabaseDiscoveryProviderAlgorithmTest.java      | 8 ++++++--
 3 files changed, 15 insertions(+), 10 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/MGRHighlyAvailableStatus.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/MGRHighlyAvailableStatus.java
index 037dbf9f77b..746eef5b191 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/MGRHighlyAvailableStatus.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/MGRHighlyAvailableStatus.java
@@ -21,6 +21,7 @@ import com.google.common.base.Preconditions;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.dbdiscovery.spi.instance.type.IPPortPrimaryDatabaseInstance;
 import org.apache.shardingsphere.dbdiscovery.spi.status.type.GlobalHighlyAvailableStatus;
 import org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException;
 
@@ -46,7 +47,7 @@ public final class MGRHighlyAvailableStatus implements GlobalHighlyAvailableStat
     
     private final String groupName;
     
-    private final Collection<String> memberInstanceURLs;
+    private final Collection<IPPortPrimaryDatabaseInstance> databaseInstances;
     
     @Override
     public void validate(final String databaseName, final Map<String, DataSource> dataSourceMap, final Properties props) throws SQLException {
@@ -54,16 +55,16 @@ public final class MGRHighlyAvailableStatus implements GlobalHighlyAvailableStat
         Preconditions.checkState(singlePrimaryMode, "MGR is not in single primary mode in database `%s`.", databaseName);
         Preconditions.checkState(props.getProperty("group-name", "").equals(groupName),
                 "Group name `%s` in MGR is not same with configured one `%s` in database `%s`.", groupName, props.getProperty("group-name"), databaseName);
-        Preconditions.checkState(!memberInstanceURLs.isEmpty(), "MGR member is empty in database `%s`.", databaseName);
+        Preconditions.checkState(!databaseInstances.isEmpty(), "MGR member is empty in database `%s`.", databaseName);
         for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
             checkDataSourceInReplicationGroup(databaseName, entry.getKey(), entry.getValue());
         }
     }
     
     private void checkDataSourceInReplicationGroup(final String databaseName, final String dataSourceName, final DataSource dataSource) throws SQLException {
-        for (String each : memberInstanceURLs) {
+        for (IPPortPrimaryDatabaseInstance each : databaseInstances) {
             try (Connection connection = dataSource.getConnection()) {
-                if (connection.getMetaData().getURL().contains(each)) {
+                if (connection.getMetaData().getURL().contains(each.toString())) {
                     return;
                 }
             }
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/MGRMySQLDatabaseDiscoveryProviderAlgorithm.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/MGRMySQLDatabaseDiscoveryProviderAlgorithm.java
index 74de129b724..e2a77ad6b8e 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/MGRMySQLDatabaseDiscoveryProviderAlgorithm.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/MGRMySQLDatabaseDiscoveryProviderAlgorithm.java
@@ -68,7 +68,7 @@ public final class MGRMySQLDatabaseDiscoveryProviderAlgorithm implements Databas
         try (
                 Connection connection = dataSource.getConnection();
                 Statement statement = connection.createStatement()) {
-            return new MGRHighlyAvailableStatus(queryIsPluginActive(statement), queryIsSinglePrimaryMode(statement), queryGroupName(statement), queryMemberInstanceURLs(statement));
+            return new MGRHighlyAvailableStatus(queryIsPluginActive(statement), queryIsSinglePrimaryMode(statement), queryGroupName(statement), queryMemberInstances(statement));
         }
     }
     
@@ -90,11 +90,11 @@ public final class MGRMySQLDatabaseDiscoveryProviderAlgorithm implements Databas
         }
     }
     
-    private Collection<String> queryMemberInstanceURLs(final Statement statement) throws SQLException {
-        Collection<String> result = new LinkedList<>();
+    private Collection<IPPortPrimaryDatabaseInstance> queryMemberInstances(final Statement statement) throws SQLException {
+        Collection<IPPortPrimaryDatabaseInstance> result = new LinkedList<>();
         try (ResultSet resultSet = statement.executeQuery(QUERY_MEMBER_LIST)) {
             while (resultSet.next()) {
-                result.add(String.format("%s:%s", resultSet.getString("MEMBER_HOST"), resultSet.getString("MEMBER_PORT")));
+                result.add(new IPPortPrimaryDatabaseInstance(resultSet.getString("MEMBER_HOST"), resultSet.getString("MEMBER_PORT")));
             }
         }
         return result;
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/MGRDatabaseDiscoveryProviderAlgorithmTest.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/MGRDatabaseDiscoveryProviderAlgorithmTest.java
index e020ad70842..59281c78574 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/MGRDatabaseDiscoveryProviderAlgorithmTest.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/MGRDatabaseDiscoveryProviderAlgorithmTest.java
@@ -27,14 +27,15 @@ import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.util.Arrays;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
@@ -63,7 +64,10 @@ public final class MGRDatabaseDiscoveryProviderAlgorithmTest {
         assertTrue(actual.isPluginActive());
         assertTrue(actual.isSinglePrimaryMode());
         assertThat(actual.getGroupName(), is("group_name"));
-        assertThat(actual.getMemberInstanceURLs(), is(Arrays.asList("127.0.0.1:3306", "127.0.0.1:3307")));
+        Iterator<IPPortPrimaryDatabaseInstance> databaseInstances = actual.getDatabaseInstances().iterator();
+        assertThat(databaseInstances.next().toString(), is("127.0.0.1:3306"));
+        assertThat(databaseInstances.next().toString(), is("127.0.0.1:3307"));
+        assertFalse(databaseInstances.hasNext());
     }
     
     @Test