From 4bf9bb2f2021c9eb3f36daceef6886850245c77c Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 24 May 2011 16:34:03 +0000
Subject: [PATCH] Fix OPENDJ-40: Upgrade to latest Grizzly

---
 opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java      |    3 
 opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferWriterTestCase.java       |   13 -
 opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPServer.java                     |   28 ---
 opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransport.java         |  191 +++++++++++++++++++++++++++
 opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java                  |    9 
 opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferReaderTestCase.java       |    9 
 opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java           |    5 
 opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPListenerTestCase.java           |    1 
 opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPListenerImpl.java               |    3 
 opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java                |   16 ++
 /dev/null                                                                                                      |   93 -------------
 opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java             |    5 
 opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java      |    3 
 opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java              |    5 
 opendj-sdk/opendj3/opendj-ldap-sdk/pom.xml                                                                     |    2 
 opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransportTestCase.java |   18 +-
 16 files changed, 246 insertions(+), 158 deletions(-)

diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/pom.xml b/opendj-sdk/opendj3/opendj-ldap-sdk/pom.xml
index 826132f..b0f37a2 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/pom.xml
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/pom.xml
@@ -50,7 +50,7 @@
     <dependency>
       <groupId>org.glassfish.grizzly</groupId>
       <artifactId>grizzly-framework</artifactId>
