Skip to content

Commit 0ff2ca8

Browse files
authored
Refactor ClusterMetaDataManagerPersistService.getReloadedMetaDataContexts() (#35001)
1 parent 37493e8 commit 0ff2ca8

File tree

1 file changed

+10
-15
lines changed

1 file changed

+10
-15
lines changed

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

+10-15
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
2323
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
2424
import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
25+
import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
2526
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
2627
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
2728
import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
@@ -30,6 +31,7 @@
3031
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
3132
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
3233
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
34+
import org.apache.shardingsphere.infra.util.retry.RetryExecutor;
3335
import org.apache.shardingsphere.mode.exception.LoadTableMetaDataFailedException;
3436
import org.apache.shardingsphere.mode.manager.cluster.exception.ReloadMetaDataContextFailedException;
3537
import org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.database.ClusterDatabaseListenerCoordinatorType;
@@ -80,7 +82,7 @@ public void createDatabase(final String databaseName) {
8082
}
8183

8284
private void afterDatabaseCreated(final String databaseName, final MetaDataContexts originalMetaDataContexts) {
83-
MetaDataContexts reloadMetaDataContexts = getReloadMetaDataContexts(originalMetaDataContexts);
85+
MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts);
8486
metaDataPersistFacade.persistReloadDatabaseByAlter(databaseName, reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
8587
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
8688
}
@@ -174,7 +176,7 @@ private Collection<String> getToBeDroppedResourceNames(final String databaseName
174176
}
175177

176178
private void afterStorageUnitsAltered(final String databaseName, final MetaDataContexts originalMetaDataContexts) {
177-
MetaDataContexts reloadMetaDataContexts = getReloadMetaDataContexts(originalMetaDataContexts);
179+
MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts);
178180
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseStatistics(databaseName))
179181
.ifPresent(optional -> optional.getSchemaStatisticsMap().forEach((schemaName, schemaStatistics) -> metaDataPersistFacade.getStatisticsService()
180182
.persist(originalMetaDataContexts.getMetaData().getDatabase(databaseName), schemaName, schemaStatistics)));
@@ -183,7 +185,7 @@ private void afterStorageUnitsAltered(final String databaseName, final MetaDataC
183185
}
184186

185187
private void afterStorageUnitsDropped(final String databaseName, final MetaDataContexts originalMetaDataContexts) {
186-
MetaDataContexts reloadMetaDataContexts = getReloadMetaDataContexts(originalMetaDataContexts);
188+
MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts);
187189
ShardingSphereDatabase database = reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
188190
GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
189191
database.getRuleMetaData().getRules(), reloadMetaDataContexts.getMetaData().getProps(),
@@ -232,7 +234,7 @@ public void removeRuleConfigurationItem(final ShardingSphereDatabase database, f
232234
}
233235

234236
private void reloadAlteredTables(final String databaseName, final MetaDataContexts originalMetaDataContexts, final Collection<String> needReloadTables) {
235-
MetaDataContexts reloadMetaDataContexts = getReloadMetaDataContexts(originalMetaDataContexts);
237+
MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts);
236238
ShardingSphereDatabase database = reloadMetaDataContexts.getMetaData().getDatabase(databaseName);
237239
GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(),
238240
database.getRuleMetaData().getRules(), reloadMetaDataContexts.getMetaData().getProps(),
@@ -273,21 +275,14 @@ public void alterProperties(final Properties props) {
273275
}
274276

275277
@SneakyThrows(InterruptedException.class)
276-
private MetaDataContexts getReloadMetaDataContexts(final MetaDataContexts originalMetaDataContexts) {
278+
private MetaDataContexts getReloadedMetaDataContexts(final MetaDataContexts originalMetaDataContexts) {
277279
Thread.sleep(3000L);
278280
MetaDataContexts reloadMetaDataContexts = metaDataContextManager.getMetaDataContexts();
279281
if (reloadMetaDataContexts.getMetaData() != originalMetaDataContexts.getMetaData() && reloadMetaDataContexts.getStatistics() != originalMetaDataContexts.getStatistics()) {
280282
return reloadMetaDataContexts;
281283
}
282-
long startTime = System.currentTimeMillis();
283-
long timeout = 30000;
284-
while (System.currentTimeMillis() - startTime < timeout) {
285-
reloadMetaDataContexts = metaDataContextManager.getMetaDataContexts();
286-
if (reloadMetaDataContexts != originalMetaDataContexts) {
287-
return reloadMetaDataContexts;
288-
}
289-
Thread.sleep(1000L);
290-
}
291-
throw new ReloadMetaDataContextFailedException();
284+
RetryExecutor retryExecutor = new RetryExecutor(30000L, 1000L);
285+
ShardingSpherePreconditions.checkState(retryExecutor.execute(arg -> metaDataContextManager.getMetaDataContexts() != arg, originalMetaDataContexts), ReloadMetaDataContextFailedException::new);
286+
return metaDataContextManager.getMetaDataContexts();
292287
}
293288
}

0 commit comments

Comments
 (0)