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

sunnianjun 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 6c4526edc3a Refactor ContextManager (#28202)
6c4526edc3a is described below

commit 6c4526edc3aa99e0501f0f7c9e167f81e258019a
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Aug 21 18:37:15 2023 +0800

    Refactor ContextManager (#28202)
---
 .../mode/manager/ContextManager.java               | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

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 d502ee0580f..6be5893c1ca 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
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.infra.instance.InstanceContext;
 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.resource.storage.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.SchemaManager;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
@@ -198,9 +199,11 @@ public final class ContextManager implements AutoCloseable 
{
      * @param tableName to be reloaded table name
      */
     public void reloadTable(final String databaseName, final String 
schemaName, final String tableName) {
-        Map<String, DataSource> dataSourceMap = 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getDataSources();
+        ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
+        GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(database.getProtocolType(),
+                database.getResourceMetaData().getStorageUnitMetaData(), 
database.getRuleMetaData().getRules(), 
metaDataContexts.get().getMetaData().getProps(), schemaName);
         try {
-            reloadTable(databaseName, schemaName, tableName, dataSourceMap);
+            persistTable(database, schemaName, tableName, material);
         } catch (final SQLException ex) {
             log.error("Reload table: {} meta data of database: {} schema: {} 
failed", tableName, databaseName, schemaName, ex);
         }
@@ -215,20 +218,19 @@ public final class ContextManager implements 
AutoCloseable {
      * @param tableName to be reloaded table name
      */
     public void reloadTable(final String databaseName, final String 
schemaName, final String dataSourceName, final String tableName) {
-        Map<String, DataSource> dataSourceMap = Collections.singletonMap(
-                dataSourceName, 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageUnits().get(dataSourceName).getDataSource());
+        ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
+        StorageUnit storageUnit = 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().get(dataSourceName);
+        GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(database.getProtocolType(), 
Collections.singletonMap(dataSourceName, storageUnit.getStorageType()),
+                Collections.singletonMap(dataSourceName, 
storageUnit.getDataSource()), database.getRuleMetaData().getRules(), 
metaDataContexts.get().getMetaData().getProps(), schemaName);
         try {
-            reloadTable(databaseName, schemaName, tableName, dataSourceMap);
+            persistTable(database, schemaName, tableName, material);
         } catch (final SQLException ex) {
             log.error("Reload table: {} meta data of database: {} schema: {} 
with data source: {} failed", tableName, databaseName, schemaName, 
dataSourceName, ex);
         }
     }
     
-    private void reloadTable(final String databaseName, final String 
schemaName, final String tableName, final Map<String, DataSource> 
dataSourceMap) throws SQLException {
-        ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
-        GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(database.getProtocolType(), 
database.getResourceMetaData().getStorageUnitMetaData().getStorageTypes(),
-                dataSourceMap, database.getRuleMetaData().getRules(), 
metaDataContexts.get().getMetaData().getProps(), schemaName);
-        ShardingSphereSchema schema = 
GenericSchemaBuilder.build(Collections.singletonList(tableName), 
material).getOrDefault(schemaName, new ShardingSphereSchema());
+    private void persistTable(final ShardingSphereDatabase database, final 
String schemaName, final String tableName, final GenericSchemaBuilderMaterial 
material) throws SQLException {
+        ShardingSphereSchema schema = 
GenericSchemaBuilder.build(Collections.singleton(tableName), 
material).getOrDefault(schemaName, new ShardingSphereSchema());
         
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().getTableMetaDataPersistService()
                 .persist(database.getName(), schemaName, 
Collections.singletonMap(tableName, schema.getTable(tableName)));
     }

Reply via email to