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