mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Matthew Swift
24.34.2011 a94cb8c8073c31b911020e8565bbd4bd60b37bad
Fix OPENDJ-40: Upgrade to latest Grizzly

Upgraded to Grizzly 2.1.1.
3 files deleted
1 files added
1 files renamed
13 files modified
653 ■■■■■ changed files
opendj3/opendj-ldap-sdk/pom.xml 2 ●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransport.java 191 ●●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java 3 ●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPDefaultTCPNIOTransport.java 80 ●●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPListenerImpl.java 3 ●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferReaderTestCase.java 7 ●●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ASN1BufferWriterTestCase.java 13 ●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransportTestCase.java 18 ●●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java 3 ●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPListenerTestCase.java 1 ●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/LDAPServer.java 28 ●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java 9 ●●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java 5 ●●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java 5 ●●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/PerfToolTCPNIOTransportFactory.java 171 ●●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java 5 ●●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java 16 ●●●●● patch | view | raw | blame | history
opendj3/opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/PerfToolTCPNIOTransportFactoryTestCase.java 93 ●●●●● patch | view | raw | blame | history
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>
opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransport.java
New file
@@ -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.
  }
}
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
    {
opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPDefaultTCPNIOTransport.java
File was deleted
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
    {
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,10 +35,8 @@
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;
@@ -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;
  }
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;
  }
opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/DefaultTCPNIOTransportTestCase.java
File was renamed from opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/LDAPDefaultTCPNIOTransportTestCase.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);
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
{
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;
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;
  }
}
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;
  }
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);
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,
opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/PerfToolTCPNIOTransportFactory.java
File was deleted
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);
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
opendj3/opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/PerfToolTCPNIOTransportFactoryTestCase.java
File was deleted