コード例 #1
0
        // Token: 0x06001200 RID: 4608 RVA: 0x00037AA4 File Offset: 0x00035CA4
        internal static ADObjectId FindDatabase(LogMessageDelegate logger)
        {
            LoadBalancingReport             loadBalancingReport             = null;
            MailboxDatabaseWithLocationInfo mailboxDatabaseWithLocationInfo = PhysicalResourceLoadBalancing.FindDatabaseAndLocation(null, logger, null, true, false, null, ref loadBalancingReport);

            if (mailboxDatabaseWithLocationInfo != null)
            {
                return(mailboxDatabaseWithLocationInfo.MailboxDatabase.Id);
            }
            return(null);
        }
コード例 #2
0
        // Token: 0x06001206 RID: 4614 RVA: 0x00037DC8 File Offset: 0x00035FC8
        internal static MailboxDatabaseWithLocationInfo FindDatabaseAndLocation(string domainController, LogMessageDelegate logger, ScopeSet scopeSet, bool isInitialProvisioning, bool localSiteDatabasesOnly, int?qualifiedMinServerVersion, IMailboxProvisioningConstraint mailboxProvisioningConstraint, IEnumerable <ADObjectId> excludedDatabaseIds, ref LoadBalancingReport loadBalancingReport)
        {
            ITopologyConfigurationSession configSession = PhysicalResourceLoadBalancing.CreateGlobalConfigSession(domainController);
            List <MailboxDatabase>        databasesForProvisioningCached = PhysicalResourceLoadBalancing.GetDatabasesForProvisioningCached(configSession, localSiteDatabasesOnly, logger);
            List <MailboxDatabase>        list;

            if (mailboxProvisioningConstraint != null || excludedDatabaseIds != null)
            {
                list = PhysicalResourceLoadBalancing.FilterEligibleDatabase(logger, databasesForProvisioningCached.GetRange(0, databasesForProvisioningCached.Count), mailboxProvisioningConstraint, excludedDatabaseIds);
            }
            else
            {
                list = databasesForProvisioningCached.GetRange(0, databasesForProvisioningCached.Count);
            }
            if (list.Count == 0)
            {
                PhysicalResourceLoadBalancing.LogVerbose(Strings.VerboseLbNoAvailableDatabase, logger);
                return(null);
            }
            LoadBalancingReport loadBalancingReport2 = loadBalancingReport ?? new LoadBalancingReport();

            loadBalancingReport2.enabledDatabasesWithLocalCopyCount = list.Count;
            ActiveManager cachingActiveManagerInstance = ActiveManager.GetCachingActiveManagerInstance();

            if (PhysicalResourceLoadBalancing.IsDatacenter)
            {
                return(PhysicalResourceLoadBalancing.FindDatabaseAndLocation(list, cachingActiveManagerInstance, isInitialProvisioning, localSiteDatabasesOnly, logger, ref loadBalancingReport2));
            }
            List <MailboxDatabaseWithLocationInfo> list2 = new List <MailboxDatabaseWithLocationInfo>(list.Count);

            foreach (MailboxDatabase mailboxDatabase in list)
            {
                DatabaseLocationInfo serverForActiveDatabaseCopy = PhysicalResourceLoadBalancing.GetServerForActiveDatabaseCopy(mailboxDatabase, cachingActiveManagerInstance, logger);
                if (serverForActiveDatabaseCopy != null && PhysicalResourceLoadBalancing.IsDatabaseInLocalSite(serverForActiveDatabaseCopy, logger) && (qualifiedMinServerVersion == null || serverForActiveDatabaseCopy.ServerVersion >= qualifiedMinServerVersion.Value))
                {
                    list2.Add(new MailboxDatabaseWithLocationInfo(mailboxDatabase, serverForActiveDatabaseCopy));
                }
            }
            return(PhysicalResourceLoadBalancing.VerifyStatusAndSelectDB(list2, domainController, logger, scopeSet));
        }
