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