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

gbellato
19.09.2009 60d369bef9c0f25c68bedd847efb3d8e937362a5
Fix for Replication namingConflict test failing when running slow tests

The root cause is a bug in the ChangeNumberGenerator.adjust() method
that can lead to non ordered ChangeNumbers.
3 files modified
38 ■■■■ changed files
opends/src/server/org/opends/server/replication/common/ChangeNumberGenerator.java 4 ●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java 16 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/ChangeNumberGeneratorTest.java 18 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/common/ChangeNumberGenerator.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2006-2008 Sun Microsystems, Inc.
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 */
package org.opends.server.replication.common;
@@ -127,7 +127,7 @@
      if (lastTime > rcvdTime)
        return;
      else
        lastTime = rcvdTime++;
        lastTime = ++rcvdTime;
    }
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java
@@ -65,6 +65,7 @@
import org.opends.server.replication.protocol.HeartbeatThread;
import org.opends.server.replication.protocol.ModifyDNMsg;
import org.opends.server.replication.protocol.ModifyMsg;
import org.opends.server.replication.protocol.OperationContext;
import org.opends.server.replication.protocol.ReplicationMsg;
import org.opends.server.schema.DirectoryStringSyntax;
import org.opends.server.types.Attribute;
@@ -278,7 +279,7 @@
   * Add an entry in the database
   *
   */
  private void addEntry(Entry entry) throws Exception
  private ChangeNumber addEntry(Entry entry) throws Exception
  {
    AddOperationBasis addOp = new AddOperationBasis(connection,
        InternalClientConnection.nextOperationID(), InternalClientConnection
@@ -289,6 +290,7 @@
    assertEquals(addOp.getResultCode(), ResultCode.SUCCESS);
    assertNotNull(getEntry(entry.getDN(), 1000, true));
    return OperationContext.getChangeNumber((Operation) addOp);
  }
  /**
@@ -1168,6 +1170,7 @@
    delEntry(conflictDomain2dn);
    delEntry(conflictDomain3dn);
    //
    // Check that when a delete is replayed over an entry which has child
    // those child are also deleted
@@ -1177,7 +1180,8 @@
    domain1uid = getEntryUUID(DN.decode(domain1dn));
    addEntry(domain2);
    domain2uid = getEntryUUID(DN.decode(domain2dn));
    addEntry(domain3);
    ChangeNumber addCn =  addEntry(domain3);
    gen.adjust(addCn);
    domain3uid = getEntryUUID(DN.decode(domain3dn));
    updateMonitorCount(baseDn, unresolvedMonitorAttr);
@@ -1192,10 +1196,10 @@
        "The DELETE replication message was not replayed");
    // check that domain2 and domain3 have not been renamed as conflicting
    assertNull(getEntry(conflictDomain2dn, 1000, true),
        "The conflicting entries were not created");
    assertNull(getEntry(conflictDomain3dn, 1000, true),
        "The conflicting entries were not created");
    assertNull(getEntry(conflictDomain2dn, 10000, true),
        "The conflicting entries were created");
    assertNull(getEntry(conflictDomain3dn, 10000, true),
        "The conflicting entries were created");
    //
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/common/ChangeNumberGeneratorTest.java
@@ -57,4 +57,22 @@
        "ChangeNumberGenerator generated an earlier ChangeNumber "
        + " after calling the adjust method.");
  }
  @Test
  public void adjustSameMilliTest()
  {
    ChangeNumberGenerator generator =
      new ChangeNumberGenerator((short)5, TimeThread.getTime());
    ChangeNumber cn = generator.newChangeNumber();
    ChangeNumber cn1 =
      new ChangeNumber(cn.getTime(), cn.getSeqnum() + 10, (short) 6);
    generator.adjust(cn1);
    ChangeNumber cn2 = generator.newChangeNumber();
    assertTrue((cn2.compareTo(cn1)>0),
        "ChangeNumberGenerator generated an earlier ChangeNumber "
        + " after calling the adjust method.");
  }
}