private static WatermarkMap ParseWatermarks(string rawstring) { WatermarkMap empty = WatermarkMap.Empty; string[] array = rawstring.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); foreach (string text in array) { string[] array3 = text.Split(new string[] { ":" }, StringSplitOptions.None); if (array3.Length != 2) { throw new FormatException(); } Guid key = new Guid(array3[0]); long value = long.Parse(array3[1]); if (!empty.ContainsKey(key)) { empty.Add(key, value); } } return(empty); }
private static string FormatWatermarks(WatermarkMap watermarks) { StringBuilder stringBuilder = new StringBuilder(watermarks.Count * 56); foreach (KeyValuePair <Guid, long> keyValuePair in watermarks) { stringBuilder.AppendFormat("{0}:{1};", keyValuePair.Key, keyValuePair.Value); } return(stringBuilder.ToString()); }
public SyncCookie(Guid domainController, WatermarkMap lowWatermarks, WatermarkMap highWatermarks, byte[] pageCookie, byte[] pageCookie2) { this.CheckNullArgument("lowWatermarks", lowWatermarks); this.CheckNullArgument("highWatermarks", highWatermarks); this.DomainController = domainController; this.LowWatermarks = lowWatermarks; this.HighWatermarks = highWatermarks; this.PageCookie = pageCookie; this.PageCookie2 = pageCookie2; this.Version = SyncCookie.CurrentVersion; }
private static string FindAvailableServerFromWatermarks(WatermarkMap watermarks, IConfigurationSession configSession, ADObjectId allowedSite, out Guid newInvocationId) { newInvocationId = Guid.Empty; foreach (Guid guid in watermarks.Keys) { string text = SyncTaskHelper.FindAvailableServerByInvocationId(guid, configSession, allowedSite); if (text != null) { newInvocationId = guid; return(text); } } return(null); }
private static WatermarkMap FallbackWatermarks(WatermarkMap originalWatermarks, Guid originalInvocationId, Guid newInvocationId) { WatermarkMap watermarkMap = originalWatermarks; if (originalInvocationId != newInvocationId) { watermarkMap = WatermarkMap.Empty; long value = 0L; if (originalWatermarks.TryGetValue(newInvocationId, out value)) { watermarkMap.Add(newInvocationId, value); } } return(watermarkMap); }
private static WatermarkMap GetVectorToFilterRelocationData(ADRawEntry org) { WatermarkMap watermarkMap = WatermarkMap.Empty; byte[] array = (byte[])org[TenantRelocationRequestSchema.TenantRelocationCompletionTargetVector]; if (array != null) { try { watermarkMap = WatermarkMap.Parse(array); } catch (FormatException arg) { ExTraceGlobals.BackSyncTracer.TraceError <ADObjectId, FormatException>((long)SyncConfiguration.TraceId, "TenantRelocationProcessor::GetVectorToFilterRelocationData - Error parsing relocation completion vector tenant {0}. Error {1}.", org.Id, arg); } } ExTraceGlobals.BackSyncTracer.TraceDebug <ADObjectId, string>((long)SyncConfiguration.TraceId, "TenantRelocationProcessor::GetVectorToFilterRelocationData - Relocation completion vector found for tenant {0} is:\\n{1}.", org.Id, watermarkMap.SerializeToString()); return(watermarkMap); }
private bool HandleRelocationState(bool isRelocationCompleted, bool isSourceOfRelocation, PropertyBag propertyBag, ADRawEntry org) { if (!isRelocationCompleted) { if (!isSourceOfRelocation) { this.reporter.ReportExcludedObject(propertyBag, DirectoryObjectErrorCode.ObjectOutOfScope, ProcessingStage.RelocationStageFilter); } return(isSourceOfRelocation); } if (!isSourceOfRelocation) { if (this.isIncrementalSync) { WatermarkMap vectorToFilterRelocationData = TenantRelocationProcessor.GetVectorToFilterRelocationData(org); if (vectorToFilterRelocationData.ContainsKey(this.invocationId)) { long num = vectorToFilterRelocationData[this.invocationId]; if ((long)(propertyBag[ADRecipientSchema.UsnChanged] ?? 9223372036854775807L) < num) { this.reporter.ReportExcludedObject(propertyBag, DirectoryObjectErrorCode.ObjectOutOfScope, ProcessingStage.RelocationPartOfRelocationSyncFilter); return(false); } } } return(true); } if (ProcessorHelper.IsObjectOrganizationUnit(propertyBag)) { this.reporter.ReportExcludedObject(propertyBag, DirectoryObjectErrorCode.ObjectOutOfScope, ProcessingStage.RelocationStageFilter); return(false); } ServiceInstanceId value = new ServiceInstanceId(string.Format("exchange/{0}", org[ExchangeConfigurationUnitSchema.TargetForest])); propertyBag.SetField(SyncObjectSchema.FaultInServiceInstance, value); return(true); }
private bool WaitForReplicationConvergenceInTargetForest(string domainController, TimeSpan timeout) { base.WriteVerbose(Strings.VerboseWaitingForReplicationInTargetForest); WatermarkMap watermarkMap = new WatermarkMap(); ReadOnlyCollection <ADServer> readOnlyCollection = ADForest.GetForest(this.DataObject.TargetForest, null).FindRootDomain().FindAllDomainControllers(); DateTime utcNow = DateTime.UtcNow; foreach (ADServer adserver in readOnlyCollection) { string text; LocalizedString localizedString; if (SuitabilityVerifier.IsServerSuitableIgnoreExceptions(adserver.DnsHostName, false, null, out text, out localizedString)) { Guid key; WatermarkMap watermarkMap2; long value = this.ReadDcHighestUSN(this.DataObject.TargetOrganizationId.PartitionId, adserver.DnsHostName, false, out key, out watermarkMap2); watermarkMap[key] = value; } } ITopologyConfigurationSession session = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(domainController, true, ConsistencyMode.PartiallyConsistent, null, ADSessionSettings.FromAccountPartitionRootOrgScopeSet(this.DataObject.TargetOrganizationId.PartitionId), 514, "WaitForReplicationConvergenceInTargetForest", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Relocation\\RemoveTenantRelocationRequest.cs"); bool flag = false; while (!flag) { flag = this.CheckReplicationStatus(session, watermarkMap, false); if (flag || utcNow + timeout < DateTime.UtcNow) { break; } Thread.Sleep(5000); } if (flag) { base.WriteVerbose(Strings.VerboseTargetDcIsUpToDate(domainController)); } return(flag); }
public static bool TryFromBytes(byte[] cookieData, out SyncCookie cookie, out Exception ex) { ex = null; cookie = null; if (cookieData == null) { ex = new ArgumentNullException("cookieData"); return(false); } try { string @string = Encoding.UTF8.GetString(cookieData); string[] array = @string.Split(new string[] { SyncCookie.Delimiter }, StringSplitOptions.None); if (array.Length < 1) { ex = new InvalidCookieException(); return(false); } int num = int.Parse(array[0]); if (num != 1 && num != 2 && num != 3) { ex = new CookieVersionUnsupportedException(num); return(false); } if (((num == 1 || num == 2) && array.Length != 5) || (num == 3 && array.Length != 6)) { ex = new InvalidCookieException(); return(false); } Guid guid = new Guid(array[1]); WatermarkMap watermarkMap = WatermarkMap.Empty; if (num == 1) { long value = long.Parse(array[2]); watermarkMap.Add(guid, value); } else { watermarkMap = WatermarkMap.Parse(array[2]); } WatermarkMap watermarkMap2 = WatermarkMap.Empty; if (num == 1) { long value2 = long.Parse(array[3]); watermarkMap2.Add(guid, value2); } else { watermarkMap2 = WatermarkMap.Parse(array[3]); } byte[] pageCookie = null; if (!string.IsNullOrEmpty(array[4])) { pageCookie = Convert.FromBase64String(array[4]); } byte[] pageCookie2 = null; if (num == 3 && !string.IsNullOrEmpty(array[5])) { pageCookie2 = Convert.FromBase64String(array[5]); } cookie = new SyncCookie(guid, watermarkMap, watermarkMap2, pageCookie, pageCookie2); } catch (DecoderFallbackException innerException) { ex = new InvalidCookieException(innerException); return(false); } catch (FormatException innerException2) { ex = new InvalidCookieException(innerException2); return(false); } catch (OverflowException innerException3) { ex = new InvalidCookieException(innerException3); return(false); } return(true); }
public SyncCookie(Guid domainController, WatermarkMap lowWatermarks, WatermarkMap highWatermarks, byte[] pageCookie) : this(domainController, lowWatermarks, highWatermarks, pageCookie, null) { }
public static SyncCookie ResolveSyncCookie(byte[] cookieData, IDirectorySession session, Task.TaskVerboseLoggingDelegate writeVerbose, Task.TaskErrorLoggingDelegate writeError) { if (session == null) { throw new ArgumentNullException("session"); } string text = SyncTaskHelper.GetCurrentServerFromSession(session); ITopologyConfigurationSession topologyConfigurationSession = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(text, true, ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromRootOrgScopeSet(), 84, "ResolveSyncCookie", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Common\\recipient\\SyncTaskHelper.cs"); Guid guid = topologyConfigurationSession.GetInvocationIdByFqdn(text); writeVerbose(Strings.VerboseSyncTaskDomainControllerToUse(text, guid)); if (cookieData == null) { writeVerbose(SyncTaskHelper.FormatCookieVerboseString(null)); SyncCookie syncCookie = new SyncCookie(guid, WatermarkMap.Empty, SyncConfiguration.GetReplicationCursors(topologyConfigurationSession), null); writeVerbose(Strings.VerboseSyncTaskHighestCommittedUSN(text, syncCookie.HighWatermark)); return(syncCookie); } SyncCookie syncCookie2 = null; Exception exception = null; if (!SyncCookie.TryFromBytes(cookieData, out syncCookie2, out exception)) { writeError(exception, ErrorCategory.InvalidData, null); } writeVerbose(SyncTaskHelper.FormatCookieVerboseString(syncCookie2)); if (syncCookie2.DomainController != guid) { writeVerbose(Strings.VerboseSyncTaskDomainControllerMismatch(syncCookie2.DomainController, guid)); ADServer adserver = topologyConfigurationSession.FindDCByFqdn(text); if (syncCookie2.PageCookie != null) { writeVerbose(Strings.VerboseSyncTaskCookieHasPageData(syncCookie2.DomainController, guid)); string text2 = SyncTaskHelper.FindAvailableServerByInvocationId(syncCookie2.DomainController, topologyConfigurationSession, adserver.Site); if (text2 != null) { session.DomainController = text2; writeVerbose(Strings.VerboseSyncTaskHighestCommittedUSN(text2, syncCookie2.HighWatermark)); return(syncCookie2); } writeError(new PageCookieInterruptedException(), ErrorCategory.InvalidData, null); } if (!syncCookie2.LowWatermarks.ContainsKey(guid)) { writeVerbose(Strings.VerboseSyncTaskCookieCurrentWatermarksMissingCurrentDC(syncCookie2.DomainController, guid)); string text3 = SyncTaskHelper.FindAvailableServerByInvocationId(syncCookie2.DomainController, topologyConfigurationSession, adserver.Site); if (text3 != null) { session.DomainController = text3; topologyConfigurationSession.DomainController = text3; text = text3; guid = syncCookie2.DomainController; } else { writeVerbose(Strings.VerboseSyncTaskCookieOriginatingDCNotAvailable(syncCookie2.DomainController)); Guid guid2; string text4 = SyncTaskHelper.FindAvailableServerFromWatermarks(syncCookie2.LowWatermarks, topologyConfigurationSession, adserver.Site, out guid2); if (text4 != null) { session.DomainController = text4; topologyConfigurationSession.DomainController = text4; text = text4; guid = guid2; } else { writeError(new CookieExpiredException(syncCookie2.DomainController, guid), ErrorCategory.InvalidData, null); } } } } WatermarkMap lowWatermarks = SyncTaskHelper.FallbackWatermarks(syncCookie2.LowWatermarks, syncCookie2.DomainController, guid); WatermarkMap highWatermarks = SyncTaskHelper.FallbackWatermarks(syncCookie2.HighWatermarks, syncCookie2.DomainController, guid); if (syncCookie2.HighWatermark == 0L) { syncCookie2 = new SyncCookie(guid, lowWatermarks, SyncConfiguration.GetReplicationCursors(topologyConfigurationSession), null); } else { syncCookie2 = new SyncCookie(guid, lowWatermarks, highWatermarks, syncCookie2.PageCookie); } writeVerbose(Strings.VerboseSyncTaskHighestCommittedUSN(text, syncCookie2.HighWatermark)); return(syncCookie2); }
public override IEnumerable <ADRawEntry> GetDataPage() { ExTraceGlobals.TenantRelocationTracer.TraceDebug((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration GetDataPage ..."); WatermarkMap watermarks = SyncConfiguration.GetReplicationCursors(base.RootOrgConfigurationSession); WatermarkMap configNcWatermarks = SyncConfiguration.GetReplicationCursors(base.RootOrgConfigurationSession, true, false); string dcName = base.RootOrgConfigurationSession.DomainController; ExTraceGlobals.TenantRelocationTracer.TraceDebug <string>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration dcName {0}", dcName); base.TenantConfigurationSession.DomainController = dcName; base.RecipientSession.DomainController = dcName; Guid watermarksInvocationId = base.RootOrgConfigurationSession.GetInvocationIdByFqdn(dcName); ExTraceGlobals.TenantRelocationTracer.TraceDebug <Guid>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration watermarksInvocationId {0}", watermarksInvocationId); long maxUsn = watermarks[watermarksInvocationId]; ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration maxUsn {0}", maxUsn); this.PageToken.IsTenantConfigUnitInConfigNc = !ADSession.IsTenantConfigInDomainNC(base.RecipientSession.SessionSettings.GetAccountOrResourceForestFqdn()); if (this.PageToken.InvocationId == Guid.Empty) { this.PageToken.SetInvocationId(watermarksInvocationId, dcName); ExTraceGlobals.TenantRelocationTracer.TraceDebug <Guid>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration set this.PageToken.InvocationId to {0}", this.PageToken.InvocationId); } this.moreDataForThisPage = true; while (this.ShouldReadMoreData()) { ExTraceGlobals.TenantRelocationTracer.TraceDebug <string>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration this.PageToken.State = {0}", this.PageToken.State.ToString()); switch (this.PageToken.State) { case TenantRelocationSyncState.PreSyncAllObjects: if (this.PageToken.PreSyncLdapPagingCookie == null) { this.PageToken.PendingConfigNcWatermarks = configNcWatermarks; this.PageToken.PendingWatermarks = watermarks; this.PageToken.PendingWatermarksInvocationId = watermarksInvocationId; ExTraceGlobals.TenantRelocationTracer.TraceDebug <Guid>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration set this.PageToken.PendingWatermarksInvocationId to {0}", this.PageToken.PendingWatermarksInvocationId); } foreach (ADRawEntry entry in this.PreSyncAllObjects()) { ExTraceGlobals.TenantRelocationTracer.TraceDebug <ADObjectId>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration PreSyncAllObjects yield {0}", entry.Id); yield return(entry); } break; case TenantRelocationSyncState.EnumerateConfigUnitLiveObjects: foreach (ADRawEntry entry2 in this.ReadLiveObjects(maxUsn)) { ExTraceGlobals.TenantRelocationTracer.TraceDebug <ADObjectId>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration EnumerateConfigUnitLiveObjects yield {0}", entry2.Id); yield return(entry2); } this.PageToken.PendingWatermarksInvocationId = watermarksInvocationId; ExTraceGlobals.TenantRelocationTracer.TraceDebug <Guid>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration set this.PageToken.PendingWatermarksInvocationId to {0}", this.PageToken.PendingWatermarksInvocationId); if (this.PageToken.IsTenantConfigUnitInConfigNc) { this.PageToken.PendingConfigNcWatermarks = configNcWatermarks; } else { this.PageToken.PendingWatermarks = watermarks; } break; case TenantRelocationSyncState.EnumerateConfigUnitLinksInPage: ExTraceGlobals.TenantRelocationTracer.TraceDebug((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration EnumerateConfigUnitLinksInPage skips"); this.PageToken.SwitchToEnumerateLiveObjectsState(); break; case TenantRelocationSyncState.EnumerateOrganizationalUnitLiveObjects: foreach (ADRawEntry entry3 in this.ReadLiveObjects(maxUsn)) { ExTraceGlobals.TenantRelocationTracer.TraceDebug <ADObjectId>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration EnumerateOrganizationalUnitLiveObjects yield {0}", entry3.Id); yield return(entry3); } if (this.PageToken.IsTenantConfigUnitInConfigNc) { this.PageToken.PendingWatermarksInvocationId = watermarksInvocationId; ExTraceGlobals.TenantRelocationTracer.TraceDebug <Guid>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration set this.PageToken.PendingWatermarksInvocationId to {0}", this.PageToken.PendingWatermarksInvocationId); this.PageToken.PendingWatermarks = watermarks; } break; case TenantRelocationSyncState.EnumerateOrganizationalUnitLinksInPage: ExTraceGlobals.TenantRelocationTracer.TraceDebug((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration EnumerateConfigUnitLinksInPage skips"); this.PageToken.SwitchToEnumerateLiveObjectsState(); break; case TenantRelocationSyncState.EnumerateConfigUnitDeletedObjects: foreach (ADRawEntry entry4 in this.ReadDeletedObjects()) { ExTraceGlobals.TenantRelocationTracer.TraceDebug <ADObjectId>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration EnumerateConfigUnitDeletedObjects yield {0}", entry4.Id); yield return(entry4); } break; case TenantRelocationSyncState.EnumerateOrganizationalUnitDeletedObjects: if (!this.PageToken.IsTenantConfigUnitInConfigNc) { this.PageToken.SwitchToNextState(); } else { foreach (ADRawEntry entry5 in this.ReadDeletedObjects()) { ExTraceGlobals.TenantRelocationTracer.TraceDebug <ADObjectId>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration EnumerateOrganizationalUnitDeletedObjects yield {0}", entry5.Id); yield return(entry5); } } break; case TenantRelocationSyncState.EnumerateSpecialObjects: foreach (ADRawEntry entry6 in this.ReadSpecialObjects()) { ExTraceGlobals.TenantRelocationTracer.TraceDebug <ADObjectId>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration EnumerateSpecialObjects yield {0}", entry6.Id); yield return(entry6); } if (!this.PageToken.IsTenantConfigUnitInConfigNc) { this.PageToken.PendingWatermarksInvocationId = watermarksInvocationId; ExTraceGlobals.TenantRelocationTracer.TraceDebug <Guid>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration set this.PageToken.PendingWatermarksInvocationId to {0}", this.PageToken.PendingWatermarksInvocationId); this.PageToken.PendingConfigNcWatermarks = configNcWatermarks; } this.PageToken.SwitchToNextState(); break; default: ExTraceGlobals.TenantRelocationTracer.TraceError <string>((long)SyncConfiguration.TraceId, "Invalid PageToken stat {0}", this.PageToken.State.ToString()); throw new ArgumentException(this.PageToken.State.ToString()); } } ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration this.PageToken.OrganizationalUnitObjectUSN = {0}", this.PageToken.OrganizationalUnitObjectUSN); if (this.PageToken.OrganizationalUnitObjectUSN > maxUsn + 1L) { this.PageToken.OrganizationalUnitObjectUSN = maxUsn + 1L; ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration set this.PageToken.OrganizationalUnitObjectUSN to {0}", this.PageToken.OrganizationalUnitObjectUSN); } ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration this.PageToken.OrganizationalUnitTombstoneUSN = {0}", this.PageToken.OrganizationalUnitTombstoneUSN); if (this.PageToken.OrganizationalUnitTombstoneUSN > maxUsn + 1L) { this.PageToken.OrganizationalUnitTombstoneUSN = maxUsn + 1L; ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration set this.PageToken.OrganizationalUnitTombstoneUSN to {0}", this.PageToken.OrganizationalUnitTombstoneUSN); } ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration this.PageToken.ConfigUnitObjectUSN = {0}", this.PageToken.ConfigUnitObjectUSN); if (this.PageToken.ConfigUnitObjectUSN > maxUsn + 1L) { this.PageToken.ConfigUnitObjectUSN = maxUsn + 1L; ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration this.PageToken.ConfigUnitObjectUSN = {0}", this.PageToken.ConfigUnitObjectUSN); } ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration this.PageToken.ConfigUnitTombstoneUSN = {0}", this.PageToken.ConfigUnitTombstoneUSN); if (this.PageToken.ConfigUnitTombstoneUSN > maxUsn + 1L) { this.PageToken.ConfigUnitTombstoneUSN = maxUsn + 1L; ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration this.PageToken.ConfigUnitTombstoneUSN = {0}", this.PageToken.ConfigUnitTombstoneUSN); } ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration this.PageToken.SpecialObjectsUSN = {0}", this.PageToken.SpecialObjectsUSN); if (this.PageToken.SpecialObjectsUSN > maxUsn + 1L) { this.PageToken.SpecialObjectsUSN = maxUsn + 1L; ExTraceGlobals.TenantRelocationTracer.TraceDebug <long>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration this.PageToken.SpecialObjectsUSN = {0}", this.PageToken.SpecialObjectsUSN); } this.PageToken.LastReadFailureStartTime = DateTime.MinValue; ExTraceGlobals.TenantRelocationTracer.TraceDebug <DateTime>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration set this.PageToken.LastReadFailureStartTime to {0}", this.PageToken.LastReadFailureStartTime); this.PageToken.Timestamp = DateTime.UtcNow; ExTraceGlobals.TenantRelocationTracer.TraceDebug <DateTime>((long)SyncConfiguration.TraceId, "TenantRelocationSyncConfiguration set this.PageToken.Timestamp to {0}", this.PageToken.Timestamp); yield break; }
private bool CheckReplicationStatus(ITopologyConfigurationSession session, WatermarkMap finishWaterMark, bool useConfigNC) { WatermarkMap replicationCursors = SyncConfiguration.GetReplicationCursors(session, useConfigNC, false); return(replicationCursors.ContainsAllChanges(finishWaterMark)); }
private long ReadDcHighestUSN(PartitionId partitionId, string domainController, bool useConfigNC, out Guid invocationId, out WatermarkMap watermarks) { ITopologyConfigurationSession topologyConfigurationSession = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(domainController, true, ConsistencyMode.PartiallyConsistent, null, ADSessionSettings.FromAccountPartitionRootOrgScopeSet(partitionId), 452, "ReadDcHighestUSN", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Relocation\\RemoveTenantRelocationRequest.cs"); invocationId = topologyConfigurationSession.GetInvocationIdByFqdn(domainController); topologyConfigurationSession.UseConfigNC = useConfigNC; watermarks = SyncConfiguration.GetReplicationCursors(topologyConfigurationSession, useConfigNC, false); return(watermarks[invocationId]); }