You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by wu...@apache.org on 2019/04/04 14:41:13 UTC
[servicecomb-java-chassis] branch master updated: [SCB-1239] close
thread after finish unit test case at once.
This is an automated email from the ASF dual-hosted git repository.
wujimin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 7c48e33 [SCB-1239] close thread after finish unit test case at once.
7c48e33 is described below
commit 7c48e33f1ba2495a0b6d1b0399e42aad2792a8f7
Author: wujimin <wu...@huawei.com>
AuthorDate: Thu Apr 4 10:59:53 2019 +0800
[SCB-1239] close thread after finish unit test case at once.
---
.../core/transport/TransportVertxFactory.java | 37 +++++++++++++++-------
.../core/executor/TestThreadPoolExecutorEx.java | 19 +++++------
.../core/transport/TestAbstractTransport.java | 2 +-
.../servicecomb/foundation/vertx/VertxUtils.java | 21 +++++++++++-
.../foundation/vertx/TestVertxUtils.java | 6 ++--
.../servicecomb/faultinjection/AbortFaultTest.java | 2 +-
.../servicecomb/faultinjection/DelayFaultTest.java | 2 +-
.../faultinjection/TestFaultInjectHandler.java | 2 +-
.../transport/highway/TestHighwayTransport.java | 19 +++++++++--
9 files changed, 78 insertions(+), 32 deletions(-)
diff --git a/core/src/main/java/org/apache/servicecomb/core/transport/TransportVertxFactory.java b/core/src/main/java/org/apache/servicecomb/core/transport/TransportVertxFactory.java
index d4e96d3..c2227fb 100644
--- a/core/src/main/java/org/apache/servicecomb/core/transport/TransportVertxFactory.java
+++ b/core/src/main/java/org/apache/servicecomb/core/transport/TransportVertxFactory.java
@@ -22,27 +22,42 @@ import org.apache.servicecomb.foundation.vertx.metrics.MetricsOptionsEx;
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
+import io.vertx.core.shareddata.Shareable;
public class TransportVertxFactory {
- private VertxOptions vertxOptions = new VertxOptions();
+ static class TransportVertxInfo implements Shareable {
+ public VertxOptions vertxOptions = new VertxOptions();
- private DefaultVertxMetricsFactory metricsFactory = new DefaultVertxMetricsFactory();
+ public DefaultVertxMetricsFactory metricsFactory = new DefaultVertxMetricsFactory();
- private MetricsOptionsEx metricsOptionsEx = (MetricsOptionsEx) metricsFactory.newOptions();
+ public MetricsOptionsEx metricsOptionsEx = (MetricsOptionsEx) metricsFactory.newOptions();
- private Vertx transportVertx;
-
- public TransportVertxFactory() {
- vertxOptions.setMetricsOptions(metricsOptionsEx);
- transportVertx = VertxUtils.getOrCreateVertxByName("transport", vertxOptions);
- metricsFactory.setVertx(transportVertx, vertxOptions);
+ public TransportVertxInfo() {
+ vertxOptions.setMetricsOptions(metricsOptionsEx);
+ }
}
+ private static final String LOCAL_MAP_NAME = "scb";
+
+ private static final String INFO = "transport-vertx-info";
+
public DefaultVertxMetricsFactory getMetricsFactory() {
- return metricsFactory;
+ TransportVertxInfo info = (TransportVertxInfo) getTransportVertx().sharedData().getLocalMap(LOCAL_MAP_NAME)
+ .get(INFO);
+ return info.metricsFactory;
}
public Vertx getTransportVertx() {
- return transportVertx;
+ return VertxUtils.getVertxMap().computeIfAbsent("transport", this::createTransportVertx);
+ }
+
+ private Vertx createTransportVertx(String name) {
+ TransportVertxInfo info = new TransportVertxInfo();
+
+ Vertx vertx = VertxUtils.init(info.vertxOptions);
+ info.metricsFactory.setVertx(vertx, info.vertxOptions);
+ vertx.sharedData().getLocalMap(LOCAL_MAP_NAME).put(INFO, info);
+
+ return vertx;
}
}
diff --git a/core/src/test/java/org/apache/servicecomb/core/executor/TestThreadPoolExecutorEx.java b/core/src/test/java/org/apache/servicecomb/core/executor/TestThreadPoolExecutorEx.java
index a2567e4..163fbb9 100644
--- a/core/src/test/java/org/apache/servicecomb/core/executor/TestThreadPoolExecutorEx.java
+++ b/core/src/test/java/org/apache/servicecomb/core/executor/TestThreadPoolExecutorEx.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.core.executor;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.TimeUnit;
@@ -27,24 +29,19 @@ public class TestThreadPoolExecutorEx {
static class TestTask implements Runnable {
CountDownLatch notify = new CountDownLatch(1);
- CountDownLatch wait = new CountDownLatch(1);
+ Future<?> future;
- public void quit() {
+ public void quit() throws ExecutionException, InterruptedException {
notify.countDown();
- try {
- wait.await();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ future.get();
}
@Override
public void run() {
try {
notify.await();
- wait.countDown();
} catch (InterruptedException e) {
- e.printStackTrace();
+ throw new IllegalStateException(e);
}
}
}
@@ -54,12 +51,12 @@ public class TestThreadPoolExecutorEx {
public TestTask submitTask() {
TestTask task = new TestTask();
- executorEx.execute(task);
+ task.future = executorEx.submit(task);
return task;
}
@Test
- public void schedule() {
+ public void schedule() throws ExecutionException, InterruptedException {
// init
Assert.assertEquals(0, executorEx.getPoolSize());
Assert.assertEquals(0, executorEx.getRejectedCount());
diff --git a/core/src/test/java/org/apache/servicecomb/core/transport/TestAbstractTransport.java b/core/src/test/java/org/apache/servicecomb/core/transport/TestAbstractTransport.java
index eeff175..2d3658a 100644
--- a/core/src/test/java/org/apache/servicecomb/core/transport/TestAbstractTransport.java
+++ b/core/src/test/java/org/apache/servicecomb/core/transport/TestAbstractTransport.java
@@ -84,7 +84,7 @@ public class TestAbstractTransport {
@AfterClass
public static void classTeardown() {
- VertxUtils.closeVertxByName("transport");
+ VertxUtils.blockCloseVertxByName("transport");
}
@Test
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxUtils.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxUtils.java
index 2082ef0..06484be 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxUtils.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxUtils.java
@@ -216,7 +216,26 @@ public final class VertxUtils {
try {
future.get();
} catch (Throwable e) {
- LOGGER.error("Failed to close vertx {}.", name, e);
+ LOGGER.error("Failed to wait close vertx {}.", name, e);
+ }
+ }
+
+ public static void blockCloseVertx(Vertx vertx) {
+ CountDownLatch latch = new CountDownLatch(1);
+ vertx.close(ar -> {
+ if (ar.succeeded()) {
+ LOGGER.info("Success to close vertx {}.", vertx);
+ } else {
+ LOGGER.info("Failed to close vertx {}.", vertx);
+ }
+
+ latch.countDown();
+ });
+
+ try {
+ latch.await();
+ } catch (InterruptedException e) {
+ LOGGER.info("Failed to wait close vertx {}.", vertx);
}
}
}
diff --git a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestVertxUtils.java b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestVertxUtils.java
index ee800d2..3da853d 100644
--- a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestVertxUtils.java
+++ b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestVertxUtils.java
@@ -28,6 +28,7 @@ import javax.xml.ws.Holder;
import org.apache.commons.io.FileUtils;
import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
import org.apache.servicecomb.foundation.vertx.stream.BufferInputStream;
+import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Test;
@@ -39,7 +40,6 @@ import io.vertx.core.buffer.Buffer;
import io.vertx.core.file.impl.FileResolver;
public class TestVertxUtils {
-
@Test
public void testGetOrCreateVertx() throws InterruptedException {
Vertx vertx = VertxUtils.getOrCreateVertxByName("ut", null);
@@ -86,7 +86,7 @@ public class TestVertxUtils {
public void testVertxUtilsInitNullOptions() {
Vertx vertx = VertxUtils.init(null);
Assert.assertNotEquals(null, vertx);
- vertx.close();
+ VertxUtils.blockCloseVertx(vertx);
}
@Test
@@ -96,7 +96,7 @@ public class TestVertxUtils {
Vertx vertx = VertxUtils.init(oOptions);
Assert.assertNotEquals(null, vertx);
- vertx.close();
+ VertxUtils.blockCloseVertx(vertx);
}
@Test
diff --git a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/AbortFaultTest.java b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/AbortFaultTest.java
index da606e0..ceddd85 100644
--- a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/AbortFaultTest.java
+++ b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/AbortFaultTest.java
@@ -70,7 +70,7 @@ public class AbortFaultTest {
@AfterClass
public static void classTeardown() {
- VertxUtils.closeVertxByName("faultinjectionTest");
+ VertxUtils.blockCloseVertxByName("faultinjectionTest");
}
@Test
diff --git a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/DelayFaultTest.java b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/DelayFaultTest.java
index 7b5452d..dcaa99e 100644
--- a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/DelayFaultTest.java
+++ b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/DelayFaultTest.java
@@ -71,7 +71,7 @@ public class DelayFaultTest {
@AfterClass
public static void classTeardown() {
- VertxUtils.closeVertxByName("faultinjectionTest");
+ VertxUtils.blockCloseVertxByName("faultinjectionTest");
}
@Test
diff --git a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestFaultInjectHandler.java b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestFaultInjectHandler.java
index bc5585c..86727b0 100644
--- a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestFaultInjectHandler.java
+++ b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestFaultInjectHandler.java
@@ -100,7 +100,7 @@ public class TestFaultInjectHandler {
@AfterClass
public static void classTeardown() {
- VertxUtils.closeVertxByName("faultinjectionTest");
+ VertxUtils.blockCloseVertxByName("faultinjectionTest");
}
/**
diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayTransport.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayTransport.java
index a367815..63e493e 100644
--- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayTransport.java
+++ b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayTransport.java
@@ -27,17 +27,34 @@ import org.apache.servicecomb.core.definition.OperationMeta;
import org.apache.servicecomb.foundation.common.net.URIEndpointObject;
import org.apache.servicecomb.foundation.vertx.VertxUtils;
import org.apache.servicecomb.swagger.invocation.AsyncResponse;
+import org.junit.AfterClass;
import org.junit.Assert;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import mockit.Mock;
import mockit.MockUp;
public class TestHighwayTransport {
+ private static final Logger LOGGER = LoggerFactory.getLogger(TestHighwayTransport.class);
private HighwayTransport transport = new HighwayTransport();
+ @BeforeClass
+ public static void setup() {
+ VertxUtils.blockCloseVertxByName("transport");
+ Thread.getAllStackTraces().keySet().forEach(t->LOGGER.info("before: {}", t.getName()));
+ }
+
+ @AfterClass
+ public static void teardown() {
+ VertxUtils.blockCloseVertxByName("transport");
+ Thread.getAllStackTraces().keySet().forEach(t->LOGGER.info("after: {}", t.getName()));
+ }
+
@Test
public void testGetInstance() {
Assert.assertNotNull(transport);
@@ -50,8 +67,6 @@ public class TestHighwayTransport {
transport.init();
} catch (Exception e) {
status = false;
- } finally {
- VertxUtils.blockCloseVertxByName("transport");
}
Assert.assertTrue(status);