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()); } }