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); }
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 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); }
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)); }
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 }); }
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(); }
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); }
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(); }
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 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); }
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; }
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); }