This is an automated email from the ASF dual-hosted git repository.
chengzhang 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 0703e4c7922 Refactor ClusterMetaDataManagerPersistService (#34363)
0703e4c7922 is described below
commit 0703e4c7922b0e359ebfc7df62b98a96f1f4e96a
Author: Haoran Meng <[email protected]>
AuthorDate: Wed Jan 15 17:56:09 2025 +0800
Refactor ClusterMetaDataManagerPersistService (#34363)
---
.../ClusterMetaDataManagerPersistService.java | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
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 16fe58ff481..5d73de6ee14 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
@@ -21,11 +21,13 @@ import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer;
import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO;
import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
+import
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import
org.apache.shardingsphere.mode.metadata.persist.service.config.database.DataSourceUnitPersistService;
@@ -114,9 +116,10 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
alterSchemaMetaDataPOJO.getDroppedViews().forEach(each ->
databaseMetaDataFacade.getView().delete(databaseName, schemaName, each));
}
+ @SneakyThrows
@Override
- public void registerStorageUnits(final String databaseName, final
Map<String, DataSourcePoolProperties> toBeRegisteredProps) throws SQLException {
- MetaDataContexts originalMetaDataContexts =
metaDataContextManager.getMetaDataContexts();
+ public void registerStorageUnits(final String databaseName, final
Map<String, DataSourcePoolProperties> toBeRegisteredProps) {
+ MetaDataContexts originalMetaDataContexts =
buildOriginalMetaDataContexts();
Map<StorageNode, DataSource> newDataSources = new
HashMap<>(toBeRegisteredProps.size());
try {
SwitchingResource switchingResource =
metaDataContextManager.getResourceSwitchManager()
@@ -134,7 +137,7 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
@Override
public void alterStorageUnits(final String databaseName, final Map<String,
DataSourcePoolProperties> toBeUpdatedProps) throws SQLException {
- MetaDataContexts originalMetaDataContexts =
metaDataContextManager.getMetaDataContexts();
+ MetaDataContexts originalMetaDataContexts =
buildOriginalMetaDataContexts();
Map<StorageNode, DataSource> newDataSources = new
HashMap<>(toBeUpdatedProps.size());
try {
SwitchingResource switchingResource =
metaDataContextManager.getResourceSwitchManager()
@@ -155,7 +158,7 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
@Override
public void unregisterStorageUnits(final String databaseName, final
Collection<String> toBeDroppedStorageUnitNames) throws SQLException {
for (String each : getToBeDroppedResourceNames(databaseName,
toBeDroppedStorageUnitNames)) {
- MetaDataContexts originalMetaDataContexts =
metaDataContextManager.getMetaDataContexts();
+ MetaDataContexts originalMetaDataContexts =
buildOriginalMetaDataContexts();
SwitchingResource switchingResource =
metaDataContextManager.getResourceSwitchManager()
.createByUnregisterStorageUnit(originalMetaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(),
Collections.singletonList(each));
MetaDataContexts reloadMetaDataContexts =
MetaDataContextsFactory.createBySwitchResource(databaseName, false,
@@ -209,7 +212,7 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
if (null == toBeAlteredRuleConfig) {
return;
}
- MetaDataContexts originalMetaDataContexts =
metaDataContextManager.getMetaDataContexts();
+ MetaDataContexts originalMetaDataContexts =
buildOriginalMetaDataContexts();
Collection<MetaDataVersion> metaDataVersions =
metaDataPersistService.getDatabaseRulePersistService().persist(databaseName,
Collections.singleton(toBeAlteredRuleConfig));
metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
afterRuleConfigurationAltered(databaseName, originalMetaDataContexts);
@@ -232,7 +235,7 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
@Override
public void removeRuleConfiguration(final String databaseName, final
String ruleName) {
- MetaDataContexts originalMetaDataContexts =
metaDataContextManager.getMetaDataContexts();
+ MetaDataContexts originalMetaDataContexts =
buildOriginalMetaDataContexts();
metaDataPersistService.getDatabaseRulePersistService().delete(databaseName,
ruleName);
afterRuleConfigurationDropped(databaseName, originalMetaDataContexts);
}
@@ -264,4 +267,10 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
public void dropTables(final String databaseName, final String schemaName,
final Collection<String> tableNames) {
tableNames.forEach(each ->
metaDataPersistService.getDatabaseMetaDataFacade().getTable().drop(databaseName,
schemaName, each));
}
+
+ private MetaDataContexts buildOriginalMetaDataContexts() {
+ ShardingSphereMetaData originalMetaData =
metaDataContextManager.getMetaDataContexts().getMetaData();
+ ShardingSphereStatistics originalStatistics =
metaDataContextManager.getMetaDataContexts().getStatistics();
+ return new MetaDataContexts(originalMetaData, originalStatistics);
+ }
}