From ede52c8f25aa2b7815e006cdfd6fe09f0766b548 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Wed, 09 Nov 2016 14:54:10 +0000
Subject: [PATCH] OPENDJ-3179: Migrate LDAP Connection Handler to SDK Grizzly transport

---
 opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ServerTCPNIOTransport.java |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ServerTCPNIOTransport.java b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ServerTCPNIOTransport.java
index 7a3c849..5e6c1b6 100644
--- a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ServerTCPNIOTransport.java
+++ b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ServerTCPNIOTransport.java
@@ -20,6 +20,7 @@
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.glassfish.grizzly.memory.PooledMemoryManager;
 import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
 import org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder;
 import org.glassfish.grizzly.strategies.SameThreadIOStrategy;
@@ -36,6 +37,7 @@
 
     private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
     static final ServerTCPNIOTransport SERVER_TRANSPORT = new ServerTCPNIOTransport();
+    private static final long MB = 1024 * 1024;
 
     private ServerTCPNIOTransport() {
         // Prevent instantiation.
@@ -96,6 +98,24 @@
             // Enabled by default.
             builder.setReuseAddress(Boolean.parseBoolean(reuseAddressStr));
         }
+        float heapPercent;
+        if (Runtime.getRuntime().maxMemory() < 1024 * MB) {
+            // Low heap
+            heapPercent = 0.01f;
+        } else {
+            // Compute a percentage to try to reach roughly 64Mb (big enough (tm))
+            heapPercent = 64f * MB / Runtime.getRuntime().maxMemory();
+        }
+        // Force usage of PooledMemoryManager which allows to use grizzly's buffers across threads.
+        builder.setMemoryManager(new PooledMemoryManager(
+                1024,  // Initial buffer size
+                3,     // Number of pools (with growing factor below this give us pools of 1K, 4K, 16k buffers)
+                4,     // Growing factor to apply on the size of the buffer polled by the next pool
+                selectorThreadCount,    // Number of pool slices that every pool will stripe allocation requests across
+                heapPercent, // The percentage of the heap that this manager will use when populating the pools (5%)
+                1f,    // The percentage of buffers to be pre-allocated during MemoryManager initialization (100%)
+                true   // true to use direct buffers or false to use heap buffers
+        ));
 
         final TCPNIOTransport transport = builder.build();
 

--
Gitblit v1.10.0