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 <[email protected]>
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());
}