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/29 10:56:19 UTC
[shardingsphere] branch master updated: Refactor ReadwriteSplittingDataSourceRule.getEnabledReplicaDataSources() (#17212)
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 d3035053ac5 Refactor ReadwriteSplittingDataSourceRule.getEnabledReplicaDataSources() (#17212)
d3035053ac5 is described below
commit d3035053ac51afb70169d6d2c90773f0b543cc4c
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Apr 29 18:56:12 2022 +0800
Refactor ReadwriteSplittingDataSourceRule.getEnabledReplicaDataSources() (#17212)
* Refactor ReadwriteSplittingStrategyFactory
* Refactor ReadwriteSplittingDataSourceRule.getEnabledReplicaDataSources()
* For code format
---
.../rule/ReadwriteSplittingDataSourceRule.java | 14 +++++++++
.../rule/ReadwriteSplittingRule.java | 35 ++++++++++------------
.../ReadwriteSplittingStrategyFactory.java | 6 ++--
.../rule/ReadwriteSplittingDataSourceRuleTest.java | 11 ++-----
4 files changed, 34 insertions(+), 32 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
index b8169b02dbb..8e6e8d55114 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
@@ -106,4 +106,18 @@ public final class ReadwriteSplittingDataSourceRule {
result.put(ExportableConstants.REPLICA_DATA_SOURCE_NAMES, String.join(",", readDataSourceNames));
return result;
}
+
+ /**
+ * Get enabled replica data sources.
+ *
+ * @return enabled replica data sources
+ */
+ public Collection<String> getEnabledReplicaDataSources() {
+ Collection<String> result = readwriteSplittingStrategy.getReadDataSources();
+ if (!disabledDataSourceNames.isEmpty()) {
+ result = new LinkedList<>(result);
+ result.removeIf(disabledDataSourceNames::contains);
+ }
+ return result;
+ }
}
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
index e7e54f17e69..9b81cf5c2d2 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
@@ -34,7 +34,6 @@ import org.apache.shardingsphere.readwritesplitting.spi.ReplicaLoadBalanceAlgori
import org.apache.shardingsphere.readwritesplitting.strategy.type.DynamicReadwriteSplittingStrategy;
import org.apache.shardingsphere.readwritesplitting.strategy.type.StaticReadwriteSplittingStrategy;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
@@ -42,6 +41,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.function.Supplier;
+import java.util.stream.Collectors;
/**
* Readwrite-splitting rule.
@@ -130,33 +130,28 @@ public final class ReadwriteSplittingRule implements SchemaRule, DataSourceConta
Map<String, Map<String, String>> result = new LinkedHashMap<>(dataSourceRules.size(), 1);
for (ReadwriteSplittingDataSourceRule each : dataSourceRules.values()) {
if (each.getReadwriteSplittingStrategy() instanceof DynamicReadwriteSplittingStrategy) {
- Map<String, String> dataSources = each.getDataSources(false);
- if (!dataSources.isEmpty()) {
- result.put(each.getName(), dataSources);
- }
+ Map<String, String> exportedDataSources = new LinkedHashMap<>(2, 1);
+ exportedDataSources.put(ExportableConstants.PRIMARY_DATA_SOURCE_NAME, each.getWriteDataSource());
+ exportedDataSources.put(ExportableConstants.REPLICA_DATA_SOURCE_NAMES, String.join(",", each.getReadDataSourceNames()));
+ result.put(each.getName(), exportedDataSources);
}
}
return result;
}
private Collection<String> exportAutoAwareDataSourceNames() {
- Collection<String> result = new ArrayList<>();
- for (ReadwriteSplittingDataSourceRule each : dataSourceRules.values()) {
- if (each.getReadwriteSplittingStrategy() instanceof DynamicReadwriteSplittingStrategy) {
- result.add(((DynamicReadwriteSplittingStrategy) each.getReadwriteSplittingStrategy()).getAutoAwareDataSourceName());
- }
- }
- return result;
+ return dataSourceRules.values().stream().filter(each -> each.getReadwriteSplittingStrategy() instanceof DynamicReadwriteSplittingStrategy)
+ .map(each -> ((DynamicReadwriteSplittingStrategy) each.getReadwriteSplittingStrategy()).getAutoAwareDataSourceName()).collect(Collectors.toList());
}
private Map<String, Map<String, String>> exportStaticDataSources() {
Map<String, Map<String, String>> result = new LinkedHashMap<>(dataSourceRules.size(), 1);
for (ReadwriteSplittingDataSourceRule each : dataSourceRules.values()) {
if (each.getReadwriteSplittingStrategy() instanceof StaticReadwriteSplittingStrategy) {
- Map<String, String> dataSources = each.getDataSources(true);
- if (!dataSources.isEmpty()) {
- result.put(each.getName(), dataSources);
- }
+ Map<String, String> exportedDataSources = new LinkedHashMap<>(2, 1);
+ exportedDataSources.put(ExportableConstants.PRIMARY_DATA_SOURCE_NAME, each.getWriteDataSource());
+ exportedDataSources.put(ExportableConstants.REPLICA_DATA_SOURCE_NAMES, String.join(",", each.getEnabledReplicaDataSources()));
+ result.put(each.getName(), exportedDataSources);
}
}
return result;
@@ -165,10 +160,10 @@ public final class ReadwriteSplittingRule implements SchemaRule, DataSourceConta
private Map<String, Map<String, String>> exportAllDataSources() {
Map<String, Map<String, String>> result = new LinkedHashMap<>(dataSourceRules.size(), 1);
for (ReadwriteSplittingDataSourceRule each : dataSourceRules.values()) {
- Map<String, String> dataSources = each.getDataSources(false);
- if (!dataSources.isEmpty()) {
- result.put(each.getName(), dataSources);
- }
+ Map<String, String> exportedDataSources = new LinkedHashMap<>(2, 1);
+ exportedDataSources.put(ExportableConstants.PRIMARY_DATA_SOURCE_NAME, each.getWriteDataSource());
+ exportedDataSources.put(ExportableConstants.REPLICA_DATA_SOURCE_NAMES, String.join(",", each.getReadDataSourceNames()));
+ result.put(each.getName(), exportedDataSources);
}
return result;
}
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
index 9d34f797320..98cda2e16ae 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
@@ -45,10 +45,10 @@ public final class ReadwriteSplittingStrategyFactory {
* @return readwrite splitting strategy
*/
public static ReadwriteSplittingStrategy newInstance(final String type, final Properties props) {
- return "STATIC".equalsIgnoreCase(type) ? createStaticDataSourceProcessor(props) : createDynamicDataSourceProcessor(props);
+ return "STATIC".equalsIgnoreCase(type) ? createStaticReadwriteSplittingStrategy(props) : createDynamicReadwriteSplittingStrategy(props);
}
- private static StaticReadwriteSplittingStrategy createStaticDataSourceProcessor(final Properties props) {
+ private static StaticReadwriteSplittingStrategy createStaticReadwriteSplittingStrategy(final Properties props) {
String writeDataSourceName = props.getProperty("write-data-source-name");
Preconditions.checkArgument(!Strings.isNullOrEmpty(writeDataSourceName), "Write data source name is required.");
Preconditions.checkArgument(!Strings.isNullOrEmpty(props.getProperty("read-data-source-names")), "Read data source names are required.");
@@ -56,7 +56,7 @@ public final class ReadwriteSplittingStrategyFactory {
return new StaticReadwriteSplittingStrategy(writeDataSourceName, readDataSourceNames);
}
- private static DynamicReadwriteSplittingStrategy createDynamicDataSourceProcessor(final Properties props) {
+ private static DynamicReadwriteSplittingStrategy createDynamicReadwriteSplittingStrategy(final Properties props) {
String autoAwareDataSourceName = props.getProperty("auto-aware-data-source-name");
Preconditions.checkArgument(!Strings.isNullOrEmpty(autoAwareDataSourceName), "Auto aware data source name is required.");
Optional<DynamicDataSourceStrategy> dynamicDataSourceStrategy = DynamicDataSourceStrategyFactory.newInstance();
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
index 5dd3ef5ccbc..b203e05c893 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.readwritesplitting.rule;
-import org.apache.shardingsphere.infra.distsql.constant.ExportableConstants;
import org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.RandomReplicaLoadBalanceAlgorithm;
import org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.RoundRobinReplicaLoadBalanceAlgorithm;
import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
@@ -26,7 +25,6 @@ import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
-import java.util.Map;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
@@ -89,14 +87,9 @@ public final class ReadwriteSplittingDataSourceRuleTest {
}
@Test
- public void assertGetDataSources() {
- Map<String, String> dataSources = readwriteSplittingDataSourceRule.getDataSources(false);
- assertThat(dataSources.get(ExportableConstants.PRIMARY_DATA_SOURCE_NAME), is("write_ds"));
- assertThat(dataSources.get(ExportableConstants.REPLICA_DATA_SOURCE_NAMES), is("read_ds_0,read_ds_1"));
+ public void assertGetEnabledReplicaDataSources() {
readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", true);
- Map<String, String> dataSourcesByRemoveDisabled = readwriteSplittingDataSourceRule.getDataSources(true);
- assertThat(dataSourcesByRemoveDisabled.get(ExportableConstants.PRIMARY_DATA_SOURCE_NAME), is("write_ds"));
- assertThat(dataSourcesByRemoveDisabled.get(ExportableConstants.REPLICA_DATA_SOURCE_NAMES), is("read_ds_1"));
+ assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Collections.singletonList("read_ds_1")));
}
private Properties getProperties(final String writeDataSource, final String readDataSources) {