Example #1
0
        public async Task Dispatch(Job job, ActivityConfiguration configuration)
        {
            if (job == null) throw new ArgumentNullException("job");
            if (configuration == null) throw new ArgumentNullException("configuration");

            switch (job.Status)
            {
                case JobStatus.Ready:
                case JobStatus.Running:
                case JobStatus.Failed:
                    await Run(job);
                    break;
                case JobStatus.Cancelling:
                    await Run(job, true);
                    break;
                case JobStatus.WaitingForChildren:
                    _jobCoordinator.Run(job, () => _continuationLiveness.Verify(job.Id));
                    break;
                case JobStatus.ReadyToComplete:
                    _jobCoordinator.Run(job, () => _statusChanger.Change(job, JobStatus.Completed));
                    break;
                case JobStatus.ReadyToPoison:
                    _jobCoordinator.Run(job, () => _statusChanger.Change(job, JobStatus.Poisoned));
                    break;
                case JobStatus.CancellationInitiated:
                    _jobCoordinator.Run(job, () => _statusChanger.Change(job, JobStatus.Cancelled));
                    break;
                default:
                    _eventStream.Publish<Dispatcher>(EventType.JobAbandoned,
                        EventProperty.Named("Reason", "UnexpectedStatus"), EventProperty.JobSnapshot(job));
                    break;
            }
        }
        private void TestJsonSample(string token, ActivityConfiguration expectedActivityConfiguration)
        {
            ActivityConfiguration actualActivityConfiguration =
                JsonConvert.DeserializeObject <ActivityConfiguration>(token);

            Common.ValidateAreSame(expectedActivityConfiguration, actualActivityConfiguration);
        }
        private void TestTableJsonSample(JsonSampleInfo sampleInfo)
        {
            Core.Models.Table tableIn =
                Core.DataFactoryManagementClient.DeserializeInternalTableJson(sampleInfo.Json);

            Core.Models.Table tableOut =
                Core.DataFactoryManagementClient.DeserializeInternalTableJson(sampleInfo.Json);

            var expectedActivityConfiguration = new ActivityConfiguration()
            {
                Inputs = new Collection <ResolvedTable>()
                {
                    new ResolvedTable()
                    {
                        Table = this.tableConverter.ToWrapperType(tableIn),
                    },
                },
                Outputs = new Collection <ResolvedTable>()
                {
                    new ResolvedTable()
                    {
                        Table = this.tableConverter.ToWrapperType(tableOut),
                    },
                },
            };

            this.TestJsonSample(string.Concat("{ \"inputs\" : [{ \"table\":", sampleInfo.Json, "}], \"outputs\" : [{ \"table\":", sampleInfo.Json, "}]}"), expectedActivityConfiguration);
        }
Example #4
0
            public async Task ShouldNotSuspendAfterTheBufferIsProcessed()
            {
                var configuration = new ActivityConfiguration(typeof(string)).WithMaxQueueLength(1);

                var q = _world.NewJobQueue(configuration: configuration);

                q.Write(_world.NewJob);

                var suspendedJob = _world.NewJob;

                q.Write(suspendedJob);

                _world.PersistenceStore.LoadSuspended(typeof(string), Arg.Any <int>())
                .Returns(new Job[] { suspendedJob });

                await q.Read();

                await q.Read();

                var job = (Job)_world.NewJob;

                q.Write(job);

                Assert.False(job.Suspended);
            }
Example #5
0
        public JobQueue(IEnumerable<Job> items, 
            int suspendedCount,
            ActivityConfiguration configuration,    
            IEnumerable<ActivityConfiguration> allActivityConfiguration,
            IPersistenceStore persistenceStore,
            IEventStream eventStream,
            IRecoverableAction recoverableAction,
            IJobMutator jobMutator)
        {
            if (items == null) throw new ArgumentNullException("items");
            if (configuration == null) throw new ArgumentNullException("configuration");
            if (allActivityConfiguration == null) throw new ArgumentNullException("allActivityConfiguration");
            if (persistenceStore == null) throw new ArgumentNullException("persistenceStore");
            if (eventStream == null) throw new ArgumentNullException("eventStream");
            if (recoverableAction == null) throw new ArgumentNullException("recoverableAction");
            if (jobMutator == null) throw new ArgumentNullException("JobMutator");

            Configuration = configuration;

            _suspendedCount = suspendedCount;
            _allActivityConfiguration = allActivityConfiguration;
            _persistenceStore = persistenceStore;
            _eventStream = eventStream;
            _recoverableAction = recoverableAction;
            _jobMutator = jobMutator;
            _items = new Queue<Job>(items);
        }
