From db546bbe84d1b7d765241d9396f429cc0c50dee3 Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Thu, 01 Oct 2009 12:28:35 +0000
Subject: [PATCH] - [Issue 4257] deleting recurring task throws error : rework recurring tasks and iterations cancellation process.
---
opends/src/server/org/opends/server/backends/task/TaskBackend.java | 22 ++++++++++++++++++++--
1 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/task/TaskBackend.java b/opends/src/server/org/opends/server/backends/task/TaskBackend.java
index c2eba38..8b6bfbf 100644
--- a/opends/src/server/org/opends/server/backends/task/TaskBackend.java
+++ b/opends/src/server/org/opends/server/backends/task/TaskBackend.java
@@ -38,6 +38,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -649,7 +650,16 @@
if (TaskState.isPending(state))
{
if (t.isRecurring()) {
- taskScheduler.removeRecurringTaskIteration(t.getTaskID());
+ taskScheduler.removePendingTask(t.getTaskID());
+ long scheduledStartTime = t.getScheduledStartTime();
+ long currentSystemTime = System.currentTimeMillis();
+ if (scheduledStartTime < currentSystemTime) {
+ scheduledStartTime = currentSystemTime;
+ }
+ GregorianCalendar calendar = new GregorianCalendar();
+ calendar.setTimeInMillis(scheduledStartTime);
+ taskScheduler.scheduleNextRecurringTaskIteration(t,
+ calendar);
} else {
taskScheduler.removePendingTask(t.getTaskID());
}
@@ -787,7 +797,15 @@
TaskState.CANCELED_BEFORE_STARTING)
{
taskScheduler.removePendingTask(t.getTaskID());
- taskScheduler.scheduleTask(newTask, true);
+ long scheduledStartTime = t.getScheduledStartTime();
+ long currentSystemTime = System.currentTimeMillis();
+ if (scheduledStartTime < currentSystemTime) {
+ scheduledStartTime = currentSystemTime;
+ }
+ GregorianCalendar calendar = new GregorianCalendar();
+ calendar.setTimeInMillis(scheduledStartTime);
+ taskScheduler.scheduleNextRecurringTaskIteration(
+ newTask, calendar);
}
else if (newTask.getTaskState() ==
TaskState.STOPPED_BY_ADMINISTRATOR)
--
Gitblit v1.10.0