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

liubao pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit 401846b6566a4caacb78221ca0cfffd185958aa6
Author: wujimin <[email protected]>
AuthorDate: Sun Apr 22 04:10:58 2018 +0800

    [SCB-486] ClientPoolManager support select ClientPool from special context.
---
 .../servicecomb/demo/perf/RedisClientUtils.java    |  2 +-
 .../servicecomb/foundation/vertx/VertxUtils.java   |  3 ++-
 .../foundation/vertx/client/ClientPoolFactory.java |  4 +++-
 .../foundation/vertx/client/ClientPoolManager.java | 24 ++++++++++++++--------
 .../foundation/vertx/client/ClientVerticle.java    |  3 ++-
 .../vertx/client/http/HttpClientPoolFactory.java   |  4 +---
 .../client/tcp/AbstractTcpClientPoolFactory.java   |  3 +--
 .../vertx/client/TestClientPoolManager.java        | 10 ++++-----
 .../vertx/client/TestClientVerticle.java           |  2 +-
 .../client/http/TestHttpClientPoolFactory.java     |  4 +---
 .../tcp/TestAbstractTcpClientPoolFactory.java      |  4 +---
 .../vertx/client/tcp/TestTcpClientConnection.java  |  6 ++++++
 12 files changed, 39 insertions(+), 30 deletions(-)

diff --git 
a/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/RedisClientUtils.java
 
