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

tanxinyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 041d292b092 [remove datanode] Do not disable the entire region group 
for one removing region (#14241)
041d292b092 is described below

commit 041d292b092aa4e2c599971732fb5a31bbdc1dbb
Author: Xiangpeng Hu <[email protected]>
AuthorDate: Fri Nov 29 16:48:27 2024 +0800

    [remove datanode] Do not disable the entire region group for one removing 
region (#14241)
    
    * fix disabled
    
    * fix disabled
---
 .../manager/load/cache/region/RegionGroupCache.java        | 13 +++++--------
 .../confignode/manager/partition/RegionGroupStatus.java    | 14 ++++++--------
 .../iotdb/confignode/manager/load/LoadManagerTest.java     | 12 ++++++------
 .../manager/load/cache/RegionGroupCacheTest.java           |  2 +-
 4 files changed, 18 insertions(+), 23 deletions(-)

diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/region/RegionGroupCache.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/region/RegionGroupCache.java
index d40f0d303fd..61a4c544658 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/region/RegionGroupCache.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/region/RegionGroupCache.java
@@ -110,29 +110,26 @@ public class RegionGroupCache {
       Map<Integer, RegionStatistics> regionStatisticsMap) {
     int unknownCount = 0;
     int readonlyCount = 0;
+    int removingCount = 0;
     for (RegionStatistics regionStatistics : regionStatisticsMap.values()) {
-      if (RegionStatus.Removing.equals(regionStatistics.getRegionStatus())) {
-        // The RegionGroup is considered as Disabled when
-        // at least one Region is in the ReadOnly or Removing status
-        return RegionGroupStatus.Disabled;
-      }
       unknownCount += 
RegionStatus.Unknown.equals(regionStatistics.getRegionStatus()) ? 1 : 0;
       readonlyCount += 
RegionStatus.ReadOnly.equals(regionStatistics.getRegionStatus()) ? 1 : 0;
+      removingCount += 
RegionStatus.Removing.equals(regionStatistics.getRegionStatus()) ? 1 : 0;
     }
 
-    if (unknownCount + readonlyCount == 0) {
+    if (unknownCount + readonlyCount + removingCount == 0) {
       // The RegionGroup is considered as Running only if
       // all Regions are in the Running status
       return RegionGroupStatus.Running;
     } else if (readonlyCount == 0) {
-      return unknownCount <= ((regionCacheMap.size() - 1) / 2)
+      return (unknownCount + removingCount) <= ((regionCacheMap.size() - 1) / 
2)
           // The RegionGroup is considered as Available when the number of 
Unknown Regions is less
           // than half
           ? RegionGroupStatus.Available
           // Disabled otherwise
           : RegionGroupStatus.Disabled;
     } else {
-      return unknownCount + readonlyCount <= ((regionCacheMap.size() - 1) / 2)
+      return (unknownCount + readonlyCount + removingCount) <= 
((regionCacheMap.size() - 1) / 2)
           // The RegionGroup is considered as Discouraged when the number of 
Unknown or ReadOnly
           // Regions is less
           // than half, and there are at least 1 ReadOnly Region
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/RegionGroupStatus.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/RegionGroupStatus.java
index b4cf1e037db..1b1c395777a 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/RegionGroupStatus.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/RegionGroupStatus.java
@@ -24,24 +24,22 @@ public enum RegionGroupStatus {
   Running("Running", 1),
 
   /**
-   * All Regions in RegionGroup are in the Running or Unknown status, and the 
number of Regions in
-   * the Unknown status is less than half
+   * All Regions in RegionGroup are in the Running or Unknown or Removing 
status, and the number of
+   * Regions in the Unknown or Removing status is less than half
    */
   Available("Available", 2),
 
   /**
-   * All Regions in RegionGroup are in the Running, Unknown or ReadOnly 
status, and at least 1 node
-   * is in ReadOnly status, the number of Regions in the Unknown or ReadOnly 
status is less than
-   * half
+   * All Regions in RegionGroup are in the Running, Unknown or ReadOnly or 
Removing status, and at
+   * least 1 node is in ReadOnly status, the number of Regions in the Unknown 
or ReadOnly or
+   * Removing status is less than half
    */
   Discouraged("Discouraged", 3),
 
   /**
    * The following cases will lead to Disabled RegionGroup:
    *
-   * <p>1. There is a Region in Removing status
-   *
-   * <p>2. More than half of the Regions are in Unknown or ReadOnly status
+   * <p>1. More than half of the Regions are in Unknown or ReadOnly or 
Removing status
    */
   Disabled("Disabled", 4);
 
diff --git 
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/load/LoadManagerTest.java
 
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/load/LoadManagerTest.java
index 62e6a24fed8..afbdacfe26e 100644
--- 
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/load/LoadManagerTest.java
+++ 
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/load/LoadManagerTest.java
@@ -188,7 +188,7 @@ public class LoadManagerTest {
     Assert.assertEquals(
         new Pair<>(
             new RegionGroupStatistics(RegionGroupStatus.Running, 
allRunningRegionStatisticsMap),
-            new RegionGroupStatistics(RegionGroupStatus.Disabled, 
oneRemovingRegionStatisticsMap)),
+            new RegionGroupStatistics(RegionGroupStatus.Available, 
oneRemovingRegionStatisticsMap)),
         differentRegionGroupStatisticsMap.get(regionGroupId));
     // Add and mark Region 3 as Adding
     int addDataNodeId = 3;
@@ -203,8 +203,8 @@ public class LoadManagerTest {
     oneAddingRegionStatisticsMap.put(addDataNodeId, new 
RegionStatistics(RegionStatus.Adding));
     Assert.assertEquals(
         new Pair<>(
-            new RegionGroupStatistics(RegionGroupStatus.Disabled, 
oneRemovingRegionStatisticsMap),
-            new RegionGroupStatistics(RegionGroupStatus.Disabled, 
oneAddingRegionStatisticsMap)),
+            new RegionGroupStatistics(RegionGroupStatus.Available, 
oneRemovingRegionStatisticsMap),
+            new RegionGroupStatistics(RegionGroupStatus.Available, 
oneAddingRegionStatisticsMap)),
         differentRegionGroupStatisticsMap.get(regionGroupId));
     // Both Region 0 and 3 can't be updated
     LOAD_CACHE.cacheRegionHeartbeatSample(
@@ -226,8 +226,8 @@ public class LoadManagerTest {
     oneRemovingRegionStatisticsMap.put(addDataNodeId, new 
RegionStatistics(RegionStatus.Running));
     Assert.assertEquals(
         new Pair<>(
-            new RegionGroupStatistics(RegionGroupStatus.Disabled, 
oneAddingRegionStatisticsMap),
-            new RegionGroupStatistics(RegionGroupStatus.Disabled, 
oneRemovingRegionStatisticsMap)),
+            new RegionGroupStatistics(RegionGroupStatus.Available, 
oneAddingRegionStatisticsMap),
+            new RegionGroupStatistics(RegionGroupStatus.Available, 
oneRemovingRegionStatisticsMap)),
         differentRegionGroupStatisticsMap.get(regionGroupId));
     // Removing process completed
     LOAD_MANAGER.removeRegionCache(regionGroupId, removeDataNodeId);
@@ -237,7 +237,7 @@ public class LoadManagerTest {
     allRunningRegionStatisticsMap.put(addDataNodeId, new 
RegionStatistics(RegionStatus.Running));
     Assert.assertEquals(
         new Pair<>(
-            new RegionGroupStatistics(RegionGroupStatus.Disabled, 
oneRemovingRegionStatisticsMap),
+            new RegionGroupStatistics(RegionGroupStatus.Available, 
oneRemovingRegionStatisticsMap),
             new RegionGroupStatistics(RegionGroupStatus.Running, 
allRunningRegionStatisticsMap)),
         differentRegionGroupStatisticsMap.get(regionGroupId));
   }
diff --git 
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/load/cache/RegionGroupCacheTest.java
 
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/load/cache/RegionGroupCacheTest.java
index e340c347e11..71543903c57 100644
--- 
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/load/cache/RegionGroupCacheTest.java
+++ 
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/manager/load/cache/RegionGroupCacheTest.java
@@ -123,7 +123,7 @@ public class RegionGroupCacheTest {
         2, new RegionHeartbeatSample(currentTime, RegionStatus.Removing));
     disabledRegionGroup2.updateCurrentStatistics();
     Assert.assertEquals(
-        RegionGroupStatus.Disabled,
+        RegionGroupStatus.Available,
         disabledRegionGroup2.getCurrentStatistics().getRegionGroupStatus());
   }
 }

Reply via email to