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