From 2e2306702a65e55d6210a952e742632753fc755f Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 14 Mar 2013 11:46:54 +0000
Subject: [PATCH] LDAPConnectionHandler.java: Extracted methods registerChannels() and serveIncomingConnections(). In run(), removed useless try/catch blocks around cleanUpSelector() (because it catches all exception internally).
---
opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java | 164 +++++++++++++++++++++++++++++-------------------------
1 files changed, 87 insertions(+), 77 deletions(-)
diff --git a/opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java b/opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java
index d4b34ec..bb65828 100644
--- a/opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java
+++ b/opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java
@@ -1032,33 +1032,7 @@
{
cleanUpSelector();
- int numRegistered = 0;
- for (InetAddress a : listenAddresses)
- {
- try
- {
- ServerSocketChannel channel = ServerSocketChannel.open();
- channel.socket().setReuseAddress(allowReuseAddress);
- channel.socket()
- .bind(new InetSocketAddress(a, listenPort), backlog);
- channel.configureBlocking(false);
- channel.register(selector, SelectionKey.OP_ACCEPT);
- numRegistered++;
-
- logError(NOTE_LDAP_CONNHANDLER_STARTED_LISTENING.get(handlerName));
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- logError(ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED.get(
- String.valueOf(currentConfig.dn()), a.getHostAddress(),
- listenPort, stackTraceToSingleLineString(e)));
- }
- }
+ int numRegistered = registerChannels();
// At this point, the connection Handler either started
// correctly or failed to start but the start process
@@ -1085,44 +1059,11 @@
// Enter a loop, waiting for new connections to arrive and
// then accepting them as they come in.
boolean lastIterationFailed = false;
- int selectorState;
while (enabled && (!shutdownRequested))
{
try
{
- selectorState = selector.select();
-
- // We can't rely on return value of select to determine if any keys
- // are ready.
- // see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4850373
- for (Iterator<SelectionKey> iterator =
- selector.selectedKeys().iterator(); iterator.hasNext();)
- {
- SelectionKey key = iterator.next();
- iterator.remove();
- if (key.isAcceptable())
- {
- // Accept the new client connection.
- ServerSocketChannel serverChannel = (ServerSocketChannel) key
- .channel();
- SocketChannel clientChannel = serverChannel.accept();
- if (clientChannel != null)
- {
- acceptConnection(clientChannel);
- }
- }
-
- if (selectorState == 0 && enabled && (!shutdownRequested)
- && debugEnabled())
- {
- // Selected keys was non empty but select() returned 0.
- // Log warning and hope it blocks on the next select() call.
- TRACER.debugWarning("Selector.select() returned 0. "
- + "Selected Keys: %d, Interest Ops: %d, Ready Ops: %d ",
- selector.selectedKeys().size(), key.interestOps(),
- key.readyOps());
- }
- }
+ serveIncomingConnections();
lastIterationFailed = false;
}
@@ -1151,15 +1092,8 @@
ALERT_TYPE_LDAP_CONNECTION_HANDLER_CONSECUTIVE_FAILURES,
message);
+ cleanUpSelector();
enabled = false;
-
- try
- {
- cleanUpSelector();
- }
- catch (Exception ignored)
- {
- }
}
else
{
@@ -1196,20 +1130,96 @@
DirectoryServer.sendAlertNotification(this,
ALERT_TYPE_LDAP_CONNECTION_HANDLER_UNCAUGHT_ERROR, message);
- try
- {
- cleanUpSelector();
- }
- catch (Exception ignored)
- {
- }
-
+ cleanUpSelector();
enabled = false;
}
}
}
+ /**
+ * Serves the incoming connections.
+ *
+ * @throws IOException
+ * @throws DirectoryException
+ */
+ private void serveIncomingConnections() throws IOException, DirectoryException
+ {
+ int selectorState = selector.select();
+
+ // We can't rely on return value of select to determine if any keys
+ // are ready.
+ // see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4850373
+ for (Iterator<SelectionKey> iterator =
+ selector.selectedKeys().iterator(); iterator.hasNext();)
+ {
+ SelectionKey key = iterator.next();
+ iterator.remove();
+ if (key.isAcceptable())
+ {
+ // Accept the new client connection.
+ ServerSocketChannel serverChannel = (ServerSocketChannel) key
+ .channel();
+ SocketChannel clientChannel = serverChannel.accept();
+ if (clientChannel != null)
+ {
+ acceptConnection(clientChannel);
+ }
+ }
+
+ if (selectorState == 0 && enabled && (!shutdownRequested)
+ && debugEnabled())
+ {
+ // Selected keys was non empty but select() returned 0.
+ // Log warning and hope it blocks on the next select() call.
+ TRACER.debugWarning("Selector.select() returned 0. "
+ + "Selected Keys: %d, Interest Ops: %d, Ready Ops: %d ",
+ selector.selectedKeys().size(), key.interestOps(),
+ key.readyOps());
+ }
+ }
+ }
+
+
+ /**
+ * Open channels for each listen address and register them against this
+ * ConnectionHandler's {@link Selector}.
+ *
+ * @return the number of successfully registered channel
+ */
+ private int registerChannels()
+ {
+ int numRegistered = 0;
+ for (InetAddress a : listenAddresses)
+ {
+ try
+ {
+ ServerSocketChannel channel = ServerSocketChannel.open();
+ channel.socket().setReuseAddress(allowReuseAddress);
+ channel.socket()
+ .bind(new InetSocketAddress(a, listenPort), backlog);
+ channel.configureBlocking(false);
+ channel.register(selector, SelectionKey.OP_ACCEPT);
+ numRegistered++;
+
+ logError(NOTE_LDAP_CONNHANDLER_STARTED_LISTENING.get(handlerName));
+ }
+ catch (Exception e)
+ {
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+
+ logError(ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED.get(
+ String.valueOf(currentConfig.dn()), a.getHostAddress(),
+ listenPort, stackTraceToSingleLineString(e)));
+ }
+ }
+ return numRegistered;
+ }
+
+
private void acceptConnection(SocketChannel clientChannel)
throws DirectoryException
--
Gitblit v1.10.0