示例#1
0
        public static SyncCookie FromBytes(byte[] cookieData)
        {
            Exception  ex     = null;
            SyncCookie result = null;

            if (!SyncCookie.TryFromBytes(cookieData, out result, out ex))
            {
                throw ex;
            }
            return(result);
        }
示例#2
0
        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);
        }