private void StopRunningSessionGroups()
        {
            List <Guid> activeSessionGroupUniqueIds = m_migrationServiceProxy.GetRunningSessionGroups();

            foreach (Guid activeSessionGroupUniqueId in activeSessionGroupUniqueIds)
            {
                m_migrationServiceProxy.StopSessionGroup(activeSessionGroupUniqueId);
            }
        }
Пример #2
0
        public override Interfaces.ICommandResult Run()
        {
            try
            {
                MigrationServiceClient serviceClient          = new MigrationServiceClient();
                List <Guid>            runningSessionGroupIds = serviceClient.GetRunningSessionGroups();

                Dictionary <Guid, string> sessionGroupDescription = new Dictionary <Guid, string>();
                using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
                {
                    foreach (var sessionGroupId in runningSessionGroupIds)
                    {
                        var sessionGroupQuery = context.RTSessionGroupSet.Where(g => g.GroupUniqueId == sessionGroupId);
                        if (sessionGroupQuery.Count() > 0)
                        {
                            sessionGroupDescription[sessionGroupId] = sessionGroupQuery.First().FriendlyName ?? string.Empty;
                        }
                    }
                }

                return(new StatusRslt(sessionGroupDescription, this));
            }
            catch (MigrationServiceEndpointNotFoundException)
            {
                return(new StatusRslt(ResourceStrings.IntegrationServiceNotRunningInfo, this, true));
            }
            catch (Exception e)
            {
                return(new StatusRslt(e.Message, this, false));
            }
        }
        private bool SessionGroupIsRunning(MigrationConflict conflict)
        {
            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                RTSessionGroup rtSessionGroup = FindSessionGroupForConflictedAction(conflict, context);

                if (rtSessionGroup == null)
                {
                    return(false);
                }
                Guid sessionGroupId = rtSessionGroup.GroupUniqueId;

                // first, ask the wcf service if it is managing an active session group of this
                MigrationServiceClient client = new MigrationServiceClient();
                var runningGroupIds           = client.GetRunningSessionGroups();
                if (!runningGroupIds.Contains(sessionGroupId))
                {
                    return(false);
                }

                // next, check if the group is not in the "running" sync orchestration state
                switch (rtSessionGroup.OrchestrationStatus)
                {
                case (int)PipelineState.Running:
                case (int)PipelineState.Starting:
                    return(true);

                default:
                    return(false);
                }
            }
        }
        private bool WaitForSessionGroupToStop(MigrationServiceClient pipeProxy, long maxWaitTimeTicks)
        {
            DateTime startTime = DateTime.Now;

            do
            {
                if (!pipeProxy.GetRunningSessionGroups().Contains(Configuration.SessionGroupUniqueId))
                {
                    return(true);
                }
            }while ((DateTime.Now.Subtract(startTime).Ticks <= maxWaitTimeTicks));

            return(false);
        }
        /// <summary>
        /// Try saving the managed configuration (always check whether the configuration can be saved or not)
        /// </summary>
        /// <returns>The Id of the saved configuration</returns>
        /// <exception cref="Microsoft.TeamFoundation.Migration.BusinessModel.DuplicateConfigurationException" />
        public int TrySave()
        {
            if (CanEditAndSave)
            {
                return(SaveConfigWithoutCanSaveCheck());
            }
            else
            {
                var  pipeProxy = new MigrationServiceClient();
                bool sessionWasRunningBeforeSavingConfig = false;
                try
                {
                    var runningGroups = pipeProxy.GetRunningSessionGroups();
                    sessionWasRunningBeforeSavingConfig = runningGroups.Contains(Configuration.SessionGroupUniqueId);

                    if (sessionWasRunningBeforeSavingConfig)
                    {
                        pipeProxy.StopSessionGroup(Configuration.SessionGroupUniqueId);

                        if (!WaitForSessionGroupToStop(pipeProxy, TimeSpan.TicksPerMinute * 10))
                        {
                            throw new SavingUnsavableConfigurationException(Configuration);
                        }
                    }
                }
                catch (MigrationServiceEndpointNotFoundException)
                {
                    // WCF service is not active - session group shouldn't be running either
                }

                int saveResult = SaveConfigWithoutCanSaveCheck();

                if (sessionWasRunningBeforeSavingConfig)
                {
                    try
                    {
                        pipeProxy.StartSessionGroup(Configuration.SessionGroupUniqueId);
                    }
                    catch (MigrationServiceEndpointNotFoundException)
                    {
                        TraceManager.TraceInformation("Cannot restart Session Group '{0}' after updating its configuration.",
                                                      Configuration.SessionGroupUniqueId.ToString());
                    }
                }

                return(saveResult);
            }
        }
Пример #6
0
        public void DeleteSessionGroup()
        {
            var rtSessionGroup = m_context.RTSessionGroupSet.Where(g => g.GroupUniqueId == m_sessionGroupUniqueId).FirstOrDefault();

            if (null == rtSessionGroup)
            {
                return;
            }

            switch (rtSessionGroup.State)
            {
            case (int)BusinessModelManager.SessionStateEnum.Completed:
            case (int)BusinessModelManager.SessionStateEnum.OneTimeCompleted:
                StartDeletion(rtSessionGroup);
                break;

            case (int)BusinessModelManager.SessionStateEnum.MarkedForDeletion:
                break;

            default:
                try
                {
                    var pipeProxy = new MigrationServiceClient();
                    if (!pipeProxy.GetRunningSessionGroups().Contains(m_sessionGroupUniqueId))
                    {
                        StartDeletion(rtSessionGroup);
                    }
                    else
                    {
                        throw new SessionGroupDeletionException(
                                  MigrationToolkitResources.ErrorDeletingActiveSessionGroup, m_sessionGroupUniqueId.ToString());
                    }
                }
                catch (MigrationServiceEndpointNotFoundException)
                {
                    StartDeletion(rtSessionGroup);
                }
                break;
            }
        }