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

zhangliang 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 b6699498ac1 Refactor MetaDataManagerPersistService.alterSchemaName() 
(#34522)
b6699498ac1 is described below

commit b6699498ac12cd7391e4a6ce5f595df2e4b5d065
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Mon Jan 27 17:23:17 2025 +0800

    Refactor MetaDataManagerPersistService.alterSchemaName() (#34522)
    
    * Refactor MetaDataManagerPersistService.alterSchemaName()
    
    * Rename MetaDataManagerPersistService.renameSchema
---
 .../AlterSchemaPushDownMetaDataRefresher.java      |  3 +-
 .../service/MetaDataManagerPersistService.java     |  5 ++-
 .../ClusterMetaDataManagerPersistService.java      |  2 +-
 .../ClusterMetaDataManagerPersistServiceTest.java  |  8 ++---
 .../StandaloneMetaDataManagerPersistService.java   | 41 +++++++---------------
 ...tandaloneMetaDataManagerPersistServiceTest.java |  8 ++---
 6 files changed, 24 insertions(+), 43 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/schema/AlterSchemaPushDownMetaDataRefresher.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/schema/AlterSchemaPushDownMetaDataRefresher.java
index bd05734f956..d2aa7bdc60a 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/schema/AlterSchemaPushDownMetaDataRefresher.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/schema/AlterSchemaPushDownMetaDataRefresher.java
@@ -40,8 +40,7 @@ public final class AlterSchemaPushDownMetaDataRefresher 
implements PushDownMetaD
         if (!renameSchemaName.isPresent()) {
             return;
         }
-        metaDataManagerPersistService.alterSchemaName(
-                database.getName(), 
sqlStatement.getSchemaName().getValue().toLowerCase(), renameSchemaName.get(), 
logicDataSourceNames.isEmpty() ? null : logicDataSourceNames.iterator().next());
+        metaDataManagerPersistService.renameSchema(database.getName(), 
sqlStatement.getSchemaName().getValue().toLowerCase(), renameSchemaName.get());
     }
     
     @Override
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
index 7cbcf682d00..b5ee1cc48c7 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java
@@ -70,14 +70,13 @@ public interface MetaDataManagerPersistService {
                      Collection<ShardingSphereTable> alteredTables, 
Collection<ShardingSphereView> alteredViews, Collection<String> droppedTables, 
Collection<String> droppedViews);
     
     /**
-     * Alter schema name.
+     * Rename schema.
      *
      * @param databaseName database name
      * @param schemaName schema name
      * @param renameSchemaName rename schema name
-     * @param logicDataSourceName logic data source name
      */
-    void alterSchemaName(String databaseName, String schemaName, String 
renameSchemaName, String logicDataSourceName);
+    void renameSchema(String databaseName, String schemaName, String 
renameSchemaName);
     
     /**
      * Drop schema.
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
index 900363c62ea..9c141e59ed4 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
@@ -99,7 +99,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     }
     
     @Override
-    public void alterSchemaName(final String databaseName, final String 
schemaName, final String renameSchemaName, final String logicDataSourceName) {
+    public void renameSchema(final String databaseName, final String 
schemaName, final String renameSchemaName) {
         ShardingSphereSchema schema = 
metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName);
         if (schema.isEmpty()) {
             
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName,
 renameSchemaName);
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
index 2a906cbe00a..172e056b4d1 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
@@ -99,10 +99,10 @@ class ClusterMetaDataManagerPersistServiceTest {
     }
     
     @Test
-    void assertAlterNotEmptySchemaName() {
+    void assertRenameNotEmptySchemaName() {
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
         
when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema);
-        metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", 
"bar_schema", "foo_ds");
+        metaDataManagerPersistService.renameSchema("foo_db", "foo_schema", 
"bar_schema");
         
verify(metaDataPersistService.getDatabaseMetaDataFacade().getTable()).persist(eq("foo_db"),
 eq("bar_schema"), anyCollection());
         
verify(metaDataPersistService.getDatabaseMetaDataFacade().getView()).persist(eq("foo_db"),
 eq("bar_schema"), anyCollection());
         
verify(metaDataPersistService.getDatabaseMetaDataFacade().getSchema()).drop("foo_db",
 "foo_schema");
@@ -110,11 +110,11 @@ class ClusterMetaDataManagerPersistServiceTest {
     }
     
     @Test
-    void assertAlterEmptySchemaName() {
+    void assertRenameEmptySchemaName() {
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
         when(schema.isEmpty()).thenReturn(true);
         
when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema);
-        metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", 
"bar_schema", "foo_ds");
+        metaDataManagerPersistService.renameSchema("foo_db", "foo_schema", 
"bar_schema");
         
verify(metaDataPersistService.getDatabaseMetaDataFacade().getSchema()).drop("foo_db",
 "foo_schema");
         
verify(metaDataPersistService.getDatabaseMetaDataFacade().getSchema()).add("foo_db",
 "bar_schema");
     }
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
index 66636bc24c0..983f4b84315 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.mode.manager.standalone.persist.service;
 
-import com.google.common.base.Strings;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
@@ -32,15 +31,14 @@ import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
 import 
org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
 import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import 
org.apache.shardingsphere.mode.manager.standalone.changed.RuleItemChangedBuilder;
 import org.apache.shardingsphere.mode.metadata.MetaDataContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.metadata.factory.MetaDataContextsFactory;
-import 
org.apache.shardingsphere.mode.manager.standalone.changed.RuleItemChangedBuilder;
 import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource;
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.config.database.DataSourceUnitPersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.metadata.DatabaseMetaDataPersistFacade;
-import 
org.apache.shardingsphere.mode.metadata.refresher.metadata.util.TableRefreshUtils;
 import 
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
 import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItem;
 import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
@@ -111,9 +109,7 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
     }
     
     @Override
-    public void alterSchemaName(final String databaseName, final String 
schemaName, final String renameSchemaName, final String logicDataSourceName) {
-        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().getMetaData();
-        ShardingSphereDatabase database = metaData.getDatabase(databaseName);
+    public void renameSchema(final String databaseName, final String 
schemaName, final String renameSchemaName) {
         ShardingSphereSchema schema = 
metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName);
         if (schema.isEmpty()) {
             
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName,
 renameSchemaName);
@@ -122,35 +118,18 @@ public final class 
StandaloneMetaDataManagerPersistService implements MetaDataMa
             
metaDataPersistService.getDatabaseMetaDataFacade().getView().persist(databaseName,
 renameSchemaName, schema.getAllViews());
         }
         
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName,
 schemaName);
-        putSchemaMetaData(database, schemaName, renameSchemaName, 
logicDataSourceName);
-        removeSchemaMetaData(database, schemaName);
-        metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
+        renameSchemaMetaData(databaseName, schemaName, renameSchemaName);
     }
     
-    private void putSchemaMetaData(final ShardingSphereDatabase database, 
final String schemaName, final String renamedSchemaName, final String 
logicDataSourceName) {
+    private void renameSchemaMetaData(final String databaseName, final String 
schemaName, final String renamedSchemaName) {
+        ShardingSphereMetaData metaData = 
metaDataContextManager.getMetaDataContexts().getMetaData();
+        ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         ShardingSphereSchema schema = database.getSchema(schemaName);
         ShardingSphereSchema renamedSchema = new 
ShardingSphereSchema(renamedSchemaName, schema.getAllTables(), 
schema.getAllViews());
         database.addSchema(renamedSchema);
-        addDataNode(database, logicDataSourceName, schemaName, 
schema.getAllTables());
-    }
-    
-    private void addDataNode(final ShardingSphereDatabase database, final 
String logicDataSourceName, final String schemaName, final 
Collection<ShardingSphereTable> tobeAddedTables) {
-        for (ShardingSphereTable each : tobeAddedTables) {
-            if (!Strings.isNullOrEmpty(logicDataSourceName) && 
TableRefreshUtils.isSingleTable(each.getName(), database)) {
-                
database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(rule
 -> rule.put(logicDataSourceName, schemaName, each.getName()));
-            }
-        }
-    }
-    
-    private void removeSchemaMetaData(final ShardingSphereDatabase database, 
final String schemaName) {
-        ShardingSphereSchema schema = new ShardingSphereSchema(schemaName, 
database.getSchema(schemaName).getAllTables(), 
database.getSchema(schemaName).getAllViews());
         database.dropSchema(schemaName);
-        
removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class),
 Collections.singleton(schemaName),
-                
schema.getAllTables().stream().map(ShardingSphereTable::getName).collect(Collectors.toSet()));
-    }
-    
-    private void removeDataNode(final Collection<MutableDataNodeRuleAttribute> 
ruleAttributes, final Collection<String> schemaNames, final Collection<String> 
tobeRemovedTables) {
-        tobeRemovedTables.forEach(each -> ruleAttributes.forEach(rule -> 
rule.remove(schemaNames, each)));
+        database.reloadRules();
+        metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
     }
     
     @Override
@@ -168,6 +147,10 @@ public final class StandaloneMetaDataManagerPersistService 
implements MetaDataMa
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
     }
     
+    private void removeDataNode(final Collection<MutableDataNodeRuleAttribute> 
ruleAttributes, final Collection<String> schemaNames, final Collection<String> 
tobeRemovedTables) {
+        tobeRemovedTables.forEach(each -> ruleAttributes.forEach(rule -> 
rule.remove(schemaNames, each)));
+    }
+    
     @Override
     public void createTable(final String databaseName, final String 
schemaName, final ShardingSphereTable table) {
         
metaDataPersistService.getDatabaseMetaDataFacade().getTable().persist(databaseName,
 schemaName, Collections.singleton(table));
diff --git 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
index f70d5d13167..7f135b5eee2 100644
--- 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
@@ -106,14 +106,14 @@ class StandaloneMetaDataManagerPersistServiceTest {
     }
     
     @Test
-    void assertAlterSchemaNameWithEmptyAlteredSchema() {
+    void assertRenameSchemaNameWithEmptyAlteredSchema() {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getName()).thenReturn("foo_db");
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new 
ConfigurationProperties(new Properties()));
         
when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
         DatabaseMetaDataPersistFacade databaseMetaDataFacade = 
mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS);
         
when(metaDataPersistService.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade);
-        metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", 
"bar_schema", "foo_ds");
+        metaDataManagerPersistService.renameSchema("foo_db", "foo_schema", 
"bar_schema");
         verify(databaseMetaDataFacade.getSchema(), times(0)).add("foo_db", 
"bar_schema");
         verify(databaseMetaDataFacade.getTable()).persist(eq("foo_db"), 
eq("bar_schema"), anyCollection());
         verify(databaseMetaDataFacade.getView()).persist(eq("foo_db"), 
eq("bar_schema"), anyCollection());
@@ -121,7 +121,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
     }
     
     @Test
-    void assertAlterSchemaNameWithNotEmptyAlteredSchema() {
+    void assertRenameSchemaNameWithNotEmptyAlteredSchema() {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getName()).thenReturn("foo_db");
         when(database.getSchema("foo_schema")).thenReturn(new 
ShardingSphereSchema("foo_schema"));
@@ -130,7 +130,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
         
when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
         DatabaseMetaDataPersistFacade databaseMetaDataFacade = 
mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS);
         
when(metaDataPersistService.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade);
-        metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", 
"bar_schema", "foo_ds");
+        metaDataManagerPersistService.renameSchema("foo_db", "foo_schema", 
"bar_schema");
         verify(databaseMetaDataFacade.getSchema()).add("foo_db", "bar_schema");
         verify(databaseMetaDataFacade.getSchema()).drop("foo_db", 
"foo_schema");
     }

Reply via email to