Example #1
0
        private DatabaseLocationInfo GetServerInformationForDatabase(Guid databaseId, IADDatabase database, DatabaseLocationInfo dbLocationInfo, GetServerForDatabaseFlags gsfdFlags, IPerformanceDataLogger perfLogger)
        {
            if (database != null && databaseId != database.Guid)
            {
                throw new ArgumentException("When passing in database, its GUID must match databaseId.", "database");
            }
            ExTraceGlobals.ActiveManagerClientTracer.TraceFunction <Guid, DatabaseLocationInfo, int>((long)this.GetHashCode(), "Entering GetServerInformationForDatabase(Guid={0}, minimalLocationInfo={1}, Flags={2})", databaseId, dbLocationInfo, (int)gsfdFlags);
            this.DisposeCheck();
            bool flag  = (gsfdFlags & GetServerForDatabaseFlags.IgnoreAdSiteBoundary) != GetServerForDatabaseFlags.None;
            bool flag2 = (gsfdFlags & GetServerForDatabaseFlags.ReadThrough) != GetServerForDatabaseFlags.None;

            if (flag2 || dbLocationInfo.ServerLegacyDN == null)
            {
                if (database == null)
                {
                    AdObjectLookupFlags flags = flag2 ? AdObjectLookupFlags.ReadThrough : AdObjectLookupFlags.None;
                    using (new StopwatchPerformanceTracker("GetServerInformationForDatabaseGetDatabaseByGuidEx", perfLogger))
                    {
                        database = this.GetDatabaseByGuidEx(databaseId, flags, perfLogger);
                    }
                }
                ActiveManagerImplementation.GetServerInformationForDatabaseInternal(database, dbLocationInfo, this.m_miniServerLookup);
            }
            if (dbLocationInfo != null)
            {
                DatabaseLocationInfoResult databaseLocationInfoResult = dbLocationInfo.RequestResult;
                bool flag3 = false;
                if (flag && databaseLocationInfoResult == DatabaseLocationInfoResult.SiteViolation)
                {
                    databaseLocationInfoResult = DatabaseLocationInfoResult.Success;
                    flag3 = true;
                }
                if (flag && databaseLocationInfoResult == DatabaseLocationInfoResult.InTransitCrossSite)
                {
                    databaseLocationInfoResult = DatabaseLocationInfoResult.InTransitSameSite;
                    flag3 = true;
                }
                ExTraceGlobals.FaultInjectionTracer.TraceTest <DatabaseLocationInfoResult>(3831901501U, ref databaseLocationInfoResult);
                ExTraceGlobals.FaultInjectionTracer.TraceTest <bool>(2221288765U, ref flag3);
                if (flag3)
                {
                    ExTraceGlobals.ActiveManagerClientTracer.TraceDebug <DatabaseLocationInfoResult, DatabaseLocationInfoResult>((long)this.GetHashCode(), "GetServerForDatabase(): At the caller's request, changing the location info's result from {0} to {1}.", dbLocationInfo.RequestResult, databaseLocationInfoResult);
                    dbLocationInfo = DatabaseLocationInfo.CloneDatabaseLocationInfo(dbLocationInfo, databaseLocationInfoResult);
                }
            }
            if (ExTraceGlobals.ActiveManagerClientTracer.IsTraceEnabled(TraceType.DebugTrace))
            {
                ExTraceGlobals.ActiveManagerClientTracer.TraceDebug <Guid, DatabaseLocationInfo>((long)this.GetHashCode(), "Database Location Info ({0}) = {1}", databaseId, dbLocationInfo);
            }
            ExTraceGlobals.ActiveManagerClientTracer.TraceFunction <Guid>((long)this.GetHashCode(), "Exiting GetServerInformationForDatabase(Guid={0})", databaseId);
            return(dbLocationInfo);
        }