Skip to content

Commit d50737f

Browse files
committed
Add DatabaseMetaDataPersistFacade.unregisterStorageUnits()
1 parent a44a980 commit d50737f

File tree

4 files changed

+49
-51
lines changed

4 files changed

+49
-51
lines changed

mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistFacade.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,12 @@ public void persistConfigurations(final String databaseName, final DatabaseConfi
103103
databaseMetaDataFacade.getDatabase().add(databaseName);
104104
} else {
105105
dataSourceUnitService.persist(databaseName, propsMap);
106-
databaseRuleService.persist(databaseName, decorateRuleConfigs(databaseName, dataSources, rules));
106+
databaseRuleService.persist(databaseName, decorateRuleConfigurations(databaseName, dataSources, rules));
107107
}
108108
}
109109

110110
@SuppressWarnings({"unchecked", "rawtypes"})
111-
private Collection<RuleConfiguration> decorateRuleConfigs(final String databaseName, final Map<String, DataSource> dataSources, final Collection<ShardingSphereRule> rules) {
111+
private Collection<RuleConfiguration> decorateRuleConfigurations(final String databaseName, final Map<String, DataSource> dataSources, final Collection<ShardingSphereRule> rules) {
112112
Collection<RuleConfiguration> result = new LinkedList<>();
113113
for (ShardingSphereRule each : rules) {
114114
RuleConfiguration ruleConfig = each.getConfiguration();

mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java

+26
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,27 @@
1818
package org.apache.shardingsphere.mode.metadata.persist.metadata;
1919

2020
import lombok.Getter;
21+
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
2122
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
2223
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
24+
import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
25+
import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
2326
import org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
2427
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
2528
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
2629
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
30+
import org.apache.shardingsphere.mode.exception.LoadTableMetaDataFailedException;
31+
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
2732
import org.apache.shardingsphere.mode.metadata.persist.metadata.service.DatabaseMetaDataPersistService;
2833
import org.apache.shardingsphere.mode.metadata.persist.metadata.service.SchemaMetaDataPersistService;
2934
import org.apache.shardingsphere.mode.metadata.persist.metadata.service.TableMetaDataPersistService;
3035
import org.apache.shardingsphere.mode.metadata.persist.metadata.service.ViewMetaDataPersistService;
3136
import org.apache.shardingsphere.mode.metadata.persist.version.VersionPersistService;
3237
import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
3338

39+
import java.sql.SQLException;
3440
import java.util.Collection;
41+
import java.util.Map.Entry;
3542

3643
/**
3744
* Database meta data persist facade.
@@ -119,4 +126,23 @@ public void renameSchema(final ShardingSphereMetaData metaData, final ShardingSp
119126
}
120127
this.schema.drop(database.getName(), schemaName);
121128
}
129+
130+
/**
131+
* Register storage units.
132+
*
133+
* @param databaseName database name
134+
* @param reloadMetaDataContexts reload meta data contexts
135+
*/
136+
public void unregisterStorageUnits(final String databaseName, final MetaDataContexts reloadMetaDataContexts) {
137+
ShardingSphereDatabase database = reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
138+
GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
139+
database.getRuleMetaData().getRules(), reloadMetaDataContexts.getMetaData().getProps(), new DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
140+
try {
141+
for (Entry<String, ShardingSphereSchema> entry : GenericSchemaBuilder.build(database.getProtocolType(), material).entrySet()) {
142+
GenericSchemaManager.getToBeDroppedTables(entry.getValue(), database.getSchema(entry.getKey())).forEach(each -> table.drop(databaseName, entry.getKey(), each.getName()));
143+
}
144+
} catch (final SQLException ex) {
145+
throw new LoadTableMetaDataFailedException(databaseName, ex);
146+
}
147+
}
122148
}

mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java

+19-30
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
3131
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
3232
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
33+
import org.apache.shardingsphere.infra.metadata.statistics.DatabaseStatistics;
34+
import org.apache.shardingsphere.infra.metadata.statistics.SchemaStatistics;
3335
import org.apache.shardingsphere.infra.util.retry.RetryExecutor;
3436
import org.apache.shardingsphere.mode.exception.LoadTableMetaDataFailedException;
3537
import org.apache.shardingsphere.mode.manager.cluster.exception.ReloadMetaDataContextFailedException;
@@ -142,20 +144,6 @@ public void alterStorageUnits(final ShardingSphereDatabase database, final Map<S
142144
afterStorageUnitsAltered(database.getName(), originalMetaDataContexts);
143145
}
144146

145-
@Override
146-
public void unregisterStorageUnits(final ShardingSphereDatabase database, final Collection<String> toBeDroppedStorageUnitNames) {
147-
for (String each : getToBeDroppedResourceNames(database.getName(), toBeDroppedStorageUnitNames)) {
148-
MetaDataContexts originalMetaDataContexts = new MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), metaDataContextManager.getMetaDataContexts().getStatistics());
149-
metaDataPersistFacade.getDataSourceUnitService().delete(database.getName(), each);
150-
afterStorageUnitsDropped(database.getName(), originalMetaDataContexts);
151-
}
152-
}
153-
154-
private Collection<String> getToBeDroppedResourceNames(final String databaseName, final Collection<String> toBeDroppedResourceNames) {
155-
Map<String, DataSourcePoolProperties> propsMap = metaDataPersistFacade.getDataSourceUnitService().load(databaseName);
156-
return toBeDroppedResourceNames.stream().filter(propsMap::containsKey).collect(Collectors.toList());
157-
}
158-
159147
private void afterStorageUnitsAltered(final String databaseName, final MetaDataContexts originalMetaDataContexts) {
160148
MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts);
161149
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseStatistics(databaseName))
@@ -165,24 +153,25 @@ private void afterStorageUnitsAltered(final String databaseName, final MetaDataC
165153
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
166154
}
167155

