This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 71d286fdcce Use ResourceMetaData instead of DataSourceMap for
DatabaseRuleBuilder (#31570)
71d286fdcce is described below
commit 71d286fdcce2fc142596d20856b304d048767f25
Author: Haoran Meng <[email protected]>
AuthorDate: Mon Jun 3 21:08:48 2024 +0800
Use ResourceMetaData instead of DataSourceMap for DatabaseRuleBuilder
(#31570)
* Use ResourceMetaData instead of DataSourceMap for DatabaseRuleBuilder
* Use ResourceMetaData instead of DataSourceMap for DatabaseRuleBuilder
---
.../rule/builder/BroadcastRuleBuilder.java | 7 +++----
.../rule/builder/BroadcastRuleBuilderTest.java | 4 +++-
.../encrypt/rule/builder/EncryptRuleBuilder.java | 5 ++---
.../rule/builder/EncryptRuleBuilderTest.java | 4 +++-
.../mask/rule/builder/MaskRuleBuilder.java | 5 ++---
.../mask/rule/builder/MaskRuleBuilderTest.java | 4 +++-
.../rule/builder/ReadwriteSplittingRuleBuilder.java | 5 ++---
.../builder/ReadwriteSplittingRuleBuilderTest.java | 3 ++-
.../shadow/rule/builder/ShadowRuleBuilder.java | 5 ++---
.../shadow/rule/builder/ShadowRuleBuilderTest.java | 4 +++-
.../sharding/rule/builder/ShardingRuleBuilder.java | 9 ++++-----
.../rule/builder/ShardingRuleBuilderTest.java | 6 +++---
.../metadata/database/ShardingSphereDatabase.java | 20 ++++++++++++++------
.../database/resource/ResourceMetaData.java | 9 +++++++++
.../rule/builder/database/DatabaseRuleBuilder.java | 7 +++----
.../rule/builder/database/DatabaseRulesBuilder.java | 21 ++++++++++-----------
.../builder/database/DatabaseRulesBuilderTest.java | 4 +++-
.../builder/fixture/FixtureDatabaseRuleBuilder.java | 5 ++---
.../metadata/factory/InternalMetaDataFactory.java | 4 +---
.../single/rule/builder/SingleRuleBuilder.java | 7 +++----
.../single/rule/builder/SingleRuleBuilderTest.java | 5 +++--
.../mode/service/manager/ConfigurationManager.java | 12 ++++--------
.../mode/fixture/ModeRuleBuilderFixture.java | 5 ++---
.../YamlDatabaseConfigurationImportExecutor.java | 6 +-----
.../ImportDatabaseConfigurationExecutorTest.java | 5 ++++-
.../test/it/rewrite/engine/SQLRewriterIT.java | 3 ++-
26 files changed, 93 insertions(+), 81 deletions(-)
diff --git
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilder.java
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilder.java
index dce5274a4e1..8c3ce28d14f 100644
---
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilder.java
+++
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilder.java
@@ -22,12 +22,11 @@ import
org.apache.shardingsphere.broadcast.constant.BroadcastOrder;
import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.Map;
/**
* Broadcast rule builder.
@@ -36,8 +35,8 @@ public final class BroadcastRuleBuilder implements
DatabaseRuleBuilder<Broadcast
@Override
public BroadcastRule build(final BroadcastRuleConfiguration ruleConfig,
final String databaseName, final DatabaseType protocolType,
- final Map<String, DataSource> dataSources,
final Collection<ShardingSphereRule> builtRules, final
ComputeNodeInstanceContext computeNodeInstanceContext) {
- return new BroadcastRule(ruleConfig, databaseName, dataSources,
builtRules);
+ final ResourceMetaData resourceMetaData, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
+ return new BroadcastRule(ruleConfig, databaseName,
resourceMetaData.getDataSourceMap(), builtRules);
}
@Override
diff --git
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilderTest.java
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilderTest.java
index 5194ed1a623..961e1eb91ee 100644
---
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilderTest.java
+++
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilderTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.broadcast.rule.builder;
import
org.apache.shardingsphere.broadcast.api.config.BroadcastRuleConfiguration;
import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import org.apache.shardingsphere.test.fixture.database.MockedDatabaseType;
@@ -38,6 +39,7 @@ class BroadcastRuleBuilderTest {
void assertBuild() {
BroadcastRuleConfiguration ruleConfig =
mock(BroadcastRuleConfiguration.class);
DatabaseRuleBuilder builder =
OrderedSPILoader.getServices(DatabaseRuleBuilder.class,
Collections.singleton(ruleConfig)).get(ruleConfig);
- assertThat(builder.build(ruleConfig, "", new MockedDatabaseType(),
Collections.emptyMap(), Collections.emptyList(),
mock(ComputeNodeInstanceContext.class)), instanceOf(BroadcastRule.class));
+ assertThat(builder.build(ruleConfig, "", new MockedDatabaseType(),
mock(ResourceMetaData.class), Collections.emptyList(),
mock(ComputeNodeInstanceContext.class)),
+ instanceOf(BroadcastRule.class));
}
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/builder/EncryptRuleBuilder.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/builder/EncryptRuleBuilder.java
index 19c3803d5a5..cd73d2078a0 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/builder/EncryptRuleBuilder.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/builder/EncryptRuleBuilder.java
@@ -22,12 +22,11 @@ import
org.apache.shardingsphere.encrypt.constant.EncryptOrder;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.Map;
/**
* Encrypt rule builder.
@@ -36,7 +35,7 @@ public final class EncryptRuleBuilder implements
DatabaseRuleBuilder<EncryptRule
@Override
public EncryptRule build(final EncryptRuleConfiguration ruleConfig, final
String databaseName, final DatabaseType protocolType,
- final Map<String, DataSource> dataSources, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
+ final ResourceMetaData resourceMetaData, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
return new EncryptRule(databaseName, ruleConfig);
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/builder/EncryptRuleBuilderTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/builder/EncryptRuleBuilderTest.java
index eeb2b602de7..e9c14bf0929 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/builder/EncryptRuleBuilderTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/builder/EncryptRuleBuilderTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.encrypt.rule.builder;
import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import org.apache.shardingsphere.test.fixture.database.MockedDatabaseType;
@@ -38,6 +39,7 @@ class EncryptRuleBuilderTest {
void assertBuild() {
EncryptRuleConfiguration ruleConfig =
mock(EncryptRuleConfiguration.class);
DatabaseRuleBuilder builder =
OrderedSPILoader.getServices(DatabaseRuleBuilder.class,
Collections.singleton(ruleConfig)).get(ruleConfig);
- assertThat(builder.build(ruleConfig, "", new MockedDatabaseType(),
Collections.emptyMap(), Collections.emptyList(),
mock(ComputeNodeInstanceContext.class)), instanceOf(EncryptRule.class));
+ assertThat(builder.build(ruleConfig, "", new MockedDatabaseType(),
mock(ResourceMetaData.class), Collections.emptyList(),
mock(ComputeNodeInstanceContext.class)),
+ instanceOf(EncryptRule.class));
}
}
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/builder/MaskRuleBuilder.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/builder/MaskRuleBuilder.java
index bee11e45d20..800fb44555f 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/builder/MaskRuleBuilder.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/builder/MaskRuleBuilder.java
@@ -19,15 +19,14 @@ package org.apache.shardingsphere.mask.rule.builder;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
import org.apache.shardingsphere.mask.constant.MaskOrder;
import org.apache.shardingsphere.mask.rule.MaskRule;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.Map;
/**
* Mask rule builder.
@@ -36,7 +35,7 @@ public final class MaskRuleBuilder implements
DatabaseRuleBuilder<MaskRuleConfig
@Override
public MaskRule build(final MaskRuleConfiguration ruleConfig, final String
databaseName, final DatabaseType protocolType,
- final Map<String, DataSource> dataSources, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
+ final ResourceMetaData resourceMetaData, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
return new MaskRule(ruleConfig);
}
diff --git
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/builder/MaskRuleBuilderTest.java
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/builder/MaskRuleBuilderTest.java
index 84c5f6676ce..771d0b5ae9d 100644
---
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/builder/MaskRuleBuilderTest.java
+++
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/rule/builder/MaskRuleBuilderTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mask.rule.builder;
import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
@@ -38,6 +39,7 @@ class MaskRuleBuilderTest {
void assertBuild() {
MaskRuleConfiguration ruleConfig = mock(MaskRuleConfiguration.class);
DatabaseRuleBuilder<MaskRuleConfiguration> builder =
OrderedSPILoader.getServices(DatabaseRuleBuilder.class,
Collections.singleton(ruleConfig)).get(ruleConfig);
- assertThat(builder.build(ruleConfig, "", new MySQLDatabaseType(),
Collections.emptyMap(), Collections.emptyList(),
mock(ComputeNodeInstanceContext.class)), instanceOf(MaskRule.class));
+ assertThat(builder.build(ruleConfig, "", new MySQLDatabaseType(),
mock(ResourceMetaData.class), Collections.emptyList(),
+ mock(ComputeNodeInstanceContext.class)),
instanceOf(MaskRule.class));
}
}
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
index 20134d92c4f..ffc1b680447 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilder.java
@@ -19,15 +19,14 @@ package
org.apache.shardingsphere.readwritesplitting.rule.builder;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.constant.ReadwriteSplittingOrder;
import
org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.Map;
/**
* Readwrite-splitting rule builder.
@@ -36,7 +35,7 @@ public final class ReadwriteSplittingRuleBuilder implements
DatabaseRuleBuilder<
@Override
public ReadwriteSplittingRule build(final
ReadwriteSplittingRuleConfiguration ruleConfig, final String databaseName,
final DatabaseType protocolType,
- final Map<String, DataSource>
dataSources, final Collection<ShardingSphereRule> builtRules, final
ComputeNodeInstanceContext computeNodeInstanceContext) {
+ final ResourceMetaData
resourceMetaData, final Collection<ShardingSphereRule> builtRules, final
ComputeNodeInstanceContext computeNodeInstanceContext) {
return new ReadwriteSplittingRule(databaseName, ruleConfig,
computeNodeInstanceContext);
}
diff --git
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
index ab55858c3d4..b932ece50e5 100644
---
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
+++
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.readwritesplitting.rule.builder;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
@@ -41,6 +42,6 @@ class ReadwriteSplittingRuleBuilderTest {
new ReadwriteSplittingDataSourceGroupRuleConfiguration("name",
"writeDataSourceName", Collections.singletonList("readDataSourceName"),
"loadBalancerName")), Collections.emptyMap());
DatabaseRuleBuilder builder =
OrderedSPILoader.getServices(DatabaseRuleBuilder.class,
Collections.singleton(ruleConfig)).get(ruleConfig);
assertThat(builder.build(ruleConfig, "",
- new MockedDatabaseType(), Collections.emptyMap(),
Collections.emptyList(), mock(ComputeNodeInstanceContext.class)),
instanceOf(ReadwriteSplittingRule.class));
+ new MockedDatabaseType(), mock(ResourceMetaData.class),
Collections.emptyList(), mock(ComputeNodeInstanceContext.class)),
instanceOf(ReadwriteSplittingRule.class));
}
}
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/builder/ShadowRuleBuilder.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/builder/ShadowRuleBuilder.java
index c2088656e75..cf71ca96448 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/builder/ShadowRuleBuilder.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/builder/ShadowRuleBuilder.java
@@ -19,15 +19,14 @@ package org.apache.shardingsphere.shadow.rule.builder;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
import org.apache.shardingsphere.shadow.constant.ShadowOrder;
import org.apache.shardingsphere.shadow.rule.ShadowRule;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.Map;
/**
* Shadow rule builder.
@@ -36,7 +35,7 @@ public final class ShadowRuleBuilder implements
DatabaseRuleBuilder<ShadowRuleCo
@Override
public ShadowRule build(final ShadowRuleConfiguration ruleConfig, final
String databaseName, final DatabaseType protocolType,
- final Map<String, DataSource> dataSources, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
+ final ResourceMetaData resourceMetaData, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
return new ShadowRule(ruleConfig);
}
diff --git
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/builder/ShadowRuleBuilderTest.java
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/builder/ShadowRuleBuilderTest.java
index 216d7780613..c5c9516dc0d 100644
---
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/builder/ShadowRuleBuilderTest.java
+++
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/rule/builder/ShadowRuleBuilderTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.rule.builder;
import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
@@ -38,6 +39,7 @@ class ShadowRuleBuilderTest {
void assertBuild() {
ShadowRuleConfiguration ruleConfig = new ShadowRuleConfiguration();
DatabaseRuleBuilder builder =
OrderedSPILoader.getServices(DatabaseRuleBuilder.class,
Collections.singleton(ruleConfig)).get(ruleConfig);
- assertThat(builder.build(ruleConfig, "", new MySQLDatabaseType(),
Collections.emptyMap(), Collections.emptyList(),
mock(ComputeNodeInstanceContext.class)), instanceOf(ShadowRule.class));
+ assertThat(builder.build(ruleConfig, "", new MySQLDatabaseType(),
mock(ResourceMetaData.class), Collections.emptyList(),
+ mock(ComputeNodeInstanceContext.class)),
instanceOf(ShadowRule.class));
}
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
index 99f1edcb498..ec7e816fbe9 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.rule.builder;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -27,9 +28,7 @@ import
org.apache.shardingsphere.sharding.constant.ShardingOrder;
import
org.apache.shardingsphere.sharding.exception.metadata.MissingRequiredShardingConfigurationException;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.Map;
/**
* Sharding rule builder.
@@ -38,9 +37,9 @@ public final class ShardingRuleBuilder implements
DatabaseRuleBuilder<ShardingRu
@Override
public ShardingRule build(final ShardingRuleConfiguration ruleConfig,
final String databaseName, final DatabaseType protocolType,
- final Map<String, DataSource> dataSources, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
- ShardingSpherePreconditions.checkNotEmpty(dataSources, () -> new
MissingRequiredShardingConfigurationException("Data source", databaseName));
- return new ShardingRule(ruleConfig, dataSources,
computeNodeInstanceContext);
+ final ResourceMetaData resourceMetaData, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
+
ShardingSpherePreconditions.checkNotEmpty(resourceMetaData.getDataSourceMap(),
() -> new MissingRequiredShardingConfigurationException("Data source",
databaseName));
+ return new ShardingRule(ruleConfig,
resourceMetaData.getDataSourceMap(), computeNodeInstanceContext);
}
@Override
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilderTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilderTest.java
index 1d5cf08f6c0..9872e06315b 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilderTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilderTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sharding.rule.builder;
import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -27,7 +28,6 @@ import org.apache.shardingsphere.sharding.rule.ShardingRule;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import javax.sql.DataSource;
import java.util.Collections;
import static org.hamcrest.CoreMatchers.instanceOf;
@@ -53,13 +53,13 @@ class ShardingRuleBuilderTest {
@Test
void assertBuild() {
assertThat(builder.build(ruleConfig, "sharding_db", new
MySQLDatabaseType(),
- Collections.singletonMap("name", mock(DataSource.class,
RETURNS_DEEP_STUBS)), Collections.emptyList(),
mock(ComputeNodeInstanceContext.class)), instanceOf(ShardingRule.class));
+ mock(ResourceMetaData.class, RETURNS_DEEP_STUBS),
Collections.emptyList(), mock(ComputeNodeInstanceContext.class)),
instanceOf(ShardingRule.class));
}
@SuppressWarnings("unchecked")
@Test
void assertBuildWithEmptyDataSourceMap() {
assertThrows(MissingRequiredShardingConfigurationException.class,
- () -> builder.build(ruleConfig, "sharding_db", new
MySQLDatabaseType(), Collections.emptyMap(), Collections.emptyList(),
mock(ComputeNodeInstanceContext.class)));
+ () -> builder.build(ruleConfig, "sharding_db", new
MySQLDatabaseType(), mock(ResourceMetaData.class), Collections.emptyList(),
mock(ComputeNodeInstanceContext.class)));
}
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index 11283907d71..a4216384d7f 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -34,8 +34,8 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SystemSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
import
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
+import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
import javax.sql.DataSource;
@@ -89,12 +89,13 @@ public final class ShardingSphereDatabase {
public static ShardingSphereDatabase create(final String name, final
DatabaseType protocolType, final Map<String, DatabaseType> storageTypes,
final DatabaseConfiguration
databaseConfig, final ConfigurationProperties props,
final
ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException {
- Collection<ShardingSphereRule> databaseRules =
DatabaseRulesBuilder.build(name, protocolType, databaseConfig,
computeNodeInstanceContext);
+ ResourceMetaData resourceMetaData =
createResourceMetaData(databaseConfig.getDataSources(),
databaseConfig.getStorageUnits());
+ Collection<ShardingSphereRule> databaseRules =
DatabaseRulesBuilder.build(name, protocolType, databaseConfig,
computeNodeInstanceContext, resourceMetaData);
Map<String, ShardingSphereSchema> schemas = new
ConcurrentHashMap<>(GenericSchemaBuilder
.build(new GenericSchemaBuilderMaterial(protocolType,
storageTypes, DataSourceStateManager.getInstance().getEnabledDataSources(name,
databaseConfig), databaseRules,
props, new
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(name))));
SystemSchemaBuilder.build(name, protocolType,
props).forEach(schemas::putIfAbsent);
- return create(name, protocolType, databaseConfig, databaseRules,
schemas);
+ return create(name, protocolType, databaseRules, schemas,
resourceMetaData);
}
/**
@@ -107,7 +108,8 @@ public final class ShardingSphereDatabase {
*/
public static ShardingSphereDatabase create(final String name, final
DatabaseType protocolType, final ConfigurationProperties props) {
DatabaseConfiguration databaseConfig = new
DataSourceProvidedDatabaseConfiguration(new LinkedHashMap<>(), new
LinkedList<>());
- return create(name, protocolType, databaseConfig, new LinkedList<>(),
SystemSchemaBuilder.build(name, protocolType, props));
+ ResourceMetaData resourceMetaData =
createResourceMetaData(databaseConfig.getDataSources(),
databaseConfig.getStorageUnits());
+ return create(name, protocolType, new LinkedList<>(),
SystemSchemaBuilder.build(name, protocolType, props), resourceMetaData);
}
/**
@@ -116,13 +118,19 @@ public final class ShardingSphereDatabase {
* @param name database name
* @param protocolType database protocol type
* @param databaseConfig database configuration
- * @param rules rules
+ * @param computeNodeInstanceContext compute node instance context
* @param schemas schemas
* @return database meta data
*/
public static ShardingSphereDatabase create(final String name, final
DatabaseType protocolType, final DatabaseConfiguration databaseConfig,
- final
Collection<ShardingSphereRule> rules, final Map<String, ShardingSphereSchema>
schemas) {
+ final
ComputeNodeInstanceContext computeNodeInstanceContext, final Map<String,
ShardingSphereSchema> schemas) {
ResourceMetaData resourceMetaData =
createResourceMetaData(databaseConfig.getDataSources(),
databaseConfig.getStorageUnits());
+ Collection<ShardingSphereRule> rules =
DatabaseRulesBuilder.build(name, protocolType, databaseConfig,
computeNodeInstanceContext, resourceMetaData);
+ return create(name, protocolType, rules, schemas, resourceMetaData);
+ }
+
+ private static ShardingSphereDatabase create(final String name, final
DatabaseType protocolType, final Collection<ShardingSphereRule> rules,
+ final Map<String,
ShardingSphereSchema> schemas, final ResourceMetaData resourceMetaData) {
RuleMetaData ruleMetaData = new RuleMetaData(rules);
return new ShardingSphereDatabase(name, protocolType,
resourceMetaData, ruleMetaData, schemas);
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
index 97962e66f60..d999eb4a7c8 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
@@ -84,4 +84,13 @@ public final class ResourceMetaData {
public Collection<String> getNotExistedDataSources(final
Collection<String> resourceNames) {
return resourceNames.stream().filter(each ->
!storageUnits.containsKey(each)).collect(Collectors.toSet());
}
+
+ /**
+ * Get data source map.
+ *
+ * @return data source map
+ */
+ public Map<String, DataSource> getDataSourceMap() {
+ return
storageUnits.entrySet().stream().collect(Collectors.toMap(Entry::getKey, entry
-> entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new));
+ }
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRuleBuilder.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRuleBuilder.java
index 550319ed8da..66f24a6891e 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRuleBuilder.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRuleBuilder.java
@@ -20,14 +20,13 @@ package
org.apache.shardingsphere.infra.rule.builder.database;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.builder.RuleBuilder;
import org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.Map;
/**
* Database rule builder.
@@ -43,11 +42,11 @@ public interface DatabaseRuleBuilder<T extends
RuleConfiguration> extends RuleBu
* @param ruleConfig rule configuration
* @param databaseName database name
* @param protocolType protocol type
- * @param dataSources data sources
+ * @param resourceMetaData resource meta data
* @param builtRules built rules
* @param computeNodeInstanceContext compute node instance context
* @return built database rule
*/
DatabaseRule build(T ruleConfig, String databaseName, DatabaseType
protocolType,
- Map<String, DataSource> dataSources,
Collection<ShardingSphereRule> builtRules, ComputeNodeInstanceContext
computeNodeInstanceContext);
+ ResourceMetaData resourceMetaData,
Collection<ShardingSphereRule> builtRules, ComputeNodeInstanceContext
computeNodeInstanceContext);
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
index 9c6b28a5ac4..11e8e948789 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
@@ -26,10 +26,10 @@ import
org.apache.shardingsphere.infra.config.rule.function.DistributedRuleConfi
import
org.apache.shardingsphere.infra.config.rule.function.EnhancedRuleConfiguration;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
-import javax.sql.DataSource;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -53,21 +53,20 @@ public final class DatabaseRulesBuilder {
* @param protocolType protocol type
* @param databaseConfig database configuration
* @param computeNodeInstanceContext compute node instance context
+ * @param resourceMetaData resource meta data
* @return built rules
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static Collection<ShardingSphereRule> build(final String
databaseName, final DatabaseType protocolType, final DatabaseConfiguration
databaseConfig,
- final
ComputeNodeInstanceContext computeNodeInstanceContext) {
+ final
ComputeNodeInstanceContext computeNodeInstanceContext, final ResourceMetaData
resourceMetaData) {
Collection<ShardingSphereRule> result = new LinkedList<>();
for (Entry<RuleConfiguration, DatabaseRuleBuilder> entry :
getRuleBuilderMap(databaseConfig).entrySet()) {
- Map<String, DataSource> dataSources =
databaseConfig.getStorageUnits().entrySet().stream()
- .collect(Collectors.toMap(Entry::getKey, storageUnit ->
storageUnit.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new));
RuleConfigurationChecker configChecker =
OrderedSPILoader.getServicesByClass(
RuleConfigurationChecker.class,
Collections.singleton(entry.getKey().getClass())).get(entry.getKey().getClass());
if (null != configChecker) {
- configChecker.check(databaseName, entry.getKey(), dataSources,
result);
+ configChecker.check(databaseName, entry.getKey(),
resourceMetaData.getDataSourceMap(), result);
}
- result.add(entry.getValue().build(entry.getKey(), databaseName,
protocolType, dataSources, result, computeNodeInstanceContext));
+ result.add(entry.getValue().build(entry.getKey(), databaseName,
protocolType, resourceMetaData, result, computeNodeInstanceContext));
}
return result;
}
@@ -77,24 +76,24 @@ public final class DatabaseRulesBuilder {
*
* @param databaseName database name
* @param protocolType protocol type
- * @param dataSources data sources
* @param rules rules
* @param ruleConfig rule configuration
* @param computeNodeInstanceContext compute node instance context
+ * @param resourceMetaData resource meta data
* @return built rules
*/
@SuppressWarnings({"unchecked", "rawtypes"})
- public static Collection<ShardingSphereRule> build(final String
databaseName, final DatabaseType protocolType, final Map<String, DataSource>
dataSources,
- final
Collection<ShardingSphereRule> rules, final RuleConfiguration ruleConfig, final
ComputeNodeInstanceContext computeNodeInstanceContext) {
+ public static Collection<ShardingSphereRule> build(final String
databaseName, final DatabaseType protocolType, final
Collection<ShardingSphereRule> rules, final RuleConfiguration ruleConfig,
+ final
ComputeNodeInstanceContext computeNodeInstanceContext, final ResourceMetaData
resourceMetaData) {
Collection<ShardingSphereRule> result = new LinkedList<>();
for (Entry<RuleConfiguration, DatabaseRuleBuilder> entry :
OrderedSPILoader.getServices(DatabaseRuleBuilder.class,
Collections.singletonList(ruleConfig),
Comparator.reverseOrder()).entrySet()) {
RuleConfigurationChecker configChecker =
OrderedSPILoader.getServicesByClass(
RuleConfigurationChecker.class,
Collections.singleton(entry.getKey().getClass())).get(entry.getKey().getClass());
if (null != configChecker) {
- configChecker.check(databaseName, entry.getKey(), dataSources,
rules);
+ configChecker.check(databaseName, entry.getKey(),
resourceMetaData.getDataSourceMap(), rules);
}
- result.add(entry.getValue().build(entry.getKey(), databaseName,
protocolType, dataSources, rules, computeNodeInstanceContext));
+ result.add(entry.getValue().build(entry.getKey(), databaseName,
protocolType, resourceMetaData, rules, computeNodeInstanceContext));
}
return result;
}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilderTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilderTest.java
index d5189f2d492..39cc139e3f9 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilderTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilderTest.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import org.apache.shardingsphere.infra.fixture.FixtureRule;
import org.apache.shardingsphere.infra.fixture.FixtureRuleConfiguration;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.junit.jupiter.api.Test;
@@ -38,7 +39,8 @@ class DatabaseRulesBuilderTest {
@Test
void assertBuild() {
Iterator<ShardingSphereRule> actual =
DatabaseRulesBuilder.build("foo_db", new MySQLDatabaseType(),
- new
DataSourceProvidedDatabaseConfiguration(Collections.emptyMap(),
Collections.singleton(new FixtureRuleConfiguration())),
mock(ComputeNodeInstanceContext.class)).iterator();
+ new
DataSourceProvidedDatabaseConfiguration(Collections.emptyMap(),
Collections.singleton(new FixtureRuleConfiguration())),
mock(ComputeNodeInstanceContext.class),
+ mock(ResourceMetaData.class)).iterator();
assertThat(actual.next(), instanceOf(FixtureRule.class));
assertFalse(actual.hasNext());
}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/fixture/FixtureDatabaseRuleBuilder.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/fixture/FixtureDatabaseRuleBuilder.java
index f1c53629b61..942669660e2 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/fixture/FixtureDatabaseRuleBuilder.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/fixture/FixtureDatabaseRuleBuilder.java
@@ -20,18 +20,17 @@ package
org.apache.shardingsphere.infra.rule.builder.fixture;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.fixture.FixtureRule;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.Map;
public final class FixtureDatabaseRuleBuilder implements
DatabaseRuleBuilder<FixtureDatabaseRuleConfiguration> {
@Override
public FixtureRule build(final FixtureDatabaseRuleConfiguration
ruleConfig, final String databaseName, final DatabaseType protocolType,
- final Map<String, DataSource> dataSources, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
+ final ResourceMetaData resourceMetaData, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
return new FixtureRule();
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
index e838f9ece72..b12e59cca40 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
@@ -25,7 +25,6 @@ import
org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import java.util.Map;
@@ -51,8 +50,7 @@ public final class InternalMetaDataFactory {
public static ShardingSphereDatabase create(final String databaseName,
final MetaDataPersistService persistService, final DatabaseConfiguration
databaseConfig,
final ConfigurationProperties
props, final ComputeNodeInstanceContext computeNodeInstanceContext) {
DatabaseType protocolType =
DatabaseTypeEngine.getProtocolType(databaseName, databaseConfig, props);
- return ShardingSphereDatabase.create(databaseName, protocolType,
databaseConfig, DatabaseRulesBuilder.build(databaseName, protocolType,
databaseConfig, computeNodeInstanceContext),
-
persistService.getDatabaseMetaDataService().loadSchemas(databaseName));
+ return ShardingSphereDatabase.create(databaseName, protocolType,
databaseConfig, computeNodeInstanceContext,
persistService.getDatabaseMetaDataService().loadSchemas(databaseName));
}
/**
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilder.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilder.java
index 79c381127c5..b2604a2d168 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilder.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilder.java
@@ -19,15 +19,14 @@ package org.apache.shardingsphere.single.rule.builder;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
import org.apache.shardingsphere.single.constant.SingleOrder;
import org.apache.shardingsphere.single.rule.SingleRule;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.Map;
/**
* Single rule builder.
@@ -36,8 +35,8 @@ public final class SingleRuleBuilder implements
DatabaseRuleBuilder<SingleRuleCo
@Override
public SingleRule build(final SingleRuleConfiguration ruleConfig, final
String databaseName, final DatabaseType protocolType,
- final Map<String, DataSource> dataSources, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
- return new SingleRule(ruleConfig, databaseName, protocolType,
dataSources, builtRules);
+ final ResourceMetaData resourceMetaData, final
Collection<ShardingSphereRule> builtRules, final ComputeNodeInstanceContext
computeNodeInstanceContext) {
+ return new SingleRule(ruleConfig, databaseName, protocolType,
resourceMetaData.getDataSourceMap(), builtRules);
}
@Override
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilderTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilderTest.java
index a3ebc5b9c4f..5143207f5c1 100644
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilderTest.java
+++
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/builder/SingleRuleBuilderTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.single.rule.builder;
import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
import org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
@@ -41,7 +42,7 @@ class SingleRuleBuilderTest {
void assertBuild() {
DatabaseRuleBuilder builder =
OrderedSPILoader.getServices(DatabaseRuleBuilder.class).iterator().next();
DatabaseRule actual =
builder.build(mock(SingleRuleConfiguration.class), "",
- new MySQLDatabaseType(), Collections.emptyMap(),
Collections.singleton(mock(ShardingSphereRule.class, RETURNS_DEEP_STUBS)),
mock(ComputeNodeInstanceContext.class));
+ new MySQLDatabaseType(), mock(ResourceMetaData.class),
Collections.singleton(mock(ShardingSphereRule.class, RETURNS_DEEP_STUBS)),
mock(ComputeNodeInstanceContext.class));
assertThat(actual, instanceOf(SingleRule.class));
}
@@ -49,7 +50,7 @@ class SingleRuleBuilderTest {
@Test
void assertBuildWithDefaultDataSource() {
DatabaseRuleBuilder builder =
OrderedSPILoader.getServices(DatabaseRuleBuilder.class).iterator().next();
- DatabaseRule actual = builder.build(new
SingleRuleConfiguration(Collections.emptyList(), "foo_ds"), "", new
MySQLDatabaseType(), Collections.emptyMap(),
+ DatabaseRule actual = builder.build(new
SingleRuleConfiguration(Collections.emptyList(), "foo_ds"), "", new
MySQLDatabaseType(), mock(ResourceMetaData.class),
Collections.singleton(mock(ShardingSphereRule.class,
RETURNS_DEEP_STUBS)), mock(ComputeNodeInstanceContext.class));
assertThat(actual, instanceOf(SingleRule.class));
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
index d90a65a6c69..7210969eaaa 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/manager/ConfigurationManager.java
@@ -169,10 +169,8 @@ public final class ConfigurationManager {
}
try {
rules.removeIf(each ->
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
- rules.addAll(DatabaseRulesBuilder.build(databaseName,
database.getProtocolType(),
-
database.getResourceMetaData().getStorageUnits().entrySet().stream()
- .collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new)),
- database.getRuleMetaData().getRules(), ruleConfig,
computeNodeInstanceContext));
+ rules.addAll(DatabaseRulesBuilder.build(databaseName,
database.getProtocolType(), database.getRuleMetaData().getRules(),
+ ruleConfig, computeNodeInstanceContext,
database.getResourceMetaData()));
refreshMetadata(databaseName, database, rules, false);
} catch (final SQLException ex) {
log.error("Alter database: {} rule configurations failed",
databaseName, ex);
@@ -197,10 +195,8 @@ public final class ConfigurationManager {
try {
rules.removeIf(each ->
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
if (!((DatabaseRuleConfiguration) ruleConfig).isEmpty()) {
- rules.addAll(DatabaseRulesBuilder.build(databaseName,
database.getProtocolType(),
-
database.getResourceMetaData().getStorageUnits().entrySet().stream()
- .collect(Collectors.toMap(Entry::getKey, entry
-> entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new)),
- database.getRuleMetaData().getRules(), ruleConfig,
computeNodeInstanceContext));
+ rules.addAll(DatabaseRulesBuilder.build(databaseName,
database.getProtocolType(), database.getRuleMetaData().getRules(),
+ ruleConfig, computeNodeInstanceContext,
database.getResourceMetaData()));
}
refreshMetadata(databaseName, database, rules, true);
} catch (final SQLException ex) {
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/ModeRuleBuilderFixture.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/ModeRuleBuilderFixture.java
index f07811cae60..8735e407767 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/ModeRuleBuilderFixture.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/ModeRuleBuilderFixture.java
@@ -19,17 +19,16 @@ package org.apache.shardingsphere.mode.fixture;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.Map;
public final class ModeRuleBuilderFixture implements
DatabaseRuleBuilder<ModeRuleConfigurationFixture> {
@Override
- public ModeRuleFixture build(final ModeRuleConfigurationFixture
ruleConfig, final String databaseName, final DatabaseType databaseType, final
Map<String, DataSource> dataSources,
+ public ModeRuleFixture build(final ModeRuleConfigurationFixture
ruleConfig, final String databaseName, final DatabaseType databaseType, final
ResourceMetaData resourceMetaData,
final Collection<ShardingSphereRule>
builtRules, final ComputeNodeInstanceContext computeNodeInstanceContext) {
return new ModeRuleFixture();
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
index 565d8d7737e..2f2b4201e36 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
@@ -48,7 +48,6 @@ import
org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDatabaseConf
import
org.apache.shardingsphere.proxy.backend.config.yaml.swapper.YamlProxyDataSourceConfigurationSwapper;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
@@ -58,7 +57,6 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
-import java.util.stream.Collectors;
/**
* Yaml database configuration import executor.
@@ -143,10 +141,8 @@ public final class YamlDatabaseConfigurationImportExecutor
{
@SuppressWarnings({"unchecked", "rawtypes"})
private ShardingSphereRule buildRule(final RuleConfiguration ruleConfig,
final ShardingSphereDatabase database) {
DatabaseRuleBuilder ruleBuilder =
OrderedSPILoader.getServices(DatabaseRuleBuilder.class,
Collections.singleton(ruleConfig)).get(ruleConfig);
- Map<String, DataSource> dataSources =
database.getResourceMetaData().getStorageUnits().entrySet().stream()
- .collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new));
ComputeNodeInstanceContext computeNodeInstanceContext =
ProxyContext.getInstance().getContextManager().getComputeNodeInstanceContext();
- return ruleBuilder.build(ruleConfig, database.getName(),
database.getProtocolType(), dataSources, database.getRuleMetaData().getRules(),
computeNodeInstanceContext);
+ return ruleBuilder.build(ruleConfig, database.getName(),
database.getProtocolType(), database.getResourceMetaData(),
database.getRuleMetaData().getRules(), computeNodeInstanceContext);
}
@SuppressWarnings({"rawtypes", "unchecked"})
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationExecutorTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationExecutorTest.java
index 04bf0fee7e6..17177580d9c 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationExecutorTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationExecutorTest.java
@@ -48,6 +48,7 @@ import org.mockito.internal.configuration.plugins.Plugins;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
+import javax.sql.DataSource;
import java.net.URL;
import java.sql.SQLException;
import java.util.Collections;
@@ -146,8 +147,10 @@ class ImportDatabaseConfigurationExecutorTest {
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(schema);
StorageUnit storageUnit = mock(StorageUnit.class);
- when(storageUnit.getDataSource()).thenReturn(new MockedDataSource());
+ DataSource dataSource = new MockedDataSource();
+ when(storageUnit.getDataSource()).thenReturn(dataSource);
when(database.getResourceMetaData().getStorageUnits()).thenReturn(new
HashMap<>(Collections.singletonMap("foo_ds", storageUnit)));
+
when(database.getResourceMetaData().getDataSourceMap()).thenReturn(Collections.singletonMap("foo_ds",
dataSource));
when(database.getRuleMetaData().getAttributes(DataSourceMapperRuleAttribute.class)).thenReturn(Collections.emptyList());
when(result.getMetaDataContexts().getMetaData().getDatabases()).thenReturn(Collections.singletonMap(databaseName,
database));
when(result.getMetaDataContexts().getMetaData().getDatabase(databaseName)).thenReturn(database);
diff --git
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
index 7d61b2eef7b..fc0d5b1addf 100644
---
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
+++
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
@@ -160,7 +160,8 @@ public abstract class SQLRewriterIT {
}
private Collection<ShardingSphereRule> createDatabaseRules(final
DatabaseConfiguration databaseConfig, final String schemaName, final
SQLStatement sqlStatement, final DatabaseType databaseType) {
- Collection<ShardingSphereRule> result =
DatabaseRulesBuilder.build(DefaultDatabase.LOGIC_NAME, databaseType,
databaseConfig, mock(ComputeNodeInstanceContext.class));
+ Collection<ShardingSphereRule> result =
DatabaseRulesBuilder.build(DefaultDatabase.LOGIC_NAME, databaseType,
databaseConfig, mock(ComputeNodeInstanceContext.class),
+ new ResourceMetaData(databaseConfig.getDataSources(),
databaseConfig.getStorageUnits()));
mockRules(result, schemaName, sqlStatement);
result.add(sqlParserRule);
result.add(timestampServiceRule);