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 e73fb2ec756 Refactor usage of ActiveVersionChecker (#34926)
e73fb2ec756 is described below

commit e73fb2ec756a567f8450843d8eaedfa5dc7af416
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Fri Mar 7 19:57:26 2025 +0800

    Refactor usage of ActiveVersionChecker (#34926)
---
 .../manager/rule/DatabaseRuleItemManager.java      | 10 ++-------
 .../datasource/StorageUnitChangedHandler.java      |  8 ++-----
 .../database/metadata/TableChangedHandler.java     |  4 +---
 .../database/metadata/ViewChangedHandler.java      |  4 +---
 .../rule/RuleItemConfigurationChangedHandler.java  |  3 +--
 .../type/DatabaseMetaDataChangedListener.java      | 26 +++++++++++++++++-----
 .../database/metadata/TableChangedHandlerTest.java |  3 ---
 .../database/metadata/ViewChangedHandlerTest.java  |  3 ---
 ...medRuleItemConfigurationChangedHandlerTest.java |  9 ++++----
 ...queRuleItemConfigurationChangedHandlerTest.java |  9 ++++----
 .../StandaloneMetaDataManagerPersistService.java   |  7 ++++--
 ...tandaloneMetaDataManagerPersistServiceTest.java |  3 ++-
 12 files changed, 42 insertions(+), 47 deletions(-)

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 78864bb1081..28dd5f402fa 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
@@ -25,7 +25,6 @@ import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurati
 import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.manager.ActiveVersionChecker;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade;
 import 
org.apache.shardingsphere.mode.node.path.type.database.metadata.rule.DatabaseRuleNodePath;
 import org.apache.shardingsphere.mode.node.path.version.VersionNodePath;
@@ -51,18 +50,13 @@ public final class DatabaseRuleItemManager {
      * Alter rule item.
      *
      * @param databaseRuleNodePath database rule node path
-     * @param currentVersion current version
      * @throws SQLException SQL Exception
      */
     @SuppressWarnings({"rawtypes", "unchecked"})
-    public void alter(final DatabaseRuleNodePath databaseRuleNodePath, final 
int currentVersion) throws SQLException {
-        VersionNodePath versionNodePath = new 
VersionNodePath(databaseRuleNodePath);
-        if (!new 
ActiveVersionChecker(metaDataPersistFacade.getRepository()).checkSame(versionNodePath,
 currentVersion)) {
-            return;
-        }
+    public void alter(final DatabaseRuleNodePath databaseRuleNodePath) throws 
SQLException {
         RuleItemConfigurationChangedProcessor processor = 
TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class,
                 new RuleChangedItemType(databaseRuleNodePath.getRuleType(), 
databaseRuleNodePath.getDatabaseRuleItem().getType()));
-        String yamlContent = 
metaDataPersistFacade.getMetaDataVersionService().loadContent(versionNodePath);
+        String yamlContent = 
metaDataPersistFacade.getMetaDataVersionService().loadContent(new 
VersionNodePath(databaseRuleNodePath));
         String databaseName = databaseRuleNodePath.getDatabaseName();
         RuleConfiguration currentRuleConfig = 
processor.findRuleConfiguration(metaDataContexts.getMetaData().getDatabase(databaseName));
         String itemName = databaseRuleNodePath.getDatabaseRuleItem().getName();
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandler.java
index 65c3a5910ca..95d47ad3549 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/datasource/StorageUnitChangedHandler.java
@@ -54,14 +54,10 @@ public final class StorageUnitChangedHandler implements 
DatabaseLeafValueChanged
         String storageUnitName = NodePathSearcher.get(event.getKey(), 
StorageUnitNodePath.createStorageUnitSearchCriteria(databaseName));
         switch (event.getType()) {
             case ADDED:
-                if (activeVersionChecker.checkSame(event)) {
-                    handleRegistered(databaseName, storageUnitName);
-                }
+                handleRegistered(databaseName, storageUnitName);
                 break;
             case UPDATED:
-                if (activeVersionChecker.checkSame(event)) {
-                    handleAltered(databaseName, storageUnitName);
-                }
+                handleAltered(databaseName, storageUnitName);
                 break;
             case DELETED:
                 handleUnregistered(databaseName, storageUnitName);
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
index fa42251d69d..0445b0a9854 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
@@ -57,9 +57,7 @@ public final class TableChangedHandler implements 
DatabaseLeafValueChangedHandle
         switch (event.getType()) {
             case ADDED:
             case UPDATED:
-                if (activeVersionChecker.checkSame(event)) {
-                    handleCreatedOrAltered(databaseName, schemaName, 
tableName);
-                }
+                handleCreatedOrAltered(databaseName, schemaName, tableName);
                 break;
             case DELETED:
                 handleDropped(databaseName, schemaName, tableName);
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
index 7ef843ce9c0..b4a8c6f881f 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
@@ -58,9 +58,7 @@ public final class ViewChangedHandler implements 
DatabaseLeafValueChangedHandler
         switch (event.getType()) {
             case ADDED:
             case UPDATED:
-                if (activeVersionChecker.checkSame(event)) {
-                    handleCreatedOrAltered(databaseName, schemaName, viewName);
-                }
+                handleCreatedOrAltered(databaseName, schemaName, viewName);
                 break;
             case DELETED:
                 handleDropped(databaseName, schemaName, viewName);
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java
index 56dd8801257..d02fc566d11 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java
@@ -46,8 +46,7 @@ public abstract class RuleItemConfigurationChangedHandler 
implements DatabaseLea
         switch (event.getType()) {
             case ADDED:
             case UPDATED:
-                int version = Integer.parseInt(event.getValue());
-                
contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().alter(databaseRuleNodePath.get(),
 version);
+                
contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().alter(databaseRuleNodePath.get());
                 break;
             case DELETED:
                 
contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().drop(databaseRuleNodePath.get());
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
index f7322147c4f..5b431488b1d 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.mode.manager.cluster.dispatch.listener.type;
 import 
org.apache.shardingsphere.infra.exception.core.external.sql.type.wrapper.SQLWrapperException;
 import 
org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
 import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.DatabaseChangedHandler;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.DatabaseLeafValueChangedHandler;
@@ -31,6 +32,7 @@ import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.ViewChangedHandler;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.rule.type.NamedRuleItemConfigurationChangedHandler;
 import 
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.rule.type.UniqueRuleItemConfigurationChangedHandler;
+import org.apache.shardingsphere.mode.metadata.manager.ActiveVersionChecker;
 import 
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearchCriteria;
 import 
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher;
 import 
org.apache.shardingsphere.mode.node.path.type.database.metadata.schema.TableMetadataNodePath;
@@ -47,9 +49,12 @@ import java.util.Optional;
  */
 public final class DatabaseMetaDataChangedListener implements 
DataChangedEventListener {
     
+    private final ContextManager contextManager;
+    
     private final Collection<DatabaseChangedHandler> handlers;
     
     public DatabaseMetaDataChangedListener(final ContextManager 
contextManager) {
+        this.contextManager = contextManager;
         handlers = Arrays.asList(
                 new SchemaChangedHandler(contextManager),
                 new TableChangedHandler(contextManager),
@@ -68,14 +73,15 @@ public final class DatabaseMetaDataChangedListener 
implements DataChangedEventLi
         }
         OrderedServicesCache.clearCache();
         for (DatabaseChangedHandler each : handlers) {
-            if (isSubscribed(each, databaseName.get(), event)) {
-                try {
-                    each.handle(databaseName.get(), event);
-                } catch (final SQLException ex) {
-                    throw new SQLWrapperException(ex);
-                }
+            if (!isSubscribed(each, databaseName.get(), event)) {
+                continue;
+            }
+            if ((event.getType().equals(DataChangedEvent.Type.ADDED) || 
event.getType().equals(Type.UPDATED))
+                    && !new 
ActiveVersionChecker(contextManager.getPersistServiceFacade().getRepository()).checkSame(event))
 {
                 return;
             }
+            handle(each, databaseName.get(), event);
+            return;
         }
     }
     
@@ -88,4 +94,12 @@ public final class DatabaseMetaDataChangedListener 
implements DataChangedEventLi
         }
         return false;
     }
+    
+    private void handle(final DatabaseChangedHandler handler, final String 
databaseName, final DataChangedEvent event) {
+        try {
+            handler.handle(databaseName, event);
+        } catch (final SQLException ex) {
+            throw new SQLWrapperException(ex);
+        }
+    }
 }
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandlerTest.java
index 3c1869012a3..cfdce74851e 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandlerTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandlerTest.java
@@ -28,7 +28,6 @@ import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -48,7 +47,6 @@ class TableChangedHandlerTest {
     
     @Test
     void assertHandleTableCreated() {
-        
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
         ShardingSphereTable table = mock(ShardingSphereTable.class);
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load("foo_db",
 "foo_schema", "foo_tbl")).thenReturn(table);
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version",
 "0", Type.ADDED));
@@ -57,7 +55,6 @@ class TableChangedHandlerTest {
     
     @Test
     void assertHandleTableAltered() {
-        
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
         ShardingSphereTable table = mock(ShardingSphereTable.class);
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load("foo_db",
 "foo_schema", "foo_tbl")).thenReturn(table);
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version",
 "0", Type.UPDATED));
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandlerTest.java
index b2262b89324..e49b2588f43 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandlerTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandlerTest.java
@@ -28,7 +28,6 @@ import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -48,7 +47,6 @@ class ViewChangedHandlerTest {
     
     @Test
     void assertHandleViewCreated() {
-        
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
         ShardingSphereView view = mock(ShardingSphereView.class);
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load("foo_db",
 "foo_schema", "foo_view")).thenReturn(view);
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version",
 "0", Type.ADDED));
@@ -57,7 +55,6 @@ class ViewChangedHandlerTest {
     
     @Test
     void assertHandleViewAltered() {
-        
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
         ShardingSphereView view = mock(ShardingSphereView.class);
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load("foo_db",
 "foo_schema", "foo_view")).thenReturn(view);
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version",
 "0", Type.UPDATED));
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java
index 1ba9bd2f6c6..0603f4b1cf3 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java
@@ -33,7 +33,6 @@ import java.sql.SQLException;
 
 import static 
org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
@@ -53,14 +52,14 @@ class NamedRuleItemConfigurationChangedHandlerTest {
     @Test
     void assertHandleWithInvalidPath() throws SQLException {
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/rules/fixture", "0", Type.ADDED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).alter(any(), eq(0));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).alter(any());
         
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).drop(any());
     }
     
     @Test
     void assertHandleWithIgnoreType() throws SQLException {
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version",
 "0", Type.IGNORED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).alter(any(), eq(0));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).alter(any());
         
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).drop(any());
     }
     
