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 de3ddee659f Refactor DatabaseRulePersistService (#34615)
de3ddee659f is described below

commit de3ddee659ff823b3de3b1e73b99d63946ed2c93
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sun Feb 9 00:57:19 2025 +0800

    Refactor DatabaseRulePersistService (#34615)
    
    * Refactor DatabaseRulePersistService
    
    * Refactor DatabaseRulePersistService
    
    * Refactor DatabaseRulePersistService
---
 .../database/DatabaseRulePersistService.java       | 23 ++++++++--------------
 .../database/DatabaseRulePersistServiceTest.java   |  3 +--
 .../version/MetaDataVersionPersistServiceTest.java | 14 ++++++++++---
 .../ClusterMetaDataManagerPersistService.java      |  7 ++-----
 .../ClusterMetaDataManagerPersistServiceTest.java  |  2 +-
 .../StandaloneMetaDataManagerPersistService.java   |  7 ++-----
 ...tandaloneMetaDataManagerPersistServiceTest.java |  6 ++----
 7 files changed, 27 insertions(+), 35 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
index 39dfc9c043e..e7a4dfa7009 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
@@ -17,18 +17,18 @@
 
 package org.apache.shardingsphere.mode.metadata.persist.config.database;
 
-import com.google.common.base.Strings;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
-import 
org.apache.shardingsphere.mode.node.path.metadata.DatabaseRuleMetaDataNodePath;
 import 
org.apache.shardingsphere.mode.metadata.persist.config.RepositoryTuplePersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.version.MetaDataVersionPersistService;
-import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
+import 
org.apache.shardingsphere.mode.node.path.metadata.DatabaseRuleMetaDataNodePath;
+import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 import org.apache.shardingsphere.mode.node.tuple.RepositoryTuple;
 import 
org.apache.shardingsphere.mode.node.tuple.YamlRepositoryTupleSwapperEngine;
 import 
org.apache.shardingsphere.mode.node.tuple.annotation.RepositoryTupleEntity;
+import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -90,22 +90,15 @@ public final class DatabaseRulePersistService {
     private Collection<MetaDataVersion> persistDataNodes(final String 
databaseName, final String ruleName, final Collection<RepositoryTuple> 
repositoryTuples) {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (RepositoryTuple each : repositoryTuples) {
-            int nextVersion = 
metaDataVersionPersistService.getNextVersion(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName,
 ruleName, each.getKey()).getVersionsPath());
-            
repository.persist(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName,
 ruleName, each.getKey()).getVersionPath(nextVersion), each.getValue());
-            if (null == getActiveVersion(databaseName, ruleName, 
each.getKey())) {
-                
repository.persist(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName,
 ruleName, each.getKey()).getActiveVersionPath(),
-                        String.valueOf(MetaDataVersion.INIT_VERSION));
-            }
-            result.add(new 
MetaDataVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName, 
ruleName, each.getKey()), getActiveVersion(databaseName, ruleName, 
each.getKey()), nextVersion));
+            VersionNodePathGenerator versionNodePathGenerator = 
DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName, 
ruleName, each.getKey());
+            int nextVersion = 
metaDataVersionPersistService.getNextVersion(versionNodePathGenerator.getVersionsPath());
+            
repository.persist(versionNodePathGenerator.getVersionPath(nextVersion), 
each.getValue());
+            
metaDataVersionPersistService.switchActiveVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName,
 ruleName, each.getKey()), nextVersion);
+            result.add(new 
MetaDataVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName, 
ruleName, each.getKey()), Math.max(MetaDataVersion.INIT_VERSION, nextVersion - 
1), nextVersion));
         }
         return result;
     }
     
-    private Integer getActiveVersion(final String databaseName, final String 
ruleName, final String key) {
-        String value = 
repository.query(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName,
 ruleName, key).getActiveVersionPath());
