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 2021/02/07 03:04:49 UTC
[shardingsphere] branch master updated: add exception for table
rewrite error (#9307)
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 4cca29a add exception for table rewrite error (#9307)
4cca29a is described below
commit 4cca29ab4ec59997d31cce8a9c154a95f59d06b4
Author: JingShang Lu <lu...@apache.org>
AuthorDate: Sat Feb 6 19:04:26 2021 -0800
add exception for table rewrite error (#9307)
* add exception for table rewrite error
* add UT
* code format
---
.../type/standard/StandardShardingStrategy.java | 3 +++
.../engine/fixture/AbstractRoutingEngineTest.java | 23 ++++++++++++++++++++++
.../ShardingStandardRoutingEngineTest.java | 8 ++++++++
3 files changed, 34 insertions(+)
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/strategy/type/standard/StandardShardingStrategy.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/strategy/type/standard/StandardShardingStrategy.java
index 0d0ad05..11c650d 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/strategy/type/standard/StandardShardingStrategy.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/strategy/type/standard/StandardShardingStrategy.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.route.strategy.type.standard;
import com.google.common.base.Preconditions;
import lombok.Getter;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.exception.ShardingSphereException;
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;
@@ -67,6 +68,8 @@ public final class StandardShardingStrategy implements ShardingStrategy {
target = shardingAlgorithm.doSharding(availableTargetNames, new PreciseShardingValue(shardingValue.getTableName(), shardingValue.getColumnName(), each));
if (null != target && availableTargetNames.contains(target)) {
result.add(target);
+ } else if (null != target && !availableTargetNames.contains(target)) {
+ throw new ShardingSphereException(String.format("Route table %s does not exist, available actual table: %s", target, availableTargetNames));
}
}
return result;
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/AbstractRoutingEngineTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/AbstractRoutingEngineTest.java
index 0c148e2..dcc880f 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/AbstractRoutingEngineTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/AbstractRoutingEngineTest.java
@@ -56,6 +56,18 @@ public abstract class AbstractRoutingEngineTest {
return new ShardingRule(shardingRuleConfig, mock(DatabaseType.class), createDataSourceMap());
}
+ protected final ShardingRule createErrorShardingRule() {
+ ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
+ shardingRuleConfig.getTables().add(createInlineTableRuleConfig("t_order", "ds_${0..1}.t_order_${0..1}", "t_order_${order_id % 2}", "ds_${user_id % 2}"));
+ Properties props0 = new Properties();
+ props0.setProperty("algorithm-expression", "ds_${user_id % 2}");
+ shardingRuleConfig.getShardingAlgorithms().put("ds_inline", new ShardingSphereAlgorithmConfiguration("INLINE", props0));
+ Properties props1 = new Properties();
+ props1.setProperty("algorithm-expression", "t_order_${order_id % 3}");
+ shardingRuleConfig.getShardingAlgorithms().put("t_order_inline", new ShardingSphereAlgorithmConfiguration("INLINE", props1));
+ return new ShardingRule(shardingRuleConfig, mock(DatabaseType.class), createDataSourceMap());
+ }
+
protected final ShardingRule createBindingShardingRule() {
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(createInlineTableRuleConfig("t_order", "ds_${0..1}.t_order_${0..1}", "t_order_${order_id % 2}", "ds_${user_id % 2}"));
@@ -178,6 +190,17 @@ public abstract class AbstractRoutingEngineTest {
return new ShardingConditions(result);
}
+ protected final ShardingConditions createErrorShardingConditions(final String tableName) {
+ List<ShardingCondition> result = new ArrayList<>(1);
+ ShardingConditionValue shardingConditionValue1 = new ListShardingConditionValue<>("user_id", tableName, Collections.singleton(1L));
+ ShardingConditionValue shardingConditionValue2 = new ListShardingConditionValue<>("order_id", tableName, Collections.singleton(2L));
+ ShardingCondition shardingCondition = new ShardingCondition();
+ shardingCondition.getValues().add(shardingConditionValue1);
+ shardingCondition.getValues().add(shardingConditionValue2);
+ result.add(shardingCondition);
+ return new ShardingConditions(result);
+ }
+
private Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>(2, 1);
result.put("ds_0", mock(DataSource.class, RETURNS_DEEP_STUBS));
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngineTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngineTest.java
index b1b8472..4bf3c46 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngineTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngineTest.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.sharding.route.engine.type.standard;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import org.apache.shardingsphere.infra.hint.HintManager;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
@@ -79,6 +80,13 @@ public final class ShardingStandardRoutingEngineTest extends AbstractRoutingEngi
assertThat(routeUnits.get(0).getTableMappers().iterator().next().getLogicName(), is("t_order"));
}
+ @Test(expected = ShardingSphereException.class)
+ public void assertRouteByErrorShardingTableStrategy() {
+ ShardingStandardRoutingEngine standardRoutingEngine = createShardingStandardRoutingEngine("t_order", createErrorShardingConditions("t_order"));
+ RouteContext routeContext = new RouteContext();
+ standardRoutingEngine.route(routeContext, createErrorShardingRule());
+ }
+
@Test
public void assertRouteByHint() {
ShardingStandardRoutingEngine standardRoutingEngine = createShardingStandardRoutingEngine("t_hint_test", new ShardingConditions(Collections.emptyList()));