Skip to content

Commit 129928f

Browse files
committed
Refactor StandaloneMetaDataManagerPersistService
1 parent 71b8236 commit 129928f

File tree

2 files changed

+32
-24
lines changed

2 files changed

+32
-24
lines changed

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,9 @@ public void removeRuleConfigurationItem(final ShardingSphereDatabase database, f
195195
metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables(database.getName(), getReloadedMetaDataContexts(originalMetaDataContexts), needReloadTables);
196196
}
197197

198-
private Collection<String> getNeedReloadTables(final ShardingSphereDatabase originalShardingDatabase, final RuleConfiguration toBeAlteredRuleConfig) {
198+
private Collection<String> getNeedReloadTables(final ShardingSphereDatabase originalDatabase, final RuleConfiguration toBeAlteredRuleConfig) {
199199
if (toBeAlteredRuleConfig instanceof SingleRuleConfiguration) {
200-
Collection<String> originalSingleTables = originalShardingDatabase.getRuleMetaData().getSingleRule(SingleRule.class).getConfiguration().getLogicTableNames();
200+
Collection<String> originalSingleTables = originalDatabase.getRuleMetaData().getSingleRule(SingleRule.class).getConfiguration().getLogicTableNames();
201201
return toBeAlteredRuleConfig.getLogicTableNames().stream().filter(each -> !originalSingleTables.contains(each)).collect(Collectors.toList());
202202
}
203203
return toBeAlteredRuleConfig.getLogicTableNames();

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

+30-22
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,9 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
5858

5959
private final MetaDataPersistFacade metaDataPersistFacade;
6060

61-
private final RuleItemChangedNodePathBuilder ruleItemChangedNodePathBuilder;
62-
6361
public StandaloneMetaDataManagerPersistService(final MetaDataContextManager metaDataContextManager) {
6462
this.metaDataContextManager = metaDataContextManager;
6563
metaDataPersistFacade = metaDataContextManager.getMetaDataPersistFacade();
66-
ruleItemChangedNodePathBuilder = new RuleItemChangedNodePathBuilder();
6764
}
6865

6966
@Override
@@ -208,54 +205,65 @@ public void alterRuleConfiguration(final ShardingSphereDatabase database, final
208205
return;
209206
}
210207
Collection<String> needReloadTables = getNeedReloadTables(database, toBeAlteredRuleConfig);
211-
for (MetaDataVersion each : metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(toBeAlteredRuleConfig))) {
212-
Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedNodePathBuilder.build(database.getName(), new VersionNodePath(each.getNodePath()).getActiveVersionPath());
213-
if (databaseRuleNodePath.isPresent()
214-
&& new ActiveVersionChecker(metaDataPersistFacade.getRepository()).checkSame(new VersionNodePath(databaseRuleNodePath.get()), each.getActiveVersion())) {
215-
metaDataContextManager.getDatabaseRuleItemManager().alter(databaseRuleNodePath.get());
216-
}
217-
}
208+
Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(toBeAlteredRuleConfig));
209+
alterRuleItem(database.getName(), metaDataVersions);
218210
Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap = metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables(
219211
database.getName(), metaDataContextManager.getMetaDataContexts(), needReloadTables);
220212
alterTables(database, schemaAndTablesMap);
221213
OrderedServicesCache.clearCache();
222214
}
223215

