From b425cbd0d1ea47999a351b07fdca5930d5977953 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Fri, 11 Mar 2016 10:01:11 +0000
Subject: [PATCH] OPENDJ-2761: Import does not work when using heap buffers.

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java          |   10 ++++------
 opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/PluggableBackendImplTestCase.java |    1 +
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
index b3c6c31..aefaa73 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
@@ -481,7 +481,7 @@
 
     private int computeBufferSize(int nbBuffer) throws InitializationException
     {
-      final long availableMemory = calculateAvailableMemory();
+      final long availableMemory = calculateAvailableHeapMemoryForBuffers();
       logger.info(NOTE_IMPORT_LDIF_TOT_MEM_BUF, availableMemory, nbBuffer);
 
       final int bufferSize = Math.min((int) (availableMemory / nbBuffer), MAX_BUFFER_SIZE);
@@ -489,7 +489,7 @@
       {
         // Not enough memory.
         throw new InitializationException(ERR_IMPORT_LDIF_LACK_MEM.get(availableMemory, nbBuffer * MIN_BUFFER_SIZE
-            + REQUIRED_FREE_MEMORY));
+            + DB_CACHE_SIZE + REQUIRED_FREE_MEMORY));
       }
       return bufferSize;
     }
@@ -498,7 +498,7 @@
      * Calculates the amount of available memory which can be used by this import, taking into account whether or not
      * the import is running offline or online as a task.
      */
-    private long calculateAvailableMemory()
+    private long calculateAvailableHeapMemoryForBuffers()
     {
       final Runtime runtime = Runtime.getRuntime();
       // call twice gc to ensure finalizers are called
@@ -526,9 +526,7 @@
         // Be pessimistic when memory is low.
         importMemPct -= 25;
       }
-
-      final long usedMemory = runtime.totalMemory() - runtime.freeMemory() + DB_CACHE_SIZE + REQUIRED_FREE_MEMORY;
-      return (totalAvailableMemory * importMemPct / 100) - usedMemory;
+      return (totalAvailableMemory * importMemPct / 100) - (DB_CACHE_SIZE + REQUIRED_FREE_MEMORY);
     }
   }
 
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/PluggableBackendImplTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/PluggableBackendImplTestCase.java
index aec8819..961f32e 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/PluggableBackendImplTestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/PluggableBackendImplTestCase.java
@@ -949,6 +949,7 @@
       importConf.setIncludeBranches(Collections.singleton(testBaseDN));
       importConf.setSkipDNValidation(true);
       importConf.setThreadCount(0);
+      importConf.setOffHeapSize(0); // Force heap buffer for automatic buffer scaling.
       backend.importLDIF(importConf, DirectoryServer.getInstance().getServerContext());
     }
     assertEquals(rejectedEntries.size(), 0,

--
Gitblit v1.10.0