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 6a8646a9e17 Refactor DatabaseMetaDataManager.alterTable and alterView 
(#34508)
6a8646a9e17 is described below

commit 6a8646a9e17359ad586c707de50873f521d844ae
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jan 26 14:18:21 2025 +0800

    Refactor DatabaseMetaDataManager.alterTable and alterView (#34508)
    
    * Refactor DatabaseMetaDataManager.alterTable and alterView
    
    * Refactor DatabaseMetaDataManager.alterTable and alterView
---
 .../metadata/manager/DatabaseMetaDataManager.java  | 39 ++++++++++++----------
 .../manager/DatabaseMetaDataManagerTest.java       | 21 ++++--------
 .../database/metadata/TableChangedHandler.java     |  2 +-
 .../database/metadata/ViewChangedHandler.java      |  2 +-
 .../metadata/MetaDataChangedHandlerTest.java       |  8 ++---
 5 files changed, 33 insertions(+), 39 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
index 7de3ea1ab6c..bcfd29e0dd9 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
@@ -33,7 +33,6 @@ import 
org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.metadata.refresher.metadata.util.TableRefreshUtils;
 
 import java.util.Collections;
-import java.util.Optional;
 
 /**
  * Database meta data manager.
@@ -104,39 +103,43 @@ public final class DatabaseMetaDataManager {
     }
     
     /**
-     * Alter schema.
+     * Alter table.
      *
      * @param databaseName database name
      * @param schemaName schema name
      * @param toBeChangedTable to be changed table
-     * @param toBeChangedView to be changed view
      */
-    public synchronized void alterSchema(final String databaseName, final 
String schemaName, final ShardingSphereTable toBeChangedTable, final 
ShardingSphereView toBeChangedView) {
+    public synchronized void alterTable(final String databaseName, final 
String schemaName, final ShardingSphereTable toBeChangedTable) {
         ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
         if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) {
             return;
         }
-        Optional.ofNullable(toBeChangedTable).ifPresent(optional -> 
alterTable(databaseName, schemaName, optional));
-        Optional.ofNullable(toBeChangedView).ifPresent(optional -> 
alterView(databaseName, schemaName, optional));
-        if (null != toBeChangedTable || null != toBeChangedView) {
-            metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
-        }
-    }
-    
-    private void alterTable(final String databaseName, final String 
schemaName, final ShardingSphereTable beBoChangedTable) {
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
-        if (TableRefreshUtils.isSingleTable(beBoChangedTable.getName(), 
database)) {
+        if (TableRefreshUtils.isSingleTable(toBeChangedTable.getName(), 
database)) {
             database.reloadRules();
         }
-        database.getSchema(schemaName).putTable(beBoChangedTable);
+        database.getSchema(schemaName).putTable(toBeChangedTable);
+        metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
     }
     
-    private void alterView(final String databaseName, final String schemaName, 
final ShardingSphereView beBoChangedView) {
+    /**
+     * Alter view.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     * @param toBeChangedView to be changed view
+     */
+    public synchronized void alterView(final String databaseName, final String 
schemaName, final ShardingSphereView toBeChangedView) {
+        ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
+        if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) {
+            return;
+        }
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
-        if (TableRefreshUtils.isSingleTable(beBoChangedView.getName(), 
database)) {
+        if (TableRefreshUtils.isSingleTable(toBeChangedView.getName(), 
database)) {
             database.reloadRules();
         }
-        database.getSchema(schemaName).putView(beBoChangedView);
+        database.getSchema(schemaName).putView(toBeChangedView);
+        metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
     }
     
     /**
@@ -157,7 +160,7 @@ public final class DatabaseMetaDataManager {
      * @param schemaName schema name
      * @param toBeDroppedViewName to be dropped view name
      */
-    public void dropView(final String databaseName, final String schemaName, 
final String toBeDroppedViewName) {
+    public synchronized void dropView(final String databaseName, final String 
schemaName, final String toBeDroppedViewName) {
         dropTableOrView(databaseName, schemaName, toBeDroppedViewName, false);
     }
     
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManagerTest.java
index d67f9465322..d497aee6ed1 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManagerTest.java
@@ -131,43 +131,34 @@ class DatabaseMetaDataManagerTest {
     }
     
     @Test
-    void assertAlterNotExistedSchema() {
+    void assertAlterTableWithNotExistedSchema() {
         ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
-        databaseMetaDataManager.alterSchema("foo_db", "bar_schema", null, 
null);
+        databaseMetaDataManager.alterTable("foo_db", "bar_schema", null);
         verify(metaDataContexts.getMetaData().getDatabase("foo_db"), 
times(0)).getSchema(any());
     }
     
     @Test
-    void assertAlterSchemaForNothingAltered() {
-        ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
-        databaseMetaDataManager.alterSchema("foo_db", "foo_schema", null, 
null);
-        verify(metaDataContexts.getMetaData().getDatabase("foo_db"), 
times(0)).getSchema(any());
-    }
-    
-    @Test
-    void assertAlterSchemaForTableAltered() {
+    void assertAlterTable() {
         ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
         ShardingSphereColumn toBeChangedColumn = new 
ShardingSphereColumn("foo_col", Types.VARCHAR, false, false, false, true, 
false, false);
         ShardingSphereTable toBeChangedTable = new 
ShardingSphereTable("foo_tbl", Collections.singleton(toBeChangedColumn), 
Collections.emptyList(), Collections.emptyList());
-        databaseMetaDataManager.alterSchema("foo_db", "foo_schema", 
toBeChangedTable, null);
+        databaseMetaDataManager.alterTable("foo_db", "foo_schema", 
toBeChangedTable);
         ShardingSphereTable table = 
metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema").getTable("foo_tbl");
         assertThat(table.getAllColumns().size(), is(1));
         assertTrue(table.containsColumn("foo_col"));
     }
     
     @Test
-    void assertAlterSchemaForViewAltered() {
+    void assertAlterView() {
         ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
         ShardingSphereView toBeChangedView = new 
ShardingSphereView("foo_view", "select `foo_view`.`foo_view`.`id` AS `id` from 
`foo_view`.`foo_view`");
-        databaseMetaDataManager.alterSchema("foo_db", "foo_schema", null, 
toBeChangedView);
+        databaseMetaDataManager.alterView("foo_db", "foo_schema", 
toBeChangedView);
         ShardingSphereView view = 
metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema").getView("foo_view");
         assertThat(view.getName(), is("foo_view"));
         assertThat(view.getViewDefinition(), is("select 
`foo_view`.`foo_view`.`id` AS `id` from `foo_view`.`foo_view`"));
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
index b6434fdb921..db22c9423e4 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
@@ -49,7 +49,7 @@ public final class TableChangedHandler {
         String tableName = 
TableMetaDataNodePath.getTableNameByActiveVersionPath(event.getKey()).orElseThrow(()
 -> new IllegalStateException("Table name not found."));
         ActiveVersionChecker.checkActiveVersion(contextManager, event);
         ShardingSphereTable table = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getTable().load(databaseName,
 schemaName, tableName);
-        
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().alterSchema(databaseName,
 schemaName, table, null);
+        
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().alterTable(databaseName,
 schemaName, table);
         statisticsRefreshEngine.asyncRefresh();
     }
     
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
index 6c14b210bc4..ba543a9930e 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
@@ -49,7 +49,7 @@ public final class ViewChangedHandler {
         String viewName = 
ViewMetaDataNodePath.getViewNameByActiveVersionPath(event.getKey()).orElseThrow(()
 -> new IllegalStateException("View name not found."));
         ActiveVersionChecker.checkActiveVersion(contextManager, event);
         ShardingSphereView view = 
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getView().load(databaseName,
 schemaName, viewName);
-        
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().alterSchema(databaseName,
 schemaName, null, view);
+        
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().alterView(databaseName,
 schemaName, view);
         statisticsRefreshEngine.asyncRefresh();
     }
     
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
index 66de116683c..42fe60d13c6 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
@@ -78,7 +78,7 @@ class MetaDataChangedHandlerTest {
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getTable().load("foo_db",
 "foo_schema", "foo_tbl"))
                 .thenReturn(table);
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0",
 "0", Type.ADDED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterSchema("foo_db",
 "foo_schema", table, null);
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
 "foo_schema", table);
     }
     
     @Test
@@ -88,7 +88,7 @@ class MetaDataChangedHandlerTest {
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getTable().load("foo_db",
 "foo_schema", "foo_tbl"))
                 .thenReturn(table);
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0",
 "0", Type.UPDATED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterSchema("foo_db",
 "foo_schema", table, null);
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
 "foo_schema", table);
     }
     
     @Test
@@ -104,7 +104,7 @@ class MetaDataChangedHandlerTest {
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getView().load("foo_db",
 "foo_schema", "foo_view"))
                 .thenReturn(view);
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0",
 "0", Type.ADDED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterSchema("foo_db",
 "foo_schema", null, view);
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
 "foo_schema", view);
     }
     
     @Test
@@ -114,7 +114,7 @@ class MetaDataChangedHandlerTest {
         
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getView().load("foo_db",
 "foo_schema", "foo_view"))
                 .thenReturn(view);
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0",
 "0", Type.UPDATED));
-        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterSchema("foo_db",
 "foo_schema", null, view);
+        
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
 "foo_schema", view);
     }
     
     @Test

Reply via email to