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/tasks/AddSchemaFileTask.java |   20 +++++++-------------
 1 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java b/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
index 3ebb6b6..8c6902d 100644
--- a/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
+++ b/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
@@ -27,14 +27,13 @@
  */
 package org.opends.server.tasks;
 
-import org.opends.messages.Message;
-
 import java.io.File;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.TreeSet;
 import java.util.concurrent.locks.Lock;
 
+import org.opends.messages.Message;
 import org.opends.server.admin.std.server.SynchronizationProviderCfg;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.SynchronizationProvider;
@@ -43,17 +42,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.SchemaConfigManager;
+import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.*;
 
+import static org.opends.messages.TaskMessages.*;
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.messages.TaskMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
-
-
 /**
  * This class provides an implementation of a Directory Server task that can be
  * used to add the contents of a new schema file into the server schema.
@@ -66,12 +63,13 @@
    */
   private static final DebugTracer TRACER = getTracer();
 
-  // The list of files to be added to the server schema.
+  /** The list of files to be added to the server schema. */
   TreeSet<String> filesToAdd;
 
   /**
    * {@inheritDoc}
    */
+  @Override
   public Message getDisplayName() {
     return INFO_TASK_ADD_SCHEMA_FILE_NAME.get();
   }
@@ -195,17 +193,13 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   protected TaskState runTask()
   {
     // Obtain a write lock on the server schema so that we can be sure nothing
     // else tries to write to it at the same time.
     DN schemaDN = DirectoryServer.getSchemaDN();
-    Lock schemaLock = LockManager.lockWrite(schemaDN);
-    for (int i=0; ((schemaLock == null) && (i < 3)); i++)
-    {
-      schemaLock = LockManager.lockWrite(schemaDN);
-    }
-
+    final Lock schemaLock = LockManager.lockWrite(schemaDN);
     if (schemaLock == null)
     {
       Message message = ERR_TASK_ADDSCHEMAFILE_CANNOT_LOCK_SCHEMA.get(

--
Gitblit v1.10.0