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 c60021777d2 Refactor
StandaloneMetaDataManagerPersistService.dropSchema() (#34523)
c60021777d2 is described below
commit c60021777d2a43704cbe9873c38aa656845bc358
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Jan 27 23:13:03 2025 +0800
Refactor StandaloneMetaDataManagerPersistService.dropSchema() (#34523)
* Add DatabaseMetaDataManager.renameSchema()
* Refactor StandaloneMetaDataManagerPersistService.dropSchema()
* Refactor StandaloneMetaDataManagerPersistService.dropSchema()
* Refactor StandaloneMetaDataManagerPersistService.dropSchema()
---
.../metadata/manager/DatabaseMetaDataManager.java | 23 ++++++++++++++++++-
.../StandaloneMetaDataManagerPersistService.java | 26 ++--------------------
...tandaloneMetaDataManagerPersistServiceTest.java | 3 ++-
3 files changed, 26 insertions(+), 26 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 69cafe4cd07..e1286595c46 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
@@ -100,6 +100,27 @@ public final class DatabaseMetaDataManager {
return;
}
database.dropSchema(schemaName);
+ if
(database.getSchema(schemaName).getAllTables().stream().anyMatch(each ->
TableRefreshUtils.isSingleTable(each.getName(), database))) {
+ database.reloadRules();
+ }
+ metaData.getGlobalRuleMetaData().getRules().forEach(each ->
((GlobalRule) each).refresh(metaData.getAllDatabases(),
GlobalRuleChangedType.SCHEMA_CHANGED));
+ }
+
+ /**
+ * Rename schema.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @param renamedSchemaName renamed schema name
+ */
+ public synchronized void renameSchema(final String databaseName, final
String schemaName, final String renamedSchemaName) {
+ ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
+ ShardingSphereDatabase database = metaData.getDatabase(databaseName);
+ ShardingSphereSchema schema = database.getSchema(schemaName);
+ ShardingSphereSchema renamedSchema = new
ShardingSphereSchema(renamedSchemaName, schema.getAllTables(),
schema.getAllViews());
+ database.addSchema(renamedSchema);
+ database.dropSchema(schemaName);
+ database.reloadRules();
metaData.getGlobalRuleMetaData().getRules().forEach(each ->
((GlobalRule) each).refresh(metaData.getAllDatabases(),
GlobalRuleChangedType.SCHEMA_CHANGED));
}
@@ -131,10 +152,10 @@ public final class DatabaseMetaDataManager {
return;
}
ShardingSphereDatabase database =
metaDataContexts.getMetaData().getDatabase(databaseName);
+ alterAction.accept(database.getSchema(schemaName));
if (TableRefreshUtils.isSingleTable(tableOrViewName, database)) {
database.reloadRules();
}
- alterAction.accept(database.getSchema(schemaName));
metaData.getGlobalRuleMetaData().getRules().forEach(each ->
((GlobalRule) each).refresh(metaData.getAllDatabases(),
GlobalRuleChangedType.SCHEMA_CHANGED));
}
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 983f4b84315..97d1c3ef338 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
@@ -26,7 +26,6 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
-import
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
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;
@@ -52,7 +51,6 @@ import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import java.util.Properties;
-import java.util.stream.Collectors;
/**
* Standalone meta data manager persist service.
@@ -118,18 +116,7 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
metaDataPersistService.getDatabaseMetaDataFacade().getView().persist(databaseName,
renameSchemaName, schema.getAllViews());
}
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName,
schemaName);
- renameSchemaMetaData(databaseName, schemaName, renameSchemaName);
- }
-
- 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);
- database.dropSchema(schemaName);
- database.reloadRules();
- metaData.getGlobalRuleMetaData().getRules().forEach(each ->
((GlobalRule) each).refresh(metaData.getAllDatabases(),
GlobalRuleChangedType.SCHEMA_CHANGED));
+
metaDataContextManager.getDatabaseMetaDataManager().renameSchema(databaseName,
schemaName, renameSchemaName);
}
@Override
@@ -139,16 +126,7 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
private void dropSchema(final String databaseName, final String
schemaName) {
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName,
schemaName);
- ShardingSphereMetaData metaData =
metaDataContextManager.getMetaDataContexts().getMetaData();
- ShardingSphereDatabase database = metaData.getDatabase(databaseName);
- Collection<String> tobeRemovedTables =
database.getSchema(schemaName).getAllTables().stream().map(ShardingSphereTable::getName).collect(Collectors.toSet());
- database.dropSchema(schemaName);
-
removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class),
Collections.singleton(schemaName.toLowerCase()), tobeRemovedTables);
- 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)));
+
metaDataContextManager.getDatabaseMetaDataManager().dropSchema(databaseName,
schemaName);
}
@Override
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 7f135b5eee2..5290541fc91 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
@@ -143,7 +143,8 @@ class StandaloneMetaDataManagerPersistServiceTest {
ShardingSphereMetaData metaData = new
ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new
ConfigurationProperties(new Properties()));
when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
metaDataManagerPersistService.dropSchema("foo_db",
Collections.singleton("foo_schema"));
- verify(database).dropSchema(any());
+
verify(metaDataPersistService.getDatabaseMetaDataFacade().getSchema()).drop("foo_db",
"foo_schema");
+
verify(metaDataContextManager.getDatabaseMetaDataManager()).dropSchema("foo_db",
"foo_schema");
}
@Test