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 c9c7b9606b3 Add DatabaseMetaDataPersistFacade.unregisterStorageUnits()
(#35010)
c9c7b9606b3 is described below
commit c9c7b9606b3f42bc2266a54b2fe60e38a477a1df
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Mar 16 14:20:09 2025 +0800
Add DatabaseMetaDataPersistFacade.unregisterStorageUnits() (#35010)
* Add DatabaseMetaDataPersistFacade.unregisterStorageUnits()
* Add DatabaseMetaDataPersistFacade.unregisterStorageUnits()
* Add DatabaseMetaDataPersistFacade.unregisterStorageUnits()
---
.../metadata/persist/MetaDataPersistFacade.java | 4 +-
.../metadata/DatabaseMetaDataPersistFacade.java | 27 ++++++++++++
.../ClusterMetaDataManagerPersistService.java | 49 +++++++++-------------
.../StandaloneMetaDataManagerPersistService.java | 21 +---------
4 files changed, 50 insertions(+), 51 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistFacade.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistFacade.java
index be5d99b68d0..b405aeed567 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistFacade.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistFacade.java
@@ -103,12 +103,12 @@ public final class MetaDataPersistFacade {
databaseMetaDataFacade.getDatabase().add(databaseName);
} else {
dataSourceUnitService.persist(databaseName, propsMap);
- databaseRuleService.persist(databaseName,
decorateRuleConfigs(databaseName, dataSources, rules));
+ databaseRuleService.persist(databaseName,
decorateRuleConfigurations(databaseName, dataSources, rules));
}
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private Collection<RuleConfiguration> decorateRuleConfigs(final String
databaseName, final Map<String, DataSource> dataSources, final
Collection<ShardingSphereRule> rules) {
+ private Collection<RuleConfiguration> decorateRuleConfigurations(final
String databaseName, final Map<String, DataSource> dataSources, final
Collection<ShardingSphereRule> rules) {
Collection<RuleConfiguration> result = new LinkedList<>();
for (ShardingSphereRule each : rules) {
RuleConfiguration ruleConfig = each.getConfiguration();
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
index a33bf618c67..66f7d398636 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java
@@ -18,12 +18,17 @@
package org.apache.shardingsphere.mode.metadata.persist.metadata;
import lombok.Getter;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
import
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
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.model.ShardingSphereView;
+import
org.apache.shardingsphere.mode.exception.LoadTableMetaDataFailedException;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import
org.apache.shardingsphere.mode.metadata.persist.metadata.service.DatabaseMetaDataPersistService;
import
org.apache.shardingsphere.mode.metadata.persist.metadata.service.SchemaMetaDataPersistService;
import
org.apache.shardingsphere.mode.metadata.persist.metadata.service.TableMetaDataPersistService;
@@ -31,7 +36,9 @@ import
org.apache.shardingsphere.mode.metadata.persist.metadata.service.ViewMeta
import
org.apache.shardingsphere.mode.metadata.persist.version.VersionPersistService;
import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
+import java.sql.SQLException;
import java.util.Collection;
+import java.util.Map.Entry;
/**
* Database meta data persist facade.
@@ -119,4 +126,24 @@ public final class DatabaseMetaDataPersistFacade {
}
this.schema.drop(database.getName(), schemaName);
}
+
+ /**
+ * Register storage units.
+ *
+ * @param databaseName database name
+ * @param reloadMetaDataContexts reload meta data contexts
+ * @throws LoadTableMetaDataFailedException if an error occurs while
loading table metadata
+ */
+ public void unregisterStorageUnits(final String databaseName, final
MetaDataContexts reloadMetaDataContexts) {
+ ShardingSphereDatabase database =
reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
+ GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
+ database.getRuleMetaData().getRules(),
reloadMetaDataContexts.getMetaData().getProps(), new
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
+ try {
+ for (Entry<String, ShardingSphereSchema> entry :
GenericSchemaBuilder.build(database.getProtocolType(), material).entrySet()) {
+ GenericSchemaManager.getToBeDroppedTables(entry.getValue(),
database.getSchema(entry.getKey())).forEach(each -> table.drop(databaseName,
entry.getKey(), each.getName()));
+ }
+ } catch (final SQLException ex) {
+ throw new LoadTableMetaDataFailedException(databaseName, ex);
+ }
+ }
}
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 7a7d7b4d6ac..9de8f21d0b6 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
@@ -30,6 +30,8 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericS
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.model.ShardingSphereView;
+import org.apache.shardingsphere.infra.metadata.statistics.DatabaseStatistics;
+import org.apache.shardingsphere.infra.metadata.statistics.SchemaStatistics;
import org.apache.shardingsphere.infra.util.retry.RetryExecutor;
import
org.apache.shardingsphere.mode.exception.LoadTableMetaDataFailedException;
import
org.apache.shardingsphere.mode.manager.cluster.exception.ReloadMetaDataContextFailedException;
@@ -142,20 +144,6 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
afterStorageUnitsAltered(database.getName(), originalMetaDataContexts);
}
- @Override
- public void unregisterStorageUnits(final ShardingSphereDatabase database,
final Collection<String> toBeDroppedStorageUnitNames) {
- for (String each : getToBeDroppedResourceNames(database.getName(),
toBeDroppedStorageUnitNames)) {
- MetaDataContexts originalMetaDataContexts = new
MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(),
metaDataContextManager.getMetaDataContexts().getStatistics());
-
metaDataPersistFacade.getDataSourceUnitService().delete(database.getName(),
each);
- afterStorageUnitsDropped(database.getName(),
originalMetaDataContexts);
- }
- }
-
- private Collection<String> getToBeDroppedResourceNames(final String
databaseName, final Collection<String> toBeDroppedResourceNames) {
- Map<String, DataSourcePoolProperties> propsMap =
metaDataPersistFacade.getDataSourceUnitService().load(databaseName);
- return
toBeDroppedResourceNames.stream().filter(propsMap::containsKey).collect(Collectors.toList());
- }
-
private void afterStorageUnitsAltered(final String databaseName, final
MetaDataContexts originalMetaDataContexts) {
MetaDataContexts reloadMetaDataContexts =
getReloadedMetaDataContexts(originalMetaDataContexts);
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseStatistics(databaseName))
@@ -165,24 +153,25 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
}
- private void afterStorageUnitsDropped(final String databaseName, final
MetaDataContexts originalMetaDataContexts) {
- MetaDataContexts reloadMetaDataContexts =
getReloadedMetaDataContexts(originalMetaDataContexts);
- ShardingSphereDatabase database =
reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
- GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
- database.getRuleMetaData().getRules(),
reloadMetaDataContexts.getMetaData().getProps(),
- new
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
- try {
- Map<String, ShardingSphereSchema> schemas =
GenericSchemaBuilder.build(database.getProtocolType(), material);
- for (Entry<String, ShardingSphereSchema> entry :
schemas.entrySet()) {
- Collection<ShardingSphereTable> tables =
GenericSchemaManager.getToBeDroppedTables(entry.getValue(),
database.getSchema(entry.getKey()));
- tables.forEach(each ->
metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(databaseName,
entry.getKey(), each.getName()));
+ @Override
+ public void unregisterStorageUnits(final ShardingSphereDatabase database,
final Collection<String> toBeDroppedStorageUnitNames) {
+ for (String each : getToBeDroppedResourceNames(database.getName(),
toBeDroppedStorageUnitNames)) {
+ MetaDataContexts originalMetaDataContexts = new
MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(),
metaDataContextManager.getMetaDataContexts().getStatistics());
+
metaDataPersistFacade.getDataSourceUnitService().delete(database.getName(),
each);
+ MetaDataContexts reloadMetaDataContexts =
getReloadedMetaDataContexts(originalMetaDataContexts);
+
metaDataPersistFacade.getDatabaseMetaDataFacade().unregisterStorageUnits(database.getName(),
reloadMetaDataContexts);
+ DatabaseStatistics databaseStatistics =
reloadMetaDataContexts.getStatistics().getDatabaseStatistics(database.getName());
+ if (null != databaseStatistics) {
+ for (Entry<String, SchemaStatistics> entry :
databaseStatistics.getSchemaStatisticsMap().entrySet()) {
+
metaDataPersistFacade.getStatisticsService().persist(originalMetaDataContexts.getMetaData().getDatabase(database.getName()),
entry.getKey(), entry.getValue());
+ }
}
- } catch (final SQLException ex) {
- throw new LoadTableMetaDataFailedException(databaseName, ex);
}
-
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseStatistics(databaseName))
- .ifPresent(optional ->
optional.getSchemaStatisticsMap().forEach((schemaName, schemaStatistics) ->
metaDataPersistFacade.getStatisticsService()
-
.persist(originalMetaDataContexts.getMetaData().getDatabase(databaseName),
schemaName, schemaStatistics)));
+ }
+
+ private Collection<String> getToBeDroppedResourceNames(final String
databaseName, final Collection<String> toBeDroppedResourceNames) {
+ Map<String, DataSourcePoolProperties> propsMap =
metaDataPersistFacade.getDataSourceUnitService().load(databaseName);
+ return
toBeDroppedResourceNames.stream().filter(propsMap::containsKey).collect(Collectors.toList());
}
@Override
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 b0ce77d5eae..fe71b99d162 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
@@ -188,29 +188,12 @@ public final class
StandaloneMetaDataManagerPersistService implements MetaDataMa
public void unregisterStorageUnits(final ShardingSphereDatabase database,
final Collection<String> toBeDroppedStorageUnitNames) {
for (String each : getToBeDroppedResourceNames(database.getName(),
toBeDroppedStorageUnitNames)) {
metaDataPersistFacade.getDataSourceUnitService().delete(database.getName(),
each);
- afterStorageUnitsUnregistered(database.getName(), each);
+
metaDataContextManager.getStorageUnitManager().unregister(database.getName(),
each);
+
metaDataPersistFacade.getDatabaseMetaDataFacade().unregisterStorageUnits(database.getName(),
metaDataContextManager.getMetaDataContexts());
}
OrderedServicesCache.clearCache();
}
- private void afterStorageUnitsUnregistered(final String databaseName,
final String storageUnitName) {
-
metaDataContextManager.getStorageUnitManager().unregister(databaseName,
storageUnitName);
- MetaDataContexts reloadMetaDataContexts =
metaDataContextManager.getMetaDataContexts();
- ShardingSphereDatabase database =
reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
- GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
- database.getRuleMetaData().getRules(),
reloadMetaDataContexts.getMetaData().getProps(),
- new
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
- try {
- Map<String, ShardingSphereSchema> schemas =
GenericSchemaBuilder.build(database.getProtocolType(), material);
- for (Entry<String, ShardingSphereSchema> entry :
schemas.entrySet()) {
- Collection<ShardingSphereTable> tables =
GenericSchemaManager.getToBeDroppedTables(entry.getValue(),
database.getSchema(entry.getKey()));
- tables.forEach(each ->
metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(databaseName,
entry.getKey(), each.getName()));
- }
- } catch (final SQLException ex) {
- throw new LoadTableMetaDataFailedException(databaseName, ex);
- }
- }
-
private Collection<String> getToBeDroppedResourceNames(final String
databaseName, final Collection<String> toBeDroppedResourceNames) {
Map<String, DataSourcePoolProperties> propsMap =
metaDataPersistFacade.getDataSourceUnitService().load(databaseName);
return
toBeDroppedResourceNames.stream().filter(propsMap::containsKey).collect(Collectors.toList());