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()) {