From ba0fd6f7b8279e3dd09ca94df123be4e319b4f58 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 10 Dec 2013 17:42:39 +0000
Subject: [PATCH] Fix OPENDJ-1248: Unexpected rejected entries during import-ldif

---
 opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java |   92 +++++++++++++++++++++++++++------------------
 1 files changed, 55 insertions(+), 37 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java b/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
index 3556493..a88080d 100644
--- a/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
+++ b/opends/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
@@ -901,38 +901,39 @@
       InterruptedException, ExecutionException
   {
     this.rootContainer = rootContainer;
-    try
-    {
-      reader = new LDIFReader(importConfiguration, rootContainer);
-    }
-    catch (IOException ioe)
-    {
-      Message message = ERR_JEB_IMPORT_LDIF_READER_IO_ERROR.get();
-      throw new InitializationException(message, ioe);
-    }
+    DiskSpaceMonitor tmpMonitor = null;
+    DiskSpaceMonitor dbMonitor = null;
+    try {
+      try
+      {
+        reader = new LDIFReader(importConfiguration, rootContainer);
+      }
+      catch (IOException ioe)
+      {
+        Message message = ERR_JEB_IMPORT_LDIF_READER_IO_ERROR.get();
+        throw new InitializationException(message, ioe);
+      }
 
-    DiskSpaceMonitor tmpMonitor =
-        new DiskSpaceMonitor(backendConfiguration.getBackendId()
-            + " backend import tmp directory", tempDir, backendConfiguration
-            .getDiskLowThreshold(),
-            backendConfiguration.getDiskFullThreshold(), 5, TimeUnit.SECONDS,
-            this);
-    tmpMonitor.initializeMonitorProvider(null);
-    DirectoryServer.registerMonitorProvider(tmpMonitor);
-    File parentDirectory =
-        getFileForPath(backendConfiguration.getDBDirectory());
-    File backendDirectory =
-        new File(parentDirectory, backendConfiguration.getBackendId());
-    DiskSpaceMonitor dbMonitor =
-        new DiskSpaceMonitor(backendConfiguration.getBackendId()
-            + " backend import DB directory", backendDirectory,
-            backendConfiguration.getDiskLowThreshold(), backendConfiguration
-                .getDiskFullThreshold(), 5, TimeUnit.SECONDS, this);
-    dbMonitor.initializeMonitorProvider(null);
-    DirectoryServer.registerMonitorProvider(dbMonitor);
+      tmpMonitor =
+          new DiskSpaceMonitor(backendConfiguration.getBackendId()
+              + " backend import tmp directory", tempDir, backendConfiguration
+              .getDiskLowThreshold(),
+              backendConfiguration.getDiskFullThreshold(), 5, TimeUnit.SECONDS,
+              this);
+      tmpMonitor.initializeMonitorProvider(null);
+      DirectoryServer.registerMonitorProvider(tmpMonitor);
+      File parentDirectory =
+          getFileForPath(backendConfiguration.getDBDirectory());
+      File backendDirectory =
+          new File(parentDirectory, backendConfiguration.getBackendId());
+      dbMonitor =
+          new DiskSpaceMonitor(backendConfiguration.getBackendId()
+              + " backend import DB directory", backendDirectory,
+              backendConfiguration.getDiskLowThreshold(), backendConfiguration
+                  .getDiskFullThreshold(), 5, TimeUnit.SECONDS, this);
+      dbMonitor.initializeMonitorProvider(null);
+      DirectoryServer.registerMonitorProvider(dbMonitor);
 
-    try
-    {
       Message message =
           NOTE_JEB_IMPORT_STARTING.get(DirectoryServer.getVersionString(),
               BUILD_ID, REVISION_NUMBER);
@@ -978,17 +979,34 @@
               .get(), reader.getEntriesIgnored(), reader.getEntriesRejected(),
               migratedCount, importTime / 1000, rate);
       logError(message);
+      return new LDIFImportResult(reader.getEntriesRead(), reader
+          .getEntriesRejected(), reader.getEntriesIgnored());
     }
     finally
     {
-      reader.close();
-      DirectoryServer.deregisterMonitorProvider(tmpMonitor);
-      DirectoryServer.deregisterMonitorProvider(dbMonitor);
-      tmpMonitor.finalizeMonitorProvider();
-      dbMonitor.finalizeMonitorProvider();
+      StaticUtils.close(reader);
+      if (!skipDNValidation)
+      {
+        try
+        {
+          tmpEnv.shutdown();
+        }
+        catch (Exception ignored)
+        {
+          // Do nothing.
+        }
+      }
+      if (tmpMonitor != null)
+      {
+        DirectoryServer.deregisterMonitorProvider(tmpMonitor);
+        tmpMonitor.finalizeMonitorProvider();
+      }
+      if (dbMonitor != null)
+      {
+        DirectoryServer.deregisterMonitorProvider(dbMonitor);
+        dbMonitor.finalizeMonitorProvider();
+      }
     }
-    return new LDIFImportResult(reader.getEntriesRead(), reader
-        .getEntriesRejected(), reader.getEntriesIgnored());
   }
 
   private void recursiveDelete(File dir)

--
Gitblit v1.10.0