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());