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