// Token: 0x060061E2 RID: 25058 RVA: 0x0014E6C0 File Offset: 0x0014C8C0 public static BackSyncCookie Parse(byte[] binaryCookie) { if (binaryCookie == null) { ExTraceGlobals.BackSyncTracer.TraceError((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse input binaryCookie is NULL"); throw new ArgumentNullException("binaryCookie"); } ExTraceGlobals.BackSyncTracer.TraceDebug <string>((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse Read BackSync binary cookie \"{0}\"", Convert.ToBase64String(binaryCookie)); Exception ex2; try { using (BackSyncCookieReader backSyncCookieReader = BackSyncCookieReader.Create(binaryCookie, typeof(BackSyncCookie))) { int num = (int)backSyncCookieReader.GetNextAttributeValue(); ServiceInstanceId serviceInstanceId = new ServiceInstanceId((string)backSyncCookieReader.GetNextAttributeValue()); long dateData = (long)backSyncCookieReader.GetNextAttributeValue(); long dateData2 = (long)backSyncCookieReader.GetNextAttributeValue(); Guid invocationId = (Guid)backSyncCookieReader.GetNextAttributeValue(); bool moreData = (bool)backSyncCookieReader.GetNextAttributeValue(); byte[] array = (byte[])backSyncCookieReader.GetNextAttributeValue(); if (array != null) { ADDirSyncCookie.Parse(array); } string[] errorObjects = (string[])backSyncCookieReader.GetNextAttributeValue(); Dictionary <string, int> errorObjects2 = BackSyncCookie.ParseErrorObjectsAndFailureCounts(errorObjects); long dateData3 = (long)backSyncCookieReader.GetNextAttributeValue(); byte[] lastDirSyncCookieWithReplicationVectors = (byte[])backSyncCookieReader.GetNextAttributeValue(); long dateData4 = (long)backSyncCookieReader.GetNextAttributeValue(); Guid sequenceId = (Guid)backSyncCookieReader.GetNextAttributeValue(); return(new BackSyncCookie(DateTime.FromBinary(dateData), DateTime.FromBinary(dateData2), DateTime.FromBinary(dateData3), invocationId, moreData, array, errorObjects2, lastDirSyncCookieWithReplicationVectors, serviceInstanceId, sequenceId, DateTime.FromBinary(dateData4))); } } catch (ArgumentException ex) { ExTraceGlobals.BackSyncTracer.TraceError <string>((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse ArgumentException {0}", ex.ToString()); ex2 = ex; } catch (IOException ex3) { ExTraceGlobals.BackSyncTracer.TraceError <string>((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse IOException {0}", ex3.ToString()); ex2 = ex3; } catch (FormatException ex4) { ExTraceGlobals.BackSyncTracer.TraceError <string>((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse FormatException {0}", ex4.ToString()); ex2 = ex4; } ExTraceGlobals.BackSyncTracer.TraceError <string>((long)SyncConfiguration.TraceId, "BackSyncCookie.Parse throw InvalidCookieException {0}", ex2.ToString()); throw new InvalidCookieException(ex2); }
private MergePageToken(MergeState mergeState, byte[] tenantFullSyncPageTokenBytes, byte[] incrementalSyncCookieBytes, Dictionary <string, int> errorObjectsAndFailureCounts) : base(tenantFullSyncPageTokenBytes) { ExTraceGlobals.MergeTracer.TraceDebug((long)base.TenantExternalDirectoryId.GetHashCode(), "New MergePageToken"); this.MergeState = mergeState; ExTraceGlobals.MergeTracer.TraceDebug <string>((long)base.TenantExternalDirectoryId.GetHashCode(), "MergePageToken this.MergeState = {0}", this.MergeState.ToString()); this.BackSyncCookie = BackSyncCookie.Parse(incrementalSyncCookieBytes); if (!this.BackSyncCookie.ServiceInstanceId.Equals(base.ServiceInstanceId)) { ExTraceGlobals.MergeTracer.TraceError((long)base.TenantExternalDirectoryId.GetHashCode(), "MergePageToken serviceInstanceId != tenantFullSyncPageTokenBytes.ServiceInstanceId"); throw new InvalidCookieException(new ArgumentException("serviceInstanceId")); } this.MergeVersion = 2; ExTraceGlobals.MergeTracer.TraceDebug <int>((long)base.TenantExternalDirectoryId.GetHashCode(), "MergePageToken this.MergeVersion = {0}", this.MergeVersion); this.dirSyncCookie = ADDirSyncCookie.Parse(this.BackSyncCookie.DirSyncCookie); base.ErrorObjectsAndFailureCounts = (errorObjectsAndFailureCounts ?? new Dictionary <string, int>()); if (!this.BackSyncCookie.ReadyToMerge || this.dirSyncCookie.MoreData) { ExTraceGlobals.MergeTracer.TraceError((long)base.TenantExternalDirectoryId.GetHashCode(), "MergePageToken !this.BackSyncCookie.ReadyToMerge || dirSyncCookie.MoreData"); throw new InvalidCookieException(new ArgumentException("incrementalSyncCookieBytes")); } }
internal void FinishFullSync() { ExTraceGlobals.TenantFullSyncTracer.TraceDebug((long)this.TenantExternalDirectoryId.GetHashCode(), "TenantFullSyncPageToken.FinishFullSync entering"); ExTraceGlobals.TenantFullSyncTracer.TraceDebug <string>((long)this.TenantExternalDirectoryId.GetHashCode(), "TenantFullSyncPageToken.FinishFullSync this.State = {0}", this.State.ToString()); if (this.TenantScopedBackSyncCookie == null && this.State != TenantFullSyncState.EnumerateDeletedObjects) { ExTraceGlobals.TenantFullSyncTracer.TraceError <TenantFullSyncState>((long)this.TenantExternalDirectoryId.GetHashCode(), "this.State != TenantFullSyncState.EnumerateDeletedObjects. State: {0}", this.State); throw new InvalidOperationException("State"); } if (this.TenantScopedBackSyncCookie != null && this.State != TenantFullSyncState.EnumerateLiveObjects && this.State != TenantFullSyncState.EnumerateDeletedObjects) { ExTraceGlobals.TenantFullSyncTracer.TraceError <TenantFullSyncState>((long)this.TenantExternalDirectoryId.GetHashCode(), "this.State != TenantFullSyncState.EnumerateLiveObjects and EnumerateDeletedObjects. State: {0}", this.State); throw new InvalidOperationException("State"); } this.CheckLinkPropertiesAreEmpty(); if (this.TenantScopedBackSyncCookie == null) { if (this.PendingWatermarks == null) { ExTraceGlobals.TenantFullSyncTracer.TraceError((long)this.TenantExternalDirectoryId.GetHashCode(), "this.PendingWatermarks == null"); throw new InvalidOperationException("PendingWatermarks"); } if (this.PendingWatermarksInvocationId == Guid.Empty) { ExTraceGlobals.TenantFullSyncTracer.TraceError((long)this.TenantExternalDirectoryId.GetHashCode(), "this.PendingWatermarksInvocationId == Guid.Empty"); throw new InvalidOperationException("PendingWatermarksInvocationId"); } this.WatermarksInvocationId = this.PendingWatermarksInvocationId; this.PendingWatermarksInvocationId = Guid.Empty; this.Watermarks = this.PendingWatermarks; this.PendingWatermarks = null; } else { if (this.TenantScopedBackSyncCookie.MoreDirSyncData) { ExTraceGlobals.TenantFullSyncTracer.TraceError((long)this.TenantExternalDirectoryId.GetHashCode(), "this.TenantScopedBackSyncCookie.MoreDirSyncData == true"); throw new InvalidOperationException("TenantScopedBackSyncCookie.MoreDirSyncData"); } ADDirSyncCookie addirSyncCookie = ADDirSyncCookie.Parse(this.TenantScopedBackSyncCookie.DirSyncCookie); if (addirSyncCookie.Cursors == null || addirSyncCookie.Cursors.Count == 0) { ExTraceGlobals.TenantFullSyncTracer.TraceError((long)this.TenantExternalDirectoryId.GetHashCode(), "latestDirSyncCookie.Cursors is null or empty"); throw new InvalidOperationException("latestDirSyncCookie.Cursors"); } this.WatermarksInvocationId = this.TenantScopedBackSyncCookie.InvocationId; this.Watermarks = new WatermarkMap(); foreach (ReplicationCursor replicationCursor in addirSyncCookie.Cursors) { this.Watermarks[replicationCursor.SourceInvocationId] = replicationCursor.UpToDatenessUsn; } } this.State = TenantFullSyncState.Complete; ExTraceGlobals.TenantFullSyncTracer.TraceDebug((long)this.TenantExternalDirectoryId.GetHashCode(), "Tenant full sync for {0} on {1}({2}) is complete. Watermarks stored: {3}", new object[] { this.TenantExternalDirectoryId, this.InvocationId, this.InvocationId, this.Watermarks.SerializeToString() }); }