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);
        }
Пример #2
0
        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));
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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));
        }
Пример #8
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 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();
        }