From dd9090e630e82d58abdc1bfea933bbe02a3a2485 Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Thu, 03 Jan 2008 16:35:57 +0000
Subject: [PATCH] fix for 2794 : Delete are sometimes not replayed when they immediately follow a moddn When a delete is done on the new name of an entry immediately after renaming it, the dependencies between these 2 operations are not detected and the delete can therefore be replayed without waiting for the moddn to complete. This cause the delete to fail and not being replayed.
---
opends/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java | 17 ++++++++++++++---
1 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java b/opends/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java
index 5c3757d..818c328 100644
--- a/opends/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java
+++ b/opends/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.replication.protocol;
@@ -38,6 +38,7 @@
import org.opends.server.types.AbstractOperation;
import org.opends.server.types.DN;
import org.opends.server.types.DirectoryException;
+import org.opends.server.types.RDN;
import org.opends.server.types.operation.PostOperationModifyDNOperation;
/**
@@ -279,8 +280,18 @@
{
try
{
- String newStringDN = newRDN + "," + newSuperior;
- DN newDN = DN.decode(newStringDN);
+ DN newDN;
+ if (newSuperior == null)
+ {
+ DN parentDn = DN.decode(this.getDn()).getParent();
+ newDN = parentDn.concat(RDN.decode(newRDN));
+ }
+ else
+ {
+ String newStringDN = newRDN + "," + newSuperior;
+ newDN = DN.decode(newStringDN);
+ }
+
if (newDN.isAncestorOf(targetDn))
return true;
--
Gitblit v1.10.0