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].

Reply via email to