216+
private void alterRuleItem(final String databaseName, final Collection<MetaDataVersion> metaDataVersions) throws SQLException {
217+
RuleItemChangedNodePathBuilder ruleItemChangedNodePathBuilder = new RuleItemChangedNodePathBuilder();
218+
ActiveVersionChecker activeVersionChecker = new ActiveVersionChecker(metaDataPersistFacade.getRepository());
219+
for (MetaDataVersion each : metaDataVersions) {
220+
Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedNodePathBuilder.build(databaseName, new VersionNodePath(each.getNodePath()).getActiveVersionPath());
221+
if (databaseRuleNodePath.isPresent() && activeVersionChecker.checkSame(new VersionNodePath(databaseRuleNodePath.get()), each.getActiveVersion())) {
222+
metaDataContextManager.getDatabaseRuleItemManager().alter(databaseRuleNodePath.get());
223+
}
224+
}
225+
}
226+
224227
@Override
225228
public void removeRuleConfigurationItem(final ShardingSphereDatabase database, final RuleConfiguration toBeRemovedRuleConfig) throws SQLException {
226229
if (null == toBeRemovedRuleConfig) {
227230
return;
228231
}
229232
Collection<String> needReloadTables = getNeedReloadTables(database, toBeRemovedRuleConfig);
230233
Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), Collections.singleton(toBeRemovedRuleConfig));
231-
for (MetaDataVersion each : metaDataVersions) {
232-
Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedNodePathBuilder.build(database.getName(), new VersionNodePath(each.getNodePath()).getActiveVersionPath());
233-
if (databaseRuleNodePath.isPresent()) {
234-
metaDataContextManager.getDatabaseRuleItemManager().drop(databaseRuleNodePath.get());
235-
}
236-
}
234+
removeRuleItem(database.getName(), metaDataVersions);
237235
Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap = metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables(
238236
database.getName(), metaDataContextManager.getMetaDataContexts(), needReloadTables);
239237
alterTables(database, schemaAndTablesMap);
240238
OrderedServicesCache.clearCache();
241239
}
242240

243-
private void alterTables(final ShardingSphereDatabase database, final Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap) {
244-
for (Entry<String, Collection<ShardingSphereTable>> entry : schemaAndTablesMap.entrySet()) {
245-
for (ShardingSphereTable each : entry.getValue()) {
246-
metaDataContextManager.getDatabaseMetaDataManager().alterTable(database.getName(), entry.getKey(), each);
241+
private void removeRuleItem(final String databaseName, final Collection<MetaDataVersion> metaDataVersions) throws SQLException {
242+
RuleItemChangedNodePathBuilder ruleItemChangedNodePathBuilder = new RuleItemChangedNodePathBuilder();
243+
for (MetaDataVersion each : metaDataVersions) {
244+
Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedNodePathBuilder.build(databaseName, new VersionNodePath(each.getNodePath()).getActiveVersionPath());
245+
if (databaseRuleNodePath.isPresent()) {
246+
metaDataContextManager.getDatabaseRuleItemManager().drop(databaseRuleNodePath.get());
247247
}
248248
}
249249
}
250250

251-
private Collection<String> getNeedReloadTables(final ShardingSphereDatabase originalShardingDatabase, final RuleConfiguration toBeAlteredRuleConfig) {
251+
private Collection<String> getNeedReloadTables(final ShardingSphereDatabase originalDatabase, final RuleConfiguration toBeAlteredRuleConfig) {
252252
if (toBeAlteredRuleConfig instanceof SingleRuleConfiguration) {
253-
Collection<String> originalSingleTables = originalShardingDatabase.getRuleMetaData().getSingleRule(SingleRule.class).getConfiguration().getLogicTableNames();
253+
Collection<String> originalSingleTables = originalDatabase.getRuleMetaData().getSingleRule(SingleRule.class).getConfiguration().getLogicTableNames();
254254
return toBeAlteredRuleConfig.getLogicTableNames().stream().filter(each -> !originalSingleTables.contains(each)).collect(Collectors.toList());
255255
}
256256
return toBeAlteredRuleConfig.getLogicTableNames();
257257
}
258258

259+
private void alterTables(final ShardingSphereDatabase database, final Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap) {
260+
for (Entry<String, Collection<ShardingSphereTable>> entry : schemaAndTablesMap.entrySet()) {
261+
for (ShardingSphereTable each : entry.getValue()) {
262+
metaDataContextManager.getDatabaseMetaDataManager().alterTable(database.getName(), entry.getKey(), each);
263+
}
264+
}
265+
}
266+
259267
@Override
260268
public void removeRuleConfiguration(final ShardingSphereDatabase database, final String ruleType) {
261269
metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), ruleType);

0 commit comments

Comments
 (0)