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

menghaoran 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 2babbf4ad25 private ContextManager.alterSchemas (#18722)
2babbf4ad25 is described below

commit 2babbf4ad257c59cf6bb560d378c1e31e12c5604
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Thu Jun 30 14:58:46 2022 +0800

    private ContextManager.alterSchemas (#18722)
    
    * Refactor SingleTableDropSchemaMetadataValidatorTest
    
    * Refactor ContextManager
    
    * private ContextManager.alterSchemas
    
    * private ContextManager.alterSchemas
---
 .../mode/manager/ContextManager.java               | 41 +++++++++-------------
 .../mode/manager/ContextManagerTest.java           | 12 -------
 2 files changed, 17 insertions(+), 36 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 49dcc0a24de..bdde5be8436 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
@@ -156,19 +156,18 @@ 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(database, schemaName, beBoChangedTable);
-        database.getSchemas().get(schemaName).put(beBoChangedTable.getName(), 
beBoChangedTable);
+        
alterTable(metaDataContexts.getMetaData().getDatabases().get(databaseName), 
schemaName, beBoChangedTable);
         metaDataContexts.getOptimizerContext().alterTable(databaseName, 
schemaName, beBoChangedTable);
     }
     
-    private void alterSingleTableDataNodes(final ShardingSphereDatabase 
database, final String schemaName, final ShardingSphereTable 
changedTableMetaData) {
-        if (containsMutableDataNodeContainedRule(database, schemaName, 
changedTableMetaData.getName())) {
+    private void alterTable(final ShardingSphereDatabase database, final 
String schemaName, final ShardingSphereTable beBoChangedTable) {
+        if (containsMutableDataNodeRule(database, schemaName, 
beBoChangedTable.getName())) {
             refreshRules(database);
         }
+        database.getSchemas().get(schemaName).put(beBoChangedTable.getName(), 
beBoChangedTable);
     }
     
-    private boolean containsMutableDataNodeContainedRule(final 
ShardingSphereDatabase database, final String schemaName, final String 
tableName) {
+    private boolean containsMutableDataNodeRule(final ShardingSphereDatabase 
database, final String schemaName, final String tableName) {
         return 
database.getRuleMetaData().findRules(MutableDataNodeRule.class).stream().anyMatch(each
 -> each.findSingleTableDataNode(schemaName, tableName).isPresent());
     }
     
@@ -179,24 +178,6 @@ public final class ContextManager implements AutoCloseable 
{
         }
     }
     
-    /**
-     * Alter schemas.
-     *
-     * @param databaseName database name
-     * @param schemas schemas
-     */
-    public void alterSchemas(final String databaseName, final Map<String, 
ShardingSphereSchema> schemas) {
-        ShardingSphereDatabase alteredMetaData = new 
ShardingSphereDatabase(databaseName, 
metaDataContexts.getMetaData().getDatabases().get(databaseName).getProtocolType(),
-                
metaDataContexts.getMetaData().getDatabases().get(databaseName).getResource(), 
metaDataContexts.getMetaData().getDatabases().get(databaseName).getRuleMetaData(),
 schemas);
-        Map<String, ShardingSphereDatabase> alteredDatabases = new 
HashMap<>(metaDataContexts.getMetaData().getDatabases());
-        alteredDatabases.put(databaseName, alteredMetaData);
-        FederationDatabaseMetaData alteredDatabaseMetaData = new 
FederationDatabaseMetaData(databaseName, schemas);
-        
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().put(databaseName,
 alteredDatabaseMetaData);
-        
metaDataContexts.getOptimizerContext().getPlannerContexts().put(databaseName, 
OptimizerPlannerContextFactory.create(alteredDatabaseMetaData));
-        renewMetaDataContexts(
-                rebuildMetaDataContexts(new 
ShardingSphereMetaData(alteredDatabases, 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps())));
-    }
-    
     private void persistMetaData(final MetaDataContexts metaDataContexts) {
         metaDataContexts.getMetaData().getDatabases().forEach((databaseName, 
schemas) -> schemas.getSchemas()
                 .forEach((schemaName, tables) -> 
metaDataContexts.getPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService().persistMetaData(databaseName, schemaName, 
tables))));
@@ -428,6 +409,18 @@ public final class ContextManager implements AutoCloseable 
{
         }
     }
     
+    private void alterSchemas(final String databaseName, final Map<String, 
ShardingSphereSchema> schemas) {
+        ShardingSphereDatabase alteredMetaData = new 
ShardingSphereDatabase(databaseName, 
metaDataContexts.getMetaData().getDatabases().get(databaseName).getProtocolType(),
+                
metaDataContexts.getMetaData().getDatabases().get(databaseName).getResource(), 
metaDataContexts.getMetaData().getDatabases().get(databaseName).getRuleMetaData(),
 schemas);
+        Map<String, ShardingSphereDatabase> alteredDatabases = new 
HashMap<>(metaDataContexts.getMetaData().getDatabases());
+        alteredDatabases.put(databaseName, alteredMetaData);
+        FederationDatabaseMetaData alteredDatabaseMetaData = new 
FederationDatabaseMetaData(databaseName, schemas);
+        
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().put(databaseName,
 alteredDatabaseMetaData);
+        
metaDataContexts.getOptimizerContext().getPlannerContexts().put(databaseName, 
OptimizerPlannerContextFactory.create(alteredDatabaseMetaData));
+        renewMetaDataContexts(
+                rebuildMetaDataContexts(new 
ShardingSphereMetaData(alteredDatabases, 
metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
metaDataContexts.getMetaData().getProps())));
+    }
+    
     private void deleteSchemas(final String databaseName, final Map<String, 
ShardingSphereSchema> actualSchemas) {
         Map<String, ShardingSphereSchema> originalSchemas = 
metaDataContexts.getMetaData().getDatabases().get(databaseName).getSchemas();
         if (originalSchemas.isEmpty()) {
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index 759f178ec32..05528dd7092 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -27,13 +27,11 @@ import 
org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
 import 
org.apache.shardingsphere.infra.federation.optimizer.context.parser.OptimizerParserContext;
 import 
org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
 import 
org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
-import 
org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationSchemaMetaData;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResource;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.service.SchemaMetaDataPersistService;
@@ -131,16 +129,6 @@ public final class ContextManagerTest {
         verify(metaDataContexts.getOptimizerContext(), 
times(0)).addSchema("foo_db", "foo_schema");
     }
     
-    @Test
-    public void assertAlterSchemas() {
-        contextManager.alterSchemas("foo_db", 
Collections.singletonMap("foo_db", new 
ShardingSphereSchema(Collections.singletonMap("foo_table",
-                new ShardingSphereTable("foo_table", Collections.emptyList(), 
Collections.emptyList(), Collections.emptyList())))));
-        
assertTrue(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("foo_db").getSchemas().get("foo_db").containsTable("foo_table"));
-        
assertTrue(contextManager.getMetaDataContexts().getOptimizerContext().getFederationMetaData().getDatabases().containsKey("foo_db"));
-        Map<String, FederationSchemaMetaData> schemas = 
contextManager.getMetaDataContexts().getOptimizerContext().getFederationMetaData().getDatabases().get("foo_db").getSchemas();
-        assertTrue(schemas.get("foo_db").getTables().containsKey("foo_table"));
-    }
-    
     @Test
     public void assertDeleteDatabase() {
         when(metaDataContexts.getMetaData().getDatabases()).thenReturn(new 
HashMap<>(Collections.singletonMap("foo_db", mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS))));

Reply via email to