From 29153572096d718224d691026231550ade7ae4b4 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 18 Dec 2014 10:10:19 +0000
Subject: [PATCH] OPENDJ-1602 New pluggable storage based backend
---
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/ExportJob.java | 56 ++++++++++++++++++++++++++++++++------------------------
1 files changed, 32 insertions(+), 24 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/ExportJob.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/ExportJob.java
index 36585c6..8a60cc4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/ExportJob.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/ExportJob.java
@@ -35,7 +35,8 @@
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.ByteString;
import org.opends.server.backends.pluggable.spi.Cursor;
-import org.opends.server.backends.pluggable.spi.Storage;
+import org.opends.server.backends.pluggable.spi.ReadOperation;
+import org.opends.server.backends.pluggable.spi.ReadableStorage;
import org.opends.server.backends.pluggable.spi.StorageRuntimeException;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
@@ -95,14 +96,12 @@
throws IOException, LDIFException, StorageRuntimeException
{
List<DN> includeBranches = exportConfig.getIncludeBranches();
- DN baseDN;
- ArrayList<EntryContainer> exportContainers =
- new ArrayList<EntryContainer>();
+ final ArrayList<EntryContainer> exportContainers = new ArrayList<EntryContainer>();
for (EntryContainer entryContainer : rootContainer.getEntryContainers())
{
// Skip containers that are not covered by the include branches.
- baseDN = entryContainer.getBaseDN();
+ DN baseDN = entryContainer.getBaseDN();
if (includeBranches == null || includeBranches.isEmpty())
{
@@ -128,29 +127,40 @@
// Start a timer for the progress report.
Timer timer = new Timer();
TimerTask progressTask = new ProgressTask();
- timer.scheduleAtFixedRate(progressTask, progressInterval,
- progressInterval);
+ timer.scheduleAtFixedRate(progressTask, progressInterval, progressInterval);
// Iterate through the containers.
try
{
- for (EntryContainer exportContainer : exportContainers)
+ rootContainer.getStorage().read(new ReadOperation<Void>()
{
- if (exportConfig.isCancelled())
+ @Override
+ public Void run(ReadableStorage txn) throws Exception
{
- break;
- }
+ for (EntryContainer exportContainer : exportContainers)
+ {
+ if (exportConfig.isCancelled())
+ {
+ break;
+ }
- exportContainer.sharedLock.lock();
- try
- {
- exportContainer(exportContainer);
+ exportContainer.sharedLock.lock();
+ try
+ {
+ exportContainer(txn, exportContainer);
+ }
+ finally
+ {
+ exportContainer.sharedLock.unlock();
+ }
+ }
+ return null;
}
- finally
- {
- exportContainer.sharedLock.unlock();
- }
- }
+ });
+ }
+ catch (Exception e)
+ {
+ throw new StorageRuntimeException(e);
}
finally
{
@@ -181,12 +191,10 @@
* @throws LDIFException If an error occurs while trying to determine
* whether to write an entry.
*/
- private void exportContainer(EntryContainer entryContainer)
+ private void exportContainer(ReadableStorage txn, EntryContainer entryContainer)
throws StorageRuntimeException, IOException, LDIFException
{
- Storage storage = entryContainer.getStorage();
-
- Cursor cursor = storage.openCursor(entryContainer.getID2Entry().getName());
+ Cursor cursor = txn.openCursor(entryContainer.getID2Entry().getName());
try
{
while (cursor.next())
--
Gitblit v1.10.0