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