From 723f96004511e826fd54ca9afc3ae8bba9565bc3 Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Tue, 03 Oct 2006 19:09:36 +0000
Subject: [PATCH] Refactoring of the JEB backend to simplify the container and entryContainer abstraction. This also elimates exposing the JE interface to backendImpl by creating a new RootContainer class. It provides a higher-level interface to access raw data in JE from anywhere in the server (ie. unit tests).
---
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ExportJob.java | 98 +++++++++++++------------------------------------
1 files changed, 26 insertions(+), 72 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ExportJob.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ExportJob.java
index 63d3b10..c0d13b1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ExportJob.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ExportJob.java
@@ -30,11 +30,9 @@
import com.sleepycat.je.CursorConfig;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;
-import com.sleepycat.je.Environment;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;
-import org.opends.server.api.Backend;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
import org.opends.server.types.ErrorLogCategory;
@@ -44,10 +42,7 @@
import org.opends.server.util.StaticUtils;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
+import java.util.*;
import static org.opends.server.loggers.Debug.debugException;
import static org.opends.server.messages.MessageHandler.getMessage;
@@ -71,16 +66,6 @@
private LDIFExportConfig exportConfig;
/**
- * The JE backend instance to be exported.
- */
- private Backend backend;
-
- /**
- * The configuration of the JE backend instance.
- */
- private Config config;
-
- /**
* The number of milliseconds between job progress reports.
*/
private long progressInterval = 10000;
@@ -98,43 +83,38 @@
/**
* Create a new export job.
*
- * @param backend The JE backend performing the export job.
- * @param config The JE backend configuration.
* @param exportConfig The requested LDIF export configuration.
*/
- public ExportJob(Backend backend, Config config,
- LDIFExportConfig exportConfig)
+ public ExportJob(LDIFExportConfig exportConfig)
{
this.exportConfig = exportConfig;
- this.backend = backend;
- this.config = config;
}
/**
* Export entries from the backend to an LDIF file.
- * @param env A handle to the JE database environment of the backend.
+ * @param rootContainer The root container to export.
* @throws DatabaseException If an error occurs in the JE database.
* @throws IOException If an I/O error occurs while writing an entry.
* @throws JebException If an error occurs in the JE backend.
* @throws LDIFException If an error occurs while trying to determine whether
* to write an entry.
*/
- public void exportLDIF(Environment env)
+ public void exportLDIF(RootContainer rootContainer)
throws IOException, LDIFException, DatabaseException, JebException
{
- // Open the containers read-only.
List<DN> includeBranches = exportConfig.getIncludeBranches();
- DN baseDNs[] = config.getBaseDNs();
- ArrayList<EntryContainer> containers =
- new ArrayList<EntryContainer>(baseDNs.length);
- for (DN baseDN : baseDNs)
+ DN baseDN;
+ ArrayList<EntryContainer> exportContainers =
+ new ArrayList<EntryContainer>();
+
+ for (EntryContainer entryContainer : rootContainer.getEntryContainers())
{
// Skip containers that are not covered by the include branches.
+ baseDN = entryContainer.getBaseDN();
- boolean includeBase = false;
if (includeBranches == null || includeBranches.isEmpty())
{
- includeBase = true;
+ exportContainers.add(entryContainer);
}
else
{
@@ -143,62 +123,35 @@
if (includeBranch.isDescendantOf(baseDN) ||
includeBranch.isAncestorOf(baseDN))
{
- includeBase = true;
+ exportContainers.add(entryContainer);
}
}
}
-
- if (includeBase)
- {
- String containerName = BackendImpl.getContainerName(baseDN);
- Container container = new Container(env, containerName);
- EntryContainer entryContainer =
- new EntryContainer(backend, config, container);
- if (env.getConfig().getReadOnly())
- {
- entryContainer.openReadOnly();
- }
- else
- {
- entryContainer.open();
- }
- containers.add(entryContainer);
- }
-
}
// Make a note of the time we started.
long startTime = System.currentTimeMillis();
+ // Start a timer for the progress report.
+ Timer timer = new Timer();
+ TimerTask progressTask = new ProgressTask();
+ timer.scheduleAtFixedRate(progressTask, progressInterval,
+ progressInterval);
+
+ // Iterate through the containers.
try
{
- // Start a timer for the progress report.
- Timer timer = new Timer();
- TimerTask progressTask = new ProgressTask();
- timer.scheduleAtFixedRate(progressTask, progressInterval,
- progressInterval);
-
- // Iterate through the containers.
- try
+ for (EntryContainer exportContainer : exportContainers)
{
- for (EntryContainer ec : containers)
- {
- exportContainer(ec);
- }
- }
- finally
- {
- timer.cancel();
+ exportContainer(exportContainer);
}
}
finally
{
- for (EntryContainer ec : containers)
- {
- ec.close();
- }
+ timer.cancel();
}
+
long finishTime = System.currentTimeMillis();
long totalTime = (finishTime - startTime);
@@ -217,9 +170,10 @@
}
/**
- * Export the entries in a single entry container, in other words from
+ * Export the entries in a single entry entryContainer, in other words from
* one of the base DNs.
- * @param entryContainer The entry container of those entries to be exported.
+ * @param entryContainer The entry container that holds the entries to be
+ * exported.
* @throws DatabaseException If an error occurs in the JE database.
* @throws IOException If an error occurs while writing an entry.
* @throws LDIFException If an error occurs while trying to determine
--
Gitblit v1.10.0