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());
}
}