mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Violette Roche-Montane
08.45.2013 02e84b4e550d6ba78e612f4c25477f2db858d793
OPENDJ-802 rebuild-index online with "--clearDegradedState" should not disable the backend
- Fixed : with degraded state option, the backend is no more disabled/activated.
1 files modified
96 ■■■■■ changed files
opends/src/server/org/opends/server/tasks/RebuildTask.java 96 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/tasks/RebuildTask.java
@@ -184,7 +184,7 @@
      return TaskState.STOPPED_BY_ERROR;
    }
    for (String index : indexes)
    for (final String index : indexes)
    {
      rebuildConfig.addRebuildIndex(index);
    }
@@ -193,7 +193,14 @@
    // during the initialization.
    rebuildConfig.isClearDegradedState(isClearDegradedState);
    Backend backend =
    if (tmpDirectory == null)
    {
      tmpDirectory = "import-tmp";
    }
    rebuildConfig.setTmpDirectory(tmpDirectory);
    rebuildConfig.setRebuildMode(rebuildMode);
    final Backend backend =
        DirectoryServer.getBackendWithBaseDN(rebuildConfig.getBaseDN());
    if (backend == null)
@@ -210,55 +217,74 @@
      return TaskState.STOPPED_BY_ERROR;
    }
    // Acquire a shared lock for the backend if we are rebuilding attribute
    // indexes only. If we are rebuilding one or more system indexes, we have
    // to acquire exclusive lock.
    // If we are rebuilding one or more system indexes, we have
    // to acquire exclusive lock. Shared lock in 'cleardegradedstate' mode.
    String lockFile = LockFileManager.getBackendLockFileName(backend);
    StringBuilder failureReason = new StringBuilder();
    // Disable the backend.
    try
    // Except in 'cleardegradedstate' mode we don't need to disable it.
    if (!isClearDegradedState)
    {
      TaskUtils.disableBackend(backend.getBackendID());
    }
    catch (DirectoryException e)
    {
      if (debugEnabled())
      try
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
        TaskUtils.disableBackend(backend.getBackendID());
      }
      catch (DirectoryException e)
      {
        if (debugEnabled())
        {
          TRACER.debugCaught(DebugLogLevel.ERROR, e);
        }
        logError(e.getMessageObject());
        return TaskState.STOPPED_BY_ERROR;
      }
      logError(e.getMessageObject());
      return TaskState.STOPPED_BY_ERROR;
    }
    try
    {
      if (!LockFileManager.acquireExclusiveLock(lockFile, failureReason))
      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)
      {
        Message message =
            ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(backend
                .getBackendID(), String.valueOf(failureReason));
                .getBackendID(), getExceptionMessage(e));
        logError(message);
        return TaskState.STOPPED_BY_ERROR;
      }
    }
    catch (Exception e)
    else
    {
      Message message =
          ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(backend
              .getBackendID(), getExceptionMessage(e));
      logError(message);
      return TaskState.STOPPED_BY_ERROR;
      // We just need a shared lock on the backend for this part.
      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;
      }
    }
    if (tmpDirectory == null)
    {
      tmpDirectory = "import-tmp";
    }
    rebuildConfig.setTmpDirectory(tmpDirectory);
    rebuildConfig.setRebuildMode(rebuildMode);
    TaskState returnCode = TaskState.COMPLETED_SUCCESSFULLY;
    // Launch the rebuild process.
@@ -306,7 +332,9 @@
      }
    }
    if (returnCode == TaskState.COMPLETED_SUCCESSFULLY)
    // The backend must be enabled only if the task is successful
    // for prevent potential risks of database corruption.
    if (returnCode == TaskState.COMPLETED_SUCCESSFULLY && !isClearDegradedState)
    {
      // Enable the backend.
      try