From 33661c6abf51a0e7f5b5a0e17acd3fff712e1ac8 Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Sat, 13 Jun 2009 04:42:25 +0000
Subject: [PATCH] - attempt to fix possible race conditions when tasks changing their state upon completion.
---
opendj-sdk/opends/src/server/org/opends/server/backends/task/Task.java | 26 +++++---------------------
opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java | 13 +++++++++++++
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java | 1 +
3 files changed, 19 insertions(+), 21 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/Task.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/Task.java
index 8f66618..8d88c57 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/Task.java
+++ b/opendj-sdk/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())
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
index d66f9c2..34781f9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
+++ b/opendj-sdk/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)
{
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java
index 875e6ea..eb91524 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java
+++ b/opendj-sdk/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);
}
}
--
Gitblit v1.10.0