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

duanzhengqiang 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 1c18705  Reload single data source table meta data (#13798)
1c18705 is described below

commit 1c18705d535b1f11ea47d3565065a6c9d1b507bc
Author: Haoran Meng <[email protected]>
AuthorDate: Thu Nov 25 17:48:46 2021 +0800

    Reload single data source table meta data (#13798)
    
    Co-authored-by: shardingsphere <[email protected]>
---
 .../mode/manager/ContextManager.java               | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 8dc7dcb..0bcb222 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -289,6 +289,28 @@ public final class ContextManager implements AutoCloseable 
{
         }
     }
     
+    /**
+     * Reload single data source table meta data.
+     *
+     * @param schemaName schema name
+     * @param tableName logic table name
+     * @param dataSourceName data source name                 
+     */
+    public void reloadMetaData(final String schemaName, final String 
tableName, final String dataSourceName) {
+        try {
+            SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
+                    
metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType(), 
Collections.singletonMap(dataSourceName, 
+                    
metaDataContexts.getMetaData(schemaName).getResource().getDataSources().get(dataSourceName)),
+                    
metaDataContexts.getMetaData(schemaName).getRuleMetaData().getRules(), 
metaDataContexts.getProps());
+            TableMetaData tableMetaData = 
Optional.ofNullable(TableMetaDataBuilder.load(Collections.singletonList(tableName),
 materials).get(tableName))
+                    .map(each -> 
TableMetaDataBuilder.decorateKernelTableMetaData(each, 
materials.getRules())).orElseGet(TableMetaData::new);
+            
metaDataContexts.getMetaData(schemaName).getSchema().put(tableName, 
tableMetaData);
+            metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService().persist(schemaName, 
metaDataContexts.getMetaData(schemaName).getSchema()));
+        } catch (final SQLException ex) {
+            log.error("Reload table:{} meta data of schema:{} with data 
source:{} failed", tableName, schemaName, dataSourceName, ex);
+        }
+    }
+    
     private ShardingSphereSchema loadActualSchema(final String schemaName) 
throws SQLException {
         Map<String, Map<String, DataSource>> dataSourcesMap = 
Collections.singletonMap(schemaName, 
metaDataContexts.getMetaData(schemaName).getResource().getDataSources());
         Map<String, Collection<RuleConfiguration>> schemaRuleConfigs = 
Collections.singletonMap(schemaName, 
metaDataContexts.getMetaData(schemaName).getRuleMetaData().getConfigurations());

Reply via email to