This is an automated email from the ASF dual-hosted git repository.

zhaojinchao 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 ee3b43004a5 Fix sonar issue, use different methods to instead of 
isDropConfig (#32170)
ee3b43004a5 is described below

commit ee3b43004a58bd0d0890e46e6a9ed7ab2a50c1b8
Author: Haoran Meng <[email protected]>
AuthorDate: Thu Jul 18 17:20:55 2024 +0800

    Fix sonar issue, use different methods to instead of isDropConfig (#32170)
    
    * Fix sonar issue, use different methods to instead of isDropConfig
    
    * Fix sonar issue, use different methods to instead of isDropConfig
---
 .../schema/model/ShardingSphereSchema.java         |  8 +++++
 .../database/type/AlterDatabaseRuleOperator.java   |  2 +-
 .../database/type/CreateDatabaseRuleOperator.java  |  2 +-
 .../database/type/DropDatabaseRuleOperator.java    |  4 +--
 .../rdl/resource/AlterStorageUnitExecutor.java     |  2 +-
 .../rdl/resource/RegisterStorageUnitExecutor.java  |  2 +-
 .../resource/UnregisterStorageUnitExecutor.java    |  2 +-
 .../metadata/persist/MetaDataPersistService.java   | 30 +++++++++++-----
 .../database/DatabaseMetaDataPersistService.java   | 25 -------------
 .../mode/metadata/MetaDataContextManager.java      |  7 +++-
 .../mode/metadata/MetaDataContextsFactory.java     |  8 +++--
 .../service/MetaDataManagerPersistService.java     | 24 ++++++++++---
 .../ListenerAssistedDispatchEventBuilder.java      |  2 +-
 .../ClusterMetaDataManagerPersistService.java      | 42 +++++++++++++---------
 .../StandaloneMetaDataManagerPersistService.java   | 27 +++++++++-----
 15 files changed, 113 insertions(+), 74 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
index 10bdac8ac12..0f997f27083 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
@@ -197,4 +197,12 @@ public final class ShardingSphereSchema {
     public List<String> getVisibleColumnNames(final String tableName) {
         return containsTable(tableName) ? 
getTable(tableName).getVisibleColumns() : Collections.emptyList();
     }
+    
+    /**
+     *  Schema is empty or not.
+     * @return true if tables and views are all empty, else false
+     */
+    public boolean isEmpty() {
+        return tables.isEmpty() && views.isEmpty();
+    }
 }
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/AlterDatabaseRuleOperator.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/AlterDatabaseRuleOperator.java
index af775294f7f..5666d5aa196 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/AlterDatabaseRuleOperator.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/AlterDatabaseRuleOperator.java
@@ -57,7 +57,7 @@ public final class AlterDatabaseRuleOperator implements 
DatabaseRuleOperator {
         MetaDataContexts originalMetaDataContexts = 
contextManager.getMetaDataContexts();
         
metaDataManagerPersistService.removeRuleConfigurationItem(database.getName(), 
toBeDroppedRuleConfig);
         Collection<MetaDataVersion> result = 
metaDataManagerPersistService.alterRuleConfiguration(database.getName(), 
decorateRuleConfiguration(database, toBeAlteredRuleConfig));
-        
metaDataManagerPersistService.afterRuleConfigurationAltered(database.getName(), 
originalMetaDataContexts, false);
+        
metaDataManagerPersistService.afterRuleConfigurationAltered(database.getName(), 
originalMetaDataContexts);
         return result;
     }
     
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/CreateDatabaseRuleOperator.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/CreateDatabaseRuleOperator.java
index a3db2487057..c83c6abf616 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/CreateDatabaseRuleOperator.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/CreateDatabaseRuleOperator.java
@@ -55,7 +55,7 @@ public final class CreateDatabaseRuleOperator implements 
DatabaseRuleOperator {
         MetaDataContexts originalMetaDataContexts = 
contextManager.getMetaDataContexts();
         MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService();
         Collection<MetaDataVersion> result = 
metaDataManagerPersistService.alterRuleConfiguration(database.getName(), 
decorateRuleConfiguration(database, toBeCreatedRuleConfig));
-        
metaDataManagerPersistService.afterRuleConfigurationAltered(database.getName(), 
originalMetaDataContexts, false);
+        
metaDataManagerPersistService.afterRuleConfigurationAltered(database.getName(), 
originalMetaDataContexts);
         return result;
     }
     
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
index d55abf3acb5..289e4f7bc66 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
@@ -71,11 +71,11 @@ public final class DropDatabaseRuleOperator implements 
DatabaseRuleOperator {
         if (null != toBeAlteredRuleConfig && ((DatabaseRuleConfiguration) 
toBeAlteredRuleConfig).isEmpty()) {
             YamlRuleConfiguration yamlRuleConfig = new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(currentRuleConfig);
             
metaDataManagerPersistService.removeRuleConfiguration(database.getName(), 
Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RepositoryTupleEntity.class)).value());
-            
metaDataManagerPersistService.afterRuleConfigurationAltered(database.getName(), 
originalMetaDataContexts, true);
+            
metaDataManagerPersistService.afterRuleConfigurationDropped(database.getName(), 
originalMetaDataContexts);
             return Collections.emptyList();
         }
         Collection<MetaDataVersion> result = 
metaDataManagerPersistService.alterRuleConfiguration(database.getName(), 
toBeAlteredRuleConfig);
-        
metaDataManagerPersistService.afterRuleConfigurationAltered(database.getName(), 
originalMetaDataContexts, false);
+        
metaDataManagerPersistService.afterRuleConfigurationAltered(database.getName(), 
originalMetaDataContexts);
         return result;
     }
 }
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/AlterStorageUnitExecutor.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/AlterStorageUnitExecutor.java
index 82791ab55c8..cc06b9d97dd 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/AlterStorageUnitExecutor.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/AlterStorageUnitExecutor.java
@@ -68,7 +68,7 @@ public final class AlterStorageUnitExecutor implements 
DistSQLUpdateExecutor<Alt
         try {
             MetaDataContexts originalMetaDataContexts = 
contextManager.getMetaDataContexts();
             
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService().alterStorageUnits(database.getName(),
 propsMap);
-            
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService().afterStorageUnitsAltered(database.getName(),
 originalMetaDataContexts, false);
+            
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService().afterStorageUnitsAltered(database.getName(),
 originalMetaDataContexts);
         } catch (final SQLException | ShardingSphereExternalException ex) {
             throw new StorageUnitsOperateException("alter", propsMap.keySet(), 
ex);
         }
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/RegisterStorageUnitExecutor.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/RegisterStorageUnitExecutor.java
index a0e15507fa1..594b0b3d2c7 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/RegisterStorageUnitExecutor.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/RegisterStorageUnitExecutor.java
@@ -70,7 +70,7 @@ public final class RegisterStorageUnitExecutor implements 
DistSQLUpdateExecutor<
         try {
             MetaDataContexts originalMetaDataContexts = 
contextManager.getMetaDataContexts();
             
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService().registerStorageUnits(database.getName(),
 propsMap);
-            
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService().afterStorageUnitsAltered(database.getName(),
 originalMetaDataContexts, false);
+            
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService().afterStorageUnitsAltered(database.getName(),
 originalMetaDataContexts);
         } catch (final SQLException | ShardingSphereExternalException ex) {
             throw new StorageUnitsOperateException("register", 
propsMap.keySet(), ex);
         }
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/UnregisterStorageUnitExecutor.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/UnregisterStorageUnitExecutor.java
index 7bdcfc73669..de16753f1a7 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/UnregisterStorageUnitExecutor.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rdl/resource/UnregisterStorageUnitExecutor.java
@@ -60,7 +60,7 @@ public final class UnregisterStorageUnitExecutor implements 
DistSQLUpdateExecuto
         try {
             MetaDataContexts originalMetaDataContexts = 
contextManager.getMetaDataContexts();
             
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService().unregisterStorageUnits(database.getName(),
 sqlStatement.getStorageUnitNames());
-            
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService().afterStorageUnitsAltered(database.getName(),
 originalMetaDataContexts, true);
+            
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService().afterStorageUnitsDropped(database.getName(),
 originalMetaDataContexts);
         } catch (final SQLException | ShardingSphereServerException ex) {
             throw new StorageUnitsOperateException("unregister", 
sqlStatement.getStorageUnitNames(), ex);
         }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