Example #6
0
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            string schema = "dbo";

            modelBuilder.HasDefaultSchema(schema);
            modelBuilder.Configurations.Add(WorkflowConfigulartion.CreateInstance(schema));
            modelBuilder.Configurations.Add(ActivityConfiguration.CreateInstance(schema));
            modelBuilder.Configurations.Add(StateConfiguration.CreateInstance(schema));
            modelBuilder.Configurations.Add(CommandItemConfiguration.CreateInstance(schema));
        }
        private void TestPipelineJsonSample(JsonSampleInfo sampleInfo)
        {
            Core.Models.Pipeline pipeline =
                Core.DataFactoryManagementClient.DeserializeInternalPipelineJson(sampleInfo.Json);

            var expectedActivityConfiguration = new ActivityConfiguration()
            {
                Pipeline = this.pipelineConverter.ToWrapperType(pipeline)
            };

            this.TestJsonSample(string.Concat("{ \"pipeline\" : ", sampleInfo.Json, "}"), expectedActivityConfiguration);
        }
        public static JobQueueFactory NewJobQueueFactory(this World world,
                                                         IEnumerable <ActivityConfiguration> activityConfiguration = null,
                                                         ActivityConfiguration defaultActivityConfiguration        = null)
        {
            var configuration = Substitute.For <IDependableConfiguration>();

            configuration.DefaultActivityConfiguration.Returns(
                defaultActivityConfiguration ?? new ActivityConfiguration());

            configuration.ActivityConfiguration.Returns(
                activityConfiguration ?? Enumerable.Empty <ActivityConfiguration>());

            return(new JobQueueFactory(world.PersistenceStore, configuration, world.EventStream, world.RecoverableAction, world.JobMutator));
        }
Example #9
0
        public JobQueue(IEnumerable <Job> items,
                        int suspendedCount,
                        ActivityConfiguration configuration,
                        IEnumerable <ActivityConfiguration> allActivityConfiguration,
                        IPersistenceStore persistenceStore,
                        IEventStream eventStream,
                        IRecoverableAction recoverableAction,
                        IJobMutator jobMutator)
        {
            if (items == null)
            {
                throw new ArgumentNullException("items");
            }
            if (configuration == null)
            {
                throw new ArgumentNullException("configuration");
            }
            if (allActivityConfiguration == null)
            {
                throw new ArgumentNullException("allActivityConfiguration");
            }
            if (persistenceStore == null)
            {
                throw new ArgumentNullException("persistenceStore");
            }
            if (eventStream == null)
            {
                throw new ArgumentNullException("eventStream");
            }
            if (recoverableAction == null)
            {
                throw new ArgumentNullException("recoverableAction");
            }
            if (jobMutator == null)
            {
                throw new ArgumentNullException("JobMutator");
            }

            Configuration = configuration;

            _suspendedCount           = suspendedCount;
            _allActivityConfiguration = allActivityConfiguration;
            _persistenceStore         = persistenceStore;
            _eventStream       = eventStream;
            _recoverableAction = recoverableAction;
            _jobMutator        = jobMutator;
            _items             = new Queue <Job>(items);
        }
        public void ShouldUpdateRetryOnAndChangeToFailedStatus()
        {
            Job job           = _world.NewJob.OfType <string>().In(JobStatus.Running);
            var configuration = new ActivityConfiguration(typeof(string)).WithRetryDelay(TimeSpan.FromSeconds(10));

            _world.Configuration.For(typeof(string)).Returns(configuration);

            _world.NewFailedTransition().Transit(job);

            _world.JobMutator.Mutations(job)
            .Verify(new Mutation
            {
                JobStatus = JobStatus.Failed,
                RetryOn   = _world.Now() + configuration.RetryDelay
            });
        }
        public void ShouldUpdateRetryOnAndChangeToFailedStatus()
        {
            Job job = _world.NewJob.OfType<string>().In(JobStatus.Running);
            var configuration = new ActivityConfiguration(typeof (string)).WithRetryDelay(TimeSpan.FromSeconds(10));

            _world.Configuration.For(typeof (string)).Returns(configuration);

            _world.NewFailedTransition().Transit(job);

            _world.JobMutator.Mutations(job)
                .Verify(new Mutation
                {
                    JobStatus = JobStatus.Failed,
                    RetryOn = _world.Now() + configuration.RetryDelay
                });
        }
Example #12
0
        async Task Dispatch(Job job, ActivityConfiguration configuration)
        {
            await Task.Run(async () =>
            {
                try
                {
                    await _dispatcher.Dispatch(job, configuration);
                }
                catch (Exception e)
                {
                    if (e.IsFatal())
                        throw;

                    _eventStream.Publish<JobPump>(e);
                }
            })
            .FailFastOnException();            
        }
