From 9e7f24ceaf81315e49decb9ebb7aed54c25b5dee Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 08 Oct 2013 15:07:11 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB

---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java  |    9 +---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java                   |   13 ++----
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/CNIndexRecord.java        |   24 ++++++++++--
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDB.java |   15 ++++---
 4 files changed, 35 insertions(+), 26 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index 4956770..aa79495 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -1384,17 +1384,12 @@
   private void assignNewChangeNumberAndStore(ECLUpdateMsg change)
       throws ChangelogException
   {
-    ChangeNumberIndexDB cnIndexDB = replicationServer.getChangeNumberIndexDB();
-
-    change.setChangeNumber(cnIndexDB.nextChangeNumber());
-
+    final CNIndexRecord record = new CNIndexRecord(previousCookie.toString(),
+        change.getBaseDN(), change.getUpdateMsg().getCSN());
     // store in CNIndexDB the pair
     // (change number of the current change, state before this change)
-    cnIndexDB.addRecord(new CNIndexRecord(
-        change.getChangeNumber(),
-        previousCookie.toString(),
-        change.getBaseDN(),
-        change.getUpdateMsg().getCSN()));
+    change.setChangeNumber(
+        replicationServer.getChangeNumberIndexDB().addRecord(record));
   }
 
   /**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/CNIndexRecord.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/CNIndexRecord.java
index 7bd5bc0..eb057d7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/CNIndexRecord.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/CNIndexRecord.java
@@ -37,10 +37,10 @@
 {
 
   /** This is the key used to store the rest of the . */
-  private long changeNumber;
-  private String previousCookie;
-  private DN baseDN;
-  private CSN csn;
+  private final long changeNumber;
+  private final String previousCookie;
+  private final DN baseDN;
+  private final CSN csn;
 
   /**
    * Builds an instance of this class.
@@ -64,6 +64,22 @@
   }
 
   /**
+   * Builds an instance of this class, with changeNumber equal to 0.
+   *
+   * @param previousCookie
+   *          the previous cookie
+   * @param baseDN
+   *          the baseDN
+   * @param csn
+   *          the replication CSN field
+   * @see #CNIndexRecord(long, String, DN, CSN)
+   */
+  public CNIndexRecord(String previousCookie, DN baseDN, CSN csn)
+  {
+    this(0, previousCookie, baseDN, csn);
+  }
+
+  /**
    * Getter for the baseDN field.
    *
    * @return the baseDN
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
index 83d428b..0cbd405 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
@@ -42,12 +42,6 @@
  */
 public interface ChangeNumberIndexDB
 {
-  /**
-   * Generates the next change number.
-   *
-   * @return The newly generated change number
-   */
-  long nextChangeNumber();
 
   /**
    * Returns the last generated change number.
@@ -96,10 +90,11 @@
    *
    * @param record
    *          The {@link CNIndexRecord} to add to this DB.
+   * @return the change number associated to this record on adding to this DB
    * @throws ChangelogException
    *           if a database problem occurs.
    */
-  void addRecord(CNIndexRecord record) throws ChangelogException;
+  long addRecord(CNIndexRecord record) throws ChangelogException;
 
   /**
    * Generate a new {@link ChangeNumberIndexDBCursor} that allows to browse the
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDB.java
index daf3f0a..a6e9d17 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDB.java
@@ -153,12 +153,17 @@
 
   /** {@inheritDoc} */
   @Override
-  public void addRecord(CNIndexRecord record) throws ChangelogException
+  public long addRecord(CNIndexRecord record) throws ChangelogException
   {
-    db.addRecord(record);
+    long changeNumber = nextChangeNumber();
+    final CNIndexRecord newRecord =
+        new CNIndexRecord(changeNumber, record.getPreviousCookie(), record
+            .getBaseDN(), record.getCSN());
+    db.addRecord(newRecord);
 
     if (debugEnabled())
-      TRACER.debugInfo("In JEChangeNumberIndexDB.add, added: " + record);
+      TRACER.debugInfo("In JEChangeNumberIndexDB.add, added: " + newRecord);
+    return changeNumber;
   }
 
   /** {@inheritDoc} */
@@ -175,9 +180,7 @@
     return db.readLastRecord();
   }
 
-  /** {@inheritDoc} */
-  @Override
-  public long nextChangeNumber()
+  private long nextChangeNumber()
   {
     return lastGeneratedChangeNumber.incrementAndGet();
   }

--
Gitblit v1.10.0