This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch feature/tls
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git
The following commit(s) were added to refs/heads/feature/tls by this push:
new 250c56b Make sure end user can't start gRPC server with and without
SSL in the same port.
250c56b is described below
commit 250c56b0a9d3b9830d44d5dddf11a28aac8ba632
Author: wusheng <[email protected]>
AuthorDate: Wed Mar 21 10:36:42 2018 +0800
Make sure end user can't start gRPC server with and without SSL in the same
port.
---
.../skywalking/apm/collector/server/Server.java | 6 ++-
.../apm/collector/server/grpc/GRPCServer.java | 30 ++++++++++++---
.../apm/collector/server/jetty/JettyServer.java | 27 ++++++++++++-
.../grpc/manager/service/GRPCManagerService.java | 4 +-
...ce.java => ServerCanNotBeCreatedException.java} | 18 ++++-----
.../manager/service/GRPCManagerServiceImpl.java | 44 +++++++++++-----------
6 files changed, 87 insertions(+), 42 deletions(-)
diff --git
a/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/Server.java
b/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/Server.java
index efb0f56..efd1537 100644
---
a/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/Server.java
+++
b/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/Server.java
@@ -20,7 +20,7 @@
package org.apache.skywalking.apm.collector.server;
/**
- * @author peng-yongsheng
+ * @author peng-yongsheng, wusheng
*/
public interface Server {
@@ -33,4 +33,8 @@ public interface Server {
void start() throws ServerException;
void addHandler(ServerHandler handler);
+
+ boolean isSSLOpen();
+
+ boolean isStatusEqual(Server target);
}
diff --git
a/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/grpc/GRPCServer.java
b/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/grpc/GRPCServer.java
index a841e4b..876c7d3 100644
---
a/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/grpc/GRPCServer.java
+++
b/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/grpc/GRPCServer.java
@@ -21,11 +21,6 @@ package org.apache.skywalking.apm.collector.server.grpc;
import io.grpc.netty.GrpcSslContexts;
import io.grpc.netty.NettyServerBuilder;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.SslProvider;
import org.apache.skywalking.apm.collector.server.Server;
@@ -34,6 +29,11 @@ import
org.apache.skywalking.apm.collector.server.ServerHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.Objects;
+
/**
* @author peng-yongsheng, wusheng
*/
@@ -46,6 +46,8 @@ public class GRPCServer implements Server {
private io.grpc.Server server;
private NettyServerBuilder nettyServerBuilder;
private SslContextBuilder sslContextBuilder;
+ private File certChainFile;
+ private File privateKeyFile;
public GRPCServer(String host, int port) {
this.host = host;
@@ -63,6 +65,8 @@ public class GRPCServer implements Server {
public GRPCServer(String host, int port, File certChainFile, File
privateKeyFile) {
this.host = host;
this.port = port;
+ this.certChainFile = certChainFile;
+ this.privateKeyFile = privateKeyFile;
this.sslContextBuilder = SslContextBuilder.forServer(certChainFile,
privateKeyFile);
}
@@ -103,4 +107,20 @@ public class GRPCServer implements Server {
public void addHandler(ServerHandler handler) {
nettyServerBuilder.addService((io.grpc.BindableService) handler);
}
+
+ @Override
+ public boolean isSSLOpen() {
+ return sslContextBuilder == null;
+ }
+
+ @Override
+ public boolean isStatusEqual(Server target) {
+ if (this == target) return true;
+ if (target == null || getClass() != target.getClass()) return false;
+ GRPCServer that = (GRPCServer) target;
+ return port == that.port &&
+ Objects.equals(host, that.host) &&
+ Objects.equals(certChainFile, that.certChainFile) &&
+ Objects.equals(privateKeyFile, that.privateKeyFile);
+ }
}
diff --git
a/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/jetty/JettyServer.java
b/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/jetty/JettyServer.java
index 8e6008e..5f267c6 100644
---
a/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/jetty/JettyServer.java
+++
b/apm-collector/apm-collector-component/server-component/src/main/java/org/apache/skywalking/apm/collector/server/jetty/JettyServer.java
@@ -20,6 +20,7 @@
package org.apache.skywalking.apm.collector.server.jetty;
import java.net.InetSocketAddress;
+import java.util.Objects;
import javax.servlet.http.HttpServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
@@ -31,7 +32,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * @author peng-yongsheng
+ * @author peng-yongsheng, wusheng
*/
public class JettyServer implements Server {
@@ -73,6 +74,16 @@ public class JettyServer implements Server {
servletContextHandler.addServlet(servletHolder,
((JettyHandler)handler).pathSpec());
}
+ @Override
+ public boolean isSSLOpen() {
+ return false;
+ }
+
+ @Override
+ public boolean isStatusEqual(Server target) {
+ return equals(target);
+ }
+
@Override public void start() throws ServerException {
logger.info("start server, host: {}, port: {}", host, port);
try {
@@ -84,4 +95,18 @@ public class JettyServer implements Server {
throw new JettyServerException(e.getMessage(), e);
}
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ JettyServer that = (JettyServer) o;
+ return port == that.port &&
+ Objects.equals(host, that.host);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(host, port);
+ }
}
diff --git
a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerService.java
b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerService.java
index 7584599..d633866 100644
---
a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerService.java
+++
b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerService.java
@@ -28,7 +28,7 @@ import java.io.File;
* @author peng-yongsheng, wusheng
*/
public interface GRPCManagerService extends Service {
- Server createIfAbsent(String host, int port);
+ Server createIfAbsent(String host, int port) throws
ServerCanNotBeCreatedException;
- Server createIfAbsent(String host, int port, File certChainFile, File
privateKeyFile);
+ Server createIfAbsent(String host, int port, File certChainFile, File
privateKeyFile) throws ServerCanNotBeCreatedException;
}
diff --git
a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerService.java
b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/ServerCanNotBeCreatedException.java
similarity index 70%
copy from
apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerService.java
copy to
apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/ServerCanNotBeCreatedException.java
index 7584599..5f78863 100644
---
a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerService.java
+++
b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/ServerCanNotBeCreatedException.java
@@ -16,19 +16,17 @@
*
*/
-
package org.apache.skywalking.apm.collector.grpc.manager.service;
-import org.apache.skywalking.apm.collector.core.module.Service;
-import org.apache.skywalking.apm.collector.server.Server;
-
-import java.io.File;
+import
org.apache.skywalking.apm.collector.core.module.ServiceNotProvidedException;
/**
- * @author peng-yongsheng, wusheng
+ * gRPC Server can't be created under certain circumstance
+ *
+ * @author wusheng
*/
-public interface GRPCManagerService extends Service {
- Server createIfAbsent(String host, int port);
-
- Server createIfAbsent(String host, int port, File certChainFile, File
privateKeyFile);
+public class ServerCanNotBeCreatedException extends
ServiceNotProvidedException {
+ public ServerCanNotBeCreatedException(String message) {
+ super(message);
+ }
}
diff --git
a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerServiceImpl.java
b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerServiceImpl.java
index 756e211..ea58acb 100644
---
a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerServiceImpl.java
+++
b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/src/main/java/org/apache/skywalking/apm/collector/grpc/manager/service/GRPCManagerServiceImpl.java
@@ -19,14 +19,15 @@
package org.apache.skywalking.apm.collector.grpc.manager.service;
-import java.io.File;
-import java.util.Map;
import org.apache.skywalking.apm.collector.server.Server;
import org.apache.skywalking.apm.collector.server.ServerException;
import org.apache.skywalking.apm.collector.server.grpc.GRPCServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+import java.util.Map;
+
/**
* @author peng-yongsheng
*/
@@ -40,36 +41,33 @@ public class GRPCManagerServiceImpl implements
GRPCManagerService {
this.servers = servers;
}
- @Override public Server createIfAbsent(String host, int port) {
- String id = host + String.valueOf(port);
- if (servers.containsKey(id)) {
- return servers.get(id);
- } else {
- GRPCServer server = new GRPCServer(host, port);
- try {
- server.initialize();
- } catch (ServerException e) {
- logger.error(e.getMessage(), e);
- }
- servers.put(id, server);
- return server;
- }
+ @Override
+ public Server createIfAbsent(String host, int port) throws
ServerCanNotBeCreatedException {
+ return createOrChooseServer(host, port, new GRPCServer(host, port));
}
@Override
- public Server createIfAbsent(String host, int port, File certChainFile,
File privateKeyFile) {
+ public Server createIfAbsent(String host, int port, File certChainFile,
File privateKeyFile) throws ServerCanNotBeCreatedException {
+ return createOrChooseServer(host, port, new GRPCServer(host, port,
certChainFile, privateKeyFile));
+ }
+
+ private Server createOrChooseServer(String host, int port, GRPCServer
newServer) throws ServerCanNotBeCreatedException {
String id = host + String.valueOf(port);
- if (servers.containsKey(id)) {
- return servers.get(id);
+ GRPCServer existServer = servers.get(id);
+ if (existServer != null) {
+ if (existServer.isStatusEqual(newServer)) {
+ return existServer;
+ } else {
+ throw new ServerCanNotBeCreatedException("Can't create server
with same port but different setting. SSL setting must equal too.");
+ }
} else {
- GRPCServer server = new GRPCServer(host, port, certChainFile,
privateKeyFile);
try {
- server.initialize();
+ newServer.initialize();
} catch (ServerException e) {
logger.error(e.getMessage(), e);
}
- servers.put(id, server);
- return server;
+ servers.put(id, newServer);
+ return newServer;
}
}
}
--
To stop receiving notification emails like this one, please contact
[email protected].