| | |
| | | boolean scheduleIteration) |
| | | throws DirectoryException |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | public RecurringTask removeRecurringTask(String recurringTaskID) |
| | | throws DirectoryException |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | public void scheduleTask(Task task, boolean writeState) |
| | | throws DirectoryException |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | |
| | |
| | | */ |
| | | public Task cancelTask(String taskID) |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | public Task removePendingTask(String taskID) |
| | | throws DirectoryException |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | public Task removeCompletedTask(String taskID) |
| | | throws DirectoryException |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | */ |
| | | public boolean threadDone(TaskThread taskThread, Task completedTask) |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | */ |
| | | public void addCompletedTask(Task completedTask) |
| | | { |
| | | |
| | | // The scheduler lock is reentrant, so even if we already hold it, we can |
| | | // acquire it again. |
| | | schedulerLock.lock(); |
| | |
| | | */ |
| | | public void stopScheduler() |
| | | { |
| | | |
| | | stopRequested = true; |
| | | |
| | | try |
| | |
| | | public void interruptRunningTasks(TaskState interruptState, |
| | | String interruptReason, boolean waitForStop) |
| | | { |
| | | |
| | | |
| | | // Grab a copy of the running threads so that we can operate on them without |
| | | // holding the lock. |
| | | LinkedList<TaskThread> threadList = new LinkedList<TaskThread>(); |
| | |
| | | */ |
| | | public void run() |
| | | { |
| | | |
| | | isRunning = true; |
| | | schedulerThread = currentThread(); |
| | | |
| | |
| | | */ |
| | | private TaskState shouldStart(Task task) |
| | | { |
| | | |
| | | if (! isRunning) |
| | | { |
| | | return TaskState.UNSCHEDULED; |
| | |
| | | private void initializeTasksFromBackingFile() |
| | | throws InitializationException |
| | | { |
| | | |
| | | String backingFilePath = taskBackend.getTaskBackingFile(); |
| | | |
| | | try |
| | |
| | | private void createNewTaskBackingFile() |
| | | throws InitializationException |
| | | { |
| | | |
| | | String backingFile = taskBackend.getTaskBackingFile(); |
| | | LDIFExportConfig exportConfig = |
| | | new LDIFExportConfig(backingFile, ExistingFileBehavior.OVERWRITE); |
| | |
| | | */ |
| | | public void writeState() |
| | | { |
| | | |
| | | |
| | | String backingFilePath = taskBackend.getTaskBackingFile(); |
| | | String tmpFilePath = backingFilePath + ".tmp"; |
| | | LDIFExportConfig exportConfig = |
| | |
| | | */ |
| | | public long getEntryCount() |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | */ |
| | | public Entry getTaskRootEntry() |
| | | { |
| | | |
| | | return taskRootEntry; |
| | | } |
| | | |
| | |
| | | */ |
| | | public Entry getScheduledTaskParentEntry() |
| | | { |
| | | |
| | | return scheduledTaskParentEntry; |
| | | } |
| | | |
| | |
| | | */ |
| | | public Entry getRecurringTaskParentEntry() |
| | | { |
| | | |
| | | return recurringTaskParentEntry; |
| | | } |
| | | |
| | |
| | | */ |
| | | public Task getScheduledTask(String taskID) |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | */ |
| | | public Task getScheduledTask(DN taskEntryDN) |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | */ |
| | | Lock writeLockEntry(DN entryDN) |
| | | { |
| | | |
| | | Lock lock = LockManager.lockWrite(entryDN); |
| | | while (lock == null) |
| | | { |
| | |
| | | Lock readLockEntry(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | | |
| | | Lock lock = LockManager.lockRead(entryDN); |
| | | for (int i=0; ((lock == null) && (i < 4)); i++) |
| | | { |
| | |
| | | */ |
| | | void unlockEntry(DN entryDN, Lock lock) |
| | | { |
| | | |
| | | LockManager.unlock(entryDN, lock); |
| | | } |
| | | |
| | |
| | | */ |
| | | public Entry getScheduledTaskEntry(DN scheduledTaskEntryDN) |
| | | { |
| | | |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | public boolean searchScheduledTasks(SearchOperation searchOperation) |
| | | throws DirectoryException |
| | | { |
| | | |
| | | SearchFilter filter = searchOperation.getFilter(); |
| | | |
| | | schedulerLock.lock(); |
| | |
| | | */ |
| | | public RecurringTask getRecurringTask(String recurringTaskID) |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | */ |
| | | public RecurringTask getRecurringTask(DN recurringTaskEntryDN) |
| | | { |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | */ |
| | | public Entry getRecurringTaskEntry(DN recurringTaskEntryDN) |
| | | { |
| | | |
| | | |
| | | schedulerLock.lock(); |
| | | |
| | | try |
| | |
| | | public boolean searchRecurringTasks(SearchOperation searchOperation) |
| | | throws DirectoryException |
| | | { |
| | | |
| | | SearchFilter filter = searchOperation.getFilter(); |
| | | |
| | | schedulerLock.lock(); |
| | |
| | | public Task entryToScheduledTask(Entry entry, Operation operation) |
| | | throws DirectoryException |
| | | { |
| | | |
| | | |
| | | // Get the name of the class that implements the task logic. |
| | | AttributeType attrType = |
| | | DirectoryServer.getAttributeType(ATTR_TASK_CLASS.toLowerCase()); |
| | |
| | | public RecurringTask entryToRecurringTask(Entry entry) |
| | | throws DirectoryException |
| | | { |
| | | |
| | | return new RecurringTask(this, entry); |
| | | } |
| | | |
| | |
| | | */ |
| | | public DN getComponentEntryDN() |
| | | { |
| | | |
| | | return taskBackend.getConfigEntryDN(); |
| | | } |
| | | |
| | |
| | | */ |
| | | public String getClassName() |
| | | { |
| | | |
| | | return CLASS_NAME; |
| | | } |
| | | |
| | |
| | | */ |
| | | public LinkedHashMap<String,String> getAlerts() |
| | | { |
| | | |
| | | LinkedHashMap<String,String> alerts = new LinkedHashMap<String,String>(); |
| | | |
| | | alerts.put(ALERT_TYPE_CANNOT_FIND_RECURRING_TASK, |