-        return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value);
-    }
-    
     /**
      * Delete configurations.
      *
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java
index 9d11693b3a2..415c8b59326 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java
@@ -66,13 +66,12 @@ class DatabaseRulePersistServiceTest {
     void assertPersistWithoutActiveVersion() {
         Collection<MetaDataVersion> actual = persistService.persist("foo_db", 
Arrays.asList(new MetaDataRuleConfigurationFixture("test"), new 
NoTupleRuleConfigurationFixture("test")));
         assertThat(actual.size(), is(1));
-        assertNull(actual.iterator().next().getCurrentActiveVersion());
+        assertThat(actual.iterator().next().getCurrentActiveVersion(), is(0));
         assertThat(actual.iterator().next().getNextActiveVersion(), is(0));
     }
     
     @Test
     void assertPersistWithActiveVersion() {
-        
when(repository.query("/metadata/foo_db/rules/fixture/fixture/active_version")).thenReturn("10");
         
when(repository.getChildrenKeys("/metadata/foo_db/rules/fixture/fixture/versions")).thenReturn(Collections.singletonList("10"));
         Collection<MetaDataVersion> actual = persistService.persist("foo_db", 
Collections.singleton(new MetaDataRuleConfigurationFixture("test")));
         assertThat(actual.size(), is(1));
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java
index bd162f7af00..c4c76ffb425 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.mode.metadata.persist.version;
 
-import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -30,6 +29,8 @@ import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -47,9 +48,16 @@ class MetaDataVersionPersistServiceTest {
     }
     
     @Test
-    void assertSwitchActiveVersion() {
+    void assertSwitchActiveVersionWithCreate() {
+        persistService.switchActiveVersion("foo_db", 0);
+        verify(repository).persist("foo_db/active_version", "0");
+        verify(repository, times(0)).delete(any());
+    }
+    
+    @Test
+    void assertSwitchActiveVersionWithAlter() {
         
when(repository.getChildrenKeys("foo_db/versions")).thenReturn(Arrays.asList("1",
 "0"));
-        persistService.switchActiveVersion(Arrays.asList(new 
MetaDataVersion("foo_db", 0, 1), new MetaDataVersion("bar_db", 2, 2)));
+        persistService.switchActiveVersion("foo_db", 1);
         verify(repository).persist("foo_db/active_version", "1");
         verify(repository).delete("foo_db/versions/0");
     }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
index 746353e52e9..7167a273182 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
@@ -25,7 +25,6 @@ import 
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
-import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import 
org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.database.ClusterDatabaseListenerCoordinatorType;
 import 
org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.database.ClusterDatabaseListenerPersistCoordinator;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
@@ -171,8 +170,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     @Override
     public void alterSingleRuleConfiguration(final ShardingSphereDatabase 
database, final RuleMetaData ruleMetaData) {
         SingleRuleConfiguration singleRuleConfig = 
ruleMetaData.getSingleRule(SingleRule.class).getConfiguration();
-        Collection<MetaDataVersion> metaDataVersions = 
metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), 
Collections.singleton(singleRuleConfig));
-        
metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(metaDataVersions);
+        
metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), 
Collections.singleton(singleRuleConfig));
     }
     
     @Override
@@ -181,8 +179,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
             return;
         }
         MetaDataContexts originalMetaDataContexts = new 
MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), 
metaDataContextManager.getMetaDataContexts().getStatistics());
-        Collection<MetaDataVersion> metaDataVersions = 
metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), 
Collections.singleton(toBeAlteredRuleConfig));
-        
metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(metaDataVersions);
+        
metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), 
Collections.singleton(toBeAlteredRuleConfig));
         afterRuleConfigurationAltered(database.getName(), 
originalMetaDataContexts);
     }
     
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
index 242359075f3..c23b7e7d5c7 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
@@ -135,7 +135,7 @@ class ClusterMetaDataManagerPersistServiceTest {
         when(metaDataPersistFacade.getDatabaseRuleService().persist("foo_db", 
Collections.singleton(singleRuleConfig))).thenReturn(Collections.emptyList());
         metaDataManagerPersistService.alterSingleRuleConfiguration(
                 new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), 
Collections.emptyList()), new RuleMetaData(Collections.singleton(singleRule)));
-        
verify(metaDataPersistFacade.getMetaDataVersionService()).switchActiveVersion(Collections.emptyList());
+        
verify(metaDataPersistFacade.getDatabaseRuleService()).persist("foo_db", 
Collections.singleton(singleRuleConfig));
     }
     
     @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 74a5ead6edc..62fc471b63d 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
@@ -194,8 +194,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     @Override
     public void alterSingleRuleConfiguration(final ShardingSphereDatabase 
database, final RuleMetaData ruleMetaData) throws SQLException {
         SingleRuleConfiguration singleRuleConfig = 
ruleMetaData.getSingleRule(SingleRule.class).getConfiguration();
-        Collection<MetaDataVersion> metaDataVersions = 
metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), 
Collections.singleton(singleRuleConfig));
-        
metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(metaDataVersions);
+        
metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), 
Collections.singleton(singleRuleConfig));
         
metaDataContextManager.getDatabaseRuleConfigurationManager().alter(database.getName(),
 singleRuleConfig);
         clearServiceCache();
     }
@@ -205,9 +204,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
         if (null == toBeAlteredRuleConfig) {
             return;
         }
-        Collection<MetaDataVersion> metaDataVersions = 
metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), 
Collections.singleton(toBeAlteredRuleConfig));
-        
metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(metaDataVersions);
-        for (MetaDataVersion each : metaDataVersions) {
+        for (MetaDataVersion each : 
metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), 
Collections.singleton(toBeAlteredRuleConfig))) {
             Optional<AlterRuleItem> alterRuleItem = 
ruleItemChangedBuilder.build(database.getName(), each.getPath(), 
each.getCurrentActiveVersion(), new RuleItemAlteredBuildExecutor());
             if (alterRuleItem.isPresent()) {
                 
metaDataContextManager.getDatabaseRuleItemManager().alter(alterRuleItem.get());
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 ec433eea0b4..5b6654098be 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
@@ -155,7 +155,6 @@ class StandaloneMetaDataManagerPersistServiceTest {
         when(singleRule.getConfiguration()).thenReturn(singleRuleConfig);
         metaDataManagerPersistService.alterSingleRuleConfiguration(
                 new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), 
Collections.emptyList()), new RuleMetaData(Collections.singleton(singleRule)));
-        
verify(metaDataPersistFacade.getMetaDataVersionService()).switchActiveVersion(anyCollection());
         
verify(metaDataContextManager.getDatabaseRuleConfigurationManager()).alter("foo_db",
 singleRuleConfig);
     }
     
@@ -172,14 +171,13 @@ class StandaloneMetaDataManagerPersistServiceTest {
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new 
ConfigurationProperties(new Properties()));
         
when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
         RuleConfiguration ruleConfig = mock(RuleConfiguration.class, 
RETURNS_DEEP_STUBS);
-        Collection<MetaDataVersion> metaDataVersion = 
Collections.singleton(mock(MetaDataVersion.class));
-        when(metaDataPersistFacade.getDatabaseRuleService().persist("foo_db", 
Collections.singleton(ruleConfig))).thenReturn(metaDataVersion);
+        Collection<MetaDataVersion> metaDataVersions = 
Collections.singleton(mock(MetaDataVersion.class));
+        when(metaDataPersistFacade.getDatabaseRuleService().persist("foo_db", 
Collections.singleton(ruleConfig))).thenReturn(metaDataVersions);
         AlterRuleItem alterRuleItem = mock(AlterRuleItem.class);
         RuleItemChangedBuilder ruleItemChangedBuilder = 
mock(RuleItemChangedBuilder.class);
         when(ruleItemChangedBuilder.build(eq("foo_db"), any(), any(), 
any())).thenReturn(Optional.of(alterRuleItem));
         setRuleConfigurationEventBuilder(ruleItemChangedBuilder);
         metaDataManagerPersistService.alterRuleConfiguration(database, 
ruleConfig);
-        
verify(metaDataPersistFacade.getMetaDataVersionService()).switchActiveVersion(metaDataVersion);
         
verify(metaDataContextManager.getDatabaseRuleItemManager()).alter(any(AlterRuleItem.class));
     }
     

Reply via email to