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();
     }
 }

Reply via email to