diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java index d909e5b03c..e7be2acf81 100644 --- a/opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java +++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java @@ -145,6 +145,9 @@ public class ChangelogBackendTestCase extends ReplicationTestCase private final List domains = new ArrayList<>(); private final Map brokers = new HashMap<>(); + /** Time of the last CSN built by {@link #generateCSNs(int, ReplicaId)}, to keep batches monotonic. */ + private long lastGeneratedCsnTime; + @BeforeClass @Override public void setUp() throws Exception @@ -1252,7 +1255,10 @@ private static LDIFWriter getLDIFWriter() throws Exception private CSN[] generateCSNs(int numberOfCsns, ReplicaId replicaId) { - long startTime = TimeThread.getTime(); + // TimeThread only refreshes its cached time every 200 ms, so two batches generated within one + // tick would collide and be filtered out by the changelog as breaking the key ordering. + // Start after the previous batch to keep CSNs monotonically increasing, like CSNGenerator does. + long startTime = Math.max(TimeThread.getTime(), lastGeneratedCsnTime + 1); CSN[] csns = new CSN[numberOfCsns]; for (int i = 0; i < numberOfCsns; i++) @@ -1260,6 +1266,7 @@ private CSN[] generateCSNs(int numberOfCsns, ReplicaId replicaId) // seqNum must be greater than 0, so start at 1 csns[i] = new CSN(startTime + i, i + 1, replicaId.getServerId()); } + lastGeneratedCsnTime = csns[numberOfCsns - 1].getTime(); return csns; }