@@ -68,14 +67,14 @@ class NamedRuleItemConfigurationChangedHandlerTest {
     void assertHandleWithAddItem() throws SQLException {
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version",
 "0", Type.ADDED));
         
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager())
-                .alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", 
new DatabaseRuleItem("named", "foo_rule_item"))), eq(0));
+                .alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", 
new DatabaseRuleItem("named", "foo_rule_item"))));
     }
     
     @Test
     void assertHandleWithAlterItem() throws SQLException {
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version",
 "0", Type.UPDATED));
         
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager())
-                .alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", 
new DatabaseRuleItem("named", "foo_rule_item"))), eq(0));
+                .alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture", 
new DatabaseRuleItem("named", "foo_rule_item"))));
     }
     
     @Test
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java
index e09b12dfd30..c239c7ff4ed 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java
@@ -33,7 +33,6 @@ import java.sql.SQLException;
 
 import static 
org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
@@ -53,27 +52,27 @@ class UniqueRuleItemConfigurationChangedHandlerTest {
     @Test
     void assertHandleWithInvalidPath() throws SQLException {
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/rules/fixture", "foo", Type.ADDED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).alter(any(), eq(0));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).alter(any());
         
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).drop(any());
     }
     
     @Test
     void assertHandleWithIgnoreType() throws SQLException {
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0", 
Type.IGNORED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).alter(any(), eq(0));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).alter(any());
         
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(), 
times(0)).drop(any());
     }
     
     @Test
     void assertHandleWithAddItem() throws SQLException {
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0", 
Type.ADDED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(deepEq(new
 DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique"))), 
eq(0));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(deepEq(new
 DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique"))));
     }
     
     @Test
     void assertHandleWithAlterItem() throws SQLException {
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0", 
Type.UPDATED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(deepEq(new
 DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique"))), 
eq(0));
+        
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(deepEq(new
 DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique"))));
     }
     
     @Test
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 92042754e1e..f8654f39eb0 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
@@ -31,11 +31,13 @@ import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedTy
 import 
org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.mode.metadata.changed.RuleItemChangedNodePathBuilder;
+import org.apache.shardingsphere.mode.metadata.manager.ActiveVersionChecker;
 import org.apache.shardingsphere.mode.metadata.manager.MetaDataContextManager;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade;
 import 
org.apache.shardingsphere.mode.metadata.persist.metadata.DatabaseMetaDataPersistFacade;
 import 
org.apache.shardingsphere.mode.metadata.refresher.metadata.util.TableRefreshUtils;
 import 
org.apache.shardingsphere.mode.node.path.type.database.metadata.rule.DatabaseRuleNodePath;
+import org.apache.shardingsphere.mode.node.path.version.VersionNodePath;
 import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
 import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
 import org.apache.shardingsphere.single.rule.SingleRule;
@@ -217,8 +219,9 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
         }
         for (MetaDataVersion each : 
metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), 
Collections.singleton(toBeAlteredRuleConfig))) {
             Optional<DatabaseRuleNodePath> databaseRuleNodePath = 
ruleItemChangedNodePathBuilder.build(database.getName(), each.getPath());
-            if (databaseRuleNodePath.isPresent()) {
-                
metaDataContextManager.getDatabaseRuleItemManager().alter(databaseRuleNodePath.get(),
 each.getActiveVersion());
+            if (databaseRuleNodePath.isPresent()
+                    && new 
ActiveVersionChecker(metaDataPersistFacade.getRepository()).checkSame(new 
VersionNodePath(databaseRuleNodePath.get()), each.getActiveVersion())) {
+                
metaDataContextManager.getDatabaseRuleItemManager().alter(databaseRuleNodePath.get());
             }
         }
         clearServiceCache();
diff --git 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
index 7f60972b6e4..313bcda412a 100644
--- 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
@@ -177,8 +177,9 @@ class StandaloneMetaDataManagerPersistServiceTest {
         RuleItemChangedNodePathBuilder ruleItemChangedNodePathBuilder = 
mock(RuleItemChangedNodePathBuilder.class);
         when(ruleItemChangedNodePathBuilder.build(eq("foo_db"), 
any())).thenReturn(Optional.of(databaseRuleNodePath));
         setRuleItemChangedBuildExecutor(ruleItemChangedNodePathBuilder);
+        
when(metaDataPersistFacade.getRepository().query("/metadata/active_version")).thenReturn("0");
         metaDataManagerPersistService.alterRuleConfiguration(database, 
ruleConfig);
-        
verify(metaDataContextManager.getDatabaseRuleItemManager()).alter(databaseRuleNodePath,
 0);
+        
verify(metaDataContextManager.getDatabaseRuleItemManager()).alter(databaseRuleNodePath);
     }
     
     @Test

Reply via email to