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 c60021777d2 Refactor 
StandaloneMetaDataManagerPersistService.dropSchema() (#34523)
c60021777d2 is described below

commit c60021777d2a43704cbe9873c38aa656845bc358
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Mon Jan 27 23:13:03 2025 +0800

    Refactor StandaloneMetaDataManagerPersistService.dropSchema() (#34523)
    
    * Add DatabaseMetaDataManager.renameSchema()
    
    * Refactor StandaloneMetaDataManagerPersistService.dropSchema()
    
    * Refactor StandaloneMetaDataManagerPersistService.dropSchema()
    
    * Refactor StandaloneMetaDataManagerPersistService.dropSchema()
---
 .../metadata/manager/DatabaseMetaDataManager.java  | 23 ++++++++++++++++++-
 .../StandaloneMetaDataManagerPersistService.java   | 26 ++--------------------
 ...tandaloneMetaDataManagerPersistServiceTest.java |  3 ++-
 3 files changed, 26 insertions(+), 26 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
index 69cafe4cd07..e1286595c46 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
@@ -100,6 +100,27 @@ public final class DatabaseMetaDataManager {
             return;
         }
         database.dropSchema(schemaName);
+        if 
(database.getSchema(schemaName).getAllTables().stream().anyMatch(each -> 
TableRefreshUtils.isSingleTable(each.getName(), database))) {
+            database.reloadRules();
+        }
+        metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
+    }
+    
+    /**
+     * Rename schema.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     * @param renamedSchemaName renamed schema name
+     */
+    public synchronized void renameSchema(final String databaseName, final 
String schemaName, final String renamedSchemaName) {
+        ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
+        ShardingSphereDatabase database = metaData.getDatabase(databaseName);
+        ShardingSphereSchema schema = database.getSchema(schemaName);
+        ShardingSphereSchema renamedSchema = new 
ShardingSphereSchema(renamedSchemaName, schema.getAllTables(), 
schema.getAllViews());
+        database.addSchema(renamedSchema);
+        database.dropSchema(schemaName);
+        database.reloadRules();
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
     }
     
@@ -131,10 +152,10 @@ public final class DatabaseMetaDataManager {
             return;
         }
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
+        alterAction.accept(database.getSchema(schemaName));
         if (TableRefreshUtils.isSingleTable(tableOrViewName, database)) {
             database.reloadRules();
         }
-        alterAction.accept(database.getSchema(schemaName));
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
     }
     
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 983f4b84315..97d1c3ef338 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
@@ -26,7 +26,6 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 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.version.MetaDataVersion;
-import 
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
 import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
 import 
org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
@@ -52,7 +51,6 @@ import java.util.Collections;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Properties;
-import java.util.stream.Collectors;
 
 /**
  * Standalone meta data manager persist service.
@@ -118,18 +116,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
             
metaDataPersistService.getDatabaseMetaDataFacade().getView().persist(databaseName,
 renameSchemaName, schema.getAllViews());
         }
         
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName,
 schemaName);
-        renameSchemaMetaData(databaseName, schemaName, renameSchemaName);
-    }
-    
-    private void renameSchemaMetaData(final String databaseName, final String 
schemaName, final String renamedSchemaName) {
-        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().getMetaData();
-        ShardingSphereDatabase database = metaData.getDatabase(databaseName);
-        ShardingSphereSchema schema = database.getSchema(schemaName);
-        ShardingSphereSchema renamedSchema = new 
ShardingSphereSchema(renamedSchemaName, schema.getAllTables(), 
schema.getAllViews());
-        database.addSchema(renamedSchema);
-        database.dropSchema(schemaName);
-        database.reloadRules();
-        metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
+        
metaDataContextManager.getDatabaseMetaDataManager().renameSchema(databaseName, 
schemaName, renameSchemaName);
     }
     
     @Override
@@ -139,16 +126,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     
     private void dropSchema(final String databaseName, final String 
schemaName) {
         
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName,
 schemaName);
-        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().getMetaData();
-        ShardingSphereDatabase database = metaData.getDatabase(databaseName);
-        Collection<String> tobeRemovedTables = 
database.getSchema(schemaName).getAllTables().stream().map(ShardingSphereTable::getName).collect(Collectors.toSet());
-        database.dropSchema(schemaName);
-        
removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class),
 Collections.singleton(schemaName.toLowerCase()), tobeRemovedTables);
-        metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
-    }
-    
-    private void removeDataNode(final Collection<MutableDataNodeRuleAttribute> 
ruleAttributes, final Collection<String> schemaNames, final Collection<String> 
tobeRemovedTables) {
-        tobeRemovedTables.forEach(each -> ruleAttributes.forEach(rule -> 
rule.remove(schemaNames, each)));
+        
metaDataContextManager.getDatabaseMetaDataManager().dropSchema(databaseName, 
schemaName);
     }
     
     @Override
diff --git 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
index 7f135b5eee2..5290541fc91 100644
--- 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
@@ -143,7 +143,8 @@ class StandaloneMetaDataManagerPersistServiceTest {
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new 
ConfigurationProperties(new Properties()));
         
when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
         metaDataManagerPersistService.dropSchema("foo_db", 
Collections.singleton("foo_schema"));
-        verify(database).dropSchema(any());
+        
verify(metaDataPersistService.getDatabaseMetaDataFacade().getSchema()).drop("foo_db",
 "foo_schema");
+        
verify(metaDataContextManager.getDatabaseMetaDataManager()).dropSchema("foo_db",
 "foo_schema");
     }
     
     @Test

Reply via email to