From edccd030b94ecc79a7b8ae17ec172cccafce56fb Mon Sep 17 00:00:00 2001
From: mrossign <mrossign@localhost>
Date: Fri, 30 Jan 2009 13:43:02 +0000
Subject: [PATCH] Entry lock may not be released in some cases

---
 opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java   |    4 ++--
 opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java |    6 +++---
 opends/src/server/org/opends/server/replication/protocol/AckMsg.java                                |    2 +-
 opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java                   |   36 ++++++++++++++++++------------------
 opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java   |    6 +++---
 5 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java b/opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
index fa6cf27..ff2a806 100644
--- a/opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
+++ b/opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
@@ -898,6 +898,24 @@
       {
         this.saveGenerationId(generationId);
       }
+
+      if (!op.isSynchronizationOperation())
+      {
+        // If assured replication is enabled, this will wait for the matching
+        // ack or time out. If assured replication is disabled, this returns
+        // immediately
+        try
+        {
+          waitForAckIfAssuredEnabled(msg);
+        } catch (TimeoutException ex)
+        {
+          // This exception may only be raised if assured replication is
+          // enabled
+          Message errorMsg = NOTE_DS_ACK_TIMEOUT.get(getServiceID(),
+            Long.toString(getAssuredTimeout()), msg.toString());
+          logError(errorMsg);
+        }
+      }
     }
     else if (!op.isSynchronizationOperation())
     {
@@ -909,24 +927,6 @@
         pendingChanges.pushCommittedChanges();
       }
     }
-
-    if (!op.isSynchronizationOperation())
-    {
-      // If assured replication is enabled, this will wait for the matching
-      // ack or time out. If assured replication is disabled, this returns
-      // immediately
-      try
-      {
-        waitForAckIfAssuredEnabled(msg);
-      } catch (TimeoutException ex)
-      {
-        // This exception may only be raised if assured replication is
-        // enabled
-        Message errorMsg = NOTE_DS_ACK_TIMEOUT.get(getServiceID(),
-          Long.toString(getAssuredTimeout()), msg.toString());
-        logError(errorMsg);
-      }
-    }
   }
 
   /**
diff --git a/opends/src/server/org/opends/server/replication/protocol/AckMsg.java b/opends/src/server/org/opends/server/replication/protocol/AckMsg.java
index a0e8399..d53fe19 100644
--- a/opends/src/server/org/opends/server/replication/protocol/AckMsg.java
+++ b/opends/src/server/org/opends/server/replication/protocol/AckMsg.java
@@ -338,7 +338,7 @@
     String ackErrorStr = "hasTimeout: " + (hasTimeout ? "yes" : "no")  + ", " +
       "hasWrongStatus: " + (hasWrongStatus ? "yes" : "no")  + ", " +
       "hasReplayError: " + (hasReplayError ? "yes" : "no")  + ", " +
-      " concerned server ids: " + idList;
+      "concerned server ids: " + idList;
 
     return ackErrorStr;
   }
diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
index ccd4c22..152baef 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2009 Sun Microsystems, Inc.
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -417,8 +417,8 @@
       }
       finally
       {
-        processPostOperation();
         LockManager.unlock(entryDN, entryLock);
+        processSynchPostOperationPlugins();
       }
     }
 
@@ -798,7 +798,7 @@
       return returnVal;
   }
 
-  private void processPostOperation() {
+  private void processSynchPostOperationPlugins() {
 
       for (SynchronizationProvider<?> provider :
           DirectoryServer.getSynchronizationProviders()) {
diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
index fcbedd5..1a73ca0 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2009 Sun Microsystems, Inc.
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -605,9 +605,9 @@
       }
       finally
       {
-        processPostOperation();
         LockManager.unlock(entryDN, currentLock);
         LockManager.unlock(newDN, newLock);
+        processSynchPostOperationPlugins();
       }
     }
 
@@ -1274,7 +1274,7 @@
       return returnVal;
   }
 
-  private void processPostOperation() {
+  private void processSynchPostOperationPlugins() {
       for (SynchronizationProvider<?> provider : DirectoryServer
               .getSynchronizationProviders()) {
           try {
diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
index 82d0f6e..d57b74d 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
@@ -658,8 +658,8 @@
       }
       finally
       {
-        processPostOperation();
         LockManager.unlock(entryDN, entryLock);
+        processSynchPostOperationPlugins();
       }
     }
 
@@ -2328,7 +2328,7 @@
       return returnVal;
   }
 
-  private void processPostOperation() {
+  private void processSynchPostOperationPlugins() {
       for (SynchronizationProvider<?> provider :
           DirectoryServer.getSynchronizationProviders()) {
           try {

--
Gitblit v1.10.0