// 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); }
// 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)); }
// Token: 0x0600120D RID: 4621 RVA: 0x00038928 File Offset: 0x00036B28 internal static bool IsDatabaseInLocalSite(DatabaseLocationInfo databaseLocationInfo, LogMessageDelegate logger) { return(PhysicalResourceLoadBalancing.IsDatabaseInLocalSite(databaseLocationInfo.ServerSite, databaseLocationInfo.ServerFqdn, databaseLocationInfo.DatabaseName, logger)); }