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 4b36746eb80 Move refresh database metadata to MetaDataContextManager 
(#32121)
4b36746eb80 is described below

commit 4b36746eb8078702c0aa41de28d17c1da90c4bfb
Author: Haoran Meng <[email protected]>
AuthorDate: Tue Jul 16 13:08:38 2024 +0800

    Move refresh database metadata to MetaDataContextManager (#32121)
---
 .../scenario/migration/api/MigrationJobAPI.java    |  2 +-
 .../mode/manager/ContextManager.java               | 80 ----------------------
 .../mode/metadata/MetaDataContextManager.java      | 68 ++++++++++++++++++
 .../updatable/RefreshDatabaseMetaDataExecutor.java |  2 +-
 .../updatable/RefreshTableMetaDataExecutor.java    |  2 +-
 5 files changed, 71 insertions(+), 83 deletions(-)

diff --git 
a/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/MigrationJobAPI.java
 
b/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/MigrationJobAPI.java
index ba4e11f69de..580f74ad5f0 100644
--- 
a/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/MigrationJobAPI.java
+++ 
b/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/MigrationJobAPI.java
@@ -288,7 +288,7 @@ public final class MigrationJobAPI implements 
TransmissionJobAPI {
         // TODO use origin database name now, wait reloadDatabaseMetaData fix 
case-sensitive problem
         ContextManager contextManager = 
PipelineContextManager.getContext(PipelineJobIdUtils.parseContextKey(jobId)).getContextManager();
         ShardingSphereDatabase database = 
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName);
-        contextManager.refreshTableMetaData(database);
+        
contextManager.getMetaDataContextManager().refreshTableMetaData(database);
     }
     
     @Override
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 1231a898d22..d2ffe36e458 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
@@ -19,10 +19,7 @@ package org.apache.shardingsphere.mode.manager;
 
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
-import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.NoDatabaseSelectedException;
 import 
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.UnknownDatabaseException;
@@ -32,26 +29,19 @@ import 
org.apache.shardingsphere.infra.instance.metadata.InstanceType;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 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.rule.builder.global.GlobalRulesBuilder;
 import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
 import org.apache.shardingsphere.infra.state.cluster.ClusterState;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.manager.listener.ContextManagerLifecycleListener;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
-import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource;
 import org.apache.shardingsphere.mode.persist.PersistServiceFacade;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 import org.apache.shardingsphere.mode.state.StateContext;
 
 import java.sql.SQLException;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
@@ -128,76 +118,6 @@ public final class ContextManager implements AutoCloseable 
{
         return 
getDatabase(databaseName).getResourceMetaData().getStorageUnits();
     }
     
-    /**
-     * Reload database meta data.
-     *
-     * @param database to be reloaded database
-     * @param force whether to force refresh table metadata
-     */
-    public void refreshDatabaseMetaData(final ShardingSphereDatabase database, 
final boolean force) {
-        try {
-            MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(database);
-            MetaDataPersistService persistService = 
persistServiceFacade.getMetaDataPersistService();
-            if (force) {
-                metaDataContexts.set(reloadedMetaDataContexts);
-                
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
-                        .forEach((schemaName, schema) -> 
persistService.getDatabaseMetaDataService().persistByAlterConfiguration(database.getName(),
 schemaName, schema));
-            } else {
-                deletedSchemaNames(database.getName(), 
reloadedMetaDataContexts.getMetaData().getDatabase(database.getName()), 
database);
-                metaDataContexts.set(reloadedMetaDataContexts);
-                
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
-                        .forEach((schemaName, schema) -> 
persistService.getDatabaseMetaDataService().compareAndPersist(database.getName(),
 schemaName, schema));
-            }
-        } catch (final SQLException ex) {
-            log.error("Refresh database meta data: {} failed", 
database.getName(), ex);
-        }
-    }
-    
-    /**
-     * Reload table meta data.
-     *
-     * @param database to be reloaded database
-     */
-    public void refreshTableMetaData(final ShardingSphereDatabase database) {
-        try {
-            MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(database);
-            deletedSchemaNames(database.getName(), 
reloadedMetaDataContexts.getMetaData().getDatabase(database.getName()), 
database);
-            metaDataContexts.set(reloadedMetaDataContexts);
-            
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
-                    .forEach((schemaName, schema) -> 
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().compareAndPersist(database.getName(),
 schemaName, schema));
-        } catch (final SQLException ex) {
-            log.error("Refresh table meta data: {} failed", 
database.getName(), ex);
-        }
-    }
-    
-    private MetaDataContexts createMetaDataContexts(final 
ShardingSphereDatabase database) throws SQLException {
-        MetaDataPersistService metaDataPersistService = 
persistServiceFacade.getMetaDataPersistService();
-        Map<String, DataSourcePoolProperties> dataSourcePoolPropsFromRegCenter 
= metaDataPersistService.getDataSourceUnitService().load(database.getName());
-        SwitchingResource switchingResource = 
metaDataContextManager.getResourceSwitchManager().switchByAlterStorageUnit(database.getResourceMetaData(),
 dataSourcePoolPropsFromRegCenter);
-        Collection<RuleConfiguration> ruleConfigs = 
metaDataPersistService.getDatabaseRulePersistService().load(database.getName());
-        Map<String, ShardingSphereDatabase> changedDatabases = 
MetaDataContextsFactory
-                .createChangedDatabases(database.getName(), false, 
switchingResource, ruleConfigs, metaDataContexts.get(), metaDataPersistService, 
computeNodeInstanceContext);
-        ConfigurationProperties props = new 
ConfigurationProperties(metaDataPersistService.getPropsService().load());
-        Collection<RuleConfiguration> globalRuleConfigs = 
metaDataPersistService.getGlobalRuleService().load();
-        RuleMetaData changedGlobalMetaData = new 
RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, changedDatabases, 
props));
-        MetaDataContexts result = 
MetaDataContextsFactory.create(metaDataPersistService,
-                new ShardingSphereMetaData(changedDatabases, 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
-        switchingResource.closeStaleDataSources();
-        return result;
-    }
-    
-    /**
-     * Delete schema names.
-     *
-     * @param databaseName database name
-     * @param reloadDatabase reload database
-     * @param currentDatabase current database
-     */
-    public void deletedSchemaNames(final String databaseName, final 
ShardingSphereDatabase reloadDatabase, final ShardingSphereDatabase 
currentDatabase) {
-        
GenericSchemaManager.getToBeDeletedSchemaNames(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas()).keySet()
-                .forEach(each -> 
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataService().dropSchema(databaseName,
 each));
-    }
-    
     /**
      * Reload schema.
      *
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 4eb0b16957b..82200909264 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
@@ -18,9 +18,16 @@
 package org.apache.shardingsphere.mode.metadata;
 
 import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
+import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.metadata.manager.DatabaseRuleConfigurationManager;
 import 
org.apache.shardingsphere.mode.metadata.manager.GlobalConfigurationManager;
@@ -29,14 +36,19 @@ import 
org.apache.shardingsphere.mode.metadata.manager.RuleItemManager;
 import org.apache.shardingsphere.mode.metadata.manager.SchemaMetaDataManager;
 import 
org.apache.shardingsphere.mode.metadata.manager.ShardingSphereDatabaseDataManager;
 import org.apache.shardingsphere.mode.metadata.manager.StorageUnitManager;
+import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Meta data context manager..
  */
 @Getter
+@Slf4j
 public class MetaDataContextManager {
     
     private final AtomicReference<MetaDataContexts> metaDataContexts;
@@ -93,4 +105,60 @@ public class MetaDataContextManager {
     public void renewMetaDataContexts(final MetaDataContexts metaDataContexts) 
{
         this.metaDataContexts.set(metaDataContexts);
     }
+    
+    /**
+     * Reload database meta data.
+     *
+     * @param database to be reloaded database
+     * @param force whether to force refresh table metadata
+     */
+    public void refreshDatabaseMetaData(final ShardingSphereDatabase database, 
final boolean force) {
+        try {
+            MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(database);
+            if (force) {
+                metaDataContexts.set(reloadedMetaDataContexts);
+                
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
+                        .forEach((schemaName, schema) -> 
metaDataPersistService.getDatabaseMetaDataService().persistByAlterConfiguration(database.getName(),
 schemaName, schema));
+            } else {
+                deletedSchemaNames(database.getName(), 
reloadedMetaDataContexts.getMetaData().getDatabase(database.getName()), 
database);
+                metaDataContexts.set(reloadedMetaDataContexts);
+                
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
+                        .forEach((schemaName, schema) -> 
metaDataPersistService.getDatabaseMetaDataService().compareAndPersist(database.getName(),
 schemaName, schema));
+            }
+        } catch (final SQLException ex) {
+            log.error("Refresh database meta data: {} failed", 
database.getName(), ex);
+        }
+    }
+    
+    /**
+     * Reload table meta data.
+     *
+     * @param database to be reloaded database
+     */
+    public void refreshTableMetaData(final ShardingSphereDatabase database) {
+        try {
+            MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(database);
+            deletedSchemaNames(database.getName(), 
reloadedMetaDataContexts.getMetaData().getDatabase(database.getName()), 
database);
+            metaDataContexts.set(reloadedMetaDataContexts);
+            
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
+                    .forEach((schemaName, schema) -> 
metaDataPersistService.getDatabaseMetaDataService().compareAndPersist(database.getName(),
 schemaName, schema));
+        } catch (final SQLException ex) {
+            log.error("Refresh table meta data: {} failed", 
database.getName(), ex);
+        }
+    }
+    
+    private MetaDataContexts createMetaDataContexts(final 
ShardingSphereDatabase database) throws SQLException {
+        Map<String, DataSourcePoolProperties> dataSourcePoolPropsFromRegCenter 
= metaDataPersistService.getDataSourceUnitService().load(database.getName());
+        SwitchingResource switchingResource = 
resourceSwitchManager.switchByAlterStorageUnit(database.getResourceMetaData(), 
dataSourcePoolPropsFromRegCenter);
+        Collection<RuleConfiguration> ruleConfigs = 
metaDataPersistService.getDatabaseRulePersistService().load(database.getName());
+        Map<String, ShardingSphereDatabase> changedDatabases = 
MetaDataContextsFactory
+                .createChangedDatabases(database.getName(), false, 
switchingResource, ruleConfigs, metaDataContexts.get(), metaDataPersistService, 
computeNodeInstanceContext);
+        ConfigurationProperties props = new 
ConfigurationProperties(metaDataPersistService.getPropsService().load());
+        Collection<RuleConfiguration> globalRuleConfigs = 
metaDataPersistService.getGlobalRuleService().load();
+        RuleMetaData changedGlobalMetaData = new 
RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, changedDatabases, 
props));
+        MetaDataContexts result = 
MetaDataContextsFactory.create(metaDataPersistService,
+                new ShardingSphereMetaData(changedDatabases, 
metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), 
changedGlobalMetaData, props));
+        switchingResource.closeStaleDataSources();
+        return result;
+    }
 }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshDatabaseMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshDatabaseMetaDataExecutor.java
index 57453deaf62..6265364c13c 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshDatabaseMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshDatabaseMetaDataExecutor.java
@@ -38,7 +38,7 @@ public final class RefreshDatabaseMetaDataExecutor implements 
DistSQLUpdateExecu
                 .orElseGet(() -> 
contextManager.getMetaDataContexts().getMetaData().getDatabases());
         for (ShardingSphereDatabase each : databases.values()) {
             if (!SystemSchemaUtils.isSystemSchema(each)) {
-                contextManager.refreshDatabaseMetaData(each, 
sqlStatement.isForce());
+                
contextManager.getMetaDataContextManager().refreshDatabaseMetaData(each, 
sqlStatement.isForce());
             }
         }
     }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetaDataExecutor.java
index ca4ef5f0a20..2d0ecfd4159 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetaDataExecutor.java
@@ -56,7 +56,7 @@ public final class RefreshTableMetaDataExecutor implements 
DistSQLUpdateExecutor
         if (sqlStatement.getTableName().isPresent()) {
             contextManager.reloadTable(database, schemaName, 
sqlStatement.getTableName().get());
         } else {
-            contextManager.refreshTableMetaData(database);
+            
contextManager.getMetaDataContextManager().refreshTableMetaData(database);
         }
     }
     

Reply via email to