You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2024/05/23 04:40:40 UTC

(shardingsphere) branch master updated: Refactor alterRuleConfiguration and removeRuleConfigurationItem interface in StandaloneModeContextManager (#31347)

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 <zh...@apache.org>
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);