index 08c5188aed3..acb5da8c3f5 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
@@ -142,21 +142,35 @@ public final class MetaDataPersistService {
     }
     
     /**
-     * Persist meta data by reload sharding sphere database.
+     * Persist reload meta data by alter.
      *
      * @param databaseName database name
      * @param reloadDatabase reload database
      * @param currentDatabase current database
-     * @param isDropConfig is drop config
      */
-    public void persistMetaDataByReloadDatabase(final String databaseName, 
final ShardingSphereDatabase reloadDatabase, final ShardingSphereDatabase 
currentDatabase, final boolean isDropConfig) {
+    public void persistReloadDatabaseByAlter(final String databaseName, final 
ShardingSphereDatabase reloadDatabase, final ShardingSphereDatabase 
currentDatabase) {
         Map<String, ShardingSphereSchema> toBeAlterSchemas = 
GenericSchemaManager.getToBeDeletedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
         Map<String, ShardingSphereSchema> toBeAddedSchemas = 
GenericSchemaManager.getToBeAddedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
-        if (isDropConfig) {
-            toBeAddedSchemas.forEach((key, value) -> 
databaseMetaDataService.persistByDropConfiguration(databaseName, key, value));
-        } else {
-            toBeAddedSchemas.forEach((key, value) -> 
databaseMetaDataService.persistByAlterConfiguration(databaseName, key, value));
-        }
+        toBeAddedSchemas.forEach((schemaName, schema) -> {
+            if (schema.isEmpty()) {
+                databaseMetaDataService.addSchema(databaseName, schemaName);
+            }
+            
databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName, 
schemaName, schema.getTables());
+        });
+        toBeAlterSchemas.forEach((key, value) -> 
databaseMetaDataService.delete(databaseName, key, value));
+    }
+    
+    /**
+     * Persist reload meta data by drop.
+     *
+     * @param databaseName database name
+     * @param reloadDatabase reload database
+     * @param currentDatabase current database
+     */
+    public void persistReloadDatabaseByDrop(final String databaseName, final 
ShardingSphereDatabase reloadDatabase, final ShardingSphereDatabase 
currentDatabase) {
+        Map<String, ShardingSphereSchema> toBeAlterSchemas = 
GenericSchemaManager.getToBeDeletedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
+        Map<String, ShardingSphereSchema> toBeAddedSchemas = 
GenericSchemaManager.getToBeAddedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
+        toBeAddedSchemas.forEach((key, value) -> 
databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName, 
key, value.getTables()));
         toBeAlterSchemas.forEach((key, value) -> 
databaseMetaDataService.delete(databaseName, key, value));
     }
 }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
