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 d39f6880350 Refactor ShardingSphereStatisticsFactory's replace loaded 
and created statistics logic (#34357)
d39f6880350 is described below

commit d39f6880350a4709dd90d52c83767d7c019d43b0
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jan 15 23:51:33 2025 +0800

    Refactor ShardingSphereStatisticsFactory's replace loaded and created 
statistics logic (#34357)
---
 .../metadata/ShardingSphereStatisticsFactory.java  | 39 ++++++----------------
 1 file changed, 10 insertions(+), 29 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
index 9b8e790ea0a..348bb18cf9a 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
@@ -24,15 +24,11 @@ import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-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.metadata.statistics.builder.ShardingSphereStatisticsBuilder;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 
-import java.util.Map.Entry;
 import java.util.Optional;
 
 /**
@@ -56,9 +52,13 @@ public final class ShardingSphereStatisticsFactory {
         if (!statisticsBuilder.isPresent()) {
             return new ShardingSphereStatistics();
         }
-        ShardingSphereStatistics result = 
statisticsBuilder.get().build(metaData);
-        
persistService.getShardingSphereDataPersistService().load(metaData).ifPresent(optional
 -> useLoadedToReplaceInit(result, optional));
-        return result;
+        ShardingSphereStatistics builtStatistics = 
statisticsBuilder.get().build(metaData);
+        Optional<ShardingSphereStatistics> loadedStatistics = 
persistService.getShardingSphereDataPersistService().load(metaData);
+        if (!loadedStatistics.isPresent()) {
+            return builtStatistics;
+        }
+        putStatisticsIfAbsent(loadedStatistics.get(), builtStatistics);
+        return loadedStatistics.get();
     }
     
     private static DatabaseType getDatabaseType(final ShardingSphereMetaData 
metaData) {
@@ -68,27 +68,8 @@ public final class ShardingSphereStatisticsFactory {
         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())) {
-                useLoadedToReplaceInit(entry.getValue(), 
loadedStatistics.getDatabaseData().get(entry.getKey()));
-            }
-        }
-    }
-    
-    private static void useLoadedToReplaceInit(final 
ShardingSphereDatabaseData initDatabaseData, final ShardingSphereDatabaseData 
loadedDatabaseData) {
-        for (Entry<String, ShardingSphereSchemaData> entry : 
initDatabaseData.getSchemaData().entrySet()) {
-            if 
(loadedDatabaseData.getSchemaData().containsKey(entry.getKey())) {
-                useLoadedToReplaceInit(entry.getValue(), 
loadedDatabaseData.getSchemaData().get(entry.getKey()));
-            }
-        }
-    }
-    
-    private static void useLoadedToReplaceInit(final ShardingSphereSchemaData 
initSchemaData, final ShardingSphereSchemaData loadedSchemaData) {
-        for (Entry<String, ShardingSphereTableData> entry : 
initSchemaData.getTableData().entrySet()) {
-            if (loadedSchemaData.getTableData().containsKey(entry.getKey())) {
-                
entry.setValue(loadedSchemaData.getTableData().get(entry.getKey()));
-            }
-        }
+    private static void putStatisticsIfAbsent(final ShardingSphereStatistics 
loadedStatistics, final ShardingSphereStatistics builtStatistics) {
+        
loadedStatistics.getDatabaseData().keySet().stream().filter(builtStatistics::containsDatabase).forEach(builtStatistics::dropDatabase);
+        
builtStatistics.getDatabaseData().forEach(loadedStatistics::putDatabase);
     }
 }

Reply via email to