Пример #1
0
            public ExcessReads()
            {
                _q = _world.NewJobQueue(configuration: _configuration);

                _excess = _world.NewJob;


                _world.PersistenceStore.LoadSuspended(typeof(string), 0).ReturnsForAnyArgs(new[] { _excess });

                _q.Write(_world.NewJob);
                _q.Write(_excess);
            }
Пример #2
0
        public QueueConfiguration Create()
        {
            var readyItems = _persistenceStore.LoadBy(JobStatus.Ready).ToArray();
            var cancellingItems = _persistenceStore.LoadBy(JobStatus.Cancelling).ToArray();

            var runningItems = _persistenceStore.LoadBy(JobStatus.Running).ToArray();
            var failedItems = _persistenceStore.LoadBy(JobStatus.Failed).ToArray();
            var waitingForChildren = _persistenceStore.LoadBy(JobStatus.WaitingForChildren).ToArray();

            //Exclude job root while picking the runnable items
            var cancellationInitiatedItems = _persistenceStore.LoadBy(JobStatus.CancellationInitiated)
                                                              .Where(_=>_.ParentId != null);

            var partiallyCompletedItems =  _persistenceStore.LoadBy(JobStatus.ReadyToComplete)
                                                            .Concat(_persistenceStore.LoadBy(JobStatus.ReadyToPoison))
                                                            .Concat(cancellationInitiatedItems)
                                                            .ToArray();

            var all = partiallyCompletedItems.Concat(readyItems)
                                             .Concat(cancellingItems)
                                             .Concat(failedItems)
                                             .Concat(waitingForChildren)
                                             .Concat(runningItems)
                                             .ToArray();

            var totalSuspendedItemsInSpecificQueues = 0;
            var activitySpecificQueues = new Dictionary<Type, IJobQueue>();

            foreach (var activityConfiguration in _configuration.ActivityConfiguration)
            {
                var suspendedCount = _persistenceStore.CountSuspended(activityConfiguration.Type);
                var filtered = Filter(all, activityConfiguration.Type);
                all = filtered.Item2;
                totalSuspendedItemsInSpecificQueues += suspendedCount;

                activitySpecificQueues[activityConfiguration.Type] =
                    new JobQueue(filtered.Item1, suspendedCount, activityConfiguration,
                        _configuration.ActivityConfiguration, _persistenceStore, _eventStream, _recoverableAction, _jobMutator);

                PublishQueueInitializedEvent(filtered.Item1.Length, suspendedCount, activityConfiguration.Type);
            }

            var suspendedCountForDefaultQueue = _persistenceStore.CountSuspended(null) -
                                                totalSuspendedItemsInSpecificQueues;

            var defaultQueue = new JobQueue(all, suspendedCountForDefaultQueue,
                _configuration.DefaultActivityConfiguration, _configuration.ActivityConfiguration, _persistenceStore,
                _eventStream, _recoverableAction, _jobMutator);

            PublishQueueInitializedEvent(all.Length, suspendedCountForDefaultQueue);

            return new QueueConfiguration(defaultQueue, activitySpecificQueues);
        }
Пример #3
0
 public ExcessWrites()
 {
     _excessItem = _world.NewJob;
     _queue = _world.NewJobQueue(configuration: _configuration);
     _queue.Write(_world.NewJob);
 }