You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2024/07/29 04:17:12 UTC
(iotdb) 12/28: Rectify the input parameters of LeaderBalancer (#12998)
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch ty/mergemaster0729
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 92f202a0db88ef079ca525ca2e8e83066a9c3c4f
Author: Yongzao <yo...@apache.org>
AuthorDate: Wed Jul 24 10:23:06 2024 +0800
Rectify the input parameters of LeaderBalancer (#12998)
* commit for test
* re run
* update logs
(cherry picked from commit c866c0fb2cdf9729400fe2c211dcac41c36c0280)
---
.../manager/load/balancer/RouteBalancer.java | 3 ++-
.../router/leader/AbstractLeaderBalancer.java | 20 ++++++++++++++++++++
.../confignode/manager/load/cache/LoadCache.java | 18 ++++++++++++++++++
.../ConsensusGroupStatisticsChangeEvent.java | 8 ++++++++
4 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RouteBalancer.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RouteBalancer.java
index 36f85afcbef..94e1e5c0eb6 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RouteBalancer.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/RouteBalancer.java
@@ -155,7 +155,8 @@ public class RouteBalancer implements IClusterStatusSubscriber {
private void balanceRegionLeader(
TConsensusGroupType regionGroupType, String consensusProtocolClass) {
// Collect the latest data and generate the optimal leader distribution
- Map<TConsensusGroupId, Integer> currentLeaderMap = getLoadManager().getRegionLeaderMap();
+ Map<TConsensusGroupId, Integer> currentLeaderMap =
+ getLoadManager().getLoadCache().getRegionLeaderMap(regionGroupType);
Map<TConsensusGroupId, Integer> optimalLeaderMap =
leaderBalancer.generateOptimalLeaderDistribution(
getLoadManager().getLoadCache().getCurrentDatabaseRegionGroupMap(regionGroupType),
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/router/leader/AbstractLeaderBalancer.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/router/leader/AbstractLeaderBalancer.java
index 6ba7a97957d..e545d8b4ff1 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/router/leader/AbstractLeaderBalancer.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/router/leader/AbstractLeaderBalancer.java
@@ -93,6 +93,26 @@ public abstract class AbstractLeaderBalancer {
LOGGER.warn(
"[LeaderBalancer] The following RegionGroups' leader cannot be selected because their corresponding caches are incomplete: {}",
differenceSet);
+ Set<TConsensusGroupId> databaseRegionGroupUnionSet =
+ databaseRegionGroupMap.values().stream()
+ .flatMap(List::stream)
+ .collect(Collectors.toSet());
+ differenceSet.forEach(
+ regionId -> {
+ if (!databaseRegionGroupUnionSet.contains(regionId)) {
+ LOGGER.warn("[LeaderBalancer] Region: {} not in databaseRegionGroupMap", regionId);
+ }
+ if (!regionLocationMap.containsKey(regionId)) {
+ LOGGER.warn("[LeaderBalancer] Region: {} not in regionLocationMap", regionId);
+ }
+ if (!regionLeaderMap.containsKey(regionId)) {
+
+ LOGGER.warn("[LeaderBalancer] Region: {} not in regionLeaderMap", regionId);
+ }
+ if (!regionStatisticsMap.containsKey(regionId)) {
+ LOGGER.warn("[LeaderBalancer] Region: {} not in regionStatisticsMap", regionId);
+ }
+ });
}
}
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 1227b07ca5e..e51d6907387 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
@@ -668,6 +668,24 @@ public class LoadCache {
return regionLeaderMap;
}
+ /**
+ * Safely get the latest RegionLeaderMap.
+ *
+ * @param consensusGroupType DataRegion or SchemaRegion
+ * @return Map<RegionGroupId, leaderId>, leaderId will be -1 if the RegionGroup has no leader yet.
+ */
+ public Map<TConsensusGroupId, Integer> getRegionLeaderMap(
+ TConsensusGroupType consensusGroupType) {
+ Map<TConsensusGroupId, Integer> regionLeaderMap = new ConcurrentHashMap<>();
+ consensusGroupCacheMap.forEach(
+ (regionGroupId, consensusGroupCache) -> {
+ if (regionGroupId.getType().equals(consensusGroupType)) {
+ regionLeaderMap.put(regionGroupId, consensusGroupCache.getLeaderId());
+ }
+ });
+ return regionLeaderMap;
+ }
+
/**
* Wait for the specified RegionGroups to finish leader election.
*
diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/subscriber/ConsensusGroupStatisticsChangeEvent.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/subscriber/ConsensusGroupStatisticsChangeEvent.java
index a3051305b31..49d1564f6d9 100644
--- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/subscriber/ConsensusGroupStatisticsChangeEvent.java
+++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/subscriber/ConsensusGroupStatisticsChangeEvent.java
@@ -43,4 +43,12 @@ public class ConsensusGroupStatisticsChangeEvent {
getDifferentConsensusGroupStatisticsMap() {
return differentConsensusGroupStatisticsMap;
}
+
+ @Override
+ public String toString() {
+ return "ConsensusGroupStatisticsChangeEvent{"
+ + "differentConsensusGroupStatisticsMap="
+ + differentConsensusGroupStatisticsMap
+ + '}';
+ }
}