Merge branch 'jetty-9' of ssh://git.eclipse.org/gitroot/jetty/org.eclipse.jetty.project into jetty-9

This commit is contained in:
Joakim Erdfelt 2012-07-18 11:51:38 -07:00
commit 964fa9325a
14 changed files with 169 additions and 235 deletions

View File

@ -7,7 +7,7 @@ public abstract class AbstractEndPoint implements EndPoint
private final long _created=System.currentTimeMillis(); private final long _created=System.currentTimeMillis();
private final InetSocketAddress _local; private final InetSocketAddress _local;
private final InetSocketAddress _remote; private final InetSocketAddress _remote;
private volatile int _maxIdleTime; private volatile long _maxIdleTime;
private volatile long _idleTimestamp=System.currentTimeMillis(); private volatile long _idleTimestamp=System.currentTimeMillis();
@ -25,13 +25,13 @@ public abstract class AbstractEndPoint implements EndPoint
@Override @Override
public int getMaxIdleTime() public long getMaxIdleTime()
{ {
return _maxIdleTime; return _maxIdleTime;
} }
@Override @Override
public void setMaxIdleTime(int timeMs) public void setMaxIdleTime(long timeMs)
{ {
_maxIdleTime=timeMs; _maxIdleTime=timeMs;
} }
@ -62,11 +62,6 @@ public abstract class AbstractEndPoint implements EndPoint
_idleTimestamp=System.currentTimeMillis(); _idleTimestamp=System.currentTimeMillis();
} }
/* ------------------------------------------------------------ */
public void onClose()
{
}
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
@Override @Override
public String toString() public String toString()

View File

@ -146,11 +146,15 @@ public class AsyncByteArrayEndPoint extends ByteArrayEndPoint implements AsyncEn
} }
} }
@Override
public void onOpen()
{
}
@Override @Override
public void onClose() public void onClose()
{ {
_checkTimeout.cancel(); _checkTimeout.cancel();
super.onClose();
} }
private static class TimeoutTask extends TimerTask private static class TimeoutTask extends TimerTask

View File

@ -103,6 +103,7 @@ public interface AsyncEndPoint extends EndPoint
void setAsyncConnection(AsyncConnection connection); void setAsyncConnection(AsyncConnection connection);
void onClose(); void onOpen();
void onClose();
} }

View File

@ -116,13 +116,13 @@ public interface EndPoint
* extraordinary handling takes place. * extraordinary handling takes place.
* @return the max idle time in ms or if ms <= 0 implies an infinite timeout * @return the max idle time in ms or if ms <= 0 implies an infinite timeout
*/ */
int getMaxIdleTime(); long getMaxIdleTime();
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/** Set the max idle time. /** Set the max idle time.
* @param timeMs the max idle time in MS. Timeout <= 0 implies an infinite timeout * @param timeMs the max idle time in MS. Timeout <= 0 implies an infinite timeout
*/ */
void setMaxIdleTime(int timeMs); void setMaxIdleTime(long timeMs);

View File

@ -73,7 +73,7 @@ public class SelectChannelEndPoint extends ChannelEndPoint implements Runnable,
}; };
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
public SelectChannelEndPoint(SocketChannel channel, ManagedSelector selectSet, SelectionKey key, int maxIdleTime) throws IOException public SelectChannelEndPoint(SocketChannel channel, ManagedSelector selectSet, SelectionKey key, long maxIdleTime) throws IOException
{ {
super(channel); super(channel);
_manager = selectSet.getManager(); _manager = selectSet.getManager();
@ -327,6 +327,11 @@ public class SelectChannelEndPoint extends ChannelEndPoint implements Runnable,
updateKey(); updateKey();
} }
@Override
public void onOpen()
{
}
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
@Override @Override
public void onClose() public void onClose()

View File

