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

menghaoran 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 5edd5e92cfe Refactor StandaloneMetaDataManagerPersistService (#35034)
5edd5e92cfe is described below

commit 5edd5e92cfe89a48e6251bd9f2a8319d60a13178
Author: Haoran Meng <menghaora...@gmail.com>
AuthorDate: Wed Mar 19 10:23:59 2025 +0800

    Refactor StandaloneMetaDataManagerPersistService (#35034)
---
 .../changed/BroadcastRuleChangedProcessor.java     | 61 ++++++++++++++++++++++
 ....spi.rule.RuleItemConfigurationChangedProcessor |  2 +
 .../manager/rule/DatabaseRuleItemManager.java      |  4 +-
 .../StandaloneMetaDataManagerPersistService.java   |  5 ++
 4 files changed, 70 insertions(+), 2 deletions(-)

diff --git 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastRuleChangedProcessor.java
 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastRuleChangedProcessor.java
new file mode 100644
index 00000000000..f537173a647
--- /dev/null
+++ 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/changed/BroadcastRuleChangedProcessor.java
@@ -0,0 +1,61 @@
+/*
+ * 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.broadcast.rule.changed;
+
+import org.apache.shardingsphere.broadcast.config.BroadcastRuleConfiguration;
+import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
+import org.apache.shardingsphere.mode.spi.rule.RuleChangedItemType;
+import 
org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+
+/**
+ * Broadcast rule changed processor.
+ */
+public class BroadcastRuleChangedProcessor implements 
RuleItemConfigurationChangedProcessor<BroadcastRuleConfiguration, 
BroadcastRuleConfiguration> {
+    
+    @SuppressWarnings("unchecked")
+    @Override
+    public BroadcastRuleConfiguration swapRuleItemConfiguration(final String 
itemName, final String yamlContent) {
+        return new 
BroadcastRuleConfiguration(YamlEngine.unmarshal(yamlContent, 
LinkedHashSet.class));
+    }
+    
+    @Override
+    public BroadcastRuleConfiguration findRuleConfiguration(final 
ShardingSphereDatabase database) {
+        return 
database.getRuleMetaData().findSingleRule(BroadcastRule.class).map(BroadcastRule::getConfiguration).orElseGet(()
 -> new BroadcastRuleConfiguration(new LinkedList<>()));
+    }
+    
+    @Override
+    public void changeRuleItemConfiguration(final String itemName, final 
BroadcastRuleConfiguration currentRuleConfig, final BroadcastRuleConfiguration 
toBeChangedItemConfig) {
+        currentRuleConfig.getTables().clear();
+        
currentRuleConfig.getTables().addAll(toBeChangedItemConfig.getTables());
+    }
+    
+    @Override
+    public void dropRuleItemConfiguration(final String itemName, final 
BroadcastRuleConfiguration currentRuleConfig) {
+        currentRuleConfig.getTables().clear();
+    }
+    
+    @Override
+    public RuleChangedItemType getType() {
+        return new RuleChangedItemType("broadcast", null);
+    }
+}
diff --git 
a/features/broadcast/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor
 
b/features/broadcast/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor
index a7fd34fd9d1..2fc8d83ab14 100644
--- 
a/features/broadcast/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor
+++ 
b/features/broadcast/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor
@@ -16,3 +16,5 @@
 #
 
 org.apache.shardingsphere.broadcast.rule.changed.BroadcastTableChangedProcessor
+org.apache.shardingsphere.broadcast.rule.changed.BroadcastRuleChangedProcessor
+
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
index 7fd97cf58e3..0766dcbb97e 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
@@ -77,9 +77,9 @@ public final class DatabaseRuleItemManager {
         String databaseName = 
databaseRuleNodePath.getDatabase().getDatabaseName();
         
Preconditions.checkState(metaDataContexts.getMetaData().containsDatabase(databaseName),
 "No database '%s' exists.", databaseName);
         RuleItemConfigurationChangedProcessor processor = 
TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class,
-                new RuleChangedItemType(databaseRuleNodePath.getRuleType(), 
databaseRuleNodePath.getDatabaseRuleItem().getType()));
+                new RuleChangedItemType(databaseRuleNodePath.getRuleType(), 
null == databaseRuleNodePath.getDatabaseRuleItem() ? null : 
databaseRuleNodePath.getDatabaseRuleItem().getType()));
         RuleConfiguration currentRuleConfig = 
processor.findRuleConfiguration(metaDataContexts.getMetaData().getDatabase(databaseName));
-        String itemName = databaseRuleNodePath.getDatabaseRuleItem().getName();
+        String itemName = null == databaseRuleNodePath.getDatabaseRuleItem() ? 
null : databaseRuleNodePath.getDatabaseRuleItem().getName();
         synchronized (this) {
             processor.dropRuleItemConfiguration(itemName, currentRuleConfig);
             databaseRuleConfigManager.refresh(databaseName, currentRuleConfig,
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
index b124282bcac..eb8fe6efe4e 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
@@ -280,6 +280,11 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     @Override
     public void removeRuleConfiguration(final ShardingSphereDatabase database, 
final String ruleType) {
         
metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), 
ruleType);
+        try {
+            metaDataContextManager.getDatabaseRuleItemManager().drop(new 
DatabaseRuleNodePath(database.getName(), ruleType, null));
+        } catch (final SQLException ex) {
+            throw new SQLWrapperException(ex);
+        }
         OrderedServicesCache.clearCache();
     }
     

Reply via email to