From 69ebea4017b17653a1b966b7a83372eb9ce0dcdc Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 05 Nov 2013 10:51:08 +0000
Subject: [PATCH] ECLServerHandler.java, ReplicationServerDomain.java: Renamed variables and changed comments to match the new terminology. Added more comments to explain what the code is doing.

---
 opends/src/server/org/opends/server/replication/server/ECLServerHandler.java |   88 ++++++++++++++++++++++++++++----------------
 1 files changed, 56 insertions(+), 32 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index e8c6aa4..98bc563 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -58,13 +58,33 @@
 public final class ECLServerHandler extends ServerHandler
 {
 
+  /**
+   * Marks the end of the search on the External Change Log.
+   */
   private static int UNDEFINED_PHASE = 0;
   /**
-   * Constant used to indicate the handler is in the ECL initialization phase.
+   * The External Change Log initialization phase currently reads the changes
+   * from all the ReplicaDBs from oldest to newest and then:
+   * <ul>
+   * <li>Matches each ReplicaDBs change with the corresponding record in
+   * {@link ChangeNumberIndexDB}, then assign its changeNumber in memory before
+   * returning the change to the client</li>
+   * <li>Once it reaches the end of the {@link ChangeNumberIndexDB}, it inserts
+   * each ReplicaDBs change in the {@link ChangeNumberIndexDB} and gets back and
+   * assign the changeNumber in memory to the ReplicaDBs change.</li>
+   * </ul>
+   * Once this phase is over the current search moves to the
+   * {@link #UNDEFINED_PHASE} or the {@link #PERSISTENT_PHASE} depending on the
+   * search type.
    *
    * @see #getSearchPhase()
    */
   public static int INIT_PHASE = 1;
+  /**
+   * The persistent phase is only used for persistent searches on the External
+   * ChangeLog. It comes after the {@link #INIT_PHASE} and sends back to the
+   * client newly added changes to the {@link ChangeNumberIndexDB}.
+   */
   private static int PERSISTENT_PHASE = 2;
 
   /**
@@ -111,8 +131,8 @@
   private Set<String> excludedBaseDNs = new HashSet<String>();
 
   /**
-   * Eligible CSN - only changes older or equal to eligibleCSN * are published
-   * in the ECL.
+   * Eligible CSN - only changes older or equal to eligibleCSN are published in
+   * the ECL.
    */
   private CSN eligibleCSN;
 
@@ -1203,6 +1223,9 @@
         if (draftCompat)
         {
           continueLooping = !assignChangeNumber(change);
+          // if we encounter a change that has been trimmed from the replicaDBs,
+          // we will skip it and loop to the next oldest change from the
+          // replicaDBs
         }
 
         // here we have the right oldest change
@@ -1288,34 +1311,34 @@
    * Either retrieves a change number from the DB, or assign a new change number
    * and store in the DB.
    *
-   * @param oldestChange
-   *          the oldestChange where to assign the change number
+   * @param replicaDBChange
+   *          the replica DB change to find in the {@link ChangeNumberIndexDB}
+   *          where to assign the change number
    * @return <code>true</code> if a change number has been assigned to the
-   *         provided oldestChange, <code>false</code> otherwise
+   *         provided replicaDBChange, <code>false</code> otherwise
    * @throws DirectoryException
    *           if any problem occur
    * @throws ChangelogException
    *           if a database problem occurs.
    */
-  private boolean assignChangeNumber(final ECLUpdateMsg oldestChange)
+  private boolean assignChangeNumber(final ECLUpdateMsg replicaDBChange)
       throws ChangelogException
   {
-    // We also need to check if the CNIndexDB is consistent with the
-    // changelogDB. If not, 2 potential reasons:
-    // a/ changelog has been purged (trim) let's traverse the CNIndexDB
+    // We also need to check if the CNIndexDB is consistent with the replicaDBs.
+    // If not, 2 potential reasons:
+    // a/ replicaDBs have been purged (trim) let's traverse the CNIndexDB
     // b/ changelog is late ... let's traverse the changelogDb
     // The following loop allows to loop until being on the same cn in the 2 dbs
 
-    // replogCSN : the oldest change from the changelog db
-    CSN csnFromChangelogDb = oldestChange.getUpdateMsg().getCSN();
-    DN dnFromChangelogDb = oldestChange.getBaseDN();
+    CSN csnFromReplicaDB = replicaDBChange.getUpdateMsg().getCSN();
+    DN dnFromReplicaDB = replicaDBChange.getBaseDN();
 
     while (true)
     {
       if (isEndOfCNIndexDBReached)
       {
         // we are at the end of the CNIndexDB in the append mode
-        assignNewChangeNumberAndStore(oldestChange);
+        assignNewChangeNumberAndStore(replicaDBChange);
         return true;
       }
 
@@ -1324,43 +1347,44 @@
       final DN dnFromCNIndexDB = currentRecord.getBaseDN();
 
       if (debugEnabled())
-        TRACER.debugInfo("assignChangeNumber() comparing the 2 db DNs :"
-            + dnFromChangelogDb + "?=" + dnFromCNIndexDB + " timestamps:"
-            + asDate(csnFromChangelogDb) + " ?older"
+        TRACER.debugInfo("assignChangeNumber() comparing the replicaDB's and"
+            + " CNIndexDB's DNs :" + dnFromReplicaDB + "?=" + dnFromCNIndexDB
+            + " timestamps:" + asDate(csnFromReplicaDB) + " ?older"
             + asDate(csnFromCNIndexDB));
 
-      if (areSameChange(csnFromChangelogDb, dnFromChangelogDb,
-          csnFromCNIndexDB, dnFromCNIndexDB))
+      if (areSameChange(csnFromReplicaDB, dnFromReplicaDB, csnFromCNIndexDB,
+          dnFromCNIndexDB))
       {
+        // We matched the ReplicaDB change with a record in the CNIndexDB
+        // => set the changeNumber in memory and return the change to the client
         if (debugEnabled())
           TRACER.debugInfo("assignChangeNumber() assigning changeNumber="
-              + currentRecord.getChangeNumber() + " to change=" + oldestChange);
+              + currentRecord.getChangeNumber() + " to change="
+              + replicaDBChange);
 
-        oldestChange.setChangeNumber(currentRecord.getChangeNumber());
+        replicaDBChange.setChangeNumber(currentRecord.getChangeNumber());
         return true;
       }
 
 
-      if (!csnFromCNIndexDB.isOlderThan(csnFromChangelogDb))
+      if (!csnFromCNIndexDB.isOlderThan(csnFromReplicaDB))
       {
-        // the change from the changelogDb is older
+        // the change from the replicaDB is older
         // it should have been stored lately
-        // let's continue to traverse the changelogDB
+        // let's continue to traverse the replicaDBs
         if (debugEnabled())
-          TRACER.debugInfo("assignChangeNumber() will skip "
-              + csnFromChangelogDb
+          TRACER.debugInfo("assignChangeNumber() will skip " + csnFromReplicaDB
               + " and read next change from the regular changelog.");
         return false; // TO BE CHECKED
       }
 
 
-      // the change from the CNIndexDB is older
-      // that means that the change has been purged from the
-      // changelogDb (and CNIndexDB not yet been trimmed)
+      // The change from the CNIndexDB is older.
+      // It means that the CNIndexDB change has been purged from the replicaDB
+      // and CNIndexDB has not been trimmed yet.
       try
       {
-        // let's traverse the CNIndexDB searching for the change
-        // found in the changelogDB
+        // keep traversing the CNIndexDB searching for the replicaDB change
         if (debugEnabled())
           TRACER.debugInfo("assignChangeNumber() will skip " + csnFromCNIndexDB
               + " and read next change from the CNIndexDB.");
@@ -1380,7 +1404,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
         // FIXME There is an opportunity for an infinite loop here if the DB
-        // continuously throws DatabaseExceptions
+        // continuously throws ChangelogExceptions
       }
     }
   }

--
Gitblit v1.10.0