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