From 53af64be39d1f197ed01116df67f1e458ac7d90f Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 24 Jun 2013 11:56:44 +0000
Subject: [PATCH] OPENDJ-885 - Replication replay may lose changes if it can't acquire a writeLock

---
 opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java |   32 ++++++++++----------------------
 1 files changed, 10 insertions(+), 22 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java b/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
index 081ed0e..ea26aad 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
@@ -26,27 +26,26 @@
  *      Portions copyright 2011-2013 ForgeRock AS.
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
 
-
-
-import java.util.concurrent.locks.Lock;
 import java.io.IOException;
+import java.util.concurrent.locks.Lock;
 
+import org.opends.messages.Message;
 import org.opends.server.api.AuthenticationPolicyState;
 import org.opends.server.api.IdentityMapper;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.PasswordPolicyState;
-import org.opends.server.protocols.asn1.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.protocols.asn1.ASN1;
+import org.opends.server.protocols.asn1.ASN1Reader;
+import org.opends.server.protocols.asn1.ASN1Writer;
 import org.opends.server.types.*;
 
 import static org.opends.messages.ProtocolMessages.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
-import static org.opends.server.util.Validator.ensureNotNull;
-
+import static org.opends.server.util.Validator.*;
 
 /**
  * This class implements version 2 of the proxied authorization control as
@@ -247,22 +246,11 @@
           authzDN = actualDN;
         }
 
-        Lock entryLock = null;
-        for (int i=0; i < 3; i++)
-        {
-          entryLock = LockManager.lockRead(authzDN);
-          if (entryLock != null)
-          {
-            break;
-          }
-        }
-
+        final Lock entryLock = LockManager.lockRead(authzDN);
         if (entryLock == null)
         {
-          Message message =
-              ERR_PROXYAUTH2_CANNOT_LOCK_USER.get(String.valueOf(authzDN));
-          throw new DirectoryException(
-                  ResultCode.AUTHORIZATION_DENIED, message);
+          throw new DirectoryException(ResultCode.BUSY,
+              ERR_PROXYAUTH2_CANNOT_LOCK_USER.get(String.valueOf(authzDN)));
         }
 
         try

--
Gitblit v1.10.0