From 772caa6e6fcd20030404923d0bba443ea0b0fe03 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Fri, 17 Jul 2026 05:41:39 +0000
Subject: [PATCH] [#744] Fix flaky ChangelogBackendTestCase: keep generated CSN batches monotonic (#745)
---
opendj-server-legacy/src/test/java/org/opends/server/backends/ChangelogBackendTestCase.java | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
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 d909e5b..e7be2ac 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 @@
private final List<LDAPReplicationDomain> domains = new ArrayList<>();
private final Map<ReplicaId, ReplicationBroker> 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 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 @@
// 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;
}
--
Gitblit v1.10.0