private object RegisterTaskNotification(MapReduceOperation operation) { string taskID = (string)operation.TaskID; if (taskID == null || string.IsNullOrEmpty(taskID)) { throw new OperationFailedException("Task can not be null or empty"); } TaskBase t = null; if (runningTasks.ContainsKey(taskID)) { t = (TaskBase)runningTasks[taskID]; t.AddTaskCallbackInfo((TaskCallbackInfo)operation.CallbackInfo); } else if (waitingTasks.ContainsKey(taskID)) { t = (TaskBase)waitingTasks[taskID]; t.AddTaskCallbackInfo((TaskCallbackInfo)operation.CallbackInfo); } else if (taskOutputStore != null && taskOutputStore.TaskOutputExists(taskID)) { //Put listener info into taskoutput and then call notify client async TaskOutput output = taskOutputStore.TaskOutput(taskID); if (output != null) { output.AddToListeners(operation.CallbackInfo); } if (_context.CacheImpl != null && _context.CacheInternal != null) { EventContext eventContext = new EventContext(); eventContext.TaskStatus = TaskStatus.Success; IList listeners = new ArrayList(); listeners.Add((TaskCallbackInfo)operation.CallbackInfo); _context.CacheInternal.NotifyTaskCallback(taskID, listeners, true, null, eventContext); } } else if (this.cancelledTask.Contains(taskID)) { throw new OperationFailedException("Task with Specified TaskId was cancelled."); } else { throw new OperationFailedException("Task with Specified Task id does not exists"); } return(true); }
private object UnregisterTaskNotification(MapReduceOperation operation) { String taskID = (String)operation.TaskID; if (taskID == null || string.IsNullOrEmpty(taskID)) { throw new OperationFailedException("Task can not be null or empty"); } TaskBase t = null; if (runningTasks.ContainsKey(taskID)) { t = (TaskBase)runningTasks[taskID]; t.RemoveTaskCallbackInfo((TaskCallbackInfo)operation.CallbackInfo); } else if (waitingTasks.ContainsKey(taskID)) { t = (TaskBase)waitingTasks[taskID]; t.RemoveTaskCallbackInfo((TaskCallbackInfo)operation.CallbackInfo); } else if (taskOutputStore != null && taskOutputStore.TaskOutputExists(taskID)) { //remove listener info from taskoutput TaskOutput output = taskOutputStore.TaskOutput(taskID); if (output != null) { output.RemoveFromListeners(operation.CallbackInfo); } } else if (this.cancelledTask.Contains(taskID)) { throw new OperationFailedException("Task with Specified TaskId was cancelled."); } else { throw new OperationFailedException("Task with Specified Task id does not exists"); } return(true); }
private object CancelTask(MapReduceOperation operation) { string taskID = (string)operation.TaskID; lock (_lock) { if (runningTasks.ContainsKey(taskID)) { TaskBase t = (TaskBase)runningTasks[taskID]; t.StopTask(); t.Dispose(); this.cancelledTask.Add(taskID); if (_context.CacheImpl != null && _context.CacheInternal != null) { EventContext eventContext = new EventContext(); eventContext.TaskStatus = TaskStatus.Cancelled; eventContext.TaskFailureReason = "Task was Cancelled by user."; _context.CacheInternal.NotifyTaskCallback(t.TaskId, t.CallbackListeners, false, null, eventContext); } runningTasks.Remove(taskID); if (_context.PerfStatsColl != null) { _context.PerfStatsColl.DecrementRunningTasks(); } if (_context.NCacheLog.IsInfoEnabled) { _context.NCacheLog.Info("TaskTracker.CancelTask", "Task with task ID '" + taskID.ToUpper() + "' has been cancelled."); } } else { _context.NCacheLog.Error("TaskTracker.CancelTask", "Task with task ID '" + taskID.ToUpper() + "' does not exist."); } } return(true); }
private TaskExecutionStatus SubmitTask(TaskBase task) { if (_context.NCacheLog.IsInfoEnabled) { _context.NCacheLog.Info("TaskTracker.SubmitTask", "Task with TaskId '" + task.TaskId + "' is submitted successfully."); } lock (_lock) { if (submittedTasks != null) { if (!submittedTasks.ContainsKey(task.TaskId)) { submittedTasks.Add(task.TaskId, task); } return(TaskExecutionStatus.Submitted); } else { return(TaskExecutionStatus.Failure); } } }
public void RemoveDeadClientsTasks(ArrayList clients) { //Locking with starttask lock (_lock) { //Removing callback entries of dead clients from waiting tasks ICollection waitingTaskList = waitingTasks.Keys; for (IEnumerator it = clients.GetEnumerator(); it.MoveNext();) { string client = (string)it.Current; if (_context.NCacheLog.IsInfoEnabled) { _context.NCacheLog.Info("TaskTracker.RemoveDeadClients", "Removing waiting task listeners for client " + client); } foreach (string taskId in waitingTaskList) { TaskBase t = (TaskBase)waitingTasks[taskId]; if (t != null && t.CallbackListeners.Count != 0) { for (IEnumerator cbit = t.CallbackListeners.GetEnumerator(); cbit.MoveNext();) { TaskCallbackInfo taskCallbackInfo = (TaskCallbackInfo)cbit.Current; if (taskCallbackInfo.Client.Equals(client)) { t.CallbackListeners.Remove(taskCallbackInfo); } } if (t.CallbackListeners.Count == 0) { if (_context.NCacheLog.IsInfoEnabled) { _context.NCacheLog.Info("TaskTracker.RemoveDeadClients", "No listeners remaining therefore removing waiting task " + t.TaskId); } waitingTasks.Remove(t.TaskId); if (_context.PerfStatsColl != null) { _context.PerfStatsColl.DecrementWaitingTasks(); } } } } } //Removing callback entries of dead clients from running tasks ICollection runningTaskList = runningTasks.Keys; for (IEnumerator it = clients.GetEnumerator(); it.MoveNext();) { string client = (string)it.Current; if (_context.NCacheLog.IsInfoEnabled) { _context.NCacheLog.Info("TaskTracker.RemoveDeadClients", "Removing running task listeners for client " + client); } foreach (string taskId in runningTaskList) { TaskBase t = (TaskBase)runningTasks[taskId]; if (t != null && t.CallbackListeners.Count != 0) { for (IEnumerator cbit = t.CallbackListeners.GetEnumerator(); cbit.MoveNext();) { TaskCallbackInfo taskCallbackInfo = (TaskCallbackInfo)cbit.Current; if (taskCallbackInfo.Client.Equals(client)) { t.CallbackListeners.Remove(taskCallbackInfo); } } if (t.CallbackListeners.Count == 0) { if (_context.NCacheLog.IsInfoEnabled) { _context.NCacheLog.Info("TaskTracker.RemoveDeadClients", "No listeners remaining therefore removing running task " + t.TaskId); } waitingTasks.Remove(t.TaskId); if (_context.PerfStatsColl != null) { _context.PerfStatsColl.DecrementWaitingTasks(); } } } } } } //Remove Iterators from the task output list //Remove Listeners for these clients }
private object CancelAllTasks(bool topologyChanged) { //Stop and Remove all running/waiting tasks lock (_lock) { foreach (object taskID in runningTasks.Keys) { TaskBase t = (TaskBase)runningTasks[taskID]; if (t != null) { t.StopTask(); t.Dispose(); this.cancelledTask.Add(taskID.ToString()); if (_context.CacheImpl != null && _context.CacheInternal != null) { EventContext eventContext = new EventContext(); eventContext.TaskStatus = TaskStatus.Cancelled; if (topologyChanged) { eventContext.TaskFailureReason = "Task was cancelled because Toplogy has been change."; } _context.CacheInternal.NotifyTaskCallback(t.TaskId, t.CallbackListeners, false, null, eventContext); } } } } runningTasks.Clear(); if (_context.PerfStatsColl != null) { _context.PerfStatsColl.RunningTasksCount(0); } lock (_lock) { foreach (object taskID in waitingTasks.Keys) { TaskBase t = (TaskBase)waitingTasks[taskID]; if (t != null) { t.StopTask(); t.Dispose(); if (_context.CacheImpl != null && _context.CacheInternal != null) { EventContext eventContext = new EventContext(); eventContext.TaskStatus = TaskStatus.Cancelled; if (topologyChanged) { eventContext.TaskFailureReason = "Task was cancelled because of Toplogy change."; } _context.CacheInternal.NotifyTaskCallback(t.TaskId, t.CallbackListeners, false, null, eventContext); } } } } waitingTasks.Clear(); if (_context.PerfStatsColl != null) { _context.PerfStatsColl.WaitingTasksCount(0); } //Reset the sequenceID and lastRunningID sequenceId = 0; lastRunningTaskId = 0; if (taskOutputStore != null) { taskOutputStore.Dispose(); } return(true); }
private TaskExecutionStatus StartTask(string taskId, long sequenceId) { lock (_lock) { TaskBase task = (TaskBase)submittedTasks[taskId]; if (task != null) { submittedTasks.Remove(taskId); if (SlotAvailable) { if (sequenceId == lastRunningTaskId + 1) { try { if (!runningTasks.ContainsKey(task.TaskId)) { runningTasks.Add(task.TaskId, task); } if (_context.PerfStatsColl != null) { _context.PerfStatsColl.IncrementRunningTasks(); } lastRunningTaskId++; task.StartTask(); } catch (Exception exx) { task.StopTask(); task.Dispose(); if (runningTasks.ContainsKey(task.TaskId)) { runningTasks.Remove(task.TaskId); if (_context.PerfStatsColl != null) { _context.PerfStatsColl.DecrementRunningTasks(); } } throw new OperationFailedException(exx.Message); } while (taskSequenceList.Count != 0 && SlotAvailable) { long seqID = 0; foreach (long key in taskSequenceList.Keys) { seqID = key; break; } if (seqID == lastRunningTaskId + 1) { if (waitingTasks.Count > 0) { TaskBase t = (TaskBase)waitingTasks[taskSequenceList[seqID]]; try { if (!runningTasks.ContainsKey(t.TaskId)) { runningTasks.Add(t.TaskId, t); } if (_context.PerfStatsColl != null) { _context.PerfStatsColl.IncrementRunningTasks(); } lastRunningTaskId++; taskSequenceList.Remove(seqID); waitingTasks.Remove(t.TaskId); if (_context.PerfStatsColl != null) { _context.PerfStatsColl.DecrementWaitingTasks(); } t.StartTask(); } catch (Exception exx) { t.StopTask(); if (runningTasks.ContainsKey(t.TaskId)) { runningTasks.Remove(t.TaskId); if (_context.PerfStatsColl != null) { _context.PerfStatsColl.DecrementRunningTasks(); } } throw new OperationFailedException(exx.Message); } } } else { break; } } return(TaskExecutionStatus.Running); } else { taskSequenceList.Add(sequenceId, task.TaskId); if (!waitingTasks.ContainsKey(task.TaskId)) { waitingTasks.Add(task.TaskId, task); } if (_context.PerfStatsColl != null) { _context.PerfStatsColl.IncrementWaitingTasks(); } if (_context.NCacheLog.IsInfoEnabled) { _context.NCacheLog.Info("TaskTracker.StartTask", "MapReduce task with task ID '" + task.TaskId.ToUpper() + "' is in the waiting queue."); } return(TaskExecutionStatus.Waiting); } } else if (taskSequenceList.Count < _queueSize) { taskSequenceList.Add(sequenceId, task.TaskId); if (!waitingTasks.ContainsKey(task.TaskId)) { waitingTasks.Add(task.TaskId, task); } if (_context.PerfStatsColl != null) { _context.PerfStatsColl.IncrementWaitingTasks(); } if (_context.NCacheLog.IsInfoEnabled) { _context.NCacheLog.Info("TaskTracker.StartTask", "MapReduce task with task ID '" + task.TaskId.ToUpper() + "' is in the waiting queue."); } return(TaskExecutionStatus.Waiting); } else { throw new Exception("No more task can be submitted"); } } } return(TaskExecutionStatus.Failure); }
public void OnTaskCallback(CallbackResult callbackInfo) { if (callbackInfo != null) { TaskBase task = callbackInfo.Task; if (runningTasks.ContainsKey(task.TaskId)) { if (_context.CacheImpl != null && _context.CacheInternal != null) { EventContext eventContext = new EventContext(); eventContext.TaskStatus = callbackInfo.Status; eventContext.TaskFailureReason = callbackInfo.FailureReason; _context.CacheInternal.NotifyTaskCallback(task.TaskId, task.CallbackListeners, false, null, eventContext); } TaskBase runningT = (TaskBase)runningTasks[task.TaskId]; if (runningT != null) { runningT.StopTask(); } runningTasks.Remove(task.TaskId); // decrementing running tasks if (_context.PerfStatsColl != null) { _context.PerfStatsColl.DecrementRunningTasks(); } // Additional set of counter if (runningTasks.Count == 0 && _context.PerfStatsColl != null) { _context.PerfStatsColl.RunningTasksCount(0); } if (taskSequenceList.Count > 0) { KeyValuePair <long, string> entry = new KeyValuePair <long, string>(); try { foreach (KeyValuePair <long, string> kvp in taskSequenceList) { entry = kvp; break; } if (!entry.Key.Equals(null) && !entry.Value.Equals(null)) { TaskBase t = (TaskBase)waitingTasks[entry.Value]; if (t != null) { t.StartTask(); } if (!runningTasks.ContainsKey(t.TaskId)) { runningTasks.Add(t.TaskId, t); } // incrementing running tasks if (_context.PerfStatsColl != null) { _context.PerfStatsColl.IncrementRunningTasks(); } lastRunningTaskId++; // decrementing waiting tasks. if (_context.PerfStatsColl != null) { _context.PerfStatsColl.DecrementWaitingTasks(); } taskSequenceList.Remove(entry.Key); // remove the entry waitingTasks.Remove(t.TaskId); if (waitingTasks.Count == 0) { if (_context.PerfStatsColl != null) { _context.PerfStatsColl.WaitingTasksCount(0); } } } } catch (Exception ex) { } } } } }