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