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"/>