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