You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2018/08/01 07:39:06 UTC
[incubator-servicecomb-java-chassis] 02/03: SCB-687
servicecomb.highway.server.connection-limit support dynamic update
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 5a1b85aea95991b2996819780809c3a64c7c5306
Author: zhengyangyong <ya...@huawei.com>
AuthorDate: Wed Jul 25 15:28:17 2018 +0800
SCB-687 servicecomb.highway.server.connection-limit support dynamic update
Signed-off-by: zhengyangyong <ya...@huawei.com>
---
.../foundation/vertx/ClientClosedEvent.java | 3 +++
.../foundation/vertx/ClientConnectedEvent.java | 3 +++
.../foundation/vertx/server/TcpServer.java | 30 ++++++++++------------
.../foundation/vertx/server/TestTcpServer.java | 2 +-
.../spring-pojo-connection-limit-test/pom.xml | 4 +--
.../src/test/resources/microservice.yaml | 2 +-
.../transport/highway/HighwayServer.java | 6 +++--
.../transport/highway/HighwayServerVerticle.java | 14 +++++++++-
.../transport/highway/HighwayTransport.java | 7 +++++
.../transport/highway/TestHighwayVerticle.java | 8 +++---
10 files changed, 52 insertions(+), 27 deletions(-)
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/ClientClosedEvent.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/ClientClosedEvent.java
index 9a2ba4d..68fa037 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/ClientClosedEvent.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/ClientClosedEvent.java
@@ -17,6 +17,9 @@
package org.apache.servicecomb.foundation.vertx;
+/**
+ * Notice: this event will raised in vertx eventloop thread, so do not run any block code
+ */
public class ClientClosedEvent {
private final String address;
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/ClientConnectedEvent.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/ClientConnectedEvent.java
index 9c2d3a3..09e752e 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/ClientConnectedEvent.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/ClientConnectedEvent.java
@@ -19,6 +19,9 @@ package org.apache.servicecomb.foundation.vertx;
import io.vertx.core.net.NetSocket;
+/**
+ * Notice: this event will raised in vertx eventloop thread, so do not run any block code
+ */
public class ClientConnectedEvent {
private final NetSocket netSocket;
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java
index 936f171..a2db206 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java
@@ -40,13 +40,9 @@ public class TcpServer {
private final AtomicInteger connectedCounter;
- private final int connectionLimit;
-
- public TcpServer(URIEndpointObject endpointObject) {
+ public TcpServer(URIEndpointObject endpointObject, AtomicInteger connectedCounter) {
this.endpointObject = endpointObject;
- this.connectedCounter = new AtomicInteger(0);
- this.connectionLimit = DynamicPropertyFactory.getInstance()
- .getIntProperty("servicecomb.highway.server.connection-limit", Integer.MAX_VALUE).get();
+ this.connectedCounter = connectedCounter;
}
public void init(Vertx vertx, String sslKey, AsyncResultCallback<InetSocketAddress> callback) {
@@ -69,18 +65,18 @@ public class TcpServer {
}
netServer.connectHandler(netSocket -> {
- if (connectedCounter.get() < connectionLimit) {
- int connectedCount = connectedCounter.incrementAndGet();
- if (connectedCount <= connectionLimit) {
- TcpServerConnection connection = createTcpServerConnection();
- connection.init(netSocket, connectedCounter);
- EventManager.post(new ClientConnectedEvent(netSocket, connectedCount));
- return;
- } else {
- connectedCounter.decrementAndGet();
- }
+ int connectedCount = connectedCounter.incrementAndGet();
+ int connectionLimit = DynamicPropertyFactory.getInstance()
+ .getIntProperty("servicecomb.highway.server.connection-limit", Integer.MAX_VALUE).get();
+ if (connectedCount > connectionLimit) {
+ connectedCounter.decrementAndGet();
+ netSocket.close();
+ return;
}
- netSocket.close();
+
+ TcpServerConnection connection = createTcpServerConnection();
+ connection.init(netSocket, connectedCounter);
+ EventManager.post(new ClientConnectedEvent(netSocket, connectedCount));
});
InetSocketAddress socketAddress = endpointObject.getSocketAddress();
diff --git a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/server/TestTcpServer.java b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/server/TestTcpServer.java
index 4702905..59825f5 100644
--- a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/server/TestTcpServer.java
+++ b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/server/TestTcpServer.java
@@ -35,7 +35,7 @@ import mockit.Mocked;
public class TestTcpServer {
static class TcpServerForTest extends TcpServer {
public TcpServerForTest(URIEndpointObject endpointObject) {
- super(endpointObject);
+ super(endpointObject, new AtomicInteger());
}
@Override
diff --git a/integration-tests/spring-pojo-connection-limit-test/pom.xml b/integration-tests/spring-pojo-connection-limit-test/pom.xml
index c0da88e..f121f62 100644
--- a/integration-tests/spring-pojo-connection-limit-test/pom.xml
+++ b/integration-tests/spring-pojo-connection-limit-test/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>integration-tests</artifactId>
<groupId>org.apache.servicecomb.tests</groupId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -33,7 +33,7 @@
<dependency>
<groupId>org.apache.servicecomb.tests</groupId>
<artifactId>pojo-test</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.1.0-SNAPSHOT</version>
<type>test-jar</type>
<exclusions>
<exclusion>
diff --git a/integration-tests/spring-pojo-connection-limit-test/src/test/resources/microservice.yaml b/integration-tests/spring-pojo-connection-limit-test/src/test/resources/microservice.yaml
index 3935df6..d1333f0 100644
--- a/integration-tests/spring-pojo-connection-limit-test/src/test/resources/microservice.yaml
+++ b/integration-tests/spring-pojo-connection-limit-test/src/test/resources/microservice.yaml
@@ -17,7 +17,7 @@
APPLICATION_ID: pojotest-it
service_description:
- name: pojo-connection-limit
+ name: pojo
version: 0.0.4
servicecomb:
service:
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServer.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServer.java
index 5aca854..0694c2d 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServer.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServer.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.transport.highway;
+import java.util.concurrent.atomic.AtomicInteger;
+
import org.apache.servicecomb.core.Endpoint;
import org.apache.servicecomb.foundation.common.net.URIEndpointObject;
import org.apache.servicecomb.foundation.vertx.server.TcpServer;
@@ -25,8 +27,8 @@ import org.apache.servicecomb.foundation.vertx.server.TcpServerConnection;
public class HighwayServer extends TcpServer {
private Endpoint endpoint;
- public HighwayServer(Endpoint endpoint) {
- super((URIEndpointObject) endpoint.getAddress());
+ public HighwayServer(Endpoint endpoint, AtomicInteger connectedCounter) {
+ super((URIEndpointObject) endpoint.getAddress(), connectedCounter);
this.endpoint = endpoint;
}
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerVerticle.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerVerticle.java
index 123f5c7..162c63f 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerVerticle.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServerVerticle.java
@@ -18,10 +18,12 @@
package org.apache.servicecomb.transport.highway;
import java.net.InetSocketAddress;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.servicecomb.core.Endpoint;
import org.apache.servicecomb.core.transport.AbstractTransport;
import org.apache.servicecomb.foundation.common.net.URIEndpointObject;
+import org.apache.servicecomb.foundation.common.utils.BeanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,6 +41,16 @@ public class HighwayServerVerticle extends AbstractVerticle {
private URIEndpointObject endpointObject;
+ private final AtomicInteger connectedCounter;
+
+ public HighwayServerVerticle() {
+ this(((HighwayTransport) BeanUtils.getBean("highwayTransport")).getConnectedCounter());
+ }
+
+ public HighwayServerVerticle(AtomicInteger connectedCounter) {
+ this.connectedCounter = connectedCounter;
+ }
+
@Override
public void init(Vertx vertx, Context context) {
super.init(vertx, context);
@@ -66,7 +78,7 @@ public class HighwayServerVerticle extends AbstractVerticle {
return;
}
- HighwayServer server = new HighwayServer(endpoint);
+ HighwayServer server = new HighwayServer(endpoint, connectedCounter);
server.init(vertx, SSL_KEY, ar -> {
if (ar.succeeded()) {
InetSocketAddress socketAddress = ar.result();
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayTransport.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayTransport.java
index 195741f..956275c 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayTransport.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayTransport.java
@@ -18,6 +18,7 @@
package org.apache.servicecomb.transport.highway;
import java.util.Collections;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.transport.AbstractTransport;
@@ -35,6 +36,12 @@ public class HighwayTransport extends AbstractTransport {
private HighwayClient highwayClient = new HighwayClient();
+ private final AtomicInteger connectedCounter = new AtomicInteger(0);
+
+ public AtomicInteger getConnectedCounter() {
+ return connectedCounter;
+ }
+
@Override
public String getName() {
return NAME;
diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayVerticle.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayVerticle.java
index b0b6f75..1aeb092 100644
--- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayVerticle.java
+++ b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayVerticle.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.transport.highway;
+import java.util.concurrent.atomic.AtomicInteger;
+
import org.apache.servicecomb.core.Endpoint;
import org.apache.servicecomb.core.Transport;
import org.apache.servicecomb.foundation.common.net.URIEndpointObject;
@@ -39,12 +41,12 @@ public class TestHighwayVerticle {
private HighwayServerVerticle highwayVerticle = null;
@Before
- public void setUp() throws Exception {
- highwayVerticle = new HighwayServerVerticle();
+ public void setUp() {
+ highwayVerticle = new HighwayServerVerticle(new AtomicInteger());
}
@After
- public void tearDown() throws Exception {
+ public void tearDown() {
highwayVerticle = null;
}