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 fea5a877766 Refactor TableMetaDataPersistService (#34611) fea5a877766 is described below commit fea5a877766834a88acbf83374568424e70a05e3 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sat Feb 8 19:10:09 2025 +0800 Refactor TableMetaDataPersistService (#34611) --- .../service/TableMetaDataPersistService.java | 32 ++++++---------------- .../metadata/TableMetaDataPersistServiceTest.java | 2 -- 2 files changed, 8 insertions(+), 26 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java index e8f6dac730d..213286e8614 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java @@ -17,19 +17,17 @@ package org.apache.shardingsphere.mode.metadata.persist.metadata.service; -import com.google.common.base.Strings; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; -import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.infra.util.yaml.YamlEngine; import org.apache.shardingsphere.infra.yaml.schema.pojo.YamlShardingSphereTable; import org.apache.shardingsphere.infra.yaml.schema.swapper.YamlTableSwapper; import org.apache.shardingsphere.mode.metadata.persist.version.MetaDataVersionPersistService; import org.apache.shardingsphere.mode.node.path.metadata.TableMetaDataNodePath; +import org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator; import org.apache.shardingsphere.mode.spi.repository.PersistRepository; import java.util.Collection; -import java.util.LinkedList; import java.util.stream.Collectors; /** @@ -52,8 +50,7 @@ public final class TableMetaDataPersistService { * @return loaded tables */ public Collection<ShardingSphereTable> load(final String databaseName, final String schemaName) { - return repository.getChildrenKeys(TableMetaDataNodePath.getTableRootPath(databaseName, schemaName)).stream() - .map(each -> load(databaseName, schemaName, each)).collect(Collectors.toList()); + return repository.getChildrenKeys(TableMetaDataNodePath.getTableRootPath(databaseName, schemaName)).stream().map(each -> load(databaseName, schemaName, each)).collect(Collectors.toList()); } /** @@ -65,9 +62,8 @@ public final class TableMetaDataPersistService { * @return loaded table */ public ShardingSphereTable load(final String databaseName, final String schemaName, final String tableName) { - Integer activeVersion = getActiveVersion(databaseName, schemaName, tableName); - String tableContent = repository.query( - TableMetaDataNodePath.getVersionNodePathGenerator(databaseName, schemaName, tableName).getVersionPath(null == activeVersion ? MetaDataVersion.INIT_VERSION : activeVersion)); + int activeVersion = Integer.parseInt(repository.query(TableMetaDataNodePath.getVersionNodePathGenerator(databaseName, schemaName, tableName).getActiveVersionPath())); + String tableContent = repository.query(TableMetaDataNodePath.getVersionNodePathGenerator(databaseName, schemaName, tableName).getVersionPath(activeVersion)); return swapper.swapToObject(YamlEngine.unmarshal(tableContent, YamlShardingSphereTable.class)); } @@ -79,25 +75,13 @@ public final class TableMetaDataPersistService { * @param tables to be persisted tables */ public void persist(final String databaseName, final String schemaName, final Collection<ShardingSphereTable> tables) { - Collection<MetaDataVersion> metaDataVersions = new LinkedList<>(); for (ShardingSphereTable each : tables) { String tableName = each.getName().toLowerCase(); - int nextActiveVersion = metaDataVersionPersistService.getNextVersion(TableMetaDataNodePath.getVersionNodePathGenerator(databaseName, schemaName, tableName).getVersionsPath()); - repository.persist( - TableMetaDataNodePath.getVersionNodePathGenerator(databaseName, schemaName, tableName).getVersionPath(nextActiveVersion), - YamlEngine.marshal(swapper.swapToYamlConfiguration(each))); - if (null == getActiveVersion(databaseName, schemaName, tableName)) { - repository.persist(TableMetaDataNodePath.getVersionNodePathGenerator(databaseName, schemaName, tableName).getActiveVersionPath(), String.valueOf(MetaDataVersion.INIT_VERSION)); - } - metaDataVersions.add( - new MetaDataVersion(TableMetaDataNodePath.getTablePath(databaseName, schemaName, tableName), getActiveVersion(databaseName, schemaName, tableName), nextActiveVersion)); + VersionNodePathGenerator versionNodePathGenerator = TableMetaDataNodePath.getVersionNodePathGenerator(databaseName, schemaName, tableName); + int nextVersion = metaDataVersionPersistService.getNextVersion(versionNodePathGenerator.getVersionsPath()); + repository.persist(versionNodePathGenerator.getVersionPath(nextVersion), YamlEngine.marshal(swapper.swapToYamlConfiguration(each))); + metaDataVersionPersistService.switchActiveVersion(TableMetaDataNodePath.getTablePath(databaseName, schemaName, tableName), nextVersion); } - metaDataVersionPersistService.switchActiveVersion(metaDataVersions); - } - - private Integer getActiveVersion(final String databaseName, final String schemaName, final String tableName) { - String value = repository.query(TableMetaDataNodePath.getVersionNodePathGenerator(databaseName, schemaName, tableName).getActiveVersionPath()); - return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value); } /** diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/metadata/TableMetaDataPersistServiceTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/metadata/TableMetaDataPersistServiceTest.java index 9a60dcc3038..9fc3a0b16cc 100644 --- a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/metadata/TableMetaDataPersistServiceTest.java +++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/metadata/TableMetaDataPersistServiceTest.java @@ -62,7 +62,6 @@ class TableMetaDataPersistServiceTest { @Test void assertPersistWithoutVersion() { - when(repository.query("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version")).thenReturn("", "0"); ShardingSphereTable table = mock(ShardingSphereTable.class); when(table.getName()).thenReturn("foo_tbl"); persistService.persist("foo_db", "foo_schema", Collections.singleton(table)); @@ -73,7 +72,6 @@ class TableMetaDataPersistServiceTest { @Test void assertPersistWithVersion() { when(repository.getChildrenKeys("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions")).thenReturn(Collections.singletonList("10")); - when(repository.query("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version")).thenReturn("10"); ShardingSphereTable table = mock(ShardingSphereTable.class); when(table.getName()).thenReturn("foo_tbl"); persistService.persist("foo_db", "foo_schema", Collections.singleton(table));