void ITaskQueue.TaskFailed(Task task, ErrorReport errorReport)
        {
            Contract.Requires<ArgumentNullException>(task != null);
            Contract.Requires<ArgumentNullException>(errorReport != null);
            Contract.Requires<ArgumentException>(task.State == TaskState.Processing);
            Contract.Ensures(task.State == TaskState.Failed);
            Contract.Ensures(task.Error == errorReport);

            throw new NotImplementedException();
        }
Exemple #2
0
        /// <summary>
        /// Informs scheduler that task with id = <paramref name="taskId"/> has thrown an exception <paramref name="exception"/>.  
        /// </summary>
        /// <param name="taskId">
        /// Task's unique identifier.
        /// </param>
        /// <param name="exception">
        /// Error report.
        /// </param>
        public void FailTask(Guid taskId, ErrorReport exception)
        {
            Contract.Requires<InvalidOperationException>(currentTask != null);
            Contract.Requires<InvalidOperationException>(taskId == currentTask.Id);
            Contract.Ensures(currentTask == null);

            taskQueue.TaskFailed(currentTask, exception);

            Logger.Write(
                   LogCategories.Information(string.Format("Task {0} failed on {1}", currentTask, RemoteAddress),
                       LogCategories.TaskServices,
                       LogCategories.TaskProviderService));
            Trace.WriteLine(string.Format("Task {0} is failed: {1}", currentTask, exception.Error));
            DiscardTask();
        }
Exemple #3
0
        /// <summary>
        /// Informs task queue that specified <paramref name="task"/> has failed.
        /// </summary>
        /// <param name="task">
        /// An instance of <see cref="Task"/> that failed.
        /// </param>
        /// <param name="errorReport">
        /// Error report.
        /// </param>
        public void TaskFailed(Task task, ErrorReport errorReport)
        {
            lock (task)
            {
                FromProcessing(task, terminateProcessing: false);
                ToFailed(task);
                task.Error = errorReport;

                var job = task.Job;
                lock (job)
                {
                    Logger.Write(
                        LogCategories.Error(
                            string.Format("Task {0} failed because of {1}. This caused job {2} to fail.", task,
                                          errorReport.Error, task.Job),
                            LogCategories.TaskServices,
                            LogCategories.TaskQueue));

                    job.State = JobState.Failed;

                    foreach (var t in task.Job.Tasks)
                    {
                        lock (t)
                        {
                            switch (t.State)
                            {
                                case TaskState.NotReady:
                                    FromNotReady(t);
                                    break;

                                case TaskState.Processing:
                                    FromProcessing(t);
                                    break;

                                case TaskState.Failed:
                                    continue;

                                case TaskState.Pending:
                                    FromPending(t);
                                    break;

                                case TaskState.Completed:
                                    FromCompleted(t);
                                    break;

                                default:
                                    throw new InvalidOperationException(
                                        string.Format("Task {0} has unexpected state {1} on TaskQueue::TaskFailed()", task, task.State));
                            }

                            ToFailed(t);
                        }
                    }
                }
            }
        }