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 c9c7b9606b3 Add DatabaseMetaDataPersistFacade.unregisterStorageUnits() 
(#35010)
c9c7b9606b3 is described below

commit c9c7b9606b3f42bc2266a54b2fe60e38a477a1df
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sun Mar 16 14:20:09 2025 +0800

    Add DatabaseMetaDataPersistFacade.unregisterStorageUnits() (#35010)
    
    * Add DatabaseMetaDataPersistFacade.unregisterStorageUnits()
    
    * Add DatabaseMetaDataPersistFacade.unregisterStorageUnits()
    
    * Add DatabaseMetaDataPersistFacade.unregisterStorageUnits()
---
 .../metadata/persist/MetaDataPersistFacade.java    |  4 +-
 .../metadata/DatabaseMetaDataPersistFacade.java    | 27 ++++++++++++
 .../ClusterMetaDataManagerPersistService.java      | 49 +++++++++-------------
 .../StandaloneMetaDataManagerPersistService.java   | 21 +---------
 4 files changed, 50 insertions(+), 51 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistFacade.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistFacade.java
index be5d99b68d0..b405aeed567 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistFacade.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistFacade.java
@@ -103,12 +103,12 @@ public final class MetaDataPersistFacade {
             databaseMetaDataFacade.getDatabase().add(databaseName);
         } else {
             dataSourceUnitService.persist(databaseName, propsMap);
-            databaseRuleService.persist(databaseName, 
decorateRuleConfigs(databaseName, dataSources, rules));
+            databaseRuleService.persist(databaseName, 
decorateRuleConfigurations(databaseName, dataSources, rules));
         }
     }
     
     @SuppressWarnings({"unchecked", "rawtypes"})
-    private Collection<RuleConfiguration> decorateRuleConfigs(final String 
databaseName, final Map<String, DataSource> dataSources, final 
Collection<ShardingSphereRule> rules) {
+    private Collection<RuleConfiguration> decorateRuleConfigurations(final 
String databaseName, final Map<String, DataSource> dataSources, final 
Collection<ShardingSphereRule> rules) {
         Collection<RuleConfiguration> result = new LinkedList<>();
         for (ShardingSphereRule each : rules) {
             RuleConfiguration ruleConfig = each.getConfiguration();
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
index a33bf618c67..66f7d398636 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
@@ -18,12 +18,17 @@
 package org.apache.shardingsphere.mode.metadata.persist.metadata;
 
 import lombok.Getter;
+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.database.schema.builder.GenericSchemaBuilder;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
+import 
org.apache.shardingsphere.mode.exception.LoadTableMetaDataFailedException;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.mode.metadata.persist.metadata.service.DatabaseMetaDataPersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.metadata.service.SchemaMetaDataPersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.metadata.service.TableMetaDataPersistService;
@@ -31,7 +36,9 @@ import 
org.apache.shardingsphere.mode.metadata.persist.metadata.service.ViewMeta
 import 
org.apache.shardingsphere.mode.metadata.persist.version.VersionPersistService;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 
+import java.sql.SQLException;
 import java.util.Collection;
+import java.util.Map.Entry;
 
 /**
  * Database meta data persist facade.
@@ -119,4 +126,24 @@ public final class DatabaseMetaDataPersistFacade {
         }
         this.schema.drop(database.getName(), schemaName);
     }
+    
+    /**
+     * Register storage units.
+     *
+     * @param databaseName database name
+     * @param reloadMetaDataContexts reload meta data contexts
+     * @throws LoadTableMetaDataFailedException if an error occurs while 
loading table metadata
+     */
+    public void unregisterStorageUnits(final String databaseName, final 
MetaDataContexts reloadMetaDataContexts) {
+        ShardingSphereDatabase database = 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
+        GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
+                database.getRuleMetaData().getRules(), 
reloadMetaDataContexts.getMetaData().getProps(), new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
+        try {
+            for (Entry<String, ShardingSphereSchema> entry : 
GenericSchemaBuilder.build(database.getProtocolType(), material).entrySet()) {
+                GenericSchemaManager.getToBeDroppedTables(entry.getValue(), 
database.getSchema(entry.getKey())).forEach(each -> table.drop(databaseName, 
entry.getKey(), each.getName()));
+            }
+        } catch (final SQLException ex) {
+            throw new LoadTableMetaDataFailedException(databaseName, ex);
+        }
+    }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
index 7a7d7b4d6ac..9de8f21d0b6 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
@@ -30,6 +30,8 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericS
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
+import org.apache.shardingsphere.infra.metadata.statistics.DatabaseStatistics;
+import org.apache.shardingsphere.infra.metadata.statistics.SchemaStatistics;
 import org.apache.shardingsphere.infra.util.retry.RetryExecutor;
 import 
org.apache.shardingsphere.mode.exception.LoadTableMetaDataFailedException;
 import 
org.apache.shardingsphere.mode.manager.cluster.exception.ReloadMetaDataContextFailedException;
@@ -142,20 +144,6 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
         afterStorageUnitsAltered(database.getName(), originalMetaDataContexts);
     }
     
-    @Override
-    public void unregisterStorageUnits(final ShardingSphereDatabase database, 
final Collection<String> toBeDroppedStorageUnitNames) {
-        for (String each : getToBeDroppedResourceNames(database.getName(), 
toBeDroppedStorageUnitNames)) {
-            MetaDataContexts originalMetaDataContexts = new 
MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), 
metaDataContextManager.getMetaDataContexts().getStatistics());
-            
metaDataPersistFacade.getDataSourceUnitService().delete(database.getName(), 
each);
-            afterStorageUnitsDropped(database.getName(), 
originalMetaDataContexts);
-        }
-    }
-    
-    private Collection<String> getToBeDroppedResourceNames(final String 
databaseName, final Collection<String> toBeDroppedResourceNames) {
-        Map<String, DataSourcePoolProperties> propsMap = 
metaDataPersistFacade.getDataSourceUnitService().load(databaseName);
-        return 
toBeDroppedResourceNames.stream().filter(propsMap::containsKey).collect(Collectors.toList());
-    }
-    
     private void afterStorageUnitsAltered(final String databaseName, final 
MetaDataContexts originalMetaDataContexts) {
         MetaDataContexts reloadMetaDataContexts = 
getReloadedMetaDataContexts(originalMetaDataContexts);
         
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseStatistics(databaseName))
@@ -165,24 +153,25 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
                 
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
     }
     
