This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch ty/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 9f857685bdcf8699e89b6b2eafae3e89369182d0
Author: Yongzao <[email protected]>
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
+        + '}';
+  }
 }

Reply via email to