-      <version>2.0.0-RC3</version>
+      <version>2.1.1</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransport.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransport.java
new file mode 100644
index 0000000..fc4c997
--- /dev/null
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransport.java
@@ -0,0 +1,191 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opendj3/legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opendj3/legal-notices/CDDLv1_0.txt.  If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
+ */
+
+package com.forgerock.opendj.ldap;
+
+
+
+import java.io.IOException;
+
+import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
+import org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder;
+import org.glassfish.grizzly.strategies.SameThreadIOStrategy;
+import org.glassfish.grizzly.strategies.WorkerThreadIOStrategy;
+
+
+
+/**
+ * The default {@link TCPNIOTransport} which all {@code LDAPConnectionFactory}s
+ * and {@code LDAPListener}s will use unless otherwise specified in their
+ * options.
+ */
+final class DefaultTCPNIOTransport
+{
+  private static TCPNIOTransport defaultTransport = null;
+
+
+
+  /**
+   * Returns the default {@link TCPNIOTransport} which all
+   * {@code LDAPConnectionFactory}s and {@code LDAPListener}s will use unless
+   * otherwise specified in their options.
+   *
+   * @return The default {@link TCPNIOTransport}.
+   */
+  static synchronized TCPNIOTransport getInstance()
+  {
+    if (defaultTransport == null)
+    {
+      final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder
+          .newInstance();
+
+      // Determine which threading strategy to use, and total number of threads.
+      final String useWorkerThreadsStr = System
+          .getProperty("org.forgerock.opendj.transport.useWorkerThreads");
+      final boolean useWorkerThreadStrategy;
+      if (useWorkerThreadsStr != null)
+      {
+        useWorkerThreadStrategy = Boolean
+            .parseBoolean(useWorkerThreadsStr);
+      }
+      else
+      {
+        // The most best performing strategy to use is the SameThreadIOStrategy,
+        // however it can only be used in cases where result listeners will not
+        // block.
+        useWorkerThreadStrategy = true;
+      }
+
+      if (useWorkerThreadStrategy)
+      {
+        builder.setIOStrategy(WorkerThreadIOStrategy.getInstance());
+      }
+      else
+      {
+        builder.setIOStrategy(SameThreadIOStrategy.getInstance());
+      }
+
+      // Calculate thread counts.
+      final int cpus = Runtime.getRuntime().availableProcessors();
+
+      // Calculate the number of selector threads.
+      final String selectorsStr = System
+          .getProperty("org.forgerock.opendj.transport.selectors");
+      final int selectorThreadCount;
+
+      if (selectorsStr != null)
+      {
+        selectorThreadCount = Integer.parseInt(selectorsStr);
+      }
+      else
+      {
+        selectorThreadCount = useWorkerThreadStrategy ? Math.max(2,
+            cpus / 4) : Math.max(5, (cpus / 2) - 1);
+      }
+
+      builder.getSelectorThreadPoolConfig()
+          .setCorePoolSize(selectorThreadCount)
+          .setMaxPoolSize(selectorThreadCount)
+          .setPoolName("OpenDJ LDAP SDK Grizzly selector thread");
+
+      // Calculate the number of worker threads.
+      if (builder.getWorkerThreadPoolConfig() != null)
+      {
+        final String workersStr = System
+            .getProperty("org.forgerock.opendj.transport.workers");
+        final int workerThreadCount;
+
+        if (workersStr != null)
+        {
+          workerThreadCount = Integer.parseInt(workersStr);
+        }
+        else
+        {
+          workerThreadCount = useWorkerThreadStrategy ? Math.max(5,
+              (cpus * 2)) : 0;
+        }
+
+        builder.getWorkerThreadPoolConfig()
+            .setCorePoolSize(workerThreadCount)
+            .setMaxPoolSize(workerThreadCount)
+            .setPoolName("OpenDJ LDAP SDK Grizzly worker thread");
+      }
+
+      // Parse IO related options.
+      final String lingerStr = System
+          .getProperty("org.forgerock.opendj.transport.linger");
+      if (lingerStr != null)
+      {
+        // Disabled by default.
+        builder.setLinger(Integer.parseInt(lingerStr));
+      }
+
+      final String tcpNoDelayStr = System
+          .getProperty("org.forgerock.opendj.transport.tcpNoDelay");
+      if (tcpNoDelayStr != null)
+      {
+        // Enabled by default.
+        builder.setTcpNoDelay(Boolean.parseBoolean(tcpNoDelayStr));
+      }
+
+      final String reuseAddressStr = System
+          .getProperty("org.forgerock.opendj.transport.reuseAddress");
+      if (reuseAddressStr != null)
+      {
+        // Enabled by default.
+        builder
+            .setReuseAddress(Boolean.parseBoolean(reuseAddressStr));
+      }
+
+      defaultTransport = builder.build();
+
+      // FIXME: raise bug in Grizzly. We should not need to do this, but failure
+      // to do so causes many deadlocks.
+      defaultTransport.setSelectorRunnersCount(selectorThreadCount);
+
+      try
+      {
+        defaultTransport.start();
+      }
+      catch (final IOException e)
+      {
+        throw new RuntimeException(e);
+      }
+    }
+
+    return defaultTransport;
+  }
+
+
+
+  private DefaultTCPNIOTransport()
+  {
+    // Prevent instantiation.
+  }
+
+}
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java
index 5cc4eb0..77b59b6 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap;
@@ -255,7 +256,7 @@
   {
     if (options.getTCPNIOTransport() == null)
     {
-      this.transport = LDAPDefaultTCPNIOTransport.getInstance();
+      this.transport = DefaultTCPNIOTransport.getInstance();
     }
     else
     {
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPDefaultTCPNIOTransport.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPDefaultTCPNIOTransport.java
deleted file mode 100644
index 2e2f9a7..0000000
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPDefaultTCPNIOTransport.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt.  If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2010 Sun Microsystems, Inc.
- */
-
-package com.forgerock.opendj.ldap;
-
-
-
-import java.io.IOException;
-
-import org.glassfish.grizzly.TransportFactory;
-import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
-
-
-
-/**
- * The default TCPNIOTransport which all LDAPConnectionFactories and
- * LDAPListeners will use unless otherwise specified in their options.
- */
-final class LDAPDefaultTCPNIOTransport
-{
-  private static final TCPNIOTransport DEFAULT_TRANSPORT = TransportFactory
-      .getInstance().createTCPTransport();
-
-  static
-  {
-    try
-    {
-      DEFAULT_TRANSPORT.start();
-    }
-    catch (final IOException e)
-    {
-      throw new RuntimeException(e);
-    }
-  }
-
-
-
-  /**
-   * Returns the default TCPNIOTransport which all LDAPConnectionFactories and
-   * LDAPListeners will use unless otherwise specified in their options.
-   *
-   * @return The default TCPNIOTransport.
-   */
-  public static TCPNIOTransport getInstance()
-  {
-    return DEFAULT_TRANSPORT;
-  }
-
-
-
-  private LDAPDefaultTCPNIOTransport()
-  {
-    // Prevent instantiation.
-  }
-
-}
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPListenerImpl.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPListenerImpl.java
index 9700ef7..a6adbfa 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPListenerImpl.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPListenerImpl.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap;
@@ -85,7 +86,7 @@
   {
     if (options.getTCPNIOTransport() == null)
     {
-      this.transport = LDAPDefaultTCPNIOTransport.getInstance();
+      this.transport = DefaultTCPNIOTransport.getInstance();
     }
     else
     {
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferReaderTestCase.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferReaderTestCase.java
index 7413290..b538a7d 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferReaderTestCase.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferReaderTestCase.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap;
@@ -34,15 +35,13 @@
 
 import org.forgerock.opendj.asn1.ASN1Reader;
 import org.forgerock.opendj.asn1.ASN1ReaderTestCase;
-import org.glassfish.grizzly.TransportFactory;
 import org.glassfish.grizzly.memory.ByteBufferWrapper;
-
-import com.forgerock.opendj.ldap.ASN1BufferReader;
+import org.glassfish.grizzly.memory.MemoryManager;
 
 
 
 /**
- * This class provides testcases for ASN1BufferReader.
+ * This class provides test cases for ASN1BufferReader.
  */
 public class ASN1BufferReaderTestCase extends ASN1ReaderTestCase
 {
@@ -52,7 +51,7 @@
   {
     final ByteBufferWrapper buffer = new ByteBufferWrapper(ByteBuffer.wrap(b));
     final ASN1BufferReader reader = new ASN1BufferReader(maxElementSize,
-        TransportFactory.getInstance().getDefaultMemoryManager());
+        MemoryManager.DEFAULT_MEMORY_MANAGER);
     reader.appendBytesRead(buffer);
     return reader;
   }
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferWriterTestCase.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferWriterTestCase.java
index 93da14b..2f2d80d 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferWriterTestCase.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferWriterTestCase.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap;
@@ -37,11 +38,8 @@
 import org.forgerock.opendj.asn1.ASN1WriterTestCase;
 import org.forgerock.opendj.ldap.DecodeException;
 import org.glassfish.grizzly.Buffer;
-import org.glassfish.grizzly.TransportFactory;
 import org.glassfish.grizzly.memory.ByteBufferWrapper;
-
-import com.forgerock.opendj.ldap.ASN1BufferReader;
-import com.forgerock.opendj.ldap.ASN1BufferWriter;
+import org.glassfish.grizzly.memory.MemoryManager;
 
 
 
@@ -70,9 +68,10 @@
   protected ASN1Reader getReader(final byte[] encodedBytes)
       throws DecodeException, IOException
   {
-    final ByteBufferWrapper buffer = new ByteBufferWrapper(ByteBuffer.wrap(encodedBytes));
-    final ASN1BufferReader reader = new ASN1BufferReader(0, TransportFactory
-        .getInstance().getDefaultMemoryManager());
+    final ByteBufferWrapper buffer = new ByteBufferWrapper(
+        ByteBuffer.wrap(encodedBytes));
+    final ASN1BufferReader reader = new ASN1BufferReader(0,
+        MemoryManager.DEFAULT_MEMORY_MANAGER);
     reader.appendBytesRead(buffer);
     return reader;
   }
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/LDAPDefaultTCPNIOTransportTestCase.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransportTestCase.java
similarity index 81%
rename from opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/LDAPDefaultTCPNIOTransportTestCase.java
rename to opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransportTestCase.java
index 41cdc73..87662b5 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/LDAPDefaultTCPNIOTransportTestCase.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransportTestCase.java
@@ -32,19 +32,19 @@
 import static org.testng.Assert.assertTrue;
 
 import java.net.Socket;
-import java.util.Random;
 
+import org.forgerock.opendj.ldap.TestCaseUtils;
 import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
 import org.testng.annotations.Test;
 
-import com.forgerock.opendj.ldap.LDAPDefaultTCPNIOTransport;
+import com.forgerock.opendj.ldap.DefaultTCPNIOTransport;
 
 
 
 /**
- * Tests LDAPDefaultTCPNIOTransport class.
+ * Tests DefaultTCPNIOTransport class.
  */
-public class LDAPDefaultTCPNIOTransportTestCase extends LDAPTestCase
+public class DefaultTCPNIOTransportTestCase extends LDAPTestCase
 {
   /**
    * Tests the default transport.
@@ -56,13 +56,9 @@
   public void testGetInstance() throws Exception
   {
     // Create a transport.
-    final TCPNIOTransport transport = LDAPDefaultTCPNIOTransport.getInstance();
-    final Random r = new Random();
-    int port = r.nextInt(10000);
-    if (port < 1000)
-    {
-      port += 1000;
-    }
+    final TCPNIOTransport transport = DefaultTCPNIOTransport.getInstance();
+    final int port = TestCaseUtils.findFreePort();
+
     transport.bind(port);
     // Establish a socket connection to see if the transport factory works.
     final Socket socket = new Socket("localhost", port);
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java
index a22c78c..4ef9978 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java
@@ -42,7 +42,6 @@
 
 import javax.net.ssl.SSLContext;
 
-import org.forgerock.opendj.ldap.*;
 import org.forgerock.opendj.ldap.requests.DigestMD5SASLBindRequest;
 import org.forgerock.opendj.ldap.requests.Requests;
 import org.forgerock.opendj.ldap.requests.SearchRequest;
@@ -59,7 +58,7 @@
 
 
 /**
- * Tests the connectionfactory classes.
+ * Tests the {@code ConnectionFactory} classes.
  */
 public class ConnectionFactoryTestCase extends SdkTestCase
 {
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPListenerTestCase.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPListenerTestCase.java
index 5f14eb6..11ea51c 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPListenerTestCase.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPListenerTestCase.java
@@ -34,7 +34,6 @@
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
 
-import org.forgerock.opendj.ldap.*;
 import org.forgerock.opendj.ldap.requests.*;
 import org.forgerock.opendj.ldap.responses.*;
 import org.testng.Assert;
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPServer.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPServer.java
index ae05683..46def3d 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPServer.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPServer.java
@@ -43,13 +43,10 @@
 
 import org.forgerock.opendj.asn1.ASN1;
 import org.forgerock.opendj.asn1.ASN1Reader;
-import org.forgerock.opendj.ldap.*;
 import org.forgerock.opendj.ldap.controls.Control;
 import org.forgerock.opendj.ldap.controls.ControlDecoder;
 import org.forgerock.opendj.ldap.requests.*;
 import org.forgerock.opendj.ldap.responses.*;
-import org.glassfish.grizzly.TransportFactory;
-import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
 
 import com.forgerock.opendj.ldap.controls.AccountUsabilityRequestControl;
 import com.forgerock.opendj.ldap.controls.AccountUsabilityResponseControl;
@@ -677,10 +674,6 @@
   // The mapping between entry DNs and the corresponding entries.
   private final ConcurrentHashMap<DN, Entry> entryMap = new ConcurrentHashMap<DN, Entry>();
 
-  // The grizzly transport.
-  private final TCPNIOTransport transport = TransportFactory.getInstance()
-      .createTCPTransport();
-
   // The LDAP listener.
   private LDAPListener listener = null;
 
@@ -689,10 +682,8 @@
 
   // The mapping between the message id and the requests the server is currently
   // handling.
-  private final ConcurrentHashMap<Integer, AbandonableRequest> requestsInProgress = new ConcurrentHashMap<Integer, AbandonableRequest>();
-
-  // The Set used for locking dns.
-  private final HashSet<DN> lockedDNs = new HashSet<DN>();
+  private final ConcurrentHashMap<Integer, AbandonableRequest> requestsInProgress =
+    new ConcurrentHashMap<Integer, AbandonableRequest>();
 
   private SSLContext sslContext;
 
@@ -759,12 +750,8 @@
       return;
     }
     sslContext = new SSLContextBuilder().getSSLContext();
-
-    transport.setSelectorRunnersCount(2);
     listener = new LDAPListener(port, getInstance(),
-        new LDAPListenerOptions().setTCPNIOTransport(transport)
-            .setBacklog(4096));
-    transport.start();
+        new LDAPListenerOptions().setBacklog(4096));
     isRunning = true;
   }
 
@@ -780,15 +767,6 @@
       return;
     }
     listener.close();
-    try
-    {
-      transport.stop();
-    }
-    catch (final IOException e)
-    {
-      e.printStackTrace();
-    }
-    TransportFactory.getInstance().close();
     isRunning = false;
   }
 }
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java
index 243ede9..6a6b487 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java
@@ -51,13 +51,13 @@
    * property when running the server if you want to use a given port number,
    * otherwise a port is chosen randomly at test startup time.
    */
