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 bab16d58c98 Refactor SchemaMetaDataManager.dropTable and dropView
(#34503)
bab16d58c98 is described below
commit bab16d58c98fc3a523a5a0e9a3ad28d06a5648fe
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jan 26 12:23:01 2025 +0800
Refactor SchemaMetaDataManager.dropTable and dropView (#34503)
* Refactor SchemaMetaDataManager
* Refactor SchemaMetaDataManager.dropTable and dropView
* Refactor SchemaMetaDataManager.dropTable and dropView
---
.../infra/rule/scope/GlobalRule.java | 2 +-
.../metadata/manager/SchemaMetaDataManager.java | 62 ++++++++++++----------
.../manager/SchemaMetaDataManagerTest.java | 26 ++-------
.../database/metadata/TableChangedHandler.java | 2 +-
.../database/metadata/ViewChangedHandler.java | 2 +-
.../metadata/MetaDataChangedHandlerTest.java | 4 +-
6 files changed, 42 insertions(+), 56 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java
index 4ccc001ac38..3f361db212f 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java
@@ -37,7 +37,7 @@ public interface GlobalRule extends ShardingSphereRule {
}
/**
- * Global rule changed type enum.
+ * Global rule changed type.
*/
enum GlobalRuleChangedType {
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
index 5e2f86d6a8a..3d4982d54da 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.mode.metadata.manager;
-import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
@@ -124,26 +123,6 @@ public final class SchemaMetaDataManager {
}
}
- /**
- * Alter schema.
- *
- * @param databaseName database name
- * @param schemaName schema name
- * @param toBeDeletedTableName to be deleted table name
- * @param toBeDeletedViewName to be deleted view name
- */
- public synchronized void alterSchema(final String databaseName, final
String schemaName, final String toBeDeletedTableName, final String
toBeDeletedViewName) {
- ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
- if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) {
- return;
- }
- Optional.ofNullable(toBeDeletedTableName).ifPresent(optional ->
dropTable(databaseName, schemaName, optional));
- Optional.ofNullable(toBeDeletedViewName).ifPresent(optional ->
dropView(databaseName, schemaName, optional));
- if (!Strings.isNullOrEmpty(toBeDeletedTableName) ||
!Strings.isNullOrEmpty(toBeDeletedViewName)) {
- 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)) {
@@ -160,15 +139,40 @@ public final class SchemaMetaDataManager {
database.getSchema(schemaName).putView(beBoChangedView);
}
- private void dropTable(final String databaseName, final String schemaName,
final String toBeDeletedTableName) {
-
metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).removeTable(toBeDeletedTableName);
- metaDataContexts.getMetaData().getDatabase(databaseName)
-
.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each
-> each.remove(schemaName, toBeDeletedTableName));
+ /**
+ * Drop table.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param toBeDroppedTableName to be dropped table name
+ */
+ public synchronized void dropTable(final String databaseName, final String
schemaName, final String toBeDroppedTableName) {
+ dropTableOrView(databaseName, schemaName, toBeDroppedTableName, true);
}
- private void dropView(final String databaseName, final String schemaName,
final String toBeDeletedViewName) {
-
metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).removeView(toBeDeletedViewName);
- metaDataContexts.getMetaData().getDatabase(databaseName)
-
.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each
-> each.remove(schemaName, toBeDeletedViewName));
+ /**
+ * Drop view.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param toBeDroppedViewName to be dropped view name
+ */
+ public void dropView(final String databaseName, final String schemaName,
final String toBeDroppedViewName) {
+ dropTableOrView(databaseName, schemaName, toBeDroppedViewName, false);
+ }
+
+ private void dropTableOrView(final String databaseName, final String
schemaName, final String toBeDroppedTableOrViewName, final boolean isTable) {
+ ShardingSphereDatabase database =
metaDataContexts.getMetaData().getDatabase(databaseName);
+ if (!database.containsSchema(schemaName)) {
+ return;
+ }
+ if (isTable) {
+
database.getSchema(schemaName).removeTable(toBeDroppedTableOrViewName);
+ } else {
+
database.getSchema(schemaName).removeView(toBeDroppedTableOrViewName);
+ }
+
database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each
-> each.remove(schemaName, toBeDroppedTableOrViewName));
+ metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules()
+ .forEach(each -> ((GlobalRule)
each).refresh(metaDataContexts.getMetaData().getAllDatabases(),
GlobalRuleChangedType.SCHEMA_CHANGED));
}
}
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
index 5041dbb506f..354080e7340 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
@@ -174,34 +174,16 @@ class SchemaMetaDataManagerTest {
}
@Test
- void assertAlterNotExistedSchemaForTableDropped() {
- 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);
- schemaMetaDataManager.alterSchema("foo_db", "bar_schema", "", "");
- verify(metaDataContexts.getMetaData().getDatabase("foo_db"),
times(0)).getSchema(any());
- }
-
- @Test
- void assertAlterSchemaForNothingTableDropped() {
- 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);
- schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "", "");
- verify(metaDataContexts.getMetaData().getGlobalRuleMetaData(),
times(0)).getRules();
- }
-
- @Test
- void assertAlterSchemaForTableDropped() {
+ void assertDropTable() {
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(createToBeAlteredSchema()));
- schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "foo_tbl",
null);
+ schemaMetaDataManager.dropTable("foo_db", "foo_schema", "foo_tbl");
assertFalse(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema").containsTable("foo_tbl"));
}
@Test
- void assertAlterSchemaForViewDropped() {
+ void assertDropView() {
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(createToBeAlteredSchema()));
- schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "foo_view",
null);
+ schemaMetaDataManager.dropView("foo_db", "foo_schema", "foo_view");
assertFalse(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema").containsView("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 90337250be2..3b0bab15755 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
@@ -62,7 +62,7 @@ public final class TableChangedHandler {
*/
public void handleDropped(final String databaseName, final String
schemaName, final DataChangedEvent event) {
String tableName =
TableMetaDataNodePath.findTableName(event.getKey()).orElseThrow(() -> new
IllegalStateException("Table name not found."));
-
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
schemaName, tableName, null);
+
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().dropTable(databaseName,
schemaName, tableName);
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 294d9f03a73..4a849a82bee 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
@@ -62,7 +62,7 @@ public final class ViewChangedHandler {
*/
public void handleDropped(final String databaseName, final String
schemaName, final DataChangedEvent event) {
String viewName =
ViewMetaDataNodePath.findViewName(event.getKey()).orElseThrow(() -> new
IllegalStateException("View name not found."));
-
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
schemaName, null, viewName);
+
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().dropView(databaseName,
schemaName, viewName);
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 3cb924b158a..b565844f4f9 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
@@ -94,7 +94,7 @@ class MetaDataChangedHandlerTest {
@Test
void assertHandleTableDropped() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", "",
Type.DELETED));
-
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", "foo_tbl", null);
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).dropTable("foo_db",
"foo_schema", "foo_tbl");
}
@Test
@@ -120,7 +120,7 @@ class MetaDataChangedHandlerTest {
@Test
void assertHandleViewDropped() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view", "",
Type.DELETED));
-
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", null, "foo_view");
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).dropView("foo_db",
"foo_schema", "foo_view");
}
@Test