コード例 #1
0
        /// <summary>
        /// Gets a list of orchestration states for a given instance
        /// </summary>
        /// <param name="instanceId">The instance id to return state for</param>
        /// <param name="allInstances">Flag indiciation whether to get all history execution ids or just the most recent</param>
        /// <returns>List of matching orchestration states</returns>
        public async Task <IEnumerable <OrchestrationStateInstanceEntity> > GetOrchestrationStateAsync(string instanceId, bool allInstances)
        {
            IEnumerable <AzureTableOrchestrationStateEntity> stateEntities =
                await tableClient.QueryOrchestrationStatesAsync(new OrchestrationStateQuery()
                                                                .AddInstanceFilter(instanceId)).ConfigureAwait(false);

            // Fetch unscheduled orchestrations from JumpStart table
            IEnumerable <AzureTableOrchestrationStateEntity> jumpStartEntities = await this.tableClient.QueryJumpStartOrchestrationsAsync(new OrchestrationStateQuery()
                                                                                                                                          .AddInstanceFilter(instanceId)).ConfigureAwait(false);

            IEnumerable <OrchestrationState> states          = stateEntities.Select(stateEntity => stateEntity.State);
            IEnumerable <OrchestrationState> jumpStartStates = jumpStartEntities.Select(j => j.State)
                                                               .Where(js => !states.Any(s => s.OrchestrationInstance.InstanceId == js.OrchestrationInstance.InstanceId));

            var newStates = states.Concat(jumpStartStates);

            if (allInstances)
            {
                return(newStates.Select(TableStateToStateEvent));;
            }

            foreach (OrchestrationState state in newStates)
            {
                // TODO: This will just return the first non-ContinuedAsNew orchestration and not the latest one.
                if (state.OrchestrationStatus != OrchestrationStatus.ContinuedAsNew)
                {
                    return(new List <OrchestrationStateInstanceEntity>()
                    {
                        TableStateToStateEvent(state)
                    });
                }
            }

            return(null);
        }
コード例 #2
0
        /// <summary>
        ///     Get a list of orchestration states from the instance storage table which match the specified
        ///     orchestration state query.
        /// </summary>
        /// <param name="stateQuery">Orchestration state query to execute</param>
        /// <returns></returns>
        public async Task <IEnumerable <OrchestrationState> > QueryOrchestrationStatesAsync(
            OrchestrationStateQuery stateQuery)
        {
            IEnumerable <AzureTableOrchestrationStateEntity> result =
                await tableClient.QueryOrchestrationStatesAsync(stateQuery).ConfigureAwait(false);

            // Query from JumpStart table
            IEnumerable <AzureTableOrchestrationStateEntity> jumpStartEntities = await this.tableClient.QueryJumpStartOrchestrationsAsync(stateQuery).ConfigureAwait(false);

            IEnumerable <AzureTableOrchestrationStateEntity> newStates = result.Concat(jumpStartEntities
                                                                                       .Where(js => !result.Any(s => s.State.OrchestrationInstance.InstanceId == js.State.OrchestrationInstance.InstanceId)));

            return(newStates.Select(stateEntity => stateEntity.State));
        }
コード例 #3
0
        /// <summary>
        /// Gets a list of orchestration states for a given instance
        /// </summary>
        /// <param name="instanceId">The instance id to return state for</param>
        /// <param name="allInstances">Flag indiciation whether to get all history execution ids or just the most recent</param>
        /// <returns>List of matching orchestration states</returns>
        public async Task <IEnumerable <OrchestrationStateInstanceEntity> > GetOrchestrationStateAsync(string instanceId, bool allInstances)
        {
            // Fetch unscheduled orchestrations from JumpStart table
            // We need to get this first to avoid a race condition.
            IEnumerable <AzureTableOrchestrationStateEntity> jumpStartEntities = await Utils.ExecuteWithRetries(() => this.tableClient.QueryJumpStartOrchestrationsAsync(new OrchestrationStateQuery().AddInstanceFilter(instanceId)),
                                                                                                                string.Empty,
                                                                                                                "GetOrchestrationStateAsync-jumpStartEntities",
                                                                                                                MaxRetriesTableStore,
                                                                                                                IntervalBetweenRetriesSecs).ConfigureAwait(false);

            IEnumerable <AzureTableOrchestrationStateEntity> stateEntities = await Utils.ExecuteWithRetries(() => tableClient.QueryOrchestrationStatesAsync(new OrchestrationStateQuery().AddInstanceFilter(instanceId)),
                                                                                                            string.Empty,
                                                                                                            "GetOrchestrationStateAsync-stateEntities",
                                                                                                            MaxRetriesTableStore,
                                                                                                            IntervalBetweenRetriesSecs).ConfigureAwait(false);

            IEnumerable <OrchestrationState> states          = stateEntities.Select(stateEntity => stateEntity.State);
            IEnumerable <OrchestrationState> jumpStartStates = jumpStartEntities.Select(j => j.State)
                                                               .Where(js => !states.Any(s => s.OrchestrationInstance.InstanceId == js.OrchestrationInstance.InstanceId));

            var newStates = states.Concat(jumpStartStates);

            if (allInstances)
            {
                return(newStates.Select(TableStateToStateEvent));;
            }

            foreach (OrchestrationState state in newStates)
            {
                // TODO: This will just return the first non-ContinuedAsNew orchestration and not the latest one.
                if (state.OrchestrationStatus != OrchestrationStatus.ContinuedAsNew)
                {
                    return(new List <OrchestrationStateInstanceEntity>()
                    {
                        TableStateToStateEvent(state)
                    });
                }
            }

            return(null);
        }