コード例 #1
0
        private void OnTaskSubmittedMasterCommand(TaskSubmittedMasterCommand command)
        {
            Trace.WriteLine("ENTER: Handling task '{0}' request ...".FormatInvariant(command.TaskId));

            ITaskRuntimeInfo taskInfo = this.repository.TaskRuntimeInfo.GetById(command.TaskId);

            if (taskInfo == null)
            {
                Trace.TraceWarning("EXIT: Task '{0}' not found.".FormatInvariant(command.TaskId));

                return;
            }

            switch (taskInfo.Status)
            {
            case TaskStatus.Pending:
                break;

            case TaskStatus.Canceled:
                return;

            default:
                Trace.TraceWarning("EXIT: Task '{0}' status is '{1}'.".FormatInvariant(command.TaskId, taskInfo.Status));

                return;
            }

            foreach (ITaskProcessorRuntimeInfo bestProcessor in this.taskDistributor.ChooseProcessorForTask(taskInfo))
            {
                if (this.AssignTaskToProcessor(taskInfo.TaskId, taskInfo.TaskType, bestProcessor.TaskProcessorId))
                {
                    Trace.WriteLine("EXIT: Task '{0}' assigned to processor '{1}'.".FormatInvariant(command.TaskId, bestProcessor.TaskProcessorId));

                    return;
                }
            }

            this.repository.TaskRuntimeInfo.Assign(taskInfo.TaskId, null);

            Trace.TraceWarning("EXIT: All task processors failed to handle task '{0}' assignment.".FormatInvariant(command.TaskId));
        }
コード例 #2
0
        private void SubmitTask(bool isPollingQueueTask, bool hasSummary, TaskPriority expectedPriority, Func <ITask, ITaskSummary, Guid> submitCallback)
        {
            this.DateTimeProvider.UtcNow = DateTime.UtcNow.AddMinutes(-1);

            FakeTask task1 = new FakeTask()
            {
                StringValue = "Hello Submit Task",
                NumberValue = 1234567
            };

            StringTaskSummary summary1;

            if (hasSummary)
            {
                summary1 = new StringTaskSummary("Hello World");
            }

            this.Configuration.PredefineResult(isPollingQueueTask ? "Test" : null, c => c.GetPollingQueueKey(task1.GetType()));

            Guid taskId = submitCallback(task1, summary1);

            Assert.IsNotNull(this.TaskProcessorFacade.GetTask(taskId));

            ITaskRuntimeInfo taskInfo = this.TaskProcessorFacade.GetTaskRuntimeInfo(taskId);

            Assert.IsNotNull(taskInfo);

            Assert.AreEqual(taskId, taskInfo.TaskId);
            Assert.AreEqual(expectedPriority, taskInfo.Priority);
            Assert.AreEqual(TaskStatus.Pending, taskInfo.Status);
            Assert.AreEqual(this.DateTimeProvider.UtcNow, taskInfo.SubmittedUtc);

            FakeTask task2 = (FakeTask)this.Repository.Tasks.GetById(taskId);

            UnitTestHelpers.AssertEqualByPublicScalarProperties(task1, task2);

            if (hasSummary)
            {
                StringTaskSummary summary2 = (StringTaskSummary)this.Repository.TaskSummary.GetById(taskId);

                Assert.AreEqual(summary1.Summary, summary2.Summary);
            }

            TaskSubmittedMasterCommand message = this.TaskProcessorFacade.MessageBus.MasterCommands
                                                 .OfType <TaskSubmittedMasterCommand>()
                                                 .SingleOrDefault(m => m.TaskId == taskId);

            if (isPollingQueueTask)
            {
                Assert.IsNull(message);

                Assert.IsTrue(this.Repository.TaskRuntimeInfo.GetPending(true).Any(p => p.TaskId == taskId));
                Assert.IsTrue(this.Repository.TaskRuntimeInfo.ReservePollingQueueTasks("Test", int.MaxValue).Any(p => p.TaskId == taskId));
            }
            else
            {
                Assert.IsNotNull(message);

                Assert.AreNotEqual(Guid.Empty, message.MessageUniqueId);
                Assert.AreEqual(taskId, message.TaskId);

                Assert.IsTrue(this.Repository.TaskRuntimeInfo.GetPending(false).Any(p => p.TaskId == taskId));
            }
        }