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 31fc9afcf04 Add ShardingConfigurationRepositoryTupleSwapperIT (#31104)
31fc9afcf04 is described below
commit 31fc9afcf04eb95d433ac119a722fdc82d24b203
Author: Liang Zhang <[email protected]>
AuthorDate: Fri May 3 00:21:33 2024 +0800
Add ShardingConfigurationRepositoryTupleSwapperIT (#31104)
* Refactor RepositoryTupleSwapperIT's impl
* Add ShardingConfigurationRepositoryTupleSwapperIT
---
...ingRuleConfigurationRepositoryTupleSwapper.java | 12 +-
...rdingConfigurationRepositoryTupleSwapperIT.java | 79 +++++++
.../ShardingRuleConfigurationYamlIT.java | 23 +-
...uleConfigurationRepositoryTupleSwapperTest.java | 245 ---------------------
.../src/test/resources/yaml/sharding-rule.yaml | 21 +-
5 files changed, 98 insertions(+), 282 deletions(-)
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapper.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapper.java
index 17c22d3c2fd..9ae03ea89a8 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapper.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapper.java
@@ -31,6 +31,7 @@ import
org.apache.shardingsphere.sharding.yaml.config.rule.YamlTableRuleConfigur
import
org.apache.shardingsphere.sharding.yaml.config.strategy.audit.YamlShardingAuditStrategyConfiguration;
import
org.apache.shardingsphere.sharding.yaml.config.strategy.keygen.YamlKeyGenerateStrategyConfiguration;
import
org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlShardingStrategyConfiguration;
+import
org.apache.shardingsphere.sharding.yaml.swapper.rule.YamlShardingTableReferenceRuleConfigurationConverter;
import java.util.Collection;
import java.util.LinkedHashMap;
@@ -94,11 +95,12 @@ public final class
ShardingRuleConfigurationRepositoryTupleSwapper implements Re
}
private void swapTableRules(final YamlShardingRuleConfiguration
yamlRuleConfig, final Collection<RepositoryTuple> repositoryTuples) {
- for (YamlTableRuleConfiguration each :
yamlRuleConfig.getTables().values()) {
- repositoryTuples.add(new
RepositoryTuple(ruleNodePath.getNamedItem(ShardingRuleNodePathProvider.TABLES).getPath(each.getLogicTable()),
YamlEngine.marshal(each)));
+ for (Entry<String, YamlTableRuleConfiguration> entry :
yamlRuleConfig.getTables().entrySet()) {
+ repositoryTuples.add(new
RepositoryTuple(ruleNodePath.getNamedItem(ShardingRuleNodePathProvider.TABLES).getPath(entry.getKey()),
YamlEngine.marshal(entry.getValue())));
}
- for (YamlShardingAutoTableRuleConfiguration each :
yamlRuleConfig.getAutoTables().values()) {
- repositoryTuples.add(new
RepositoryTuple(ruleNodePath.getNamedItem(ShardingRuleNodePathProvider.AUTO_TABLES).getPath(each.getLogicTable()),
YamlEngine.marshal(each)));
+ for (Entry<String, YamlShardingAutoTableRuleConfiguration> entry :
yamlRuleConfig.getAutoTables().entrySet()) {
+ repositoryTuples.add(
+ new
RepositoryTuple(ruleNodePath.getNamedItem(ShardingRuleNodePathProvider.AUTO_TABLES).getPath(entry.getKey()),
YamlEngine.marshal(entry.getValue())));
}
for (String each : yamlRuleConfig.getBindingTables()) {
repositoryTuples.add(new
RepositoryTuple(ruleNodePath.getNamedItem(ShardingRuleNodePathProvider.BINDING_TABLES).getPath(getBindingGroupName(each)),
each));
@@ -106,7 +108,7 @@ public final class
ShardingRuleConfigurationRepositoryTupleSwapper implements Re
}
private String getBindingGroupName(final String bindingGroup) {
- return bindingGroup.contains(":") ? bindingGroup.substring(0,
bindingGroup.indexOf(":")) : bindingGroup;
+ return
YamlShardingTableReferenceRuleConfigurationConverter.convertToObject(bindingGroup).getName();
}
@Override
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/it/ShardingConfigurationRepositoryTupleSwapperIT.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/it/ShardingConfigurationRepositoryTupleSwapperIT.java
new file mode 100644
index 00000000000..c3fcaf476f7
--- /dev/null
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/it/ShardingConfigurationRepositoryTupleSwapperIT.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.sharding.it;
+
+import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
+import
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+import
org.apache.shardingsphere.sharding.yaml.config.YamlShardingRuleConfiguration;
+import
org.apache.shardingsphere.sharding.yaml.swapper.ShardingRuleConfigurationRepositoryTupleSwapper;
+import org.apache.shardingsphere.test.it.yaml.RepositoryTupleSwapperIT;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+class ShardingConfigurationRepositoryTupleSwapperIT extends
RepositoryTupleSwapperIT {
+
+ ShardingConfigurationRepositoryTupleSwapperIT() {
+ super("yaml/sharding-rule.yaml", new
ShardingRuleConfigurationRepositoryTupleSwapper(), false);
+ }
+
+ @Override
+ protected void assertRepositoryTuples(final List<RepositoryTuple>
actualRepositoryTuples, final YamlRuleConfiguration expectedYamlRuleConfig) {
+ assertThat(actualRepositoryTuples.size(), is(19));
+ assertRepositoryTuple(actualRepositoryTuples.get(0),
+ "algorithms/core_standard_fixture",
((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getShardingAlgorithms().get("core_standard_fixture"));
+ assertRepositoryTuple(actualRepositoryTuples.get(1),
+ "algorithms/core_complex_fixture",
((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getShardingAlgorithms().get("core_complex_fixture"));
+ assertRepositoryTuple(actualRepositoryTuples.get(2),
+ "algorithms/core_hint_fixture",
((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getShardingAlgorithms().get("core_hint_fixture"));
+ assertRepositoryTuple(actualRepositoryTuples.get(3),
+ "algorithms/database_inline", ((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getShardingAlgorithms().get("database_inline"));
+ assertRepositoryTuple(actualRepositoryTuples.get(4),
+ "algorithms/table_inline", ((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getShardingAlgorithms().get("table_inline"));
+ assertRepositoryTuple(actualRepositoryTuples.get(5),
"key_generators/snowflake", ((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getKeyGenerators().get("snowflake"));
+ assertRepositoryTuple(actualRepositoryTuples.get(6),
+ "auditors/sharding_key_required_auditor",
((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getAuditors().get("sharding_key_required_auditor"));
+ assertRepositoryTuple(actualRepositoryTuples.get(7),
+ "default_strategies/default_database_strategy",
((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getDefaultDatabaseStrategy());
+ assertRepositoryTuple(actualRepositoryTuples.get(8),
+ "default_strategies/default_table_strategy",
((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getDefaultTableStrategy());
+ assertRepositoryTuple(actualRepositoryTuples.get(9),
+ "default_strategies/default_key_generate_strategy",
((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getDefaultKeyGenerateStrategy());
+ assertRepositoryTuple(actualRepositoryTuples.get(10),
+ "default_strategies/default_audit_strategy",
((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getDefaultAuditStrategy());
+ assertRepositoryTuple(actualRepositoryTuples.get(11),
+ "default_strategies/default_sharding_column",
((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getDefaultShardingColumn());
+ assertRepositoryTuple(actualRepositoryTuples.get(12),
+ "sharding_cache", ((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getShardingCache());
+ assertRepositoryTuple(actualRepositoryTuples.get(13),
+ "tables/t_user", ((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getTables().get("t_user"));
+ assertRepositoryTuple(actualRepositoryTuples.get(14),
+ "tables/t_stock", ((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getTables().get("t_stock"));
+ assertRepositoryTuple(actualRepositoryTuples.get(15),
+ "tables/t_order", ((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getTables().get("t_order"));
+ assertRepositoryTuple(actualRepositoryTuples.get(16),
+ "tables/t_order_item", ((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getTables().get("t_order_item"));
+ assertRepositoryTuple(actualRepositoryTuples.get(17),
+ "binding_tables" +
actualRepositoryTuples.get(17).getKey().substring(actualRepositoryTuples.get(17).getKey().indexOf("/")),
+ new ArrayList<>(((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getBindingTables()).get(0));
+ assertRepositoryTuple(actualRepositoryTuples.get(18),
"binding_tables/foo", new ArrayList<>(((YamlShardingRuleConfiguration)
expectedYamlRuleConfig).getBindingTables()).get(1));
+ }
+}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/yaml/ShardingRuleConfigurationYamlIT.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/it/ShardingRuleConfigurationYamlIT.java
similarity index 85%
rename from
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/yaml/ShardingRuleConfigurationYamlIT.java
rename to
features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/it/ShardingRuleConfigurationYamlIT.java
index d31fd2ab2ea..6f0169685b9 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/yaml/ShardingRuleConfigurationYamlIT.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/it/ShardingRuleConfigurationYamlIT.java
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sharding.yaml;
+package org.apache.shardingsphere.sharding.it;
-import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
import
org.apache.shardingsphere.sharding.yaml.config.YamlShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.yaml.config.cache.YamlShardingCacheConfiguration;
import
org.apache.shardingsphere.sharding.yaml.config.cache.YamlShardingCacheOptionsConfiguration;
import org.apache.shardingsphere.test.it.yaml.YamlRuleConfigurationIT;
+import java.util.ArrayList;
import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
@@ -38,7 +38,6 @@ class ShardingRuleConfigurationYamlIT extends
YamlRuleConfigurationIT {
@Override
protected void assertYamlRootConfiguration(final YamlRootConfiguration
actual) {
- assertDataSourceMap(actual);
Optional<YamlShardingRuleConfiguration> shardingRuleConfig =
actual.getRules().stream()
.filter(each -> each instanceof
YamlShardingRuleConfiguration).findFirst().map(optional ->
(YamlShardingRuleConfiguration) optional);
assertTrue(shardingRuleConfig.isPresent());
@@ -49,17 +48,9 @@ class ShardingRuleConfigurationYamlIT extends
YamlRuleConfigurationIT {
assertTOrderItem(shardingRuleConfig.get());
assertBindingTable(shardingRuleConfig.get());
assertShardingCache(shardingRuleConfig.get());
- assertProps(actual);
assertThat(shardingRuleConfig.get().getDefaultShardingColumn(),
is("order_id"));
}
- private void assertDataSourceMap(final YamlRootConfiguration actual) {
- assertThat(actual.getDataSources().size(), is(3));
- assertTrue(actual.getDataSources().containsKey("ds_0"));
- assertTrue(actual.getDataSources().containsKey("ds_1"));
- assertTrue(actual.getDataSources().containsKey("default_ds"));
- }
-
private void assertTUser(final YamlShardingRuleConfiguration actual) {
assertThat(actual.getTables().get("t_user").getActualDataNodes(),
is("ds_${0..1}.t_user_${0..15}"));
assertThat(actual.getTables().get("t_user").getDatabaseStrategy().getComplex().getShardingColumns(),
is("region_id, user_id"));
@@ -90,8 +81,9 @@ class ShardingRuleConfigurationYamlIT extends
YamlRuleConfigurationIT {
}
private void assertBindingTable(final YamlShardingRuleConfiguration
actual) {
- assertThat(actual.getBindingTables().size(), is(1));
- assertThat(actual.getBindingTables().iterator().next(), is("t_order,
t_order_item"));
+ assertThat(actual.getBindingTables().size(), is(2));
+ assertThat(new ArrayList<>(actual.getBindingTables()).get(0),
is("t_order, t_order_item"));
+ assertThat(new ArrayList<>(actual.getBindingTables()).get(1),
is("foo:t_order, t_order_item"));
}
private void assertShardingCache(final YamlShardingRuleConfiguration
actual) {
@@ -102,9 +94,4 @@ class ShardingRuleConfigurationYamlIT extends
YamlRuleConfigurationIT {
assertThat(actualRouteCacheConfig.getMaximumSize(), is(262144));
assertTrue(actualRouteCacheConfig.isSoftValues());
}
-
- private void assertProps(final YamlRootConfiguration actual) {
- assertThat(actual.getProps().size(), is(1));
- assertTrue((boolean)
actual.getProps().get(ConfigurationPropertyKey.SQL_SHOW.getKey()));
- }
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapperTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapperTest.java
deleted file mode 100644
index d1f327fe607..00000000000
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapperTest.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.sharding.yaml.swapper;
-
-import
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
-import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
-import
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
-import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableReferenceRuleConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
-import
org.apache.shardingsphere.sharding.yaml.config.YamlShardingRuleConfiguration;
-import org.apache.shardingsphere.test.util.PropertiesBuilder;
-import org.junit.jupiter.api.Test;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Optional;
-import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-class ShardingRuleConfigurationRepositoryTupleSwapperTest {
-
- private final ShardingRuleConfigurationRepositoryTupleSwapper swapper =
new ShardingRuleConfigurationRepositoryTupleSwapper();
-
- @Test
- void assertSwapToRepositoryTuplesWithEmptyRule() {
- assertTrue(swapper.swapToRepositoryTuples(new
YamlShardingRuleConfiguration()).isEmpty());
- }
-
- @Test
- void assertSwapToRepositoryTuples() {
- YamlShardingRuleConfiguration yamlRuleConfig =
(YamlShardingRuleConfiguration) new
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(createMaximumShardingRule());
- Collection<RepositoryTuple> actual =
swapper.swapToRepositoryTuples(yamlRuleConfig);
- assertThat(actual.size(), is(15));
- Iterator<RepositoryTuple> iterator = actual.iterator();
- assertThat(iterator.next().getKey(),
is("algorithms/core_standard_fixture"));
- assertThat(iterator.next().getKey(), is("algorithms/hash_mod"));
- assertThat(iterator.next().getKey(), is("key_generators/uuid"));
- assertThat(iterator.next().getKey(), is("key_generators/default"));
- assertThat(iterator.next().getKey(),
is("key_generators/auto_increment"));
- assertThat(iterator.next().getKey(), is("auditors/audit_algorithm"));
- assertThat(iterator.next().getKey(),
is("default_strategies/default_database_strategy"));
- assertThat(iterator.next().getKey(),
is("default_strategies/default_table_strategy"));
- assertThat(iterator.next().getKey(),
is("default_strategies/default_key_generate_strategy"));
- assertThat(iterator.next().getKey(),
is("default_strategies/default_audit_strategy"));
- assertThat(iterator.next().getKey(),
is("default_strategies/default_sharding_column"));
- assertThat(iterator.next().getKey(), is("tables/LOGIC_TABLE"));
- assertThat(iterator.next().getKey(), is("tables/SUB_LOGIC_TABLE"));
- assertThat(iterator.next().getKey(), is("auto_tables/auto_table"));
- assertThat(iterator.next().getKey(), is("binding_tables/foo"));
- }
-
- private ShardingRuleConfiguration createMaximumShardingRule() {
- ShardingRuleConfiguration result = new ShardingRuleConfiguration();
- ShardingTableRuleConfiguration shardingTableRuleConfig =
createTableRuleConfiguration("LOGIC_TABLE", "ds_${0..1}.table_${0..2}");
- shardingTableRuleConfig.setKeyGenerateStrategy(new
KeyGenerateStrategyConfiguration("id", "uuid"));
- shardingTableRuleConfig.setAuditStrategy(new
ShardingAuditStrategyConfiguration(Collections.singleton("audit_algorithm"),
false));
- result.getTables().add(shardingTableRuleConfig);
- ShardingTableRuleConfiguration subTableRuleConfig =
createTableRuleConfiguration("SUB_LOGIC_TABLE", "ds_${0..1}.sub_table_${0..2}");
- subTableRuleConfig.setKeyGenerateStrategy(new
KeyGenerateStrategyConfiguration("id", "auto_increment"));
- result.getTables().add(subTableRuleConfig);
- ShardingAutoTableRuleConfiguration autoTableRuleConfig = new
ShardingAutoTableRuleConfiguration("auto_table", "ds_1,ds_2");
- autoTableRuleConfig.setShardingStrategy(new
StandardShardingStrategyConfiguration("user_id", "hash_mod"));
- autoTableRuleConfig.setKeyGenerateStrategy(new
KeyGenerateStrategyConfiguration("id", "auto_increment"));
- autoTableRuleConfig.setAuditStrategy(new
ShardingAuditStrategyConfiguration(Collections.singleton("audit_algorithm"),
true));
- result.getAutoTables().add(autoTableRuleConfig);
- result.getBindingTableGroups().add(new
ShardingTableReferenceRuleConfiguration("foo",
shardingTableRuleConfig.getLogicTable() + "," +
subTableRuleConfig.getLogicTable()));
- result.setDefaultDatabaseShardingStrategy(new
StandardShardingStrategyConfiguration("ds_id", "standard"));
- result.setDefaultTableShardingStrategy(new
StandardShardingStrategyConfiguration("table_id", "standard"));
- result.setDefaultShardingColumn("table_id");
- result.setDefaultKeyGenerateStrategy(new
KeyGenerateStrategyConfiguration("id", "default"));
- result.setDefaultAuditStrategy(new
ShardingAuditStrategyConfiguration(Collections.singletonList("audit_algorithm"),
false));
- result.getShardingAlgorithms().put("core_standard_fixture", new
AlgorithmConfiguration("CORE.STANDARD.FIXTURE", new Properties()));
- result.getShardingAlgorithms().put("hash_mod", new
AlgorithmConfiguration("hash_mod", PropertiesBuilder.build(new
PropertiesBuilder.Property("sharding-count", "4"))));
- result.getKeyGenerators().put("uuid", new
AlgorithmConfiguration("UUID", new Properties()));
- result.getKeyGenerators().put("default", new
AlgorithmConfiguration("UUID", new Properties()));
- result.getKeyGenerators().put("auto_increment", new
AlgorithmConfiguration("AUTO_INCREMENT.FIXTURE", new Properties()));
- result.getAuditors().put("audit_algorithm", new
AlgorithmConfiguration("DML_SHARDING_CONDITIONS", new Properties()));
- return result;
- }
-
- private ShardingTableRuleConfiguration createTableRuleConfiguration(final
String logicTableName, final String actualDataNodes) {
- ShardingTableRuleConfiguration result = new
ShardingTableRuleConfiguration(logicTableName, actualDataNodes);
- result.setDatabaseShardingStrategy(new
StandardShardingStrategyConfiguration("user_id", "database_inline"));
- result.setTableShardingStrategy(new
StandardShardingStrategyConfiguration("order_id", "table_inline"));
- return result;
- }
-
- @Test
- void assertSwapToObject() {
- Collection<RepositoryTuple> tuples = new LinkedList<>();
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/tables/LOGIC_TABLE/versions/0",
"actualDataNodes: ds_${0..1}.table_${0..2}\n"
- + "auditStrategy:\n"
- + " allowHintDisable: false\n"
- + " auditorNames:\n"
- + " - audit_algorithm\n"
- + "databaseStrategy:\n"
- + " standard:\n"
- + " shardingAlgorithmName: database_inline\n"
- + " shardingColumn: user_id\n"
- + "keyGenerateStrategy:\n"
- + " column: id\n"
- + " keyGeneratorName: uuid\n"
- + "logicTable: LOGIC_TABLE\n"
- + "tableStrategy:\n"
- + " standard:\n"
- + " shardingAlgorithmName: table_inline\n"
- + " shardingColumn: order_id\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/tables/SUB_LOGIC_TABLE/versions/0",
"actualDataNodes: ds_${0..1}.sub_table_${0..2}\n"
- + "databaseStrategy:\n"
- + " standard:\n"
- + " shardingAlgorithmName: database_inline\n"
- + " shardingColumn: user_id\n"
- + "keyGenerateStrategy:\n"
- + " column: id\n"
- + " keyGeneratorName: auto_increment\n"
- + "logicTable: SUB_LOGIC_TABLE\n"
- + "tableStrategy:\n"
- + " standard:\n"
- + " shardingAlgorithmName: table_inline\n"
- + " shardingColumn: order_id\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/auto_tables/auto_table/versions/0",
"actualDataSources: ds_1,ds_2\n"
- + "auditStrategy:\n"
- + " allowHintDisable: true\n"
- + " auditorNames:\n"
- + " - audit_algorithm\n"
- + "keyGenerateStrategy:\n"
- + " column: id\n"
- + " keyGeneratorName: auto_increment\n"
- + "logicTable: auto_table\n"
- + "shardingStrategy:\n"
- + " standard:\n"
- + " shardingAlgorithmName: hash_mod\n"
- + " shardingColumn: user_id\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/binding_tables/foo/versions/0",
"foo:LOGIC_TABLE,SUB_LOGIC_TABLE"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/default_strategies/default_database_strategy/versions/0",
"standard:\n"
- + " shardingAlgorithmName: standard\n"
- + " shardingColumn: ds_id\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/default_strategies/default_table_strategy/versions/0",
"standard:\n"
- + " shardingAlgorithmName: standard\n"
- + " shardingColumn: table_id\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/default_strategies/default_key_generate_strategy/versions/0",
"column: id\n"
- + "keyGeneratorName: default\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/default_strategies/default_audit_strategy/versions/0",
"allowHintDisable: false\n"
- + "auditorNames:\n"
- + "- audit_algorithm\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/algorithms/core_standard_fixture/versions/0",
"type: CORE.STANDARD.FIXTURE\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/algorithms/hash_mod/versions/0",
"props:\n"
- + " sharding-count: '4'\n"
- + "type: hash_mod\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/key_generators/uuid/versions/0",
"type: UUID\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/key_generators/default/versions/0",
"type: UUID\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/key_generators/auto_increment/versions/0",
"type: AUTO_INCREMENT.FIXTURE\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/auditors/audit_algorithm/versions/0",
"type: DML_SHARDING_CONDITIONS\n"));
- tuples.add(new
RepositoryTuple("/metadata/foo_db/rules/sharding/default_strategies/default_sharding_column/versions/0",
"table_id"));
- Optional<YamlShardingRuleConfiguration> yamlRuleConfig =
swapper.swapToObject(tuples);
- assertTrue(yamlRuleConfig.isPresent());
- ShardingRuleConfiguration actual = (ShardingRuleConfiguration) new
YamlRuleConfigurationSwapperEngine().swapToRuleConfiguration(yamlRuleConfig.get());
- assertThat(actual.getTables().size(), is(2));
- assertThat(actual.getTables().iterator().next().getLogicTable(),
is("LOGIC_TABLE"));
- assertThat(actual.getTables().iterator().next().getActualDataNodes(),
is("ds_${0..1}.table_${0..2}"));
- assertInstanceOf(StandardShardingStrategyConfiguration.class,
actual.getTables().iterator().next().getDatabaseShardingStrategy());
- assertThat(((StandardShardingStrategyConfiguration)
actual.getTables().iterator().next().getDatabaseShardingStrategy()).getShardingColumn(),
is("user_id"));
-
assertThat(actual.getTables().iterator().next().getDatabaseShardingStrategy().getShardingAlgorithmName(),
is("database_inline"));
-
assertThat(actual.getTables().iterator().next().getDatabaseShardingStrategy().getType(),
is("STANDARD"));
- assertInstanceOf(StandardShardingStrategyConfiguration.class,
actual.getTables().iterator().next().getTableShardingStrategy());
- assertThat(((StandardShardingStrategyConfiguration)
actual.getTables().iterator().next().getTableShardingStrategy()).getShardingColumn(),
is("order_id"));
-
assertThat(actual.getTables().iterator().next().getTableShardingStrategy().getShardingAlgorithmName(),
is("table_inline"));
-
assertThat(actual.getTables().iterator().next().getTableShardingStrategy().getType(),
is("STANDARD"));
-
assertThat(actual.getTables().iterator().next().getKeyGenerateStrategy().getColumn(),
is("id"));
-
assertThat(actual.getTables().iterator().next().getKeyGenerateStrategy().getKeyGeneratorName(),
is("uuid"));
-
assertThat(actual.getTables().iterator().next().getAuditStrategy().getAuditorNames().size(),
is(1));
-
assertThat(actual.getTables().iterator().next().getAuditStrategy().getAuditorNames().iterator().next(),
is("audit_algorithm"));
-
assertFalse(actual.getTables().iterator().next().getAuditStrategy().isAllowHintDisable());
- assertThat(actual.getAutoTables().size(), is(1));
- assertThat(actual.getAutoTables().iterator().next().getLogicTable(),
is("auto_table"));
-
assertThat(actual.getAutoTables().iterator().next().getActualDataSources(),
is("ds_1,ds_2"));
- assertInstanceOf(StandardShardingStrategyConfiguration.class,
actual.getAutoTables().iterator().next().getShardingStrategy());
- assertThat(((StandardShardingStrategyConfiguration)
actual.getAutoTables().iterator().next().getShardingStrategy()).getShardingColumn(),
is("user_id"));
-
assertThat(actual.getAutoTables().iterator().next().getShardingStrategy().getShardingAlgorithmName(),
is("hash_mod"));
-
assertThat(actual.getAutoTables().iterator().next().getShardingStrategy().getType(),
is("STANDARD"));
-
assertThat(actual.getAutoTables().iterator().next().getKeyGenerateStrategy().getColumn(),
is("id"));
-
assertThat(actual.getAutoTables().iterator().next().getKeyGenerateStrategy().getKeyGeneratorName(),
is("auto_increment"));
-
assertThat(actual.getAutoTables().iterator().next().getAuditStrategy().getAuditorNames().size(),
is(1));
-
assertThat(actual.getAutoTables().iterator().next().getAuditStrategy().getAuditorNames().iterator().next(),
is("audit_algorithm"));
-
assertTrue(actual.getAutoTables().iterator().next().getAuditStrategy().isAllowHintDisable());
- assertThat(actual.getBindingTableGroups().size(), is(1));
- assertThat(actual.getBindingTableGroups().iterator().next().getName(),
is("foo"));
-
assertThat(actual.getBindingTableGroups().iterator().next().getReference(),
is("LOGIC_TABLE,SUB_LOGIC_TABLE"));
- assertInstanceOf(StandardShardingStrategyConfiguration.class,
actual.getDefaultDatabaseShardingStrategy());
- assertThat(((StandardShardingStrategyConfiguration)
actual.getDefaultDatabaseShardingStrategy()).getType(), is("STANDARD"));
- assertThat(((StandardShardingStrategyConfiguration)
actual.getDefaultDatabaseShardingStrategy()).getShardingColumn(), is("ds_id"));
-
assertThat(actual.getDefaultDatabaseShardingStrategy().getShardingAlgorithmName(),
is("standard"));
- assertInstanceOf(StandardShardingStrategyConfiguration.class,
actual.getDefaultTableShardingStrategy());
- assertThat(((StandardShardingStrategyConfiguration)
actual.getDefaultTableShardingStrategy()).getType(), is("STANDARD"));
- assertThat(((StandardShardingStrategyConfiguration)
actual.getDefaultTableShardingStrategy()).getShardingColumn(), is("table_id"));
-
assertThat(actual.getDefaultTableShardingStrategy().getShardingAlgorithmName(),
is("standard"));
- assertThat(actual.getDefaultKeyGenerateStrategy().getColumn(),
is("id"));
-
assertThat(actual.getDefaultKeyGenerateStrategy().getKeyGeneratorName(),
is("default"));
- assertThat(actual.getDefaultAuditStrategy().getAuditorNames().size(),
is(1));
-
assertThat(actual.getDefaultAuditStrategy().getAuditorNames().iterator().next(),
is("audit_algorithm"));
- assertFalse(actual.getDefaultAuditStrategy().isAllowHintDisable());
- assertThat(actual.getDefaultShardingColumn(), is("table_id"));
- assertThat(actual.getShardingAlgorithms().size(), is(2));
-
assertThat(actual.getShardingAlgorithms().get("core_standard_fixture").getType(),
is("CORE.STANDARD.FIXTURE"));
- assertThat(actual.getShardingAlgorithms().get("hash_mod").getType(),
is("hash_mod"));
-
assertThat(actual.getShardingAlgorithms().get("hash_mod").getProps().size(),
is(1));
-
assertThat(actual.getShardingAlgorithms().get("hash_mod").getProps().get("sharding-count"),
is("4"));
- assertThat(actual.getKeyGenerators().size(), is(3));
- assertThat(actual.getKeyGenerators().get("uuid").getType(),
is("UUID"));
- assertTrue(actual.getKeyGenerators().get("uuid").getProps().isEmpty());
- assertThat(actual.getKeyGenerators().get("auto_increment").getType(),
is("AUTO_INCREMENT.FIXTURE"));
- assertThat(actual.getAuditors().size(), is(1));
- assertThat(actual.getAuditors().get("audit_algorithm").getType(),
is("DML_SHARDING_CONDITIONS"));
-
assertTrue(actual.getAuditors().get("audit_algorithm").getProps().isEmpty());
- assertNull(actual.getShardingCache());
- }
-}
diff --git a/features/sharding/core/src/test/resources/yaml/sharding-rule.yaml
b/features/sharding/core/src/test/resources/yaml/sharding-rule.yaml
index d1fb307864f..5fc2064d4eb 100644
--- a/features/sharding/core/src/test/resources/yaml/sharding-rule.yaml
+++ b/features/sharding/core/src/test/resources/yaml/sharding-rule.yaml
@@ -15,14 +15,6 @@
# limitations under the License.
#
-dataSources:
- ds_0:
- dataSourceClassName:
org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource
- ds_1:
- dataSourceClassName:
org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource
- default_ds:
- dataSourceClassName:
org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource
-
rules:
- !SHARDING
tables:
@@ -60,17 +52,21 @@ rules:
shardingColumn: order_id
shardingAlgorithmName: core_standard_fixture
bindingTables:
- - t_order, t_order_item
- defaultDatabaseStrategy:
+ - t_order, t_order_item
+ - foo:t_order, t_order_item
+ defaultDatabaseStrategy:
standard:
shardingColumn: order_id
shardingAlgorithmName: database_inline
defaultTableStrategy:
none:
defaultShardingColumn: order_id
+ defaultKeyGenerateStrategy:
+ column: id
+ keyGeneratorName: snowflake
defaultAuditStrategy:
auditorNames:
- - sharding_key_required_auditor
+ - sharding_key_required_auditor
allowHintDisable: true
shardingAlgorithms:
@@ -103,6 +99,3 @@ rules:
initialCapacity: 65536
maximumSize: 262144
softValues: true
-
-props:
- sql-show: true