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

zhaojinchao 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 1540d6cecd1 Fix new metadata persist and renew (#26568)
1540d6cecd1 is described below

commit 1540d6cecd1a241ada3e2ee0012e8cb17d6af952
Author: ChenJiaHao <[email protected]>
AuthorDate: Mon Jun 26 11:48:14 2023 +0800

    Fix new metadata persist and renew (#26568)
---
 .../persist/service/version/MetaDataVersionPersistService.java |  3 +++
 .../org/apache/shardingsphere/mode/manager/ContextManager.java | 10 ++--------
 2 files changed, 5 insertions(+), 8 deletions(-)

diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
index 18e85df5ea1..6967d0337fa 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/version/MetaDataVersionPersistService.java
@@ -39,6 +39,9 @@ public final class MetaDataVersionPersistService implements 
MetaDataVersionBased
     @Override
     public void switchActiveVersion(final Collection<MetaDataVersion> 
metaDataVersions) {
         for (MetaDataVersion each : metaDataVersions) {
+            if 
(each.getNextActiveVersion().equals(each.getCurrentActiveVersion())) {
+                continue;
+            }
             repository.persist(each.getKey() + "/" + ACTIVE_VERSION, 
each.getNextActiveVersion());
             repository.delete(String.join("/", each.getKey(), VERSIONS, 
each.getCurrentActiveVersion()));
         }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 15fb11d1629..378e3a6e81f 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -350,11 +350,11 @@ public final class ContextManager implements 
AutoCloseable {
      * @param databaseName database name
      * @param ruleConfig rule configurations
      */
-    @SuppressWarnings("rawtypes")
     public synchronized void alterRuleConfiguration(final String databaseName, 
final RuleConfiguration ruleConfig) {
         try {
             ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
             Collection<ShardingSphereRule> rules = new 
LinkedList<>(database.getRuleMetaData().getRules());
+            rules.removeIf(each -> 
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
             rules.addAll(DatabaseRulesBuilder.build(databaseName, 
database.getResourceMetaData().getDataSources(), 
database.getRuleMetaData().getRules(),
                     ruleConfig, instanceContext));
             database.getRuleMetaData().getRules().clear();
@@ -565,7 +565,6 @@ public final class ContextManager implements AutoCloseable {
      * @param ruleName rule name
      * @param ruleConfig global rule configuration
      */
-    @SuppressWarnings("rawtypes")
     public synchronized void alterGlobalRuleConfiguration(final String 
ruleName, final RuleConfiguration ruleConfig) {
         Collection<ShardingSphereRule> rules = 
removeSingleGlobalRule(ruleName);
         
rules.addAll(GlobalRulesBuilder.buildRules(Collections.singletonList(ruleConfig),
 metaDataContexts.get().getMetaData().getDatabases(),
@@ -596,12 +595,7 @@ public final class ContextManager implements AutoCloseable 
{
     
     private Collection<ShardingSphereRule> removeSingleGlobalRule(final String 
ruleSimpleName) {
         Collection<ShardingSphereRule> result = new 
LinkedList<>(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules());
-        for (ShardingSphereRule each : result) {
-            if (!each.getType().equals(ruleSimpleName)) {
-                continue;
-            }
-            result.remove(each);
-        }
+        result.removeIf(each -> each.getType().equals(ruleSimpleName));
         return result;
     }
     

Reply via email to