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 672b8a8f241 Remove useless config item after drop rule item (#26811)
672b8a8f241 is described below
commit 672b8a8f241b799d34a8d892b1913411ce90cfe0
Author: ChenJiaHao <[email protected]>
AuthorDate: Fri Jul 7 18:23:02 2023 +0800
Remove useless config item after drop rule item (#26811)
* Remove useless config item after drop rule item
* Fix code style
* Fix UT
---
.../DropCompatibleEncryptRuleStatementUpdater.java | 23 ++++++++-
.../update/DropEncryptRuleStatementUpdater.java | 10 ++--
.../update/DropMaskRuleStatementUpdater.java | 21 ++++----
...DropReadwriteSplittingRuleStatementUpdater.java | 42 ++++++----------
...ReadwriteSplittingRuleStatementUpdaterTest.java | 22 +++++----
.../shadow/api/config/ShadowRuleConfiguration.java | 2 +-
.../update/DropShadowRuleStatementUpdater.java | 57 +++++++++-------------
7 files changed, 92 insertions(+), 85 deletions(-)
diff --git
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropCompatibleEncryptRuleStatementUpdater.java
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropCompatibleEncryptRuleStatementUpdater.java
index 4cbfe621518..c679f31fc19 100644
---
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropCompatibleEncryptRuleStatementUpdater.java
+++
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropCompatibleEncryptRuleStatementUpdater.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.encrypt.distsql.handler.update;
import
org.apache.shardingsphere.distsql.handler.update.RuleDefinitionDropUpdater;
import
org.apache.shardingsphere.encrypt.api.config.CompatibleEncryptRuleConfiguration;
+import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnItemRuleConfiguration;
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import
org.apache.shardingsphere.encrypt.distsql.parser.statement.DropEncryptRuleStatement;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
@@ -29,6 +30,8 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
/**
* Drop encrypt rule statement updater.
@@ -56,11 +59,29 @@ public final class
DropCompatibleEncryptRuleStatementUpdater implements RuleDefi
Map<String, AlgorithmConfiguration> toBeDroppedEncryptors = new
HashMap<>();
for (String each : sqlStatement.getTables()) {
toBeDroppedTables.add(new EncryptTableRuleConfiguration(each,
Collections.emptyList()));
+ dropRule(currentRuleConfig, each);
}
- // TODO find unused encryptor
+ findUnusedEncryptors(currentRuleConfig).forEach(each ->
toBeDroppedEncryptors.put(each, currentRuleConfig.getEncryptors().get(each)));
return new CompatibleEncryptRuleConfiguration(toBeDroppedTables,
toBeDroppedEncryptors);
}
+ private void dropRule(final CompatibleEncryptRuleConfiguration
currentRuleConfig, final String ruleName) {
+ Optional<EncryptTableRuleConfiguration> encryptTableRuleConfig =
currentRuleConfig.getTables().stream().filter(each ->
each.getName().equals(ruleName)).findAny();
+ encryptTableRuleConfig.ifPresent(optional ->
currentRuleConfig.getTables().remove(encryptTableRuleConfig.get()));
+ }
+
+ private static Collection<String> findUnusedEncryptors(final
CompatibleEncryptRuleConfiguration currentRuleConfig) {
+ Collection<String> inUsedEncryptors =
currentRuleConfig.getTables().stream().flatMap(each ->
each.getColumns().stream()).map(optional ->
optional.getCipher().getEncryptorName())
+ .collect(Collectors.toSet());
+
inUsedEncryptors.addAll(currentRuleConfig.getTables().stream().flatMap(each ->
each.getColumns().stream())
+ .map(optional ->
optional.getAssistedQuery().map(EncryptColumnItemRuleConfiguration::getEncryptorName).orElse(""))
+ .collect(Collectors.toSet()));
+
inUsedEncryptors.addAll(currentRuleConfig.getTables().stream().flatMap(each ->
each.getColumns().stream())
+ .map(optional ->
optional.getLikeQuery().map(EncryptColumnItemRuleConfiguration::getEncryptorName).orElse(""))
+ .collect(Collectors.toSet()));
+ return currentRuleConfig.getEncryptors().keySet().stream().filter(each
-> !inUsedEncryptors.contains(each)).collect(Collectors.toSet());
+ }
+
@Override
public boolean updateCurrentRuleConfiguration(final
DropEncryptRuleStatement sqlStatement, final CompatibleEncryptRuleConfiguration
currentRuleConfig) {
return delegate.updateCurrentRuleConfiguration(sqlStatement,
currentRuleConfig.convertToEncryptRuleConfiguration());
diff --git
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdater.java
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdater.java
index 22243af992c..2fb0ac68148 100644
---
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdater.java
+++
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdater.java
@@ -67,8 +67,9 @@ public final class DropEncryptRuleStatementUpdater implements
RuleDefinitionDrop
Map<String, AlgorithmConfiguration> toBeDroppedEncryptors = new
HashMap<>();
for (String each : sqlStatement.getTables()) {
toBeDroppedTables.add(new EncryptTableRuleConfiguration(each,
Collections.emptyList()));
+ dropRule(currentRuleConfig, each);
}
- // TODO find unused encryptor
+ findUnusedEncryptors(currentRuleConfig).forEach(each ->
toBeDroppedEncryptors.put(each, currentRuleConfig.getEncryptors().get(each)));
return new EncryptRuleConfiguration(toBeDroppedTables,
toBeDroppedEncryptors);
}
@@ -85,6 +86,10 @@ public final class DropEncryptRuleStatementUpdater
implements RuleDefinitionDrop
}
private void dropUnusedEncryptor(final EncryptRuleConfiguration
currentRuleConfig) {
+ findUnusedEncryptors(currentRuleConfig).forEach(each ->
currentRuleConfig.getEncryptors().remove(each));
+ }
+
+ private static Collection<String> findUnusedEncryptors(final
EncryptRuleConfiguration currentRuleConfig) {
Collection<String> inUsedEncryptors =
currentRuleConfig.getTables().stream().flatMap(each ->
each.getColumns().stream()).map(optional ->
optional.getCipher().getEncryptorName())
.collect(Collectors.toSet());
inUsedEncryptors.addAll(currentRuleConfig.getTables().stream().flatMap(each ->
each.getColumns().stream())
@@ -93,8 +98,7 @@ public final class DropEncryptRuleStatementUpdater implements
RuleDefinitionDrop
inUsedEncryptors.addAll(currentRuleConfig.getTables().stream().flatMap(each ->
each.getColumns().stream())
.map(optional ->
optional.getLikeQuery().map(EncryptColumnItemRuleConfiguration::getEncryptorName).orElse(""))
.collect(Collectors.toSet()));
- Collection<String> unusedEncryptors =
currentRuleConfig.getEncryptors().keySet().stream().filter(each ->
!inUsedEncryptors.contains(each)).collect(Collectors.toSet());
- unusedEncryptors.forEach(each ->
currentRuleConfig.getEncryptors().remove(each));
+ return currentRuleConfig.getEncryptors().keySet().stream().filter(each
-> !inUsedEncryptors.contains(each)).collect(Collectors.toSet());
}
@Override
diff --git
a/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleStatementUpdater.java
b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleStatementUpdater.java
index bf51369c941..4aba86e523d 100644
---
a/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleStatementUpdater.java
+++
b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleStatementUpdater.java
@@ -29,7 +29,7 @@ import
org.apache.shardingsphere.mask.distsql.parser.statement.DropMaskRuleState
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Optional;
@@ -64,18 +64,12 @@ public final class DropMaskRuleStatementUpdater implements
RuleDefinitionDropUpd
@Override
public MaskRuleConfiguration buildToBeDroppedRuleConfiguration(final
MaskRuleConfiguration currentRuleConfig, final DropMaskRuleStatement
sqlStatement) {
Collection<MaskTableRuleConfiguration> toBeDroppedTables = new
LinkedList<>();
+ Map<String, AlgorithmConfiguration> toBeDroppedAlgorithms = new
LinkedHashMap<>();
for (String each : sqlStatement.getTables()) {
toBeDroppedTables.add(new MaskTableRuleConfiguration(each,
Collections.emptyList()));
+ dropRule(currentRuleConfig, each);
}
- Collection<MaskColumnRuleConfiguration> columns =
currentRuleConfig.getTables().stream().filter(each ->
!sqlStatement.getTables().contains(each.getName()))
- .flatMap(each ->
each.getColumns().stream()).collect(Collectors.toList());
- Collection<String> inUsedAlgorithmNames =
columns.stream().map(MaskColumnRuleConfiguration::getMaskAlgorithm).collect(Collectors.toSet());
- Map<String, AlgorithmConfiguration> toBeDroppedAlgorithms = new
HashMap<>();
- for (String each : currentRuleConfig.getMaskAlgorithms().keySet()) {
- if (!inUsedAlgorithmNames.contains(each)) {
- toBeDroppedAlgorithms.put(each,
currentRuleConfig.getMaskAlgorithms().get(each));
- }
- }
+ findUnusedAlgorithms(currentRuleConfig).forEach(each ->
toBeDroppedAlgorithms.put(each,
currentRuleConfig.getMaskAlgorithms().get(each)));
return new MaskRuleConfiguration(toBeDroppedTables,
toBeDroppedAlgorithms);
}
@@ -92,10 +86,13 @@ public final class DropMaskRuleStatementUpdater implements
RuleDefinitionDropUpd
}
private void dropUnusedAlgorithm(final MaskRuleConfiguration
currentRuleConfig) {
+ findUnusedAlgorithms(currentRuleConfig).forEach(each ->
currentRuleConfig.getMaskAlgorithms().remove(each));
+ }
+
+ private static Collection<String> findUnusedAlgorithms(final
MaskRuleConfiguration currentRuleConfig) {
Collection<String> inUsedAlgorithms =
currentRuleConfig.getTables().stream().flatMap(each ->
each.getColumns().stream()).map(MaskColumnRuleConfiguration::getMaskAlgorithm)
.collect(Collectors.toSet());
- Collection<String> unusedAlgorithms =
currentRuleConfig.getMaskAlgorithms().keySet().stream().filter(each ->
!inUsedAlgorithms.contains(each)).collect(Collectors.toSet());
- unusedAlgorithms.forEach(each ->
currentRuleConfig.getMaskAlgorithms().remove(each));
+ return
currentRuleConfig.getMaskAlgorithms().keySet().stream().filter(each ->
!inUsedAlgorithms.contains(each)).collect(Collectors.toSet());
}
@Override
diff --git
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java
index c9245276362..2209f0c184e 100644
---
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java
+++
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdater.java
@@ -17,11 +17,11 @@
package org.apache.shardingsphere.readwritesplitting.distsql.handler.update;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
-import org.apache.shardingsphere.infra.datanode.DataNode;
import
org.apache.shardingsphere.distsql.handler.exception.rule.MissingRequiredRuleException;
import
org.apache.shardingsphere.distsql.handler.exception.rule.RuleInUsedException;
import
org.apache.shardingsphere.distsql.handler.update.RuleDefinitionDropUpdater;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+import org.apache.shardingsphere.infra.datanode.DataNode;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
@@ -38,9 +38,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
-import java.util.Objects;
import java.util.Optional;
-import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -99,20 +97,12 @@ public final class
DropReadwriteSplittingRuleStatementUpdater implements RuleDef
public ReadwriteSplittingRuleConfiguration
buildToBeDroppedRuleConfiguration(final ReadwriteSplittingRuleConfiguration
currentRuleConfig, final DropReadwriteSplittingRuleStatement sqlStatement) {
Collection<ReadwriteSplittingDataSourceRuleConfiguration>
toBeDroppedDataSources = new LinkedList<>();
Map<String, AlgorithmConfiguration> toBeDroppedLoadBalancers = new
HashMap<>();
- sqlStatement.getNames().forEach(each -> toBeDroppedDataSources.add(new
ReadwriteSplittingDataSourceRuleConfiguration(each, null, null, null)));
- compareAndGetToBeDroppedLoadBalancers(currentRuleConfig,
sqlStatement.getNames(), toBeDroppedLoadBalancers);
- return new ReadwriteSplittingRuleConfiguration(toBeDroppedDataSources,
toBeDroppedLoadBalancers);
- }
-
- private void compareAndGetToBeDroppedLoadBalancers(final
ReadwriteSplittingRuleConfiguration currentRuleConfig, final Collection<String>
toBeDroppedDataSourceNames,
- final Map<String,
AlgorithmConfiguration> toBeDroppedLoadBalancers) {
- Set<String> inUsedLoadBalancers =
currentRuleConfig.getDataSources().stream().filter(dataSource ->
!toBeDroppedDataSourceNames.contains(dataSource.getName()))
-
.map(ReadwriteSplittingDataSourceRuleConfiguration::getLoadBalancerName).collect(Collectors.toSet());
- for (String each : currentRuleConfig.getLoadBalancers().keySet()) {
- if (!inUsedLoadBalancers.contains(each)) {
- toBeDroppedLoadBalancers.put(each, null);
- }
+ for (String each : sqlStatement.getNames()) {
+ toBeDroppedDataSources.add(new
ReadwriteSplittingDataSourceRuleConfiguration(each, null, null, null));
+ dropRule(currentRuleConfig, each);
}
+ findUnusedLoadBalancers(currentRuleConfig).forEach(each ->
toBeDroppedLoadBalancers.put(each,
currentRuleConfig.getLoadBalancers().get(each)));
+ return new ReadwriteSplittingRuleConfiguration(toBeDroppedDataSources,
toBeDroppedLoadBalancers);
}
@Override
@@ -120,22 +110,22 @@ public final class
DropReadwriteSplittingRuleStatementUpdater implements RuleDef
for (String each : sqlStatement.getNames()) {
dropRule(currentRuleConfig, each);
}
+ dropUnusedLoadBalancer(currentRuleConfig);
return currentRuleConfig.getDataSources().isEmpty();
}
private void dropRule(final ReadwriteSplittingRuleConfiguration
currentRuleConfig, final String ruleName) {
Optional<ReadwriteSplittingDataSourceRuleConfiguration>
dataSourceRuleConfig = currentRuleConfig.getDataSources().stream().filter(each
-> ruleName.equals(each.getName())).findAny();
- dataSourceRuleConfig.ifPresent(optional -> {
- currentRuleConfig.getDataSources().remove(optional);
- if (null != optional.getLoadBalancerName() &&
isLoadBalancerNotInUse(currentRuleConfig, optional.getLoadBalancerName())) {
-
currentRuleConfig.getLoadBalancers().remove(optional.getLoadBalancerName());
- }
- });
+ dataSourceRuleConfig.ifPresent(optional ->
currentRuleConfig.getDataSources().remove(optional));
+ }
+
+ private void dropUnusedLoadBalancer(final
ReadwriteSplittingRuleConfiguration currentRuleConfig) {
+ findUnusedLoadBalancers(currentRuleConfig).forEach(each ->
currentRuleConfig.getLoadBalancers().remove(each));
}
- private boolean isLoadBalancerNotInUse(final
ReadwriteSplittingRuleConfiguration currentRuleConfig, final String
toBeDroppedLoadBalancerName) {
- return
currentRuleConfig.getDataSources().stream().map(ReadwriteSplittingDataSourceRuleConfiguration::getLoadBalancerName)
-
.filter(Objects::nonNull).noneMatch(toBeDroppedLoadBalancerName::equals);
+ private static Collection<String> findUnusedLoadBalancers(final
ReadwriteSplittingRuleConfiguration currentRuleConfig) {
+ Collection<String> inUsedAlgorithms =
currentRuleConfig.getDataSources().stream().map(ReadwriteSplittingDataSourceRuleConfiguration::getLoadBalancerName).collect(Collectors.toSet());
+ return
currentRuleConfig.getLoadBalancers().keySet().stream().filter(each ->
!inUsedAlgorithms.contains(each)).collect(Collectors.toSet());
}
@Override
diff --git
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
index 27b97b8551e..dd71799604b 100644
---
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
+++
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
@@ -36,6 +36,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Arrays;
import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Properties;
@@ -89,7 +90,7 @@ class DropReadwriteSplittingRuleStatementUpdaterTest {
void assertUpdateCurrentRuleConfiguration() {
ReadwriteSplittingRuleConfiguration ruleConfig =
createCurrentRuleConfiguration();
assertTrue(updater.updateCurrentRuleConfiguration(createSQLStatement(),
ruleConfig));
- assertThat(ruleConfig.getLoadBalancers().size(), is(1));
+ assertThat(ruleConfig.getLoadBalancers().size(), is(0));
}
@Test
@@ -103,7 +104,7 @@ class DropReadwriteSplittingRuleStatementUpdaterTest {
void assertUpdateCurrentRuleConfigurationWithoutLoadBalancerName() {
ReadwriteSplittingRuleConfiguration ruleConfig =
createCurrentRuleConfigurationWithoutLoadBalancerName();
assertTrue(updater.updateCurrentRuleConfiguration(createSQLStatement(),
ruleConfig));
- assertThat(ruleConfig.getLoadBalancers().size(), is(1));
+ assertThat(ruleConfig.getLoadBalancers().size(), is(0));
}
private DropReadwriteSplittingRuleStatement createSQLStatement() {
@@ -112,24 +113,27 @@ class DropReadwriteSplittingRuleStatementUpdaterTest {
private ReadwriteSplittingRuleConfiguration
createCurrentRuleConfiguration() {
ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds",
- "", Collections.emptyList(), "TEST");
- Map<String, AlgorithmConfiguration> loadBalancers =
Collections.singletonMap("readwrite_ds", new AlgorithmConfiguration("TEST", new
Properties()));
+ "", Collections.emptyList(), "readwrite_ds");
+ Map<String, AlgorithmConfiguration> loadBalancers = new
LinkedHashMap<>();
+ loadBalancers.put("readwrite_ds", new AlgorithmConfiguration("TEST",
new Properties()));
return new ReadwriteSplittingRuleConfiguration(new
LinkedList<>(Collections.singleton(dataSourceRuleConfig)), loadBalancers);
}
private ReadwriteSplittingRuleConfiguration
createCurrentRuleConfigurationWithoutLoadBalancerName() {
ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds",
- "", Collections.emptyList(), null);
- Map<String, AlgorithmConfiguration> loadBalancers =
Collections.singletonMap("readwrite_ds", new AlgorithmConfiguration("TEST", new
Properties()));
+ "", new LinkedList<>(), null);
+ Map<String, AlgorithmConfiguration> loadBalancers = new
LinkedHashMap<>();
+ loadBalancers.put("readwrite_ds", new AlgorithmConfiguration("TEST",
new Properties()));
return new ReadwriteSplittingRuleConfiguration(new
LinkedList<>(Collections.singleton(dataSourceRuleConfig)), loadBalancers);
}
private ReadwriteSplittingRuleConfiguration
createMultipleCurrentRuleConfigurations() {
ReadwriteSplittingDataSourceRuleConfiguration fooDataSourceRuleConfig
= new ReadwriteSplittingDataSourceRuleConfiguration("foo_ds",
- "", Collections.emptyList(), "TEST");
+ "", new LinkedList<>(), "TEST");
ReadwriteSplittingDataSourceRuleConfiguration barDataSourceRuleConfig
= new ReadwriteSplittingDataSourceRuleConfiguration("bar_ds",
- "", Collections.emptyList(), "TEST");
- Map<String, AlgorithmConfiguration> loadBalancers =
Collections.singletonMap("foo_ds", new AlgorithmConfiguration("TEST", new
Properties()));
+ "", new LinkedList<>(), "TEST");
+ Map<String, AlgorithmConfiguration> loadBalancers = new
LinkedHashMap<>();
+ loadBalancers.put("TEST", new AlgorithmConfiguration("TEST", new
Properties()));
return new ReadwriteSplittingRuleConfiguration(new
LinkedList<>(Arrays.asList(fooDataSourceRuleConfig, barDataSourceRuleConfig)),
loadBalancers);
}
}
diff --git
a/features/shadow/api/src/main/java/org/apache/shardingsphere/shadow/api/config/ShadowRuleConfiguration.java
b/features/shadow/api/src/main/java/org/apache/shardingsphere/shadow/api/config/ShadowRuleConfiguration.java
index 6ce7850a3db..d81b26d56a7 100644
---
a/features/shadow/api/src/main/java/org/apache/shardingsphere/shadow/api/config/ShadowRuleConfiguration.java
+++
b/features/shadow/api/src/main/java/org/apache/shardingsphere/shadow/api/config/ShadowRuleConfiguration.java
@@ -47,6 +47,6 @@ public final class ShadowRuleConfiguration implements
DatabaseRuleConfiguration,
@Override
public boolean isEmpty() {
- return dataSources.isEmpty() && tables.isEmpty() && null ==
defaultShadowAlgorithmName;
+ return dataSources.isEmpty() || tables.isEmpty();
}
}
diff --git
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleStatementUpdater.java
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleStatementUpdater.java
index 9ad4e3f5cac..5d115ffbe60 100644
---
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleStatementUpdater.java
+++
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleStatementUpdater.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.shadow.distsql.handler.update;
import
org.apache.shardingsphere.distsql.handler.exception.rule.MissingRequiredRuleException;
import
org.apache.shardingsphere.distsql.handler.update.RuleDefinitionDropUpdater;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
@@ -29,12 +28,12 @@ import
org.apache.shardingsphere.shadow.distsql.handler.checker.ShadowRuleStatem
import
org.apache.shardingsphere.shadow.distsql.parser.statement.DropShadowRuleStatement;
import java.util.Collection;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.stream.Collectors;
/**
@@ -73,38 +72,20 @@ public final class DropShadowRuleStatementUpdater
implements RuleDefinitionDropU
@Override
public ShadowRuleConfiguration buildToBeDroppedRuleConfiguration(final
ShadowRuleConfiguration currentRuleConfig, final DropShadowRuleStatement
sqlStatement) {
- Collection<ShadowDataSourceConfiguration> toBeDroppedDataSources = new
LinkedList<>();
- Map<String, ShadowTableConfiguration> toBeDroppedTables = new
LinkedHashMap<>();
- Map<String, AlgorithmConfiguration> toBeDroppedShadowAlgorithms = new
HashMap<>();
+ ShadowRuleConfiguration result = new ShadowRuleConfiguration();
for (String each : sqlStatement.getNames()) {
- compareAndGetToBeDroppedRule(currentRuleConfig,
toBeDroppedDataSources, toBeDroppedTables, toBeDroppedShadowAlgorithms, each,
sqlStatement.getNames());
+ result.getDataSources().add(new
ShadowDataSourceConfiguration(each, null, null));
+ dropRule(currentRuleConfig, each);
}
- ShadowRuleConfiguration result = new ShadowRuleConfiguration();
- result.setDataSources(toBeDroppedDataSources);
- result.setTables(toBeDroppedTables);
- result.setShadowAlgorithms(toBeDroppedShadowAlgorithms);
- return result;
- }
-
- private void compareAndGetToBeDroppedRule(final ShadowRuleConfiguration
currentRuleConfig, final Collection<ShadowDataSourceConfiguration>
toBeDroppedDataSources,
- final Map<String,
ShadowTableConfiguration> toBeDroppedTables, final Map<String,
AlgorithmConfiguration> toBeDroppedShadowAlgorithms,
- final String
toBeDroppedDataSourceName, final Collection<String> toBeDroppedDataSourceNames)
{
- toBeDroppedDataSources.add(new
ShadowDataSourceConfiguration(toBeDroppedDataSourceName, null, null));
+ currentRuleConfig.getTables().forEach((key, value) ->
value.getDataSourceNames().removeIf(sqlStatement.getNames()::contains));
for (Entry<String, ShadowTableConfiguration> each :
currentRuleConfig.getTables().entrySet()) {
- if
(toBeDroppedDataSourceNames.containsAll(each.getValue().getDataSourceNames())) {
- toBeDroppedTables.put(each.getKey(), each.getValue());
- }
- }
- Collection<String> inUsedAlgorithms =
currentRuleConfig.getTables().entrySet().stream().filter(each ->
!toBeDroppedTables.containsKey(each.getKey()))
- .flatMap(entry ->
entry.getValue().getShadowAlgorithmNames().stream()).collect(Collectors.toSet());
- if (null != currentRuleConfig.getDefaultShadowAlgorithmName()) {
-
inUsedAlgorithms.add(currentRuleConfig.getDefaultShadowAlgorithmName());
- }
- for (String each : currentRuleConfig.getShadowAlgorithms().keySet()) {
- if (!inUsedAlgorithms.contains(each)) {
- toBeDroppedShadowAlgorithms.put(each,
currentRuleConfig.getShadowAlgorithms().get(each));
+ if (each.getValue().getDataSourceNames().isEmpty()) {
+ result.getTables().put(each.getKey(), each.getValue());
}
}
+ currentRuleConfig.getTables().entrySet().removeIf(entry ->
entry.getValue().getDataSourceNames().isEmpty());
+ findUnusedAlgorithms(currentRuleConfig).forEach(each ->
result.getShadowAlgorithms().put(each,
currentRuleConfig.getShadowAlgorithms().get(each)));
+ return result;
}
@Override
@@ -115,7 +96,7 @@ public final class DropShadowRuleStatementUpdater implements
RuleDefinitionDropU
if
(!toBeDroppedDataSourceNames.containsAll(each.getValue().getDataSourceNames()))
{
List<String> currentDataSources = new
LinkedList<>(each.getValue().getDataSourceNames());
currentDataSources.removeAll(toBeDroppedDataSourceNames);
- tables.put(each.getKey(), new
ShadowTableConfiguration(currentDataSources, null));
+ tables.put(each.getKey(), new
ShadowTableConfiguration(currentDataSources,
each.getValue().getShadowAlgorithmNames()));
}
}
ShadowRuleConfiguration result = new ShadowRuleConfiguration();
@@ -125,20 +106,30 @@ public final class DropShadowRuleStatementUpdater
implements RuleDefinitionDropU
@Override
public boolean updateCurrentRuleConfiguration(final
DropShadowRuleStatement sqlStatement, final ShadowRuleConfiguration
currentRuleConfig) {
- currentRuleConfig.getDataSources().removeIf(each ->
sqlStatement.getNames().contains(each.getName()));
+ for (String each : sqlStatement.getNames()) {
+ dropRule(currentRuleConfig, each);
+ }
currentRuleConfig.getTables().forEach((key, value) ->
value.getDataSourceNames().removeIf(sqlStatement.getNames()::contains));
currentRuleConfig.getTables().entrySet().removeIf(entry ->
entry.getValue().getDataSourceNames().isEmpty());
dropUnusedAlgorithm(currentRuleConfig);
return currentRuleConfig.getDataSources().isEmpty() ||
currentRuleConfig.getTables().isEmpty();
}
+ private void dropRule(final ShadowRuleConfiguration currentRuleConfig,
final String ruleName) {
+ Optional<ShadowDataSourceConfiguration> dataSourceRuleConfig =
currentRuleConfig.getDataSources().stream().filter(each ->
ruleName.equals(each.getName())).findAny();
+ dataSourceRuleConfig.ifPresent(optional ->
currentRuleConfig.getDataSources().remove(optional));
+ }
+
private void dropUnusedAlgorithm(final ShadowRuleConfiguration
currentRuleConfig) {
+ findUnusedAlgorithms(currentRuleConfig).forEach(each ->
currentRuleConfig.getShadowAlgorithms().remove(each));
+ }
+
+ private static Collection<String> findUnusedAlgorithms(final
ShadowRuleConfiguration currentRuleConfig) {
Collection<String> inUsedAlgorithms =
currentRuleConfig.getTables().entrySet().stream().flatMap(entry ->
entry.getValue().getShadowAlgorithmNames().stream()).collect(Collectors.toSet());
if (null != currentRuleConfig.getDefaultShadowAlgorithmName()) {
inUsedAlgorithms.add(currentRuleConfig.getDefaultShadowAlgorithmName());
}
- Collection<String> unusedAlgorithms =
currentRuleConfig.getShadowAlgorithms().keySet().stream().filter(each ->
!inUsedAlgorithms.contains(each)).collect(Collectors.toSet());
- unusedAlgorithms.forEach(each ->
currentRuleConfig.getShadowAlgorithms().remove(each));
+ return
currentRuleConfig.getShadowAlgorithms().keySet().stream().filter(each ->
!inUsedAlgorithms.contains(each)).collect(Collectors.toSet());
}
@Override