From b161a27ed6c0b7d72b241e9990f9917c1ca9c0ac Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 06 Nov 2013 15:51:09 +0000
Subject: [PATCH] OPENDJ-1053 Improve logging of replication load balancing and fail-over in order to diagnose the causes of these events

---
 opends/src/server/org/opends/server/replication/service/ReplicationBroker.java |   29 ++++++++++++++++++-----------
 1 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java b/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
index ef57f59..24fcac3 100644
--- a/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
+++ b/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
@@ -1487,26 +1487,33 @@
    */
   private static class LocalEvaluation
   {
-    private final Map<Integer, ReplicationServerInfo> filteredRSs =
+    private final Map<Integer, ReplicationServerInfo> accepted =
         new HashMap<Integer, ReplicationServerInfo>();
     private final Map<ReplicationServerInfo, Message> rsEvals =
         new HashMap<ReplicationServerInfo, Message>();
 
     private void accept(Integer rsId, ReplicationServerInfo rsInfo)
     {
-      this.rsEvals.remove(rsInfo); // undo reject
-      this.filteredRSs.put(rsId, rsInfo);
+      // forget previous eval, including undoing reject
+      this.rsEvals.remove(rsInfo);
+      this.accepted.put(rsId, rsInfo);
     }
 
     private void reject(ReplicationServerInfo rsInfo, Message reason)
     {
-      this.filteredRSs.remove(rsInfo.getServerId()); // undo accept
+      this.accepted.remove(rsInfo.getServerId()); // undo accept
       this.rsEvals.put(rsInfo, reason);
     }
 
     private Map<Integer, ReplicationServerInfo> getAccepted()
     {
-      return filteredRSs;
+      return accepted;
+    }
+
+    private ReplicationServerInfo[] getAcceptedRSInfos()
+    {
+      return accepted.values().toArray(
+          new ReplicationServerInfo[accepted.size()]);
     }
 
     public Map<Integer, Message> getRejected()
@@ -1521,7 +1528,7 @@
 
     private boolean hasAcceptedAny()
     {
-      return !filteredRSs.isEmpty();
+      return !accepted.isEmpty();
     }
 
   }
@@ -1818,20 +1825,20 @@
     evals.keepBest(mostUpToDateEval);
   }
 
-  private static CSN getCSN(ServerState localState, int localServerId)
+  private static CSN getCSN(ServerState state, int serverId)
   {
-    final CSN csn = localState.getCSN(localServerId);
+    final CSN csn = state.getCSN(serverId);
     if (csn != null)
     {
       return csn;
     }
-    return new CSN(0, 0, localServerId);
+    return new CSN(0, 0, serverId);
   }
 
   private static void rejectAllWithRSIsLaterThanBestRS(
       final LocalEvaluation eval, int localServerId, CSN localCSN)
   {
-    for (ReplicationServerInfo rsInfo : eval.getAccepted().values())
+    for (ReplicationServerInfo rsInfo : eval.getAcceptedRSInfos())
     {
       final String rsCSN =
           getCSN(rsInfo.getServerState(), localServerId).toStringUI();
@@ -1902,7 +1909,7 @@
   private static void rejectAllWithRSOnDifferentVMThanDS(LocalEvaluation eval,
       int localServerId)
   {
-    for (ReplicationServerInfo rsInfo : eval.getAccepted().values())
+    for (ReplicationServerInfo rsInfo : eval.getAcceptedRSInfos())
     {
       eval.reject(rsInfo, NOTE_RS_ON_DIFFERENT_VM_THAN_DS.get(
           rsInfo.getServerId(), localServerId));

--
Gitblit v1.10.0