diff options
Diffstat (limited to 'jrt')
-rw-r--r-- | jrt/src/com/yahoo/jrt/Transport.java | 27 | ||||
-rw-r--r-- | jrt/src/com/yahoo/jrt/TransportThread.java | 19 | ||||
-rw-r--r-- | jrt/tests/com/yahoo/jrt/CryptoUtils.java | 4 |
3 files changed, 32 insertions, 18 deletions
diff --git a/jrt/src/com/yahoo/jrt/Transport.java b/jrt/src/com/yahoo/jrt/Transport.java index 003e40b8aa9..2d2e653956d 100644 --- a/jrt/src/com/yahoo/jrt/Transport.java +++ b/jrt/src/com/yahoo/jrt/Transport.java @@ -27,6 +27,7 @@ public class Transport { private final Worker worker; private final AtomicInteger runCnt; private final boolean tcpNoDelay; + private final int eventsBeforeWakeup; private final TransportMetrics metrics = TransportMetrics.getInstance(); private final ArrayList<TransportThread> threads = new ArrayList<>(); @@ -42,12 +43,14 @@ public class Transport { * @param fatalHandler fatal error handler * @param cryptoEngine crypto engine to use * @param numThreads number of {@link TransportThread}s. + * @param eventsBeforeWakeup number write events in Q before waking thread up **/ - public Transport(String name, FatalErrorHandler fatalHandler, CryptoEngine cryptoEngine, int numThreads, boolean tcpNoDelay) { + public Transport(String name, FatalErrorHandler fatalHandler, CryptoEngine cryptoEngine, int numThreads, boolean tcpNoDelay, int eventsBeforeWakeup) { this.name = name; this.fatalHandler = fatalHandler; // NB: this must be set first this.cryptoEngine = cryptoEngine; this.tcpNoDelay = tcpNoDelay; + this.eventsBeforeWakeup = Math.max(1, eventsBeforeWakeup); connector = new Connector(); worker = new Worker(this); runCnt = new AtomicInteger(numThreads); @@ -55,10 +58,23 @@ public class Transport { threads.add(new TransportThread(this, i)); } } - public Transport(String name, CryptoEngine cryptoEngine, int numThreads) { this(name, null, cryptoEngine, numThreads, true); } - public Transport(String name, int numThreads) { this(name, null, CryptoEngine.createDefault(), numThreads, true); } - public Transport(String name, int numThreads, boolean tcpNoDelay) { this(name, null, CryptoEngine.createDefault(), numThreads, tcpNoDelay); } - public Transport(String name) { this(name, null, CryptoEngine.createDefault(), 1, true); } + public Transport(String name, CryptoEngine cryptoEngine, int numThreads, int eventsBeforeWakeup) { + this(name, null, cryptoEngine, numThreads, true, eventsBeforeWakeup); + } + public Transport(String name, CryptoEngine cryptoEngine, int numThreads) { + this(name, null, cryptoEngine, numThreads, true, 1); + } + public Transport(String name, int numThreads, int eventsBeforeWakeup) { + this(name, null, CryptoEngine.createDefault(), numThreads, true, eventsBeforeWakeup); + } + public Transport(String name, int numThreads, boolean tcpNoDelay, int eventsBeforeWakeup) { + this(name, null, CryptoEngine.createDefault(), numThreads, tcpNoDelay, eventsBeforeWakeup); } + public Transport(String name, int numThreads) { + this(name, null, CryptoEngine.createDefault(), numThreads, true, 1); + } + public Transport(String name) { + this(name, null, CryptoEngine.createDefault(), 1, true, 1); + } // Only for testing public Transport() { this("default"); } @@ -72,6 +88,7 @@ public class Transport { } boolean getTcpNoDelay() { return tcpNoDelay; } + int getEventsBeforeWakeup() { return eventsBeforeWakeup; } String getName() { return name; } diff --git a/jrt/src/com/yahoo/jrt/TransportThread.java b/jrt/src/com/yahoo/jrt/TransportThread.java index 8f158161888..107e0490405 100644 --- a/jrt/src/com/yahoo/jrt/TransportThread.java +++ b/jrt/src/com/yahoo/jrt/TransportThread.java @@ -5,7 +5,6 @@ package com.yahoo.jrt; import java.io.IOException; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; -import java.nio.channels.SocketChannel; import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; @@ -32,30 +31,30 @@ public class TransportThread { } private class AddConnectionCmd implements Runnable { - private Connection conn; + private final Connection conn; AddConnectionCmd(Connection conn) { this.conn = conn; } public void run() { handleAddConnection(conn); } } private class CloseConnectionCmd implements Runnable { - private Connection conn; + private final Connection conn; CloseConnectionCmd(Connection conn) { this.conn = conn; } public void run() { handleCloseConnection(conn); } } private class EnableWriteCmd implements Runnable { - private Connection conn; + private final Connection conn; EnableWriteCmd(Connection conn) { this.conn = conn; } public void run() { handleEnableWrite(conn); } } private class HandshakeWorkDoneCmd implements Runnable { - private Connection conn; + private final Connection conn; HandshakeWorkDoneCmd(Connection conn) { this.conn = conn; } public void run() { handleHandshakeWorkDone(conn); } } - private class SyncCmd implements Runnable { + private static class SyncCmd implements Runnable { boolean done = false; public synchronized void waitDone() { while (!done) { @@ -68,7 +67,7 @@ public class TransportThread { } } - private static Logger log = Logger.getLogger(TransportThread.class.getName()); + private static final Logger log = Logger.getLogger(TransportThread.class.getName()); private final Transport parent; private final Thread thread; @@ -120,15 +119,15 @@ public class TransportThread { } private boolean postCommand(Runnable cmd) { - boolean wakeup; + int qlen; synchronized (this) { if (state == CLOSED) { return false; } - wakeup = queue.isEmpty(); queue.enqueue(cmd); + qlen = queue.size(); } - if (wakeup) { + if (qlen == parent.getEventsBeforeWakeup()) { selector.wakeup(); } return true; diff --git a/jrt/tests/com/yahoo/jrt/CryptoUtils.java b/jrt/tests/com/yahoo/jrt/CryptoUtils.java index 95ea581cb90..06f7fbb1704 100644 --- a/jrt/tests/com/yahoo/jrt/CryptoUtils.java +++ b/jrt/tests/com/yahoo/jrt/CryptoUtils.java @@ -9,7 +9,6 @@ import com.yahoo.security.tls.HostnameVerification; import com.yahoo.security.tls.PeerAuthentication; import com.yahoo.security.tls.TlsContext; import com.yahoo.security.tls.policy.AuthorizedPeers; -import com.yahoo.security.tls.policy.HostGlobPattern; import com.yahoo.security.tls.policy.PeerPolicy; import com.yahoo.security.tls.policy.RequiredPeerCredential; import com.yahoo.security.tls.policy.RequiredPeerCredential.Field; @@ -46,8 +45,7 @@ class CryptoUtils { singleton( new Role("localhost-role")), singletonList( - new RequiredPeerCredential( - Field.CN, new HostGlobPattern("localhost")))))); + RequiredPeerCredential.of(Field.CN, "localhost"))))); static TlsContext createTestTlsContext() { return new DefaultTlsContext( |