Exemple #1
0
        /// <summary>
        /// Saves the current state of the state machine.
        /// </summary>
        /// <param name="ownerType">The type, session or session group, that this state machine represents.</param>
        /// <param name="ownerUniqueId">The GUID used as the unique Id for the subject session or session group.</param>
        /// <param name="currentState">The current state of the subject session or session group.</param>
        public void SaveCurrentState(OwnerType ownerType, Guid ownerUniqueId, PipelineState currentState)
        {
            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                switch (ownerType)
                {
                case OwnerType.Session:
                    var sessionQuery = context.RTSessionSet.Where(s => s.SessionUniqueId.Equals(ownerUniqueId));
                    Debug.Assert(sessionQuery.Count() == 1, "sessionQuery.Count() != 1");
                    if (sessionQuery.Count() != 1)
                    {
                        return;
                    }
                    sessionQuery.First().OrchestrationStatus = (int)currentState;
                    context.SaveChanges();
                    break;

                case OwnerType.SessionGroup:
                    var sessionGroupQuery = context.RTSessionGroupSet.Where(sg => sg.GroupUniqueId.Equals(ownerUniqueId));
                    Debug.Assert(sessionGroupQuery.Count() == 1, "sessionGroupQuery.Count() != 1");
                    if (sessionGroupQuery.Count() != 1)
                    {
                        return;
                    }
                    sessionGroupQuery.First().OrchestrationStatus = (int)currentState;
                    context.SaveChanges();
                    break;

                default:
                    Debug.Assert(false, "Invalid OwnerType");
                    return;
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Resets the state of the state machines of the session group and its child sessions.
        /// The exception is sessions in the PausedByConflict state which should keep that state
        /// </summary>
        /// <remarks>
        /// Call this method only at intialization time.
        /// </remarks>
        /// <param name="sessionGroupUniqueId"></param>
        /// <returns></returns>
        public bool TryResetSessionGroupStates(Guid sessionGroupUniqueId)
        {
            int defaultStateValue          = (int)PipelineState.Default;
            int pausedByConflictStateValue = (int)PipelineState.PausedByConflict;

            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                var sessionGroupQuery = context.RTSessionGroupSet.Where(sg => sg.GroupUniqueId.Equals(sessionGroupUniqueId));
                if (sessionGroupQuery.Count() != 1)
                {
                    return(false);
                }
                // reset session group status
                var rtSessionGroup = sessionGroupQuery.First();
                rtSessionGroup.OrchestrationStatus = defaultStateValue;

                // reset child session status
                rtSessionGroup.Sessions.Load();
                foreach (var rtSession in rtSessionGroup.Sessions)
                {
                    // Don't reset the OrchestrationStatus if it is PausedByConflict;
                    // the session need to remain in this state until all conficts for the session are resolved
                    if (rtSession.OrchestrationStatus != pausedByConflictStateValue)
                    {
                        rtSession.OrchestrationStatus = defaultStateValue;
                    }
                }

                context.SaveChanges();
                return(true);
            }
        }
        /// <summary>
        /// Resets the state of the state machines of the session group and its child sessions.
        /// </summary>
        /// <remarks>
        /// Call this method only at intialization time.
        /// </remarks>
        /// <param name="sessionGroupUniqueId"></param>
        /// <returns></returns>
        public bool TryResetSessionGroupStates(Guid sessionGroupUniqueId)
        {
            int defaultStateValue = (int)PipelineState.Default;

            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                var sessionGroupQuery = context.RTSessionGroupSet.Where(sg => sg.GroupUniqueId.Equals(sessionGroupUniqueId));
                if (sessionGroupQuery.Count() != 1)
                {
                    return(false);
                }
                // reset session group status
                var rtSessionGroup = sessionGroupQuery.First();
                rtSessionGroup.OrchestrationStatus = defaultStateValue;

                // reset child session status
                rtSessionGroup.Sessions.Load();
                foreach (var rtSession in rtSessionGroup.Sessions)
                {
                    rtSession.OrchestrationStatus = defaultStateValue;
                }

                context.SaveChanges();
                return(true);
            }
        }
Exemple #4
0
        /// <summary>
        /// Resets the state machine to "Default" state.
        /// </summary>
        /// <returns></returns>
        public bool Reset(OwnerType ownerType, Guid ownerUniqueId)
        {
            PipelineState defaultState = PipelineState.Default;

            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                switch (ownerType)
                {
                case OwnerType.Session:
                    var sessionQuery = context.RTSessionSet.Where(s => s.SessionUniqueId.Equals(ownerUniqueId));
                    Debug.Assert(sessionQuery.Count() == 1, "sessionQuery.Count() != 1");
                    if (sessionQuery.Count() != 1)
                    {
                        return(false);
                    }
                    sessionQuery.First().OrchestrationStatus = (int)defaultState;
                    context.SaveChanges();
                    break;

                case OwnerType.SessionGroup:
                    var sessionGroupQuery = context.RTSessionGroupSet.Where(sg => sg.GroupUniqueId.Equals(ownerUniqueId));
                    Debug.Assert(sessionGroupQuery.Count() == 1, "sessionGroupQuery.Count() != 1");
                    if (sessionGroupQuery.Count() != 1)
                    {
                        return(false);
                    }
                    sessionGroupQuery.First().OrchestrationStatus = (int)defaultState;
                    context.SaveChanges();
                    break;

                default:
                    return(false);
                }
            }

            return(true);
        }