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 2022/06/29 11:05:23 UTC
[shardingsphere] branch master updated: Refactor ContextManager.alterSingleTableDataNodes (#18702)
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 61893658204 Refactor ContextManager.alterSingleTableDataNodes (#18702)
61893658204 is described below
commit 618936582042c465cef173b0cc349b10a48251c8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Jun 29 19:05:18 2022 +0800
Refactor ContextManager.alterSingleTableDataNodes (#18702)
---
.../mode/manager/ContextManager.java | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
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 a9127dd9116..49dcc0a24de 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
@@ -47,7 +47,6 @@ import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import org.apache.shardingsphere.infra.rule.builder.schema.DatabaseRulesBuilder;
-import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
import org.apache.shardingsphere.infra.rule.identifier.type.ResourceHeldRule;
@@ -158,20 +157,19 @@ public final class ContextManager implements AutoCloseable {
private void alterTable(final String databaseName, final String schemaName, final ShardingSphereTable beBoChangedTable) {
ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabases().get(databaseName);
- alterSingleTableDataNodes(databaseName, database, beBoChangedTable);
+ alterSingleTableDataNodes(database, schemaName, beBoChangedTable);
database.getSchemas().get(schemaName).put(beBoChangedTable.getName(), beBoChangedTable);
metaDataContexts.getOptimizerContext().alterTable(databaseName, schemaName, beBoChangedTable);
}
- private void alterSingleTableDataNodes(final String databaseName, final ShardingSphereDatabase database, final ShardingSphereTable changedTableMetaData) {
- if (!containsInImmutableDataNodeContainedRule(changedTableMetaData.getName(), database)) {
- refreshRules(databaseName, database);
+ private void alterSingleTableDataNodes(final ShardingSphereDatabase database, final String schemaName, final ShardingSphereTable changedTableMetaData) {
+ if (containsMutableDataNodeContainedRule(database, schemaName, changedTableMetaData.getName())) {
+ refreshRules(database);
}
}
- private boolean containsInImmutableDataNodeContainedRule(final String tableName, final ShardingSphereDatabase database) {
- return database.getRuleMetaData().findRules(DataNodeContainedRule.class).stream()
- .filter(each -> !(each instanceof MutableDataNodeRule)).anyMatch(each -> each.getAllTables().contains(tableName));
+ private boolean containsMutableDataNodeContainedRule(final ShardingSphereDatabase database, final String schemaName, final String tableName) {
+ return database.getRuleMetaData().findRules(MutableDataNodeRule.class).stream().anyMatch(each -> each.findSingleTableDataNode(schemaName, tableName).isPresent());
}
private void dropTable(final String databaseName, final String schemaName, final String toBeDeletedTableName) {
@@ -204,9 +202,9 @@ public final class ContextManager implements AutoCloseable {
.forEach((schemaName, tables) -> metaDataContexts.getPersistService().ifPresent(optional -> optional.getSchemaMetaDataService().persistMetaData(databaseName, schemaName, tables))));
}
- private void refreshRules(final String databaseName, final ShardingSphereDatabase database) {
+ private void refreshRules(final ShardingSphereDatabase database) {
Collection<ShardingSphereRule> databaseRules = DatabaseRulesBuilder.build(
- databaseName, new DataSourceProvidedDatabaseConfiguration(database.getResource().getDataSources(), database.getRuleMetaData().getConfigurations()));
+ database.getName(), new DataSourceProvidedDatabaseConfiguration(database.getResource().getDataSources(), database.getRuleMetaData().getConfigurations()));
database.getRuleMetaData().getRules().clear();
database.getRuleMetaData().getRules().addAll(databaseRules);
}
@@ -420,7 +418,7 @@ public final class ContextManager implements AutoCloseable {
public void reloadSchemaMetaData(final String databaseName, final String schemaName, final String dataSourceName) {
try {
ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabases().get(databaseName);
- refreshRules(databaseName, database);
+ refreshRules(database);
GenericSchemaBuilderMaterials materials = new GenericSchemaBuilderMaterials(database.getProtocolType(), database.getResource().getDatabaseType(),
Collections.singletonMap(dataSourceName, database.getResource().getDataSources().get(dataSourceName)),
database.getRuleMetaData().getRules(), metaDataContexts.getMetaData().getProps(), schemaName);
@@ -463,7 +461,7 @@ public final class ContextManager implements AutoCloseable {
private Map<String, ShardingSphereSchema> loadActualSchema(final String databaseName) throws SQLException {
ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabases().get(databaseName);
Map<String, DataSource> dataSourceMap = database.getResource().getDataSources();
- refreshRules(databaseName, database);
+ refreshRules(database);
DatabaseType databaseType = DatabaseTypeEngine.getDatabaseType(dataSourceMap.values());
Map<String, ShardingSphereSchema> result = new ConcurrentHashMap<>();
GenericSchemaBuilderMaterials materials = new GenericSchemaBuilderMaterials(database.getProtocolType(),