From e7dcb1cb66a87ce2b0144cf9862b4296ea7a715c Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Tue, 29 Sep 2009 08:32:17 +0000
Subject: [PATCH] #4250 Entry not replicated after initializations / not systematic

---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java       |   13 ++++--
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java |   44 ++++++++++++---------
 opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java      |   10 +++++
 3 files changed, 44 insertions(+), 23 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java
index 65cfa2c..2c12cc5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java
@@ -59,6 +59,10 @@
  */
 public class DataServerHandler extends ServerHandler
 {
+  // Temporay generationId received in handshake/phase1,
+  // and used after handshake/phase2
+  long tmpGenerationId;
+
   // Status of this DS (only used if this server handler represents a DS)
   private ServerStatus status = ServerStatus.INVALID_STATUS;
 
@@ -409,7 +413,7 @@
   public boolean processStartFromRemote(ServerStartMsg serverStartMsg)
   throws DirectoryException
   {
-    generationId = serverStartMsg.getGenerationId();
+    tmpGenerationId = serverStartMsg.getGenerationId();
     protocolVersion = ProtocolVersion.minWithCurrent(
         serverStartMsg.getVersion());
     serverId = serverStartMsg.getServerId();
@@ -474,6 +478,9 @@
       boolean sessionInitiatorSSLEncryption =
         processStartFromRemote(inServerStartMsg);
 
+      // lock with no timeout
+      lockDomain(false);
+
       localGenerationId = replicationServerDomain.getGenerationId();
       oldGenerationId = localGenerationId;
 
@@ -490,9 +497,6 @@
         return;
       }
 
-      // lock with no timeout
-      lockDomain(false);
-
       //
       ReplServerStartMsg outReplServerStartMsg = null;
       try
@@ -652,6 +656,7 @@
      *   (unsaved yet on disk . will be set with the 1rst change
      * received)
      */
+    generationId = tmpGenerationId;
     if (localGenerationId > 0)
     {
       if (generationId != localGenerationId)
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 11442a6..086c3e6 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
@@ -1835,20 +1835,23 @@
   {
     for (DataServerHandler handler : directoryServers.values())
     {
-      if ((notThisOne == null) || // All DSs requested
-        ((notThisOne != null) && (handler != notThisOne)))
-      // All except passed one
+      if (handler.getStatus() != ServerStatus.NOT_CONNECTED_STATUS)
       {
-        TopologyMsg topoMsg = createTopologyMsgForDS(handler.getServerId());
-        try
+        if ((notThisOne == null) || // All DSs requested
+          ((notThisOne != null) && (handler != notThisOne)))
+        // All except passed one
         {
-          handler.sendTopoInfo(topoMsg);
-        } catch (IOException e)
-        {
-          Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
+          TopologyMsg topoMsg = createTopologyMsgForDS(handler.getServerId());
+          try
+          {
+            handler.sendTopoInfo(topoMsg);
+          } catch (IOException e)
+          {
+            Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
             baseDn.toString(),
             "directory", Short.toString(handler.getServerId()), e.getMessage());
-          logError(message);
+            logError(message);
+          }
         }
       }
     }
@@ -1863,16 +1866,19 @@
     TopologyMsg topoMsg = createTopologyMsgForRS();
     for (ReplicationServerHandler handler : replicationServers.values())
     {
-      try
+      if (handler.getStatus() != ServerStatus.NOT_CONNECTED_STATUS)
       {
-        handler.sendTopoInfo(topoMsg);
-      } catch (IOException e)
-      {
-        Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
-          baseDn.toString(),
-          "replication", Short.toString(handler.getServerId()),
-          e.getMessage());
-        logError(message);
+        try
+        {
+          handler.sendTopoInfo(topoMsg);
+        } catch (IOException e)
+        {
+          Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
+            baseDn.toString(),
+            "replication", Short.toString(handler.getServerId()),
+            e.getMessage());
+          logError(message);
+        }
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
index b2254b0..c39d447 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
@@ -1938,6 +1938,16 @@
       genIdMessage = new ResetGenerationIdMsg(generationIdNewValue);
     }
     broker.publish(genIdMessage);
+
+    // check that at least one ReplicationServer did change its generation-id
+    if (generationIdNewValue == null)
+    {
+      checkGenerationID(this.getGenerationID());
+    }
+    else
+    {
+      checkGenerationID(generationIdNewValue);
+    }
   }
 
 

--
Gitblit v1.10.0