This is an automated email from the ASF dual-hosted git repository.

zhangliang 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 eca90be4dd1 Refactor alterRuleConfiguration and 
removeRuleConfigurationItem interface in StandaloneModeContextManager (#31347)
eca90be4dd1 is described below

commit eca90be4dd105484af687051a942a429ed15b86c
Author: zhaojinchao <[email protected]>
AuthorDate: Thu May 23 12:40:34 2024 +0800

    Refactor alterRuleConfiguration and removeRuleConfigurationItem interface 
in StandaloneModeContextManager (#31347)
    
    * Refactor alterRuleConfiguration and removeRuleConfigurationItem interface 
in StandaloneModeContextManager
    
    * Fix checkstyle
    
    * Fix checkstyle
    
    * Fix checkstyle
---
 .../metadata/builder/RuleConfigurationEventBuilder.java     |  3 ++-
 .../manager/standalone/StandaloneModeContextManager.java    | 13 ++++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/builder/RuleConfigurationEventBuilder.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/builder/RuleConfigurationEventBuilder.java
index 0b9f2e6ef13..758c5b8460f 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/builder/RuleConfigurationEventBuilder.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/builder/RuleConfigurationEventBuilder.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.mode.path.rule.item.UniqueRuleItemNodePath;
 import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
 import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
 import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
 import org.apache.shardingsphere.mode.event.NamedRuleItemChangedEventCreator;
 import org.apache.shardingsphere.mode.event.UniqueRuleItemChangedEventCreator;
 import org.apache.shardingsphere.mode.spi.RuleNodePathProvider;
@@ -54,7 +55,7 @@ public final class RuleConfigurationEventBuilder {
     }
     
     private Optional<GovernanceEvent> build(final RuleNodePath ruleNodePath, 
final String databaseName, final DataChangedEvent event) {
-        if (!ruleNodePath.getRoot().isValidatedPath(event.getKey()) || 
Strings.isNullOrEmpty(event.getValue())) {
+        if (!ruleNodePath.getRoot().isValidatedPath(event.getKey()) || 
Type.DELETED != event.getType() && Strings.isNullOrEmpty(event.getValue())) {
             return Optional.empty();
         }
         for (Entry<String, NamedRuleItemNodePath> entry : 
ruleNodePath.getNamedItems().entrySet()) {
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
index 2f08536cab2..716cd34548e 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
@@ -289,12 +289,23 @@ public final class StandaloneModeContextManager 
implements ModeContextManager, C
     @Override
     public void removeRuleConfigurationItem(final String databaseName, final 
RuleConfiguration toBeRemovedRuleConfig) {
         if (null != toBeRemovedRuleConfig) {
-            sendDatabaseRuleChangedEvent(databaseName,
+            sendDatabaseRuleDeletedEvent(databaseName,
                     
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().deleteConfigurations(databaseName,
 Collections.singleton(toBeRemovedRuleConfig)));
             clearServiceCache();
         }
     }
     
+    private void sendDatabaseRuleDeletedEvent(final String databaseName, final 
Collection<MetaDataVersion> metaDataVersions) {
+        for (MetaDataVersion each : metaDataVersions) {
+            sendDatabaseRuleDeletedEvent(databaseName, each);
+        }
+    }
+    
+    private void sendDatabaseRuleDeletedEvent(final String databaseName, final 
MetaDataVersion metaDataVersion) {
+        ruleConfigurationEventBuilder.build(databaseName, new 
DataChangedEvent(metaDataVersion.getActiveVersionNodePath(), "", Type.DELETED))
+                .ifPresent(optional -> 
contextManager.getComputeNodeInstanceContext().getEventBusContext().post(optional));
+    }
+    
     @Override
     public void removeRuleConfiguration(final String databaseName, final 
String ruleName) {
         
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().delete(databaseName,
 ruleName);

Reply via email to