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 8fb1c297ebe Refactor ShardingSphereDataPersistService (#34318)
8fb1c297ebe is described below

commit 8fb1c297ebe2b0876baf6b363ab9d45d5deb3f48
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sun Jan 12 12:44:02 2025 +0800

    Refactor ShardingSphereDataPersistService (#34318)
    
    * Refactor ShardingSphereDataPersistService
---
 .../mode/metadata/MetaDataContextsFactory.java        | 13 ++++++++-----
 .../data/ShardingSphereDataPersistService.java        | 19 ++++++++++---------
 .../metadata/table/TableRowDataPersistService.java    | 11 +++++------
 .../table/TableRowDataPersistServiceTest.java         |  6 ++++--
 4 files changed, 27 insertions(+), 22 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index dabcdd04500..9e2caac70d0 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -167,11 +167,7 @@ public final class MetaDataContextsFactory {
         if (metaData.getAllDatabases().isEmpty()) {
             return new ShardingSphereStatistics();
         }
-        DatabaseType protocolType = 
metaData.getAllDatabases().iterator().next().getProtocolType();
-        DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(protocolType).getDialectDatabaseMetaData();
-        // TODO can `protocolType instanceof SchemaSupportedDatabaseType ? 
"PostgreSQL" : protocolType.getType()` replace to trunk database type?
-        DatabaseType databaseType = 
dialectDatabaseMetaData.getDefaultSchema().isPresent() ? 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL") : protocolType;
-        Optional<ShardingSphereStatisticsBuilder> statisticsBuilder = 
DatabaseTypedSPILoader.findService(ShardingSphereStatisticsBuilder.class, 
databaseType);
+        Optional<ShardingSphereStatisticsBuilder> statisticsBuilder = 
DatabaseTypedSPILoader.findService(ShardingSphereStatisticsBuilder.class, 
getDatabaseType(metaData));
         if (!statisticsBuilder.isPresent()) {
             return new ShardingSphereStatistics();
         }
@@ -180,6 +176,13 @@ public final class MetaDataContextsFactory {
         return result;
     }
     
+    private static DatabaseType getDatabaseType(final ShardingSphereMetaData 
metaData) {
+        DatabaseType protocolType = 
metaData.getAllDatabases().iterator().next().getProtocolType();
+        DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(protocolType).getDialectDatabaseMetaData();
+        // TODO can `protocolType instanceof SchemaSupportedDatabaseType ? 
"PostgreSQL" : protocolType.getType()` replace to trunk database type?
+        return dialectDatabaseMetaData.getDefaultSchema().isPresent() ? 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL") : protocolType;
+    }
+    
     private static void useLoadedToReplaceInit(final ShardingSphereStatistics 
initStatistics, final ShardingSphereStatistics loadedStatistics) {
         for (Entry<String, ShardingSphereDatabaseData> entry : 
initStatistics.getDatabaseData().entrySet()) {
             if 
(loadedStatistics.getDatabaseData().containsKey(entry.getKey())) {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/data/ShardingSphereDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/data/ShardingSphereDataPersistService.java
index e430ae16cf4..90695bf1482 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/data/ShardingSphereDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/data/ShardingSphereDataPersistService.java
@@ -49,10 +49,10 @@ public final class ShardingSphereDataPersistService {
     }
     
     /**
-     * Load ShardingSphere statistics data.
+     * Load statistics.
      *
      * @param metaData meta data
-     * @return ShardingSphere statistics data
+     * @return statistics
      */
     public Optional<ShardingSphereStatistics> load(final 
ShardingSphereMetaData metaData) {
         Collection<String> databaseNames = 
repository.getChildrenKeys(ShardingSphereDataNodePath.getDatabasesRootPath());
@@ -61,23 +61,24 @@ public final class ShardingSphereDataPersistService {
         }
         ShardingSphereStatistics result = new ShardingSphereStatistics();
         for (String each : 
databaseNames.stream().filter(metaData::containsDatabase).collect(Collectors.toList()))
 {
-            result.getDatabaseData().put(each, load(each, 
metaData.getDatabase(each)));
+            result.getDatabaseData().put(each, 
load(metaData.getDatabase(each)));
         }
         return Optional.of(result);
     }
     
-    private ShardingSphereDatabaseData load(final String databaseName, final 
ShardingSphereDatabase database) {
+    private ShardingSphereDatabaseData load(final ShardingSphereDatabase 
database) {
         ShardingSphereDatabaseData result = new ShardingSphereDatabaseData();
-        for (String each : 
repository.getChildrenKeys(ShardingSphereDataNodePath.getSchemaRootPath(databaseName)).stream().filter(database::containsSchema).collect(Collectors.toList()))
 {
-            result.putSchema(each, load(databaseName, each, 
database.getSchema(each)));
+        for (String each : 
repository.getChildrenKeys(ShardingSphereDataNodePath.getSchemaRootPath(database.getName())).stream().filter(database::containsSchema).collect(Collectors.toList()))
 {
+            result.putSchema(each, load(database.getName(), 
database.getSchema(each)));
         }
         return result;
     }
     
-    private ShardingSphereSchemaData load(final String databaseName, final 
String schemaName, final ShardingSphereSchema schema) {
+    private ShardingSphereSchemaData load(final String databaseName, final 
ShardingSphereSchema schema) {
         ShardingSphereSchemaData result = new ShardingSphereSchemaData();
-        for (String each : 
repository.getChildrenKeys(ShardingSphereDataNodePath.getTableRootPath(databaseName,
 
schemaName)).stream().filter(schema::containsTable).collect(Collectors.toList()))
 {
-            result.getTableData().put(each, 
tableRowDataPersistService.load(databaseName, schemaName, each, 
schema.getTable(each)));
+        for (String each : 
repository.getChildrenKeys(ShardingSphereDataNodePath.getTableRootPath(databaseName,
 schema.getName())).stream().filter(schema::containsTable)
+                .collect(Collectors.toList())) {
+            result.getTableData().put(each, 
tableRowDataPersistService.load(databaseName, schema.getName(), 
schema.getTable(each)));
             
         }
         return result;
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/metadata/table/TableRowDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/metadata/table/TableRowDataPersistService.java
index c3f8cb3febc..027f86e0cf2 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/metadata/table/TableRowDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/metadata/table/TableRowDataPersistService.java
@@ -71,15 +71,14 @@ public final class TableRowDataPersistService {
      *
      * @param databaseName database name
      * @param schemaName schema name
-     * @param tableName table name
      * @param table table
-     * @return ShardingSphere table data
+     * @return table data
      */
-    public ShardingSphereTableData load(final String databaseName, final 
String schemaName, final String tableName, final ShardingSphereTable table) {
-        ShardingSphereTableData result = new 
ShardingSphereTableData(tableName);
+    public ShardingSphereTableData load(final String databaseName, final 
String schemaName, final ShardingSphereTable table) {
+        ShardingSphereTableData result = new 
ShardingSphereTableData(table.getName());
         YamlShardingSphereRowDataSwapper swapper = new 
YamlShardingSphereRowDataSwapper(new ArrayList<>(table.getAllColumns()));
-        for (String each : 
repository.getChildrenKeys(ShardingSphereDataNodePath.getTablePath(databaseName,
 schemaName, tableName))) {
-            String yamlRow = 
repository.query(ShardingSphereDataNodePath.getTableRowPath(databaseName, 
schemaName, tableName, each));
+        for (String each : 
repository.getChildrenKeys(ShardingSphereDataNodePath.getTablePath(databaseName,
 schemaName, table.getName()))) {
+            String yamlRow = 
repository.query(ShardingSphereDataNodePath.getTableRowPath(databaseName, 
schemaName, table.getName(), each));
             if (!Strings.isNullOrEmpty(yamlRow)) {
                 
result.getRows().add(swapper.swapToObject(YamlEngine.unmarshal(yamlRow, 
YamlShardingSphereRowData.class)));
             }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/metadata/table/TableRowDataPersistServiceTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/metadata/table/TableRowDataPersistServiceTest.java
index 32cb17a1f38..30d5a3a49b2 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/metadata/table/TableRowDataPersistServiceTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/metadata/table/TableRowDataPersistServiceTest.java
@@ -76,7 +76,8 @@ class TableRowDataPersistServiceTest {
         
when(repository.getChildrenKeys("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl")).thenReturn(Collections.singletonList("foo_tbl"));
         
when(repository.query("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl/foo_tbl")).thenReturn("uniqueKey:
 foo_key" + System.lineSeparator());
         ShardingSphereTable table = mock(ShardingSphereTable.class);
-        ShardingSphereTableData actual = persistService.load("foo_db", 
"foo_schema", "foo_tbl", table);
+        when(table.getName()).thenReturn("foo_tbl");
+        ShardingSphereTableData actual = persistService.load("foo_db", 
"foo_schema", table);
         assertThat(actual.getName(), is("foo_tbl"));
         assertThat(actual.getRows().size(), is(1));
         assertThat(actual.getRows().iterator().next().getUniqueKey(), 
is("foo_key"));
@@ -87,7 +88,8 @@ class TableRowDataPersistServiceTest {
         
when(repository.getChildrenKeys("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl")).thenReturn(Collections.singletonList("foo_tbl"));
         
when(repository.query("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl/foo_tbl")).thenReturn("");
         ShardingSphereTable table = mock(ShardingSphereTable.class);
-        ShardingSphereTableData actual = persistService.load("foo_db", 
"foo_schema", "foo_tbl", table);
+        when(table.getName()).thenReturn("foo_tbl");
+        ShardingSphereTableData actual = persistService.load("foo_db", 
"foo_schema", table);
         assertThat(actual.getName(), is("foo_tbl"));
         assertTrue(actual.getRows().isEmpty());
     }

Reply via email to