From 32b028879371c5786d959504d97c93c22280a304 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 30 Oct 2013 14:24:06 +0000
Subject: [PATCH] DSInfo.java: Added cloneWithReplicationServerId().

---
 opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java |    9 +--
 opends/src/server/org/opends/server/replication/common/DSInfo.java                   |   16 +++++
 opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java |   78 +++++++++----------------
 opends/src/server/org/opends/server/replication/service/ReplicationDomain.java       |   19 ++---
 4 files changed, 55 insertions(+), 67 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/common/DSInfo.java b/opends/src/server/org/opends/server/replication/common/DSInfo.java
index 2340170..e4ecab5 100644
--- a/opends/src/server/org/opends/server/replication/common/DSInfo.java
+++ b/opends/src/server/org/opends/server/replication/common/DSInfo.java
@@ -239,6 +239,22 @@
   }
 
   /**
+   * Returns a new instance of {@link DSInfo} with the specified replication
+   * server Id.
+   *
+   * @param rsId
+   *          the replication server Id to set on the new DSInfo object.
+   * @return a new instance of {@link DSInfo} with the specified replication
+   *         server Id.
+   */
+  public DSInfo cloneWithReplicationServerId(int rsId)
+  {
+    return new DSInfo(dsId, dsUrl, rsId, generationId, status, assuredFlag,
+        assuredMode, safeDataLevel, groupId, refUrls, eclIncludes,
+        eclIncludesForDeletes, protocolVersion);
+  }
+
+  /**
    * Test if the passed object is equal to this one.
    * @param obj The object to test
    * @return True if both objects are equal
diff --git a/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java b/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
index a6c2ae5..e17a213 100644
--- a/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
@@ -27,17 +27,17 @@
  */
 package org.opends.server.replication.server;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.MonitorProvider;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.replication.common.AssuredMode;
 import org.opends.server.replication.common.DSInfo;
 import org.opends.server.replication.common.ServerState;
-import org.opends.server.replication.common.ServerStatus;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeBuilder;
 import org.opends.server.types.Attributes;
@@ -62,10 +62,7 @@
   private static final DebugTracer TRACER = getTracer();
 
   private final ReplicationServerHandler replServerHandler;
-  private final ReplicationServerDomain rsDomain;
 
-  /** Server id of this DS. */
-  private final int serverId;
   /** All the information for this DS. */
   private final DSInfo dsInfo;
 
@@ -74,44 +71,19 @@
    * connected to the remote Replication Server represented by
    * replServerHandler.
    *
-   * @param replServerHandler The server handler of the RS this remote DS is
-   * connected to
-   * @param replicationServerId The serverId of the RS this remote DS is
-   * connected to
-   * @param serverId The serverId of this remote DS.
-   * @param serverUrl The serverUrl of this remote DS.
-   * @param generationId The generation id of this remote DS.
-   * @param groupId The group id of the remote DS
-   * @param status The  id of the remote DS
-   * @param refUrls The exported referral URLs of the remote DS
-   * @param assuredFlag The assured flag of the remote DS
-   * @param assuredMode The assured mode of the remote DS
-   * @param safeDataLevel The safe data level of the remote DS
-   * @param eclInclude The list of entry attributes to be added to the ECL.
-   * @param eclIncludeForDeletes The list of entry attributes to be added to
-   *                             the ECL.
-   * @param protocolVersion The protocol version supported by the remote DS.
+   * @param replServerHandler
+   *          The server handler of the RS this remote DS is connected to
+   * @param dsInfo
+   *          all the info for the represented DS
    */
   public LightweightServerHandler(ReplicationServerHandler replServerHandler,
-      int replicationServerId, int serverId, String serverUrl,
-      long generationId, byte groupId, ServerStatus status,
-      List<String> refUrls, boolean assuredFlag, AssuredMode assuredMode,
-      byte safeDataLevel, Set<String> eclInclude,
-      Set<String> eclIncludeForDeletes, short protocolVersion)
+      DSInfo dsInfo)
   {
     this.replServerHandler = replServerHandler;
-    this.rsDomain = replServerHandler.getDomain();
-    this.serverId = serverId;
-
-    this.dsInfo =
-        new DSInfo(serverId, serverUrl, replicationServerId, generationId,
-            status, assuredFlag, assuredMode, safeDataLevel, groupId, refUrls,
-            eclInclude, eclIncludeForDeletes, protocolVersion);
+    this.dsInfo = dsInfo;
 
     if (debugEnabled())
-      TRACER.debugInfo("In " + rsDomain.getLocalRSMonitorInstanceName()
-          + " LWSH for remote server " + serverId + " connected to:"
-          + this.replServerHandler.getMonitorInstanceName() + " ()");
+      debugInfo("()");
   }
 
   /**
@@ -124,12 +96,13 @@
   }
 
   /**
-   * Get the serverID associated with this LDAP server.
+   * Get the serverID associated with this LDAP server / directory server.
+   *
    * @return The serverId.
    */
   public int getServerId()
   {
-    return serverId;
+    return dsInfo.getDsId();
   }
 
   /**
@@ -138,9 +111,7 @@
   public void startHandler()
   {
     if (debugEnabled())
-      TRACER.debugInfo("In " + rsDomain.getLocalRSMonitorInstanceName()
-          + " LWSH for remote server " + this.serverId + " connected to:"
-          + this.replServerHandler.getMonitorInstanceName() + " start");
+      debugInfo("start");
     DirectoryServer.deregisterMonitorProvider(this);
     DirectoryServer.registerMonitorProvider(this);
   }
@@ -151,12 +122,18 @@
   public void stopHandler()
   {
     if (debugEnabled())
-      TRACER.debugInfo("In " + rsDomain.getLocalRSMonitorInstanceName()
-          + " LWSH for remote server " + this.serverId + " connected to:"
-          + this.replServerHandler.getMonitorInstanceName() + " stop");
+      debugInfo("stop");
     DirectoryServer.deregisterMonitorProvider(this);
   }
 
+  private void debugInfo(String message)
+  {
+    final ReplicationServerDomain domain = replServerHandler.getDomain();
+    TRACER.debugInfo("In " + domain.getLocalRSMonitorInstanceName()
+        + " LWSH for remote server " + getServerId() + " connected to:"
+        + replServerHandler.getMonitorInstanceName() + " " + message);
+  }
+
   /**
    * {@inheritDoc}
    */
