You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ca...@apache.org on 2022/08/12 03:59:55 UTC
[iotdb] branch master updated: [IOTDB-3825] Reinforce Cluster IT framework's startup check (#6960)
This is an automated email from the ASF dual-hosted git repository.
caogaofei 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 33952b835c [IOTDB-3825] Reinforce Cluster IT framework's startup check (#6960)
33952b835c is described below
commit 33952b835c1cac754a94e2dc7b7e9d29997dfb49
Author: Itami Sho <42...@users.noreply.github.com>
AuthorDate: Fri Aug 12 11:59:50 2022 +0800
[IOTDB-3825] Reinforce Cluster IT framework's startup check (#6960)
---
.../load/heartbeat/ConfigNodeHeartbeatCache.java | 4 +--
.../load/heartbeat/DataNodeHeartbeatCache.java | 2 +-
.../java/org/apache/iotdb/it/env/AbstractEnv.java | 33 ++++++++++++++++++++++
3 files changed, 36 insertions(+), 3 deletions(-)
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/heartbeat/ConfigNodeHeartbeatCache.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/heartbeat/ConfigNodeHeartbeatCache.java
index 1393f75ee4..a354c9aa24 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/heartbeat/ConfigNodeHeartbeatCache.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/heartbeat/ConfigNodeHeartbeatCache.java
@@ -38,7 +38,7 @@ public class ConfigNodeHeartbeatCache implements INodeCache {
public ConfigNodeHeartbeatCache(TConfigNodeLocation configNodeLocation) {
this.configNodeLocation = configNodeLocation;
this.slidingWindow = new LinkedList<>();
- this.status = NodeStatus.Running;
+ this.status = NodeStatus.Unknown;
}
@Override
@@ -60,7 +60,7 @@ public class ConfigNodeHeartbeatCache implements INodeCache {
@Override
public boolean updateLoadStatistic() {
if (configNodeLocation.getInternalEndPoint().equals(LoadManager.CURRENT_NODE)) {
- // We don't need to update itself
+ this.status = NodeStatus.Running;
return false;
}
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/heartbeat/DataNodeHeartbeatCache.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/heartbeat/DataNodeHeartbeatCache.java
index 504305f2f9..6e83e7a27d 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/heartbeat/DataNodeHeartbeatCache.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/heartbeat/DataNodeHeartbeatCache.java
@@ -40,7 +40,7 @@ public class DataNodeHeartbeatCache implements INodeCache {
this.slidingWindow = new LinkedList<>();
this.loadScore = 0;
- this.status = NodeStatus.Running;
+ this.status = NodeStatus.Unknown;
}
@Override
diff --git a/integration-test/src/main/java/org/apache/iotdb/it/env/AbstractEnv.java b/integration-test/src/main/java/org/apache/iotdb/it/env/AbstractEnv.java
index 5aed5e97ca..71c13f51ac 100644
--- a/integration-test/src/main/java/org/apache/iotdb/it/env/AbstractEnv.java
+++ b/integration-test/src/main/java/org/apache/iotdb/it/env/AbstractEnv.java
@@ -22,6 +22,7 @@ import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.commons.client.IClientManager;
import org.apache.iotdb.commons.client.sync.SyncConfigNodeIServiceClient;
import org.apache.iotdb.confignode.rpc.thrift.IConfigNodeRPCService;
+import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
import org.apache.iotdb.db.client.DataNodeClientPoolFactory;
import org.apache.iotdb.it.framework.IoTDBTestLogger;
import org.apache.iotdb.itbase.env.BaseEnv;
@@ -44,6 +45,7 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -185,12 +187,43 @@ public abstract class AbstractEnv implements BaseEnv {
try {
long startTime = System.currentTimeMillis();
testDelegate.requestAll();
+ if (!configNodeWrapperList.isEmpty()) {
+ checkNodeHeartbeat();
+ }
logger.info("Start cluster costs: {}s", (System.currentTimeMillis() - startTime) / 1000.0);
} catch (Exception e) {
fail("After 30 times retry, the cluster can't work!");
}
}
+ private void checkNodeHeartbeat() throws Exception {
+ TShowClusterResp showClusterResp;
+ Exception lastException = null;
+ boolean flag;
+ for (int i = 0; i < 30; i++) {
+ try (SyncConfigNodeIServiceClient client =
+ (SyncConfigNodeIServiceClient) getConfigNodeConnection()) {
+ flag = true;
+ showClusterResp = client.showCluster();
+ Map<Integer, String> nodeStatus = showClusterResp.getNodeStatus();
+ for (String status : nodeStatus.values()) {
+ if (!status.equals("Running")) {
+ flag = false;
+ break;
+ }
+ }
+ int nodeNum = configNodeWrapperList.size() + dataNodeWrapperList.size();
+ if (flag && nodeStatus.size() == nodeNum) {
+ return;
+ }
+ } catch (Exception e) {
+ lastException = e;
+ }
+ TimeUnit.SECONDS.sleep(1L);
+ }
+ throw lastException;
+ }
+
@Override
public void cleanAfterClass() {
cleanupEnvironment();