From aaec0227c12c81b76899eb20ff99c947c7715df0 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 12 May 2015 15:41:46 +0000
Subject: [PATCH] Partial OPENDJ-2016 Implement new on disk merge import strategy based on storage engine
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java | 71 ++++++++++++++++++++++++++---------
1 files changed, 52 insertions(+), 19 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
index 2358e65..83413c2 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Importer.java
@@ -31,6 +31,7 @@
import static org.opends.server.backends.pluggable.DnKeyFormat.*;
import static org.opends.server.backends.pluggable.EntryIDSet.*;
import static org.opends.server.backends.pluggable.SuffixContainer.*;
+import static org.opends.server.core.DirectoryServer.*;
import static org.opends.server.util.DynamicConstants.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
@@ -85,6 +86,7 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
+import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.ldap.ByteSequence;
@@ -127,6 +129,46 @@
*/
final class Importer
{
+ /**
+ * Shim that allows properly constructing an {@link Importer} without polluting
+ * {@link ImportStrategy} and {@link RootContainer} with this importer inner workings.
+ */
+ static final class StrategyImpl implements ImportStrategy
+ {
+ private final PluggableBackendCfg backendCfg;
+
+ public StrategyImpl(PluggableBackendCfg backendCfg)
+ {
+ this.backendCfg = backendCfg;
+ }
+
+ @Override
+ public LDIFImportResult importLDIF(LDIFImportConfig importConfig, RootContainer rootContainer,
+ ServerContext serverContext) throws DirectoryException
+ {
+ try
+ {
+ return new Importer(rootContainer, importConfig, backendCfg, serverContext).processImport();
+ }
+ catch (DirectoryException e)
+ {
+ logger.traceException(e);
+ throw e;
+ }
+ catch (InitializationException | ConfigException 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);
+ }
+ }
+ }
+
private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
private static final int TIMER_INTERVAL = 10000;
@@ -853,14 +895,7 @@
rebuildManager.printStopMessage(startTime);
}
- /**
- * Import a LDIF using the specified root container.
- *
- * @return A LDIF result.
- * @throws Exception
- * If the import failed
- */
- public LDIFImportResult processImport() throws Exception
+ private LDIFImportResult processImport() throws Exception
{
try {
try
@@ -2989,17 +3024,15 @@
return timer;
}
- private int getIndexCount() throws ConfigException, StorageRuntimeException,
- InitializationException
+ private int getIndexCount() throws ConfigException, StorageRuntimeException, InitializationException
{
switch (rebuildConfig.getRebuildMode())
{
case ALL:
return getTotalIndexCount(cfg);
case DEGRADED:
- // FIXME: since the storgae is not opened we cannot determine which
- // indexes are degraded. As a workaround, be conservative and assume all
- // indexes need rebuilding.
+ // FIXME: since the storage is not opened we cannot determine which indexes are degraded.
+ // As a workaround, be conservative and assume all indexes need rebuilding.
return getTotalIndexCount(cfg);
default:
return getRebuildListIndexCount(cfg);
@@ -3023,7 +3056,7 @@
{
indexCount += 3;
}
- else if ("dn2uri".equals(lowerName))
+ else if (DN2URI_INDEX_NAME.equals(lowerName))
{
indexCount++;
}
@@ -3057,11 +3090,11 @@
final String indexType = attrIndexParts[1];
if (attrIndexParts.length == 2)
{
- if ("presence".equals(indexType)
- || "equality".equals(indexType)
- || "ordering".equals(indexType)
- || "substring".equals(indexType)
- || "approximate".equals(indexType))
+ if (PRESENCE.toString().equals(indexType)
+ || EQUALITY.toString().equals(indexType)
+ || ORDERING.toString().equals(indexType)
+ || SUBSTRING.toString().equals(indexType)
+ || APPROXIMATE.toString().equals(indexType))
{
indexCount++;
}
--
Gitblit v1.10.0