コード例 #1
0
        protected virtual void SubmitLinkChange(
            LinkService linkService,
            LinkSubmissionPhase submissionPhase)
        {
            long firstChangeGroupId = 0;
            const LinkChangeGroup.LinkChangeGroupStatus status = LinkChangeGroup.LinkChangeGroupStatus.ReadyForMigration;

            while (true)
            {
                long lastChangeGroupId;
                ReadOnlyCollection <LinkChangeGroup> pagedChangeGroups = linkService.GetLinkChangeGroups(
                    firstChangeGroupId, 10000, status, false, out lastChangeGroupId);

                if (pagedChangeGroups.Count <= 0 || lastChangeGroupId < firstChangeGroupId)
                {
                    break;
                }
                firstChangeGroupId = lastChangeGroupId + 1;

                foreach (LinkChangeGroup changeGroup in pagedChangeGroups)
                {
                    if (linkService.ChangeGroupIsCompleted(changeGroup))
                    {
                        changeGroup.Status = LinkChangeGroup.LinkChangeGroupStatus.Completed;
                    }
                    else if (linkService.AllLinkMigrationInstructionsAreConflicted(changeGroup))
                    {
                        changeGroup.IsConflicted = true;
                    }
                    else
                    {
                        LinkChangeGroup.LinkChangeGroupStatus statusCache = changeGroup.Status;

                        #region to be deleted
                        TraceManager.TraceInformation("Start migration link change group {0}", changeGroup.GroupName);
                        BatchSubmitLinkChange(changeGroup, submissionPhase);
                        TraceManager.TraceInformation("Finish migration link change group {0}", changeGroup.GroupName);

                        // if the change group contains the two special skip change actions
                        // we leave the group status untouched but update the action status changes, if any
                        if (linkService.ContainsSpecialSkipActions(changeGroup))
                        {
                            changeGroup.Status = statusCache;
                        }
                        else if (linkService.AllLinkMigrationInstructionsAreConflicted(changeGroup))
                        {
                            changeGroup.IsConflicted = true;
                        }
                        else if (linkService.ChangeGroupIsCompleted(changeGroup))
                        {
                            changeGroup.Status = LinkChangeGroup.LinkChangeGroupStatus.Completed;
                        }
                        #endregion
                    }
                    linkService.SaveChangeGroupActionStatus(changeGroup);
                }
            }
        }
コード例 #2
0
 public ReadOnlyCollection <LinkChangeGroup> GetLinkChangeGroups(
     long firstGroupId,
     int pageSize,
     LinkChangeGroup.LinkChangeGroupStatus status,
     bool?includeConflicted,
     out long lastGroupId)
 {
     return(m_linkChangeGroupManager.GetPagedLinkChangeGroups(firstGroupId, pageSize, status, includeConflicted, out lastGroupId));
 }
コード例 #3
0
 internal ReadOnlyCollection <LinkChangeGroup> GetPagedLinkChangeGroups(
     long firstGroupId,
     int pageSize,
     LinkChangeGroup.LinkChangeGroupStatus status,
     bool?getConflictedGroup,
     out long lastGroupId)
 {
     return(GetPagedLinkChangeGroups(firstGroupId, pageSize, status, getConflictedGroup, int.MaxValue, out lastGroupId));
 }
コード例 #4
0
        internal ReadOnlyCollection <LinkChangeGroup> GetPagedLinkChangeGroups(
            long firstGroupId,
            int pageSize,
            LinkChangeGroup.LinkChangeGroupStatus status,
            bool?getConflictedGroup,
            int maxAge,
            out long lastGroupId)
        {
            lastGroupId = firstGroupId - 1;
            var linkChangeGroups = new List <LinkChangeGroup>();
            int statusVal        = (int)status;

            using (RuntimeEntityModel context = RuntimeEntityModel.CreateInstance())
            {
                var linkGroupQuery = getConflictedGroup.HasValue
                                     ? (from g in context.RTLinkChangeGroupSet
                                        where g.Status == statusVal &&
                                        g.ContainsConflictedAction == getConflictedGroup &&
                                        g.SessionGroupUniqueId.Equals(SessionGroupId) &&
                                        g.SessionUniqueId.Equals(SessionId) &&
                                        g.SourceId.Equals(SourceId) &&
                                        (g.Age == null || g.Age.Value <= maxAge) &&
                                        g.Id >= firstGroupId
                                        orderby g.Id
                                        select g).Take(pageSize)
                                     : (from g in context.RTLinkChangeGroupSet
                                        where g.Status == statusVal &&
                                        g.SessionGroupUniqueId.Equals(SessionGroupId) &&
                                        g.SessionUniqueId.Equals(SessionId) &&
                                        g.SourceId.Equals(SourceId) &&
                                        (g.Age == null || g.Age.Value <= maxAge) &&
                                        g.Id >= firstGroupId
                                        orderby g.Id
                                        select g).Take(pageSize);

                foreach (RTLinkChangeGroup rtLinkChangeGroup in linkGroupQuery)
                {
                    var group = new LinkChangeGroup(rtLinkChangeGroup.GroupName,
                                                    status,
                                                    rtLinkChangeGroup.ContainsConflictedAction,
                                                    rtLinkChangeGroup.Id,
                                                    rtLinkChangeGroup.Age ?? 0,
                                                    rtLinkChangeGroup.RetriesAtCurrAge ?? 0);
                    group.IsForcedSync = rtLinkChangeGroup.IsForcedSync.HasValue ? (bool)rtLinkChangeGroup.IsForcedSync : false;

                    GetLinkChangeActions(group, context);
                    linkChangeGroups.Add(group);

                    lastGroupId = rtLinkChangeGroup.Id;
                }
            }

            return(linkChangeGroups.AsReadOnly());
        }