You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/04/29 05:01:39 UTC

[shardingsphere] branch master updated: Check required dataSourceNameAware in ReadwriteSplittingStrategyFactory (#17199)

This is an automated email from the ASF dual-hosted git repository.

panjuan 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 ae9629694ed Check required dataSourceNameAware in ReadwriteSplittingStrategyFactory (#17199)
ae9629694ed is described below

commit ae9629694edda33fff6d2b304aa1d12f2b0a1cc5
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Apr 29 13:01:32 2022 +0800

    Check required dataSourceNameAware in ReadwriteSplittingStrategyFactory (#17199)
    
    * Check required dataSourceNameAware in ReadwriteSplittingStrategyFactory
    
    * Check required dataSourceNameAware in ReadwriteSplittingStrategyFactory
---
 .../rule/ReadwriteSplittingDataSourceRule.java        |  8 +-------
 .../strategy/ReadwriteSplittingStrategyFactory.java   |  7 ++++++-
 .../type/DynamicReadwriteSplittingStrategy.java       | 19 ++++++-------------
 3 files changed, 13 insertions(+), 21 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 91754a9c76a..b8169b02dbb 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
@@ -97,14 +97,8 @@ public final class ReadwriteSplittingDataSourceRule {
      */
     public Map<String, String> getDataSources(final boolean removeDisabled) {
         Map<String, String> result = new LinkedHashMap<>(2, 1);
-        String writeDataSourceName = readwriteSplittingStrategy.getWriteDataSource();
-        if (null != writeDataSourceName) {
-            result.put(ExportableConstants.PRIMARY_DATA_SOURCE_NAME, writeDataSourceName);
-        }
+        result.put(ExportableConstants.PRIMARY_DATA_SOURCE_NAME, readwriteSplittingStrategy.getWriteDataSource());
         List<String> readDataSourceNames = readwriteSplittingStrategy.getReadDataSources();
-        if (readDataSourceNames.isEmpty()) {
-            return result;
-        }
         if (removeDisabled && !disabledDataSourceNames.isEmpty()) {
             readDataSourceNames = new LinkedList<>(readDataSourceNames);
             readDataSourceNames.removeIf(disabledDataSourceNames::contains);
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 b2b50a3fb9c..ca6c76cc0c2 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
@@ -22,10 +22,13 @@ import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.aware.DataSourceNameAware;
+import org.apache.shardingsphere.infra.aware.DataSourceNameAwareFactory;
 import org.apache.shardingsphere.readwritesplitting.strategy.type.DynamicReadwriteSplittingStrategy;
 import org.apache.shardingsphere.readwritesplitting.strategy.type.StaticReadwriteSplittingStrategy;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.Properties;
 
 /**
@@ -56,6 +59,8 @@ public final class ReadwriteSplittingStrategyFactory {
     private static DynamicReadwriteSplittingStrategy createDynamicDataSourceProcessor(final Properties props) {
         String autoAwareDataSourceName = props.getProperty("auto-aware-data-source-name");
         Preconditions.checkArgument(!Strings.isNullOrEmpty(autoAwareDataSourceName), "Auto aware data source name is required.");
-        return new DynamicReadwriteSplittingStrategy(autoAwareDataSourceName);
+        Optional<DataSourceNameAware> dataSourceNameAware = DataSourceNameAwareFactory.newInstance();
+        Preconditions.checkArgument(dataSourceNameAware.isPresent(), "Data source name aware is required.");
+        return new DynamicReadwriteSplittingStrategy(autoAwareDataSourceName, dataSourceNameAware.get());
     }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/type/DynamicReadwriteSplittingStrategy.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/type/DynamicReadwriteSplittingStrategy.java
index ddaa0198f87..bebce9010aa 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/type/DynamicReadwriteSplittingStrategy.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/type/DynamicReadwriteSplittingStrategy.java
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.readwritesplitting.strategy.type;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.aware.DataSourceNameAware;
-import org.apache.shardingsphere.infra.aware.DataSourceNameAwareFactory;
 import org.apache.shardingsphere.readwritesplitting.strategy.ReadwriteSplittingStrategy;
 
 import java.util.ArrayList;
@@ -28,7 +27,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Dynamic readwrite splitting strategy.
@@ -39,28 +37,23 @@ public final class DynamicReadwriteSplittingStrategy implements ReadwriteSplitti
     
     private final String autoAwareDataSourceName;
     
+    private final DataSourceNameAware dataSourceNameAware;
+    
     @Override
     public String getWriteDataSource() {
-        return DataSourceNameAwareFactory.newInstance().map(optional -> optional.getPrimaryDataSourceName(autoAwareDataSourceName)).orElse(null);
+        return dataSourceNameAware.getPrimaryDataSourceName(autoAwareDataSourceName);
     }
     
     @Override
     public List<String> getReadDataSources() {
-        Optional<DataSourceNameAware> dataSourceNameAware = DataSourceNameAwareFactory.newInstance();
-        if (dataSourceNameAware.isPresent() && dataSourceNameAware.get().getRule().isPresent()) {
-            return new ArrayList<>(dataSourceNameAware.get().getReplicaDataSourceNames(autoAwareDataSourceName));
-        }
-        return Collections.emptyList();
+        return dataSourceNameAware.getRule().isPresent() ? new ArrayList<>(dataSourceNameAware.getReplicaDataSourceNames(autoAwareDataSourceName)) : Collections.emptyList();
     }
     
     @Override
     public Collection<String> getAllDataSources() {
         Collection<String> result = new LinkedList<>();
-        Optional<DataSourceNameAware> dataSourceNameAware = DataSourceNameAwareFactory.newInstance();
-        if (dataSourceNameAware.isPresent()) {
-            result.add(dataSourceNameAware.get().getPrimaryDataSourceName(autoAwareDataSourceName));
-            result.addAll(dataSourceNameAware.get().getReplicaDataSourceNames(autoAwareDataSourceName));
-        }
+        result.add(dataSourceNameAware.getPrimaryDataSourceName(autoAwareDataSourceName));
+        result.addAll(dataSourceNameAware.getReplicaDataSourceNames(autoAwareDataSourceName));
         return result;
     }
 }