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 1c3a831b550 Split persistByDropConfiguration and 
persistByAlterConfiguration for DatabaseMetaDataBasedPersistService (#30810)
1c3a831b550 is described below

commit 1c3a831b550eb56d03a5464e5b27ad0798552d8f
Author: zhaojinchao <[email protected]>
AuthorDate: Mon Apr 8 23:34:48 2024 +0800

    Split persistByDropConfiguration and persistByAlterConfiguration for 
DatabaseMetaDataBasedPersistService (#30810)
---
 .../DatabaseMetaDataBasedPersistService.java       | 14 ++++-
 .../database/DatabaseMetaDataPersistService.java   | 65 +++-------------------
 .../mode/manager/ContextManager.java               |  2 +-
 .../context/ConfigurationContextManager.java       | 26 ++++-----
 .../mode/metadata/MetaDataContextsFactory.java     | 12 +---
 .../manager/cluster/ClusterModeContextManager.java |  2 +-
 .../standalone/StandaloneModeContextManager.java   |  6 +-
 7 files changed, 39 insertions(+), 88 deletions(-)

diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataBasedPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataBasedPersistService.java
index 0e749bd2dcb..3eab43302f2 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataBasedPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/database/DatabaseMetaDataBasedPersistService.java
@@ -26,7 +26,6 @@ import java.util.Collection;
 import java.util.Map;
 
 /**
- * TODO replace the old implementation after meta data refactor completed
  * Database meta data based registry service.
  */
 public interface DatabaseMetaDataBasedPersistService {
@@ -78,13 +77,22 @@ public interface DatabaseMetaDataBasedPersistService {
     void compareAndPersist(String databaseName, String schemaName, 
ShardingSphereSchema schema);
     
     /**
-     * Persist schema meta data.
+     * Persist schema meta data by alter configuration.
      *
      * @param databaseName database name
      * @param schemaName schema name
      * @param schema schema meta data
      */
-    void persist(String databaseName, String schemaName, ShardingSphereSchema 
schema);
+    void persistByAlterConfiguration(String databaseName, String schemaName, 
ShardingSphereSchema schema);
+    
+    /**
+     * Persist schema meta data by drop configuration.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     * @param schema schema meta data
+     */
+    void persistByDropConfiguration(String databaseName, String schemaName, 
ShardingSphereSchema schema);
     
     /**
      * Delete schema meta data.
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 3f5c40a3140..1115177ad4b 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
@@ -52,69 +52,35 @@ public final class DatabaseMetaDataPersistService 
implements DatabaseMetaDataBas
         this.metaDataVersionPersistService = metaDataVersionPersistService;
     }
     
-    /**
-     * Add database name.
-     * 
-     * @param databaseName database name
-     */
     @Override
     public void addDatabase(final String databaseName) {
         
repository.persist(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), "");
     }
     
-    /**
-     * Drop database.
-     *
-     * @param databaseName database name to be deleted
-     */
     @Override
     public void dropDatabase(final String databaseName) {
         
repository.delete(DatabaseMetaDataNode.getDatabaseNamePath(databaseName));
     }
     
-    /**
-     * Load all database names.
-     *
-     * @return all database names
-     */
     @Override
     public Collection<String> loadAllDatabaseNames() {
         return 
repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataNode());
     }
     
-    /**
-     * Add schema.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     */
     @Override
     public void addSchema(final String databaseName, final String schemaName) {
         
repository.persist(DatabaseMetaDataNode.getMetaDataTablesPath(databaseName, 
schemaName), "");
     }
     
-    /**
-     * Drop schema.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     */
     @Override
     public void dropSchema(final String databaseName, final String schemaName) 
{
         
repository.delete(DatabaseMetaDataNode.getMetaDataSchemaPath(databaseName, 
schemaName));
     }
     
-    /**
-     * Compare and persist schema meta data.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     * @param schema schema meta data
-     */
     @Override
     public void compareAndPersist(final String databaseName, final String 
schemaName, final ShardingSphereSchema schema) {
         if (schema.getTables().isEmpty() && schema.getViews().isEmpty()) {
-            return;
+            addSchema(databaseName, schemaName);
         }
         Map<String, ShardingSphereTable> currentTables = 
tableMetaDataPersistService.load(databaseName, schemaName);
         
metaDataVersionPersistService.switchActiveVersion(tableMetaDataPersistService
@@ -122,39 +88,24 @@ public final class DatabaseMetaDataPersistService 
implements DatabaseMetaDataBas
         GenericSchemaManager.getToBeDeletedTables(schema.getTables(), 
currentTables).forEach((key, value) -> 
tableMetaDataPersistService.delete(databaseName, schemaName, key));
     }
     
-    /**
-     * Persist schema meta data.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     * @param schema schema meta data
-     */
     @Override
-    public void persist(final String databaseName, final String schemaName, 
final ShardingSphereSchema schema) {
+    public void persistByAlterConfiguration(final String databaseName, final 
String schemaName, final ShardingSphereSchema schema) {
         if (schema.getTables().isEmpty() && schema.getViews().isEmpty()) {
-            return;
+            addSchema(databaseName, schemaName);
         }
         
metaDataVersionPersistService.switchActiveVersion(tableMetaDataPersistService.persistSchemaMetaData(databaseName,
 schemaName, schema.getTables()));
     }
     
-    /**
-     * Delete schema meta data.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     * @param schema schema meta data
-     */
+    @Override
+    public void persistByDropConfiguration(final String databaseName, final 
String schemaName, final ShardingSphereSchema schema) {
+        
metaDataVersionPersistService.switchActiveVersion(tableMetaDataPersistService.persistSchemaMetaData(databaseName,
 schemaName, schema.getTables()));
+    }
+    
     @Override
     public void delete(final String databaseName, final String schemaName, 
final ShardingSphereSchema schema) {
         schema.getTables().forEach((key, value) -> 
tableMetaDataPersistService.delete(databaseName, schemaName, key));
     }
     
-    /**
-     * Load schema meta data.
-     *
-     * @param databaseName database name
-     * @return schema meta data
-     */
     @Override
     public Map<String, ShardingSphereSchema> loadSchemas(final String 
databaseName) {
         Collection<String> schemaNames = loadAllSchemaNames(databaseName);
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index f7b34c1f323..ba07398303c 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -137,7 +137,7 @@ public final class ContextManager implements AutoCloseable {
             MetaDataBasedPersistService persistService = 
metaDataContexts.get().getPersistService();
             if (force) {
                 metaDataContexts.set(reloadedMetaDataContexts);
-                database.getSchemas().forEach((schemaName, schema) -> 
persistService.getDatabaseMetaDataService().persist(database.getName(), 
schemaName, schema));
+                database.getSchemas().forEach((schemaName, schema) -> 
persistService.getDatabaseMetaDataService().persistByAlterConfiguration(database.getName(),
 schemaName, schema));
             } else {
                 deletedSchemaNames(database.getName(), 
reloadedMetaDataContexts.getMetaData().getDatabase(database.getName()), 
database);
                 metaDataContexts.set(reloadedMetaDataContexts);
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
index 4ce36aed639..373edadd894 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
@@ -123,8 +123,7 @@ public final class ConfigurationContextManager {
     private void buildNewMetaDataContext(final String databaseName, final 
SwitchingResource switchingResource, final boolean isDropConfig) throws 
SQLException {
         
metaDataContexts.get().getMetaData().getDatabases().putAll(renewDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName),
 switchingResource));
         MetaDataContexts reloadMetaDataContexts = 
createMetaDataContexts(databaseName, false, switchingResource, null);
-        
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
 schema) -> 
reloadMetaDataContexts.getPersistService().getDatabaseMetaDataService()
-                
.persist(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
+        persistSchemaMetaData(databaseName, reloadMetaDataContexts, 
isDropConfig);
         
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
                 .ifPresent(optional -> 
optional.getSchemaData().forEach((schemaName, schemaData) -> 
reloadMetaDataContexts.getPersistService().getShardingSphereDataPersistService()
                         .persist(databaseName, schemaName, schemaData, 
metaDataContexts.get().getMetaData().getDatabases())));
@@ -134,6 +133,16 @@ public final class ConfigurationContextManager {
         switchingResource.closeStaleDataSources();
     }
     
+    private void persistSchemaMetaData(final String databaseName, final 
MetaDataContexts reloadMetaDataContexts, final boolean isDropConfig) {
+        if (isDropConfig) {
+            
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
 schema) -> 
reloadMetaDataContexts.getPersistService().getDatabaseMetaDataService()
+                    
.persistByDropConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
+        } else {
+            
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
 schema) -> 
reloadMetaDataContexts.getPersistService().getDatabaseMetaDataService()
+                    
.persistByAlterConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
+        }
+    }
+    
     /**
      * Alter rule configuration.
      *
@@ -228,22 +237,13 @@ public final class ConfigurationContextManager {
         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) -> 
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().persist(databaseName,
 key, value));
+            toBeAddedSchemas.forEach((key, value) -> 
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().persistByDropConfiguration(databaseName,
 key, value));
         } else {
-            alterSchemaMetaData(databaseName, toBeAddedSchemas);
+            toBeAddedSchemas.forEach((key, value) -> 
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(databaseName,
 key, value));
         }
         toBeAlterSchemas.forEach((key, value) -> 
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().delete(databaseName,
 key, value));
     }
     
-    private void alterSchemaMetaData(final String databaseName, final 
Map<String, ShardingSphereSchema> toBeAddedSchemas) {
-        for (Entry<String, ShardingSphereSchema> entry : 
toBeAddedSchemas.entrySet()) {
-            if (entry.getValue().getTables().isEmpty() && 
entry.getValue().getViews().isEmpty()) {
-                
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().addSchema(databaseName,
 entry.getKey());
-            }
-            
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().persist(databaseName,
 entry.getKey(), entry.getValue());
-        }
-    }
-    
     /**
      * Renew ShardingSphere databases.
      *
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 2ebef6ecac8..1edba228140 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
@@ -33,13 +33,11 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import org.apache.shardingsphere.infra.state.datasource.DataSourceState;
 import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
 import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
 import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
-import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
@@ -165,15 +163,9 @@ public final class MetaDataContextsFactory {
     }
     
     private static void persistMetaData(final MetaDataContexts 
metaDataContexts) {
-        metaDataContexts.getMetaData().getDatabases().values().forEach(each -> 
persistMetaData(each.getName(), each.getSchemas(), 
metaDataContexts.getPersistService()));
+        metaDataContexts.getMetaData().getDatabases().values().forEach(each -> 
each.getSchemas()
+                .forEach((schemaName, schema) -> 
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(each.getName(),
 schemaName, schema)));
         
metaDataContexts.getStatistics().getDatabaseData().forEach((databaseName, 
databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) 
-> metaDataContexts
                 
.getPersistService().getShardingSphereDataPersistService().persist(databaseName,
 schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
     }
-    
-    private static void persistMetaData(final String databaseName, final 
Map<String, ShardingSphereSchema> schemas, final MetaDataBasedPersistService 
metaDataBasedPersistService) {
-        for (Entry<String, ShardingSphereSchema> entry : schemas.entrySet()) {
-            
metaDataBasedPersistService.getDatabaseMetaDataService().addSchema(databaseName,
 entry.getKey());
-            
metaDataBasedPersistService.getDatabaseMetaDataService().persist(databaseName, 
entry.getKey(), entry.getValue());
-        }
-    }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
index 0ca8b9af456..bc6f58179a1 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
@@ -69,7 +69,7 @@ public final class ClusterModeContextManager implements 
ModeContextManager, Cont
         String schemaName = alterSchemaPOJO.getSchemaName();
         ShardingSphereSchema schema = 
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName);
         DatabaseMetaDataBasedPersistService databaseMetaDataService = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
-        databaseMetaDataService.persist(databaseName, 
alterSchemaPOJO.getRenameSchemaName(), schema);
+        databaseMetaDataService.persistByAlterConfiguration(databaseName, 
alterSchemaPOJO.getRenameSchemaName(), schema);
         
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName, 
alterSchemaPOJO.getRenameSchemaName(), schema.getViews());
         databaseMetaDataService.dropSchema(databaseName, schemaName);
     }
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
index fbbd964bf8f..c6cd7983628 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
@@ -86,7 +86,7 @@ public final class StandaloneModeContextManager implements 
ModeContextManager, C
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         database.addSchema(schemaName, schema);
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
-        
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().persist(databaseName,
 schemaName, schema);
+        
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(databaseName,
 schemaName, schema);
     }
     
     @Override
@@ -97,7 +97,7 @@ public final class StandaloneModeContextManager implements 
ModeContextManager, C
         removeSchemaMetaData(database, alterSchemaPOJO.getSchemaName());
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
         DatabaseMetaDataBasedPersistService databaseMetaDataService = 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
-        databaseMetaDataService.persist(alterSchemaPOJO.getDatabaseName(), 
alterSchemaPOJO.getRenameSchemaName(), 
database.getSchema(alterSchemaPOJO.getRenameSchemaName()));
+        
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());
@@ -217,7 +217,7 @@ public final class StandaloneModeContextManager implements 
ModeContextManager, C
                 .forEach(each -> ((GlobalRule) 
each).refresh(contextManager.getMetaDataContexts().getMetaData().getDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
         
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchemas()
                 .forEach((schemaName, schema) -> 
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService()
-                        
.persist(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
+                        
.persistByAlterConfiguration(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
 schemaName, schema));
         DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>> 
dataSourceService = 
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService();
         
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(dataSourceService.persistConfig(databaseName,
 toBeRegisteredProps));
         clearServiceCache();

Reply via email to