From c08d1e4d46fcdef88a8b55f575320523215c7f5e Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 12 Nov 2013 16:43:19 +0000
Subject: [PATCH] JEChangelogDB.java: In CrossReplicaDBCursor.getCursorFrom(), let the ChangelogException go up. Made sure calls to TRACER.debugCaught() are done where an exception stacktrace would be lost otherwise.

---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java        |   42 ++++++++++++++-------
 opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java                |    6 +-
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicationDomainDB.java |    9 +++-
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java           |    6 +++
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java                |    3 +
 5 files changed, 46 insertions(+), 20 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
index f11d2be..dbddd65 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
@@ -626,9 +626,10 @@
       return;
     }
 
-    DBCursor<UpdateMsg> cursor = rsDomain.getCursorFrom(previousCSN);
+    DBCursor<UpdateMsg> cursor = null;
     try
     {
+      cursor = rsDomain.getCursorFrom(previousCSN);
       int lookthroughCount = 0;
 
       // Walk through the changes
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index 88e07b3..8349e18 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -1281,9 +1281,12 @@
    * @param startAfterCSN
    *          Starting point for the cursor. If null, start from the oldest CSN
    * @return a non null {@link DBCursor}
+   * @throws ChangelogException
+   *           If a database problem happened
    * @see ReplicationDomainDB#getCursorFrom(DN, CSN)
    */
   public DBCursor<UpdateMsg> getCursorFrom(CSN startAfterCSN)
+      throws ChangelogException
   {
     return domainDB.getCursorFrom(baseDN, startAfterCSN);
   }
@@ -1302,9 +1305,12 @@
    *          Starting point for the replicaDB cursors. If null, start from the
    *          oldest CSN
    * @return a non null {@link DBCursor} going from oldest to newest CSN
+   * @throws ChangelogException
+   *           If a database problem happened
    * @see ReplicationDomainDB#getCursorFrom(DN, ServerState)
    */
   public DBCursor<UpdateMsg> getCursorFrom(ServerState startAfterServerState)
+      throws ChangelogException
   {
     return domainDB.getCursorFrom(baseDN, startAfterServerState);
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicationDomainDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicationDomainDB.java
index 45fd7f9..7ed476e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicationDomainDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ReplicationDomainDB.java
@@ -177,9 +177,12 @@
    *          Starting point for each ReplicaDB cursor. If null, start from the
    *          oldest CSN for each ReplicaDB cursor.
    * @return a non null {@link DBCursor}
+   * @throws ChangelogException
+   *           If a database problem happened
    * @see #getCursorFrom(DN, ServerState)
    */
-  DBCursor<UpdateMsg> getCursorFrom(DN baseDN, CSN startAfterCSN);
+  DBCursor<UpdateMsg> getCursorFrom(DN baseDN, CSN startAfterCSN)
+      throws ChangelogException;
 
   /**
    * Generates a {@link DBCursor} across all the replicaDBs for the specified
@@ -199,10 +202,12 @@
    *          replicaDB is null, then start from the oldest CSN for this
    *          replicaDB
    * @return a non null {@link DBCursor}
+   * @throws ChangelogException
+   *           If a database problem happened
    * @see #getCursorFrom(DN, CSN)
    */
   DBCursor<UpdateMsg> getCursorFrom(DN baseDN,
-      ServerState startAfterServerState);
+      ServerState startAfterServerState) throws ChangelogException;
 
   /**
    * for the specified serverId and replication domain.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
index c3b2f8d..30bdeff 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
@@ -35,6 +35,7 @@
 import org.opends.messages.Message;
 import org.opends.messages.MessageBuilder;
 import org.opends.server.config.ConfigException;
+import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.common.CSN;
 import org.opends.server.replication.common.ServerState;
 import org.opends.server.replication.protocol.UpdateMsg;
@@ -42,11 +43,13 @@
 import org.opends.server.replication.server.ReplicationServer;
 import org.opends.server.replication.server.changelog.api.*;
 import org.opends.server.types.DN;
+import org.opends.server.types.DebugLogLevel;
 import org.opends.server.util.Pair;
 import org.opends.server.util.StaticUtils;
 
 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.util.StaticUtils.*;
 
 /**
@@ -54,6 +57,8 @@
  */
 public class JEChangelogDB implements ChangelogDB, ReplicationDomainDB
 {
+  /** The tracer object for the debug logger. */
+  protected static final DebugTracer TRACER = getTracer();
 
   /**
    * {@link DBCursor} implementation that iterates across all the ReplicaDBs of
@@ -83,6 +88,7 @@
         });
 
     public CrossReplicaDBCursor(DN baseDN, ServerState startAfterServerState)
+        throws ChangelogException
     {
       this.baseDN = baseDN;
       for (int serverId : getDomainMap(baseDN).keySet())
@@ -94,22 +100,15 @@
     }
 
     private DBCursor<UpdateMsg> getCursorFrom(DN baseDN, int serverId,
-        CSN startAfterCSN)
+        CSN startAfterCSN) throws ChangelogException
     {
       JEReplicaDB replicaDB = getReplicaDB(baseDN, serverId);
       if (replicaDB != null)
       {
-        try
-        {
-          DBCursor<UpdateMsg> cursor =
-              replicaDB.generateCursorFrom(startAfterCSN);
-          cursor.next();
-          return cursor;
-        }
-        catch (ChangelogException e)
-        {
-          // ignored
-        }
+        DBCursor<UpdateMsg> cursor =
+            replicaDB.generateCursorFrom(startAfterCSN);
+        cursor.next();
+        return cursor;
       }
       return EMPTY_CURSOR;
     }
@@ -262,7 +261,10 @@
     }
     catch (Exception e)
     {
-      MessageBuilder mb = new MessageBuilder();
+      if (debugEnabled())
+        TRACER.debugCaught(DebugLogLevel.ERROR, e);
+
+      final MessageBuilder mb = new MessageBuilder();
       mb.append(e.getLocalizedMessage());
       mb.append(" ");
       mb.append(String.valueOf(dbDirectory));
@@ -410,6 +412,9 @@
     }
     catch (ChangelogException e)
     {
+      if (debugEnabled())
+        TRACER.debugCaught(DebugLogLevel.ERROR, e);
+
       logError(ERR_COULD_NOT_READ_DB.get(this.dbDirectory.getAbsolutePath(),
           e.getLocalizedMessage()));
     }
@@ -537,6 +542,8 @@
           {
             firstException = e;
           }
+          else if (debugEnabled())
+            TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
         cnIndexDB = null;
@@ -682,6 +689,8 @@
           {
             firstException = e;
           }
+          else if (debugEnabled())
+            TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
       }
     }
@@ -697,6 +706,8 @@
       {
         firstException = e;
       }
+      else if (debugEnabled())
+        TRACER.debugCaught(DebugLogLevel.ERROR, e);
     }
 
     if (firstException != null)
@@ -748,6 +759,8 @@
         }
         catch (Exception e)
         {
+          if (debugEnabled())
+            TRACER.debugCaught(DebugLogLevel.ERROR, e);
           logError(ERR_CHANGENUMBER_DATABASE.get(e.getLocalizedMessage()));
         }
       }
@@ -765,6 +778,7 @@
   /** {@inheritDoc} */
   @Override
   public DBCursor<UpdateMsg> getCursorFrom(DN baseDN, CSN startAfterCSN)
+      throws ChangelogException
   {
     // Builds a new serverState for all the serverIds in the replication domain
     // to ensure we get cursors starting after the provided CSN.
@@ -774,7 +788,7 @@
   /** {@inheritDoc} */
   @Override
   public DBCursor<UpdateMsg> getCursorFrom(DN baseDN,
-      ServerState startAfterServerState)
+      ServerState startAfterServerState) throws ChangelogException
   {
     return new CrossReplicaDBCursor(baseDN, startAfterServerState);
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
index 24fcac3..fe6661e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
@@ -1248,7 +1248,7 @@
       // FIXME ECL In the handshake phase two, should RS send back a topo msg ?
       if (debugEnabled())
       {
-        TRACER.debugInfo("RB HANDSHAKE SENT:\n" + startECLSessionMsg);
+        debugInfo("RB HANDSHAKE SENT:\n" + startECLSessionMsg);
       }
 
       // Alright set the timeout to the desired value
@@ -1310,11 +1310,11 @@
       /*
        * Read the TopologyMsg that should come back.
        */
-      TopologyMsg topologyMsg = (TopologyMsg) localSession.receive();
+      final TopologyMsg topologyMsg = (TopologyMsg) localSession.receive();
 
       if (debugEnabled())
       {
-        TRACER.debugInfo("RB HANDSHAKE SENT:\n" + startSessionMsg
+        debugInfo("RB HANDSHAKE SENT:\n" + startSessionMsg
             + "\nAND RECEIVED:\n" + topologyMsg);
       }
 

--
Gitblit v1.10.0