-  public static final String PROPERTY_LDAP_PORT = "org.opendj.server.LdapPort";
+  public static final String PROPERTY_LDAP_PORT = "org.forgerock.opendj.test.LdapPort";
 
   /**
    * Port number that's used by the server. Need to be used by the test cases to
    * create connections.
    */
-  public static int port;
+  public static final int port;
 
   static
   {
@@ -109,20 +109,19 @@
    */
   public static int findFreePort()
   {
-    int port;
     try
     {
       ServerSocket serverLdapSocket = new ServerSocket();
       serverLdapSocket.setReuseAddress(true);
       serverLdapSocket.bind(new InetSocketAddress("127.0.0.1", 0));
-      port = serverLdapSocket.getLocalPort();
+      final int port = serverLdapSocket.getLocalPort();
       serverLdapSocket.close();
+      return port;
     }
     catch (IOException e)
     {
       throw new RuntimeException(e);
     }
-    return port;
   }
 
 
diff --git a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java b/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java
index 97270b0..1ae6d98 100644
--- a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java
+++ b/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap.tools;
@@ -47,7 +48,6 @@
 import org.forgerock.opendj.ldap.requests.*;
 import org.forgerock.opendj.ldap.responses.BindResult;
 import org.forgerock.opendj.ldap.responses.SearchResultEntry;
-import org.glassfish.grizzly.TransportFactory;
 
 import com.forgerock.opendj.util.RecursiveFutureResult;
 
@@ -617,7 +617,8 @@
 
     try
     {
-      TransportFactory.setInstance(new PerfToolTCPNIOTransportFactory());
+      Utils.setDefaultPerfToolProperties();
+
       connectionFactoryProvider = new ConnectionFactoryProvider(argParser, this);
       runner = new BindPerformanceRunner(argParser, this);
 
diff --git a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java b/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java
index 5468378..ee3107d 100644
--- a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java
+++ b/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap.tools;
@@ -41,7 +42,6 @@
 import org.forgerock.opendj.ldap.requests.ModifyRequest;
 import org.forgerock.opendj.ldap.requests.Requests;
 import org.forgerock.opendj.ldap.responses.Result;
-import org.glassfish.grizzly.TransportFactory;
 
 
 
@@ -331,7 +331,8 @@
 
     try
     {
-      TransportFactory.setInstance(new PerfToolTCPNIOTransportFactory());
+      Utils.setDefaultPerfToolProperties();
+
       connectionFactoryProvider = new ConnectionFactoryProvider(argParser, this);
       runner = new ModifyPerformanceRunner(argParser, this);
       propertiesFileArgument = new StringArgument("propertiesFilePath", null,
diff --git a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/PerfToolTCPNIOTransportFactory.java b/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/PerfToolTCPNIOTransportFactory.java
deleted file mode 100644
index 5462cf7..0000000
--- a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/PerfToolTCPNIOTransportFactory.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt.  If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2010 Sun Microsystems, Inc.
- */
-
-package com.forgerock.opendj.ldap.tools;
-
-
-
-import org.glassfish.grizzly.Grizzly;
-import org.glassfish.grizzly.memory.HeapMemoryManager;
-import org.glassfish.grizzly.nio.DefaultNIOTransportFactory;
-import org.glassfish.grizzly.nio.DefaultSelectionKeyHandler;
-import org.glassfish.grizzly.nio.DefaultSelectorHandler;
-import org.glassfish.grizzly.nio.tmpselectors.TemporarySelectorPool;
-import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
-import org.glassfish.grizzly.nio.transport.UDPNIOTransport;
-import org.glassfish.grizzly.threadpool.AbstractThreadPool;
-import org.glassfish.grizzly.threadpool.GrizzlyExecutorService;
-import org.glassfish.grizzly.threadpool.ThreadPoolConfig;
-
-
-
-/**
- * The TCPNIOTransportFactory which performance tools will use.
- */
-public final class PerfToolTCPNIOTransportFactory extends
-    DefaultNIOTransportFactory
-{
-  private int selectors;
-
-  private int linger = 0;
-
-  private boolean tcpNoDelay = true;
-
-  private boolean reuseAddress = true;
-
-  private TCPNIOTransport singletonTransport = null;
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public synchronized TCPNIOTransport createTCPTransport()
-  {
-    if (singletonTransport == null)
-    {
-      singletonTransport = super.createTCPTransport();
-
-      singletonTransport.setSelectorRunnersCount(selectors);
-      singletonTransport.setLinger(linger);
-      singletonTransport.setTcpNoDelay(tcpNoDelay);
-      singletonTransport.setReuseAddress(reuseAddress);
-    }
-
-    return singletonTransport;
-  }
-
-
-
-  /**
-   * Creating an UDP transport is unsupported with this factory. A
-   * {@code UnsupportedOperationException} will be thrown when this method is
-   * called.
-   *
-   * @return This method will always throw {@code UnsupportedOperationException}
-   *         .
-   */
-  @Override
-  public UDPNIOTransport createUDPTransport()
-  {
-    throw new UnsupportedOperationException();
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void initialize()
-  {
-    final int cpus = Runtime.getRuntime().availableProcessors();
-    int threads = Math.max(5, (cpus / 2) - 1);
-    selectors = Math.max(2, cpus / 8);
-
-    final String threadsStr = System
-        .getProperty("org.forgerock.opendj.ldap.ldap.transport.threads");
-    if (threadsStr != null)
-    {
-      threads = Integer.parseInt(threadsStr);
-    }
-    final String selectorsStr = System
-        .getProperty("org.forgerock.opendj.ldap.ldap.transport.selectors");
-    if (selectorsStr != null)
-    {
-      selectors = Integer.parseInt(selectorsStr);
-    }
-
-    final String lingerStr = System
-        .getProperty("org.forgerock.opendj.ldap.ldap.transport.linger");
-    if (lingerStr != null)
-    {
-      linger = Integer.parseInt(lingerStr);
-    }
-
-    final String tcpNoDelayStr = System
-        .getProperty("org.forgerock.opendj.ldap.ldap.transport.tcpNoDelay");
-    if (tcpNoDelayStr != null)
-    {
-      tcpNoDelay = Integer.parseInt(tcpNoDelayStr) != 0;
-    }
-
-    final String reuseAddressStr = System
-        .getProperty("org.forgerock.opendj.ldap.ldap.transport.reuseAddress");
-    if (reuseAddressStr != null)
-    {
-      reuseAddress = Integer.parseInt(reuseAddressStr) != 0;
-    }
-
-    // Copied from TransportFactory.
-    defaultAttributeBuilder = Grizzly.DEFAULT_ATTRIBUTE_BUILDER;
-    defaultMemoryManager = new HeapMemoryManager();
-    defaultWorkerThreadPool = GrizzlyExecutorService
-        .createInstance(ThreadPoolConfig.defaultConfig()
-            .setMemoryManager(defaultMemoryManager).setCorePoolSize(threads)
-            .setMaxPoolSize(threads).setPoolName("OpenDJ SDK Worker(Grizzly)"));
-
-    // Copied from NIOTransportFactory.
-    defaultSelectorHandler = new DefaultSelectorHandler();
-    defaultSelectionKeyHandler = new DefaultSelectionKeyHandler();
-
-    /*
-     * By default TemporarySelector pool size should be equal to the number of
-     * processing threads
-     */
-    int selectorPoolSize = TemporarySelectorPool.DEFAULT_SELECTORS_COUNT;
-    if (defaultWorkerThreadPool instanceof AbstractThreadPool)
-    {
-      selectorPoolSize = Math.min(
-          ((AbstractThreadPool) defaultWorkerThreadPool).getConfig()
-              .getMaxPoolSize(), selectorPoolSize);
-    }
-    defaultTemporarySelectorPool = new TemporarySelectorPool(selectorPoolSize);
-  }
-
-}
diff --git a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java b/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java
index 65bcfb4..8544deb 100644
--- a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java
+++ b/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap.tools;
@@ -47,7 +48,6 @@
 import org.forgerock.opendj.ldap.responses.Result;
 import org.forgerock.opendj.ldap.responses.SearchResultEntry;
 import org.forgerock.opendj.ldap.responses.SearchResultReference;
-import org.glassfish.grizzly.TransportFactory;
 
 
 
@@ -390,7 +390,8 @@
 
     try
     {
-      TransportFactory.setInstance(new PerfToolTCPNIOTransportFactory());
+      Utils.setDefaultPerfToolProperties();
+
       connectionFactoryProvider = new ConnectionFactoryProvider(argParser, this);
       runner = new SearchPerformanceRunner(argParser, this);
 
diff --git a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java b/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java
index c8223b8..4408651 100644
--- a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java
+++ b/opendj-sdk/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java
@@ -514,6 +514,22 @@
 
 
   /**
+   * Sets default system property settings for the xxxrate performance tools.
+   */
+  static void setDefaultPerfToolProperties()
+  {
+    // Use SameThreadStrategy by default.
+    if (System
+        .getProperty("org.forgerock.opendj.transport.useWorkerThreads") == null)
+    {
+      System.setProperty(
+          "org.forgerock.opendj.transport.useWorkerThreads", "false");
+    }
+  }
+
+
+
+  /**
    * Inserts line breaks into the provided buffer to wrap text at no more than
    * the specified column width. Wrapping will only be done at space boundaries
    * and if there are no spaces within the specified width, then wrapping will
diff --git a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/PerfToolTCPNIOTransportFactoryTestCase.java b/opendj-sdk/opendj3/opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/PerfToolTCPNIOTransportFactoryTestCase.java
deleted file mode 100644
index aaa3a10..0000000
--- a/opendj-sdk/opendj3/opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/PerfToolTCPNIOTransportFactoryTestCase.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt.  If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2010 Sun Microsystems, Inc.
- */
-
-package com.forgerock.opendj.ldap.tools;
-
-
-
-import static org.testng.Assert.assertTrue;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-import org.glassfish.grizzly.TransportFactory;
-import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
-import org.testng.annotations.Test;
-
-
-
-/**
- * Tests PerfToolTCPNIOTransportFactoryTestCase class.
- */
-public class PerfToolTCPNIOTransportFactoryTestCase extends ToolsTestCase
-{
-  /**
-   * Finds a free server socket port on the local host.
-   *
-   * @return The free port.
-   */
-  public static int findFreePort()
-  {
-    int port;
-    try
-    {
-      ServerSocket serverLdapSocket = new ServerSocket();
-      serverLdapSocket.setReuseAddress(true);
-      serverLdapSocket.bind(new InetSocketAddress("127.0.0.1", 0));
-      port = serverLdapSocket.getLocalPort();
-      serverLdapSocket.close();
-    }
-    catch (IOException e)
-    {
-      throw new RuntimeException(e);
-    }
-    return port;
-  }
-
-  /**
-   * Tests the transport factory.
-   *
-   * @throws Exception
-   *           If an unexpected error occurred.
-   */
-  @Test()
-  public void testGetInstance() throws Exception
-  {
-    // Create a transport.
-    final TransportFactory factory = new PerfToolTCPNIOTransportFactory();
-    final TCPNIOTransport transport = factory.createTCPTransport();
-    final int port = findFreePort();
-    transport.bind(port);
-    // Establish a socket connection to see if the transport factory works.
-    final Socket socket = new Socket("localhost", port);
-    // Successfully connected if there is no exception.
-    assertTrue(socket.isConnected());
-    // Don't stop the transport because it is shared with the ldap server.
-  }
-}

--
Gitblit v1.10.0