You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by sw...@apache.org on 2016/05/06 18:27:30 UTC

[1/2] git commit: updated refs/heads/master to 9f970f2

Repository: cloudstack
Updated Branches:
  refs/heads/master 6d0c92be7 -> 9f970f28b


CLOUDSTACK-9348: Optimize NioTest and NioConnection main loop

- Reduces SSL handshake timeout to 15s, previously this was only 10s in
  commit debfcdef788ce0d51be06db0ef10f6815f9b563b
- Adds an aggresive explicit wakeup to save the Nio main IO loop/handler from
  getting blocked
- Fix NioTest to fail/succeed in about 60s, previously this was 300s
- Due to aggresive wakeup usage, NioTest should complete in less than 5s on most
  systems. On virtualized environment this may slightly increase due to thread,
  CPU burst/scheduling delays.

Signed-off-by: Rohit Yadav <ro...@shapeblue.com>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ea228695
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ea228695
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ea228695

Branch: refs/heads/master
Commit: ea22869593f68a3a34b12aeb23c2bb6c34efd365
Parents: 6d0c92b
Author: Rohit Yadav <ro...@shapeblue.com>
Authored: Thu May 5 23:19:33 2016 +0530
Committer: Rohit Yadav <ro...@shapeblue.com>
Committed: Thu May 5 23:19:33 2016 +0530

----------------------------------------------------------------------
 .../src/main/java/com/cloud/utils/nio/Link.java |  4 ++--
 .../java/com/cloud/utils/nio/NioConnection.java |  2 ++
 .../java/com/cloud/utils/testcase/NioTest.java  | 23 ++++++++++++--------
 3 files changed, 18 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea228695/utils/src/main/java/com/cloud/utils/nio/Link.java