@ -51,6 +51,7 @@ public abstract class SelectorManager extends AbstractLifeCycle implements Dumpa
private final ManagedSelector[] _selectSets; private final ManagedSelector[] _selectSets;
private long _selectSetIndex; private long _selectSetIndex;
private volatile long _maxIdleTime;
protected SelectorManager() protected SelectorManager()
{ {
@ -62,11 +63,18 @@ public abstract class SelectorManager extends AbstractLifeCycle implements Dumpa
this._selectSets = new ManagedSelector[selectors]; this._selectSets = new ManagedSelector[selectors];
} }
/** /**
* @return the max idle time * @return the max idle time
*/ */
protected abstract int getMaxIdleTime(); protected long getMaxIdleTime()
{
return _maxIdleTime;
}
public void setMaxIdleTime(long maxIdleTime)
{
_maxIdleTime = maxIdleTime;
}
protected abstract void execute(Runnable task); protected abstract void execute(Runnable task);
@ -139,18 +147,27 @@ public abstract class SelectorManager extends AbstractLifeCycle implements Dumpa
/** /**
* @param endpoint the endPoint being opened * @param endpoint the endPoint being opened
*/ */
protected abstract void endPointOpened(AsyncEndPoint endpoint); protected void endPointOpened(AsyncEndPoint endpoint)
{
endpoint.getAsyncConnection().onOpen();
}
/** /**
* @param endpoint the endPoint being closed * @param endpoint the endPoint being closed
*/ */
protected abstract void endPointClosed(AsyncEndPoint endpoint); protected void endPointClosed(AsyncEndPoint endpoint)
{
endpoint.getAsyncConnection().onClose();
endpoint.onClose();
}
/** /**
* @param endpoint the endPoint being upgraded * @param endpoint the endPoint being upgraded
* @param oldConnection the previous connection * @param oldConnection the previous connection
*/ */
protected abstract void endPointUpgraded(AsyncEndPoint endpoint,AsyncConnection oldConnection); protected void endPointUpgraded(AsyncEndPoint endpoint, AsyncConnection oldConnection)
{
}
/** /**
* @param channel the socket channel * @param channel the socket channel

View File

@ -1,11 +1,5 @@
package org.eclipse.jetty.io; 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.BufferedInputStream;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.io.IOException; import java.io.IOException;
@ -30,42 +24,25 @@ import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; 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 public class SelectChannelEndPointTest
{ {
protected volatile AsyncEndPoint _lastEndp; protected volatile AsyncEndPoint _lastEndp;
protected ServerSocketChannel _connector; protected ServerSocketChannel _connector;
protected QueuedThreadPool _threadPool = new QueuedThreadPool(); protected QueuedThreadPool _threadPool = new QueuedThreadPool();
private int maxIdleTimeout = 600000; // TODO: use smaller value
protected SelectorManager _manager = new SelectorManager() protected SelectorManager _manager = new SelectorManager()
{ {
@Override
protected int getMaxIdleTime()
{
return maxIdleTimeout;
}
@Override @Override
protected void execute(Runnable task) protected void execute(Runnable task)
{ {
_threadPool.execute(task); _threadPool.execute(task);
} }
@Override
protected void endPointClosed(AsyncEndPoint endpoint)
{
}
@Override
protected void endPointOpened(AsyncEndPoint endpoint)
{
endpoint.getAsyncConnection().onOpen();
}
@Override
protected void endPointUpgraded(AsyncEndPoint endpoint, AsyncConnection oldConnection)
{
}
@Override @Override
public AsyncConnection newConnection(SocketChannel channel, AsyncEndPoint endpoint, Object attachment) public AsyncConnection newConnection(SocketChannel channel, AsyncEndPoint endpoint, Object attachment)
{ {
@ -81,6 +58,9 @@ public class SelectChannelEndPointTest
return endp; return endp;
} }
}; };
{
_manager.setMaxIdleTime(600000); // TODO: use smaller value
}
// Must be volatile or the test may fail spuriously // Must be volatile or the test may fail spuriously
protected volatile int _blockAt=0; protected volatile int _blockAt=0;

View File

@ -7,7 +7,6 @@ import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey; import java.nio.channels.SelectionKey;
import java.nio.channels.ServerSocketChannel; import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel; import java.nio.channels.SocketChannel;
import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocket;
@ -32,38 +31,14 @@ public class SslConnectionTest
protected volatile AsyncEndPoint _lastEndp; protected volatile AsyncEndPoint _lastEndp;
protected ServerSocketChannel _connector; protected ServerSocketChannel _connector;
protected QueuedThreadPool _threadPool = new QueuedThreadPool(); protected QueuedThreadPool _threadPool = new QueuedThreadPool();
private int maxIdleTimeout = 600000; // TODO: use smaller value
protected SelectorManager _manager = new SelectorManager() protected SelectorManager _manager = new SelectorManager()
{ {
@Override
protected int getMaxIdleTime()
{
return maxIdleTimeout;
}
@Override @Override
protected void execute(Runnable task) protected void execute(Runnable task)
{ {
_threadPool.execute(task); _threadPool.execute(task);
} }
@Override
protected void endPointClosed(AsyncEndPoint endpoint)
{
}
@Override
protected void endPointOpened(AsyncEndPoint endpoint)
{
// System.err.println("endPointOpened");
endpoint.getAsyncConnection().onOpen();
}
@Override
protected void endPointUpgraded(AsyncEndPoint endpoint, AsyncConnection oldConnection)
{
}
@Override @Override
public AsyncConnection newConnection(SocketChannel channel, AsyncEndPoint endpoint, Object attachment) public AsyncConnection newConnection(SocketChannel channel, AsyncEndPoint endpoint, Object attachment)
{ {
@ -89,6 +64,9 @@ public class SslConnectionTest
return endp; return endp;
} }
}; };
{
_manager.setMaxIdleTime(600000); // TODO: use smaller value
}
// Must be volatile or the test may fail spuriously // Must be volatile or the test may fail spuriously
protected volatile int _blockAt=0; protected volatile int _blockAt=0;

View File

@ -191,7 +191,7 @@ public abstract class AbstractConnector extends AggregateLifeCycle implements Co
* @return Returns the maxIdleTime. * @return Returns the maxIdleTime.
*/ */
@Override @Override
public int getMaxIdleTime() public long getMaxIdleTime()
{ {
return _maxIdleTime; return _maxIdleTime;
} }
@ -437,8 +437,6 @@ public abstract class AbstractConnector extends AggregateLifeCycle implements Co
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
protected void connectionOpened(AsyncConnection connection) protected void connectionOpened(AsyncConnection connection)
{ {
// TODO: should we dispatch the call to onOpen() to another thread ?
connection.onOpen();
_stats.connectionOpened(); _stats.connectionOpened();
} }
@ -453,9 +451,6 @@ public abstract class AbstractConnector extends AggregateLifeCycle implements Co
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
protected void connectionClosed(AsyncConnection connection) protected void connectionClosed(AsyncConnection connection)
{ {
// TODO: should we dispatch the call to onClose() to another thread ?
connection.onClose();
long duration = System.currentTimeMillis() - connection.getEndPoint().getCreatedTimeStamp(); long duration = System.currentTimeMillis() - connection.getEndPoint().getCreatedTimeStamp();
// TODO: remove casts to HttpConnection // TODO: remove casts to HttpConnection
int requests = (connection instanceof HttpConnection)?((HttpConnection)connection).getHttpChannel().getRequests():0; int requests = (connection instanceof HttpConnection)?((HttpConnection)connection).getHttpChannel().getRequests():0;

View File

@ -54,7 +54,7 @@ public interface Connector extends LifeCycle
/** /**
* @return Max Idle time for connections in milliseconds * @return Max Idle time for connections in milliseconds
*/ */
int getMaxIdleTime(); long getMaxIdleTime();
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/** /**

View File

@ -204,7 +204,6 @@ public class LocalHttpConnector extends HttpConnector
public void onClose() public void onClose()
{ {
super.onClose(); super.onClose();
connectionClosed(getAsyncConnection());
_closed.countDown(); _closed.countDown();
} }

View File

@ -210,7 +210,6 @@ public class SelectChannelConnector extends HttpConnector implements NetConnecto
/* ------------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------------- */
protected void endPointClosed(AsyncEndPoint endpoint) protected void endPointClosed(AsyncEndPoint endpoint)
{ {
endpoint.onClose();
connectionClosed(endpoint.getAsyncConnection()); connectionClosed(endpoint.getAsyncConnection());
} }
@ -238,7 +237,7 @@ public class SelectChannelConnector extends HttpConnector implements NetConnecto
} }
@Override @Override
protected int getMaxIdleTime() protected long getMaxIdleTime()
{ {
return SelectChannelConnector.this.getMaxIdleTime(); return SelectChannelConnector.this.getMaxIdleTime();
} }
@ -246,6 +245,7 @@ public class SelectChannelConnector extends HttpConnector implements NetConnecto
@Override @Override
protected void endPointClosed(AsyncEndPoint endpoint) protected void endPointClosed(AsyncEndPoint endpoint)
{ {
super.endPointClosed(endpoint);
SelectChannelConnector.this.endPointClosed(endpoint); SelectChannelConnector.this.endPointClosed(endpoint);
} }
@ -253,6 +253,7 @@ public class SelectChannelConnector extends HttpConnector implements NetConnecto
protected void endPointOpened(AsyncEndPoint endpoint) protected void endPointOpened(AsyncEndPoint endpoint)
{ {
// TODO handle max connections and low resources // TODO handle max connections and low resources
super.endPointOpened(endpoint);
connectionOpened(endpoint.getAsyncConnection()); connectionOpened(endpoint.getAsyncConnection());
} }