168-
private void afterStorageUnitsDropped(final String databaseName, final MetaDataContexts originalMetaDataContexts) {
169-
MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts);
170-
ShardingSphereDatabase database = reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
171-
GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
172-
database.getRuleMetaData().getRules(), reloadMetaDataContexts.getMetaData().getProps(),
173-
new DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
174-
try {
175-
Map<String, ShardingSphereSchema> schemas = GenericSchemaBuilder.build(database.getProtocolType(), material);
176-
for (Entry<String, ShardingSphereSchema> entry : schemas.entrySet()) {
177-
Collection<ShardingSphereTable> tables = GenericSchemaManager.getToBeDroppedTables(entry.getValue(), database.getSchema(entry.getKey()));
178-
tables.forEach(each -> metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(databaseName, entry.getKey(), each.getName()));
156+
@Override
157+
public void unregisterStorageUnits(final ShardingSphereDatabase database, final Collection<String> toBeDroppedStorageUnitNames) {
158+
for (String each : getToBeDroppedResourceNames(database.getName(), toBeDroppedStorageUnitNames)) {
159+
MetaDataContexts originalMetaDataContexts = new MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), metaDataContextManager.getMetaDataContexts().getStatistics());
160+
metaDataPersistFacade.getDataSourceUnitService().delete(database.getName(), each);
161+
MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts);
162+
metaDataPersistFacade.getDatabaseMetaDataFacade().unregisterStorageUnits(database.getName(), reloadMetaDataContexts);
163+
DatabaseStatistics databaseStatistics = reloadMetaDataContexts.getStatistics().getDatabaseStatistics(database.getName());
164+
if (null != databaseStatistics) {
165+
for (Entry<String, SchemaStatistics> entry : databaseStatistics.getSchemaStatisticsMap().entrySet()) {
166+
metaDataPersistFacade.getStatisticsService().persist(originalMetaDataContexts.getMetaData().getDatabase(database.getName()), entry.getKey(), entry.getValue());
167+
}
179168
}
180-
} catch (final SQLException ex) {
181-
throw new LoadTableMetaDataFailedException(databaseName, ex);
182169
}
183-
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseStatistics(databaseName))
184-
.ifPresent(optional -> optional.getSchemaStatisticsMap().forEach((schemaName, schemaStatistics) -> metaDataPersistFacade.getStatisticsService()
185-
.persist(originalMetaDataContexts.getMetaData().getDatabase(databaseName), schemaName, schemaStatistics)));
170+
}
171+
172+
private Collection<String> getToBeDroppedResourceNames(final String databaseName, final Collection<String> toBeDroppedResourceNames) {
173+
Map<String, DataSourcePoolProperties> propsMap = metaDataPersistFacade.getDataSourceUnitService().load(databaseName);
174+
return toBeDroppedResourceNames.stream().filter(propsMap::containsKey).collect(Collectors.toList());
186175
}
187176

188177
@Override

mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java

+2-19
Original file line numberDiff line numberDiff line change
@@ -188,29 +188,12 @@ private void afterStorageUnitsAltered(final String databaseName, final MetaDataC
188188
public void unregisterStorageUnits(final ShardingSphereDatabase database, final Collection<String> toBeDroppedStorageUnitNames) {
189189
for (String each : getToBeDroppedResourceNames(database.getName(), toBeDroppedStorageUnitNames)) {
190190
metaDataPersistFacade.getDataSourceUnitService().delete(database.getName(), each);
191-
afterStorageUnitsUnregistered(database.getName(), each);
191+
metaDataContextManager.getStorageUnitManager().unregister(database.getName(), each);
192+
metaDataPersistFacade.getDatabaseMetaDataFacade().unregisterStorageUnits(database.getName(), metaDataContextManager.getMetaDataContexts());
192193
}
193194
OrderedServicesCache.clearCache();
194195
}
195196

196-
private void afterStorageUnitsUnregistered(final String databaseName, final String storageUnitName) {
197-
metaDataContextManager.getStorageUnitManager().unregister(databaseName, storageUnitName);
198-
MetaDataContexts reloadMetaDataContexts = metaDataContextManager.getMetaDataContexts();
199-
ShardingSphereDatabase database = reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
200-
GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
201-
database.getRuleMetaData().getRules(), reloadMetaDataContexts.getMetaData().getProps(),
202-
new DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
203-
try {
204-
Map<String, ShardingSphereSchema> schemas = GenericSchemaBuilder.build(database.getProtocolType(), material);
205-
for (Entry<String, ShardingSphereSchema> entry : schemas.entrySet()) {
206-
Collection<ShardingSphereTable> tables = GenericSchemaManager.getToBeDroppedTables(entry.getValue(), database.getSchema(entry.getKey()));
207-
tables.forEach(each -> metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(databaseName, entry.getKey(), each.getName()));
208-
}
209-
} catch (final SQLException ex) {
210-
throw new LoadTableMetaDataFailedException(databaseName, ex);
211-
}
212-
}
213-
214197
private Collection<String> getToBeDroppedResourceNames(final String databaseName, final Collection<String> toBeDroppedResourceNames) {
215198
Map<String, DataSourcePoolProperties> propsMap = metaDataPersistFacade.getDataSourceUnitService().load(databaseName);
216199
return toBeDroppedResourceNames.stream().filter(propsMap::containsKey).collect(Collectors.toList());

0 commit comments

Comments
 (0)