This is an automated email from the ASF dual-hosted git repository.
chenjiahao 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 cfe2fb7f857 Refactor YamlDatabaseConfigurationImportExecutor (#30416)
cfe2fb7f857 is described below
commit cfe2fb7f857a11da96504e9e3e1caa29c7833ba8
Author: Raigor <[email protected]>
AuthorDate: Thu Mar 7 11:49:28 2024 +0800
Refactor YamlDatabaseConfigurationImportExecutor (#30416)
* Refactor YamlDatabaseConfigurationImportExecutor
* Refactor ReadwriteSplittingImportRuleConfigurationProvider
* Remove null check in addRule
---
...teSplittingImportRuleConfigurationProvider.java | 22 ++++++--
.../ShardingImportRuleConfigurationProvider.java | 34 +++++------
...tion.java => MissingDatabaseNameException.java} | 12 ++--
.../exception/UnsupportedVariableException.java | 2 +-
.../YamlDatabaseConfigurationImportExecutor.java | 66 ++++++++++------------
.../ImportDatabaseConfigurationExecutorTest.java | 3 +-
6 files changed, 72 insertions(+), 67 deletions(-)
diff --git
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingImportRuleConfigurationProvider.java
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingImportRuleConfigurationProvider.java
index c21e016a268..57d0f241604 100644
---
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingImportRuleConfigurationProvider.java
+++
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingImportRuleConfigurationProvider.java
@@ -24,14 +24,18 @@ import
org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.identifier.scope.DatabaseRule;
+import
org.apache.shardingsphere.infra.rule.identifier.type.datasource.DataSourceMapperRule;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
import java.util.Collection;
+import java.util.HashSet;
import java.util.LinkedHashSet;
+import java.util.Optional;
/**
* Readwrite-splitting import rule configuration provider.
@@ -44,8 +48,7 @@ public final class
ReadwriteSplittingImportRuleConfigurationProvider implements
return;
}
ReadwriteSplittingRuleConfiguration readwriteSplittingRuleConfig =
(ReadwriteSplittingRuleConfiguration) ruleConfig;
- String databaseName = database.getName();
- checkDataSources(databaseName, database, readwriteSplittingRuleConfig);
+ checkDataSources(database, readwriteSplittingRuleConfig);
checkLoadBalancers(readwriteSplittingRuleConfig);
}
@@ -54,7 +57,7 @@ public final class
ReadwriteSplittingImportRuleConfigurationProvider implements
return new ReadwriteSplittingRule(database.getName(),
(ReadwriteSplittingRuleConfiguration) ruleConfig, instanceContext);
}
- private void checkDataSources(final String databaseName, final
ShardingSphereDatabase database, final ReadwriteSplittingRuleConfiguration
currentRuleConfig) {
+ private void checkDataSources(final ShardingSphereDatabase database, final
ReadwriteSplittingRuleConfiguration currentRuleConfig) {
Collection<String> requiredDataSources = new LinkedHashSet<>();
for (ReadwriteSplittingDataSourceRuleConfiguration each :
currentRuleConfig.getDataSources()) {
if (null != each.getWriteDataSourceName()) {
@@ -65,7 +68,18 @@ public final class
ReadwriteSplittingImportRuleConfigurationProvider implements
}
}
Collection<String> notExistedDataSources =
database.getResourceMetaData().getNotExistedDataSources(requiredDataSources);
-
ShardingSpherePreconditions.checkState(notExistedDataSources.isEmpty(), () ->
new MissingRequiredStorageUnitsException(databaseName, notExistedDataSources));
+ Collection<String> logicalDataSources = getLogicDataSources(database);
+ notExistedDataSources.removeIf(logicalDataSources::contains);
+
ShardingSpherePreconditions.checkState(notExistedDataSources.isEmpty(), () ->
new MissingRequiredStorageUnitsException(database.getName(),
notExistedDataSources));
+ }
+
+ private Collection<String> getLogicDataSources(final
ShardingSphereDatabase database) {
+ Collection<String> result = new HashSet<>();
+ for (ShardingSphereRule each : database.getRuleMetaData().getRules()) {
+ Optional<DataSourceMapperRule> dataSourceMapperRule =
each.getRuleIdentifiers().findIdentifier(DataSourceMapperRule.class);
+ dataSourceMapperRule.ifPresent(optional ->
result.addAll(optional.getDataSourceMapper().keySet()));
+ }
+ return result;
}
private void checkLoadBalancers(final ReadwriteSplittingRuleConfiguration
currentRuleConfig) {
diff --git
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/provider/ShardingImportRuleConfigurationProvider.java
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/provider/ShardingImportRuleConfigurationProvider.java
index 9506a5738c4..33447b9b3c3 100644
---
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/provider/ShardingImportRuleConfigurationProvider.java
+++
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/provider/ShardingImportRuleConfigurationProvider.java
@@ -43,7 +43,6 @@ import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
-import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
@@ -61,41 +60,36 @@ public final class ShardingImportRuleConfigurationProvider
implements ImportRule
return;
}
ShardingRuleConfiguration shardingRuleConfig =
(ShardingRuleConfiguration) ruleConfig;
- String databaseName = database.getName();
- checkLogicTables(databaseName, shardingRuleConfig);
- checkResources(databaseName, database, shardingRuleConfig);
+ checkLogicTables(database.getName(), shardingRuleConfig);
+ checkDataSources(database, shardingRuleConfig);
checkShardingAlgorithms(shardingRuleConfig.getShardingAlgorithms().values());
checkKeyGeneratorAlgorithms(shardingRuleConfig.getKeyGenerators().values());
}
@Override
public DatabaseRule build(final ShardingSphereDatabase database, final
RuleConfiguration ruleConfig, final InstanceContext instanceContext) {
- ShardingRuleConfiguration shardingRuleConfig =
(ShardingRuleConfiguration) ruleConfig;
Map<String, DataSource> dataSources =
database.getResourceMetaData().getStorageUnits().entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, storageUnit ->
storageUnit.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new));
- return new ShardingRule(shardingRuleConfig, dataSources,
instanceContext);
+ return new ShardingRule((ShardingRuleConfiguration) ruleConfig,
dataSources, instanceContext);
}
private void checkLogicTables(final String databaseName, final
ShardingRuleConfiguration currentRuleConfig) {
- Collection<String> tablesLogicTables =
currentRuleConfig.getTables().stream().map(ShardingTableRuleConfiguration::getLogicTable).collect(Collectors.toList());
- Collection<String> autoTablesLogicTables =
currentRuleConfig.getAutoTables().stream().map(ShardingAutoTableRuleConfiguration::getLogicTable).collect(Collectors.toList());
- Collection<String> allLogicTables = new LinkedList<>();
- allLogicTables.addAll(tablesLogicTables);
- allLogicTables.addAll(autoTablesLogicTables);
- Set<String> duplicatedLogicTables =
allLogicTables.stream().collect(Collectors.groupingBy(each -> each,
Collectors.counting())).entrySet().stream()
+ Collection<String> logicTables =
currentRuleConfig.getTables().stream().map(ShardingTableRuleConfiguration::getLogicTable).collect(Collectors.toList());
+
logicTables.addAll(currentRuleConfig.getAutoTables().stream().map(ShardingAutoTableRuleConfiguration::getLogicTable).collect(Collectors.toList()));
+ Set<String> duplicatedLogicTables =
logicTables.stream().collect(Collectors.groupingBy(each -> each,
Collectors.counting())).entrySet().stream()
.filter(each -> each.getValue() >
1).map(Entry::getKey).collect(Collectors.toSet());
ShardingSpherePreconditions.checkState(duplicatedLogicTables.isEmpty(), () ->
new DuplicateRuleException("sharding", databaseName, duplicatedLogicTables));
}
- private void checkResources(final String databaseName, final
ShardingSphereDatabase database, final ShardingRuleConfiguration
currentRuleConfig) {
- Collection<String> requiredResource =
getRequiredResources(currentRuleConfig);
- Collection<String> notExistedResources =
database.getResourceMetaData().getNotExistedDataSources(requiredResource);
- Collection<String> logicResources = getLogicResources(database);
- notExistedResources.removeIf(logicResources::contains);
- ShardingSpherePreconditions.checkState(notExistedResources.isEmpty(),
() -> new MissingRequiredStorageUnitsException(databaseName,
notExistedResources));
+ private void checkDataSources(final ShardingSphereDatabase database, final
ShardingRuleConfiguration currentRuleConfig) {
+ Collection<String> requiredDataSources =
getRequiredDataSources(currentRuleConfig);
+ Collection<String> notExistedDataSources =
database.getResourceMetaData().getNotExistedDataSources(requiredDataSources);
+ Collection<String> logicDataSources = getLogicDataSources(database);
+ notExistedDataSources.removeIf(logicDataSources::contains);
+
ShardingSpherePreconditions.checkState(notExistedDataSources.isEmpty(), () ->
new MissingRequiredStorageUnitsException(database.getName(),
notExistedDataSources));
}
- private Collection<String> getRequiredResources(final
ShardingRuleConfiguration currentRuleConfig) {
+ private Collection<String> getRequiredDataSources(final
ShardingRuleConfiguration currentRuleConfig) {
Collection<String> result = new LinkedHashSet<>();
currentRuleConfig.getTables().forEach(each ->
result.addAll(getDataSourceNames(each)));
currentRuleConfig.getAutoTables().forEach(each ->
result.addAll(getDataSourceNames(each)));
@@ -112,7 +106,7 @@ public final class ShardingImportRuleConfigurationProvider
implements ImportRule
return actualDataNodes.stream().map(each -> new
DataNode(each).getDataSourceName()).collect(Collectors.toList());
}
- private Collection<String> getLogicResources(final ShardingSphereDatabase
database) {
+ private Collection<String> getLogicDataSources(final
ShardingSphereDatabase database) {
Collection<String> result = new LinkedHashSet<>();
for (ShardingSphereRule each : database.getRuleMetaData().getRules()) {
each.getRuleIdentifiers().findIdentifier(DataSourceMapperRule.class).ifPresent(optional
-> result.addAll(optional.getDataSourceMapper().keySet()));
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedVariableException.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/exception/MissingDatabaseNameException.java
similarity index 73%
copy from
proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedVariableException.java
copy to
proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/exception/MissingDatabaseNameException.java
index aefb749acfa..7f40db6a149 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedVariableException.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/exception/MissingDatabaseNameException.java
@@ -17,17 +17,17 @@
package org.apache.shardingsphere.proxy.backend.exception;
-import
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.SyntaxSQLException;
import
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState;
+import
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.DistSQLException;
/**
- * Unsupported variable exception.
+ * Missing database name exception.
*/
-public final class UnsupportedVariableException extends SyntaxSQLException {
+public final class MissingDatabaseNameException extends DistSQLException {
- private static final long serialVersionUID = 1955281568807066737L;
+ private static final long serialVersionUID = -1248634756191801109L;
- public UnsupportedVariableException(final String variable) {
- super(XOpenSQLState.SYNTAX_ERROR, 10, "Can not support variable
`%s`.", variable);
+ public MissingDatabaseNameException() {
+ super(XOpenSQLState.CHECK_OPTION_VIOLATION, 8, "Missing required
property `databaseName`.");
}
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedVariableException.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedVariableException.java
index aefb749acfa..2daaa77e2b9 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedVariableException.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/exception/UnsupportedVariableException.java
@@ -28,6 +28,6 @@ public final class UnsupportedVariableException extends
SyntaxSQLException {
private static final long serialVersionUID = 1955281568807066737L;
public UnsupportedVariableException(final String variable) {
- super(XOpenSQLState.SYNTAX_ERROR, 10, "Can not support variable
`%s`.", variable);
+ super(XOpenSQLState.CHECK_OPTION_VIOLATION, 14, "Can not support
variable `%s`.", variable);
}
}
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 5d9352320c7..a662289c03a 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
@@ -50,6 +50,7 @@ import
org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDataSourceCo
import
org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDatabaseConfiguration;
import
org.apache.shardingsphere.proxy.backend.config.yaml.swapper.YamlProxyDataSourceConfigurationSwapper;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import
org.apache.shardingsphere.proxy.backend.exception.MissingDatabaseNameException;
import
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.common.checker.MaskRuleConfigurationImportChecker;
import
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.common.checker.ShadowRuleConfigurationImportChecker;
import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
@@ -89,9 +90,9 @@ public final class YamlDatabaseConfigurationImportExecutor {
public void importDatabaseConfiguration(final
YamlProxyDatabaseConfiguration yamlConfig) {
String databaseName = yamlConfig.getDatabaseName();
checkDatabase(databaseName);
- checkDataSource(yamlConfig.getDataSources());
+ checkDataSources(yamlConfig.getDataSources());
addDatabase(databaseName);
- addResources(databaseName, yamlConfig.getDataSources());
+ addDataSources(databaseName, yamlConfig.getDataSources());
try {
addRules(databaseName, yamlConfig.getRules());
} catch (final DistSQLException ex) {
@@ -101,14 +102,14 @@ public final class
YamlDatabaseConfigurationImportExecutor {
}
private void checkDatabase(final String databaseName) {
- ShardingSpherePreconditions.checkNotNull(databaseName, () -> new
UnsupportedSQLOperationException("Property `databaseName` in imported config is
required"));
+ ShardingSpherePreconditions.checkNotNull(databaseName,
MissingDatabaseNameException::new);
if (ProxyContext.getInstance().databaseExists(databaseName)) {
ShardingSpherePreconditions.checkState(ProxyContext.getInstance().getContextManager().getDatabase(databaseName).getResourceMetaData().getStorageUnits().isEmpty(),
() -> new
UnsupportedSQLOperationException(String.format("Database `%s` exists and is not
empty,overwrite is not supported", databaseName)));
}
}
- private void checkDataSource(final Map<String,
YamlProxyDataSourceConfiguration> dataSources) {
+ private void checkDataSources(final Map<String,
YamlProxyDataSourceConfiguration> dataSources) {
ShardingSpherePreconditions.checkState(!dataSources.isEmpty(), () ->
new MissingRequiredDataSourcesException("Data source configurations in imported
config is required"));
}
@@ -119,7 +120,7 @@ public final class YamlDatabaseConfigurationImportExecutor {
contextManager.getMetaDataContexts().getMetaData().addDatabase(databaseName,
protocolType, contextManager.getMetaDataContexts().getMetaData().getProps());
}
- private void addResources(final String databaseName, final Map<String,
YamlProxyDataSourceConfiguration> yamlDataSourceMap) {
+ private void addDataSources(final String databaseName, final Map<String,
YamlProxyDataSourceConfiguration> yamlDataSourceMap) {
Map<String, DataSourcePoolProperties> propsMap = new
LinkedHashMap<>(yamlDataSourceMap.size(), 1F);
for (Entry<String, YamlProxyDataSourceConfiguration> entry :
yamlDataSourceMap.entrySet()) {
DataSourceConfiguration dataSourceConfig =
dataSourceConfigSwapper.swap(entry.getValue());
@@ -143,43 +144,38 @@ public final class
YamlDatabaseConfigurationImportExecutor {
if (null == yamlRuleConfigs || yamlRuleConfigs.isEmpty()) {
return;
}
- Collection<RuleConfiguration> allRuleConfigs = new LinkedList<>();
+ Collection<RuleConfiguration> ruleConfigs = new LinkedList<>();
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
ShardingSphereDatabase database =
metaDataContexts.getMetaData().getDatabase(databaseName);
- swapToRuleConfigs(yamlRuleConfigs).values().forEach(each ->
addRules(allRuleConfigs, each, database));
-
metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(metaDataContexts.getMetaData().getDatabase(databaseName).getName(),
allRuleConfigs);
+ swapToRuleConfigs(yamlRuleConfigs).values().forEach(each ->
addRule(ruleConfigs, each, database));
+
metaDataContexts.getPersistService().getDatabaseRulePersistService().persist(metaDataContexts.getMetaData().getDatabase(databaseName).getName(),
ruleConfigs);
}
- private void addRules(final Collection<RuleConfiguration> allRuleConfigs,
final Collection<RuleConfiguration> ruleConfigs, final ShardingSphereDatabase
database) {
- RuleConfiguration ruleConfig =
ruleConfigs.stream().findFirst().orElse(null);
- if (null == ruleConfig) {
- return;
- }
+ private void addRule(final Collection<RuleConfiguration> ruleConfigs,
final RuleConfiguration ruleConfig, final ShardingSphereDatabase database) {
InstanceContext instanceContext =
ProxyContext.getInstance().getContextManager().getInstanceContext();
if (ruleConfig instanceof ShadowRuleConfiguration) {
- ruleConfigs.forEach(each ->
addShadowRuleConfiguration((ShadowRuleConfiguration) each, allRuleConfigs,
database));
+ addShadowRuleConfiguration((ShadowRuleConfiguration) ruleConfig,
ruleConfigs, database);
} else if (ruleConfig instanceof MaskRuleConfiguration) {
- ruleConfigs.forEach(each ->
addMaskRuleConfiguration((MaskRuleConfiguration) each, allRuleConfigs,
database));
+ addMaskRuleConfiguration((MaskRuleConfiguration) ruleConfig,
ruleConfigs, database);
} else if (ruleConfig instanceof BroadcastRuleConfiguration) {
- ruleConfigs.forEach(each ->
addBroadcastRuleConfiguration((BroadcastRuleConfiguration) each,
allRuleConfigs, database));
+ addBroadcastRuleConfiguration((BroadcastRuleConfiguration)
ruleConfig, ruleConfigs, database);
} else if (ruleConfig instanceof SingleRuleConfiguration) {
- ruleConfigs.forEach(each ->
addSingleRuleConfiguration((SingleRuleConfiguration) each, allRuleConfigs,
database));
+ addSingleRuleConfiguration((SingleRuleConfiguration) ruleConfig,
ruleConfigs, database);
} else {
- ImportRuleConfigurationProvider importRuleConfigurationProvider =
TypedSPILoader.getService(ImportRuleConfigurationProvider.class,
ruleConfig.getClass());
- importRuleConfigurationProvider.check(database, ruleConfig);
- allRuleConfigs.add(ruleConfig);
-
database.getRuleMetaData().getRules().add(importRuleConfigurationProvider.build(database,
ruleConfig, instanceContext));
+ ImportRuleConfigurationProvider provider =
TypedSPILoader.getService(ImportRuleConfigurationProvider.class,
ruleConfig.getClass());
+ provider.check(database, ruleConfig);
+ ruleConfigs.add(ruleConfig);
+ database.getRuleMetaData().getRules().add(provider.build(database,
ruleConfig, instanceContext));
}
}
@SuppressWarnings({"rawtypes", "unchecked"})
- private Map<Integer, Collection<RuleConfiguration>>
swapToRuleConfigs(final Collection<YamlRuleConfiguration> yamlRuleConfigs) {
- Map<Integer, Collection<RuleConfiguration>> result = new
TreeMap<>(Comparator.reverseOrder());
+ private Map<Integer, RuleConfiguration> swapToRuleConfigs(final
Collection<YamlRuleConfiguration> yamlRuleConfigs) {
+ Map<Integer, RuleConfiguration> result = new
TreeMap<>(Comparator.reverseOrder());
for (YamlRuleConfiguration each : yamlRuleConfigs) {
YamlRuleConfigurationSwapper swapper =
OrderedSPILoader.getServicesByClass(YamlRuleConfigurationSwapper.class,
Collections.singleton(each.getRuleConfigurationType()))
.get(each.getRuleConfigurationType());
- result.computeIfAbsent(swapper.getOrder(), key -> new
LinkedList<>());
- result.get(swapper.getOrder()).add((RuleConfiguration)
swapper.swapToObject(each));
+ result.put(swapper.getOrder(), (RuleConfiguration)
swapper.swapToObject(each));
}
return result;
}
@@ -190,24 +186,24 @@ public final class
YamlDatabaseConfigurationImportExecutor {
database.getRuleMetaData().getRules().add(new
ShadowRule(shadowRuleConfig));
}
- private void addMaskRuleConfiguration(final MaskRuleConfiguration
maskRuleConfig, final Collection<RuleConfiguration> allRuleConfigs, final
ShardingSphereDatabase database) {
- maskRuleConfigImportChecker.check(database, maskRuleConfig);
- allRuleConfigs.add(maskRuleConfig);
- database.getRuleMetaData().getRules().add(new
MaskRule(maskRuleConfig));
+ private void addMaskRuleConfiguration(final MaskRuleConfiguration
ruleConfig, final Collection<RuleConfiguration> ruleConfigs, final
ShardingSphereDatabase database) {
+ maskRuleConfigImportChecker.check(database, ruleConfig);
+ ruleConfigs.add(ruleConfig);
+ database.getRuleMetaData().getRules().add(new MaskRule(ruleConfig));
}
- private void addBroadcastRuleConfiguration(final
BroadcastRuleConfiguration broadcastRuleConfig, final
Collection<RuleConfiguration> allRuleConfigs, final ShardingSphereDatabase
database) {
- allRuleConfigs.add(broadcastRuleConfig);
- database.getRuleMetaData().getRules().add(new
BroadcastRule(broadcastRuleConfig, database.getName(),
+ private void addBroadcastRuleConfiguration(final
BroadcastRuleConfiguration ruleConfig, final Collection<RuleConfiguration>
ruleConfigs, final ShardingSphereDatabase database) {
+ ruleConfigs.add(ruleConfig);
+ database.getRuleMetaData().getRules().add(new
BroadcastRule(ruleConfig, database.getName(),
database.getResourceMetaData().getStorageUnits().entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new)),
database.getRuleMetaData().getRules()));
}
- private void addSingleRuleConfiguration(final SingleRuleConfiguration
singleRuleConfig, final Collection<RuleConfiguration> allRuleConfigs, final
ShardingSphereDatabase database) {
- allRuleConfigs.add(singleRuleConfig);
+ private void addSingleRuleConfiguration(final SingleRuleConfiguration
ruleConfig, final Collection<RuleConfiguration> ruleConfigs, final
ShardingSphereDatabase database) {
+ ruleConfigs.add(ruleConfig);
database.getRuleMetaData().getRules().add(
- new SingleRule(singleRuleConfig, database.getName(),
database.getProtocolType(),
+ new SingleRule(ruleConfig, database.getName(),
database.getProtocolType(),
database.getResourceMetaData().getStorageUnits().entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, entry
-> entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new)),
database.getRuleMetaData().getRules()));
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 4cb2bd7ee80..6858fbd4ec9 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
@@ -37,6 +37,7 @@ import
org.apache.shardingsphere.infra.spi.exception.ServiceProviderNotFoundExce
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import
org.apache.shardingsphere.proxy.backend.exception.MissingDatabaseNameException;
import
org.apache.shardingsphere.proxy.backend.util.YamlDatabaseConfigurationImportExecutor;
import org.apache.shardingsphere.test.fixture.jdbc.MockedDriver;
import org.apache.shardingsphere.test.mock.AutoMockExtension;
@@ -104,7 +105,7 @@ class ImportDatabaseConfigurationExecutorTest {
@Test
void assertImportEmptyDatabaseName() {
- assertThrows(UnsupportedSQLOperationException.class, () ->
assertExecute("sharding_db", "/conf/import/database-empty-database-name.yaml"));
+ assertThrows(MissingDatabaseNameException.class, () ->
assertExecute("sharding_db", "/conf/import/database-empty-database-name.yaml"));
}
@Test