From af76a3750288d90c006022829887c92601a4737c 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
---
opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java | 27 +++++----------------------
1 files changed, 5 insertions(+), 22 deletions(-)
diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
index 8124bff..f322a76 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
@@ -23,12 +23,10 @@
*
*
* Copyright 2008-2009 Sun Microsystems, Inc.
- * Portions Copyright 2011-2012 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.workflowelement.localbackend;
-
-
import java.util.List;
import java.util.Set;
import java.util.concurrent.locks.Lock;
@@ -39,11 +37,7 @@
import org.opends.server.controls.LDAPAssertionRequestControl;
import org.opends.server.controls.ProxiedAuthV1Control;
import org.opends.server.controls.ProxiedAuthV2Control;
-import org.opends.server.core.AccessControlConfigManager;
-import org.opends.server.core.CompareOperation;
-import org.opends.server.core.CompareOperationWrapper;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.PluginConfigManager;
+import org.opends.server.core.*;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.*;
import org.opends.server.types.operation.PostOperationCompareOperation;
@@ -54,8 +48,6 @@
import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.util.ServerConstants.*;
-
-
/**
* This class defines an operation that may be used to determine whether a
* specified entry in the Directory Server contains a given attribute-value
@@ -114,6 +106,7 @@
* @return The entry to target with the compare operation, or
* <CODE>null</CODE> if the entry is not yet available.
*/
+ @Override
public Entry getEntryToCompare()
{
return entry;
@@ -180,22 +173,12 @@
// Grab a read lock on the entry.
- Lock readLock = null;
- for (int i=0; i < 3; i++)
- {
- readLock = LockManager.lockRead(entryDN);
- if (readLock != null)
- {
- break;
- }
- }
-
+ final Lock readLock = LockManager.lockRead(entryDN);
if (readLock == null)
{
- setResultCode(DirectoryServer.getServerErrorResultCode());
+ setResultCode(ResultCode.BUSY);
appendErrorMessage(ERR_COMPARE_CANNOT_LOCK_ENTRY.get(
String.valueOf(entryDN)));
-
break compareProcessing;
}
--
Gitblit v1.10.0