View File

@ -287,22 +287,6 @@ public class SPDYClient
return result; return result;
} }
@Override
protected void endPointOpened(AsyncEndPoint endpoint)
{
}
@Override
protected void endPointUpgraded(AsyncEndPoint endpoint, AsyncConnection oldConnection)
{
}
@Override
protected void endPointClosed(AsyncEndPoint endpoint)
{
endpoint.getAsyncConnection().onClose();
}
@Override @Override
public AsyncConnection newConnection(final SocketChannel channel, AsyncEndPoint endPoint, Object attachment) public AsyncConnection newConnection(final SocketChannel channel, AsyncEndPoint endPoint, Object attachment)
{ {

View File

@ -21,7 +21,6 @@ import java.nio.channels.SocketChannel;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLException; import javax.net.ssl.SSLException;
@ -51,36 +50,12 @@ public class WebSocketClientSelectorManager extends SelectorManager
this.executor = executor; this.executor = executor;
} }
@Override
protected void endPointClosed(AsyncEndPoint endpoint)
{
endpoint.getAsyncConnection().onClose();
}
@Override
protected void endPointOpened(AsyncEndPoint endpoint)
{
}
@Override
protected void endPointUpgraded(AsyncEndPoint endpoint, AsyncConnection oldConnection)
{
// TODO Investigate role of this with websocket
}
@Override @Override
protected void execute(Runnable task) protected void execute(Runnable task)
{ {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }
@Override
protected int getMaxIdleTime()
{
return 0;
}
public SslContextFactory getSslContextFactory() public SslContextFactory getSslContextFactory()
{ {
return sslContextFactory; return sslContextFactory;