From e55bf44a419dc71f5a5afea590095a6b8064310a Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 14 Aug 2013 14:22:52 +0000
Subject: [PATCH] ReplicationServerDomain.java Renamed directoryServers to connectedDSs. Renamed replicationServers to connectedRSs. Removed the useless getConnectedLDAPservers(), replaced with getConnectedDSs(). Renamed a few local variables.

---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java |  179 +++++++++++++++++++++++++----------------------------------
 1 files changed, 77 insertions(+), 102 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 2dbda07..8ec6405 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
@@ -29,7 +29,6 @@
 
 import java.io.IOException;
 import java.util.*;
-import java.util.zip.DataFormatException;
 
 import org.opends.messages.Message;
 import org.opends.server.replication.common.*;
@@ -39,6 +38,7 @@
 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.replication.common.ServerStatus.*;
 import static org.opends.server.replication.common.StatusMachine.*;
 import static org.opends.server.replication.protocol.ProtocolVersion.*;
 
@@ -92,76 +92,10 @@
    */
   public void changeStatusForResetGenId(long newGenId) throws IOException
   {
-    final int localRsServerId = replicationServer.getServerId();
-
-    StatusMachineEvent event;
-    if (newGenId == -1)
+    StatusMachineEvent event = getStatusMachineEvent(newGenId);
+    if (event == null)
     {
-      // The generation id is being made invalid, let's put the DS
-      // into BAD_GEN_ID_STATUS
-      event = StatusMachineEvent.TO_BAD_GEN_ID_STATUS_EVENT;
-    } else
-    {
-      if (newGenId == generationId)
-      {
-        if (status == ServerStatus.BAD_GEN_ID_STATUS)
-        {
-          // This server has the good new reference generation id.
-          // Close connection with him to force his reconnection: DS will
-          // reconnect in NORMAL_STATUS or DEGRADED_STATUS.
-
-          if (debugEnabled())
-          {
-            TRACER.debugInfo(
-                "In RS " + localRsServerId +
-                ", closing connection to DS " + getServerId() +
-                " for baseDn " + getBaseDN() +
-                " to force reconnection as new local" +
-                " generationId and remote one match and DS is in bad gen id: " +
-                newGenId);
-          }
-
-          // Connection closure must not be done calling RSD.stopHandler() as it
-          // would rewait the RSD lock that we already must have entering this
-          // method. This would lead to a reentrant lock which we do not want.
-          // So simply close the session, this will make the hang up appear
-          // after the reader thread that took the RSD lock releases it.
-          if (session != null
-              // V4 protocol introduced a StopMsg to properly close the
-              // connection between servers
-             && getProtocolVersion() >= ProtocolVersion.REPLICATION_PROTOCOL_V4)
-          {
-            try
-            {
-              session.publish(new StopMsg());
-            }
-            catch (IOException ioe)
-            {
-              // Anyway, going to close session, so nothing to do
-            }
-          }
-
-          // NOT_CONNECTED_STATUS is the last one in RS session life: handler
-          // will soon disappear after this method call...
-          status = ServerStatus.NOT_CONNECTED_STATUS;
-          return;
-        } else
-        {
-          if (debugEnabled())
-          {
-            TRACER.debugInfo("In RS " + localRsServerId + ". DS "
-                + getServerId() + " for baseDn " + getBaseDN()
-                + " has already generation id " + newGenId
-                + " so no ChangeStatusMsg sent to him.");
-          }
-          return;
-        }
-      } else
-      {
-        // This server has a bad generation id compared to new reference one,
-        // let's put it into BAD_GEN_ID_STATUS
-        event = StatusMachineEvent.TO_BAD_GEN_ID_STATUS_EVENT;
-      }
+      return;
     }
 
     if (event == StatusMachineEvent.TO_BAD_GEN_ID_STATUS_EVENT
@@ -170,7 +104,7 @@
       // Prevent useless error message (full update status cannot lead to bad
       // gen status)
       Message message = NOTE_BAD_GEN_ID_IN_FULL_UPDATE.get(
-              Integer.toString(localRsServerId),
+              Integer.toString(replicationServer.getServerId()),
               getBaseDN(),
               Integer.toString(serverId),
               Long.toString(generationId),
@@ -179,30 +113,73 @@
       return;
     }
 
-    ServerStatus newStatus = StatusMachine.computeNewStatus(status, event);
+    changeStatus(event, "for reset gen id");
+  }
 
-    if (newStatus == ServerStatus.INVALID_STATUS)
+  private StatusMachineEvent getStatusMachineEvent(long newGenId)
+  {
+    if (newGenId == -1)
     {
-      Message msg = ERR_RS_CANNOT_CHANGE_STATUS.get(getBaseDN(),
-          Integer.toString(serverId), status.toString(), event.toString());
-      logError(msg);
-      return;
+      // The generation id is being made invalid, let's put the DS
+      // into BAD_GEN_ID_STATUS
+      return StatusMachineEvent.TO_BAD_GEN_ID_STATUS_EVENT;
+    }
+    if (newGenId != generationId)
+    {
+      // This server has a bad generation id compared to new reference one,
+      // let's put it into BAD_GEN_ID_STATUS
+      return StatusMachineEvent.TO_BAD_GEN_ID_STATUS_EVENT;
     }
 
-    // Send message requesting to change the DS status
-    ChangeStatusMsg csMsg = new ChangeStatusMsg(newStatus,
-        ServerStatus.INVALID_STATUS);
+    if (status != ServerStatus.BAD_GEN_ID_STATUS)
+    {
+      if (debugEnabled())
+      {
+        TRACER.debugInfo("In RS " + replicationServer.getServerId()
+            + ", DS " + getServerId() + " for baseDn " + getBaseDN()
+            + " has already generation id " + newGenId
+            + " so no ChangeStatusMsg sent to him.");
+      }
+      return null;
+    }
+
+    // This server has the good new reference generation id.
+    // Close connection with him to force his reconnection: DS will
+    // reconnect in NORMAL_STATUS or DEGRADED_STATUS.
 
     if (debugEnabled())
     {
-      TRACER.debugInfo("In RS " + localRsServerId
-          + " Sending change status for reset gen id to " + getServerId()
-          + " for baseDn " + getBaseDN() + ":\n" + csMsg);
+      TRACER.debugInfo("In RS " + replicationServer.getServerId()
+          + ", closing connection to DS " + getServerId() + " for baseDn "
+          + getBaseDN() + " to force reconnection as new local"
+          + " generationId and remote one match and DS is in bad gen id: "
+          + newGenId);
     }
 
-    session.publish(csMsg);
+    // Connection closure must not be done calling RSD.stopHandler() as it
+    // would rewait the RSD lock that we already must have entering this
+    // method. This would lead to a reentrant lock which we do not want.
+    // So simply close the session, this will make the hang up appear
+    // after the reader thread that took the RSD lock releases it.
+    if (session != null
+        // V4 protocol introduced a StopMsg to properly close the
+        // connection between servers
+        && getProtocolVersion() >= ProtocolVersion.REPLICATION_PROTOCOL_V4)
+    {
+      try
+      {
+        session.publish(new StopMsg());
+      }
+      catch (IOException ioe)
+      {
+        // Anyway, going to close session, so nothing to do
+      }
+    }
 
-    status = newStatus;
+    // NOT_CONNECTED_STATUS is the last one in RS session life: handler
+    // will soon disappear after this method call...
+    status = ServerStatus.NOT_CONNECTED_STATUS;
+    return null;
   }
 
   /**
@@ -215,6 +192,12 @@
   public ServerStatus changeStatusFromStatusAnalyzer(StatusMachineEvent event)
   throws IOException
   {
+    return changeStatus(event, "from status analyzer");
+  }
+
+  private ServerStatus changeStatus(StatusMachineEvent event, String origin)
+      throws IOException
+  {
     // Check state machine allows this new status (Sanity check)
     ServerStatus newStatus = StatusMachine.computeNewStatus(status, event);
     if (newStatus == ServerStatus.INVALID_STATUS)
@@ -222,22 +205,20 @@
       Message msg = ERR_RS_CANNOT_CHANGE_STATUS.get(getBaseDN(),
           Integer.toString(serverId), status.toString(), event.toString());
       logError(msg);
-      // Status analyzer must only change from NORMAL_STATUS to DEGRADED_STATUS
-      // and vice versa. We may are being trying to change the status while for
-      // instance another status has just been entered: e.g a full update has
-      // just been engaged. In that case, just ignore attempt to change the
-      // status
+      // Only change allowed is from NORMAL_STATUS to DEGRADED_STATUS and vice
+      // versa. We may be trying to change the status while another status has
+      // just been entered: e.g a full update has just been engaged.
+      // In that case, just ignore attempt to change the status
       return newStatus;
     }
 
     // Send message requesting to change the DS status
-    ChangeStatusMsg csMsg = new ChangeStatusMsg(newStatus,
-        ServerStatus.INVALID_STATUS);
+    ChangeStatusMsg csMsg = new ChangeStatusMsg(newStatus, INVALID_STATUS);
 
     if (debugEnabled())
     {
       TRACER.debugInfo("In RS " + replicationServer.getServerId()
-          + " Sending change status from status analyzer to " + getServerId()
+          + " Sending change status " + origin + " to " + getServerId()
           + " for baseDn " + getBaseDN() + ":\n" + csMsg);
     }
 
@@ -589,7 +570,7 @@
           localGenerationId, sslEncryption, getLocalGroupId(),
           replicationServer.getDegradedStatusThreshold(),
           replicationServer.getWeight(),
-          replicationServerDomain.getConnectedLDAPservers().size());
+          replicationServerDomain.getConnectedDSs().size());
     }
 
     send(startMsg);
@@ -626,16 +607,10 @@
    * receiving a StopMsg to properly stop the handshake procedure.
    * @return the startSessionMsg received or null DS sent a stop message to
    *         not finish the handshake.
-   * @throws DirectoryException
-   * @throws IOException
-   * @throws ClassNotFoundException
-   * @throws DataFormatException
-   * @throws NotSupportedOldVersionPDUException
+   * @throws Exception
    */
   private StartSessionMsg waitAndProcessStartSessionFromRemoteDS()
-  throws DirectoryException, IOException, ClassNotFoundException,
-  DataFormatException,
-  NotSupportedOldVersionPDUException
+      throws Exception
   {
     ReplicationMsg msg = session.receive();
 

--
Gitblit v1.10.0