You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hx...@apache.org on 2020/11/07 02:45:58 UTC

[iotdb] branch master updated: fix travis closing some ports failed (#1967)

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

hxd 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 6489630  fix travis closing some ports failed (#1967)
6489630 is described below

commit 648963053e5e50cecfd7977495a0d19dd74cb9b7
Author: Xiangdong Huang <hx...@apache.org>
AuthorDate: Sat Nov 7 10:45:47 2020 +0800

    fix travis closing some ports failed (#1967)
    
    * add wait time for stoping StorageEngine
    * open test whether the port is closed on travis
    * fast failed if port is not closed
    * fix bug that sync thread is not closed in UTs
---
 .travis.yml                                        |   2 +-
 .../org/apache/iotdb/db/engine/StorageEngine.java  |  15 +++-
 .../apache/iotdb/db/service/RegisterManager.java   |   1 +
 .../db/sync/receiver/load/FileLoaderTest.java      |   2 +-
 .../recover/SyncReceiverLogAnalyzerTest.java       |   2 +-
 .../apache/iotdb/db/utils/EnvironmentUtils.java    | 100 +++++++++++++--------
 server/src/test/resources/logback.xml              |   2 +
 7 files changed, 82 insertions(+), 42 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index a871f33..5426670 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -174,7 +174,7 @@ script:
     - mvn -B apache-rat:check
     # Output something every 10 minutes or Travis kills the job
     - while sleep 540; do echo "=====[ $SECONDS seconds still running ]====="; done &
-    - mvn -B clean test integration-test
+    - mvn -B clean test integration-test -Dtest.port.closed=true
     # Killing background sleep loop
     - kill %1
 
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
index b6d5ace..1c3284c 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
@@ -264,16 +264,25 @@ public class StorageEngine implements IService {
     if (ttlCheckThread != null) {
       ttlCheckThread.shutdownNow();
       try {
-        ttlCheckThread.awaitTermination(30, TimeUnit.SECONDS);
+        ttlCheckThread.awaitTermination(60, TimeUnit.SECONDS);
       } catch (InterruptedException e) {
-        logger.warn("TTL check thread still doesn't exit after 30s");
+        logger.warn("TTL check thread still doesn't exit after 60s");
         Thread.currentThread().interrupt();
-        throw new StorageEngineFailureException("StorageEngine failed to stop.", e);
+        throw new StorageEngineFailureException("StorageEngine failed to stop because of "
+            + "ttlCheckThread.", e);
       }
     }
     recoveryThreadPool.shutdownNow();
     if (!recoverAllSgThreadPool.isShutdown()) {
       recoverAllSgThreadPool.shutdownNow();
+      try {
+        recoverAllSgThreadPool.awaitTermination(60, TimeUnit.SECONDS);
+      } catch (InterruptedException e) {
+        logger.warn("recoverAllSgThreadPool thread still doesn't exit after 60s");
+        Thread.currentThread().interrupt();
+        throw new StorageEngineFailureException("StorageEngine failed to stop because of "
+            + "recoverAllSgThreadPool.", e);
+      }
     }
     this.reset();
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java b/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
index 1a22421..7be1939 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/RegisterManager.java
@@ -58,6 +58,7 @@ public class RegisterManager {
     for (IService service : iServices) {
       try {
         service.waitAndStop(10000);
+        logger.info("{} deregistered", service.getID());
       } catch (Exception e) {
         logger.error("Failed to stop {} because:", service.getID().getName(), e);
       }
diff --git a/server/src/test/java/org/apache/iotdb/db/sync/receiver/load/FileLoaderTest.java b/server/src/test/java/org/apache/iotdb/db/sync/receiver/load/FileLoaderTest.java
index 0a9a9a4..f62c7a3 100644
--- a/server/src/test/java/org/apache/iotdb/db/sync/receiver/load/FileLoaderTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/sync/receiver/load/FileLoaderTest.java
@@ -83,8 +83,8 @@ public class FileLoaderTest {
 
   @After
   public void tearDown() throws InterruptedException, IOException, StorageEngineException {
-    IoTDBDescriptor.getInstance().getConfig().setSyncEnable(false);
     EnvironmentUtils.cleanEnv();
+    IoTDBDescriptor.getInstance().getConfig().setSyncEnable(false);
   }
 
   @Test
diff --git a/server/src/test/java/org/apache/iotdb/db/sync/receiver/recover/SyncReceiverLogAnalyzerTest.java b/server/src/test/java/org/apache/iotdb/db/sync/receiver/recover/SyncReceiverLogAnalyzerTest.java
index 5d9a9dc..b81f051 100644
--- a/server/src/test/java/org/apache/iotdb/db/sync/receiver/recover/SyncReceiverLogAnalyzerTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/sync/receiver/recover/SyncReceiverLogAnalyzerTest.java
@@ -88,8 +88,8 @@ public class SyncReceiverLogAnalyzerTest {
 
   @After
   public void tearDown() throws InterruptedException, IOException, StorageEngineException {
-    IoTDBDescriptor.getInstance().getConfig().setSyncEnable(false);
     EnvironmentUtils.cleanEnv();
+    IoTDBDescriptor.getInstance().getConfig().setSyncEnable(false);
   }
 
   @Test
diff --git a/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java b/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
index 6bba93d..76782ab 100644
--- a/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
+++ b/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
@@ -24,6 +24,7 @@ import java.io.File;
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.Socket;
+import java.util.concurrent.TimeUnit;
 import javax.management.remote.JMXConnector;
 import javax.management.remote.JMXConnectorFactory;
 import javax.management.remote.JMXServiceURL;
@@ -73,7 +74,7 @@ public class EnvironmentUtils {
 
   private static IoTDB daemon;
 
-  public static boolean examinePorts = false;
+  public static boolean examinePorts = Boolean.valueOf(System.getProperty("test.port.closed", "false"));
 
   public static void cleanEnv() throws IOException, StorageEngineException {
     logger.warn("EnvironmentUtil cleanEnv...");
@@ -87,45 +88,19 @@ public class EnvironmentUtils {
 
     if (examinePorts) {
       // TODO: this is just too slow, especially on Windows, consider a better way
-      TTransport transport = new TSocket("127.0.0.1", 6667, 100);
-      if (!transport.isOpen()) {
+      boolean closed = examinePorts();
+      if (!closed) {
+        //sleep 10 seconds
         try {
-          transport.open();
-          logger.error("stop daemon failed. 6667 can be connected now.");
-          transport.close();
-        } catch (TTransportException e) {
+          TimeUnit.SECONDS.sleep(10);
+        } catch (InterruptedException e) {
+          //do nothing
         }
-      }
-      //try sync service
-      transport = new TSocket("127.0.0.1", 5555, 100);
-      if (!transport.isOpen()) {
-        try {
-          transport.open();
-          logger.error("stop Sync daemon failed. 5555 can be connected now.");
-          transport.close();
-        } catch (TTransportException e) {
+
+        if (!examinePorts()) {
+          fail("failed to close some ports");
         }
       }
-      //try jmx connection
-      try {
-        JMXServiceURL url =
-            new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:31999/jmxrmi");
-        JMXConnector jmxConnector = JMXConnectorFactory.connect(url);
-        logger.error("stop JMX failed. 31999 can be connected now.");
-        jmxConnector.close();
-      } catch (IOException e) {
-        //do nothing
-      }
-      //try MetricService
-      Socket socket = new Socket();
-      try {
-        socket.connect(new InetSocketAddress("127.0.0.1", 8181), 100);
-        logger.error("stop MetricService failed. 8181 can be connected now.");
-      } catch (Exception e) {
-        //do nothing
-      } finally {
-        socket.close();
-      }
     }
 
     // clean storage group manager
@@ -162,6 +137,59 @@ public class EnvironmentUtils {
     config.setMemtableSizeThreshold(oldGroupSizeInByte);
   }
 
+
+  private static boolean examinePorts() {
+    TTransport transport = new TSocket("127.0.0.1", 6667, 100);
+    if (!transport.isOpen()) {
+      try {
+        transport.open();
+        logger.error("stop daemon failed. 6667 can be connected now.");
+        transport.close();
+        return false;
+      } catch (TTransportException e) {
+      }
+    }
+    //try sync service
+    transport = new TSocket("127.0.0.1", 5555, 100);
+    if (!transport.isOpen()) {
+      try {
+        transport.open();
+        logger.error("stop Sync daemon failed. 5555 can be connected now.");
+        transport.close();
+        return false;
+      } catch (TTransportException e) {
+      }
+    }
+    //try jmx connection
+    try {
+      JMXServiceURL url =
+          new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:31999/jmxrmi");
+      JMXConnector jmxConnector = JMXConnectorFactory.connect(url);
+      logger.error("stop JMX failed. 31999 can be connected now.");
+      jmxConnector.close();
+      return false;
+    } catch (IOException e) {
+      //do nothing
+    }
+    //try MetricService
+    Socket socket = new Socket();
+    try {
+      socket.connect(new InetSocketAddress("127.0.0.1", 8181), 100);
+      logger.error("stop MetricService failed. 8181 can be connected now.");
+      return false;
+    } catch (Exception e) {
+      //do nothing
+    } finally {
+      try {
+        socket.close();
+      } catch (IOException e) {
+        //do nothing
+      }
+    }
+    return true;
+  }
+
+
   public static void cleanAllDir() throws IOException {
     // delete sequential files
     for (String path : directoryManager.getAllSequenceFileFolders()) {
diff --git a/server/src/test/resources/logback.xml b/server/src/test/resources/logback.xml
index a1c1c44..144bd4b 100644
--- a/server/src/test/resources/logback.xml
+++ b/server/src/test/resources/logback.xml
@@ -41,10 +41,12 @@
     <logger name="FileMonitor" level="info"/>
     -->
     <logger name="org.apache.iotdb.db.engine.merge" level="DEBUG"/>
+    <logger name="org.apache.iotdb.db.service.thrift.ThriftServiceThread" level="DEBUG"/>
     <logger name="org.eclipse.jetty.util.thread.QueuedThreadPool" level="DEBUG"/>
     <logger name="org.apache.iotdb.db.service.MetricsService" level="INFO"/>
     <logger name="org.apache.iotdb.db.engine.flush.FlushManager" level="INFO"/>
     <logger name="org.apache.iotdb.db.integration.IoTDBMergeTest" level="INFO"/>
+    <logger name="org.apache.iotdb.db.service.RegisterManager" level="INFO"/>
     <logger name="org.apache.iotdb.db.service.IoTDB" level="INFO"/>
     <logger name="org.apache.iotdb.db.service.RPCService" level="INFO"/>
     <logger name="org.apache.iotdb.db.service.MQTTService" level="INFO"/>