You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2025/01/22 06:05:41 UTC
(shardingsphere) branch master updated: Optimize ShardingSphereStatisticsFactory (#34426)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 797abbd7ce0 Optimize ShardingSphereStatisticsFactory (#34426)
797abbd7ce0 is described below
commit 797abbd7ce00e38d4056de88716a977d1899d295
Author: jiangML <10...@qq.com>
AuthorDate: Wed Jan 22 14:05:35 2025 +0800
Optimize ShardingSphereStatisticsFactory (#34426)
---
.../builder/ShardingSphereStatisticsFactory.java | 40 +++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsFactory.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsFactory.java
index 2fb514517ca..2af23738353 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsFactory.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsFactory.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.infra.metadata.statistics.builder;
+import com.cedarsoftware.util.CaseInsensitiveSet;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
@@ -26,10 +27,13 @@ import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereDatabaseData;
+import org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereSchemaData;
import org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
+import org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereTableData;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import java.util.Collection;
+import java.util.Map.Entry;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -54,13 +58,14 @@ public final class ShardingSphereStatisticsFactory {
Optional<DialectStatisticsAppender> dialectStatisticsAppender = DatabaseTypedSPILoader.findService(DialectStatisticsAppender.class, getDatabaseType(metaData));
Collection<ShardingSphereDatabase> unloadedDatabases = metaData.getAllDatabases().stream().filter(each -> !loadedStatistics.containsDatabase(each.getName())).collect(Collectors.toList());
for (ShardingSphereDatabase each : unloadedDatabases) {
- ShardingSphereDatabaseData databaseData = new ShardingSphereDefaultStatisticsBuilder().build(each);
+ ShardingSphereDatabaseData databaseData = new ShardingSphereDatabaseData();
dialectStatisticsAppender.ifPresent(optional -> optional.append(databaseData, each));
if (!databaseData.getSchemaData().isEmpty()) {
result.putDatabase(each.getName(), databaseData);
}
}
loadedStatistics.getDatabaseData().forEach(result::putDatabase);
+ fillDefaultShardingSphereStatistics(metaData, result);
return result;
}
@@ -70,4 +75,37 @@ public final class ShardingSphereStatisticsFactory {
// 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 fillDefaultShardingSphereStatistics(final ShardingSphereMetaData metaData, final ShardingSphereStatistics statistics) {
+ for (ShardingSphereDatabase database : metaData.getAllDatabases()) {
+ ShardingSphereDatabaseData defaultDatabaseData = new ShardingSphereDefaultStatisticsBuilder().build(database);
+ Collection<String> defaultSchemaNames = new CaseInsensitiveSet<>(defaultDatabaseData.getSchemaData().keySet());
+ if (database.getAllSchemas().stream().noneMatch(optional -> defaultSchemaNames.contains(optional.getName()))) {
+ continue;
+ }
+ if (!statistics.containsDatabase(database.getName())) {
+ statistics.putDatabase(database.getName(), defaultDatabaseData);
+ continue;
+ }
+ fillDefaultShardingSphereStatistics(defaultDatabaseData, statistics.getDatabase(database.getName()));
+ }
+ }
+
+ private static void fillDefaultShardingSphereStatistics(final ShardingSphereDatabaseData defaultDatabaseData, final ShardingSphereDatabaseData existedDatabaseData) {
+ for (Entry<String, ShardingSphereSchemaData> entry : defaultDatabaseData.getSchemaData().entrySet()) {
+ if (!existedDatabaseData.containsSchema(entry.getKey())) {
+ existedDatabaseData.putSchema(entry.getKey(), entry.getValue());
+ continue;
+ }
+ fillDefaultShardingSphereStatistics(entry.getValue(), existedDatabaseData.getSchema(entry.getKey()));
+ }
+ }
+
+ private static void fillDefaultShardingSphereStatistics(final ShardingSphereSchemaData defaultSchemaData, final ShardingSphereSchemaData existedSchemaData) {
+ for (Entry<String, ShardingSphereTableData> entry : defaultSchemaData.getTableData().entrySet()) {
+ if (!existedSchemaData.containsTable(entry.getKey())) {
+ existedSchemaData.putTable(entry.getKey(), entry.getValue());
+ }
+ }
+ }
}