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