@@ -176,7 +153,7 @@
   @Override
   public String getMonitorInstanceName()
   {
-    return "Connected directory server DS(" + serverId + ") "
+    return "Connected directory server DS(" + dsInfo.getDsId() + ") "
         + dsInfo.getDsUrl()
         + ",cn=" + replServerHandler.getMonitorInstanceName();
   }
@@ -194,15 +171,16 @@
   {
     List<Attribute> attributes = new ArrayList<Attribute>();
 
+    final int serverId = dsInfo.getDsId();
+    final ReplicationServerDomain domain = replServerHandler.getDomain();
     attributes.add(Attributes.create("server-id", String.valueOf(serverId)));
     attributes.add(Attributes.create("domain-name",
-        rsDomain.getBaseDN().toNormalizedString()));
+        domain.getBaseDN().toNormalizedString()));
     attributes.add(Attributes.create("connected-to",
         replServerHandler.getMonitorInstanceName()));
 
     // Retrieves the topology counters
-    ReplicationDomainMonitorData md = rsDomain.getDomainMonitorData();
-
+    final ReplicationDomainMonitorData md = domain.getDomainMonitorData();
     ServerState remoteState = md.getLDAPServerState(serverId);
     if (remoteState == null)
     {
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java b/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
index 54ab91c..d40f730 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
@@ -617,12 +617,9 @@
       for (DSInfo dsInfo : topoMsg.getDsList())
       {
         // For each DS connected to the peer RS
-        LightweightServerHandler lsh = new LightweightServerHandler(this,
-            serverId, dsInfo.getDsId(), dsInfo.getDsUrl(),
-            dsInfo.getGenerationId(), dsInfo.getGroupId(), dsInfo.getStatus(),
-            dsInfo.getRefUrls(), dsInfo.isAssured(), dsInfo.getAssuredMode(),
-            dsInfo.getSafeDataLevel(), dsInfo.getEclIncludes(),
-            dsInfo.getEclIncludesForDeletes(), dsInfo.getProtocolVersion());
+        DSInfo clonedDSInfo = dsInfo.cloneWithReplicationServerId(serverId);
+        LightweightServerHandler lsh =
+            new LightweightServerHandler(this, clonedDSInfo);
         lsh.startHandler();
         remoteDirectoryServers.put(lsh.getServerId(), lsh);
       }
diff --git a/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java b/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
index 18d1730..492af17 100644
--- a/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
+++ b/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
@@ -1592,15 +1592,14 @@
    */
   private void waitForRemoteStartOfInit()
   {
-    int waitResultAttempt = 0;
-    Set<Integer> replicasWeAreWaitingFor = new HashSet<Integer>(0);
-
-    replicasWeAreWaitingFor.addAll(ieContext.startList);
+    final Set<Integer> replicasWeAreWaitingFor =
+        new HashSet<Integer>(ieContext.startList);
 
     if (debugEnabled())
       TRACER.debugInfo(
       "[IE] wait for start replicasWeAreWaitingFor=" + replicasWeAreWaitingFor);
 
+    int waitResultAttempt = 0;
     boolean done;
     do
     {
@@ -1609,7 +1608,7 @@
       {
         if (debugEnabled())
           TRACER.debugInfo(
-            "[IE] wait for start dsid " + dsi.getDsId()
+            "[IE] wait for start dsId " + dsi.getDsId()
             + " " + dsi.getStatus()
             + " " + dsi.getGenerationId()
             + " " + getGenerationID());
@@ -1651,8 +1650,8 @@
    */
   private void waitForRemoteEndOfInit()
   {
-    Set<Integer> replicasWeAreWaitingFor =  new HashSet<Integer>(
-        ieContext.startList);
+    final Set<Integer> replicasWeAreWaitingFor =
+        new HashSet<Integer>(ieContext.startList);
 
     if (debugEnabled())
       TRACER.debugInfo(
@@ -1670,8 +1669,8 @@
     do
     {
       done = true;
-      short reconnectMaxDelayInSec = 10;
-      short reconnectWait = 0;
+      int reconnectMaxDelayInSec = 10;
+      int reconnectWait = 0;
       Iterator<Integer> it = replicasWeAreWaitingFor.iterator();
       while (it.hasNext())
       {
@@ -1735,8 +1734,6 @@
     if (debugEnabled())
       TRACER.debugInfo(
         "[IE] wait for end ends with " + ieContext.failureList);
-
-
   }
 
   /**

--
Gitblit v1.10.0