void m_refreshBW_DoWork(object sender, DoWorkEventArgs e) { IMigrationService migrationService = (IMigrationService)MigrationServiceManager.GetService(typeof(IMigrationService)); SessionGroupInitializationStatus status = SessionGroupInitializationStatus.Unknown; if (DataModel != null && DataModel.Configuration != null) { status = migrationService.GetSessionGroupInitializationStatus(DataModel.Configuration.SessionGroupUniqueId); } switch (status) { case SessionGroupInitializationStatus.Initialized: if (migrationService.GetRunningSessionGroups().Contains(DataModel.Configuration.SessionGroupUniqueId)) { ISyncStateManager stateManager = SqlSyncStateManager.GetInstance(); PipelineState newPipelineState = stateManager.GetCurrentState(OwnerType.SessionGroup, DataModel.Configuration.SessionGroupUniqueId); if (s_canTransitionFrom[(int)m_currentPipelineState, (int)newPipelineState]) { e.Result = newPipelineState; } else { Console.WriteLine("Cannot transition from " + m_currentPipelineState + " to " + newPipelineState); } IsCompleted = false; } else { e.Result = PipelineState.Default; using (Microsoft.TeamFoundation.Migration.EntityModel.RuntimeEntityModel context = Microsoft.TeamFoundation.Migration.EntityModel.RuntimeEntityModel.CreateInstance()) { var query = from sg in context.RTSessionGroupSet where sg.GroupUniqueId.Equals(DataModel.Configuration.SessionGroupUniqueId) select sg.State; int?state = query.FirstOrDefault(); if (state != null && (Microsoft.TeamFoundation.Migration.BusinessModel.BusinessModelManager.SessionStateEnum)state == BusinessModelManager.SessionStateEnum.Completed && ConflictManager != null && ConflictManager.TotalConflicts == 0) { IsCompleted = true; } else { IsCompleted = false; } } } break; case SessionGroupInitializationStatus.Initializing: IsCompleted = false; break; case SessionGroupInitializationStatus.NotInitialized: case SessionGroupInitializationStatus.Unknown: e.Result = PipelineState.Default; IsCompleted = false; break; } }
public SyncStateMachine( PipelineState currentState, SyncStateTransitionAlgorithm transitionAlgorithm, OwnerType ownerType, Guid ownerUniqueId, ISyncStateManager syncStateManager) { m_currState = currentState; TransitionAlgorithm = transitionAlgorithm; m_ownerType = ownerType; m_ownerUniqueId = ownerUniqueId; m_syncStateManager = syncStateManager; }
internal SessionWorker( Guid sessionId, ManualResetEvent sessionEvent, AnalysisEngine analysisEngine, MigrationEngine migrationEngine, LinkEngine linkEngine, Guid leftMigrationSourceId, Guid rightMigrationSourceId, WorkFlowType workFlowType, int secondsSyncWaitInterval, string threadName) { SessionId = sessionId; Event = sessionEvent; AnalysisEngine = analysisEngine; MigrationEngine = migrationEngine; LinkEngine = linkEngine; LeftMigrationSourceid = leftMigrationSourceId; RightMigrationSourceid = rightMigrationSourceId; WorkFlowType = workFlowType; m_threadName = threadName; SqlSyncStateManager manager = SqlSyncStateManager.GetInstance(); m_syncStateManager = manager; m_syncCommandQueue = manager; m_syncStateMachine = new SyncStateMachine(PipelineState.Default, new SyncStateTransitionAlgorithm(), OwnerType.Session, sessionId, m_syncStateManager); m_orchPolicy = new SessionOrchestrationPolicy(WorkFlowType, m_syncStateMachine); try { checked { MilliSecondsSyncWaitInterval = secondsSyncWaitInterval * 1000; } } catch (OverflowException) { MilliSecondsSyncWaitInterval = int.MaxValue; TraceManager.TraceInformation( "The speicified interval of {0} minutes is too long for the system to handle. The interval is now changed to {1} minutes.", secondsSyncWaitInterval / 60, (int)(MilliSecondsSyncWaitInterval / 1000 / 60)); } }
public void SetSessionGroupUniqueId(Guid sessionGroupUniqueId) { SessionGroupStatus = new SessionGroupStatus(sessionGroupUniqueId); ConflictManager = new ApplicationViewModel(this); ConflictManager.SetSessionGroupUniqueId(sessionGroupUniqueId, true); this.RuntimeManager.SetSessionGroupUniqueId(sessionGroupUniqueId, ConflictManager); Properties.Settings.Default.LastSessionGroupUniqueId = sessionGroupUniqueId; if (!GlobalConfiguration.UseWindowsService) { ISyncStateManager stateManager = SqlSyncStateManager.GetInstance(); stateManager.TryResetSessionGroupStates(sessionGroupUniqueId); RuntimeManager.DisableAutoRefresh(); } else { RuntimeManager.EnableAutoRefresh(); } Refresh(); }