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