From bd724fad0c954f1e607a0a90cbca3eb41d1f2460 Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Mon, 17 Sep 2007 08:00:37 +0000
Subject: [PATCH] Fixes repl init and total update #2253 #845 #1733

---
 opends/src/server/org/opends/server/replication/server/ReplicationCache.java |   95 +++++++++++++++++++++++------------------------
 1 files changed, 46 insertions(+), 49 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationCache.java b/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
index 990eb1f..6fd8925 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
@@ -959,19 +959,6 @@
     }
 
     /**
-     * Sets the replication server informations for the provided
-     * handler from the provided ReplServerInfoMessage.
-     *
-     * @param handler The server handler from which the info was received.
-     * @param infoMsg The information message that was received.
-     */
-    public void setReplServerInfo(
-        ServerHandler handler, ReplServerInfoMessage infoMsg)
-    {
-      handler.setReplServerInfo(infoMsg);
-    }
-
-    /**
      * Sets the provided value as the new in memory generationId.
      *
      * @param generationId The new value of generationId.
@@ -1007,20 +994,27 @@
      *
      * @param senderHandler The handler associated to the server
      *        that requested to reset the generationId.
+     * @param genIdMsg The reset generation ID msg received.
      */
-    public void resetGenerationId(ServerHandler senderHandler)
+    public void resetGenerationId(ServerHandler senderHandler,
+        ResetGenerationId genIdMsg)
     {
+      long newGenId = genIdMsg.getGenerationId();
+
       if (debugEnabled())
         TRACER.debugInfo(
           "In " + this.replicationServer.getMonitorInstanceName() +
           " baseDN=" + baseDn +
-          " RCache.resetGenerationId");
+          " RCache.resetGenerationId received new ref genId="  + newGenId);
 
       // Notifies the others LDAP servers that from now on
       // they have the bad generationId
       for (ServerHandler handler : connectedServers.values())
       {
-        handler.resetGenerationId();
+        if (newGenId != handler.getGenerationId())
+        {
+          handler.resetGenerationId();
+        }
       }
 
       // Propagates the reset message to the others replication servers
@@ -1031,7 +1025,7 @@
         {
           try
           {
-            handler.sendGenerationId(new ResetGenerationId());
+            handler.sendGenerationId(genIdMsg);
           }
           catch (IOException e)
           {
@@ -1041,45 +1035,48 @@
         }
       }
 
-      // Reset the localchange and state db for the current domain
-      synchronized (sourceDbHandlers)
+      if (this.generationId != newGenId)
       {
-        for (DbHandler dbHandler : sourceDbHandlers.values())
+        // Reset the localchange and state db for the current domain
+        synchronized (sourceDbHandlers)
         {
-          try
+          for (DbHandler dbHandler : sourceDbHandlers.values())
           {
-            dbHandler.clear();
+            try
+            {
+              dbHandler.clear();
+            }
+            catch (Exception e)
+            {
+              // TODO: i18n
+              logError(Message.raw(
+                  "Exception caught while clearing dbHandler:" +
+                  e.getLocalizedMessage()));
+            }
           }
-          catch (Exception e)
-          {
-            // TODO: i18n
-            logError(Message.raw(
-                "Exception caught while clearing dbHandler:" +
-                e.getLocalizedMessage()));
-          }
+          sourceDbHandlers.clear();
+
+          if (debugEnabled())
+            TRACER.debugInfo(
+                "In " + this.replicationServer.getMonitorInstanceName() +
+                " baseDN=" + baseDn +
+            " The source db handler has been cleared");
         }
-        sourceDbHandlers.clear();
+        try
+        {
+          replicationServer.clearGenerationId(baseDn);
+        }
+        catch (Exception e)
+        {
+          // TODO: i18n
+          logError(Message.raw(
+              "Exception caught while clearing generationId:" +
+              e.getLocalizedMessage()));
+        }
 
-        if (debugEnabled())
-          TRACER.debugInfo(
-              "In " + this.replicationServer.getMonitorInstanceName() +
-              " baseDN=" + baseDn +
-              " The source db handler has been cleared");
+        // Reset the in memory domain generationId
+        generationId = newGenId;
       }
-      try
-      {
-        replicationServer.clearGenerationId(baseDn);
-      }
-      catch (Exception e)
-      {
-        // TODO: i18n
-        logError(Message.raw(
-            "Exception caught while clearing generationId:" +
-            e.getLocalizedMessage()));
-      }
-
-      // Reset the in memory domain generationId
-      generationId = -1;
     }
 
     /**

--
Gitblit v1.10.0