From 76b8bb967a0e20ef38750dbffd893baa117c1f34 Mon Sep 17 00:00:00 2001
From: mrossign <mrossign@localhost>
Date: Fri, 09 Jan 2009 10:06:40 +0000
Subject: [PATCH] - Assured replication (Safe Read) bug fixes - Some assured replication (Safe Read) unit tests

---
 opends/src/server/org/opends/server/replication/server/SafeReadExpectedAcksInfo.java |   25 +++++++++++++++++++++----
 1 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/SafeReadExpectedAcksInfo.java b/opends/src/server/org/opends/server/replication/server/SafeReadExpectedAcksInfo.java
index e5cb702..f61b938 100644
--- a/opends/src/server/org/opends/server/replication/server/SafeReadExpectedAcksInfo.java
+++ b/opends/src/server/org/opends/server/replication/server/SafeReadExpectedAcksInfo.java
@@ -22,15 +22,17 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.server.replication.server;
 
+import java.util.ArrayList;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 
 import org.opends.server.loggers.debug.DebugTracer;
 import java.util.List;
+import java.util.Set;
 import org.opends.server.replication.common.AssuredMode;
 import org.opends.server.replication.common.ChangeNumber;
 import org.opends.server.replication.protocol.AckMsg;
@@ -60,7 +62,7 @@
   // The list of server ids that had errors for the sent matching update
   // Each server id of the list had one of the
   // 3 possible errors (timeout, wrong status or replay error)
-  private List<Short> failedServers = null;
+  private List<Short> failedServers = new ArrayList<Short>();
 
   /**
    * Number of servers we want an ack from and from which we received the ack.
@@ -210,12 +212,27 @@
     ack.setHasTimeout(hasTimeout);
     ack.setHasWrongStatus(hasWrongStatus);
     ack.setHasReplayError(hasReplayError);
-    ack.setFailedServers(failedServers);
 
-    // Force anyway timeout flag if requested
     if (timeout)
+    {
+      // Force anyway timeout flag if requested
       ack.setHasTimeout(true);
 
+      // Add servers that did not respond in time
+      Set<Short> serverIds = expectedServersAckStatus.keySet();
+      for (Short serverId : serverIds)
+      {
+        boolean ackReceived = expectedServersAckStatus.get(serverId);
+        if (!ackReceived)
+        {
+          if (!failedServers.contains(serverId))
+            failedServers.add(serverId);
+        }
+      }
+    }
+
+    ack.setFailedServers(failedServers);
+
     return ack;
   }
 }

--
Gitblit v1.10.0