From 3108952a616e5a7548f646555c716bdc52db91ea Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Mon, 31 May 2010 12:06:59 +0000
Subject: [PATCH] Resolve an issue where some changes might appear to be missing after restoring a backend. A replayed change that resolve in no change still must update the historical information.

---
 opends/src/server/org/opends/server/replication/server/MsgQueue.java |   35 ++++++++++++++++++++---------------
 1 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/MsgQueue.java b/opends/src/server/org/opends/server/replication/server/MsgQueue.java
index 1cb9ff3..270a184 100644
--- a/opends/src/server/org/opends/server/replication/server/MsgQueue.java
+++ b/opends/src/server/org/opends/server/replication/server/MsgQueue.java
@@ -35,7 +35,6 @@
 import org.opends.messages.Message;
 import org.opends.server.replication.common.ChangeNumber;
 import org.opends.server.replication.protocol.UpdateMsg;
-import java.util.Arrays;
 
 /**
  * This class is used to build ordered lists of UpdateMsg.
@@ -132,23 +131,29 @@
         boolean sameMsgs = false;
         try
         {
-          sameMsgs = Arrays.equals(
-              msgSameChangeNumber.getBytes(),update.getBytes());
+          if (
+            (msgSameChangeNumber.getBytes().length == update.getBytes().length)
+            && (msgSameChangeNumber.isAssured() == update.isAssured())
+            && (msgSameChangeNumber.getVersion() == update.getVersion()) )
+            {
+              sameMsgs = true;
+            }
+
+
+            if (!sameMsgs)
+            {
+              // Adding 2 msgs with the same ChangeNumber is ok only when
+              // the 2 masgs are the same
+              bytesCount += (update.size() - msgSameChangeNumber.size());
+              Message errMsg = ERR_RSQUEUE_DIFFERENT_MSGS_WITH_SAME_CN.get(
+                  msgSameChangeNumber.getChangeNumber().toString(),
+                  msgSameChangeNumber.toString(),
+                  update.toString());
+              logError(errMsg);
+            }
         }
         catch(Exception e)
         {}
-
-        if (!sameMsgs)
-        {
-          // Adding 2 msgs with the same ChangeNumber is ok only when the 2 msgs
-          // are the same
-          bytesCount += (update.size() - msgSameChangeNumber.size());
-          Message errMsg = ERR_RSQUEUE_DIFFERENT_MSGS_WITH_SAME_CN.get(
-              msgSameChangeNumber.toString(),
-              msgSameChangeNumber.toString(),
-              update.toString());
-          logError(errMsg);
-        }
       }
       else
       {

--
Gitblit v1.10.0