index 359a4c8ac90..c7247f7f2a5 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataPersistService.java
@@ -115,31 +115,6 @@ public final class DatabaseMetaDataPersistService {
         GenericSchemaManager.getToBeDeletedTables(schema.getTables(), 
currentTables).forEach((key, value) -> 
tableMetaDataPersistService.delete(databaseName, schemaName, key));
     }
     
-    /**
-     * Persist by alter configuration.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     * @param schema schema meta data
-     */
-    public void persistByAlterConfiguration(final String databaseName, final 
String schemaName, final ShardingSphereSchema schema) {
-        if (schema.getTables().isEmpty() && schema.getViews().isEmpty()) {
-            addSchema(databaseName, schemaName);
-        }
-        tableMetaDataPersistService.persist(databaseName, schemaName, 
schema.getTables());
-    }
-    
-    /**
-     * Persist by drop configuration.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     * @param schema schema meta data
-     */
-    public void persistByDropConfiguration(final String databaseName, final 
String schemaName, final ShardingSphereSchema schema) {
-        tableMetaDataPersistService.persist(databaseName, schemaName, 
schema.getTables());
-    }
-    
     /**
      * Delete schema metadata.
      *
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
index 439119721b7..0ff49fa206e 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
@@ -116,7 +116,12 @@ public class MetaDataContextManager {
             MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(database);
             metaDataContexts.set(reloadedMetaDataContexts);
             
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
-                    .forEach((schemaName, schema) -> 
metaDataPersistService.getDatabaseMetaDataService().persistByAlterConfiguration(database.getName(),
 schemaName, schema));
+                    .forEach((schemaName, schema) -> {
+                        if (schema.isEmpty()) {
+                            
metaDataPersistService.getDatabaseMetaDataService().addSchema(database.getName(),
 schemaName);
+                        }
+                        
metaDataPersistService.getDatabaseMetaDataService().getTableMetaDataPersistService().persist(database.getName(),
 schemaName, schema.getTables());
+                    });
         } catch (final SQLException ex) {
             log.error("Refresh database meta data: {} failed", 
database.getName(), ex);
         }
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 c90bd7f6bb5..338b12a6b34 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
@@ -191,8 +191,12 @@ public final class MetaDataContextsFactory {
     }
     
     private static void persistMetaData(final MetaDataContexts 
metaDataContexts, final MetaDataPersistService persistService) {
-        metaDataContexts.getMetaData().getDatabases().values().forEach(each -> 
each.getSchemas().forEach((schemaName, schema) -> 
persistService.getDatabaseMetaDataService()
-                .persistByAlterConfiguration(each.getName(), schemaName, 
schema)));
+        metaDataContexts.getMetaData().getDatabases().values().forEach(each -> 
each.getSchemas().forEach((schemaName, schema) -> {
+            if (schema.isEmpty()) {
+                
persistService.getDatabaseMetaDataService().addSchema(each.getName(), 
schemaName);
+            }
+            
persistService.getDatabaseMetaDataService().getTableMetaDataPersistService().persist(each.getName(),
 schemaName, schema.getTables());
+        }));
         
metaDataContexts.getStatistics().getDatabaseData().forEach((databaseName, 
databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) 
-> persistService
                 .getShardingSphereDataPersistService().persist(databaseName, 
schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
     }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
index 7afc2b36c4d..6286000b320 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
@@ -159,9 +159,17 @@ public interface MetaDataManagerPersistService {
      *
      * @param databaseName database name
      * @param originalMetaDataContexts original meta data contexts
-     * @param isDropConfig is drop config
      */