-    private void afterStorageUnitsDropped(final String databaseName, final 
MetaDataContexts originalMetaDataContexts) {
-        MetaDataContexts reloadMetaDataContexts = 
getReloadedMetaDataContexts(originalMetaDataContexts);
-        ShardingSphereDatabase database = 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
-        GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
-                database.getRuleMetaData().getRules(), 
reloadMetaDataContexts.getMetaData().getProps(),
-                new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
-        try {
-            Map<String, ShardingSphereSchema> schemas = 
GenericSchemaBuilder.build(database.getProtocolType(), material);
-            for (Entry<String, ShardingSphereSchema> entry : 
schemas.entrySet()) {
-                Collection<ShardingSphereTable> tables = 
GenericSchemaManager.getToBeDroppedTables(entry.getValue(), 
database.getSchema(entry.getKey()));
-                tables.forEach(each -> 
metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(databaseName, 
entry.getKey(), each.getName()));
+    @Override
+    public void unregisterStorageUnits(final ShardingSphereDatabase database, 
final Collection<String> toBeDroppedStorageUnitNames) {
+        for (String each : getToBeDroppedResourceNames(database.getName(), 
toBeDroppedStorageUnitNames)) {
+            MetaDataContexts originalMetaDataContexts = new 
MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), 
metaDataContextManager.getMetaDataContexts().getStatistics());
+            
metaDataPersistFacade.getDataSourceUnitService().delete(database.getName(), 
each);
+            MetaDataContexts reloadMetaDataContexts = 
getReloadedMetaDataContexts(originalMetaDataContexts);
+            
metaDataPersistFacade.getDatabaseMetaDataFacade().unregisterStorageUnits(database.getName(),
 reloadMetaDataContexts);
+            DatabaseStatistics databaseStatistics = 
reloadMetaDataContexts.getStatistics().getDatabaseStatistics(database.getName());
+            if (null != databaseStatistics) {
+                for (Entry<String, SchemaStatistics> entry : 
databaseStatistics.getSchemaStatisticsMap().entrySet()) {
+                    
metaDataPersistFacade.getStatisticsService().persist(originalMetaDataContexts.getMetaData().getDatabase(database.getName()),
 entry.getKey(), entry.getValue());
+                }
             }
-        } catch (final SQLException ex) {
-            throw new LoadTableMetaDataFailedException(databaseName, ex);
         }
-        
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseStatistics(databaseName))
-                .ifPresent(optional -> 
optional.getSchemaStatisticsMap().forEach((schemaName, schemaStatistics) -> 
metaDataPersistFacade.getStatisticsService()
-                        
.persist(originalMetaDataContexts.getMetaData().getDatabase(databaseName), 
schemaName, schemaStatistics)));
+    }
+    
+    private Collection<String> getToBeDroppedResourceNames(final String 
databaseName, final Collection<String> toBeDroppedResourceNames) {
+        Map<String, DataSourcePoolProperties> propsMap = 
metaDataPersistFacade.getDataSourceUnitService().load(databaseName);
+        return 
toBeDroppedResourceNames.stream().filter(propsMap::containsKey).collect(Collectors.toList());
     }
     
     @Override
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
index b0ce77d5eae..fe71b99d162 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
@@ -188,29 +188,12 @@ public final class 
StandaloneMetaDataManagerPersistService implements MetaDataMa
     public void unregisterStorageUnits(final ShardingSphereDatabase database, 
final Collection<String> toBeDroppedStorageUnitNames) {
         for (String each : getToBeDroppedResourceNames(database.getName(), 
toBeDroppedStorageUnitNames)) {
             
metaDataPersistFacade.getDataSourceUnitService().delete(database.getName(), 
each);
-            afterStorageUnitsUnregistered(database.getName(), each);
+            
metaDataContextManager.getStorageUnitManager().unregister(database.getName(), 
each);
+            
metaDataPersistFacade.getDatabaseMetaDataFacade().unregisterStorageUnits(database.getName(),
 metaDataContextManager.getMetaDataContexts());
         }
         OrderedServicesCache.clearCache();
     }
     