b/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/RedisClientUtils.java
index b8e5add..0ce693a 100644
--- 
a/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/RedisClientUtils.java
+++ 
b/demo/perf/src/main/java/org/apache/servicecomb/demo/perf/RedisClientUtils.java
@@ -40,7 +40,7 @@ public class RedisClientUtils {
         .setHost(PerfConfiguration.redisHost)
         .setPort(PerfConfiguration.redisPort)
         .setAuth(PerfConfiguration.redisPassword);
-    ClientPoolFactory<RedisClient> factory = () -> {
+    ClientPoolFactory<RedisClient> factory = (ctx) -> {
       return RedisClient.create(vertx, redisOptions);
     };
     clientMgr = new ClientPoolManager<>(vertx, factory);
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 8a31563..4aba612 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
@@ -37,6 +37,7 @@ import io.netty.buffer.ByteBuf;
 import io.vertx.core.AbstractVerticle;
 import io.vertx.core.Context;
 import io.vertx.core.DeploymentOptions;
+import io.vertx.core.Verticle;
 import io.vertx.core.Vertx;
 import io.vertx.core.VertxOptions;
 import io.vertx.core.buffer.Buffer;
@@ -88,7 +89,7 @@ public final class VertxUtils {
   }
 
   // deploy Verticle and wait for its success. do not call this method in 
event-loop thread
-  public static <VERTICLE extends AbstractVerticle> boolean blockDeploy(Vertx 
vertx,
+  public static <VERTICLE extends Verticle> boolean blockDeploy(Vertx vertx,
       Class<VERTICLE> cls,
       DeploymentOptions options) throws InterruptedException {
     Holder<Boolean> result = new Holder<>();
diff --git 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientPoolFactory.java
 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientPoolFactory.java
index 0445247..a8f38bd 100644
--- 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientPoolFactory.java
+++ 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientPoolFactory.java
@@ -17,6 +17,8 @@
 
 package org.apache.servicecomb.foundation.vertx.client;
 
+import io.vertx.core.Context;
+
 public interface ClientPoolFactory<CLIENT_POOL> {
-  CLIENT_POOL createClientPool();
+  CLIENT_POOL createClientPool(Context context);
 }
diff --git 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientPoolManager.java
 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientPoolManager.java
index a79b86d..b867593 100644
--- 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientPoolManager.java
+++ 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientPoolManager.java
@@ -56,28 +56,36 @@ public class ClientPoolManager<CLIENT_POOL> {
     this.factory = factory;
   }
 
-  public CLIENT_POOL createClientPool() {
-    CLIENT_POOL pool = factory.createClientPool();
-    addPool(pool);
+  public CLIENT_POOL createClientPool(Context context) {
+    CLIENT_POOL pool = factory.createClientPool(context);
+    addPool(context, pool);
     return pool;
   }
 
-  protected void addPool(CLIENT_POOL pool) {
-    Vertx.currentContext().put(id, pool);
+  protected void addPool(Context context, CLIENT_POOL pool) {
+    context.put(id, pool);
     pools.add(pool);
   }
 
   public CLIENT_POOL findClientPool(boolean sync) {
+    return findClientPool(sync, null);
+  }
+
+  public CLIENT_POOL findClientPool(boolean sync, Context targetContext) {
     if (sync) {
       return findThreadBindClientPool();
     }
 
     // reactive mode
-    return findByContext();
+    return findByContext(targetContext);
   }
 
   protected CLIENT_POOL findByContext() {
-    Context currentContext = Vertx.currentContext();
+    return findByContext(null);
+  }
+
+  protected CLIENT_POOL findByContext(Context targetContext) {
+    Context currentContext = targetContext != null ? targetContext : 
Vertx.currentContext();
     if (currentContext != null
         && currentContext.owner() == vertx
         && currentContext.isEventLoopContext()) {
@@ -89,7 +97,7 @@ public class ClientPoolManager<CLIENT_POOL> {
 
       // this will make "client.thread-count" bigger than which in 
microservice.yaml
       // maybe it's better to remove "client.thread-count", just use 
"rest/highway.thread-count"
-      return createClientPool();
+      return createClientPool(currentContext);
     }
 
     // not in correct context:
diff --git 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientVerticle.java
 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientVerticle.java
index 19e972b..69044ae 100644
--- 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientVerticle.java
+++ 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/ClientVerticle.java
@@ -24,6 +24,7 @@ import io.vertx.core.AbstractVerticle;
 
 public class ClientVerticle<CLIENT_POOL> extends AbstractVerticle {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(ClientVerticle.class);
+
   public static final String CLIENT_MGR = "clientMgr";
 
   @SuppressWarnings("unchecked")
@@ -31,7 +32,7 @@ public class ClientVerticle<CLIENT_POOL> extends 
AbstractVerticle {
   public void start() throws Exception {
     try {
       ClientPoolManager<CLIENT_POOL> clientMgr = 
(ClientPoolManager<CLIENT_POOL>) config().getValue(CLIENT_MGR);
-      clientMgr.createClientPool();
+      clientMgr.createClientPool(context);
     } catch (Throwable e) {
       // vert.x got some states that not print error and execute call back in 
VertexUtils.blockDeploy, we add a log our self.
       LOGGER.error("", e);
diff --git 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientPoolFactory.java
 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientPoolFactory.java
index 945e872..a6b1f60 100644
--- 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientPoolFactory.java
+++ 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientPoolFactory.java
@@ -20,7 +20,6 @@ package org.apache.servicecomb.foundation.vertx.client.http;
 import org.apache.servicecomb.foundation.vertx.client.ClientPoolFactory;
 
 import io.vertx.core.Context;
-import io.vertx.core.Vertx;
 import io.vertx.core.http.HttpClient;
 import io.vertx.core.http.HttpClientOptions;
 
@@ -33,8 +32,7 @@ public class HttpClientPoolFactory implements 
ClientPoolFactory<HttpClientWithCo
   }
 
   @Override
-  public HttpClientWithContext createClientPool() {
-    Context context = Vertx.currentContext();
+  public HttpClientWithContext createClientPool(Context context) {
     HttpClient httpClient = 
context.owner().createHttpClient(httpClientOptions);
 
     return new HttpClientWithContext(httpClient, context);
diff --git 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientPoolFactory.java
 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientPoolFactory.java
index e87c283..3d1b298 100644
--- 
a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientPoolFactory.java
+++ 
b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/tcp/AbstractTcpClientPoolFactory.java
@@ -32,8 +32,7 @@ public abstract class 
AbstractTcpClientPoolFactory<CLIENT_POOL> implements Clien
   }
 
   @Override
-  public CLIENT_POOL createClientPool() {
-    Context context = Vertx.currentContext();
+  public CLIENT_POOL createClientPool(Context context) {
     Vertx vertx = context.owner();
 
     NetClientWrapper netClientWrapper = new NetClientWrapper(vertx, 
normalClientConfig, sslClientConfig);
diff --git 
a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/TestClientPoolManager.java
 
b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/TestClientPoolManager.java
index 884aecc..4548e5b 100644
--- 
a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/TestClientPoolManager.java
+++ 
b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/TestClientPoolManager.java
@@ -86,14 +86,12 @@ public class TestClientPoolManager {
   public void createClientPool(@Mocked HttpClientWithContext pool) {
     new Expectations(VertxImpl.class) {
       {
-        factory.createClientPool();
+        factory.createClientPool(context);
         result = pool;
-        VertxImpl.context();
-        result = context;
       }
     };
 
-    Assert.assertSame(pool, poolMgr.createClientPool());
+    Assert.assertSame(pool, poolMgr.createClientPool(context));
     Assert.assertSame(pool, context.get(id));
     Assert.assertThat(pools, Matchers.contains(pool));
   }
@@ -104,7 +102,7 @@ public class TestClientPoolManager {
       {
         poolMgr.findThreadBindClientPool();
         result = pool1;
-        poolMgr.findByContext();
+        poolMgr.findByContext(null);
         result = pool2;
       }
     };
@@ -148,7 +146,7 @@ public class TestClientPoolManager {
 
     new Expectations(VertxImpl.class) {
       {
-        factory.createClientPool();
+        factory.createClientPool(context);
         result = new HttpClientWithContext(null, null);
         VertxImpl.context();
         result = context;
diff --git 
a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/TestClientVerticle.java
 
b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/TestClientVerticle.java
index 0c018fe..6f76372 100644
--- 
a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/TestClientVerticle.java
+++ 
b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/TestClientVerticle.java
@@ -38,7 +38,7 @@ public class TestClientVerticle {
     AtomicInteger count = new AtomicInteger();
     ClientPoolManager<HttpClientWithContext> clientMgr = new 
MockUp<ClientPoolManager<HttpClientWithContext>>() {
       @Mock
-      HttpClientWithContext createClientPool() {
+      HttpClientWithContext createClientPool(Context context) {
         count.incrementAndGet();
         return null;
       }
diff --git 
a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/http/TestHttpClientPoolFactory.java
 
b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/http/TestHttpClientPoolFactory.java
index 7f0f7eb..08b9a32 100644
--- 
a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/http/TestHttpClientPoolFactory.java
+++ 
b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/http/TestHttpClientPoolFactory.java
@@ -36,15 +36,13 @@ public class TestHttpClientPoolFactory {
   public void createClientPool(@Mocked Vertx vertx, @Mocked Context context, 
@Mocked HttpClient httpClient) {
     new Expectations(VertxImpl.class) {
       {
-        VertxImpl.context();
-        result = context;
         context.owner();
         result = vertx;
         vertx.createHttpClient(httpClientOptions);
         result = httpClient;
       }
     };
-    HttpClientWithContext pool = factory.createClientPool();
+    HttpClientWithContext pool = factory.createClientPool(context);
 
     Assert.assertSame(context, pool.context());
     Assert.assertSame(httpClient, pool.getHttpClient());
diff --git 
a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestAbstractTcpClientPoolFactory.java
 
b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestAbstractTcpClientPoolFactory.java
index 5c868ff..a95aa3f 100644
--- 
a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestAbstractTcpClientPoolFactory.java
+++ 
b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestAbstractTcpClientPoolFactory.java
@@ -36,13 +36,11 @@ public class TestAbstractTcpClientPoolFactory {
   public void createClientPool(@Mocked Vertx vertx, @Mocked Context context) {
     new Expectations(VertxImpl.class) {
       {
-        VertxImpl.context();
-        result = context;
         context.owner();
         result = vertx;
       }
     };
-    TcpClientConnectionPool pool = factory.createClientPool();
+    TcpClientConnectionPool pool = factory.createClientPool(context);
 
     Assert.assertSame(normalClientConfig, 
pool.netClientWrapper.getClientConfig(false));
     Assert.assertSame(sslClientConfig, 
pool.netClientWrapper.getClientConfig(true));
diff --git 
a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestTcpClientConnection.java
 
b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestTcpClientConnection.java
index 9a7877a..d50ecb8 100644
--- 
a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestTcpClientConnection.java
+++ 
b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/client/tcp/TestTcpClientConnection.java
@@ -100,6 +100,12 @@ public class TestTcpClientConnection {
         result = byteBuf;
       }
     };
+
+    new MockUp<Context>(context) {
+      @Mock
+      void runOnContext(Handler<Void> action) {
+      }
+    };
     tcpClientConnection.send(tcpClientPackage, ar -> {
     });
 

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to