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