This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 a2c022db9a1 Fix ShardingSphereDataSource creation ignoring other rules
(#17875)
a2c022db9a1 is described below
commit a2c022db9a1f8f125b7e2f2261f406a8ab783062
Author: Hongsheng Zhong <[email protected]>
AuthorDate: Mon May 23 23:20:22 2022 +0800
Fix ShardingSphereDataSource creation ignoring other rules (#17875)
---
.../yaml/swapper/ShardingRuleConfigurationConverter.java | 13 ++++++++++++-
.../creator/ShardingSpherePipelineDataSourceCreator.java | 16 +++++++++-------
2 files changed, 21 insertions(+), 8 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationConverter.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationConverter.java
index 2171a02f206..8bed02aeb2e 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationConverter.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationConverter.java
@@ -38,8 +38,19 @@ public final class ShardingRuleConfigurationConverter {
* @throws IllegalStateException if there is no available sharding rule
*/
public static ShardingRuleConfiguration
findAndConvertShardingRuleConfiguration(final Collection<YamlRuleConfiguration>
yamlRuleConfigs) {
+ return new
ShardingRuleConfigurationYamlSwapper().swapToObject(findYamlShardingRuleConfiguration(yamlRuleConfigs));
+ }
+
+ /**
+ * Find YAML sharding rule configuration.
+ *
+ * @param yamlRuleConfigs YAML rule configurations
+ * @return YAML sharding rule configuration
+ * @throws IllegalStateException if there is no available sharding rule
+ */
+ public static YamlShardingRuleConfiguration
findYamlShardingRuleConfiguration(final Collection<YamlRuleConfiguration>
yamlRuleConfigs) {
Optional<YamlRuleConfiguration> ruleConfig =
yamlRuleConfigs.stream().filter(each -> each instanceof
YamlShardingRuleConfiguration).findFirst();
Preconditions.checkState(ruleConfig.isPresent(), "No available
sharding rule.");
- return new
ShardingRuleConfigurationYamlSwapper().swapToObject((YamlShardingRuleConfiguration)
ruleConfig.get());
+ return (YamlShardingRuleConfiguration) ruleConfig.get();
}
}
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/data/pipeline/datasource/creator/ShardingSpherePipelineDataSourceCreator.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/data/pipeline/datasource/creator/ShardingSpherePipelineDataSourceCreator.java
index 02a7b6824f6..7cdad2284ff 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/data/pipeline/datasource/creator/ShardingSpherePipelineDataSourceCreator.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/data/pipeline/datasource/creator/ShardingSpherePipelineDataSourceCreator.java
@@ -20,17 +20,18 @@ package
org.apache.shardingsphere.driver.data.pipeline.datasource.creator;
import
org.apache.shardingsphere.data.pipeline.api.datasource.config.impl.ShardingSpherePipelineDataSourceConfiguration;
import
org.apache.shardingsphere.data.pipeline.core.datasource.creator.PipelineDataSourceCreator;
import org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory;
-import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
import
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer;
import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
+import
org.apache.shardingsphere.infra.yaml.config.pojo.algorithm.YamlShardingSphereAlgorithmConfiguration;
import
org.apache.shardingsphere.infra.yaml.config.swapper.YamlDataSourceConfigurationSwapper;
-import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import
org.apache.shardingsphere.infra.yaml.config.swapper.YamlRuleConfigurationSwapperEngine;
+import
org.apache.shardingsphere.sharding.yaml.config.YamlShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.yaml.swapper.ShardingRuleConfigurationConverter;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
-import java.util.Collections;
import java.util.Map;
/**
@@ -41,11 +42,12 @@ public final class ShardingSpherePipelineDataSourceCreator
implements PipelineDa
@Override
public DataSource createPipelineDataSource(final Object
pipelineDataSourceConfig) throws SQLException {
YamlRootConfiguration rootConfig = (YamlRootConfiguration)
pipelineDataSourceConfig;
- ShardingRuleConfiguration shardingRuleConfig =
ShardingRuleConfigurationConverter.findAndConvertShardingRuleConfiguration(rootConfig.getRules());
+ YamlShardingRuleConfiguration shardingRuleConfig =
ShardingRuleConfigurationConverter.findYamlShardingRuleConfiguration(rootConfig.getRules());
enableRangeQueryForInline(shardingRuleConfig);
Map<String, DataSource> dataSourceMap = new
YamlDataSourceConfigurationSwapper().swapToDataSources(rootConfig.getDataSources());
+ Collection<RuleConfiguration> ruleConfigs = new
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(rootConfig.getRules());
try {
- return
ShardingSphereDataSourceFactory.createDataSource(rootConfig.getDatabaseName(),
dataSourceMap, Collections.singletonList(shardingRuleConfig), null);
+ return
ShardingSphereDataSourceFactory.createDataSource(rootConfig.getDatabaseName(),
dataSourceMap, ruleConfigs, null);
// CHECKSTYLE:OFF
} catch (final Exception ex) {
// CHECKSTYLE:ON
@@ -54,8 +56,8 @@ public final class ShardingSpherePipelineDataSourceCreator
implements PipelineDa
}
}
- private void enableRangeQueryForInline(final ShardingRuleConfiguration
shardingRuleConfig) {
- for (ShardingSphereAlgorithmConfiguration each :
shardingRuleConfig.getShardingAlgorithms().values()) {
+ private void enableRangeQueryForInline(final YamlShardingRuleConfiguration
shardingRuleConfig) {
+ for (YamlShardingSphereAlgorithmConfiguration each :
shardingRuleConfig.getShardingAlgorithms().values()) {
if ("INLINE".equalsIgnoreCase(each.getType())) {
each.getProps().put("allow-range-query-with-inline-sharding",
Boolean.TRUE.toString());
}