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

abobrov
13.42.2009 913ce6484b3ab9077d2565e933249307f7a6c8f7
- attempt to fix possible race conditions when tasks changing their state upon completion.
3 files modified
40 ■■■■ changed files
opends/src/server/org/opends/server/backends/task/Task.java 26 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/backends/task/TaskScheduler.java 13 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java 1 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/backends/task/Task.java
@@ -1145,10 +1145,11 @@
    setTaskState(TaskState.RUNNING);
    taskScheduler.writeState();
    TaskState taskState = this.taskState;
    try
    {
      TaskState taskState = runTask();
      setTaskState(taskState);
      taskState = runTask();
    }
    catch (Exception e)
    {
@@ -1157,29 +1158,12 @@
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      setTaskState(TaskState.STOPPED_BY_ERROR);
      taskState = TaskState.STOPPED_BY_ERROR;
      Message message = ERR_TASK_EXECUTE_FAILED.get(
          String.valueOf(taskEntry.getDN()), stackTraceToSingleLineString(e));
      logError(message);
    }
    finally
    {
      setCompletionTime(TimeThread.getTime());
      taskScheduler.writeState();
    }
    try
    {
      sendNotificationEMailMessage();
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
    }
    return taskState;
  }
@@ -1193,7 +1177,7 @@
   * @throws  MessagingException  If a problem occurs while attempting to send
   *                              the message.
   */
  private void sendNotificationEMailMessage()
  protected void sendNotificationEMailMessage()
          throws MessagingException
  {
    if (DirectoryServer.mailServerConfigured())
opends/src/server/org/opends/server/backends/task/TaskScheduler.java
@@ -633,9 +633,22 @@
    try
    {
      completedTask.setCompletionTime(TimeThread.getTime());
      completedTask.setTaskState(taskState);
      addCompletedTask(completedTask);
      try
      {
        completedTask.sendNotificationEMailMessage();
      }
      catch (Exception e)
      {
        if (debugEnabled())
        {
          TRACER.debugCaught(DebugLogLevel.ERROR, e);
        }
      }
      String taskID = completedTask.getTaskID();
      if (activeThreads.remove(taskID) == null)
      {
opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java
@@ -137,6 +137,7 @@
  public void interruptTask(TaskState taskState, Message interruptMessage)
  {
    interruptedState = taskState;
    setTaskInterruptState(taskState);
  }
}