public static IEnumerable <OrchestrationState> GetInstancesByState(this SqlInstanceStore instanceStore, OrchestrationStatus status) { List <OrchestrationState> instances = new List <OrchestrationState>(); var byNameQuery = new OrchestrationStateQuery(); byNameQuery.AddStatusFilter(status); return(instanceStore.QueryOrchestrationStatesAsync(byNameQuery).Result); }
public static void DumpAllInstancesForState(TaskHubClient client, OrchestrationStatus status, int hours) { DateTime currentTime = DateTime.UtcNow; OrchestrationStateQuery statusQuery = new OrchestrationStateQuery(); statusQuery .AddStatusFilter(status) .AddTimeRangeFilter(currentTime.Subtract(TimeSpan.FromHours(hours)), currentTime, OrchestrationStateTimeRangeFilterType.OrchestrationCreatedTimeFilter); DumpInstances(client.QueryOrchestrationStates(statusQuery)); }
/// <summary> /// Gets the numer of running instances. /// </summary> /// <param name="microservice"></param> /// <returns>Gets the numer of running instances of the service.</returns> public int GetNumOfRunningInstances(Microservice microservice) { var byNameQuery = new OrchestrationStateQuery(); byNameQuery.AddStatusFilter(OrchestrationStatus.Running); byNameQuery.AddNameVersionFilter(microservice.Orchestration.FullName); var result = m_HubClient.QueryOrchestrationStates(byNameQuery); var cnt = result.Count(svc => svc.OrchestrationStatus == OrchestrationStatus.Running); return(cnt); }
private IEnumerable <OrchestrationState> loadStates(string orchestrationFullName, bool runningOnly = true) { var byNameQuery = new OrchestrationStateQuery(); byNameQuery.AddNameVersionFilter(orchestrationFullName); if (runningOnly) { byNameQuery.AddStatusFilter(OrchestrationStatus.Running); } var oStates = m_HubClient.QueryOrchestrationStates(byNameQuery); return(oStates); }
/// <summary> /// Gets the number of running instances. /// </summary> /// <param name="microservice"></param> /// <returns>Gets the number of running instances of the service. /// If m_StorageConnectionString is not confiogured this method returns 0.</returns> public int GetNumOfRunningInstances(Microservice microservice) { if (String.IsNullOrEmpty(this.m_StorageConnectionString)) { return(0); } var byNameQuery = new OrchestrationStateQuery(); byNameQuery.AddStatusFilter(OrchestrationStatus.Running); byNameQuery.AddNameVersionFilter(microservice.Orchestration.FullName); var result = m_HubClient.QueryOrchestrationStates(byNameQuery); return(result.Count()); }
public static List <OrchestrationState> GetRunningInstances(this SqlInstanceStore instanceStore) { List <OrchestrationState> instances = new List <OrchestrationState>(); var byNameQuery = new OrchestrationStateQuery(); byNameQuery.AddStatusFilter(OrchestrationStatus.Running); instances.AddRange(GetInstancesByState(instanceStore, OrchestrationStatus.Running)); // instances.AddRange(GetInstancesByState(instanceStore, OrchestrationStatus.ContinuedAsNew)); instances.AddRange(GetInstancesByState(instanceStore, OrchestrationStatus.Pending)); return(instances); }
public void QueryDuplicateFiltersTest() { OrchestrationStateQuery query = new OrchestrationStateQuery().AddInstanceFilter(null, false); AssertException <ArgumentException>(() => query.AddInstanceFilter(null, false)); query = new OrchestrationStateQuery().AddNameVersionFilter(null, null); AssertException <ArgumentException>(() => query.AddNameVersionFilter(null, null)); query = new OrchestrationStateQuery().AddTimeRangeFilter(DateTime.MaxValue, DateTime.MaxValue, OrchestrationStateTimeRangeFilterType.OrchestrationLastUpdatedTimeFilter); AssertException <ArgumentException>(() => query.AddTimeRangeFilter(DateTime.MaxValue, DateTime.MaxValue, OrchestrationStateTimeRangeFilterType.OrchestrationLastUpdatedTimeFilter)); query = new OrchestrationStateQuery().AddStatusFilter(OrchestrationStatus.Completed); AssertException <ArgumentException>(() => query.AddStatusFilter(OrchestrationStatus.Completed)); }
/// <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 indicating 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) { OrchestrationStateQuery query = new OrchestrationStateQuery().AddInstanceFilter(instanceId); query = allInstances ? query : query.AddStatusFilter(OrchestrationStatus.ContinuedAsNew, FilterComparisonType.NotEquals); // 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(query), string.Empty, "GetOrchestrationStateAsync-jumpStartEntities", MaxRetriesTableStore, IntervalBetweenRetriesSecs).ConfigureAwait(false); IEnumerable <AzureTableOrchestrationStateEntity> stateEntities = await Utils.ExecuteWithRetries(() => this.tableClient.QueryOrchestrationStatesAsync(query), 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.All(s => s.OrchestrationInstance.InstanceId != js.OrchestrationInstance.InstanceId)); IEnumerable <OrchestrationState> newStates = states.Concat(jumpStartStates); if (allInstances) { return(newStates.Select(TableStateToStateEvent)); } // ReSharper disable once PossibleMultipleEnumeration if (!newStates.Any()) { return(new OrchestrationStateInstanceEntity[0]); } // ReSharper disable once PossibleMultipleEnumeration return(new List <OrchestrationStateInstanceEntity> { TableStateToStateEvent(newStates.OrderByDescending(x => x.LastUpdatedTime).FirstOrDefault()) }); }
public void OpenAndStartServiceHostTest() { eventListener = new ObservableEventListener(); eventListener.LogToConsole(); eventListener.EnableEvents(DefaultEventSource.Log, EventLevel.LogAlways); TraceSource source = new TraceSource("DurableTask"); source.Listeners.AddRange(Trace.Listeners); IOrchestrationServiceInstanceStore instanceStore = new AzureTableInstanceStore(TaskHubName, StorageConnectionString); ServiceBusOrchestrationService orchestrationServiceAndClient = new ServiceBusOrchestrationService(ServiceBusConnectionString, TaskHubName, instanceStore, null, null); orchestrationServiceAndClient.CreateIfNotExistsAsync().Wait(); TaskHubClient taskHubClient = new TaskHubClient(orchestrationServiceAndClient); TaskHubWorker taskHub = new TaskHubWorker(orchestrationServiceAndClient); taskHub.AddTaskOrchestrations(typeof(CounterOrchestration)); taskHub.AddTaskActivities(typeof(Task1), typeof(Task2)); var rnts = ((AzureTableInstanceStore)instanceStore).GetJumpStartEntitiesAsync(1000).Result; var byNameQuery = new OrchestrationStateQuery(); byNameQuery.AddStatusFilter(OrchestrationStatus.Pending); byNameQuery.AddNameVersionFilter(typeof(CounterOrchestration).FullName); var results = ((AzureTableInstanceStore)instanceStore).QueryOrchestrationStatesAsync(byNameQuery).Result; var instance = taskHubClient.CreateOrchestrationInstanceAsync(typeof(CounterOrchestration), Guid.NewGuid().ToString(), new TestOrchestrationInput()).Result; taskHub.StartAsync().Wait(); var state = instanceStore.GetOrchestrationStateAsync(instance.InstanceId, true).Result; var res = taskHubClient.GetOrchestrationHistoryAsync(instance).Result; taskHubClient.WaitForOrchestrationAsync(instance, TimeSpan.MaxValue).Wait(); }