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 b00ba5df799 Improve clear unused algorithms when alter database rule
(#29935)
b00ba5df799 is described below
commit b00ba5df799cdd812c701cc1876d8cec67dff01c
Author: ChenJiaHao <[email protected]>
AuthorDate: Wed Jan 31 17:45:27 2024 +0800
Improve clear unused algorithms when alter database rule (#29935)
* Improve clear unused algorithms when alter database rule
* Fix IT
---
.../handler/update/AlterEncryptRuleExecutor.java | 14 +++++-
.../handler/update/DropEncryptRuleExecutor.java | 17 +-------
.../handler/update/UnusedAlgorithmFinder.java | 51 ++++++++++++++++++++++
.../AlterDefaultShadowAlgorithmExecutor.java | 5 +++
.../handler/update/AlterShadowRuleExecutor.java | 7 +++
.../handler/update/DropShadowRuleExecutor.java | 14 ++----
.../handler/update/UnusedAlgorithmFinder.java | 46 +++++++++++++++++++
.../AlterDefaultShardingStrategyExecutor.java | 7 +++
.../AlterShardingTableReferenceRuleExecutor.java | 5 +++
.../update/AlterShardingTableRuleExecutor.java | 3 ++
.../DropDefaultShardingStrategyExecutor.java | 4 +-
.../update/DropShardingTableRuleExecutor.java | 36 +++------------
.../handler/update/UnusedAlgorithmFinder.java | 45 +++++++++++++++++--
.../distsql/update/UnusedAlgorithmFinderTest.java | 2 +-
.../spi/database/DatabaseRuleAlterExecutor.java | 4 +-
.../handler/update/UnloadSingleTableExecutor.java | 5 +++
16 files changed, 198 insertions(+), 67 deletions(-)
diff --git
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleExecutor.java
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleExecutor.java
index f6740c7e7f8..400306acfb8 100644
---
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleExecutor.java
+++
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleExecutor.java
@@ -32,12 +32,16 @@ import
org.apache.shardingsphere.encrypt.distsql.segment.EncryptRuleSegment;
import
org.apache.shardingsphere.encrypt.distsql.statement.AlterEncryptRuleStatement;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
-import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.LinkedHashSet;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -104,6 +108,14 @@ public final class AlterEncryptRuleExecutor implements
DatabaseRuleAlterExecutor
return EncryptRuleStatementConverter.convert(sqlStatement.getRules());
}
+ @Override
+ public EncryptRuleConfiguration buildToBeDroppedRuleConfiguration(final
EncryptRuleConfiguration toBeAlteredRuleConfig) {
+ Map<String, AlgorithmConfiguration> toBeDroppedEncryptors = new
HashMap<>();
+ Collection<String> unusedEncryptor =
UnusedAlgorithmFinder.findUnusedEncryptor((EncryptRuleConfiguration)
rule.getConfiguration());
+ unusedEncryptor.forEach(each -> toBeDroppedEncryptors.put(each,
((EncryptRuleConfiguration)
rule.getConfiguration()).getEncryptors().get(each)));
+ return new EncryptRuleConfiguration(Collections.emptyList(),
toBeDroppedEncryptors);
+ }
+
@Override
public void updateCurrentRuleConfiguration(final EncryptRuleConfiguration
currentRuleConfig, final EncryptRuleConfiguration toBeAlteredRuleConfig) {
dropRuleConfiguration(currentRuleConfig, toBeAlteredRuleConfig);
diff --git
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutor.java
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutor.java
index 8e6af31fb60..b0aedec3419 100644
---
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutor.java
+++
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutor.java
@@ -22,7 +22,6 @@ import
org.apache.shardingsphere.distsql.handler.exception.rule.MissingRequiredR
import
org.apache.shardingsphere.distsql.handler.required.DistSQLExecutorCurrentRuleRequired;
import
org.apache.shardingsphere.distsql.handler.type.rdl.rule.spi.database.DatabaseRuleDropExecutor;
import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
-import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnItemRuleConfiguration;
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import
org.apache.shardingsphere.encrypt.distsql.statement.DropEncryptRuleStatement;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
@@ -77,7 +76,7 @@ public final class DropEncryptRuleExecutor implements
DatabaseRuleDropExecutor<D
toBeDroppedTables.add(new EncryptTableRuleConfiguration(each,
Collections.emptyList()));
dropRule(currentRuleConfig, each);
}
- findUnusedEncryptors(currentRuleConfig).forEach(each ->
toBeDroppedEncryptors.put(each, currentRuleConfig.getEncryptors().get(each)));
+
UnusedAlgorithmFinder.findUnusedEncryptor(currentRuleConfig).forEach(each ->
toBeDroppedEncryptors.put(each, currentRuleConfig.getEncryptors().get(each)));
return new EncryptRuleConfiguration(toBeDroppedTables,
toBeDroppedEncryptors);
}
@@ -94,19 +93,7 @@ public final class DropEncryptRuleExecutor implements
DatabaseRuleDropExecutor<D
}
private void dropUnusedEncryptor(final EncryptRuleConfiguration
currentRuleConfig) {
- findUnusedEncryptors(currentRuleConfig).forEach(each ->
currentRuleConfig.getEncryptors().remove(each));
- }
-
- private 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())
- .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());
+
UnusedAlgorithmFinder.findUnusedEncryptor(currentRuleConfig).forEach(each ->
currentRuleConfig.getEncryptors().remove(each));
}
@Override
diff --git
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/UnusedAlgorithmFinder.java
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/UnusedAlgorithmFinder.java
new file mode 100644
index 00000000000..2a44057688d
--- /dev/null
+++
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/UnusedAlgorithmFinder.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.encrypt.distsql.handler.update;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
+import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnItemRuleConfiguration;
+
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+/**
+ * Unused algorithm finder.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class UnusedAlgorithmFinder {
+
+ /**
+ * Find unused encryptor.
+ *
+ * @param ruleConfig encrypt rule configuration
+ * @return found unused encryptor
+ */
+ public static Collection<String> findUnusedEncryptor(final
EncryptRuleConfiguration ruleConfig) {
+ Collection<String> inUsedEncryptors =
ruleConfig.getTables().stream().flatMap(each ->
each.getColumns().stream()).map(optional ->
optional.getCipher().getEncryptorName())
+ .collect(Collectors.toSet());
+ inUsedEncryptors.addAll(ruleConfig.getTables().stream().flatMap(each
-> each.getColumns().stream())
+ .map(optional ->
optional.getAssistedQuery().map(EncryptColumnItemRuleConfiguration::getEncryptorName).orElse(""))
+ .collect(Collectors.toSet()));
+ inUsedEncryptors.addAll(ruleConfig.getTables().stream().flatMap(each
-> each.getColumns().stream())
+ .map(optional ->
optional.getLikeQuery().map(EncryptColumnItemRuleConfiguration::getEncryptorName).orElse(""))
+ .collect(Collectors.toSet()));
+ return ruleConfig.getEncryptors().keySet().stream().filter(each ->
!inUsedEncryptors.contains(each)).collect(Collectors.toSet());
+ }
+}
diff --git
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterDefaultShadowAlgorithmExecutor.java
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterDefaultShadowAlgorithmExecutor.java
index 5ee2d0fb711..68b9f869ed4 100644
---
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterDefaultShadowAlgorithmExecutor.java
+++
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterDefaultShadowAlgorithmExecutor.java
@@ -83,6 +83,11 @@ public final class AlterDefaultShadowAlgorithmExecutor
implements DatabaseRuleAl
new
AlgorithmConfiguration(sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getName(),
sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getProps()));
}
+ @Override
+ public ShadowRuleConfiguration buildToBeDroppedRuleConfiguration(final
ShadowRuleConfiguration toBeAlteredRuleConfig) {
+ return null;
+ }
+
@Override
public void updateCurrentRuleConfiguration(final ShadowRuleConfiguration
currentRuleConfig, final ShadowRuleConfiguration toBeAlteredRuleConfig) {
currentRuleConfig.getShadowAlgorithms().putAll(toBeAlteredRuleConfig.getShadowAlgorithms());
diff --git
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleExecutor.java
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleExecutor.java
index 181b301bdda..091d1d250e6 100644
---
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleExecutor.java
+++
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/AlterShadowRuleExecutor.java
@@ -81,6 +81,13 @@ public final class AlterShadowRuleExecutor implements
DatabaseRuleAlterExecutor<
return ShadowRuleStatementConverter.convert(sqlStatement.getRules());
}
+ @Override
+ public ShadowRuleConfiguration buildToBeDroppedRuleConfiguration(final
ShadowRuleConfiguration toBeAlteredRuleConfig) {
+ ShadowRuleConfiguration result = new ShadowRuleConfiguration();
+
UnusedAlgorithmFinder.findUnusedShadowAlgorithm(rule.getConfiguration()).forEach(each
-> result.getShadowAlgorithms().put(each,
rule.getConfiguration().getShadowAlgorithms().get(each)));
+ return result;
+ }
+
@Override
public void updateCurrentRuleConfiguration(final ShadowRuleConfiguration
currentRuleConfig, final ShadowRuleConfiguration toBeAlteredRuleConfig) {
updateDataSources(currentRuleConfig,
toBeAlteredRuleConfig.getDataSources());
diff --git
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleExecutor.java
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleExecutor.java
index bbf18d149ad..3384b6d0f99 100644
---
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleExecutor.java
+++
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleExecutor.java
@@ -83,8 +83,8 @@ public final class DropShadowRuleExecutor implements
DatabaseRuleDropExecutor<Dr
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)));
+ currentRuleConfig.getTables().entrySet().removeIf(each ->
each.getValue().getDataSourceNames().isEmpty());
+
UnusedAlgorithmFinder.findUnusedShadowAlgorithm(currentRuleConfig).forEach(each
-> result.getShadowAlgorithms().put(each,
currentRuleConfig.getShadowAlgorithms().get(each)));
return result;
}
@@ -121,15 +121,7 @@ public final class DropShadowRuleExecutor implements
DatabaseRuleDropExecutor<Dr
}
private void dropUnusedAlgorithm(final ShadowRuleConfiguration
currentRuleConfig) {
- findUnusedAlgorithms(currentRuleConfig).forEach(each ->
currentRuleConfig.getShadowAlgorithms().remove(each));
- }
-
- private 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());
- }
- return
currentRuleConfig.getShadowAlgorithms().keySet().stream().filter(each ->
!inUsedAlgorithms.contains(each)).collect(Collectors.toSet());
+
UnusedAlgorithmFinder.findUnusedShadowAlgorithm(currentRuleConfig).forEach(each
-> currentRuleConfig.getShadowAlgorithms().remove(each));
}
@Override
diff --git
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/UnusedAlgorithmFinder.java
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/UnusedAlgorithmFinder.java
new file mode 100644
index 00000000000..e2ea2b43a69
--- /dev/null
+++
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/UnusedAlgorithmFinder.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.shadow.distsql.handler.update;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
+
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+/**
+ * Unused algorithm finder.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class UnusedAlgorithmFinder {
+
+ /**
+ * Find unused shadow algorithms.
+ *
+ * @param ruleConfig shadow rule configuration
+ * @return found unused shadow algorithms
+ */
+ public static Collection<String> findUnusedShadowAlgorithm(final
ShadowRuleConfiguration ruleConfig) {
+ Collection<String> inUsedAlgorithms =
ruleConfig.getTables().entrySet().stream().flatMap(entry ->
entry.getValue().getShadowAlgorithmNames().stream()).collect(Collectors.toSet());
+ if (null != ruleConfig.getDefaultShadowAlgorithmName()) {
+ inUsedAlgorithms.add(ruleConfig.getDefaultShadowAlgorithmName());
+ }
+ return ruleConfig.getShadowAlgorithms().keySet().stream().filter(each
-> !inUsedAlgorithms.contains(each)).collect(Collectors.toSet());
+ }
+}
diff --git
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterDefaultShardingStrategyExecutor.java
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterDefaultShardingStrategyExecutor.java
index d0c09abfd59..18fd3d48815 100644
---
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterDefaultShardingStrategyExecutor.java
+++
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterDefaultShardingStrategyExecutor.java
@@ -121,6 +121,13 @@ public final class AlterDefaultShardingStrategyExecutor
implements DatabaseRuleA
}
}
+ @Override
+ public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final
ShardingRuleConfiguration toBeAlteredRuleConfig) {
+ ShardingRuleConfiguration result = new ShardingRuleConfiguration();
+
UnusedAlgorithmFinder.findUnusedShardingAlgorithm(rule.getConfiguration()).forEach(each
-> result.getShardingAlgorithms().put(each,
rule.getConfiguration().getShardingAlgorithms().get(each)));
+ return result;
+ }
+
@Override
public void updateCurrentRuleConfiguration(final ShardingRuleConfiguration
currentRuleConfig, final ShardingRuleConfiguration toBeAlteredRuleConfig) {
if (!toBeAlteredRuleConfig.getShardingAlgorithms().isEmpty()) {
diff --git
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableReferenceRuleExecutor.java
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableReferenceRuleExecutor.java
index 55e6437489f..228302f6166 100644
---
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableReferenceRuleExecutor.java
+++
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableReferenceRuleExecutor.java
@@ -120,6 +120,11 @@ public final class AlterShardingTableReferenceRuleExecutor
implements DatabaseRu
return result;
}
+ @Override
+ public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final
ShardingRuleConfiguration toBeAlteredRuleConfig) {
+ return null;
+ }
+
@Override
public void updateCurrentRuleConfiguration(final ShardingRuleConfiguration
currentRuleConfig, final ShardingRuleConfiguration toBeAlteredRuleConfig) {
Collection<String> toBeAlteredRuleNames =
getToBeAlteredRuleNames(toBeAlteredRuleConfig);
diff --git
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableRuleExecutor.java
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableRuleExecutor.java
index de595ce9a0e..bb67aecde54 100644
---
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableRuleExecutor.java
+++
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableRuleExecutor.java
@@ -68,6 +68,9 @@ public final class AlterShardingTableRuleExecutor implements
DatabaseRuleAlterEx
result.getTables().add(each);
}
}
+
UnusedAlgorithmFinder.findUnusedShardingAlgorithm(rule.getConfiguration()).forEach(each
-> result.getShardingAlgorithms().put(each,
rule.getConfiguration().getShardingAlgorithms().get(each)));
+
UnusedAlgorithmFinder.findUnusedKeyGenerator(rule.getConfiguration()).forEach(each
-> result.getKeyGenerators().put(each,
rule.getConfiguration().getKeyGenerators().get(each)));
+
UnusedAlgorithmFinder.findUnusedAuditor(rule.getConfiguration()).forEach(each
-> result.getAuditors().put(each,
rule.getConfiguration().getAuditors().get(each)));
return result;
}
diff --git
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultShardingStrategyExecutor.java
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultShardingStrategyExecutor.java
index 5ec4141626e..57f4dfa2fa9 100644
---
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultShardingStrategyExecutor.java
+++
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultShardingStrategyExecutor.java
@@ -80,7 +80,7 @@ public final class DropDefaultShardingStrategyExecutor
implements DatabaseRuleDr
result.setDefaultDatabaseShardingStrategy(currentRuleConfig.getDefaultDatabaseShardingStrategy());
currentRuleConfig.setDefaultDatabaseShardingStrategy(null);
}
- UnusedAlgorithmFinder.find(currentRuleConfig).forEach(each ->
result.getShardingAlgorithms().put(each,
currentRuleConfig.getShardingAlgorithms().get(each)));
+
UnusedAlgorithmFinder.findUnusedShardingAlgorithm(currentRuleConfig).forEach(each
-> result.getShardingAlgorithms().put(each,
currentRuleConfig.getShardingAlgorithms().get(each)));
return result;
}
@@ -91,7 +91,7 @@ public final class DropDefaultShardingStrategyExecutor
implements DatabaseRuleDr
} else {
currentRuleConfig.setDefaultDatabaseShardingStrategy(null);
}
- UnusedAlgorithmFinder.find(currentRuleConfig).forEach(each ->
currentRuleConfig.getShardingAlgorithms().remove(each));
+
UnusedAlgorithmFinder.findUnusedShardingAlgorithm(currentRuleConfig).forEach(each
-> currentRuleConfig.getShardingAlgorithms().remove(each));
return currentRuleConfig.isEmpty();
}
diff --git
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleExecutor.java
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleExecutor.java
index 19935a11cd3..c864438ced9 100644
---
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleExecutor.java
+++
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleExecutor.java
@@ -28,14 +28,12 @@ import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
-import
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
import
org.apache.shardingsphere.sharding.distsql.statement.DropShardingTableRuleStatement;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.LinkedList;
-import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -113,9 +111,9 @@ public final class DropShardingTableRuleExecutor implements
DatabaseRuleDropExec
result.getAutoTables().addAll(currentRuleConfig.getAutoTables().stream().filter(table
-> each.equalsIgnoreCase(table.getLogicTable())).collect(Collectors.toList()));
dropShardingTable(currentRuleConfig, each);
}
- UnusedAlgorithmFinder.find(currentRuleConfig).forEach(each ->
result.getShardingAlgorithms().put(each,
currentRuleConfig.getShardingAlgorithms().get(each)));
- findUnusedKeyGenerator(currentRuleConfig).forEach(each ->
result.getKeyGenerators().put(each,
currentRuleConfig.getKeyGenerators().get(each)));
- findUnusedAuditors(currentRuleConfig).forEach(each ->
result.getAuditors().put(each, currentRuleConfig.getAuditors().get(each)));
+
UnusedAlgorithmFinder.findUnusedShardingAlgorithm(currentRuleConfig).forEach(each
-> result.getShardingAlgorithms().put(each,
currentRuleConfig.getShardingAlgorithms().get(each)));
+
UnusedAlgorithmFinder.findUnusedKeyGenerator(currentRuleConfig).forEach(each ->
result.getKeyGenerators().put(each,
currentRuleConfig.getKeyGenerators().get(each)));
+
UnusedAlgorithmFinder.findUnusedAuditor(currentRuleConfig).forEach(each ->
result.getAuditors().put(each, currentRuleConfig.getAuditors().get(each)));
return result;
}
@@ -123,7 +121,7 @@ public final class DropShardingTableRuleExecutor implements
DatabaseRuleDropExec
public boolean updateCurrentRuleConfiguration(final
DropShardingTableRuleStatement sqlStatement, final ShardingRuleConfiguration
currentRuleConfig) {
Collection<String> toBeDroppedShardingTableNames =
getToBeDroppedShardingTableNames(sqlStatement);
toBeDroppedShardingTableNames.forEach(each ->
dropShardingTable(currentRuleConfig, each));
- UnusedAlgorithmFinder.find(currentRuleConfig).forEach(each ->
currentRuleConfig.getShardingAlgorithms().remove(each));
+
UnusedAlgorithmFinder.findUnusedShardingAlgorithm(currentRuleConfig).forEach(each
-> currentRuleConfig.getShardingAlgorithms().remove(each));
dropUnusedKeyGenerator(currentRuleConfig);
dropUnusedAuditor(currentRuleConfig);
return currentRuleConfig.isEmpty();
@@ -135,33 +133,11 @@ public final class DropShardingTableRuleExecutor
implements DatabaseRuleDropExec
}
private void dropUnusedKeyGenerator(final ShardingRuleConfiguration
currentRuleConfig) {
- findUnusedKeyGenerator(currentRuleConfig).forEach(each ->
currentRuleConfig.getKeyGenerators().remove(each));
- }
-
- private Collection<String> findUnusedKeyGenerator(final
ShardingRuleConfiguration currentRuleConfig) {
- Collection<String> inUsedKeyGenerators =
currentRuleConfig.getTables().stream().map(ShardingTableRuleConfiguration::getKeyGenerateStrategy).filter(Objects::nonNull)
-
.map(KeyGenerateStrategyConfiguration::getKeyGeneratorName).collect(Collectors.toSet());
-
inUsedKeyGenerators.addAll(currentRuleConfig.getAutoTables().stream().map(ShardingAutoTableRuleConfiguration::getKeyGenerateStrategy).filter(Objects::nonNull)
-
.map(KeyGenerateStrategyConfiguration::getKeyGeneratorName).collect(Collectors.toSet()));
- if (null != currentRuleConfig.getDefaultKeyGenerateStrategy()) {
-
inUsedKeyGenerators.add(currentRuleConfig.getDefaultKeyGenerateStrategy().getKeyGeneratorName());
- }
- return
currentRuleConfig.getKeyGenerators().keySet().stream().filter(each ->
!inUsedKeyGenerators.contains(each)).collect(Collectors.toSet());
+
UnusedAlgorithmFinder.findUnusedKeyGenerator(currentRuleConfig).forEach(each ->
currentRuleConfig.getKeyGenerators().remove(each));
}
private void dropUnusedAuditor(final ShardingRuleConfiguration
currentRuleConfig) {
- findUnusedAuditors(currentRuleConfig).forEach(each ->
currentRuleConfig.getAuditors().remove(each));
- }
-
- private Collection<String> findUnusedAuditors(final
ShardingRuleConfiguration currentRuleConfig) {
- Collection<String> inUsedAuditors =
currentRuleConfig.getTables().stream().map(ShardingTableRuleConfiguration::getAuditStrategy).filter(Objects::nonNull)
- .flatMap(each ->
each.getAuditorNames().stream()).collect(Collectors.toSet());
-
inUsedAuditors.addAll(currentRuleConfig.getAutoTables().stream().map(ShardingAutoTableRuleConfiguration::getAuditStrategy).filter(Objects::nonNull)
- .flatMap(each ->
each.getAuditorNames().stream()).collect(Collectors.toSet()));
- if (null != currentRuleConfig.getDefaultAuditStrategy()) {
-
inUsedAuditors.addAll(currentRuleConfig.getDefaultAuditStrategy().getAuditorNames());
- }
- return currentRuleConfig.getAuditors().keySet().stream().filter(each
-> !inUsedAuditors.contains(each)).collect(Collectors.toSet());
+
UnusedAlgorithmFinder.findUnusedAuditor(currentRuleConfig).forEach(each ->
currentRuleConfig.getAuditors().remove(each));
}
@Override
diff --git
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/UnusedAlgorithmFinder.java
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/UnusedAlgorithmFinder.java
index 0812bd3f6e6..ebdf895ec05 100644
---
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/UnusedAlgorithmFinder.java
+++
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/UnusedAlgorithmFinder.java
@@ -20,6 +20,9 @@ package
org.apache.shardingsphere.sharding.distsql.handler.update;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
+import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
+import
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
import
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
import java.util.Arrays;
@@ -34,12 +37,12 @@ import java.util.stream.Collectors;
public final class UnusedAlgorithmFinder {
/**
- * Find unused algorithms.
- *
+ * Find unused sharding algorithms.
+ *
* @param ruleConfig sharding rule configuration
- * @return found unused algorithms
+ * @return found unused sharding algorithms
*/
- public static Collection<String> find(final ShardingRuleConfiguration
ruleConfig) {
+ public static Collection<String> findUnusedShardingAlgorithm(final
ShardingRuleConfiguration ruleConfig) {
Collection<String> inUsedAlgorithms =
ruleConfig.getTables().stream().map(each ->
Arrays.asList(each.getTableShardingStrategy(),
each.getDatabaseShardingStrategy()))
.flatMap(Collection::stream).filter(Objects::nonNull).map(ShardingStrategyConfiguration::getShardingAlgorithmName).collect(Collectors.toSet());
inUsedAlgorithms.addAll(ruleConfig.getTables().stream().filter(each ->
null != each.getDatabaseShardingStrategy())
@@ -56,4 +59,38 @@ public final class UnusedAlgorithmFinder {
}
return
ruleConfig.getShardingAlgorithms().keySet().stream().filter(each ->
!inUsedAlgorithms.contains(each)).collect(Collectors.toSet());
}
+
+ /**
+ * Find unused key generators.
+ *
+ * @param ruleConfig sharding rule configuration
+ * @return found unused key generators
+ */
+ public static Collection<String> findUnusedKeyGenerator(final
ShardingRuleConfiguration ruleConfig) {
+ Collection<String> inUsedKeyGenerators =
ruleConfig.getTables().stream().map(ShardingTableRuleConfiguration::getKeyGenerateStrategy).filter(Objects::nonNull)
+
.map(KeyGenerateStrategyConfiguration::getKeyGeneratorName).collect(Collectors.toSet());
+
inUsedKeyGenerators.addAll(ruleConfig.getAutoTables().stream().map(ShardingAutoTableRuleConfiguration::getKeyGenerateStrategy).filter(Objects::nonNull)
+
.map(KeyGenerateStrategyConfiguration::getKeyGeneratorName).collect(Collectors.toSet()));
+ if (null != ruleConfig.getDefaultKeyGenerateStrategy()) {
+
inUsedKeyGenerators.add(ruleConfig.getDefaultKeyGenerateStrategy().getKeyGeneratorName());
+ }
+ return ruleConfig.getKeyGenerators().keySet().stream().filter(each ->
!inUsedKeyGenerators.contains(each)).collect(Collectors.toSet());
+ }
+
+ /**
+ * Find unused auditors.
+ *
+ * @param ruleConfig sharding rule configuration
+ * @return found unused auditors
+ */
+ public static Collection<String> findUnusedAuditor(final
ShardingRuleConfiguration ruleConfig) {
+ Collection<String> inUsedAuditors =
ruleConfig.getTables().stream().map(ShardingTableRuleConfiguration::getAuditStrategy).filter(Objects::nonNull)
+ .flatMap(each ->
each.getAuditorNames().stream()).collect(Collectors.toSet());
+
inUsedAuditors.addAll(ruleConfig.getAutoTables().stream().map(ShardingAutoTableRuleConfiguration::getAuditStrategy).filter(Objects::nonNull)
+ .flatMap(each ->
each.getAuditorNames().stream()).collect(Collectors.toSet()));
+ if (null != ruleConfig.getDefaultAuditStrategy()) {
+
inUsedAuditors.addAll(ruleConfig.getDefaultAuditStrategy().getAuditorNames());
+ }
+ return ruleConfig.getAuditors().keySet().stream().filter(each ->
!inUsedAuditors.contains(each)).collect(Collectors.toSet());
+ }
}
diff --git
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/UnusedAlgorithmFinderTest.java
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/UnusedAlgorithmFinderTest.java
index 06d79cd8d7b..48341039e3b 100644
---
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/UnusedAlgorithmFinderTest.java
+++
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/UnusedAlgorithmFinderTest.java
@@ -54,7 +54,7 @@ class UnusedAlgorithmFinderTest {
ruleConfig.getShardingAlgorithms().putAll(getAlgorithms());
ruleConfig.setDefaultDatabaseShardingStrategy(new
StandardShardingStrategyConfiguration("order_id",
USED_DATABASE_SHARDING_DEFAULT_ALGORITHM));
ruleConfig.setDefaultTableShardingStrategy(new
StandardShardingStrategyConfiguration("order_id",
USED_TABLE_SHARDING_DEFAULT_ALGORITHM));
- Collection<String> actual = UnusedAlgorithmFinder.find(ruleConfig);
+ Collection<String> actual =
UnusedAlgorithmFinder.findUnusedShardingAlgorithm(ruleConfig);
assertNotNull(actual);
assertThat(actual.size(), is(1));
assertTrue(actual.contains(UNUSED_ALGORITHM));
diff --git
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/database/DatabaseRuleAlterExecutor.java
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/database/DatabaseRuleAlterExecutor.java
index 2e1abfecc9f..bdd65534b1c 100644
---
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/database/DatabaseRuleAlterExecutor.java
+++
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/database/DatabaseRuleAlterExecutor.java
@@ -45,9 +45,7 @@ public interface DatabaseRuleAlterExecutor<T extends
SQLStatement, R extends Sha
* @param toBeAlteredRuleConfig new rule configuration to be renewed
* @return to be dropped rule configuration
*/
- default C buildToBeDroppedRuleConfiguration(final C toBeAlteredRuleConfig)
{
- return null;
- }
+ C buildToBeDroppedRuleConfiguration(C toBeAlteredRuleConfig);
/**
* Update current rule configuration.
diff --git
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/UnloadSingleTableExecutor.java
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/UnloadSingleTableExecutor.java
index 08c4b7c59bc..9cff24f6836 100644
---
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/UnloadSingleTableExecutor.java
+++
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/UnloadSingleTableExecutor.java
@@ -99,6 +99,11 @@ public final class UnloadSingleTableExecutor implements
DatabaseRuleAlterExecuto
return result;
}
+ @Override
+ public SingleRuleConfiguration buildToBeDroppedRuleConfiguration(final
SingleRuleConfiguration toBeAlteredRuleConfig) {
+ return null;
+ }
+
@Override
public void updateCurrentRuleConfiguration(final SingleRuleConfiguration
currentRuleConfig, final SingleRuleConfiguration toBeAlteredRuleConfig) {
currentRuleConfig.getTables().clear();