This is an automated email from the ASF dual-hosted git repository. hxd pushed a commit to branch rel/0.11 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 5722eaf01ddd09927817eb69c54d31a4e633a25c Author: Xiangdong Huang <[email protected]> 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"/>