----------------------------------------------------------------------
diff --git a/utils/src/main/java/com/cloud/utils/nio/Link.java b/utils/src/main/java/com/cloud/utils/nio/Link.java
index f297d52..da2c0d5 100644
--- a/utils/src/main/java/com/cloud/utils/nio/Link.java
+++ b/utils/src/main/java/com/cloud/utils/nio/Link.java
@@ -596,8 +596,8 @@ public class Link {
         while (handshakeStatus != SSLEngineResult.HandshakeStatus.FINISHED
                 && handshakeStatus != SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
             final long timeTaken = System.currentTimeMillis() - startTimeMills;
-            if (timeTaken > 60000L) {
-                s_logger.warn("SSL Handshake has taken more than 60s to connect to: " + socketChannel.getRemoteAddress() +
+            if (timeTaken > 15000L) {
+                s_logger.warn("SSL Handshake has taken more than 15s to connect to: " + socketChannel.getRemoteAddress() +
                         ". Please investigate this connection.");
                 return false;
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea228695/utils/src/main/java/com/cloud/utils/nio/NioConnection.java
----------------------------------------------------------------------
diff --git a/utils/src/main/java/com/cloud/utils/nio/NioConnection.java b/utils/src/main/java/com/cloud/utils/nio/NioConnection.java
index 6fdb473..749e552 100644
--- a/utils/src/main/java/com/cloud/utils/nio/NioConnection.java
+++ b/utils/src/main/java/com/cloud/utils/nio/NioConnection.java
@@ -171,6 +171,8 @@ public abstract class NioConnection implements Callable<Boolean> {
             } catch (final IOException e) {
                 s_logger.error("Agent will die due to this IOException!", e);
                 throw new NioConnectionException(e.getMessage(), e);
+            } finally {
+                _selector.wakeup();
             }
         }
         _isStartup = false;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ea228695/utils/src/test/java/com/cloud/utils/testcase/NioTest.java
----------------------------------------------------------------------
diff --git a/utils/src/test/java/com/cloud/utils/testcase/NioTest.java b/utils/src/test/java/com/cloud/utils/testcase/NioTest.java
index 20c31e2..446b1e2 100644
--- a/utils/src/test/java/com/cloud/utils/testcase/NioTest.java
+++ b/utils/src/test/java/com/cloud/utils/testcase/NioTest.java
@@ -61,9 +61,9 @@ public class NioTest {
     private static final Logger LOGGER = Logger.getLogger(NioTest.class);
 
     // Test should fail in due time instead of looping forever
-    private static final int TESTTIMEOUT = 300000;
+    private static final int TESTTIMEOUT = 60000;
 
-    final private int totalTestCount = 5;
+    final private int totalTestCount = 4;
     private int completedTestCount = 0;
 
     private NioServer server;
@@ -71,7 +71,7 @@ public class NioTest {
     private List<NioClient> maliciousClients = new ArrayList<>();
 
     private ExecutorService clientExecutor = Executors.newFixedThreadPool(totalTestCount, new NamedThreadFactory("NioClientHandler"));;
-    private ExecutorService maliciousExecutor = Executors.newFixedThreadPool(5*totalTestCount, new NamedThreadFactory("MaliciousNioClientHandler"));;
+    private ExecutorService maliciousExecutor = Executors.newFixedThreadPool(totalTestCount, new NamedThreadFactory("MaliciousNioClientHandler"));;
 
     private Random randomGenerator = new Random();
     private byte[] testBytes;
@@ -105,12 +105,18 @@ public class NioTest {
             Assert.fail(e.getMessage());
         }
 
+        /**
+         * The malicious client(s) tries to block NioServer's main IO loop
+         * thread until SSL handshake timeout value (from Link class, 15s) after
+         * which the valid NioClient(s) get the opportunity to make connection(s)
+         */
+        for (int i = 0; i < totalTestCount; i++) {
+            final NioClient maliciousClient = new NioMaliciousClient("NioMaliciousTestClient-" + i, "127.0.0.1", server.getPort(), 1, new NioMaliciousTestClient());
+            maliciousClients.add(maliciousClient);
+            maliciousExecutor.submit(new ThreadedNioClient(maliciousClient));
+        }
+
         for (int i = 0; i < totalTestCount; i++) {
-            for (int j = 0; j < 4; j++) {
-                final NioClient maliciousClient = new NioMaliciousClient("NioMaliciousTestClient-" + i, "127.0.0.1", server.getPort(), 1, new NioMaliciousTestClient());
-                maliciousClients.add(maliciousClient);
-                maliciousExecutor.submit(new ThreadedNioClient(maliciousClient));
-            }
             final NioClient client = new NioClient("NioTestClient-" + i, "127.0.0.1", server.getPort(), 1, new NioTestClient());
             clients.add(client);
             clientExecutor.submit(new ThreadedNioClient(client));
@@ -286,7 +292,6 @@ public class NioTest {
                     LOGGER.info("Server: Received OTHER task");
                 }
             }
-
         }
     }
 }


[2/2] git commit: updated refs/heads/master to 9f970f2

Posted by sw...@apache.org.
Merge pull request #1534 from shapeblue/niotest-fix

CLOUDSTACK-9348: Optimize NioTest and NioConnection main loop- Reduces SSL handshake timeout to 15s, previously this was only 10s in
  commit debfcdef788ce0d51be06db0ef10f6815f9b563b
- Adds an aggresive explicit wakeup to save the Nio main IO loop/handler from
  getting blocked
- Fix NioTest to fail/succeed in about 60s, previously this was 300s
- Due to aggresive wakeup usage, NioTest should complete in less than 5s on most
  systems. On virtualized environment this may slightly increase due to thread,
  CPU burst/scheduling delays.

/cc @swill  please review and merge.
Sorry about the previous values, they were not optimized for virtualized env. The aggressive selector.wakeup will ensure main IO loop does not get blocked even by malicious users, even for any timeout (ssl handshake etc).

* pr/1534:
  CLOUDSTACK-9348: Optimize NioTest and NioConnection main loop

Signed-off-by: Will Stevens <wi...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/9f970f28
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/9f970f28
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/9f970f28

Branch: refs/heads/master
Commit: 9f970f28b18534dffe33196ead60ea861f501fa9
Parents: 6d0c92b ea22869
Author: Will Stevens <wi...@gmail.com>
Authored: Fri May 6 14:26:26 2016 -0400
Committer: Will Stevens <wi...@gmail.com>
Committed: Fri May 6 14:26:27 2016 -0400

----------------------------------------------------------------------
 .../src/main/java/com/cloud/utils/nio/Link.java |  4 ++--
 .../java/com/cloud/utils/nio/NioConnection.java |  2 ++
 .../java/com/cloud/utils/testcase/NioTest.java  | 23 ++++++++++++--------
 3 files changed, 18 insertions(+), 11 deletions(-)
----------------------------------------------------------------------