Exemple #1
0
        /// <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);
        }
Exemple #2
0
        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()}");
            }
        }
Exemple #4
0
        /// <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 });
        }