Rearranged inner classes at the end of the file.
This commit is contained in:
parent
5b31e17aa5
commit
930f5e0b09
|
@ -79,6 +79,11 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable
|
||||||
setStopTimeout(5000);
|
setStopTimeout(5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Selector getSelector()
|
||||||
|
{
|
||||||
|
return _selector;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doStart() throws Exception
|
protected void doStart() throws Exception
|
||||||
{
|
{
|
||||||
|
@ -140,6 +145,116 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable
|
||||||
selector.wakeup();
|
selector.wakeup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Runnable processConnect(SelectionKey key, final Connect connect)
|
||||||
|
{
|
||||||
|
SelectableChannel channel = key.channel();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
key.attach(connect.attachment);
|
||||||
|
boolean connected = _selectorManager.doFinishConnect(channel);
|
||||||
|
if (LOG.isDebugEnabled())
|
||||||
|
LOG.debug("Connected {} {}", connected, channel);
|
||||||
|
if (connected)
|
||||||
|
{
|
||||||
|
if (connect.timeout.cancel())
|
||||||
|
{
|
||||||
|
key.interestOps(0);
|
||||||
|
return new CreateEndPoint(channel, key)
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected void failed(Throwable failure)
|
||||||
|
{
|
||||||
|
super.failed(failure);
|
||||||
|
connect.failed(failure);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new SocketTimeoutException("Concurrent Connect Timeout");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new ConnectException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Throwable x)
|
||||||
|
{
|
||||||
|
connect.failed(x);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void closeNoExceptions(Closeable closeable)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (closeable != null)
|
||||||
|
closeable.close();
|
||||||
|
}
|
||||||
|
catch (Throwable x)
|
||||||
|
{
|
||||||
|
LOG.ignore(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private EndPoint createEndPoint(SelectableChannel channel, SelectionKey selectionKey) throws IOException
|
||||||
|
{
|
||||||
|
EndPoint endPoint = _selectorManager.newEndPoint(channel, this, selectionKey);
|
||||||
|
endPoint.onOpen();
|
||||||
|
_selectorManager.endPointOpened(endPoint);
|
||||||
|
Connection connection = _selectorManager.newConnection(channel, endPoint, selectionKey.attachment());
|
||||||
|
endPoint.setConnection(connection);
|
||||||
|
selectionKey.attach(endPoint);
|
||||||
|
_selectorManager.connectionOpened(connection);
|
||||||
|
if (LOG.isDebugEnabled())
|
||||||
|
LOG.debug("Created {}", endPoint);
|
||||||
|
return endPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroyEndPoint(final EndPoint endPoint)
|
||||||
|
{
|
||||||
|
submit(new DestroyEndPoint(endPoint));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String dump()
|
||||||
|
{
|
||||||
|
super.dump();
|
||||||
|
return ContainerLifeCycle.dump(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dump(Appendable out, String indent) throws IOException
|
||||||
|
{
|
||||||
|
Selector selector = _selector;
|
||||||
|
if (selector == null || !selector.isOpen())
|
||||||
|
dumpBeans(out, indent);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
final ArrayList<Object> dump = new ArrayList<>(selector.keys().size() * 2);
|
||||||
|
DumpKeys dumpKeys = new DumpKeys(dump);
|
||||||
|
submit(dumpKeys);
|
||||||
|
dumpKeys.await(5, TimeUnit.SECONDS);
|
||||||
|
if (dump.isEmpty())
|
||||||
|
dumpBeans(out, indent);
|
||||||
|
else
|
||||||
|
dumpBeans(out, indent, dump);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
Selector selector = _selector;
|
||||||
|
return String.format("%s id=%s keys=%d selected=%d",
|
||||||
|
super.toString(),
|
||||||
|
_id,
|
||||||
|
selector != null && selector.isOpen() ? selector.keys().size() : -1,
|
||||||
|
selector != null && selector.isOpen() ? selector.selectedKeys().size() : -1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link Selectable} is an {@link EndPoint} that wish to be
|
* A {@link Selectable} is an {@link EndPoint} that wish to be
|
||||||
* notified of non-blocking events by the {@link ManagedSelector}.
|
* notified of non-blocking events by the {@link ManagedSelector}.
|
||||||
|
@ -161,7 +276,6 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable
|
||||||
void updateKey();
|
void updateKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private class SelectorProducer implements ExecutionStrategy.Producer
|
private class SelectorProducer implements ExecutionStrategy.Producer
|
||||||
{
|
{
|
||||||
private Set<SelectionKey> _keys = Collections.emptySet();
|
private Set<SelectionKey> _keys = Collections.emptySet();
|
||||||
|
@ -331,7 +445,7 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable
|
||||||
return String.format("%s@%x", getClass().getSimpleName(), hashCode());
|
return String.format("%s@%x", getClass().getSimpleName(), hashCode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private abstract static class NonBlockingAction implements Runnable, Invocable
|
private abstract static class NonBlockingAction implements Runnable, Invocable
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -341,116 +455,6 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Runnable processConnect(SelectionKey key, final Connect connect)
|
|
||||||
{
|
|
||||||
SelectableChannel channel = key.channel();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
key.attach(connect.attachment);
|
|
||||||
boolean connected = _selectorManager.doFinishConnect(channel);
|
|
||||||
if (LOG.isDebugEnabled())
|
|
||||||
LOG.debug("Connected {} {}", connected, channel);
|
|
||||||
if (connected)
|
|
||||||
{
|
|
||||||
if (connect.timeout.cancel())
|
|
||||||
{
|
|
||||||
key.interestOps(0);
|
|
||||||
return new CreateEndPoint(channel, key)
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void failed(Throwable failure)
|
|
||||||
{
|
|
||||||
super.failed(failure);
|
|
||||||
connect.failed(failure);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new SocketTimeoutException("Concurrent Connect Timeout");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new ConnectException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Throwable x)
|
|
||||||
{
|
|
||||||
connect.failed(x);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void closeNoExceptions(Closeable closeable)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (closeable != null)
|
|
||||||
closeable.close();
|
|
||||||
}
|
|
||||||
catch (Throwable x)
|
|
||||||
{
|
|
||||||
LOG.ignore(x);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private EndPoint createEndPoint(SelectableChannel channel, SelectionKey selectionKey) throws IOException
|
|
||||||
{
|
|
||||||
EndPoint endPoint = _selectorManager.newEndPoint(channel, this, selectionKey);
|
|
||||||
endPoint.onOpen();
|
|
||||||
_selectorManager.endPointOpened(endPoint);
|
|
||||||
Connection connection = _selectorManager.newConnection(channel, endPoint, selectionKey.attachment());
|
|
||||||
endPoint.setConnection(connection);
|
|
||||||
selectionKey.attach(endPoint);
|
|
||||||
_selectorManager.connectionOpened(connection);
|
|
||||||
if (LOG.isDebugEnabled())
|
|
||||||
LOG.debug("Created {}", endPoint);
|
|
||||||
return endPoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void destroyEndPoint(final EndPoint endPoint)
|
|
||||||
{
|
|
||||||
submit(new DestroyEndPoint(endPoint));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String dump()
|
|
||||||
{
|
|
||||||
super.dump();
|
|
||||||
return ContainerLifeCycle.dump(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void dump(Appendable out, String indent) throws IOException
|
|
||||||
{
|
|
||||||
Selector selector = _selector;
|
|
||||||
if (selector == null || !selector.isOpen())
|
|
||||||
dumpBeans(out, indent);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
final ArrayList<Object> dump = new ArrayList<>(selector.keys().size() * 2);
|
|
||||||
DumpKeys dumpKeys = new DumpKeys(dump);
|
|
||||||
submit(dumpKeys);
|
|
||||||
dumpKeys.await(5, TimeUnit.SECONDS);
|
|
||||||
if (dump.isEmpty())
|
|
||||||
dumpBeans(out, indent);
|
|
||||||
else
|
|
||||||
dumpBeans(out, indent, dump);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
Selector selector = _selector;
|
|
||||||
return String.format("%s id=%s keys=%d selected=%d",
|
|
||||||
super.toString(),
|
|
||||||
_id,
|
|
||||||
selector != null && selector.isOpen() ? selector.keys().size() : -1,
|
|
||||||
selector != null && selector.isOpen() ? selector.selectedKeys().size() : -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
private class DumpKeys implements Runnable
|
private class DumpKeys implements Runnable
|
||||||
{
|
{
|
||||||
private final CountDownLatch latch = new CountDownLatch(1);
|
private final CountDownLatch latch = new CountDownLatch(1);
|
||||||
|
@ -791,11 +795,6 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Selector getSelector()
|
|
||||||
{
|
|
||||||
return _selector;
|
|
||||||
}
|
|
||||||
|
|
||||||
private class DestroyEndPoint extends NonBlockingAction
|
private class DestroyEndPoint extends NonBlockingAction
|
||||||
{
|
{
|
||||||
private final EndPoint endPoint;
|
private final EndPoint endPoint;
|
||||||
|
|
Loading…
Reference in New Issue