Example #13
0
            public async Task ShouldSuspendUntilTheEntireBufferIsProcessed()
            {
                var configuration = new ActivityConfiguration(typeof(string)).WithMaxQueueLength(2);

                var q = _world.NewJobQueue(configuration: configuration);

                q.Write(_world.NewJob);
                q.Write(_world.NewJob);

                q.Write(_world.NewJob);

                await q.Read();

                var job = (Job)_world.NewJob;

                q.Write(job);

                Assert.Equal(true, _world.JobMutator.Mutations(job).Dequeue().Suspended);
            }
Example #14
0
        async Task Dispatch(Job job, ActivityConfiguration configuration)
        {
            await Task.Run(async() =>
            {
                try
                {
                    await _dispatcher.Dispatch(job, configuration);
                }
                catch (Exception e)
                {
                    if (e.IsFatal())
                    {
                        throw;
                    }

                    _eventStream.Publish <JobPump>(e);
                }
            })
            .FailFastOnException();
        }
Example #15
0
 public static JobQueue NewJobQueue(this World world, IEnumerable <Job> jobs = null, int suspendedCount = 0, ActivityConfiguration configuration = null, IEnumerable <ActivityConfiguration> allActivityConfiguration = null)
 {
     return(new JobQueue(jobs ?? Enumerable.Empty <Job>(),
                         suspendedCount,
                         configuration ?? new ActivityConfiguration().WithMaxQueueLength(1000),
                         allActivityConfiguration ?? Enumerable.Empty <ActivityConfiguration>(),
                         world.PersistenceStore,
                         world.EventStream,
                         world.RecoverableAction,
                         world.JobMutator));
 }
Example #16
0
            public async Task ShouldSuspendUntilTheEntireBufferIsProcessed()
            {
                var configuration = new ActivityConfiguration(typeof (string)).WithMaxQueueLength(2);

                var q = _world.NewJobQueue(configuration: configuration);

                q.Write(_world.NewJob);
                q.Write(_world.NewJob);

                q.Write(_world.NewJob);

                await q.Read();

                var job = (Job) _world.NewJob;
                q.Write(job);

                Assert.Equal(true, _world.JobMutator.Mutations(job).Dequeue().Suspended);
            }
Example #17
0
            public async Task ShouldNotSuspendAfterTheBufferIsProcessed()
            {
                var configuration = new ActivityConfiguration(typeof (string)).WithMaxQueueLength(1);

                var q = _world.NewJobQueue(configuration: configuration);

                q.Write(_world.NewJob);

                var suspendedJob = _world.NewJob;
                q.Write(suspendedJob);

                _world.PersistenceStore.LoadSuspended(typeof (string), Arg.Any<int>())
                    .Returns(new Job[] {suspendedJob});

                await q.Read();
                await q.Read();

                var job = (Job) _world.NewJob;

                q.Write(job);

                Assert.False(job.Suspended);
            }
 public ActivityExecutionContext(StateExecutionContext stateExecutionContext,
                                 ActivityConfiguration activityConfiguration)
 {
     ActivityConfiguration = activityConfiguration;
     StateExecutionContext = stateExecutionContext;
 }
Example #19
0
 public static JobQueue NewJobQueue(this World world, IEnumerable<Job> jobs = null, int suspendedCount = 0, ActivityConfiguration configuration = null, IEnumerable<ActivityConfiguration> allActivityConfiguration = null)
 {
     return new JobQueue(jobs ?? Enumerable.Empty<Job>(), 
         suspendedCount, 
         configuration ?? new ActivityConfiguration().WithMaxQueueLength(1000),
         allActivityConfiguration ?? Enumerable.Empty<ActivityConfiguration>(),
         world.PersistenceStore, 
         world.EventStream,
         world.RecoverableAction,
         world.JobMutator);
 }
        public static JobQueueFactory NewJobQueueFactory(this World world,
            IEnumerable<ActivityConfiguration> activityConfiguration = null,
            ActivityConfiguration defaultActivityConfiguration = null)
        {
            var configuration = Substitute.For<IDependableConfiguration>();

            configuration.DefaultActivityConfiguration.Returns(
                defaultActivityConfiguration ?? new ActivityConfiguration());

            configuration.ActivityConfiguration.Returns(
                activityConfiguration ?? Enumerable.Empty<ActivityConfiguration>());

            return new JobQueueFactory(world.PersistenceStore, configuration, world.EventStream, world.RecoverableAction, world.JobMutator);
        }