From 193c905c816eb903106ac6dc3785ddd57d7db784 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Tue, 09 Jun 2009 12:28:05 +0000
Subject: [PATCH] Fix for issue 3550 (Consider making the control panel able to manage remote servers)

---
 opendj-sdk/opends/src/server/org/opends/server/tasks/RebuildTask.java |  110 ++++++++++++++++++++++---------------------------------
 1 files changed, 44 insertions(+), 66 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/RebuildTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/RebuildTask.java
index 6fa8eb4..a8fa88a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/RebuildTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/RebuildTask.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2009 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
 import org.opends.messages.Message;
@@ -65,8 +65,6 @@
 import static org.opends.messages.ToolMessages.
     ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND;
 import static org.opends.messages.ToolMessages.
-    ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND;
-import static org.opends.messages.ToolMessages.
     WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND;
 import static org.opends.server.config.ConfigConstants.
     ATTR_REBUILD_BASE_DN;
@@ -195,65 +193,43 @@
     // to aquire exclusive lock.
     String lockFile = LockFileManager.getBackendLockFileName(backend);
     StringBuilder failureReason = new StringBuilder();
-    if(rebuildConfig.includesSystemIndex())
+
+    // Disable the backend.
+    try
     {
-      // Disable the backend.
-      try
+      TaskUtils.disableBackend(backend.getBackendID());
+    }
+    catch (DirectoryException e)
+    {
+      if (debugEnabled())
       {
-        TaskUtils.disableBackend(backend.getBackendID());
-      }
-      catch (DirectoryException e)
-      {
-        if (debugEnabled())
-        {
-          TRACER.debugCaught(DebugLogLevel.ERROR, e);
-        }
-
-        logError(e.getMessageObject());
-        return TaskState.STOPPED_BY_ERROR;
+        TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      try
-      {
-        if(! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
-        {
-          Message message = ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(
-              backend.getBackendID(), String.valueOf(failureReason));
-          logError(message);
-          return TaskState.STOPPED_BY_ERROR;
-        }
-      }
-      catch (Exception e)
+      logError(e.getMessageObject());
+      return TaskState.STOPPED_BY_ERROR;
+    }
+
+    try
+    {
+      if(! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
         Message message = ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(
-            backend.getBackendID(), getExceptionMessage(e));
+            backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
     }
-    else
+    catch (Exception e)
     {
-      try
-      {
-        if(! LockFileManager.acquireSharedLock(lockFile, failureReason))
-        {
-          Message message = ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND.get(
-              backend.getBackendID(), String.valueOf(failureReason));
-          logError(message);
-          return TaskState.STOPPED_BY_ERROR;
-        }
-      }
-      catch (Exception e)
-      {
-        Message message = ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND.get(
-            backend.getBackendID(), getExceptionMessage(e));
-        logError(message);
-        return TaskState.STOPPED_BY_ERROR;
-      }
-
+      Message message = ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
+      return TaskState.STOPPED_BY_ERROR;
     }
 
 
+    TaskState returnCode = TaskState.COMPLETED_SUCCESSFULLY;
     // Launch the rebuild process.
     try
     {
@@ -270,31 +246,33 @@
       Message message =
           ERR_REBUILDINDEX_ERROR_DURING_REBUILD.get(e.getMessage());
       logError(message);
-      return TaskState.STOPPED_BY_ERROR;
+      returnCode = TaskState.STOPPED_BY_ERROR;
     }
-
     // Release the lock on the backend.
-    try
+    finally
     {
-      lockFile = LockFileManager.getBackendLockFileName(backend);
-      failureReason = new StringBuilder();
-      if (! LockFileManager.releaseLock(lockFile, failureReason))
+      try
+      {
+        lockFile = LockFileManager.getBackendLockFileName(backend);
+        failureReason = new StringBuilder();
+        if (! LockFileManager.releaseLock(lockFile, failureReason))
+        {
+          Message message = WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(
+              backend.getBackendID(), String.valueOf(failureReason));
+          logError(message);
+          returnCode = TaskState.COMPLETED_WITH_ERRORS;
+        }
+      }
+      catch (Throwable t)
       {
         Message message = WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(
-            backend.getBackendID(), String.valueOf(failureReason));
+            backend.getBackendID(), getExceptionMessage(t));
         logError(message);
-        return TaskState.COMPLETED_WITH_ERRORS;
+        returnCode = TaskState.COMPLETED_WITH_ERRORS;
       }
     }
-    catch (Exception e)
-    {
-      Message message = WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(
-          backend.getBackendID(), getExceptionMessage(e));
-      logError(message);
-      return TaskState.COMPLETED_WITH_ERRORS;
-    }
 
-    if(rebuildConfig.includesSystemIndex())
+    if(returnCode == TaskState.COMPLETED_SUCCESSFULLY)
     {
       // Enable the backend.
       try
@@ -309,10 +287,10 @@
         }
 
         logError(e.getMessageObject());
-        return TaskState.STOPPED_BY_ERROR;
+        returnCode = TaskState.STOPPED_BY_ERROR;
       }
     }
 
-    return TaskState.COMPLETED_SUCCESSFULLY;
+    return returnCode;
   }
 }

--
Gitblit v1.10.0