mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

gbellato
31.50.2009 9452e6e93128f70a3ca7102c695281d2ea786b9a
opends/src/server/org/opends/server/replication/common/ChangeNumberGenerator.java
@@ -82,6 +82,8 @@
  public ChangeNumber newChangeNumber()
  {
    long curTime = TimeThread.getTime();
    int mySeqnum;
    long myTime;
    synchronized(this)
    {
@@ -90,13 +92,17 @@
        lastTime = curTime;
      }
      if (seqnum++ == 0)
      if (++seqnum <= 0)
      {
        seqnum = 0;
        lastTime++;
      }
      mySeqnum = seqnum;
      myTime = lastTime;
    }
    return new ChangeNumber(lastTime, seqnum, serverId);
    return new ChangeNumber(myTime, mySeqnum, serverId);
  }
  /**
opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
@@ -818,7 +818,6 @@
        }
        else if (msg instanceof UpdateMsg)
        {
          generator.adjust(((UpdateMsg) msg).getChangeNumber());
          update = (UpdateMsg) msg;
          generator.adjust(update.getChangeNumber());
        }
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/ChangeNumberGeneratorTest.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2008 Sun Microsystems, Inc.
 *      Copyright 2009 Sun Microsystems, Inc.
 */
package org.opends.server.replication.common;
@@ -57,6 +57,7 @@
        "ChangeNumberGenerator generated an earlier ChangeNumber "
        + " after calling the adjust method.");
  }
  @Test
  public void adjustSameMilliTest()
  {
@@ -75,4 +76,23 @@
        "ChangeNumberGenerator generated an earlier ChangeNumber "
        + " after calling the adjust method.");
  }
  /**
   * Test the correct behavior of the ChangeNumberGenerator when
   * the seqnum is rolling over its limit
   */
  @Test
  public void adjustRollingSeqnum()
  {
    ServerState state = new ServerState();
    ChangeNumber cn1 = new ChangeNumber(TimeThread.getTime(), Integer.MAX_VALUE, (short) 5);
    state.update(cn1);
    ChangeNumberGenerator generator = new ChangeNumberGenerator((short)5, state);
    ChangeNumber cn2 = generator.newChangeNumber();
    assertTrue(cn2.getSeqnum() == 0);
    assertTrue(cn2.getTime()>cn1.getTime());
  }
}