-    private void afterStorageUnitsUnregistered(final String databaseName, 
final String storageUnitName) {
-        
metaDataContextManager.getStorageUnitManager().unregister(databaseName, 
storageUnitName);
-        MetaDataContexts reloadMetaDataContexts = 
metaDataContextManager.getMetaDataContexts();
-        ShardingSphereDatabase database = 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
-        GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
-                database.getRuleMetaData().getRules(), 
reloadMetaDataContexts.getMetaData().getProps(),
-                new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
-        try {
-            Map<String, ShardingSphereSchema> schemas = 
GenericSchemaBuilder.build(database.getProtocolType(), material);
-            for (Entry<String, ShardingSphereSchema> entry : 
schemas.entrySet()) {
-                Collection<ShardingSphereTable> tables = 
GenericSchemaManager.getToBeDroppedTables(entry.getValue(), 
database.getSchema(entry.getKey()));
-                tables.forEach(each -> 
metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(databaseName, 
entry.getKey(), each.getName()));
-            }
-        } catch (final SQLException ex) {
-            throw new LoadTableMetaDataFailedException(databaseName, ex);
-        }
-    }
-    
     private Collection<String> getToBeDroppedResourceNames(final String 
databaseName, final Collection<String> toBeDroppedResourceNames) {
         Map<String, DataSourcePoolProperties> propsMap = 
metaDataPersistFacade.getDataSourceUnitService().load(databaseName);
         return 
toBeDroppedResourceNames.stream().filter(propsMap::containsKey).collect(Collectors.toList());

Reply via email to