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 15:13:07 UTC
[shardingsphere] branch master updated: Rename AbstractMySQLDatabaseDiscoveryType & Refactor DatabaseDiscoveryEngine (#17038)
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 4193edfb508 Rename AbstractMySQLDatabaseDiscoveryType & Refactor DatabaseDiscoveryEngine (#17038)
4193edfb508 is described below
commit 4193edfb5083d7cb4e3ea86a7298a45d0688f2e9
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Apr 23 23:13:00 2022 +0800
Rename AbstractMySQLDatabaseDiscoveryType & Refactor DatabaseDiscoveryEngine (#17038)
* Rename AbstractMySQLDatabaseDiscoveryType
* Rename MGRMySQLDatabaseDiscoveryType
* Refactor AbstractMySQLDatabaseDiscoveryType
* Refactor AbstractMySQLDatabaseDiscoveryType
* Refactor OpenGaussNormalReplicationDatabaseDiscoveryType
* Refactor OpenGaussNormalReplicationDatabaseDiscoveryType
* Refactor OpenGaussNormalReplicationDatabaseDiscoveryType
* Refactor OpenGaussNormalReplicationDatabaseDiscoveryType
* Refactor OpenGaussNormalReplicationDatabaseDiscoveryType
* Refactor DatabaseDiscoveryEngine
* Refactor StorageNodeDataSource
---
.../dbdiscovery/spi/DatabaseDiscoveryType.java | 6 +--
.../algorithm/DatabaseDiscoveryEngine.java | 21 +++------
.../dbdiscovery/heartbeat/HeartbeatJob.java | 7 ++-
.../dbdiscovery/rule/DatabaseDiscoveryRule.java | 4 +-
.../fixture/CoreFixtureDatabaseDiscoveryType.java | 2 +-
.../rule/DatabaseDiscoveryDataSourceRuleTest.java | 10 ++---
...orithmProviderConfigurationYamlSwapperTest.java | 4 +-
.../DistSQLFixtureDatabaseDiscoveryType.java | 2 +-
...ava => AbstractMySQLDatabaseDiscoveryType.java} | 50 ++++++++++++----------
...ype.java => MGRMySQLDatabaseDiscoveryType.java} | 27 ++++--------
...rmalReplicationMySQLDatabaseDiscoveryType.java} | 17 +++-----
...ingsphere.dbdiscovery.spi.DatabaseDiscoveryType | 4 +-
.../type/mgr/MGRDatabaseDiscoveryTypeTest.java | 8 ++--
...NormalReplicationDatabaseDiscoveryTypeTest.java | 4 +-
...aussNormalReplicationDatabaseDiscoveryType.java | 44 +++++++++----------
...NormalReplicationDatabaseDiscoveryTypeTest.java | 2 +-
.../DatabaseDiscoverySpringNamespaceTest.java | 4 +-
.../infra/storage/StorageNodeDataSource.java | 5 ++-
18 files changed, 99 insertions(+), 122 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryType.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryType.java
index 6dbb65886f0..f0fda7cc8dd 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryType.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryType.java
@@ -40,12 +40,12 @@ public interface DatabaseDiscoveryType extends ShardingSphereAlgorithm {
HighlyAvailableStatus loadHighlyAvailableStatus(DataSource dataSource) throws SQLException;
/**
- * Find primary data source.
+ * Find primary data source name.
*
* @param dataSourceMap data source map
- * @return determined name of primary data source
+ * @return found name of primary data source
*/
- Optional<String> findPrimaryDataSource(Map<String, DataSource> dataSourceMap);
+ Optional<String> findPrimaryDataSourceName(Map<String, DataSource> dataSourceMap);
/**
* Update member state.
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
index 0375e9e6d24..7b7cfbcbec8 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
@@ -89,14 +89,16 @@ public final class DatabaseDiscoveryEngine {
* @param dataSourceMap data source map
* @param disabledDataSourceNames disabled data source names
* @param groupName group name
+ * @return updated primary data source name
*/
- public void updatePrimaryDataSource(final String databaseName, final Map<String, DataSource> dataSourceMap, final Collection<String> disabledDataSourceNames, final String groupName) {
- Optional<String> newPrimaryDataSource = databaseDiscoveryType.findPrimaryDataSource(getActiveDataSourceMap(dataSourceMap, disabledDataSourceNames));
- if (newPrimaryDataSource.isPresent() && !newPrimaryDataSource.get().equals(databaseDiscoveryType.getOldPrimaryDataSource())) {
- databaseDiscoveryType.setOldPrimaryDataSource(newPrimaryDataSource.get());
- ShardingSphereEventBus.getInstance().post(new PrimaryDataSourceChangedEvent(new QualifiedDatabase(databaseName, groupName, newPrimaryDataSource.get())));
+ public String updatePrimaryDataSource(final String databaseName, final Map<String, DataSource> dataSourceMap, final Collection<String> disabledDataSourceNames, final String groupName) {
+ Optional<String> newPrimaryDataSourceName = databaseDiscoveryType.findPrimaryDataSourceName(getActiveDataSourceMap(dataSourceMap, disabledDataSourceNames));
+ if (newPrimaryDataSourceName.isPresent() && !newPrimaryDataSourceName.get().equals(databaseDiscoveryType.getOldPrimaryDataSource())) {
+ databaseDiscoveryType.setOldPrimaryDataSource(newPrimaryDataSourceName.get());
+ ShardingSphereEventBus.getInstance().post(new PrimaryDataSourceChangedEvent(new QualifiedDatabase(databaseName, groupName, newPrimaryDataSourceName.get())));
}
databaseDiscoveryType.updateMemberState(databaseName, dataSourceMap, groupName);
+ return newPrimaryDataSourceName.orElseGet(databaseDiscoveryType::getPrimaryDataSource);
}
private Map<String, DataSource> getActiveDataSourceMap(final Map<String, DataSource> dataSourceMap, final Collection<String> disabledDataSourceNames) {
@@ -106,13 +108,4 @@ public final class DatabaseDiscoveryEngine {
}
return result;
}
-
- /**
- * Get primary data source.
- *
- * @return primary data source
- */
- public String getPrimaryDataSource() {
- return databaseDiscoveryType.getPrimaryDataSource();
- }
}
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/heartbeat/HeartbeatJob.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/heartbeat/HeartbeatJob.java
index 48cb1342ad0..4b925f52057 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/heartbeat/HeartbeatJob.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/heartbeat/HeartbeatJob.java
@@ -28,12 +28,12 @@ import java.util.Collection;
import java.util.Map;
/**
- * HA heartbeat job.
+ * Heartbeat job.
*/
@RequiredArgsConstructor
public final class HeartbeatJob implements SimpleJob {
- private final String schemaName;
+ private final String databaseName;
private final Map<String, DataSource> dataSourceMap;
@@ -45,7 +45,6 @@ public final class HeartbeatJob implements SimpleJob {
@Override
public void execute(final ShardingContext shardingContext) {
- DatabaseDiscoveryEngine engine = new DatabaseDiscoveryEngine(databaseDiscoveryType);
- engine.updatePrimaryDataSource(schemaName, dataSourceMap, disabledDataSourceNames, groupName);
+ new DatabaseDiscoveryEngine(databaseDiscoveryType).updatePrimaryDataSource(databaseName, dataSourceMap, disabledDataSourceNames, groupName);
}
}
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
index 22e7f93d6fd..662e6b4af41 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryRule.java
@@ -110,14 +110,12 @@ public final class DatabaseDiscoveryRule implements SchemaRule, DataSourceContai
DatabaseDiscoveryDataSourceRule dataSourceRule = entry.getValue();
DatabaseDiscoveryEngine engine = new DatabaseDiscoveryEngine(dataSourceRule.getDatabaseDiscoveryType());
Map<String, DataSource> originalDataSourceMap = new HashMap<>(dataSourceMap);
- Collection<String> disabledDataSourceNames = dataSourceRule.getDisabledDataSourceNames();
try {
engine.checkHighlyAvailableStatus(databaseName, originalDataSourceMap);
} catch (final SQLException ex) {
throw new ShardingSphereException(ex);
}
- engine.updatePrimaryDataSource(databaseName, originalDataSourceMap, disabledDataSourceNames, groupName);
- dataSourceRule.updatePrimaryDataSourceName(engine.getPrimaryDataSource());
+ dataSourceRule.updatePrimaryDataSourceName(engine.updatePrimaryDataSource(databaseName, originalDataSourceMap, dataSourceRule.getDisabledDataSourceNames(), groupName));
}
}
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreFixtureDatabaseDiscoveryType.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreFixtureDatabaseDiscoveryType.java
index ff1be3bd024..643ad823fc9 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreFixtureDatabaseDiscoveryType.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreFixtureDatabaseDiscoveryType.java
@@ -34,7 +34,7 @@ public final class CoreFixtureDatabaseDiscoveryType implements DatabaseDiscovery
}
@Override
- public Optional<String> findPrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
+ public Optional<String> findPrimaryDataSourceName(final Map<String, DataSource> dataSourceMap) {
return Optional.of("primary");
}
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryDataSourceRuleTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryDataSourceRuleTest.java
index 883cee9f84f..5d845af3634 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryDataSourceRuleTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/rule/DatabaseDiscoveryDataSourceRuleTest.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.rule;
import com.google.common.collect.ImmutableMap;
import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
-import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRMySQLDatabaseDiscoveryType;
import org.junit.Test;
import java.util.Arrays;
@@ -35,24 +35,24 @@ public final class DatabaseDiscoveryDataSourceRuleTest {
private final DatabaseDiscoveryDataSourceRule databaseDiscoveryDataSourceRule = new DatabaseDiscoveryDataSourceRule(
new DatabaseDiscoveryDataSourceRuleConfiguration("test_pr", Arrays.asList("ds_0", "ds_1"), "ha_heartbeat", "discoveryTypeName"), new Properties(),
- new MGRDatabaseDiscoveryType());
+ new MGRMySQLDatabaseDiscoveryType());
@Test(expected = IllegalArgumentException.class)
public void assertNewHADataSourceRuleWithoutName() {
new DatabaseDiscoveryDataSourceRule(new DatabaseDiscoveryDataSourceRuleConfiguration("", Arrays.asList("ds_0", "ds_1"), "ha_heartbeat", "discoveryTypeName"),
- new Properties(), new MGRDatabaseDiscoveryType());
+ new Properties(), new MGRMySQLDatabaseDiscoveryType());
}
@Test(expected = IllegalArgumentException.class)
public void assertNewHADataSourceRuleWithNullDataSourceName() {
new DatabaseDiscoveryDataSourceRule(new DatabaseDiscoveryDataSourceRuleConfiguration("ds", null, "ha_heartbeat", "discoveryTypeName"),
- new Properties(), new MGRDatabaseDiscoveryType());
+ new Properties(), new MGRMySQLDatabaseDiscoveryType());
}
@Test(expected = IllegalArgumentException.class)
public void assertNewHADataSourceRuleWithEmptyDataSourceName() {
new DatabaseDiscoveryDataSourceRule(new DatabaseDiscoveryDataSourceRuleConfiguration("ds", Collections.emptyList(), "ha_heartbeat", "discoveryTypeName"),
- new Properties(), new MGRDatabaseDiscoveryType());
+ new Properties(), new MGRMySQLDatabaseDiscoveryType());
}
@Test
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/yaml/swapper/DatabaseDiscoveryRuleAlgorithmProviderConfigurationYamlSwapperTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/yaml/swapper/DatabaseDiscoveryRuleAlgorithmProviderConfigurationYamlSwapperTest.java
index baaae0ebe2f..dbbf739fcc8 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/yaml/swapper/DatabaseDiscoveryRuleAlgorithmProviderConfigurationYamlSwapperTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/yaml/swapper/DatabaseDiscoveryRuleAlgorithmProviderConfigurationYamlSwapperTest.java
@@ -22,7 +22,7 @@ import org.apache.shardingsphere.dbdiscovery.algorithm.config.AlgorithmProvidedD
import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryHeartBeatConfiguration;
import org.apache.shardingsphere.dbdiscovery.constant.DatabaseDiscoveryOrder;
-import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRMySQLDatabaseDiscoveryType;
import org.apache.shardingsphere.dbdiscovery.yaml.config.YamlDatabaseDiscoveryRuleConfiguration;
import org.junit.Test;
@@ -86,6 +86,6 @@ public final class DatabaseDiscoveryRuleAlgorithmProviderConfigurationYamlSwappe
heartBeatConfig.put("mgr_heartbeat", new DatabaseDiscoveryHeartBeatConfiguration(new Properties()));
return swapper.swapToYamlConfiguration(
new AlgorithmProvidedDatabaseDiscoveryRuleConfiguration(Collections.singletonList(ruleConfig), heartBeatConfig,
- ImmutableMap.of("mgr", new MGRDatabaseDiscoveryType())));
+ ImmutableMap.of("mgr", new MGRMySQLDatabaseDiscoveryType())));
}
}
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLFixtureDatabaseDiscoveryType.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLFixtureDatabas [...]
index 035b0f7f9e6..5c53b7184f5 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLFixtureDatabaseDiscoveryType.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLFixtureDatabaseDiscoveryType.java
@@ -34,7 +34,7 @@ public final class DistSQLFixtureDatabaseDiscoveryType implements DatabaseDiscov
}
@Override
- public Optional<String> findPrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
+ public Optional<String> findPrimaryDataSourceName(final Map<String, DataSource> dataSourceMap) {
return Optional.empty();
}
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/AbstractMySQLDatabaseDiscoveryType.java
similarity index 66%
rename from shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/AbstractDatabaseDiscoveryType.java
rename to shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/AbstractMySQLDatabaseDiscoveryType.java
index c9af67d89d6..ef1e29dbb88 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/AbstractMySQLDatabaseDiscoveryType.java
@@ -29,30 +29,48 @@ import java.sql.Statement;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
+import java.util.Properties;
/**
- * Abstract database discovery type.
+ * Abstract MySQL database discovery type.
*/
@Getter
@Setter
@Slf4j
-public abstract class AbstractDatabaseDiscoveryType implements DatabaseDiscoveryType {
+public abstract class AbstractMySQLDatabaseDiscoveryType implements DatabaseDiscoveryType {
+
+ private Properties props = new Properties();
private String oldPrimaryDataSource;
@Override
- public final Optional<String> findPrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
- return findPrimaryDataSourceName(loadPrimaryDataSourceURL(dataSourceMap), dataSourceMap);
+ public final Optional<String> findPrimaryDataSourceName(final Map<String, DataSource> dataSourceMap) {
+ String primaryDatabaseInstanceURL = loadPrimaryDatabaseInstanceURL(dataSourceMap);
+ return findPrimaryDataSourceName(dataSourceMap, primaryDatabaseInstanceURL);
+ }
+
+ private Optional<String> findPrimaryDataSourceName(final Map<String, DataSource> dataSourceMap, final String primaryDatabaseInstanceURL) {
+ for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
+ try (Connection connection = entry.getValue().getConnection()) {
+ String url = connection.getMetaData().getURL();
+ if (null != url && url.contains(primaryDatabaseInstanceURL)) {
+ return Optional.of(entry.getKey());
+ }
+ } catch (final SQLException ex) {
+ log.error("An exception occurred while find primary data source name", ex);
+ }
+ }
+ return Optional.empty();
}
- private String loadPrimaryDataSourceURL(final Map<String, DataSource> dataSourceMap) {
+ private String loadPrimaryDatabaseInstanceURL(final Map<String, DataSource> dataSourceMap) {
for (DataSource each : dataSourceMap.values()) {
try (
Connection connection = each.getConnection();
Statement statement = connection.createStatement()) {
- Optional<String> primaryDataSourceURL = loadPrimaryDataSourceURL(statement);
- if (primaryDataSourceURL.isPresent()) {
- return primaryDataSourceURL.get();
+ Optional<String> primaryDatabaseInstanceURL = loadPrimaryDatabaseInstanceURL(statement);
+ if (primaryDatabaseInstanceURL.isPresent()) {
+ return primaryDatabaseInstanceURL.get();
}
} catch (final SQLException ex) {
log.error("An exception occurred while find primary data source url", ex);
@@ -61,21 +79,7 @@ public abstract class AbstractDatabaseDiscoveryType implements DatabaseDiscovery
return "";
}
- protected abstract Optional<String> loadPrimaryDataSourceURL(Statement statement) throws SQLException;
-
- private Optional<String> findPrimaryDataSourceName(final String primaryDataSourceURL, final Map<String, DataSource> dataSourceMap) {
- for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
- try (Connection connection = entry.getValue().getConnection()) {
- String url = connection.getMetaData().getURL();
- if (null != url && url.contains(primaryDataSourceURL)) {
- return Optional.of(entry.getKey());
- }
- } catch (final SQLException ex) {
- log.error("An exception occurred while find primary data source name", ex);
- }
- }
- return Optional.empty();
- }
+ protected abstract Optional<String> loadPrimaryDatabaseInstanceURL(Statement statement) throws SQLException;
@Override
public final String getPrimaryDataSource() {
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/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/mgr/MGRMySQLDatabaseDiscoveryType.java
similarity index 87%
rename from shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/mgr/MGRDatabaseDiscoveryType.java
rename to 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 bc34bcc16f6..174e2daf953 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/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/mgr/MGRMySQLDatabaseDiscoveryType.java
@@ -17,10 +17,8 @@
package org.apache.shardingsphere.dbdiscovery.mysql.type.mgr;
-import lombok.Getter;
-import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.dbdiscovery.mysql.AbstractDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.AbstractMySQLDatabaseDiscoveryType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.rule.event.impl.DataSourceDisabledEvent;
import org.apache.shardingsphere.infra.storage.StorageNodeDataSource;
@@ -34,17 +32,15 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.LinkedList;
-import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
-import java.util.Properties;
/**
* MGR database discovery type for MySQL.
*/
@Slf4j
-public final class MGRDatabaseDiscoveryType extends AbstractDatabaseDiscoveryType {
+public final class MGRMySQLDatabaseDiscoveryType extends AbstractMySQLDatabaseDiscoveryType {
private static final String QUERY_PLUGIN_STATUS = "SELECT PLUGIN_STATUS FROM information_schema.PLUGINS WHERE PLUGIN_NAME='group_replication'";
@@ -57,10 +53,6 @@ public final class MGRDatabaseDiscoveryType extends AbstractDatabaseDiscoveryTyp
private static final String QUERY_PRIMARY_DATA_SOURCE = "SELECT MEMBER_HOST, MEMBER_PORT FROM performance_schema.replication_group_members WHERE MEMBER_ID = "
+ "(SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME = 'group_replication_primary_member')";
- @Getter
- @Setter
- private Properties props = new Properties();
-
@Override
public MGRHighlyAvailableStatus loadHighlyAvailableStatus(final DataSource dataSource) throws SQLException {
try (
@@ -99,7 +91,7 @@ public final class MGRDatabaseDiscoveryType extends AbstractDatabaseDiscoveryTyp
}
@Override
- protected Optional<String> loadPrimaryDataSourceURL(final Statement statement) throws SQLException {
+ protected Optional<String> loadPrimaryDatabaseInstanceURL(final Statement statement) throws SQLException {
try (ResultSet resultSet = statement.executeQuery(QUERY_PRIMARY_DATA_SOURCE)) {
if (resultSet.next()) {
return Optional.of(String.format("%s:%s", resultSet.getString("MEMBER_HOST"), resultSet.getString("MEMBER_PORT")));
@@ -110,15 +102,14 @@ public final class MGRDatabaseDiscoveryType extends AbstractDatabaseDiscoveryTyp
@Override
public void updateMemberState(final String databaseName, final Map<String, DataSource> dataSourceMap, final String groupName) {
- List<String> memberDataSourceURLs = findMemberDataSourceURLs(dataSourceMap);
- if (memberDataSourceURLs.isEmpty()) {
- return;
+ Collection<String> memberDataSourceURLs = findMemberDataSourceURLs(dataSourceMap);
+ if (!memberDataSourceURLs.isEmpty()) {
+ determineDisabledDataSource(databaseName, dataSourceMap, memberDataSourceURLs, groupName);
}
- determineDisabledDataSource(databaseName, dataSourceMap, memberDataSourceURLs, groupName);
}
- private List<String> findMemberDataSourceURLs(final Map<String, DataSource> dataSourceMap) {
- List<String> result = new LinkedList<>();
+ private Collection<String> findMemberDataSourceURLs(final Map<String, DataSource> dataSourceMap) {
+ Collection<String> result = new LinkedList<>();
try (
Connection connection = dataSourceMap.get(getPrimaryDataSource()).getConnection();
Statement statement = connection.createStatement()) {
@@ -135,7 +126,7 @@ public final class MGRDatabaseDiscoveryType extends AbstractDatabaseDiscoveryTyp
return result;
}
- private void determineDisabledDataSource(final String databaseName, final Map<String, DataSource> dataSourceMap, final List<String> memberDataSourceURLs, final String groupName) {
+ 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;
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/MySQLNormalReplicationDatabaseDiscoveryType.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/MySQLNormalReplicationMySQLDataba [...]
similarity index 88%
rename from shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationDatabaseDiscoveryType.java
rename to 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
index 7b6b89875a3..9d1598c6f02 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/MySQLNormalReplicationDatabaseDiscoveryType.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
@@ -17,10 +17,8 @@
package org.apache.shardingsphere.dbdiscovery.mysql.type.replication;
-import lombok.Getter;
-import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.dbdiscovery.mysql.AbstractDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.AbstractMySQLDatabaseDiscoveryType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.rule.event.impl.DataSourceDisabledEvent;
import org.apache.shardingsphere.infra.storage.StorageNodeDataSource;
@@ -35,31 +33,26 @@ import java.sql.Statement;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
-import java.util.Properties;
/**
* Normal replication database discovery type for MySQL.
*/
-@Getter
-@Setter
@Slf4j
-public final class MySQLNormalReplicationDatabaseDiscoveryType extends AbstractDatabaseDiscoveryType {
+public final class MySQLNormalReplicationMySQLDatabaseDiscoveryType extends AbstractMySQLDatabaseDiscoveryType {
private static final String SHOW_SLAVE_STATUS = "SHOW SLAVE STATUS";
- private Properties props = new Properties();
-
@Override
public MySQLNormalReplicationHighlyAvailableStatus loadHighlyAvailableStatus(final DataSource dataSource) throws SQLException {
try (
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement()) {
- return new MySQLNormalReplicationHighlyAvailableStatus(loadPrimaryDataSourceURL(statement).orElse(null));
+ return new MySQLNormalReplicationHighlyAvailableStatus(loadPrimaryDatabaseInstanceURL(statement).orElse(null));
}
}
@Override
- protected Optional<String> loadPrimaryDataSourceURL(final Statement statement) throws SQLException {
+ protected Optional<String> loadPrimaryDatabaseInstanceURL(final Statement statement) throws SQLException {
try (ResultSet resultSet = statement.executeQuery(SHOW_SLAVE_STATUS)) {
if (resultSet.next()) {
String masterHost = resultSet.getString("Master_Host");
@@ -87,7 +80,7 @@ public final class MySQLNormalReplicationDatabaseDiscoveryType extends AbstractD
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement()) {
long replicationDelayMilliseconds = getSecondsBehindMaster(statement) * 1000L;
- if (replicationDelayMilliseconds < Long.parseLong(props.getProperty("delay-milliseconds-threshold"))) {
+ if (replicationDelayMilliseconds < Long.parseLong(getProps().getProperty("delay-milliseconds-threshold"))) {
ShardingSphereEventBus.getInstance().post(new DataSourceDisabledEvent(databaseName, groupName, datasourceName,
new StorageNodeDataSource(StorageNodeRole.MEMBER, StorageNodeStatus.ENABLED, replicationDelayMilliseconds)));
} else {
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType
index 5e3baa99cf6..bcc989cbe7d 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType
@@ -15,5 +15,5 @@
# limitations under the License.
#
-org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRDatabaseDiscoveryType
-org.apache.shardingsphere.dbdiscovery.mysql.type.replication.MySQLNormalReplicationDatabaseDiscoveryType
+org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRMySQLDatabaseDiscoveryType
+org.apache.shardingsphere.dbdiscovery.mysql.type.replication.MySQLNormalReplicationMySQLDatabaseDiscoveryType
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/MGRDatabaseDiscoveryTypeTest.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/MGRDatabaseDiscoveryTypeTest.java
index 18590f032d9..05940cea768 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/MGRDatabaseDiscoveryTypeTest.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/MGRDatabaseDiscoveryTypeTest.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.dbdiscovery.mysql.type.mgr;
import com.google.common.eventbus.EventBus;
-import org.apache.shardingsphere.dbdiscovery.mysql.AbstractDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.AbstractMySQLDatabaseDiscoveryType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.rule.event.impl.DataSourceDisabledEvent;
import org.apache.shardingsphere.infra.storage.StorageNodeDataSource;
@@ -54,7 +54,7 @@ import static org.mockito.Mockito.when;
public final class MGRDatabaseDiscoveryTypeTest {
- private final MGRDatabaseDiscoveryType databaseDiscoveryType = new MGRDatabaseDiscoveryType();
+ private final MGRMySQLDatabaseDiscoveryType databaseDiscoveryType = new MGRMySQLDatabaseDiscoveryType();
@Test
public void assertLoadHighlyAvailableStatus() throws SQLException {
@@ -107,7 +107,7 @@ public final class MGRDatabaseDiscoveryTypeTest {
dataSourceMap.put(String.format("ds_%s", i), dataSources.get(i));
}
databaseDiscoveryType.getProps().setProperty("group-name", "group_name");
- Optional<String> actual = databaseDiscoveryType.findPrimaryDataSource(dataSourceMap);
+ Optional<String> actual = databaseDiscoveryType.findPrimaryDataSourceName(dataSourceMap);
assertTrue(actual.isPresent());
assertThat(actual.get(), is("ds_2"));
}
@@ -116,7 +116,7 @@ public final class MGRDatabaseDiscoveryTypeTest {
@Ignore
@Test
public void assertUpdateMemberState() throws SQLException, IllegalAccessException, NoSuchFieldException {
- Field declaredField = AbstractDatabaseDiscoveryType.class.getDeclaredField("oldPrimaryDataSource");
+ Field declaredField = AbstractMySQLDatabaseDiscoveryType.class.getDeclaredField("oldPrimaryDataSource");
declaredField.setAccessible(true);
declaredField.set(databaseDiscoveryType, "ds_0");
EventBus eventBus = mock(EventBus.class);
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/replication/MySQLNormalReplicationDatabaseDiscoveryTypeTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationDatabas [...]
index 904c6b11a21..96edcf611c3 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationDatabaseDiscoveryTypeTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-mysql/src/test/java/org/apache/shardingsphere/dbdiscovery/mysql/type/replication/MySQLNormalReplicationDatabaseDiscoveryTypeTest.java
@@ -37,7 +37,7 @@ public final class MySQLNormalReplicationDatabaseDiscoveryTypeTest {
@Test
public void assertLoadHighlyAvailableStatus() throws SQLException {
- MySQLNormalReplicationHighlyAvailableStatus actual = new MySQLNormalReplicationDatabaseDiscoveryType().loadHighlyAvailableStatus(mockDataSource(3306));
+ MySQLNormalReplicationHighlyAvailableStatus actual = new MySQLNormalReplicationMySQLDatabaseDiscoveryType().loadHighlyAvailableStatus(mockDataSource(3306));
assertThat(actual.getPrimaryInstanceURL(), is("127.0.0.1:3306"));
}
@@ -46,7 +46,7 @@ public final class MySQLNormalReplicationDatabaseDiscoveryTypeTest {
Map<String, DataSource> dataSourceMap = new HashMap<>(2, 1);
dataSourceMap.put("ds_0", mockDataSource(3306));
dataSourceMap.put("ds_1", mockDataSource(3307));
- Optional<String> actual = new MySQLNormalReplicationDatabaseDiscoveryType().findPrimaryDataSource(dataSourceMap);
+ Optional<String> actual = new MySQLNormalReplicationMySQLDatabaseDiscoveryType().findPrimaryDataSourceName(dataSourceMap);
assertTrue(actual.isPresent());
assertThat(actual.get(), is("ds_0"));
}
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryType.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicat [...]
index 4fd5213dca0..e7738dbe8c5 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryType.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryType.java
@@ -45,7 +45,7 @@ import java.util.Properties;
@Slf4j
public final class OpenGaussNormalReplicationDatabaseDiscoveryType implements DatabaseDiscoveryType {
- private static final String DB_ROLE = "SELECT local_role,db_state FROM pg_stat_get_stream_replications()";
+ private static final String QUERY_DB_ROLE = "SELECT local_role,db_state FROM pg_stat_get_stream_replications()";
private String oldPrimaryDataSource;
@@ -56,22 +56,20 @@ public final class OpenGaussNormalReplicationDatabaseDiscoveryType implements Da
try (
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
- ResultSet resultSet = statement.executeQuery(DB_ROLE)) {
+ ResultSet resultSet = statement.executeQuery(QUERY_DB_ROLE)) {
return new OpenGaussNormalReplicationHighlyAvailableStatus(resultSet.next() && resultSet.getString("local_role").equals("Primary"));
}
}
@Override
- public Optional<String> findPrimaryDataSource(final Map<String, DataSource> dataSourceMap) {
+ public Optional<String> findPrimaryDataSourceName(final Map<String, DataSource> dataSourceMap) {
for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
try (
Connection connection = entry.getValue().getConnection();
Statement statement = connection.createStatement();
- ResultSet resultSet = statement.executeQuery(DB_ROLE)) {
- if (resultSet.next()) {
- if (resultSet.getString("local_role").equals("Primary") && resultSet.getString("db_state").equals("Normal")) {
- return Optional.of(entry.getKey());
- }
+ ResultSet resultSet = statement.executeQuery(QUERY_DB_ROLE)) {
+ if (resultSet.next() && "Primary".equals(resultSet.getString("local_role")) && "Normal".equals(resultSet.getString("db_state"))) {
+ return Optional.of(entry.getKey());
}
} catch (final SQLException ex) {
log.error("An exception occurred while find primary data source url", ex);
@@ -83,23 +81,23 @@ public final class OpenGaussNormalReplicationDatabaseDiscoveryType implements Da
@Override
public void updateMemberState(final String databaseName, final Map<String, DataSource> dataSourceMap, final String groupName) {
for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
- boolean disable = true;
- try (
- Connection connection = entry.getValue().getConnection();
- Statement statement = connection.createStatement();
- ResultSet resultSet = statement.executeQuery(DB_ROLE)) {
- if (resultSet.next()) {
- if ((resultSet.getString("local_role").equals("Standby") && resultSet.getString("db_state").equals("Normal"))
- || entry.getKey().equals(oldPrimaryDataSource)) {
- disable = false;
- }
- }
- } catch (final SQLException ex) {
- log.error("An exception occurred while find data source urls", ex);
+ StorageNodeStatus storageNodeStatus = isDisabledDataSource(entry.getKey(), entry.getValue()) ? StorageNodeStatus.DISABLED : StorageNodeStatus.ENABLED;
+ ShardingSphereEventBus.getInstance().post(new DataSourceDisabledEvent(databaseName, groupName, entry.getKey(), new StorageNodeDataSource(StorageNodeRole.MEMBER, storageNodeStatus)));
+ }
+ }
+
+ private boolean isDisabledDataSource(final String dataSourceName, final DataSource dataSource) {
+ try (
+ Connection connection = dataSource.getConnection();
+ Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery(QUERY_DB_ROLE)) {
+ if (resultSet.next() && ((resultSet.getString("local_role").equals("Standby") && resultSet.getString("db_state").equals("Normal")) || dataSourceName.equals(oldPrimaryDataSource))) {
+ return false;
}
- 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-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryTypeTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalRepl [...]
index 590910d22da..a120dbddc1f 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryTypeTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-provider/shardingsphere-db-discovery-opengauss/src/test/java/org/apache/shardingsphere/dbdiscovery/opengauss/replication/OpenGaussNormalReplicationDatabaseDiscoveryTypeTest.java
@@ -69,7 +69,7 @@ public final class OpenGaussNormalReplicationDatabaseDiscoveryTypeTest {
for (int i = 0; i < 3; i++) {
dataSourceMap.put(String.format("ds_%s", i), dataSources.get(i));
}
- Optional<String> actual = new OpenGaussNormalReplicationDatabaseDiscoveryType().findPrimaryDataSource(dataSourceMap);
+ Optional<String> actual = new OpenGaussNormalReplicationDatabaseDiscoveryType().findPrimaryDataSourceName(dataSourceMap);
assertTrue(actual.isPresent());
assertThat(actual.get(), is("ds_2"));
}
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-spring/shardingsphere-db-discovery-spring-namespace/src/test/java/org/apache/shardingsphere/dbdiscovery/spring/namespace/DatabaseDiscoverySpringNamespaceTest.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-spring/shardingsphere-db-discovery-spring-namespace/src/test/java/org/apache/shardingsphere/dbdiscovery/spring/namespace/DatabaseDiscoverySpringNamespaceTest.java
index 2da67df9ca2..685c892e45f 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-spring/shardingsphere-db-discovery-spring-namespace/src/test/java/org/apache/shardingsphere/dbdiscovery/spring/namespace/DatabaseDiscoverySpringNamespaceTest.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-spring/shardingsphere-db-discovery-spring-namespace/src/test/java/org/apache/shardingsphere/dbdiscovery/spring/namespace/DatabaseDiscoverySpringNamespaceTest.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.dbdiscovery.spring.namespace;
import org.apache.shardingsphere.dbdiscovery.algorithm.config.AlgorithmProvidedDatabaseDiscoveryRuleConfiguration;
import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDataSourceRuleConfiguration;
import org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryHeartBeatConfiguration;
-import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRDatabaseDiscoveryType;
+import org.apache.shardingsphere.dbdiscovery.mysql.type.mgr.MGRMySQLDatabaseDiscoveryType;
import org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryType;
import org.junit.Test;
import org.springframework.test.context.ContextConfiguration;
@@ -54,7 +54,7 @@ public final class DatabaseDiscoverySpringNamespaceTest extends AbstractJUnit4Sp
private void assertDiscoveryTypes(final Map<String, DatabaseDiscoveryType> discoveryTypes) {
assertThat(discoveryTypes.size(), is(1));
- assertThat(discoveryTypes.get("mgr"), instanceOf(MGRDatabaseDiscoveryType.class));
+ assertThat(discoveryTypes.get("mgr"), instanceOf(MGRMySQLDatabaseDiscoveryType.class));
assertNotNull(discoveryTypes.get("mgr").getProps());
assertThat(discoveryTypes.get("mgr").getProps().get("group-name"), is("92504d5b-6dec-11e8-91ea-246e9612aaf1"));
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/storage/StorageNodeDataSource.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/storage/StorageNodeDataSource.java
index 1c3340d8528..a8aa8540604 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/storage/StorageNodeDataSource.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/storage/StorageNodeDataSource.java
@@ -18,13 +18,13 @@
package org.apache.shardingsphere.infra.storage;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* Data source of storage node.
*/
-@RequiredArgsConstructor
+@NoArgsConstructor
@Getter
@Setter
public final class StorageNodeDataSource {
@@ -38,6 +38,7 @@ public final class StorageNodeDataSource {
public StorageNodeDataSource(final StorageNodeRole role, final StorageNodeStatus status) {
this.role = role.name().toLowerCase();
this.status = status.name().toLowerCase();
+ replicationDelayMilliseconds = null;
}
public StorageNodeDataSource(final StorageNodeRole role, final StorageNodeStatus status, final Long replicationDelayMilliseconds) {