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 2023/06/26 03:48:20 UTC

[shardingsphere] branch master updated: Fix new metadata persist and renew (#26568)

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 <Pa...@163.com>
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;
     }