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 <[email protected]>
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");
}