You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2021/11/17 06:46:41 UTC
[shardingsphere] branch master updated: Add alter rule in ContextManager (#13649)
This is an automated email from the ASF dual-hosted git repository.
zhonghongsheng 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 460e80c Add alter rule in ContextManager (#13649)
460e80c is described below
commit 460e80cb327f7d1d403cb925cc2adc1c33a5538c
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Wed Nov 17 14:45:35 2021 +0800
Add alter rule in ContextManager (#13649)
---
.../mode/manager/ContextManager.java | 23 ++++++++++++++++++++++
.../rdl/rule/RuleDefinitionBackendHandler.java | 1 +
2 files changed, 24 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 74cc251..6c510fc 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
@@ -163,6 +163,29 @@ public final class ContextManager implements AutoCloseable {
toBeDroppedResourceNames.forEach(metaDataContexts.getMetaData(schemaName).getResource().getDataSources()::remove);
}
+ /**
+ * Alter rule.
+ *
+ * @param schemaName schema name
+ */
+ public void alterRule(final String schemaName) {
+ try {
+ 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());
+ Properties props = metaDataContexts.getProps().getProps();
+ Map<String, Collection<ShardingSphereRule>> rules = SchemaRulesBuilder.buildRules(dataSourcesMap, schemaRuleConfigs, props);
+ Map<String, ShardingSphereSchema> schemas = new SchemaLoader(dataSourcesMap, schemaRuleConfigs, rules, props).load();
+ MetaDataContexts changedMetaDataContext = new MetaDataContextsBuilder(dataSourcesMap, schemaRuleConfigs, metaDataContexts.getGlobalRuleMetaData().getConfigurations(),
+ schemas, rules, props)
+ .build(metaDataContexts.getMetaDataPersistService().orElse(null));
+ metaDataContexts.getOptimizerContext().getMetaData().getSchemas().put(schemaName,
+ changedMetaDataContext.getOptimizerContext().getMetaData().getSchemas().get(schemaName));
+ metaDataContexts.getMetaDataMap().put(schemaName, changedMetaDataContext.getMetaData(schemaName));
+ } catch (final SQLException ex) {
+ log.error("Alter schema:{} rule configuration failed", schemaName, ex);
+ }
+ }
+
private void refreshMetaDataContext(final String schemaName, final Map<String, DataSourceConfiguration> dataSourceConfigs) throws SQLException {
MetaDataContexts changedMetaDataContext = buildChangedMetaDataContext(metaDataContexts.getMetaDataMap().get(schemaName), dataSourceConfigs);
metaDataContexts.getMetaDataMap().putAll(changedMetaDataContext.getMetaDataMap());
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
index f992406..0dfa324 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/RuleDefinitionBackendHandler.java
@@ -94,6 +94,7 @@ public final class RuleDefinitionBackendHandler<T extends RuleDefinitionStatemen
} else {
throw new UnsupportedOperationException(String.format("Cannot support RDL updater type `%s`", updater.getClass().getCanonicalName()));
}
+ ProxyContext.getInstance().getContextManager().alterRule(shardingSphereMetaData.getName());
}
@SuppressWarnings({"rawtypes", "unchecked"})