You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/10/14 12:21:37 UTC

[shardingsphere] branch master updated: Add ShardingAutoTableAlgorithmUtil (#21568)

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

duanzhengqiang 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 05c971326e2 Add ShardingAutoTableAlgorithmUtil (#21568)
05c971326e2 is described below

commit 05c971326e28ccf5e4c99b97d286c3d63d99ee27
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Oct 14 20:21:28 2022 +0800

    Add ShardingAutoTableAlgorithmUtil (#21568)
---
 .../standard/StandardShardingAlgorithm.java        | 19 -----------
 .../sharding/ShardingAutoTableAlgorithmUtil.java}  | 39 +++++-----------------
 .../datetime/AutoIntervalShardingAlgorithm.java    |  5 +--
 .../sharding/mod/HashModShardingAlgorithm.java     |  3 +-
 .../sharding/mod/ModShardingAlgorithm.java         |  5 +--
 .../range/AbstractRangeShardingAlgorithm.java      |  5 +--
 6 files changed, 20 insertions(+), 56 deletions(-)

diff --git a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/sharding/standard/StandardShardingAlgorithm.java b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/sharding/standard/StandardShardingAlgorithm.java
index 2dd2994e143..75fdd5b6677 100644
--- a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/sharding/standard/StandardShardingAlgorithm.java
+++ b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/sharding/standard/StandardShardingAlgorithm.java
@@ -17,12 +17,9 @@
 
 package org.apache.shardingsphere.sharding.api.sharding.standard;
 
-import com.google.common.base.Strings;
-import org.apache.shardingsphere.infra.datanode.DataNodeInfo;
 import org.apache.shardingsphere.sharding.spi.ShardingAlgorithm;
 
 import java.util.Collection;
-import java.util.Optional;
 
 /**
  * Standard sharding algorithm.
@@ -48,20 +45,4 @@ public interface StandardShardingAlgorithm<T extends Comparable<?>> extends Shar
      * @return sharding results for data sources or table names
      */
     Collection<String> doSharding(Collection<String> availableTargetNames, RangeShardingValue<T> shardingValue);
-    
-    /**
-     * Find matched target name.
-     * 
-     * @param availableTargetNames available target names
-     * @param suffix suffix
-     * @param dataNodeInfo data node info
-     * @return matched target name
-     */
-    default Optional<String> findMatchedTargetName(final Collection<String> availableTargetNames, final String suffix, final DataNodeInfo dataNodeInfo) {
-        String targetName = dataNodeInfo.getPrefix() + Strings.padStart(suffix, dataNodeInfo.getSuffixMinLength(), dataNodeInfo.getPaddingChar());
-        if (availableTargetNames.contains(targetName)) {
-            return Optional.of(targetName);
-        }
-        return Optional.empty();
-    }
 }
diff --git a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/sharding/standard/StandardShardingAlgorithm.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/ShardingAutoTableAlgorithmUtil.java
similarity index 51%
copy from features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/sharding/standard/StandardShardingAlgorithm.java
copy to features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/ShardingAutoTableAlgorithmUtil.java
index 2dd2994e143..165362d9dc6 100644
--- a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/sharding/standard/StandardShardingAlgorithm.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/ShardingAutoTableAlgorithmUtil.java
@@ -15,53 +15,32 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.api.sharding.standard;
+package org.apache.shardingsphere.sharding.algorithm.sharding;
 
 import com.google.common.base.Strings;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.datanode.DataNodeInfo;
-import org.apache.shardingsphere.sharding.spi.ShardingAlgorithm;
 
 import java.util.Collection;
 import java.util.Optional;
 
 /**
- * Standard sharding algorithm.
- * 
- * @param <T> class type of sharding value
+ * Sharding auto table algorithm util.
  */
-public interface StandardShardingAlgorithm<T extends Comparable<?>> extends ShardingAlgorithm {
-    
-    /**
-     * Sharding.
-     * 
-     * @param availableTargetNames available data sources or table names
-     * @param shardingValue sharding value
-     * @return sharding result for data source or table name
-     */
-    String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<T> shardingValue);
-    
-    /**
-     * Sharding.
-     *
-     * @param availableTargetNames available data sources or table names
-     * @param shardingValue sharding value
-     * @return sharding results for data sources or table names
-     */
-    Collection<String> doSharding(Collection<String> availableTargetNames, RangeShardingValue<T> shardingValue);
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ShardingAutoTableAlgorithmUtil {
     
     /**
      * Find matched target name.
-     * 
+     *
      * @param availableTargetNames available target names
      * @param suffix suffix
      * @param dataNodeInfo data node info
      * @return matched target name
      */
-    default Optional<String> findMatchedTargetName(final Collection<String> availableTargetNames, final String suffix, final DataNodeInfo dataNodeInfo) {
+    public static Optional<String> findMatchedTargetName(final Collection<String> availableTargetNames, final String suffix, final DataNodeInfo dataNodeInfo) {
         String targetName = dataNodeInfo.getPrefix() + Strings.padStart(suffix, dataNodeInfo.getSuffixMinLength(), dataNodeInfo.getPaddingChar());
-        if (availableTargetNames.contains(targetName)) {
-            return Optional.of(targetName);
-        }
-        return Optional.empty();
+        return availableTargetNames.contains(targetName) ? Optional.of(targetName) : Optional.empty();
     }
 }
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/AutoIntervalShardingAlgorithm.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/AutoIntervalShardingAlgorithm.java
index ff96dce357e..d068f8a5888 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/AutoIntervalShardingAlgorithm.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/AutoIntervalShardingAlgorithm.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.algorithm.sharding.datetime;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Range;
 import lombok.Getter;
+import org.apache.shardingsphere.sharding.algorithm.sharding.ShardingAutoTableAlgorithmUtil;
 import org.apache.shardingsphere.sharding.api.sharding.ShardingAutoTableAlgorithm;
 import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
 import org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
@@ -85,7 +86,7 @@ public final class AutoIntervalShardingAlgorithm implements StandardShardingAlgo
     @Override
     public String doSharding(final Collection<String> availableTargetNames, final PreciseShardingValue<Comparable<?>> shardingValue) {
         String tableNameSuffix = String.valueOf(doSharding(parseDate(shardingValue.getValue())));
-        return findMatchedTargetName(availableTargetNames, tableNameSuffix, shardingValue.getDataNodeInfo()).orElse(null);
+        return ShardingAutoTableAlgorithmUtil.findMatchedTargetName(availableTargetNames, tableNameSuffix, shardingValue.getDataNodeInfo()).orElse(null);
     }
     
     @Override
@@ -95,7 +96,7 @@ public final class AutoIntervalShardingAlgorithm implements StandardShardingAlgo
         int lastPartition = getLastPartition(shardingValue.getValueRange());
         for (int i = firstPartition; i <= lastPartition; i++) {
             String suffix = String.valueOf(i);
-            findMatchedTargetName(availableTargetNames, suffix, shardingValue.getDataNodeInfo()).ifPresent(result::add);
+            ShardingAutoTableAlgorithmUtil.findMatchedTargetName(availableTargetNames, suffix, shardingValue.getDataNodeInfo()).ifPresent(result::add);
         }
         return result;
     }
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithm.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithm.java
index 26f910cf2de..56ef1f636a6 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithm.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithm.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sharding.algorithm.sharding.mod;
 
 import com.google.common.base.Preconditions;
 import lombok.Getter;
+import org.apache.shardingsphere.sharding.algorithm.sharding.ShardingAutoTableAlgorithmUtil;
 import org.apache.shardingsphere.sharding.api.sharding.ShardingAutoTableAlgorithm;
 import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
 import org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
@@ -53,7 +54,7 @@ public final class HashModShardingAlgorithm implements StandardShardingAlgorithm
     @Override
     public String doSharding(final Collection<String> availableTargetNames, final PreciseShardingValue<Comparable<?>> shardingValue) {
         String suffix = String.valueOf(hashShardingValue(shardingValue.getValue()) % shardingCount);
-        return findMatchedTargetName(availableTargetNames, suffix, shardingValue.getDataNodeInfo()).orElse(null);
+        return ShardingAutoTableAlgorithmUtil.findMatchedTargetName(availableTargetNames, suffix, shardingValue.getDataNodeInfo()).orElse(null);
     }
     
     @Override
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
index 3baf064db10..39ab95c8b8d 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sharding.algorithm.sharding.mod;
 
 import com.google.common.base.Preconditions;
 import lombok.Getter;
+import org.apache.shardingsphere.sharding.algorithm.sharding.ShardingAutoTableAlgorithmUtil;
 import org.apache.shardingsphere.sharding.api.sharding.ShardingAutoTableAlgorithm;
 import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
 import org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
@@ -95,7 +96,7 @@ public final class ModShardingAlgorithm implements StandardShardingAlgorithm<Com
     @Override
     public String doSharding(final Collection<String> availableTargetNames, final PreciseShardingValue<Comparable<?>> shardingValue) {
         String shardingResultSuffix = getShardingResultSuffix(cutShardingValue(shardingValue.getValue()).mod(new BigInteger(String.valueOf(shardingCount))).toString());
-        return findMatchedTargetName(availableTargetNames, shardingResultSuffix, shardingValue.getDataNodeInfo()).orElse(null);
+        return ShardingAutoTableAlgorithmUtil.findMatchedTargetName(availableTargetNames, shardingResultSuffix, shardingValue.getDataNodeInfo()).orElse(null);
     }
     
     @Override
@@ -115,7 +116,7 @@ public final class ModShardingAlgorithm implements StandardShardingAlgorithm<Com
         BigInteger shardingCountBigInter = new BigInteger(String.valueOf(shardingCount));
         for (BigInteger i = lower; i.compareTo(upper) <= 0; i = i.add(new BigInteger("1"))) {
             String shardingResultSuffix = getShardingResultSuffix(String.valueOf(i.mod(shardingCountBigInter)));
-            findMatchedTargetName(availableTargetNames, shardingResultSuffix, shardingValue.getDataNodeInfo()).ifPresent(result::add);
+            ShardingAutoTableAlgorithmUtil.findMatchedTargetName(availableTargetNames, shardingResultSuffix, shardingValue.getDataNodeInfo()).ifPresent(result::add);
         }
         return result;
     }
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/AbstractRangeShardingAlgorithm.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/AbstractRangeShardingAlgorithm.java
index 858b4aeec14..e7e7f296c34 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/AbstractRangeShardingAlgorithm.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/AbstractRangeShardingAlgorithm.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.algorithm.sharding.range;
 import com.google.common.collect.Range;
 import lombok.Getter;
 import org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