-    default void afterStorageUnitsAltered(String databaseName, 
MetaDataContexts originalMetaDataContexts, boolean isDropConfig) {
+    default void afterStorageUnitsAltered(String databaseName, 
MetaDataContexts originalMetaDataContexts) {
+    }
+    
+    /**
+     * After storage units dropped.
+     *
+     * @param databaseName database name
+     * @param originalMetaDataContexts original meta data contexts
+     */
+    default void afterStorageUnitsDropped(String databaseName, 
MetaDataContexts originalMetaDataContexts) {
     }
     
     /**
@@ -169,8 +177,16 @@ public interface MetaDataManagerPersistService {
      *
      * @param databaseName database name
      * @param originalMetaDataContexts original meta data contexts
-     * @param isDropConfig is drop config
      */
-    default void afterRuleConfigurationAltered(String databaseName, 
MetaDataContexts originalMetaDataContexts, boolean isDropConfig) {
+    default void afterRuleConfigurationAltered(String databaseName, 
MetaDataContexts originalMetaDataContexts) {
+    }
+    
+    /**
+     * After rule configuration dropped.
+     *
+     * @param databaseName database name
+     * @param originalMetaDataContexts original meta data contexts
+     */
+    default void afterRuleConfigurationDropped(String databaseName, 
MetaDataContexts originalMetaDataContexts) {
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/builder/ListenerAssistedDispatchEventBuilder.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/builder/ListenerAssistedDispatchEventBuilder.java
index cbd24d82afc..0d4d8ad7a33 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/builder/ListenerAssistedDispatchEventBuilder.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/builder/ListenerAssistedDispatchEventBuilder.java
@@ -35,7 +35,7 @@ import java.util.Optional;
 /**
  * Listener assisted dispatch event builder.
  */
-public class ListenerAssistedDispatchEventBuilder implements 
DispatchEventBuilder<DispatchEvent> {
+public final class ListenerAssistedDispatchEventBuilder implements 
DispatchEventBuilder<DispatchEvent> {
     
     @Override
     public Collection<String> getSubscribedKeys() {
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
index cf3fde51854..ccb052005de 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
@@ -85,7 +85,10 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
         String schemaName = alterSchemaPOJO.getSchemaName();
         ShardingSphereSchema schema = 
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getSchema(schemaName);
         DatabaseMetaDataPersistService databaseMetaDataService = 
metaDataPersistService.getDatabaseMetaDataService();
-        databaseMetaDataService.persistByAlterConfiguration(databaseName, 
alterSchemaPOJO.getRenameSchemaName(), schema);
+        if (schema.isEmpty()) {
+            databaseMetaDataService.addSchema(databaseName, 
alterSchemaPOJO.getRenameSchemaName());
+        }
+        
databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName, 
alterSchemaPOJO.getRenameSchemaName(), schema.getTables());
         
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName, 
alterSchemaPOJO.getRenameSchemaName(), schema.getViews());
         databaseMetaDataService.dropSchema(databaseName, schemaName);
     }
@@ -172,31 +175,36 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     }
     
     @Override
-    public void afterStorageUnitsAltered(final String databaseName, final 
MetaDataContexts originalMetaDataContexts, final boolean isDropConfig) {
+    public void afterStorageUnitsAltered(final String databaseName, final 
MetaDataContexts originalMetaDataContexts) {
         MetaDataContexts reloadMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
-        // TODO Confirm if it should be persisted twice
-        persistSchemaMetaData(databaseName, reloadMetaDataContexts, 
isDropConfig);
         
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
                 .ifPresent(optional -> 
optional.getSchemaData().forEach((schemaName, schemaData) -> 
metaDataPersistService.getShardingSphereDataPersistService()
                         .persist(databaseName, schemaName, schemaData, 
originalMetaDataContexts.getMetaData().getDatabases())));
-        metaDataPersistService.persistMetaDataByReloadDatabase(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
-                
originalMetaDataContexts.getMetaData().getDatabase(databaseName), isDropConfig);
+        metaDataPersistService.persistReloadDatabaseByAlter(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
+                
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
     }
     
     @Override
-    public void afterRuleConfigurationAltered(final String databaseName, final 
MetaDataContexts originalMetaDataContexts, final boolean isDropConfig) {
+    public void afterStorageUnitsDropped(final String databaseName, final 
MetaDataContexts originalMetaDataContexts) {
         MetaDataContexts reloadMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
-        metaDataPersistService.persistMetaDataByReloadDatabase(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
-                
originalMetaDataContexts.getMetaData().getDatabase(databaseName), isDropConfig);
+        
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
+                .ifPresent(optional -> 
optional.getSchemaData().forEach((schemaName, schemaData) -> 
metaDataPersistService.getShardingSphereDataPersistService()
+                        .persist(databaseName, schemaName, schemaData, 
originalMetaDataContexts.getMetaData().getDatabases())));
+        metaDataPersistService.persistReloadDatabaseByDrop(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
+                
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
     }
     
-    private void persistSchemaMetaData(final String databaseName, final 
MetaDataContexts reloadMetaDataContexts, final boolean isDropConfig) {
-        if (isDropConfig) {
-            
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
 schema) -> metaDataPersistService.getDatabaseMetaDataService()
-                    
.persistByDropConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
-        } else {
-            
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
 schema) -> metaDataPersistService.getDatabaseMetaDataService()
-                    
.persistByAlterConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
-        }
+    @Override
+    public void afterRuleConfigurationAltered(final String databaseName, final 
MetaDataContexts originalMetaDataContexts) {
+        MetaDataContexts reloadMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
+        metaDataPersistService.persistReloadDatabaseByAlter(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
+                
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
+    }
+    
+    @Override
+    public void afterRuleConfigurationDropped(final String databaseName, final 
MetaDataContexts originalMetaDataContexts) {
+        MetaDataContexts reloadMetaDataContexts = 
metaDataContextManager.getMetaDataContexts().get();
+        metaDataPersistService.persistReloadDatabaseByDrop(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
+                
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
     }
 }
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
index f63a34fe3c8..1a9fee7b95e 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
@@ -98,7 +98,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         database.addSchema(schemaName, schema);
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
-        
metaDataPersistService.getDatabaseMetaDataService().persistByAlterConfiguration(databaseName,
 schemaName, schema);
+        
metaDataPersistService.getDatabaseMetaDataService().addSchema(databaseName, 
schemaName);
     }
     
     @Override
@@ -109,10 +109,15 @@ public final class 
StandaloneMetaDataManagerPersistService implements MetaDataMa
         removeSchemaMetaData(database, alterSchemaPOJO.getSchemaName());
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
         DatabaseMetaDataPersistService databaseMetaDataService = 
metaDataPersistService.getDatabaseMetaDataService();
-        
databaseMetaDataService.persistByAlterConfiguration(alterSchemaPOJO.getDatabaseName(),
 alterSchemaPOJO.getRenameSchemaName(), 
database.getSchema(alterSchemaPOJO.getRenameSchemaName()));
-        
databaseMetaDataService.getViewMetaDataPersistService().persist(alterSchemaPOJO.getDatabaseName(),
 alterSchemaPOJO.getRenameSchemaName(),
-                
database.getSchema(alterSchemaPOJO.getRenameSchemaName()).getViews());
-        databaseMetaDataService.dropSchema(alterSchemaPOJO.getDatabaseName(), 
alterSchemaPOJO.getSchemaName());
+        ShardingSphereSchema alteredSchema = 
database.getSchema(alterSchemaPOJO.getRenameSchemaName());
+        String databaseName = alterSchemaPOJO.getDatabaseName();
+        String alteredSchemaName = alterSchemaPOJO.getRenameSchemaName();
+        if (alteredSchema.isEmpty()) {
+            databaseMetaDataService.addSchema(databaseName, alteredSchemaName);
+        }
+        
databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName, 
alteredSchemaName, alteredSchema.getTables());
+        
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName, 
alteredSchemaName, alteredSchema.getViews());
+        databaseMetaDataService.dropSchema(databaseName, 
alterSchemaPOJO.getSchemaName());
     }
     
     private void putSchemaMetaData(final ShardingSphereDatabase database, 
final String schemaName, final String renameSchemaName, final String 
logicDataSourceName) {
@@ -230,8 +235,12 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
         
metaDataContextManager.getMetaDataContexts().get().getMetaData().getGlobalRuleMetaData().getRules()
                 .forEach(each -> ((GlobalRule) 
each).refresh(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
         
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getSchemas()
-                .forEach((schemaName, schema) -> 
metaDataPersistService.getDatabaseMetaDataService()
-                        
.persistByAlterConfiguration(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
+                .forEach((schemaName, schema) -> {
+                    if (schema.isEmpty()) {
+                        
metaDataPersistService.getDatabaseMetaDataService().addSchema(databaseName, 
schemaName);
+                    }
+                    
metaDataPersistService.getDatabaseMetaDataService().getTableMetaDataPersistService().persist(databaseName,
 schemaName, schema.getTables());
+                });
         DataSourceUnitPersistService dataSourceService = 
metaDataPersistService.getDataSourceUnitService();
         metaDataPersistService.getMetaDataVersionPersistService()
                 
.switchActiveVersion(dataSourceService.persistConfigurations(databaseName, 
toBeRegisteredProps));
@@ -260,8 +269,8 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
                 .getDatabase(databaseName).getResourceMetaData(), 
toBeDroppedStorageUnitNames);
         MetaDataContexts reloadMetaDataContexts = 
MetaDataContextsFactory.createBySwitchResource(databaseName, false, 
switchingResource,
                 metaDataContextManager.getMetaDataContexts().get(), 
metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
-        metaDataPersistService.persistMetaDataByReloadDatabase(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
-                
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName),
 true);
+        metaDataPersistService.persistReloadDatabaseByDrop(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
+                
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName));
         metaDataContextManager.deletedSchemaNames(databaseName, 
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
                 
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName));
         metaDataContextManager.renewMetaDataContexts(reloadMetaDataContexts);


Reply via email to