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