From 28bfc907cd466f070070ce24b079ee8693e2d7c2 Mon Sep 17 00:00:00 2001
From: mmarie <mmarie@localhost>
Date: Wed, 08 Jul 2009 14:05:24 +0000
Subject: [PATCH] 4101 : ChangeNumberGenerator is not adjusted when restarting without preserved state

---
 opends/src/server/org/opends/server/replication/common/ChangeNumberGenerator.java |   26 +++++++++++++++++++++++---
 1 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/common/ChangeNumberGenerator.java b/opends/src/server/org/opends/server/replication/common/ChangeNumberGenerator.java
index 2f02591..f402dba 100644
--- a/opends/src/server/org/opends/server/replication/common/ChangeNumberGenerator.java
+++ b/opends/src/server/org/opends/server/replication/common/ChangeNumberGenerator.java
@@ -125,15 +125,35 @@
 
     long rcvdTime = number.getTime();
 
+    short changeServerId = number.getServerId();
+    int changeSeqNum = number.getSeqnum();
+
     /* need to synchronize with NewChangeNumber method so that we
      * protect writing lastTime fields
      */
     synchronized(this)
     {
-      if (lastTime > rcvdTime)
-        return;
-      else
+      if (lastTime <= rcvdTime)
+      {
         lastTime = ++rcvdTime;
+      }
+
+      if ((serverId == changeServerId) && (seqnum < changeSeqNum))
+      {
+        seqnum = changeSeqNum;
+      }
     }
   }
+
+  /**
+   * Adjust utility method that takes ServerState as a parameter.
+   * @param state the ServerState to adjust with
+   */
+  public void adjust(ServerState state)
+  {
+    for (short localServerId : state)
+    {
+      adjust(state.getMaxChangeNumber(localServerId));
+     }
+  }
 }

--
Gitblit v1.10.0