From cc21522ea71015c75a82ebf285644fa5ff57f46a Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 30 Sep 2013 15:30:32 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB

---
 opends/src/server/org/opends/server/replication/server/ReplicationServer.java |  113 ++------------------------------------------------------
 1 files changed, 5 insertions(+), 108 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 4cc7ad4..ead8133 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -65,7 +65,6 @@
 import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.types.ResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -143,17 +142,6 @@
   private long monitoringPublisherPeriod = 3000;
 
   /**
-   * The handler of the changelog database, the database stores the relation
-   * between a change number and the associated cookie.
-   * <p>
-   * Guarded by cnIndexDBLock
-   */
-  private ChangeNumberIndexDB cnIndexDB;
-
-  /** Used for protecting {@link ChangeNumberIndexDB} related state. */
-  private final Object cnIndexDBLock = new Object();
-
-  /**
    * The tracer object for the debug logger.
    */
   private static final DebugTracer TRACER = getTracer();
@@ -645,29 +633,6 @@
       DirectoryServer.deregisterWorkflowElement(eclwe);
       eclwe.finalizeWorkflowElement();
     }
-
-    shutdownCNIndexDB();
-  }
-
-  private void shutdownCNIndexDB()
-  {
-    synchronized (cnIndexDBLock)
-    {
-      if (cnIndexDB != null)
-      {
-        try
-        {
-          cnIndexDB.shutdown();
-        }
-        catch (ChangelogException ignored)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.WARNING, ignored);
-          }
-        }
-      }
-    }
   }
 
   /**
@@ -802,34 +767,6 @@
   }
 
   /**
-   * Clears the generationId for the replicationServerDomain related to the
-   * provided baseDN.
-   *
-   * @param baseDN
-   *          The baseDN for which to delete the generationId.
-   */
-  public void clearGenerationId(DN baseDN)
-  {
-    synchronized (cnIndexDBLock)
-    {
-      if (cnIndexDB != null)
-      {
-        try
-        {
-          cnIndexDB.clear(baseDN);
-        }
-        catch (Exception ignored)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.WARNING, ignored);
-          }
-        }
-      }
-    }
-  }
-
-  /**
    * Retrieves the time after which changes must be deleted from the
    * persistent storage (in milliseconds).
    *
@@ -1282,27 +1219,7 @@
       rsd.clearDbs();
     }
 
-    synchronized (cnIndexDBLock)
-    {
-      if (cnIndexDB != null)
-      {
-        try
-        {
-          cnIndexDB.clear();
-        }
-        catch (Exception ignored)
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugCaught(DebugLogLevel.WARNING, ignored);
-          }
-        }
-
-        shutdownCNIndexDB();
-
-        cnIndexDB = null;
-      }
-    }
+    this.changelogDB.clearCNIndexDB();
   }
 
   /**
@@ -1508,29 +1425,10 @@
    * changelog.
    *
    * @return the handler.
-   * @throws DirectoryException
-   *           when needed.
    */
-  ChangeNumberIndexDB getChangeNumberIndexDB() throws DirectoryException
+  ChangeNumberIndexDB getChangeNumberIndexDB()
   {
-    synchronized (cnIndexDBLock)
-    {
-      try
-      {
-        if (cnIndexDB == null)
-        {
-          cnIndexDB = this.changelogDB.newChangeNumberIndexDB();
-        }
-        return cnIndexDB;
-      }
-      catch (Exception e)
-      {
-        TRACER.debugCaught(DebugLogLevel.ERROR, e);
-        Message message =
-            ERR_CHANGENUMBER_DATABASE.get(e.getLocalizedMessage());
-        throw new DirectoryException(OPERATIONS_ERROR, message, e);
-      }
-    }
+    return this.changelogDB.getChangeNumberIndexDB();
   }
 
   /**
@@ -1567,14 +1465,13 @@
      *     replchangelog FROM that genState TO the crossDomainEligibleCSN
      *     (this diff is done domain by domain)
      */
-
-    final ChangeNumberIndexDB cnIndexDB = getChangeNumberIndexDB();
     try
     {
       boolean dbEmpty = true;
       long firstChangeNumber = 0;
       long lastChangeNumber = 0;
 
+      final ChangeNumberIndexDB cnIndexDB = getChangeNumberIndexDB();
       final CNIndexRecord firstCNRecord = cnIndexDB.getFirstRecord();
       final CNIndexRecord lastCNRecord = cnIndexDB.getLastRecord();
 
@@ -1657,7 +1554,7 @@
       {
         // The database was empty, just keep increasing numbers since last time
         // we generated one change number.
-        long lastGeneratedCN = this.cnIndexDB.getLastGeneratedChangeNumber();
+        long lastGeneratedCN = cnIndexDB.getLastGeneratedChangeNumber();
         firstChangeNumber += lastGeneratedCN;
         lastChangeNumber += lastGeneratedCN;
       }

--
Gitblit v1.10.0