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 10:15:09 UTC
[shardingsphere] branch master updated: Fix inline sharding algorithm with big values (#21564)
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 d29e64f018e Fix inline sharding algorithm with big values (#21564)
d29e64f018e is described below
commit d29e64f018e9510d5e8f9aaae7f68fd72718ea02
Author: ZhangCheng <fl...@outlook.com>
AuthorDate: Fri Oct 14 18:14:59 2022 +0800
Fix inline sharding algorithm with big values (#21564)
* Fix inline sharding algorithm with big values
* Fix
* Fix
---
.../sharding/inline/InlineShardingAlgorithm.java | 3 ---
.../inline/InlineShardingAlgorithmTest.java | 30 +++++++++++++++++++---
2 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java
index e02e47e0bc5..ab543c9e188 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java
@@ -70,9 +70,6 @@ public final class InlineShardingAlgorithm implements StandardShardingAlgorithm<
public String doSharding(final Collection<String> availableTargetNames, final PreciseShardingValue<Comparable<?>> shardingValue) {
Closure<?> closure = createClosure();
Comparable<?> value = shardingValue.getValue();
- if (value instanceof Number) {
- value = Math.abs(((Number) value).intValue());
- }
closure.setProperty(shardingValue.getColumnName(), value);
return getTargetShardingNode(closure, shardingValue.getColumnName());
}
diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithmTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithmTest.java
index 81b26c40849..e1e950abf18 100644
--- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithmTest.java
+++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithmTest.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.sharding.factory.ShardingAlgorithmFactory;
import org.junit.Before;
import org.junit.Test;
+import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -46,11 +47,14 @@ public final class InlineShardingAlgorithmTest {
private InlineShardingAlgorithm inlineShardingAlgorithmWithSimplified;
+ private InlineShardingAlgorithm negativeNumberInlineShardingAlgorithm;
+
@Before
public void setUp() {
inlineShardingAlgorithm = (InlineShardingAlgorithm) ShardingAlgorithmFactory.newInstance(new AlgorithmConfiguration("INLINE", createAllowRangeQueryProperties()));
inlineShardingAlgorithmWithSimplified = (InlineShardingAlgorithm) ShardingAlgorithmFactory.newInstance(
new AlgorithmConfiguration("INLINE", createDisallowRangeQueryProperties()));
+ negativeNumberInlineShardingAlgorithm = (InlineShardingAlgorithm) ShardingAlgorithmFactory.newInstance(new AlgorithmConfiguration("INLINE", createNegativeAllowRangeQueryProperties()));
}
private Properties createAllowRangeQueryProperties() {
@@ -60,6 +64,13 @@ public final class InlineShardingAlgorithmTest {
return result;
}
+ private Properties createNegativeAllowRangeQueryProperties() {
+ Properties result = new Properties();
+ result.setProperty("algorithm-expression", "t_order_$->{(order_id % 4).abs()}");
+ result.setProperty("allow-range-query-with-inline-sharding", Boolean.TRUE.toString());
+ return result;
+ }
+
private Properties createDisallowRangeQueryProperties() {
Properties result = new Properties();
result.setProperty("algorithm-expression", "t_order_${order_id % 4}");
@@ -91,9 +102,20 @@ public final class InlineShardingAlgorithmTest {
@Test
public void assertDoShardingWithNegative() {
List<String> availableTargetNames = Lists.newArrayList("t_order_0", "t_order_1", "t_order_2", "t_order_3");
- assertThat(inlineShardingAlgorithm.doSharding(availableTargetNames, new PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, -1)), is("t_order_1"));
- assertThat(inlineShardingAlgorithm.doSharding(availableTargetNames, new PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, -4)), is("t_order_0"));
- assertThat(inlineShardingAlgorithmWithSimplified.doSharding(availableTargetNames, new PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, -1)), is("t_order_1"));
- assertThat(inlineShardingAlgorithmWithSimplified.doSharding(availableTargetNames, new PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, -4)), is("t_order_0"));
+ assertThat(negativeNumberInlineShardingAlgorithm.doSharding(availableTargetNames, new PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, -1)), is("t_order_1"));
+ assertThat(negativeNumberInlineShardingAlgorithm.doSharding(availableTargetNames, new PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, -4)), is("t_order_0"));
+ }
+
+ @Test
+ public void assertDoShardingWithLargeValues() {
+ List<String> availableTargetNames = Lists.newArrayList("t_order_0", "t_order_1", "t_order_2", "t_order_3");
+ assertThat(inlineShardingAlgorithm.doSharding(availableTargetNames,
+ new PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, 787694822390497280L)), is("t_order_0"));
+ assertThat(inlineShardingAlgorithm.doSharding(availableTargetNames,
+ new PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, new BigInteger("787694822390497280787694822390497280"))), is("t_order_0"));
+ assertThat(inlineShardingAlgorithmWithSimplified.doSharding(availableTargetNames,
+ new PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, 787694822390497280L)), is("t_order_0"));
+ assertThat(inlineShardingAlgorithmWithSimplified.doSharding(availableTargetNames,
+ new PreciseShardingValue<>("t_order", "order_id", DATA_NODE_INFO, new BigInteger("787694822390497280787694822390497280"))), is("t_order_0"));
}
}