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 <[email protected]>
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();
}
}