From 5154f34503981b2f96755b1b6da9b425bb20ca7f Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Thu, 05 Nov 2026 14:32:12 +0000
Subject: [PATCH] [#1269] Preserve replay order across duplicate replication deliveries (#1270)
---
opendj-server-legacy/src/test/java/org/opends/server/replication/plugin/NamingConflictTest.java | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/replication/plugin/NamingConflictTest.java b/opendj-server-legacy/src/test/java/org/opends/server/replication/plugin/NamingConflictTest.java
index 94855bc..fc0117e 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/replication/plugin/NamingConflictTest.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/replication/plugin/NamingConflictTest.java
@@ -147,11 +147,13 @@
Entry entry = createAndAddEntry("simultaneousModrdnConflict");
String entryUUID = getEntryUUID(entry.getName());
- // generate two consecutive CSN that will be used in backward order
+ // Changes from different origins can arrive in reverse CSN order. Older changes
+ // from the same origin would already be covered by its applied ServerState.
CSN csn1 = gen.newCSN();
- CSN csn2 = gen.newCSN();
+ CSN csn2 = new CSN(csn1.getTime() + 1, 0, 202);
replayMsg(modDnMsg(entry, entryUUID, parentUUID, csn2, "uid=simultaneous2"));
+ assertFalse(domain.getServerState().cover(csn1));
// This MODIFY DN uses an older DN and should therefore be cancelled at replay time.
replayMsg(modDnMsg(entry, entryUUID, parentUUID, csn1, "uid=simulatneouswrong"));
@@ -287,10 +289,11 @@
final String entryUUID = getEntryUUID(entry.getName());
final int givenUpBefore = failedReplayedUpdates();
- // Two consecutive CSNs, replayed in the reverse order.
+ // Reverse order across origins must still reach naming-conflict resolution.
final CSN older = gen.newCSN();
- final CSN newer = gen.newCSN();
+ final CSN newer = new CSN(older.getTime() + 1, 0, 202);
replayMsg(modDnMsg(entry, entryUUID, parentUUID, newer, "cn=renamedAfter"));
+ assertFalse(domain.getServerState().cover(older));
replayMsg(modDnMsg(entry, entryUUID, parentUUID, older, "cn=renamedBefore"));
assertTrue(entryExists(DN.valueOf("cn=renamedAfter," + TEST_ROOT_DN_STRING)),
--
Gitblit v1.10.0