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 6cd1a04380c Refactor DataSourceUnitPersistService (#34614)
6cd1a04380c is described below

commit 6cd1a04380c9dee4f7f5026a26de99f81564d83d
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sun Feb 9 00:24:26 2025 +0800

    Refactor DataSourceUnitPersistService (#34614)
---
 .../database/DataSourceUnitPersistService.java     | 34 ++++++----------------
 .../database/DataSourceUnitPersistServiceTest.java | 13 ++-------
 .../ClusterMetaDataManagerPersistService.java      |  4 +--
 .../StandaloneMetaDataManagerPersistService.java   |  9 ++----
 4 files changed, 15 insertions(+), 45 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
index 3313e7aa42c..f5d9f0fa5a2 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
@@ -17,18 +17,16 @@
 
 package org.apache.shardingsphere.mode.metadata.persist.config.database;
 
-import com.google.common.base.Strings;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
-import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.resource.YamlDataSourceConfigurationSwapper;
 import 
org.apache.shardingsphere.mode.metadata.persist.version.MetaDataVersionPersistService;
 import 
org.apache.shardingsphere.mode.node.path.metadata.DataSourceMetaDataNodePath;
+import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 
 import java.util.Collection;
 import java.util.LinkedHashMap;
-import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.stream.Collectors;
@@ -70,10 +68,9 @@ public final class DataSourceUnitPersistService {
      */
     @SuppressWarnings("unchecked")
     public DataSourcePoolProperties load(final String databaseName, final 
String dataSourceName) {
-        Integer dataSourceActiveVersion = 
getDataSourceActiveVersion(databaseName, dataSourceName);
-        String dataSourceValue = 
repository.query(DataSourceMetaDataNodePath.getStorageUnitVersionNodePathGenerator(databaseName,
 dataSourceName)
-                .getVersionPath(null == dataSourceActiveVersion ? 
MetaDataVersion.INIT_VERSION : dataSourceActiveVersion));
-        return 
yamlDataSourceConfigurationSwapper.swapToDataSourcePoolProperties(YamlEngine.unmarshal(dataSourceValue,
 Map.class));
+        int activeVersion = 
Integer.parseInt(repository.query(DataSourceMetaDataNodePath.getStorageUnitVersionNodePathGenerator(databaseName,
 dataSourceName).getActiveVersionPath()));
+        String dataSourceContent = 
repository.query(DataSourceMetaDataNodePath.getStorageUnitVersionNodePathGenerator(databaseName,
 dataSourceName).getVersionPath(activeVersion));
+        return 
yamlDataSourceConfigurationSwapper.swapToDataSourcePoolProperties(YamlEngine.unmarshal(dataSourceContent,
 Map.class));
     }
     
     /**
@@ -81,27 +78,14 @@ public final class DataSourceUnitPersistService {
      *
      * @param databaseName database name
      * @param dataSourcePropsMap to be persisted data source properties map
-     * @return meta data versions
      */
-    public Collection<MetaDataVersion> persist(final String databaseName, 
final Map<String, DataSourcePoolProperties> dataSourcePropsMap) {
-        Collection<MetaDataVersion> result = new LinkedList<>();
+    public void persist(final String databaseName, final Map<String, 
DataSourcePoolProperties> dataSourcePropsMap) {
         for (Entry<String, DataSourcePoolProperties> entry : 
dataSourcePropsMap.entrySet()) {
-            Integer activeVersion = getDataSourceActiveVersion(databaseName, 
entry.getKey());
-            int nextActiveVersion = 
metaDataVersionPersistService.getNextVersion(DataSourceMetaDataNodePath.getStorageUnitVersionNodePathGenerator(databaseName,
 entry.getKey()).getVersionsPath());
-            
repository.persist(DataSourceMetaDataNodePath.getStorageUnitVersionNodePathGenerator(databaseName,
 entry.getKey()).getVersionPath(nextActiveVersion),
-                    
YamlEngine.marshal(yamlDataSourceConfigurationSwapper.swapToMap(entry.getValue())));
-            if (null == activeVersion) {
-                
repository.persist(DataSourceMetaDataNodePath.getStorageUnitVersionNodePathGenerator(databaseName,
 entry.getKey()).getActiveVersionPath(),
-                        String.valueOf(MetaDataVersion.INIT_VERSION));
-            }
-            result.add(new 
MetaDataVersion(DataSourceMetaDataNodePath.getStorageUnitPath(databaseName, 
entry.getKey()), activeVersion, nextActiveVersion));
+            VersionNodePathGenerator versionNodePathGenerator = 
DataSourceMetaDataNodePath.getStorageUnitVersionNodePathGenerator(databaseName, 
entry.getKey());
+            int nextVersion = 
metaDataVersionPersistService.getNextVersion(versionNodePathGenerator.getVersionsPath());
+            
repository.persist(versionNodePathGenerator.getVersionPath(nextVersion), 
YamlEngine.marshal(yamlDataSourceConfigurationSwapper.swapToMap(entry.getValue())));
+            
metaDataVersionPersistService.switchActiveVersion(DataSourceMetaDataNodePath.getStorageUnitPath(databaseName,
 entry.getKey()), nextVersion);
         }
-        return result;
-    }
-    
-    private Integer getDataSourceActiveVersion(final String databaseName, 
final String dataSourceName) {
-        String value = 
repository.query(DataSourceMetaDataNodePath.getStorageUnitVersionNodePathGenerator(databaseName,
 dataSourceName).getActiveVersionPath());
-        return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value);
     }
     
     /**
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java
index b17a26d1c26..31ec7c5c38a 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.mode.metadata.persist.config.database;
 
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
-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;
@@ -26,15 +25,12 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedHashMap;
-import java.util.List;
 import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -67,14 +63,9 @@ class DataSourceUnitPersistServiceTest {
         Map<String, DataSourcePoolProperties> dataSourcePropsMap = new 
LinkedHashMap<>(1, 1F);
         dataSourcePropsMap.put("foo_ds", new 
DataSourcePoolProperties("org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource",
 Collections.emptyMap()));
         dataSourcePropsMap.put("bar_ds", new 
DataSourcePoolProperties("org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource",
 Collections.emptyMap()));
-        
when(repository.query("/metadata/foo_db/data_sources/units/foo_ds/active_version")).thenReturn("10");
         
when(repository.getChildrenKeys("/metadata/foo_db/data_sources/units/foo_ds/versions")).thenReturn(Collections.singletonList("10"));
-        List<MetaDataVersion> actual = new 
ArrayList<>(persistService.persist("foo_db", dataSourcePropsMap));
-        assertThat(actual.size(), is(2));
-        assertThat(actual.get(0).getCurrentActiveVersion(), is(10));
-        assertThat(actual.get(0).getNextActiveVersion(), is(11));
-        assertNull(actual.get(1).getCurrentActiveVersion());
-        assertThat(actual.get(1).getNextActiveVersion(), is(0));
+        persistService.persist("foo_db", dataSourcePropsMap);
+        
verify(repository).persist("/metadata/foo_db/data_sources/units/foo_ds/active_version",
 "11");
     }
     
     @Test
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 81313496419..746353e52e9 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
@@ -31,7 +31,6 @@ import 
org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.databa
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.manager.MetaDataContextManager;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade;
-import 
org.apache.shardingsphere.mode.metadata.persist.config.database.DataSourceUnitPersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.metadata.DatabaseMetaDataPersistFacade;
 import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
@@ -131,8 +130,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     @Override
     public void alterStorageUnits(final ShardingSphereDatabase database, final 
Map<String, DataSourcePoolProperties> toBeUpdatedProps) {
         MetaDataContexts originalMetaDataContexts = new 
MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), 
metaDataContextManager.getMetaDataContexts().getStatistics());
-        DataSourceUnitPersistService dataSourceService = 
metaDataPersistFacade.getDataSourceUnitService();
-        
metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(dataSourceService.persist(database.getName(),
 toBeUpdatedProps));
+        
metaDataPersistFacade.getDataSourceUnitService().persist(database.getName(), 
toBeUpdatedProps);
         afterStorageUnitsAltered(database.getName(), originalMetaDataContexts);
     }
     
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 11d420227c6..74a5ead6edc 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
@@ -30,15 +30,14 @@ import 
org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
 import 
org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.changed.RuleItemChangedBuilder;
 import 
org.apache.shardingsphere.mode.metadata.changed.executor.type.RuleItemAlteredBuildExecutor;
 import 
org.apache.shardingsphere.mode.metadata.changed.executor.type.RuleItemDroppedBuildExecutor;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.factory.MetaDataContextsFactory;
 import org.apache.shardingsphere.mode.metadata.manager.MetaDataContextManager;
 import 
org.apache.shardingsphere.mode.metadata.manager.resource.SwitchingResource;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade;
-import 
org.apache.shardingsphere.mode.metadata.persist.config.database.DataSourceUnitPersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.metadata.DatabaseMetaDataPersistFacade;
 import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
@@ -159,8 +158,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
                         
metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().persist(databaseName,
 each.getName(), each.getAllTables());
                     }
                 });
-        DataSourceUnitPersistService dataSourceService = 
metaDataPersistFacade.getDataSourceUnitService();
-        
metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(dataSourceService.persist(databaseName,
 toBeRegisteredProps));
+        metaDataPersistFacade.getDataSourceUnitService().persist(databaseName, 
toBeRegisteredProps);
         clearServiceCache();
     }
     
@@ -173,8 +171,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
         
metaDataContextManager.getMetaDataContexts().getMetaData().putDatabase(changedDatabase);
         
metaDataContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules()
                 .forEach(each -> ((GlobalRule) 
each).refresh(metaDataContextManager.getMetaDataContexts().getMetaData().getAllDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
-        DataSourceUnitPersistService dataSourceService = 
metaDataPersistFacade.getDataSourceUnitService();
-        
metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(dataSourceService.persist(database.getName(),
 toBeUpdatedProps));
+        
metaDataPersistFacade.getDataSourceUnitService().persist(database.getName(), 
toBeUpdatedProps);
         switchingResource.closeStaleDataSources();
         clearServiceCache();
     }

Reply via email to