From bbdea5461dbaf2a6aabe39efe4072ded78e4105a Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Thu, 20 Mar 2008 08:05:40 +0000
Subject: [PATCH] Fix 3053 Changes lost after dsreplication initialize Description In the Replication Server, reseting generation ID must clear the database of changes ONLY if the replication server has not the same generation ID has the one set by the reset message.

---
 opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java |   48 +++++++++++++++++++-----------------------------
 1 files changed, 19 insertions(+), 29 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index 5e70f1f..5e7f1c7 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -426,7 +426,8 @@
           " has servers connected to it - will not reset generationId");
     }
 
-    if ((!lDAPServersConnectedInTheTopology) && (!this.generationIdSavedStatus))
+    if ((!lDAPServersConnectedInTheTopology) && (!this.generationIdSavedStatus)
+        && (generationId != -1))
     {
       setGenerationId(-1, false);
     }
@@ -1109,20 +1110,24 @@
           " baseDN=" + baseDn +
           " RCache.set GenerationId=" + generationId);
 
-      if (generationId == this.generationId)
-        return;
-
-      if (this.generationId>0)
+      if (this.generationId != generationId)
       {
+        // we are changing of genId
+        clearDbs();
+
+        this.generationId = generationId;
+        this.generationIdSavedStatus = savedStatus;
+
+        // they have a generationId different from the reference one
         for (ServerHandler handler : connectedServers.values())
         {
-          handler.warnBadGenerationId();
+          if (generationId != handler.getGenerationId())
+          {
+            // Notify our remote LS that from now on have a different genID
+            handler.warnBadGenerationId();
+          }
         }
       }
-
-      this.generationId = generationId;
-      this.generationIdSavedStatus = savedStatus;
-
     }
 
     /**
@@ -1137,20 +1142,9 @@
     {
       long newGenId = genIdMsg.getGenerationId();
 
-      if (debugEnabled())
-        TRACER.debugInfo(
-            "In " + this.replicationServer.getMonitorInstanceName() +
-            " baseDN=" + baseDn +
-            " RCache.resetGenerationId received new ref genId="  + newGenId);
-
-      // Notifies the remote LDAP servers that from now on
-      // they have a generationId different from the reference one
-      for (ServerHandler handler : connectedServers.values())
+      if (newGenId != this.generationId)
       {
-        if (newGenId != handler.getGenerationId())
-        {
-          handler.warnBadGenerationId();
-        }
+        this.setGenerationId(newGenId, false);
       }
 
       // If we are the first replication server warned,
@@ -1159,6 +1153,8 @@
       {
         try
         {
+          // After we'll have send the mssage , the remote RS will adopt
+          // the new genId
           rsHandler.setGenerationId(newGenId);
           if (senderHandler.isLDAPserver())
           {
@@ -1171,12 +1167,6 @@
               get(rsHandler.getMonitorInstanceName()));
         }
       }
-
-      clearDbs();
-
-      // Reset the in memory domain generationId
-      generationId = newGenId;
-
     }
 
     /**

--
Gitblit v1.10.0