From 06e460f4e1b092e615753982b4080f1deaeeec4c Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 26 Mar 2015 13:14:20 +0000
Subject: [PATCH] OPENDJ-1707 Persistit: various import problems

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java |   65 ++++++++++++++++++--------------
 1 files changed, 36 insertions(+), 29 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
index 41a28f1..768d88f 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
@@ -26,18 +26,11 @@
  */
 package org.opends.server.backends.pluggable;
 
-import static org.opends.messages.BackendMessages.ERR_LDIF_BACKEND_CANNOT_CREATE_LDIF_READER;
-import static org.opends.messages.BackendMessages.ERR_LDIF_BACKEND_ERROR_READING_LDIF;
-import static org.opends.messages.JebMessages.ERR_JEB_CACHE_PRELOAD;
-import static org.opends.messages.JebMessages.ERR_JEB_REMOVE_FAIL;
-import static org.opends.messages.JebMessages.ERR_JEB_ENTRY_CONTAINER_ALREADY_REGISTERED;
-import static org.opends.messages.JebMessages.ERR_JEB_IMPORT_PARENT_NOT_FOUND;
-import static org.opends.messages.JebMessages.NOTE_JEB_IMPORT_FINAL_STATUS;
-import static org.opends.messages.JebMessages.NOTE_JEB_IMPORT_PROGRESS_REPORT;
-import static org.opends.messages.JebMessages.WARN_JEB_IMPORT_ENTRY_EXISTS;
-import static org.opends.messages.UtilityMessages.ERR_LDIF_SKIP;
-import static org.opends.server.core.DirectoryServer.getServerErrorResultCode;
-import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
+import static org.opends.messages.BackendMessages.*;
+import static org.opends.messages.JebMessages.*;
+import static org.opends.messages.UtilityMessages.*;
+import static org.opends.server.core.DirectoryServer.*;
+import static org.opends.server.util.StaticUtils.*;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -55,6 +48,7 @@
 import org.forgerock.opendj.config.server.ConfigException;
 import org.forgerock.opendj.ldap.ResultCode;
 import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.admin.std.server.PersistitBackendCfg;
 import org.opends.server.admin.std.server.PluggableBackendCfg;
 import org.opends.server.api.CompressedSchema;
 import org.opends.server.backends.pluggable.spi.ReadOperation;
@@ -77,8 +71,6 @@
 import org.opends.server.types.Privilege;
 import org.opends.server.util.LDIFException;
 import org.opends.server.util.LDIFReader;
-import org.opends.server.util.RuntimeInformation;
-
 
 /**
  * Wrapper class for the JE environment. Root container holds all the entry
@@ -188,24 +180,14 @@
    *           If a problem occurs while performing the LDIF import.
    */
   LDIFImportResult importLDIF(LDIFImportConfig importConfig) throws DirectoryException
+  {//TODO JNR may call importLDIFWithSuccessiveAdds(importConfig) depending on configured import strategy
+    return importLDIFWithOnDiskMerge(importConfig);
+  }
+
+  private LDIFImportResult importLDIFWithSuccessiveAdds(LDIFImportConfig importConfig) throws DirectoryException
   {
-    RuntimeInformation.logInfo();
-    if (Importer.mustClearBackend(importConfig, config))
-    {
-      try
-      {
-        backend.getStorage().removeStorageFiles();
-      }
-      catch (Exception e)
-      {
-        LocalizableMessage m = ERR_JEB_REMOVE_FAIL.get(e.getMessage());
-        throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), m, e);
-      }
-    }
     try
     {
-      open();
-
       ScheduledThreadPoolExecutor timerService = new ScheduledThreadPoolExecutor(1);
       try
       {
@@ -330,6 +312,31 @@
     timerService.awaitTermination(20, TimeUnit.SECONDS);
   }
 
+  private LDIFImportResult importLDIFWithOnDiskMerge(final LDIFImportConfig importConfig) throws DirectoryException
+  {
+    try
+    {
+      final Importer importer = new Importer(importConfig, (PersistitBackendCfg) config); // TODO JNR remove cast
+      return importer.processImport(this);
+    }
+    catch (DirectoryException e)
+    {
+      logger.traceException(e);
+      throw e;
+    }
+    catch (OpenDsException e)
+    {
+      logger.traceException(e);
+      throw new DirectoryException(getServerErrorResultCode(), e.getMessageObject(), e);
+    }
+    catch (Exception e)
+    {
+      logger.traceException(e);
+      throw new DirectoryException(getServerErrorResultCode(),
+          LocalizableMessage.raw(stackTraceToSingleLineString(e)), e);
+    }
+  }
+
   /**
    * Opens the root container.
    *

--
Gitblit v1.10.0