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 2025/03/07 11:57:31 UTC
(shardingsphere) branch master updated: Refactor usage of ActiveVersionChecker (#34926)
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 <zh...@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