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();


Reply via email to