This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 ef292447d44 Improve init check of ShardingAutoTableAlgorithm (#24742)
ef292447d44 is described below
commit ef292447d447194d0fccf58019849ca6afcb44f4
Author: ChenJiaHao <[email protected]>
AuthorDate: Wed Mar 22 18:08:05 2023 +0800
Improve init check of ShardingAutoTableAlgorithm (#24742)
* Improve init check for ShardingAutoTableAlgorithm
* Add related test cases
---
.../algorithm/sharding/mod/HashModShardingAlgorithm.java | 4 +++-
.../algorithm/sharding/mod/ModShardingAlgorithm.java | 4 +++-
.../sharding/mod/HashModShardingAlgorithmTest.java | 9 +++++++++
.../algorithm/sharding/mod/ModShardingAlgorithmTest.java | 5 +++++
.../fixture/sharding/CoreAutoShardingAlgorithmFixture.java | 14 +++++++++++---
5 files changed, 31 insertions(+), 5 deletions(-)
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 aa0440fce3d..5eb8bcaa070 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
@@ -44,7 +44,9 @@ public final class HashModShardingAlgorithm implements
StandardShardingAlgorithm
private int getShardingCount(final Properties props) {
ShardingSpherePreconditions.checkState(props.containsKey(SHARDING_COUNT_KEY),
() -> new ShardingAlgorithmInitializationException(getType(), "Sharding count
cannot be null."));
- return Integer.parseInt(props.getProperty(SHARDING_COUNT_KEY));
+ int result =
Integer.parseInt(String.valueOf(props.getProperty(SHARDING_COUNT_KEY)));
+ ShardingSpherePreconditions.checkState(result > 0, () -> new
ShardingAlgorithmInitializationException(getType(), "Sharding count must be a
positive integer."));
+ return result;
}
@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 2209efa065d..3b5d0ae6dae 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
@@ -65,7 +65,9 @@ public final class ModShardingAlgorithm implements
StandardShardingAlgorithm<Com
private int getShardingCount(final Properties props) {
ShardingSpherePreconditions.checkState(props.containsKey(SHARDING_COUNT_KEY),
() -> new ShardingAlgorithmInitializationException(getType(), "Sharding count
can not be null."));
- return Integer.parseInt(props.getProperty(SHARDING_COUNT_KEY));
+ int result =
Integer.parseInt(String.valueOf(props.getProperty(SHARDING_COUNT_KEY)));
+ ShardingSpherePreconditions.checkState(result > 0, () -> new
ShardingAlgorithmInitializationException(getType(), "Sharding count must be a
positive integer."));
+ return result;
}
private int getStartOffset(final Properties props) {
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithmTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithmTest.java
index 678d09be2c4..ee8c5e4dc71 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithmTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/HashModShardingAlgorithmTest.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.infra.datanode.DataNodeInfo;
import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
import
org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
+import
org.apache.shardingsphere.sharding.exception.algorithm.sharding.ShardingAlgorithmInitializationException;
import org.apache.shardingsphere.sharding.spi.ShardingAlgorithm;
import org.apache.shardingsphere.test.util.PropertiesBuilder;
import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
@@ -31,9 +32,11 @@ import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
+import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
public final class HashModShardingAlgorithmTest {
@@ -58,4 +61,10 @@ public final class HashModShardingAlgorithmTest {
Collection<String> actual =
shardingAlgorithm.doSharding(availableTargetNames, new
RangeShardingValue<>("t_order", "create_time", DATA_NODE_INFO,
Range.closed("a", "f")));
assertThat(actual.size(), is(4));
}
+
+ @Test
+ public void assertRangeDoShardingWithWrongArgumentForShardingCount() {
+ Properties props = PropertiesBuilder.build(new
Property("sharding-count", "0"));
+ assertThrows(ShardingAlgorithmInitializationException.class, () ->
TypedSPILoader.getService(ShardingAlgorithm.class, "HASH_MOD", props));
+ }
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithmTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithmTest.java
index 118b9d6e210..e3fb2706128 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithmTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithmTest.java
@@ -89,6 +89,11 @@ public final class ModShardingAlgorithmTest {
assertThat(actual.size(), is(16));
}
+ @Test
+ public void assertRangeDoShardingWithWrongArgumentForShardingCount() {
+ assertThrows(ShardingAlgorithmInitializationException.class, () ->
TypedSPILoader.getService(ShardingAlgorithm.class, "MOD",
PropertiesBuilder.build(new Property("sharding-count", "0"))));
+ }
+
@Test
public void assertRangeDoShardingWithWrongArgumentForStartOffset() {
Properties props = createZeroPaddingProperties();
diff --git
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/sharding/CoreAutoShardingAlgorithmFixture.java
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/sharding/CoreAutoShardingAlgorithmFixture.java
index eefa58edd59..4a2634a54fb 100644
---
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/sharding/CoreAutoShardingAlgorithmFixture.java
+++
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/sharding/CoreAutoShardingAlgorithmFixture.java
@@ -18,11 +18,13 @@
package org.apache.shardingsphere.sharding.distsql.fixture.sharding;
import com.google.common.base.Preconditions;
+import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
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;
import
org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm;
+import
org.apache.shardingsphere.sharding.exception.algorithm.sharding.ShardingAlgorithmInitializationException;
import java.math.BigInteger;
import java.util.Collection;
@@ -60,15 +62,21 @@ public final class CoreAutoShardingAlgorithmFixture
implements StandardShardingA
private int getShardingCount(final Properties props) {
Preconditions.checkArgument(props.containsKey(SHARDING_COUNT_KEY),
"Sharding count can not be null.");
- return Integer.parseInt(props.getProperty(SHARDING_COUNT_KEY));
+ int result =
Integer.parseInt(String.valueOf(props.getProperty(SHARDING_COUNT_KEY)));
+ ShardingSpherePreconditions.checkState(result > 0, () -> new
ShardingAlgorithmInitializationException(getType(), "Sharding count must be a
positive integer."));
+ return result;
}
private int getStartOffset(final Properties props) {
- return
Integer.parseInt(String.valueOf(props.getProperty(START_OFFSET_INDEX_KEY,
"0")));
+ int result =
Integer.parseInt(String.valueOf(props.getProperty(START_OFFSET_INDEX_KEY,
"0")));
+ ShardingSpherePreconditions.checkState(result >= 0, () -> new
ShardingAlgorithmInitializationException(getType(), "Start offset can not be
less than 0."));
+ return result;
}
private int getStopOffset(final Properties props) {
- return
Integer.parseInt(String.valueOf(props.getProperty(STOP_OFFSET_INDEX_KEY, "0")));
+ int result =
Integer.parseInt(String.valueOf(props.getProperty(STOP_OFFSET_INDEX_KEY, "0")));
+ ShardingSpherePreconditions.checkState(result >= 0, () -> new
ShardingAlgorithmInitializationException(getType(), "Stop offset can not be
less than 0."));
+ return result;
}
private boolean isZeroPadding(final Properties props) {