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