| | |
| | | import org.opends.server.util.TimeThread; |
| | | |
| | | import static org.opends.server.config.ConfigConstants.*; |
| | | import static org.opends.server.loggers.Debug.*; |
| | | import static org.opends.server.loggers.Error.*; |
| | | import static org.opends.server.loggers.debug.DebugLogger.debugCought; |
| | | import static org.opends.server.loggers.debug.DebugLogger.debugEnabled; |
| | | import org.opends.server.types.DebugLogLevel; |
| | | import static org.opends.server.messages.BackendMessages.*; |
| | | import static org.opends.server.messages.MessageHandler.*; |
| | | import org.opends.server.messages.MessageHandler; |
| | |
| | | public abstract class Task |
| | | implements Comparable<Task> |
| | | { |
| | | /** |
| | | * The fully-qualified name of this class for debugging purposes. |
| | | */ |
| | | private static final String CLASS_NAME = |
| | | "org.opends.server.backends.task.Task"; |
| | | |
| | | |
| | | |
| | |
| | | Entry taskEntry) |
| | | throws InitializationException |
| | | { |
| | | assert debugEnter(CLASS_NAME, "initializeTaskInternal", |
| | | String.valueOf(taskEntry)); |
| | | |
| | | this.taskScheduler = taskScheduler; |
| | | this.taskEntry = taskEntry; |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "initializeTaskInternal", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_TASK_CANNOT_PARSE_SCHEDULED_START_TIME; |
| | | String message = getMessage(msgID, timeString, taskDN); |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "initializeTaskInternal", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_TASK_CANNOT_PARSE_ACTUAL_START_TIME; |
| | | String message = getMessage(msgID, timeString, taskDN); |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "initializeTaskInternal", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_TASK_CANNOT_PARSE_COMPLETION_TIME; |
| | | String message = getMessage(msgID, timeString, taskDN); |
| | |
| | | private String getAttributeValue(String attributeName, boolean isRequired) |
| | | throws InitializationException |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getAttributeValue", |
| | | String.valueOf(attributeName), |
| | | String.valueOf(isRequired)); |
| | | |
| | | List<Attribute> attrList = |
| | | taskEntry.getAttribute(attributeName.toLowerCase()); |
| | |
| | | private LinkedList<String> getAttributeValues(String attributeName) |
| | | throws InitializationException |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getAttributeValues", |
| | | String.valueOf(attributeName)); |
| | | |
| | | LinkedList<String> valueStrings = new LinkedList<String>(); |
| | | |
| | |
| | | */ |
| | | public final DN getTaskEntryDN() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getTaskEntryDN"); |
| | | |
| | | return taskEntryDN; |
| | | } |
| | |
| | | */ |
| | | public final Entry getTaskEntry() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getTaskEntry"); |
| | | |
| | | return taskEntry; |
| | | } |
| | |
| | | */ |
| | | public final Operation getOperation() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getOperation"); |
| | | |
| | | return operation; |
| | | } |
| | |
| | | */ |
| | | public final void setOperation(Operation operation) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setOperation", String.valueOf(operation)); |
| | | |
| | | this.operation = operation; |
| | | } |
| | |
| | | */ |
| | | public final String getTaskID() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getTaskID"); |
| | | |
| | | return taskID; |
| | | } |
| | |
| | | */ |
| | | public final String getRecurringTaskID() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getRecurringTaskID"); |
| | | |
| | | return recurringTaskID; |
| | | } |
| | |
| | | */ |
| | | public final TaskState getTaskState() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getTaskState"); |
| | | |
| | | return taskState; |
| | | } |
| | |
| | | */ |
| | | void setTaskState(TaskState taskState) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setTaskState", String.valueOf(taskState)); |
| | | |
| | | Lock lock = taskScheduler.writeLockEntry(taskEntryDN); |
| | | |
| | |
| | | */ |
| | | public final long getScheduledStartTime() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getStartTime"); |
| | | |
| | | return scheduledStartTime; |
| | | } |
| | |
| | | */ |
| | | public final long getActualStartTime() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getActualStartTime"); |
| | | |
| | | return actualStartTime; |
| | | } |
| | |
| | | */ |
| | | private void setActualStartTime(long actualStartTime) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setActualStartTime", |
| | | String.valueOf(actualStartTime)); |
| | | |
| | | Lock lock = taskScheduler.writeLockEntry(taskEntryDN); |
| | | |
| | |
| | | */ |
| | | public final long getCompletionTime() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getCompletionTime"); |
| | | |
| | | return completionTime; |
| | | } |
| | |
| | | */ |
| | | private void setCompletionTime(long completionTime) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setCompletionTime", |
| | | String.valueOf(completionTime)); |
| | | |
| | | Lock lock = taskScheduler.writeLockEntry(taskEntryDN); |
| | | |
| | |
| | | */ |
| | | public final LinkedList<String> getDependencyIDs() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getDependencyIDs"); |
| | | |
| | | return dependencyIDs; |
| | | } |
| | |
| | | */ |
| | | public final FailedDependencyAction getFailedDependencyAction() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getFailedDependencyAction"); |
| | | |
| | | return failedDependencyAction; |
| | | } |
| | |
| | | */ |
| | | public final LinkedList<String> getNotifyOnCompletionAddresses() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getNotifyOnCompletionAddresses"); |
| | | |
| | | return notifyOnCompletion; |
| | | } |
| | |
| | | */ |
| | | public final LinkedList<String> getNotifyOnErrorAddresses() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getNotifyOnErrorAddresses"); |
| | | |
| | | return notifyOnError; |
| | | } |
| | |
| | | */ |
| | | public final LinkedList<String> getLogMessages() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getLogMessages"); |
| | | |
| | | return logMessages; |
| | | } |
| | |
| | | void addLogMessage(ErrorLogSeverity severity, int messageID, |
| | | String messageString) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "addLogMessage", |
| | | String.valueOf(severity), String.valueOf(messageID), |
| | | String.valueOf(messageString)); |
| | | |
| | | Lock lock = taskScheduler.writeLockEntry(taskEntryDN); |
| | | |
| | |
| | | */ |
| | | public final int compareTo(Task task) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "compareTo", String.valueOf(task)); |
| | | |
| | | if (completionTime > 0) |
| | | { |
| | |
| | | */ |
| | | public final TaskState execute() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "execute"); |
| | | |
| | | setActualStartTime(TimeThread.getTime()); |
| | | setTaskState(TaskState.RUNNING); |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "execute", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | setTaskState(TaskState.STOPPED_BY_ERROR); |
| | | |
| | |
| | | public void initializeTask() |
| | | throws DirectoryException |
| | | { |
| | | assert debugEnter(CLASS_NAME, "initializeTask"); |
| | | |
| | | // No action is performed by default. |
| | | } |
| | |
| | | */ |
| | | public void interruptTask(TaskState interruptState, String interruptReason) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "interruptTask"); |
| | | |
| | | // No action is performed by default. |
| | | } |