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/backends/task/TaskScheduler.java |   44 +++++++++-----------------------------------
 1 files changed, 9 insertions(+), 35 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/task/TaskScheduler.java b/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
index d230e19..935ec18 100644
--- a/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
+++ b/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2013 ForgeRock AS
  */
 package org.opends.server.backends.task;
 
@@ -37,15 +38,7 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
@@ -56,22 +49,7 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.SearchOperation;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.Attribute;
-import org.opends.server.types.AttributeType;
-import org.opends.server.types.AttributeValue;
-import org.opends.server.types.Attributes;
-import org.opends.server.types.DN;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.Entry;
-import org.opends.server.types.ExistingFileBehavior;
-import org.opends.server.types.InitializationException;
-import org.opends.server.types.LDIFExportConfig;
-import org.opends.server.types.LDIFImportConfig;
-import org.opends.server.types.LockManager;
-import org.opends.server.types.Operation;
-import org.opends.server.types.ResultCode;
-import org.opends.server.types.SearchFilter;
+import org.opends.server.types.*;
 import org.opends.server.util.LDIFException;
 import org.opends.server.util.LDIFReader;
 import org.opends.server.util.LDIFWriter;
@@ -1697,18 +1675,11 @@
   Lock readLockEntry(DN entryDN)
        throws DirectoryException
   {
-    Lock lock = LockManager.lockRead(entryDN);
-    for (int i=0; ((lock == null) && (i < 4)); i++)
-    {
-      lock = LockManager.lockRead(entryDN);
-    }
-
+    final Lock lock = LockManager.lockRead(entryDN);
     if (lock == null)
     {
-      Message message =
-          ERR_BACKEND_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN));
-      throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message);
+      throw new DirectoryException(ResultCode.BUSY,
+          ERR_BACKEND_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN)));
     }
     else
     {
@@ -2138,6 +2109,7 @@
    * @return  The DN of the configuration entry with which this alert generator
    *          is associated.
    */
+  @Override
   public DN getComponentEntryDN()
   {
     return taskBackend.getConfigEntryDN();
@@ -2152,6 +2124,7 @@
    * @return  The fully-qualified name of the Java class for this alert
    *          generator implementation.
    */
+  @Override
   public String getClassName()
   {
     return CLASS_NAME;
@@ -2169,6 +2142,7 @@
    * @return  Information about the set of alerts that this generator may
    *          produce.
    */
+  @Override
   public LinkedHashMap<String,String> getAlerts()
   {
     LinkedHashMap<String,String> alerts = new LinkedHashMap<String,String>();

--
Gitblit v1.10.0