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(); }