Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimone Bordet2014-09-26 07:46:14 +0000
committerSimone Bordet2014-09-26 08:13:16 +0000
commit8d2efaf7eb3c8cb901d83bb19041f35ea770d6f6 (patch)
tree17637d78408c0ec3d6784196e6f3179d398e1a23
parenta8b461fe914545342ccf669abf34ea05a1a5de9e (diff)
downloadorg.eclipse.jetty.project-8d2efaf7eb3c8cb901d83bb19041f35ea770d6f6.tar.gz
org.eclipse.jetty.project-8d2efaf7eb3c8cb901d83bb19041f35ea770d6f6.tar.xz
org.eclipse.jetty.project-8d2efaf7eb3c8cb901d83bb19041f35ea770d6f6.zip
445167 - Allow configuration of dispatch after select.
Introduced parameter "dispatchIO" in the relevant factories so that they can be configured by users and connections will be created taking into account this parameter. For less configurable connection factories, this parameter is currently hardcoded to either true or false depending on the case. For example, ALPN and NPN connections have it to false, since they don't do any blocking operation in onFillable().
-rw-r--r--jetty-client/src/main/java/org/eclipse/jetty/client/Socks4Proxy.java2
-rw-r--r--jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientCustomProxyTest.java5
-rw-r--r--jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesServerTest.java7
-rw-r--r--jetty-fcgi/fcgi-server/src/main/java/org/eclipse/jetty/fcgi/server/ServerFCGIConnection.java7
-rw-r--r--jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java6
-rw-r--r--jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java4
-rw-r--r--jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java19
-rw-r--r--jetty-io/src/main/java/org/eclipse/jetty/io/AbstractConnection.java25
-rw-r--r--jetty-io/src/main/java/org/eclipse/jetty/io/NegotiatingClientConnection.java2
-rw-r--r--jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java7
-rw-r--r--jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointInterestsTest.java2
-rw-r--r--jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointTest.java14
-rw-r--r--jetty-io/src/test/java/org/eclipse/jetty/io/SelectorManagerTest.java2
-rw-r--r--jetty-proxy/src/main/java/org/eclipse/jetty/proxy/ProxyConnection.java2
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java25
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java19
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/NegotiatingServerConnection.java9
-rw-r--r--jetty-server/src/test/java/org/eclipse/jetty/server/ExtendedServerTest.java4
-rw-r--r--jetty-server/src/test/java/org/eclipse/jetty/server/SlowClientWithPipelinedRequestTest.java7
-rw-r--r--jetty-spdy/spdy-http-client-transport/src/test/java/org/eclipse/jetty/spdy/client/http/HttpClientCustomProxyTest.java5
-rw-r--r--jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/proxy/ProxyHTTPSPDYConnection.java2
-rw-r--r--jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/WebSocketClient.java49
-rw-r--r--jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/io/UpgradeConnection.java2
-rw-r--r--jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/io/WebSocketClientConnection.java2
-rw-r--r--jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/io/AbstractWebSocketConnection.java4
-rw-r--r--jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerConnection.java4
-rw-r--r--jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java5
27 files changed, 120 insertions, 121 deletions
diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/Socks4Proxy.java b/jetty-client/src/main/java/org/eclipse/jetty/client/Socks4Proxy.java
index de40538f7b..5078ae40f0 100644
--- a/jetty-client/src/main/java/org/eclipse/jetty/client/Socks4Proxy.java
+++ b/jetty-client/src/main/java/org/eclipse/jetty/client/Socks4Proxy.java
@@ -85,7 +85,7 @@ public class Socks4Proxy extends ProxyConfiguration.Proxy
public Socks4ProxyConnection(EndPoint endPoint, Executor executor, ClientConnectionFactory connectionFactory, Map<String, Object> context)
{
- super(endPoint, executor);
+ super(endPoint, executor, false);
this.connectionFactory = connectionFactory;
this.context = context;
}
diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientCustomProxyTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientCustomProxyTest.java
index eb05fc8539..0b17054409 100644
--- a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientCustomProxyTest.java
+++ b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientCustomProxyTest.java
@@ -24,7 +24,6 @@ import java.nio.ByteBuffer;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
-
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -153,7 +152,7 @@ public class HttpClientCustomProxyTest
public CAFEBABEConnection(EndPoint endPoint, Executor executor, ClientConnectionFactory connectionFactory, Map<String, Object> context)
{
- super(endPoint, executor);
+ super(endPoint, executor, true);
this.connectionFactory = connectionFactory;
this.context = context;
}
@@ -212,7 +211,7 @@ public class HttpClientCustomProxyTest
public CAFEBABEServerConnection(Connector connector, EndPoint endPoint, org.eclipse.jetty.server.ConnectionFactory connectionFactory)
{
- super(endPoint, connector.getExecutor());
+ super(endPoint, connector.getExecutor(), true);
this.connectionFactory = connectionFactory;
}
diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesServerTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesServerTest.java
index 796398a206..81b37a72db 100644
--- a/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesServerTest.java
+++ b/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesServerTest.java
@@ -18,8 +18,6 @@
package org.eclipse.jetty.client.ssl;
-import static org.hamcrest.Matchers.nullValue;
-
import java.io.BufferedReader;
import java.io.EOFException;
import java.io.File;
@@ -42,7 +40,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLSocket;
@@ -80,6 +77,8 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
+import static org.hamcrest.Matchers.nullValue;
+
public class SslBytesServerTest extends SslBytesTest
{
private final AtomicInteger sslFills = new AtomicInteger();
@@ -111,7 +110,7 @@ public class SslBytesServerTest extends SslBytesTest
@Override
public Connection newConnection(Connector connector, EndPoint endPoint)
{
- return configure(new HttpConnection(getHttpConfiguration(), connector, endPoint)
+ return configure(new HttpConnection(getHttpConfiguration(), connector, endPoint, true)
{
@Override
protected HttpParser newHttpParser()
diff --git a/jetty-fcgi/fcgi-server/src/main/java/org/eclipse/jetty/fcgi/server/ServerFCGIConnection.java b/jetty-fcgi/fcgi-server/src/main/java/org/eclipse/jetty/fcgi/server/ServerFCGIConnection.java
index 5a13017d20..0a486a838c 100644
--- a/jetty-fcgi/fcgi-server/src/main/java/org/eclipse/jetty/fcgi/server/ServerFCGIConnection.java
+++ b/jetty-fcgi/fcgi-server/src/main/java/org/eclipse/jetty/fcgi/server/ServerFCGIConnection.java
@@ -49,7 +49,7 @@ public class ServerFCGIConnection extends AbstractConnection
public ServerFCGIConnection(Connector connector, EndPoint endPoint, HttpConfiguration configuration, boolean sendStatus200)
{
- super(endPoint, connector.getExecutor());
+ super(endPoint, connector.getExecutor(), false);
this.connector = connector;
this.flusher = new Flusher(endPoint);
this.configuration = configuration;
@@ -163,8 +163,9 @@ public class ServerFCGIConnection extends AbstractConnection
LOG.debug("Request {} {} content {} on {}", request, stream, buffer, channel);
if (channel != null)
{
- // TODO avoid creating content all the time
- channel.onContent(new HttpInput.Content(buffer));
+ ByteBuffer copy = ByteBuffer.allocate(buffer.remaining());
+ copy.put(buffer).flip();
+ channel.onContent(new HttpInput.Content(copy));
}
return false;
}
diff --git a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java
index 25a182b418..3626391250 100644
--- a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java
+++ b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java
@@ -66,7 +66,7 @@ public class HTTP2ClientConnectionFactory implements ClientConnectionFactory
Generator generator = new Generator(byteBufferPool, 4096);
HTTP2ClientSession session = new HTTP2ClientSession(scheduler, endPoint, generator, listener, new HTTP2FlowControl(FlowControl.DEFAULT_WINDOW_SIZE));
Parser parser = new Parser(byteBufferPool, session, 4096, 8192);
- return new HTTP2ClientConnection(client, byteBufferPool, executor, endPoint, parser, session, 8192, promise, listener);
+ return new HTTP2ClientConnection(client, byteBufferPool, executor, endPoint, parser, session, 8192, false, promise, listener);
}
public int getInitialSessionWindow()
@@ -85,9 +85,9 @@ public class HTTP2ClientConnectionFactory implements ClientConnectionFactory
private final Promise<Session> promise;
private final Session.Listener listener;
- public HTTP2ClientConnection(HTTP2Client client, ByteBufferPool byteBufferPool, Executor executor, EndPoint endpoint, Parser parser, ISession session, int bufferSize, Promise<Session> promise, Session.Listener listener)
+ public HTTP2ClientConnection(HTTP2Client client, ByteBufferPool byteBufferPool, Executor executor, EndPoint endpoint, Parser parser, ISession session, int bufferSize, boolean dispatchIO, Promise<Session> promise, Session.Listener listener)
{
- super(byteBufferPool, executor, endpoint, parser, session, bufferSize);
+ super(byteBufferPool, executor, endpoint, parser, session, bufferSize, dispatchIO);
this.client = client;
this.promise = promise;
this.listener = listener;
diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java
index caf55bfae4..1687f9d8de 100644
--- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java
+++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java
@@ -38,9 +38,9 @@ public class HTTP2Connection extends AbstractConnection
private final ISession session;
private final int bufferSize;
- public HTTP2Connection(ByteBufferPool byteBufferPool, Executor executor, EndPoint endPoint, Parser parser, ISession session, int bufferSize)
+ public HTTP2Connection(ByteBufferPool byteBufferPool, Executor executor, EndPoint endPoint, Parser parser, ISession session, int bufferSize, boolean dispatchIO)
{
- super(endPoint, executor);
+ super(endPoint, executor, dispatchIO);
this.byteBufferPool = byteBufferPool;
this.parser = parser;
this.session = session;
diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java
index 6f5b7a58a3..9ffff48309 100644
--- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java
+++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java
@@ -36,6 +36,7 @@ import org.eclipse.jetty.server.Connector;
public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConnectionFactory
{
+ private boolean dispatchIO = true;
private int maxHeaderTableSize = 4096;
private int initialStreamWindow = FlowControl.DEFAULT_WINDOW_SIZE;
private int maxConcurrentStreams = -1;
@@ -45,6 +46,16 @@ public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConne
super("h2-14");
}
+ public boolean isDispatchIO()
+ {
+ return dispatchIO;
+ }
+
+ public void setDispatchIO(boolean dispatchIO)
+ {
+ this.dispatchIO = dispatchIO;
+ }
+
public int getMaxHeaderTableSize()
{
return maxHeaderTableSize;
@@ -92,7 +103,7 @@ public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConne
Parser parser = newServerParser(connector.getByteBufferPool(), session);
HTTP2Connection connection = new HTTP2ServerConnection(connector.getByteBufferPool(), connector.getExecutor(),
- endPoint, parser, session, getInputBufferSize(), listener);
+ endPoint, parser, session, getInputBufferSize(), isDispatchIO(), listener);
return configure(connection, connector, endPoint);
}
@@ -101,13 +112,13 @@ public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConne
protected abstract ServerParser newServerParser(ByteBufferPool byteBufferPool, ServerParser.Listener listener);
- private class HTTP2ServerConnection extends HTTP2Connection
+ private static class HTTP2ServerConnection extends HTTP2Connection
{
private final ServerSessionListener listener;
- public HTTP2ServerConnection(ByteBufferPool byteBufferPool, Executor executor, EndPoint endPoint, Parser parser, ISession session, int inputBufferSize, ServerSessionListener listener)
+ private HTTP2ServerConnection(ByteBufferPool byteBufferPool, Executor executor, EndPoint endPoint, Parser parser, ISession session, int inputBufferSize, boolean dispatchIO, ServerSessionListener listener)
{
- super(byteBufferPool, executor, endPoint, parser, session, inputBufferSize);
+ super(byteBufferPool, executor, endPoint, parser, session, inputBufferSize, dispatchIO);
this.listener = listener;
}
diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/AbstractConnection.java b/jetty-io/src/main/java/org/eclipse/jetty/io/AbstractConnection.java
index 985065c498..93ce53f03c 100644
--- a/jetty-io/src/main/java/org/eclipse/jetty/io/AbstractConnection.java
+++ b/jetty-io/src/main/java/org/eclipse/jetty/io/AbstractConnection.java
@@ -41,30 +41,23 @@ public abstract class AbstractConnection implements Connection
{
private static final Logger LOG = Log.getLogger(AbstractConnection.class);
- public static final boolean EXECUTE_ONFILLABLE=true;
-
private final List<Listener> listeners = new CopyOnWriteArrayList<>();
private final AtomicReference<State> _state = new AtomicReference<>(IDLE);
private final long _created=System.currentTimeMillis();
private final EndPoint _endPoint;
private final Executor _executor;
private final Callback _readCallback;
- private final boolean _executeOnfillable;
+ private final boolean _dispatchIO;
private int _inputBufferSize=2048;
- protected AbstractConnection(EndPoint endp, Executor executor)
- {
- this(endp,executor,EXECUTE_ONFILLABLE);
- }
-
- protected AbstractConnection(EndPoint endp, Executor executor, final boolean executeOnfillable)
+ protected AbstractConnection(EndPoint endp, Executor executor, boolean dispatchIO)
{
if (executor == null)
throw new IllegalArgumentException("Executor must not be null!");
_endPoint = endp;
_executor = executor;
_readCallback = new ReadCallback();
- _executeOnfillable=executeOnfillable;
+ _dispatchIO = dispatchIO;
_state.set(IDLE);
}
@@ -88,10 +81,16 @@ public abstract class AbstractConnection implements Connection
{
return _executor;
}
-
+
+ public boolean isDispatchIO()
+ {
+ return _dispatchIO;
+ }
+
protected void failedCallback(final Callback callback, final Throwable x)
{
- if (NonBlockingThread.isNonBlockingThread())
+ boolean dispatchFailure = isDispatchIO() && NonBlockingThread.isNonBlockingThread();
+ if (dispatchFailure)
{
try
{
@@ -375,7 +374,7 @@ public abstract class AbstractConnection implements Connection
@Override
public void onEnter(AbstractConnection connection)
{
- if (connection._executeOnfillable)
+ if (connection.isDispatchIO())
connection.getExecutor().execute(connection._runOnFillable);
else
connection._runOnFillable.run();
diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/NegotiatingClientConnection.java b/jetty-io/src/main/java/org/eclipse/jetty/io/NegotiatingClientConnection.java
index cd05630f62..291b799f1d 100644
--- a/jetty-io/src/main/java/org/eclipse/jetty/io/NegotiatingClientConnection.java
+++ b/jetty-io/src/main/java/org/eclipse/jetty/io/NegotiatingClientConnection.java
@@ -38,7 +38,7 @@ public abstract class NegotiatingClientConnection extends AbstractConnection
protected NegotiatingClientConnection(EndPoint endp, Executor executor, SSLEngine sslEngine, ClientConnectionFactory connectionFactory, Map<String, Object> context)
{
- super(endp, executor);
+ super(endp, executor, false);
this.engine = sslEngine;
this.connectionFactory = connectionFactory;
this.context = context;
diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java
index a91cd08ba5..e850d9a3e2 100644
--- a/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java
+++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java
@@ -22,7 +22,6 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ClosedChannelException;
import java.util.concurrent.Executor;
-
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLEngineResult;
import javax.net.ssl.SSLEngineResult.HandshakeStatus;
@@ -100,9 +99,9 @@ public class SslConnection extends AbstractConnection
public SslConnection(ByteBufferPool byteBufferPool, Executor executor, EndPoint endPoint, SSLEngine sslEngine)
{
- // This connection does not execute calls to onfillable, so they will be called by the selector thread.
- // onfillable does not block and will only wakeup another thread to do the actual reading and handling.
- super(endPoint, executor, !EXECUTE_ONFILLABLE);
+ // This connection does not execute calls to onFillable(), so they will be called by the selector thread.
+ // onFillable() does not block and will only wakeup another thread to do the actual reading and handling.
+ super(endPoint, executor, false);
this._bufferPool = byteBufferPool;
this._sslEngine = sslEngine;
this._decryptedEndPoint = newDecryptedEndPoint();
diff --git a/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointInterestsTest.java b/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointInterestsTest.java
index f2e7d71bda..13e56e1e75 100644
--- a/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointInterestsTest.java
+++ b/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointInterestsTest.java
@@ -79,7 +79,7 @@ public class SelectChannelEndPointInterestsTest
@Override
public Connection newConnection(SocketChannel channel, final EndPoint endPoint, Object attachment)
{
- return new AbstractConnection(endPoint, getExecutor())
+ return new AbstractConnection(endPoint, getExecutor(), true)
{
@Override
public void onOpen()
diff --git a/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointTest.java b/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointTest.java
index 5ba510b430..4ff400d670 100644
--- a/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointTest.java
+++ b/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointTest.java
@@ -18,12 +18,6 @@
package org.eclipse.jetty.io;
-import static org.hamcrest.Matchers.greaterThan;
-import static org.hamcrest.Matchers.greaterThanOrEqualTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
@@ -52,6 +46,12 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.greaterThanOrEqualTo;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
public class SelectChannelEndPointTest
{
private static final Logger LOG = Log.getLogger(SelectChannelEndPointTest.class);
@@ -122,7 +122,7 @@ public class SelectChannelEndPointTest
public TestConnection(EndPoint endp)
{
- super(endp, _threadPool);
+ super(endp, _threadPool, true);
}
@Override
diff --git a/jetty-io/src/test/java/org/eclipse/jetty/io/SelectorManagerTest.java b/jetty-io/src/test/java/org/eclipse/jetty/io/SelectorManagerTest.java
index 7d63d85938..ae2de5faa3 100644
--- a/jetty-io/src/test/java/org/eclipse/jetty/io/SelectorManagerTest.java
+++ b/jetty-io/src/test/java/org/eclipse/jetty/io/SelectorManagerTest.java
@@ -94,7 +94,7 @@ public class SelectorManagerTest
public Connection newConnection(SocketChannel channel, EndPoint endpoint, Object attachment) throws IOException
{
((Callback)attachment).succeeded();
- return new AbstractConnection(endpoint, executor)
+ return new AbstractConnection(endpoint, executor, true)
{
@Override
public void onFillable()
diff --git a/jetty-proxy/src/main/java/org/eclipse/jetty/proxy/ProxyConnection.java b/jetty-proxy/src/main/java/org/eclipse/jetty/proxy/ProxyConnection.java
index 3a620f43a1..f8e6d44a3d 100644
--- a/jetty-proxy/src/main/java/org/eclipse/jetty/proxy/ProxyConnection.java
+++ b/jetty-proxy/src/main/java/org/eclipse/jetty/proxy/ProxyConnection.java
@@ -41,7 +41,7 @@ public abstract class ProxyConnection extends AbstractConnection
protected ProxyConnection(EndPoint endp, Executor executor, ByteBufferPool bufferPool, ConcurrentMap<String, Object> context)
{
- super(endp, executor);
+ super(endp, executor, false);
this.bufferPool = bufferPool;
this.context = context;
}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java
index d454fdbaf6..e7dee929a6 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java
@@ -60,12 +60,12 @@ public class HttpConnection extends AbstractConnection implements Runnable, Http
private volatile ByteBuffer _chunk = null;
private final SendCallback _sendCallback = new SendCallback();
- /* ------------------------------------------------------------ */
- /** Get the current connection that this thread is dispatched to.
- * Note that a thread may be processing a request asynchronously and
+ /**
+ * Get the current connection that this thread is dispatched to.
+ * Note that a thread may be processing a request asynchronously and
* thus not be dispatched to the connection.
- * @see Request#getAttribute(String) for a more general way to access the HttpConnection
* @return the current HttpConnection or null
+ * @see Request#getAttribute(String) for a more general way to access the HttpConnection
*/
public static HttpConnection getCurrentConnection()
{
@@ -82,17 +82,9 @@ public class HttpConnection extends AbstractConnection implements Runnable, Http
return last;
}
- public HttpConfiguration getHttpConfiguration()
+ public HttpConnection(HttpConfiguration config, Connector connector, EndPoint endPoint, boolean dispatchIO)
{
- return _config;
- }
-
- public HttpConnection(HttpConfiguration config, Connector connector, EndPoint endPoint)
- {
- // Tell AbstractConnector executeOnFillable==true because we want the same thread that
- // does the HTTP parsing to handle the request so its cache is hot
- super(endPoint, connector.getExecutor(),true);
-
+ super(endPoint, connector.getExecutor(), dispatchIO);
_config = config;
_connector = connector;
_bufferPool = _connector.getByteBufferPool();
@@ -104,6 +96,11 @@ public class HttpConnection extends AbstractConnection implements Runnable, Http
LOG.debug("New HTTP Connection {}", this);
}
+ public HttpConfiguration getHttpConfiguration()
+ {
+ return _config;
+ }
+
protected HttpGenerator newHttpGenerator()
{
return new HttpGenerator(_config.getSendServerVersion(),_config.getSendXPoweredBy());
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java
index d879074812..68d7fdbd65 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java
@@ -16,17 +16,13 @@
// ========================================================================
//
-
package org.eclipse.jetty.server;
-
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.io.Connection;
import org.eclipse.jetty.io.EndPoint;
import org.eclipse.jetty.util.annotation.Name;
-
-/* ------------------------------------------------------------ */
/** A Connection Factory for HTTP Connections.
* <p>Accepts connections either directly or via SSL and/or NPN chained connection factories. The accepted
* {@link HttpConnection}s are configured by a {@link HttpConfiguration} instance that is either created by
@@ -35,11 +31,11 @@ import org.eclipse.jetty.util.annotation.Name;
public class HttpConnectionFactory extends AbstractConnectionFactory implements HttpConfiguration.ConnectionFactory
{
private final HttpConfiguration _config;
+ private boolean _dispatchIO = true;
public HttpConnectionFactory()
{
this(new HttpConfiguration());
- setInputBufferSize(16384);
}
public HttpConnectionFactory(@Name("config") HttpConfiguration config)
@@ -55,10 +51,19 @@ public class HttpConnectionFactory extends AbstractConnectionFactory implements
return _config;
}
+ public boolean isDispatchIO()
+ {
+ return _dispatchIO;
+ }
+
+ public void setDispatchIO(boolean dispatchIO)
+ {
+ _dispatchIO = dispatchIO;
+ }
+
@Override
public Connection newConnection(Connector connector, EndPoint endPoint)
{
- return configure(new HttpConnection(_config, connector, endPoint), connector, endPoint);
+ return configure(new HttpConnection(_config, connector, endPoint, isDispatchIO()), connector, endPoint);
}
-
}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/NegotiatingServerConnection.java b/jetty-server/src/main/java/org/eclipse/jetty/server/NegotiatingServerConnection.java
index 6d9dd21021..2d5bf92f17 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/NegotiatingServerConnection.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/NegotiatingServerConnection.java
@@ -42,7 +42,7 @@ public abstract class NegotiatingServerConnection extends AbstractConnection
protected NegotiatingServerConnection(Connector connector, EndPoint endPoint, SSLEngine engine, List<String> protocols, String defaultProtocol)
{
- super(endPoint, connector.getExecutor());
+ super(endPoint, connector.getExecutor(), false);
this.connector = connector;
this.protocols = protocols;
this.defaultProtocol = defaultProtocol;
@@ -109,9 +109,8 @@ public abstract class NegotiatingServerConnection extends AbstractConnection
ConnectionFactory connectionFactory = connector.getConnectionFactory(protocol);
if (connectionFactory == null)
{
- if (LOG.isDebugEnabled())
- LOG.debug("{} application selected protocol '{}', but no correspondent {} has been configured",
- this, protocol, ConnectionFactory.class.getName());
+ LOG.info("{} application selected protocol '{}', but no correspondent {} has been configured",
+ this, protocol, ConnectionFactory.class.getName());
close();
}
else
@@ -131,7 +130,7 @@ public abstract class NegotiatingServerConnection extends AbstractConnection
{
// Something went bad, we need to close.
if (LOG.isDebugEnabled())
- LOG.debug("{} closing on client close", this);
+ LOG.debug("{} detected close on client side", this);
close();
}
else
diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/ExtendedServerTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/ExtendedServerTest.java
index 37ea80438e..0d48071cf5 100644
--- a/jetty-server/src/test/java/org/eclipse/jetty/server/ExtendedServerTest.java
+++ b/jetty-server/src/test/java/org/eclipse/jetty/server/ExtendedServerTest.java
@@ -21,11 +21,9 @@ package org.eclipse.jetty.server;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
-import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.SocketChannel;
import java.nio.charset.StandardCharsets;
-
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -95,7 +93,7 @@ public class ExtendedServerTest extends HttpServerTestBase
{
public ExtendedHttpConnection(HttpConfiguration config, Connector connector, EndPoint endPoint)
{
- super(config,connector,endPoint);
+ super(config,connector,endPoint,true);
}
@Override
diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/SlowClientWithPipelinedRequestTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/SlowClientWithPipelinedRequestTest.java
index 599c474d7d..41b298b6bc 100644
--- a/jetty-server/src/test/java/org/eclipse/jetty/server/SlowClientWithPipelinedRequestTest.java
+++ b/jetty-server/src/test/java/org/eclipse/jetty/server/SlowClientWithPipelinedRequestTest.java
@@ -18,8 +18,6 @@
package org.eclipse.jetty.server;
-import static org.hamcrest.Matchers.lessThan;
-
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -28,7 +26,6 @@ import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
-
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -40,6 +37,8 @@ import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
+import static org.hamcrest.Matchers.lessThan;
+
public class SlowClientWithPipelinedRequestTest
{
private final AtomicInteger handles = new AtomicInteger();
@@ -54,7 +53,7 @@ public class SlowClientWithPipelinedRequestTest
@Override
public Connection newConnection(Connector connector, EndPoint endPoint)
{
- return configure(new HttpConnection(new HttpConfiguration(),connector,endPoint)
+ return configure(new HttpConnection(new HttpConfiguration(),connector,endPoint,true)
{
@Override
public void onFillable()
diff --git a/jetty-spdy/spdy-http-client-transport/src/test/java/org/eclipse/jetty/spdy/client/http/HttpClientCustomProxyTest.java b/jetty-spdy/spdy-http-client-transport/src/test/java/org/eclipse/jetty/spdy/client/http/HttpClientCustomProxyTest.java
index 7073296fdd..05f532aa7a 100644
--- a/jetty-spdy/spdy-http-client-transport/src/test/java/org/eclipse/jetty/spdy/client/http/HttpClientCustomProxyTest.java
+++ b/jetty-spdy/spdy-http-client-transport/src/test/java/org/eclipse/jetty/spdy/client/http/HttpClientCustomProxyTest.java
@@ -24,7 +24,6 @@ import java.nio.ByteBuffer;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
-
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -169,7 +168,7 @@ public class HttpClientCustomProxyTest
public CAFEBABEConnection(EndPoint endPoint, Executor executor, ClientConnectionFactory connectionFactory, Map<String, Object> context)
{
- super(endPoint, executor);
+ super(endPoint, executor, true);
this.connectionFactory = connectionFactory;
this.context = context;
}
@@ -228,7 +227,7 @@ public class HttpClientCustomProxyTest
public CAFEBABEServerConnection(Connector connector, EndPoint endPoint, org.eclipse.jetty.server.ConnectionFactory connectionFactory)
{
- super(endPoint, connector.getExecutor());
+ super(endPoint, connector.getExecutor(), true);
this.connectionFactory = connectionFactory;
}
diff --git a/jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/proxy/ProxyHTTPSPDYConnection.java b/jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/proxy/ProxyHTTPSPDYConnection.java
index f965135fa8..119c6cc2a7 100644
--- a/jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/proxy/ProxyHTTPSPDYConnection.java
+++ b/jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/proxy/ProxyHTTPSPDYConnection.java
@@ -67,7 +67,7 @@ public class ProxyHTTPSPDYConnection extends HttpConnection implements HttpParse
public ProxyHTTPSPDYConnection(Connector connector, HttpConfiguration config, EndPoint endPoint, short version, ProxyEngineSelector proxyEngineSelector)
{
- super(config, connector, endPoint);
+ super(config, connector, endPoint, true);
this.version = version;
this.proxyEngineSelector = proxyEngineSelector;
this.session = new HTTPSession(version, connector);
diff --git a/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/WebSocketClient.java b/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/WebSocketClient.java
index 4e535bccf0..2ce4ce74f0 100644
--- a/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/WebSocketClient.java
+++ b/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/WebSocketClient.java
@@ -22,9 +22,7 @@ import java.io.IOException;
import java.net.CookieStore;
import java.net.SocketAddress;
import java.net.URI;
-import java.util.ArrayList;
import java.util.HashSet;
-import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.concurrent.Executor;
@@ -45,7 +43,6 @@ import org.eclipse.jetty.util.thread.Scheduler;
import org.eclipse.jetty.util.thread.ShutdownThread;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.WebSocketPolicy;
-import org.eclipse.jetty.websocket.api.extensions.Extension;
import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig;
import org.eclipse.jetty.websocket.api.extensions.ExtensionFactory;
import org.eclipse.jetty.websocket.client.io.ConnectPromise;
@@ -82,6 +79,7 @@ public class WebSocketClient extends ContainerLifeCycle implements SessionListen
private Masker masker;
private SocketAddress bindAddress;
private long connectTimeout = SelectorManager.DEFAULT_CONNECT_TIMEOUT;
+ private boolean dispatchIO = true;
public WebSocketClient()
{
@@ -184,7 +182,7 @@ public class WebSocketClient extends ContainerLifeCycle implements SessionListen
LOG.debug("connect websocket {} to {}",websocket,toUri);
// Grab Connection Manager
- initialiseClient();
+ initializeClient();
ConnectionManager manager = getConnectionManager();
// Setup Driver for user provided websocket
@@ -282,6 +280,11 @@ public class WebSocketClient extends ContainerLifeCycle implements SessionListen
LOG.debug("Stopped {}",this);
}
+ public boolean isDispatchIO()
+ {
+ return dispatchIO;
+ }
+
/**
* Return the number of milliseconds for a timeout of an attempted write operation.
*
@@ -416,29 +419,7 @@ public class WebSocketClient extends ContainerLifeCycle implements SessionListen
return sslContextFactory;
}
- public List<Extension> initExtensions(List<ExtensionConfig> requested)
- {
- List<Extension> extensions = new ArrayList<Extension>();
-
- for (ExtensionConfig cfg : requested)
- {
- Extension extension = extensionRegistry.newInstance(cfg);
-
- if (extension == null)
- {
- continue;
- }
-
- if (LOG.isDebugEnabled())
- LOG.debug("added {}",extension);
- extensions.add(extension);
- }
- if (LOG.isDebugEnabled())
- LOG.debug("extensions={}",extensions);
- return extensions;
- }
-
- private synchronized void initialiseClient() throws IOException
+ private synchronized void initializeClient() throws IOException
{
if (!ShutdownThread.isRegistered(this))
{
@@ -496,8 +477,17 @@ public class WebSocketClient extends ContainerLifeCycle implements SessionListen
this.policy.setAsyncWriteTimeout(ms);
}
+ /**
+ * @deprecated use {@link #setBindAddress(SocketAddress)} instead
+ */
+ @Deprecated
public void setBindAdddress(SocketAddress bindAddress)
{
+ setBindAddress(bindAddress);
+ }
+
+ public void setBindAddress(SocketAddress bindAddress)
+ {
this.bindAddress = bindAddress;
}
@@ -531,6 +521,11 @@ public class WebSocketClient extends ContainerLifeCycle implements SessionListen
this.daemon = daemon;
}
+ public void setDispatchIO(boolean dispatchIO)
+ {
+ this.dispatchIO = dispatchIO;
+ }
+
public void setEventDriverFactory(EventDriverFactory factory)
{
this.eventDriverFactory = factory;
diff --git a/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/io/UpgradeConnection.java b/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/io/UpgradeConnection.java
index 4fa47276eb..10e07aec68 100644
--- a/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/io/UpgradeConnection.java
+++ b/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/io/UpgradeConnection.java
@@ -103,7 +103,7 @@ public class UpgradeConnection extends AbstractConnection
public UpgradeConnection(EndPoint endp, Executor executor, ConnectPromise connectPromise)
{
- super(endp,executor);
+ super(endp,executor,connectPromise.getClient().isDispatchIO());
this.connectPromise = connectPromise;
this.bufferPool = connectPromise.getClient().getBufferPool();
this.request = connectPromise.getRequest();
diff --git a/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/io/WebSocketClientConnection.java b/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/io/WebSocketClientConnection.java
index a362248a7f..b5579aec57 100644
--- a/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/io/WebSocketClientConnection.java
+++ b/jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/io/WebSocketClientConnection.java
@@ -48,7 +48,7 @@ public class WebSocketClientConnection extends AbstractWebSocketConnection
public WebSocketClientConnection(EndPoint endp, Executor executor, ConnectPromise connectPromise, WebSocketPolicy policy)
{
- super(endp,executor,connectPromise.getClient().getScheduler(),policy,connectPromise.getClient().getBufferPool());
+ super(endp,executor,connectPromise.getClient().getScheduler(),policy,connectPromise.getClient().getBufferPool(),connectPromise.getClient().isDispatchIO());
this.connectPromise = connectPromise;
this.masker = connectPromise.getMasker();
assert (this.masker != null);
diff --git a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/io/AbstractWebSocketConnection.java b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/io/AbstractWebSocketConnection.java
index e696fd6209..78f6417bd2 100644
--- a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/io/AbstractWebSocketConnection.java
+++ b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/io/AbstractWebSocketConnection.java
@@ -219,9 +219,9 @@ public abstract class AbstractWebSocketConnection extends AbstractConnection imp
private IOState ioState;
private Stats stats = new Stats();
- public AbstractWebSocketConnection(EndPoint endp, Executor executor, Scheduler scheduler, WebSocketPolicy policy, ByteBufferPool bufferPool)
+ public AbstractWebSocketConnection(EndPoint endp, Executor executor, Scheduler scheduler, WebSocketPolicy policy, ByteBufferPool bufferPool, boolean dispatchIO)
{
- super(endp,executor,EXECUTE_ONFILLABLE); // TODO review if this is best. Specifically with MUX
+ super(endp,executor,dispatchIO);
this.policy = policy;
this.bufferPool = bufferPool;
this.generator = new Generator(policy,bufferPool);
diff --git a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerConnection.java b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerConnection.java
index 31d011878f..b67a167312 100644
--- a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerConnection.java
+++ b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerConnection.java
@@ -33,9 +33,9 @@ public class WebSocketServerConnection extends AbstractWebSocketConnection
{
private final AtomicBoolean opened = new AtomicBoolean(false);
- public WebSocketServerConnection(EndPoint endp, Executor executor, Scheduler scheduler, WebSocketPolicy policy, ByteBufferPool bufferPool)
+ public WebSocketServerConnection(EndPoint endp, Executor executor, Scheduler scheduler, WebSocketPolicy policy, ByteBufferPool bufferPool, boolean dispatchIO)
{
- super(endp,executor,scheduler,policy,bufferPool);
+ super(endp,executor,scheduler,policy,bufferPool,dispatchIO);
if (policy.getIdleTimeout() > 0)
{
endp.setIdleTimeout(policy.getIdleTimeout());
diff --git a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java
index 5ac51cb36a..c8536ecc85 100644
--- a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java
+++ b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/WebSocketServerFactory.java
@@ -30,7 +30,6 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.Executor;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -514,9 +513,9 @@ public class WebSocketServerFactory extends ContainerLifeCycle implements WebSoc
EndPoint endp = http.getEndPoint();
Executor executor = http.getConnector().getExecutor();
ByteBufferPool bufferPool = http.getConnector().getByteBufferPool();
-
+
// Setup websocket connection
- WebSocketServerConnection wsConnection = new WebSocketServerConnection(endp, executor, scheduler, driver.getPolicy(), bufferPool);
+ WebSocketServerConnection wsConnection = new WebSocketServerConnection(endp, executor, scheduler, driver.getPolicy(), bufferPool, http.isDispatchIO());
extensionStack.setPolicy(driver.getPolicy());
extensionStack.configure(wsConnection.getParser());

Back to the top