This is an automated email from the ASF dual-hosted git repository.
tanxinyu pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new 99e4df44ab7 Region group status refactor (#14738) (#14760)
99e4df44ab7 is described below
commit 99e4df44ab766a4a95a192a40471d63b0146d43b
Author: Xiangpeng Hu <[email protected]>
AuthorDate: Thu Jan 23 19:22:39 2025 +0800
Region group status refactor (#14738) (#14760)
* add isStrictConsensus
* add Test
* fix IT
* resolve comments
* rename
(cherry picked from commit cb4c05c0319d9b156e94ba58354df3114cebda24)
---
.../iotdb/confignode/conf/ConfigNodeConfig.java | 9 ++
.../confignode/manager/load/cache/LoadCache.java | 13 +-
.../load/cache/region/RegionGroupCache.java | 39 +++---
.../manager/partition/RegionGroupStatus.java | 25 ++--
.../confignode/manager/load/LoadManagerTest.java | 12 +-
.../manager/load/cache/RegionGroupCacheTest.java | 132 +++++++++++++--------
6 files changed, 140 insertions(+), 90 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
index 49c0685669a..d116e4aec5b 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
@@ -20,6 +20,8 @@
package org.apache.iotdb.confignode.conf;
import org.apache.iotdb.common.rpc.thrift.TConfigNodeLocation;
+import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
+import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import
org.apache.iotdb.commons.client.property.ClientPoolProperty.DefaultProperty;
import org.apache.iotdb.commons.conf.IoTDBConstant;
@@ -1197,4 +1199,11 @@ public class ConfigNodeConfig {
new TEndPoint(getInternalAddress(), getInternalPort()),
new TEndPoint(getInternalAddress(), getConsensusPort()));
}
+
+ public boolean isConsensusGroupStrongConsistency(TConsensusGroupId
regionGroupId) {
+ return (TConsensusGroupType.SchemaRegion.equals(regionGroupId.getType())
+ &&
getSchemaRegionConsensusProtocolClass().equals(ConsensusFactory.RATIS_CONSENSUS))
+ || (TConsensusGroupType.DataRegion.equals(regionGroupId.getType())
+ &&
getDataRegionConsensusProtocolClass().equals(ConsensusFactory.RATIS_CONSENSUS));
+ }
}
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 8e02468004f..3796f7ac2b7 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
@@ -30,6 +30,8 @@ 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.confignode.conf.ConfigNodeConfig;
+import org.apache.iotdb.confignode.conf.ConfigNodeDescriptor;
import org.apache.iotdb.confignode.manager.IManager;
import org.apache.iotdb.confignode.manager.ProcedureManager;
import
org.apache.iotdb.confignode.manager.load.cache.consensus.ConsensusGroupCache;
@@ -76,6 +78,8 @@ public class LoadCache {
ProcedureManager.PROCEDURE_WAIT_TIME_OUT -
TimeUnit.SECONDS.toMillis(2),
TimeUnit.SECONDS.toMillis(10));
+ private static final ConfigNodeConfig CONF =
ConfigNodeDescriptor.getInstance().getConf();
+
// Map<NodeId, is heartbeat processing>
// False indicates there is no processing heartbeat request, true otherwise
private final Map<Integer, AtomicBoolean> heartbeatProcessingMap;
@@ -164,13 +168,16 @@ public class LoadCache {
regionReplicaSets.forEach(
regionReplicaSet -> {
TConsensusGroupId regionGroupId =
regionReplicaSet.getRegionId();
+ boolean isStrongConsistency =
+ CONF.isConsensusGroupStrongConsistency(regionGroupId);
regionGroupCacheMap.put(
regionGroupId,
new RegionGroupCache(
database,
regionReplicaSet.getDataNodeLocations().stream()
.map(TDataNodeLocation::getDataNodeId)
- .collect(Collectors.toSet())));
+ .collect(Collectors.toSet()),
+ isStrongConsistency));
consensusGroupCacheMap.put(regionGroupId, new
ConsensusGroupCache());
}));
}
@@ -277,7 +284,9 @@ public class LoadCache {
*/
public void createRegionGroupHeartbeatCache(
String database, TConsensusGroupId regionGroupId, Set<Integer>
dataNodeIds) {
- regionGroupCacheMap.put(regionGroupId, new RegionGroupCache(database,
dataNodeIds));
+ boolean isStrongConsistency =
CONF.isConsensusGroupStrongConsistency(regionGroupId);
+ regionGroupCacheMap.put(
+ regionGroupId, new RegionGroupCache(database, dataNodeIds,
isStrongConsistency));
consensusGroupCacheMap.put(regionGroupId, new ConsensusGroupCache());
}
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 61a4c544658..0ee3f7d2cf8 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
@@ -42,14 +42,16 @@ public class RegionGroupCache {
private final Map<Integer, RegionCache> regionCacheMap;
// The current RegionGroupStatistics, used for providing statistics to other
services
private final AtomicReference<RegionGroupStatistics> currentStatistics;
+ private final boolean isStrongConsistency;
/** Constructor for create RegionGroupCache with default
RegionGroupStatistics. */
- public RegionGroupCache(String database, Set<Integer> dataNodeIds) {
+ public RegionGroupCache(String database, Set<Integer> dataNodeIds, boolean
isStrongConsistency) {
this.database = database;
this.regionCacheMap = new ConcurrentHashMap<>();
dataNodeIds.forEach(dataNodeId -> regionCacheMap.put(dataNodeId, new
RegionCache()));
this.currentStatistics =
new
AtomicReference<>(RegionGroupStatistics.generateDefaultRegionGroupStatistics());
+ this.isStrongConsistency = isStrongConsistency;
}
/**
@@ -108,34 +110,31 @@ public class RegionGroupCache {
private RegionGroupStatus caculateRegionGroupStatus(
Map<Integer, RegionStatistics> regionStatisticsMap) {
- int unknownCount = 0;
- int readonlyCount = 0;
+
+ int runningCount = 0;
+ int addingCount = 0;
int removingCount = 0;
for (RegionStatistics regionStatistics : regionStatisticsMap.values()) {
- unknownCount +=
RegionStatus.Unknown.equals(regionStatistics.getRegionStatus()) ? 1 : 0;
- readonlyCount +=
RegionStatus.ReadOnly.equals(regionStatistics.getRegionStatus()) ? 1 : 0;
+ runningCount +=
RegionStatus.Running.equals(regionStatistics.getRegionStatus()) ? 1 : 0;
+ addingCount +=
RegionStatus.Adding.equals(regionStatistics.getRegionStatus()) ? 1 : 0;
removingCount +=
RegionStatus.Removing.equals(regionStatistics.getRegionStatus()) ? 1 : 0;
}
+ int baseCount = regionCacheMap.size() - addingCount - removingCount;
- if (unknownCount + readonlyCount + removingCount == 0) {
- // The RegionGroup is considered as Running only if
- // all Regions are in the Running status
+ if (runningCount == baseCount) {
+ // The RegionGroup is considered as Running only if all Regions are in
the Running status.
return RegionGroupStatus.Running;
- } else if (readonlyCount == 0) {
- return (unknownCount + removingCount) <= ((regionCacheMap.size() - 1) /
2)
- // The RegionGroup is considered as Available when the number of
Unknown Regions is less
- // than half
+ }
+ if (isStrongConsistency) {
+ // For strong consistency algorithms, the RegionGroup is considered as
Available when the
+ // number of Regions in the Running status is greater than half.
+ return runningCount > (baseCount / 2)
? RegionGroupStatus.Available
- // Disabled otherwise
: RegionGroupStatus.Disabled;
} else {
- 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
- ? RegionGroupStatus.Discouraged
- // Disabled otherwise
- : RegionGroupStatus.Disabled;
+ // For weak consistency algorithms, the RegionGroup is considered as
Available when the number
+ // of Regions in the Running status is greater than or equal to 1.
+ return (runningCount >= 1) ? RegionGroupStatus.Available :
RegionGroupStatus.Disabled;
}
}
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 1b1c395777a..a2c4bea6a73 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,19 @@ public enum RegionGroupStatus {
Running("Running", 1),
/**
- * 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
+ * For strong consistency algorithms, the RegionGroup is considered as
Available when the number
+ * of Regions in the Running status is greater than half. For weak
consistency algorithms, the
+ * RegionGroup is considered as Available when the number of Regions in the
Running status is
+ * greater than or equal to 1. To avoid the impact of Removing and Adding
region status on region
+ * group status evaluation, this status, which only occurs during region
migration and
+ * reconstruction, can be excluded. The denominator uses the number of
regions excluding Removing
+ * and Adding status, while the numerator uses regions in the Running
status, ensuring high
+ * availability evaluation remains unaffected.
*/
Available("Available", 2),
- /**
- * 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. More than half of the Regions are in Unknown or ReadOnly or
Removing status
- */
- Disabled("Disabled", 4);
+ /** In scenarios other than the two mentioned above. */
+ Disabled("Disabled", 3);
private final String status;
private final int weight;
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 afbdacfe26e..fd62c31ae36 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.Available,
oneRemovingRegionStatisticsMap)),
+ new RegionGroupStatistics(RegionGroupStatus.Running,
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.Available,
oneRemovingRegionStatisticsMap),
- new RegionGroupStatistics(RegionGroupStatus.Available,
oneAddingRegionStatisticsMap)),
+ new RegionGroupStatistics(RegionGroupStatus.Running,
oneRemovingRegionStatisticsMap),
+ new RegionGroupStatistics(RegionGroupStatus.Running,
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.Available,
oneAddingRegionStatisticsMap),
- new RegionGroupStatistics(RegionGroupStatus.Available,
oneRemovingRegionStatisticsMap)),
+ new RegionGroupStatistics(RegionGroupStatus.Running,
oneAddingRegionStatisticsMap),
+ new RegionGroupStatistics(RegionGroupStatus.Running,
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.Available,
oneRemovingRegionStatisticsMap),
+ new RegionGroupStatistics(RegionGroupStatus.Running,
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 71543903c57..69f073aad8b 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
@@ -37,7 +37,7 @@ public class RegionGroupCacheTest {
public void getRegionStatusTest() {
long currentTime = System.nanoTime();
RegionGroupCache regionGroupCache =
- new RegionGroupCache(DATABASE, Stream.of(0, 1, 2,
3).collect(Collectors.toSet()));
+ new RegionGroupCache(DATABASE, Stream.of(0, 1, 2, 3,
4).collect(Collectors.toSet()), false);
regionGroupCache.cacheHeartbeatSample(
0, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
regionGroupCache.cacheHeartbeatSample(
@@ -46,6 +46,8 @@ public class RegionGroupCacheTest {
2, new RegionHeartbeatSample(currentTime, RegionStatus.Removing));
regionGroupCache.cacheHeartbeatSample(
3, new RegionHeartbeatSample(currentTime, RegionStatus.ReadOnly));
+ regionGroupCache.cacheHeartbeatSample(
+ 4, new RegionHeartbeatSample(currentTime, RegionStatus.Adding));
regionGroupCache.updateCurrentStatistics();
Assert.assertEquals(
@@ -56,74 +58,110 @@ public class RegionGroupCacheTest {
RegionStatus.Removing,
regionGroupCache.getCurrentStatistics().getRegionStatus(2));
Assert.assertEquals(
RegionStatus.ReadOnly,
regionGroupCache.getCurrentStatistics().getRegionStatus(3));
+ Assert.assertEquals(
+ RegionStatus.Adding,
regionGroupCache.getCurrentStatistics().getRegionStatus(4));
}
@Test
- public void getRegionGroupStatusTest() {
+ public void weakConsistencyRegionGroupStatusTest() {
long currentTime = System.nanoTime();
- RegionGroupCache runningRegionGroup =
- new RegionGroupCache(DATABASE, Stream.of(0, 1,
2).collect(Collectors.toSet()));
- runningRegionGroup.cacheHeartbeatSample(
+ RegionGroupCache regionGroupCache =
+ new RegionGroupCache(DATABASE, Stream.of(0, 1,
2).collect(Collectors.toSet()), false);
+ regionGroupCache.cacheHeartbeatSample(
0, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
- runningRegionGroup.cacheHeartbeatSample(
+ regionGroupCache.cacheHeartbeatSample(
1, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
- runningRegionGroup.cacheHeartbeatSample(
+ regionGroupCache.cacheHeartbeatSample(
2, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
- runningRegionGroup.updateCurrentStatistics();
+ regionGroupCache.updateCurrentStatistics();
Assert.assertEquals(
- RegionGroupStatus.Running,
- runningRegionGroup.getCurrentStatistics().getRegionGroupStatus());
+ RegionGroupStatus.Running,
regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
- RegionGroupCache availableRegionGroup =
- new RegionGroupCache(DATABASE, Stream.of(0, 1,
2).collect(Collectors.toSet()));
- availableRegionGroup.cacheHeartbeatSample(
- 0, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
- availableRegionGroup.cacheHeartbeatSample(
+ regionGroupCache.cacheHeartbeatSample(
+ 0, new RegionHeartbeatSample(currentTime, RegionStatus.Unknown));
+ regionGroupCache.updateCurrentStatistics();
+ Assert.assertEquals(
+ RegionGroupStatus.Available,
+ regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
+
+ regionGroupCache.cacheHeartbeatSample(
1, new RegionHeartbeatSample(currentTime, RegionStatus.Unknown));
- availableRegionGroup.cacheHeartbeatSample(
- 2, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
- availableRegionGroup.updateCurrentStatistics();
+ regionGroupCache.updateCurrentStatistics();
Assert.assertEquals(
RegionGroupStatus.Available,
- availableRegionGroup.getCurrentStatistics().getRegionGroupStatus());
+ regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
- RegionGroupCache disabledRegionGroup0 =
- new RegionGroupCache(DATABASE, Stream.of(0, 1,
2).collect(Collectors.toSet()));
- disabledRegionGroup0.cacheHeartbeatSample(
+ regionGroupCache.cacheHeartbeatSample(
+ 2, new RegionHeartbeatSample(currentTime, RegionStatus.Unknown));
+ regionGroupCache.updateCurrentStatistics();
+ Assert.assertEquals(
+ RegionGroupStatus.Disabled,
regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
+ }
+
+ @Test
+ public void strongConsistencyRegionGroupStatusTest() {
+ long currentTime = System.nanoTime();
+ RegionGroupCache regionGroupCache =
+ new RegionGroupCache(DATABASE, Stream.of(0, 1,
2).collect(Collectors.toSet()), true);
+ regionGroupCache.cacheHeartbeatSample(
0, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
- disabledRegionGroup0.cacheHeartbeatSample(
- 1, new RegionHeartbeatSample(currentTime, RegionStatus.ReadOnly));
- disabledRegionGroup0.cacheHeartbeatSample(
+ regionGroupCache.cacheHeartbeatSample(
+ 1, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
+ regionGroupCache.cacheHeartbeatSample(
2, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
- disabledRegionGroup0.updateCurrentStatistics();
+ regionGroupCache.updateCurrentStatistics();
Assert.assertEquals(
- RegionGroupStatus.Discouraged,
- disabledRegionGroup0.getCurrentStatistics().getRegionGroupStatus());
+ RegionGroupStatus.Running,
regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
- RegionGroupCache disabledRegionGroup1 =
- new RegionGroupCache(DATABASE, Stream.of(0, 1,
2).collect(Collectors.toSet()));
- disabledRegionGroup1.cacheHeartbeatSample(
- 0, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
- disabledRegionGroup1.cacheHeartbeatSample(
+ regionGroupCache.cacheHeartbeatSample(
+ 0, new RegionHeartbeatSample(currentTime, RegionStatus.Unknown));
+ regionGroupCache.updateCurrentStatistics();
+ Assert.assertEquals(
+ RegionGroupStatus.Available,
+ regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
+
+ regionGroupCache.cacheHeartbeatSample(
1, new RegionHeartbeatSample(currentTime, RegionStatus.Unknown));
- disabledRegionGroup1.cacheHeartbeatSample(
+ regionGroupCache.updateCurrentStatistics();
+ Assert.assertEquals(
+ RegionGroupStatus.Disabled,
regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
+
+ regionGroupCache.cacheHeartbeatSample(
2, new RegionHeartbeatSample(currentTime, RegionStatus.Unknown));
- disabledRegionGroup1.updateCurrentStatistics();
+ regionGroupCache.updateCurrentStatistics();
Assert.assertEquals(
- RegionGroupStatus.Disabled,
- disabledRegionGroup1.getCurrentStatistics().getRegionGroupStatus());
+ RegionGroupStatus.Disabled,
regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
+ }
- RegionGroupCache disabledRegionGroup2 =
- new RegionGroupCache(DATABASE, Stream.of(0, 1,
2).collect(Collectors.toSet()));
- disabledRegionGroup2.cacheHeartbeatSample(
+ @Test
+ public void migrateRegionRegionGroupStatusTest() {
+ long currentTime = System.nanoTime();
+ RegionGroupCache regionGroupCache =
+ new RegionGroupCache(DATABASE,
Stream.of(0).collect(Collectors.toSet()), true);
+ regionGroupCache.cacheHeartbeatSample(
0, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
- disabledRegionGroup2.cacheHeartbeatSample(
- 1, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
- disabledRegionGroup2.cacheHeartbeatSample(
- 2, new RegionHeartbeatSample(currentTime, RegionStatus.Removing));
- disabledRegionGroup2.updateCurrentStatistics();
+ regionGroupCache.updateCurrentStatistics();
Assert.assertEquals(
- RegionGroupStatus.Available,
- disabledRegionGroup2.getCurrentStatistics().getRegionGroupStatus());
+ RegionGroupStatus.Running,
regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
+
+ regionGroupCache =
+ new RegionGroupCache(DATABASE, Stream.of(0,
1).collect(Collectors.toSet()), true);
+ regionGroupCache.cacheHeartbeatSample(
+ 0, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
+ regionGroupCache.cacheHeartbeatSample(
+ 1, new RegionHeartbeatSample(currentTime, RegionStatus.Adding));
+ regionGroupCache.updateCurrentStatistics();
+ Assert.assertEquals(
+ RegionGroupStatus.Running,
regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
+
+ regionGroupCache =
+ new RegionGroupCache(DATABASE, Stream.of(0,
1).collect(Collectors.toSet()), true);
+ regionGroupCache.cacheHeartbeatSample(
+ 0, new RegionHeartbeatSample(currentTime, RegionStatus.Running));
+ regionGroupCache.cacheHeartbeatSample(
+ 1, new RegionHeartbeatSample(currentTime, RegionStatus.Removing));
+ regionGroupCache.updateCurrentStatistics();
+ Assert.assertEquals(
+ RegionGroupStatus.Running,
regionGroupCache.getCurrentStatistics().getRegionGroupStatus());
}
}