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/BackendImpl.java | 64 +++++++++++++++++++++++++++++++
1 files changed, 63 insertions(+), 1 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java
index 93b2483..f4b286c 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java
@@ -58,6 +58,7 @@
import org.opends.server.backends.pluggable.spi.WriteableStorage;
import org.opends.server.core.*;
import org.opends.server.types.*;
+import org.opends.server.util.RuntimeInformation;
/**
* This is an implementation of a Directory Server Backend which stores entries locally in a
@@ -642,13 +643,74 @@
@Override
public LDIFImportResult importLDIF(LDIFImportConfig importConfig) throws DirectoryException
{
+ RuntimeInformation.logInfo();
+
// If the rootContainer is open, the backend is initialized by something else.
// We can't do import while the backend is online.
if (rootContainer != null)
{
throw new DirectoryException(getServerErrorResultCode(), ERR_JEB_IMPORT_BACKEND_ONLINE.get());
}
- return new RootContainer(this, cfg).importLDIF(importConfig);
+
+ try
+ {
+ if (Importer.mustClearBackend(importConfig, cfg))
+ {
+ try
+ {
+ // clear all files before opening the root container
+ storage.removeStorageFiles();
+ }
+ catch (Exception e)
+ {
+ LocalizableMessage m = ERR_JEB_REMOVE_FAIL.get(e.getMessage());
+ throw new DirectoryException(getServerErrorResultCode(), m, e);
+ }
+ }
+
+ rootContainer = initializeRootContainer();
+ return rootContainer.importLDIF(importConfig);
+ }
+ catch (StorageRuntimeException e)
+ {
+ logger.traceException(e);
+ throw new DirectoryException(getServerErrorResultCode(), LocalizableMessage.raw(e.getMessage()), e);
+ }
+ catch (DirectoryException e)
+ {
+ throw e;
+ }
+ catch (OpenDsException e)
+ {
+ logger.traceException(e);
+ throw new DirectoryException(getServerErrorResultCode(), e.getMessageObject(), e);
+ }
+ catch (ConfigException e)
+ {
+ logger.traceException(e);
+ throw new DirectoryException(getServerErrorResultCode(), e.getMessageObject(), e);
+ }
+ finally
+ {
+ try
+ {
+ if (rootContainer != null)
+ {
+ long startTime = System.currentTimeMillis();
+ rootContainer.close();
+ long finishTime = System.currentTimeMillis();
+ long closeTime = (finishTime - startTime) / 1000;
+ logger.info(NOTE_JEB_IMPORT_LDIF_ROOTCONTAINER_CLOSE, closeTime);
+ rootContainer = null;
+ }
+
+ logger.info(NOTE_JEB_IMPORT_CLOSING_DATABASE);
+ }
+ catch (StorageRuntimeException de)
+ {
+ logger.traceException(de);
+ }
+ }
}
/** {@inheritDoc} */
--
Gitblit v1.10.0