From 20d43c0d51839d0ef2e6963c8fcd1d2e4c62b234 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 27 Aug 2013 07:42:15 +0000
Subject: [PATCH] ServerState.java: Assigned serverIdToChangeNumber field in the declaration. In reload(), called update(). In cover(ServerState), cover(ChangeNumber). In duplicate(), called Map.putAll().

---
 opends/src/server/org/opends/server/replication/common/ServerState.java |   44 ++++++++++++++------------------------------
 1 files changed, 14 insertions(+), 30 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/common/ServerState.java b/opends/src/server/org/opends/server/replication/common/ServerState.java
index 5970c1c..18f57b5 100644
--- a/opends/src/server/org/opends/server/replication/common/ServerState.java
+++ b/opends/src/server/org/opends/server/replication/common/ServerState.java
@@ -48,7 +48,8 @@
 {
 
   /** Associates a serverId with a ChangeNumber. */
-  private final Map<Integer, ChangeNumber> serverIdToChangeNumber;
+  private final Map<Integer, ChangeNumber> serverIdToChangeNumber =
+      new HashMap<Integer, ChangeNumber>();
   /**
    * Whether the state has been saved to persistent storage. It starts at true,
    * and moves to false when an update is made to the current object.
@@ -60,7 +61,7 @@
    */
   public ServerState()
   {
-    serverIdToChangeNumber = new HashMap<Integer, ChangeNumber>();
+    super();
   }
 
   /**
@@ -92,10 +93,11 @@
   {
     try
     {
-      serverIdToChangeNumber = new HashMap<Integer, ChangeNumber>();
-
       while (endpos > pos)
       {
+        // FIXME JNR: why store the serverId separately from the changeNumber
+        // since the changeNumber already contains the serverId?
+
         // read the ServerId
         int length = getNextLength(in, pos);
         String serverIdString = new String(in, pos, length, "UTF-8");
@@ -108,10 +110,9 @@
         ChangeNumber cn = new ChangeNumber(cnString);
         pos += length +1;
 
-        // Add the serverid
+        // Add the serverId
         serverIdToChangeNumber.put(serverId, cn);
       }
-
     } catch (UnsupportedEncodingException e)
     {
       throw new DataFormatException("UTF-8 is not supported by this jvm.");
@@ -183,7 +184,6 @@
       return false;
 
     boolean updated = false;
-
     for (ChangeNumber cn : serverState.serverIdToChangeNumber.values())
     {
       if (update(cn))
@@ -191,7 +191,6 @@
         updated = true;
       }
     }
-
     return updated;
   }
 
@@ -207,22 +206,11 @@
       return false;
     }
 
-    boolean result = false;
-
     synchronized (serverIdToChangeNumber)
     {
       clear();
-      for (Integer serverId : serverState)
-      {
-        ChangeNumber maxChangeNumber = serverState.getChangeNumber(serverId);
-        if (update(maxChangeNumber))
-        {
-          result = true;
-        }
-      }
+      return update(serverState);
     }
-
-    return result;
   }
 
   /**
@@ -357,7 +345,7 @@
     {
       for (ChangeNumber tmpMax : serverIdToChangeNumber.values())
       {
-        if ((maxCN==null) || (tmpMax.newer(maxCN)))
+        if (maxCN == null || tmpMax.newer(maxCN))
           maxCN = tmpMax;
       }
     }
@@ -395,6 +383,7 @@
       for (Entry<Integer, ChangeNumber> entry : serverIdToChangeNumber
           .entrySet())
       {
+        // serverId is useless, see comment in ServerState ctor
         String serverIdStr = String.valueOf(entry.getKey());
         idList.add(serverIdStr);
         length += serverIdStr.length() + 1;
@@ -439,9 +428,7 @@
   {
     for (ChangeNumber coveredChange : covered.serverIdToChangeNumber.values())
     {
-      ChangeNumber change =
-          this.serverIdToChangeNumber.get(coveredChange.getServerId());
-      if ((change == null) || (change.older(coveredChange)))
+      if (!cover(coveredChange))
       {
         return false;
       }
@@ -460,7 +447,7 @@
   {
     ChangeNumber change =
         this.serverIdToChangeNumber.get(covered.getServerId());
-    return !((change == null) || (change.older(covered)));
+    return change != null && !change.older(covered);
   }
 
   /**
@@ -482,10 +469,7 @@
     ServerState newState = new ServerState();
     synchronized (serverIdToChangeNumber)
     {
-      for (ChangeNumber change : serverIdToChangeNumber.values())
-      {
-        newState.serverIdToChangeNumber.put(change.getServerId(), change);
-      }
+      newState.serverIdToChangeNumber.putAll(serverIdToChangeNumber);
     }
     return newState;
   }
@@ -502,7 +486,7 @@
   public static int diffChanges(ServerState ss1, ServerState ss2)
     throws  IllegalArgumentException
   {
-    if ((ss1 == null) || (ss2 == null))
+    if (ss1 == null || ss2 == null)
     {
       throw new IllegalArgumentException("Null server state(s)");
     }

--
Gitblit v1.10.0