This is an automated email from the ASF dual-hosted git repository. yongzao pushed a commit to branch leader-election-time in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 9f542105545c2e359cb062b3eca0195b0534650d Author: YongzaoDan <[email protected]> AuthorDate: Thu Dec 28 22:28:22 2023 +0800 Finish --- .../org/apache/iotdb/confignode/manager/load/cache/LoadCache.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/LoadCache.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/LoadCache.java index f9a208d47c5..c0f9312b77e 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/LoadCache.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/LoadCache.java @@ -27,6 +27,7 @@ import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet; import org.apache.iotdb.commons.cluster.NodeStatus; import org.apache.iotdb.commons.cluster.NodeType; import org.apache.iotdb.commons.cluster.RegionStatus; +import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.confignode.conf.ConfigNodeConfig; import org.apache.iotdb.confignode.conf.ConfigNodeDescriptor; import org.apache.iotdb.confignode.manager.IManager; @@ -65,6 +66,10 @@ public class LoadCache { private static final ConfigNodeConfig CONF = ConfigNodeDescriptor.getInstance().getConf(); private static final long HEARTBEAT_INTERVAL = CONF.getHeartbeatIntervalInMs(); + private static final long LEADER_ELECTION_WAITING_TIMEOUT = + Math.min( + 2 * CONF.getSchemaRegionRatisRpcLeaderElectionTimeoutMaxMs(), + CommonDescriptor.getInstance().getConfig().getConnectionTimeoutInMS()); // Map<NodeId, INodeCache> private final Map<Integer, BaseNodeCache> nodeCacheMap; @@ -536,8 +541,9 @@ public class LoadCache { * @param regionGroupIds Specified RegionGroupIds */ public void waitForLeaderElection(List<TConsensusGroupId> regionGroupIds) { + long startTime = System.currentTimeMillis(); LOGGER.info("[RegionElection] Wait for leader election of RegionGroups: {}", regionGroupIds); - for (int retry = 0; retry < 10; retry++) { + while (System.currentTimeMillis() - startTime <= LEADER_ELECTION_WAITING_TIMEOUT) { AtomicBoolean allRegionLeaderElected = new AtomicBoolean(true); regionGroupIds.forEach( regionGroupId -> {
