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;
}