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