+import org.apache.shardingsphere.sharding.algorithm.sharding.ShardingAutoTableAlgorithmUtil;
 import org.apache.shardingsphere.sharding.api.sharding.ShardingAutoTableAlgorithm;
 import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
 import org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
@@ -52,7 +53,7 @@ public abstract class AbstractRangeShardingAlgorithm implements StandardSharding
     @Override
     public final String doSharding(final Collection<String> availableTargetNames, final PreciseShardingValue<Comparable<?>> shardingValue) {
         String suffix = String.valueOf(getPartition(shardingValue.getValue()));
-        return findMatchedTargetName(availableTargetNames, suffix, shardingValue.getDataNodeInfo()).orElse(null);
+        return ShardingAutoTableAlgorithmUtil.findMatchedTargetName(availableTargetNames, suffix, shardingValue.getDataNodeInfo()).orElse(null);
     }
     
     @Override
@@ -62,7 +63,7 @@ public abstract class AbstractRangeShardingAlgorithm implements StandardSharding
         int lastPartition = getLastPartition(shardingValue.getValueRange());
         for (int partition = firstPartition; partition <= lastPartition; partition++) {
             String suffix = String.valueOf(partition);
-            findMatchedTargetName(availableTargetNames, suffix, shardingValue.getDataNodeInfo()).ifPresent(result::add);
+            ShardingAutoTableAlgorithmUtil.findMatchedTargetName(availableTargetNames, suffix, shardingValue.getDataNodeInfo()).ifPresent(result::add);
         }
         return result;
     }