コード例 #3
0
        // Token: 0x06001203 RID: 4611 RVA: 0x00037B14 File Offset: 0x00035D14
        private static MailboxDatabaseWithLocationInfo FindDatabaseAndLocation(IList <MailboxDatabase> allDatabases, ActiveManager activeManager, bool isInitialProvisioning, bool localSiteDatabasesOnly, LogMessageDelegate logger, int?qualifiedMinServerVersion, ref LoadBalancingReport loadBalancingReport)
        {
            int num = (int)Math.Round((double)allDatabases.Count * 0.1);

            num = ((num < 10) ? Math.Min(allDatabases.Count, 10) : num);
            List <MailboxDatabaseWithLocationInfo> list  = new List <MailboxDatabaseWithLocationInfo>();
            List <MailboxDatabaseWithLocationInfo> list2 = new List <MailboxDatabaseWithLocationInfo>();
            Random random = new Random();

            while (allDatabases.Count > 0 && list.Count + list2.Count <= num)
            {
                int             index           = random.Next(allDatabases.Count);
                MailboxDatabase mailboxDatabase = allDatabases[index];
                if (isInitialProvisioning && mailboxDatabase.IsExcludedFromInitialProvisioning)
                {
                    loadBalancingReport.databasesExcludedFromInitialProvisioning++;
                    PhysicalResourceLoadBalancing.LogVerbose(Strings.VerboseLbInitialProvisioningDatabaseExcluded(mailboxDatabase.Name), logger);
                }
                else
                {
                    DatabaseLocationInfo serverForActiveDatabaseCopy = PhysicalResourceLoadBalancing.GetServerForActiveDatabaseCopy(mailboxDatabase, activeManager, logger);
                    if (serverForActiveDatabaseCopy != null && (qualifiedMinServerVersion == null || serverForActiveDatabaseCopy.ServerVersion >= qualifiedMinServerVersion.Value))
                    {
                        if (!localSiteDatabasesOnly || PhysicalResourceLoadBalancing.IsDatabaseInLocalSite(serverForActiveDatabaseCopy, logger))
                        {
                            if (list2.Count < 3)
                            {
                                return(new MailboxDatabaseWithLocationInfo(mailboxDatabase, serverForActiveDatabaseCopy));
                            }
                            list.Add(new MailboxDatabaseWithLocationInfo(mailboxDatabase, serverForActiveDatabaseCopy));
                        }
                        else
                        {
                            list2.Add(new MailboxDatabaseWithLocationInfo(mailboxDatabase, serverForActiveDatabaseCopy));
                        }
                    }
                }
                allDatabases.RemoveAt(index);
            }
            loadBalancingReport.databasesAndLocationCount      = list.Count + list2.Count;
            loadBalancingReport.firstPreferenceDatabasesCount  = list.Count;
            loadBalancingReport.secondPreferenceDatabasesCount = list2.Count;
            if (list.Count + list2.Count <= 0)
            {
                PhysicalResourceLoadBalancing.LogVerbose(Strings.VerboseLbNoAvailableDatabase, logger);
                return(null);
            }
            int maxValue = (int)Math.Ceiling((double)(list.Count + list2.Count) * 0.3);
            int num2     = random.Next(maxValue);

            if (num2 < list.Count)
            {
                return(list[num2]);
            }
            MailboxDatabaseWithLocationInfo mailboxDatabaseWithLocationInfo = list2[num2 - list.Count];

            PhysicalResourceLoadBalancing.LogVerbose(Strings.VerboseLbRemoteSiteDatabaseReturned(mailboxDatabaseWithLocationInfo.MailboxDatabase.Name, mailboxDatabaseWithLocationInfo.DatabaseLocationInfo.ServerFqdn), logger);
            return(mailboxDatabaseWithLocationInfo);
        }
コード例 #4
0
 // Token: 0x06001202 RID: 4610 RVA: 0x00037AF0 File Offset: 0x00035CF0
 private static MailboxDatabaseWithLocationInfo FindDatabaseAndLocation(IList <MailboxDatabase> allDatabases, ActiveManager activeManager, bool isInitialProvisioning, bool localSiteDatabasesOnly, LogMessageDelegate logger, ref LoadBalancingReport loadBalancingReport)
 {
     return(PhysicalResourceLoadBalancing.FindDatabaseAndLocation(allDatabases, activeManager, isInitialProvisioning, localSiteDatabasesOnly, logger, null, ref loadBalancingReport));
 }
コード例 #5
0
 // Token: 0x06001205 RID: 4613 RVA: 0x00037DA0 File Offset: 0x00035FA0
 internal static MailboxDatabaseWithLocationInfo FindDatabaseAndLocation(string domainController, LogMessageDelegate logger, ScopeSet scopeSet, bool isInitialProvisioning, bool localSiteDatabasesOnly, IMailboxProvisioningConstraint mailboxProvisioningConstraint, ref LoadBalancingReport loadBalancingReport)
 {
     return(PhysicalResourceLoadBalancing.FindDatabaseAndLocation(domainController, logger, scopeSet, isInitialProvisioning, localSiteDatabasesOnly, null, mailboxProvisioningConstraint, null, ref loadBalancingReport));
 }