/// <inheritdoc /> public override async Task <bool> SetNewExecutionAsync( ExecutionStartedEvent executionStartedEvent, string eTag /* not used */, string inputStatusOverride) { var orchestrationState = new OrchestrationState() { Name = executionStartedEvent.Name, Version = executionStartedEvent.Version, OrchestrationInstance = executionStartedEvent.OrchestrationInstance, OrchestrationStatus = OrchestrationStatus.Pending, Input = inputStatusOverride ?? executionStartedEvent.Input, Tags = executionStartedEvent.Tags, CreatedTime = executionStartedEvent.Timestamp, LastUpdatedTime = DateTime.UtcNow, CompletedTime = Core.Common.DateTimeUtils.MinDateTime, ScheduledStartTime = executionStartedEvent.ScheduledStartTime }; var orchestrationStateEntity = new OrchestrationStateInstanceEntity() { State = orchestrationState, SequenceNumber = 0 }; await this.instanceStore.WriteEntitiesAsync(new[] { orchestrationStateEntity }); return(true); }
protected async Task JumpStartOrchestrationAsync(OrchestrationJumpStartInstanceEntity jumpStartEntity) { var instance = jumpStartEntity.State.OrchestrationInstance; OrchestrationStateInstanceEntity stateEntity = (await this.service.InstanceStore.GetEntitiesAsync(instance.InstanceId, instance.ExecutionId))?.FirstOrDefault(); if (stateEntity != null) { // It seems orchestration started, delete entity from JumpStart table await this.service.InstanceStore.DeleteJumpStartEntitiesAsync(new[] { jumpStartEntity }); } else if (!jumpStartEntity.JumpStartTime.IsSet() && jumpStartEntity.State.CreatedTime + this.ignoreWindow < DateTime.UtcNow) { // JumpStart orchestration var startedEvent = new ExecutionStartedEvent(-1, jumpStartEntity.State.Input) { Tags = jumpStartEntity.State.Tags, Name = jumpStartEntity.State.Name, Version = jumpStartEntity.State.Version, OrchestrationInstance = jumpStartEntity.State.OrchestrationInstance }; var taskMessage = new TaskMessage { OrchestrationInstance = jumpStartEntity.State.OrchestrationInstance, Event = startedEvent }; await this.service.SendTaskOrchestrationMessageAsync(taskMessage); TraceHelper.Trace( TraceEventType.Information, "JumpStartManager-SendTaskOrchestrationMessage", $"JumpStartManager: SendTaskOrchestrationMessageAsync({instance.InstanceId}, {instance.ExecutionId}) success!"); // Now update the JumpStart table jumpStartEntity.JumpStartTime = DateTime.UtcNow; await this.service.InstanceStore.WriteJumpStartEntitiesAsync(new[] { jumpStartEntity }); TraceHelper.Trace( TraceEventType.Information, "JumpStartManager-WriteJumpStartEntities", $"JumpStartManager: WriteJumpStartEntitiesAsync({instance.InstanceId}, {instance.ExecutionId}) success!"); } }
AzureTableCompositeTableEntity HistoryEventToTableEntity(InstanceEntityBase historyEvent) { OrchestrationWorkItemInstanceEntity workItemEvent = null; OrchestrationStateInstanceEntity historyStateEvent = null; if ((workItemEvent = historyEvent as OrchestrationWorkItemInstanceEntity) != null) { return(new AzureTableOrchestrationHistoryEventEntity( workItemEvent.InstanceId, workItemEvent.ExecutionId, workItemEvent.SequenceNumber, workItemEvent.EventTimestamp, workItemEvent.HistoryEvent)); } else if ((historyStateEvent = historyEvent as OrchestrationStateInstanceEntity) != null) { return(new AzureTableOrchestrationStateEntity(historyStateEvent.State)); } else { throw new InvalidOperationException($"Invalid history event type: {historyEvent.GetType()}"); } }
/// <inheritdoc /> public override async Task SetNewExecutionAsync(ExecutionStartedEvent executionStartedEvent) { var orchestrationState = new OrchestrationState() { Name = executionStartedEvent.Name, Version = executionStartedEvent.Version, OrchestrationInstance = executionStartedEvent.OrchestrationInstance, OrchestrationStatus = OrchestrationStatus.Pending, Input = executionStartedEvent.Input, Tags = executionStartedEvent.Tags, CreatedTime = executionStartedEvent.Timestamp, LastUpdatedTime = DateTime.UtcNow, CompletedTime = Core.Common.DateTimeUtils.MinDateTime }; var orchestrationStateEntity = new OrchestrationStateInstanceEntity() { State = orchestrationState, SequenceNumber = 0 }; await this.instanceStore.WriteEntitiesAsync(new[] { orchestrationStateEntity }); }