From f312ec4a15ca08a406c045748e9d627fe1e31494 Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Fri, 17 Nov 2006 13:46:39 +0000
Subject: [PATCH] The synchronization changelog monitoring information has a counter named waiting-changes that publish the number of updates known by the changelog server that have not yest been sent to each ldap server because they are too slow to replay them.
---
opendj-sdk/opends/src/server/org/opends/server/synchronization/common/ChangeNumberGenerator.java | 60 +++++++++++++++++++++++++++++++++---------------------------
1 files changed, 33 insertions(+), 27 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/synchronization/common/ChangeNumberGenerator.java b/opendj-sdk/opends/src/server/org/opends/server/synchronization/common/ChangeNumberGenerator.java
index c865276..c3496f9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/synchronization/common/ChangeNumberGenerator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/synchronization/common/ChangeNumberGenerator.java
@@ -37,21 +37,44 @@
public class ChangeNumberGenerator
{
private long lastTime;
- private int seqnum = 0;
+ private int seqnum;
private short serverId;
/**
* Create a new ChangeNumber Generator.
- * @param id id to use when creating change numbers
- * @param timestamp time to start with
+ * @param id id to use when creating change numbers.
+ * @param timestamp time to start with.
*/
public ChangeNumberGenerator(short id, long timestamp)
{
- lastTime = timestamp;
- serverId = id;
+ this.lastTime = timestamp;
+ this.serverId = id;
+ this.seqnum = 0;
}
/**
+ * Create a new ChangeNumber Generator.
+ *
+ * @param id id to use when creating change numbers.
+ * @param state This generator will be created in a way that makes sure that
+ * all change numbers generated will be larger than all the
+ * changenumbers currently in state.
+ */
+ public ChangeNumberGenerator(short id, ServerState state)
+ {
+ this.lastTime = TimeThread.getTime();
+ for (short stateId : state)
+ {
+ if (this.lastTime < state.getMaxChangeNumber(stateId).getTime())
+ this.lastTime = state.getMaxChangeNumber(stateId).getTime();
+ if (stateId == id)
+ this.seqnum = state.getMaxChangeNumber(id).getSeqnum();
+ }
+ this.serverId = id;
+
+ }
+
+ /**
* Generate a new ChangeNumber.
*
* @return the generated ChangeNUmber
@@ -65,17 +88,12 @@
{
if (curTime > lastTime)
{
- seqnum = 0;
lastTime = curTime;
}
- else
+
+ if (seqnum++ == 0)
{
- seqnum++;
- if (seqnum > 0xFFFF)
- {
- lastTime++;
- seqnum = 0;
- }
+ lastTime++;
}
}
@@ -94,7 +112,6 @@
public void adjust(ChangeNumber number)
{
long rcvdTime = number.getTime();
- int rcvdSeqnum = number.getSeqnum();
/* need to synchronize with NewChangeNumber method so that we
* protect writing of seqnum and lastTime fields
@@ -103,19 +120,8 @@
{
if (lastTime > rcvdTime)
return;
- if (lastTime == rcvdTime)
- {
- if (seqnum < rcvdSeqnum)
- {
- seqnum = rcvdSeqnum;
- }
- return;
- }
- if (lastTime < rcvdTime)
- {
- lastTime = rcvdTime;
- seqnum = rcvdSeqnum;
- }
+ else
+ lastTime = lastTime++;
}
}
}
--
Gitblit v1.10.0