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