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 0ff2ca81ba7 Refactor ClusterMetaDataManagerPersistService.getReloadedMetaDataContexts() (#35001) 0ff2ca81ba7 is described below commit 0ff2ca81ba7fe2c68d08f5bd020e7c721cd2f8b8 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sat Mar 15 21:13:16 2025 +0800 Refactor ClusterMetaDataManagerPersistService.getReloadedMetaDataContexts() (#35001) --- .../ClusterMetaDataManagerPersistService.java | 25 +++++++++------------- 1 file changed, 10 insertions(+), 15 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 8030ab9f936..eb7d9d1c1e9 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 @@ -22,6 +22,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; +import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder; @@ -30,6 +31,7 @@ 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.util.retry.RetryExecutor; import org.apache.shardingsphere.mode.exception.LoadTableMetaDataFailedException; import org.apache.shardingsphere.mode.manager.cluster.exception.ReloadMetaDataContextFailedException; import org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.database.ClusterDatabaseListenerCoordinatorType; @@ -80,7 +82,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } private void afterDatabaseCreated(final String databaseName, final MetaDataContexts originalMetaDataContexts) { - MetaDataContexts reloadMetaDataContexts = getReloadMetaDataContexts(originalMetaDataContexts); + MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts); metaDataPersistFacade.persistReloadDatabaseByAlter(databaseName, reloadMetaDataContexts.getMetaData().getDatabase(databaseName), originalMetaDataContexts.getMetaData().getDatabase(databaseName)); } @@ -174,7 +176,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } private void afterStorageUnitsAltered(final String databaseName, final MetaDataContexts originalMetaDataContexts) { - MetaDataContexts reloadMetaDataContexts = getReloadMetaDataContexts(originalMetaDataContexts); + MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts); Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseStatistics(databaseName)) .ifPresent(optional -> optional.getSchemaStatisticsMap().forEach((schemaName, schemaStatistics) -> metaDataPersistFacade.getStatisticsService() .persist(originalMetaDataContexts.getMetaData().getDatabase(databaseName), schemaName, schemaStatistics))); @@ -183,7 +185,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } private void afterStorageUnitsDropped(final String databaseName, final MetaDataContexts originalMetaDataContexts) { - MetaDataContexts reloadMetaDataContexts = getReloadMetaDataContexts(originalMetaDataContexts); + MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts); ShardingSphereDatabase database = reloadMetaDataContexts.getMetaData().getDatabase(databaseName); GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(), database.getRuleMetaData().getRules(), reloadMetaDataContexts.getMetaData().getProps(), @@ -232,7 +234,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } private void reloadAlteredTables(final String databaseName, final MetaDataContexts originalMetaDataContexts, final Collection<String> needReloadTables) { - MetaDataContexts reloadMetaDataContexts = getReloadMetaDataContexts(originalMetaDataContexts); + MetaDataContexts reloadMetaDataContexts = getReloadedMetaDataContexts(originalMetaDataContexts); ShardingSphereDatabase database = reloadMetaDataContexts.getMetaData().getDatabase(databaseName); GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(database.getResourceMetaData().getStorageUnits(), database.getRuleMetaData().getRules(), reloadMetaDataContexts.getMetaData().getProps(), @@ -273,21 +275,14 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } @SneakyThrows(InterruptedException.class) - private MetaDataContexts getReloadMetaDataContexts(final MetaDataContexts originalMetaDataContexts) { + private MetaDataContexts getReloadedMetaDataContexts(final MetaDataContexts originalMetaDataContexts) { Thread.sleep(3000L); MetaDataContexts reloadMetaDataContexts = metaDataContextManager.getMetaDataContexts(); if (reloadMetaDataContexts.getMetaData() != originalMetaDataContexts.getMetaData() && reloadMetaDataContexts.getStatistics() != originalMetaDataContexts.getStatistics()) { return reloadMetaDataContexts; } - long startTime = System.currentTimeMillis(); - long timeout = 30000; - while (System.currentTimeMillis() - startTime < timeout) { - reloadMetaDataContexts = metaDataContextManager.getMetaDataContexts(); - if (reloadMetaDataContexts != originalMetaDataContexts) { - return reloadMetaDataContexts; - } - Thread.sleep(1000L); - } - throw new ReloadMetaDataContextFailedException(); + RetryExecutor retryExecutor = new RetryExecutor(30000L, 1000L); + ShardingSpherePreconditions.checkState(retryExecutor.execute(arg -> metaDataContextManager.getMetaDataContexts() != arg, originalMetaDataContexts), ReloadMetaDataContextFailedException::new); + return metaDataContextManager.getMetaDataContexts(); } }