public override DatabaseSizeInfo GetDatabaseSizeInformation(DirectoryDatabase database)
        {
            DatabaseSizeInfo databaseSpaceData;

            using (IPhysicalDatabase physicalDatabaseConnection = this.serviceContext.ClientFactory.GetPhysicalDatabaseConnection(database))
            {
                databaseSpaceData = physicalDatabaseConnection.GetDatabaseSpaceData();
            }
            return(databaseSpaceData);
        }
Пример #2
0
 public IEnumerable <NonConnectedMailbox> GetDisconnectedMailboxesForDatabase(DirectoryDatabase database)
 {
     using (IPhysicalDatabase physicalDatabase = this.clientFactory.GetPhysicalDatabaseConnection(database))
     {
         foreach (NonConnectedMailbox disconnectedMailbox in this.GetDisconnectedMailboxesForDatabaseInternal(database, physicalDatabase))
         {
             yield return(disconnectedMailbox);
         }
     }
     yield break;
 }
Пример #3
0
        private void AddPhysicalMailboxToList(Guid mailboxGuid, Guid databaseGuid, IPhysicalDatabase physicalDatabaseConnection, List <IPhysicalMailbox> physicalMailboxes, bool isArchive)
        {
            IPhysicalMailbox physicalMailbox = null;

            if (physicalDatabaseConnection == null)
            {
                physicalMailbox = new VirtualPhysicalMailbox(this.clientFactory, this.GetDatabase(databaseGuid), mailboxGuid, this.logger, isArchive);
            }
            else if (physicalDatabaseConnection.DatabaseGuid == databaseGuid)
            {
                physicalMailbox = physicalDatabaseConnection.GetMailbox(mailboxGuid);
            }
            if (physicalMailbox != null)
            {
                physicalMailboxes.Add(physicalMailbox);
            }
        }
        private IPhysicalMailbox LoadMailboxData()
        {
            IPhysicalMailbox result;

            using (OperationTracker.Create(this.logger, "Retrieving single mailbox {0} data from database {1}", new object[]
            {
                this.Guid,
                this.database.Identity
            }))
            {
                using (IPhysicalDatabase physicalDatabaseConnection = this.clientFactory.GetPhysicalDatabaseConnection(this.database))
                {
                    result = (physicalDatabaseConnection.GetMailbox(this.Guid) ?? EmptyPhysicalMailbox.Instance);
                }
            }
            return(result);
        }
Пример #5
0
        public IEnumerable <DirectoryMailbox> GetMailboxesForDatabase(DirectoryDatabase database)
        {
            this.logger.LogVerbose("Getting mailboxes for database '{0}'", new object[]
            {
                database.Name
            });
            DirectoryIdentity databaseIdentity = database.Identity;

            using (IPhysicalDatabase physicalDatabase = this.clientFactory.GetPhysicalDatabaseConnection(database))
            {
                physicalDatabase.LoadMailboxes();
                IOperationRetryManager retryManager = LoadBalanceOperationRetryManager.Create(this.logger);
                foreach (LoadBalancingMiniRecipient recipient in this.RecipientSession.FindAllUsersLinkedToDatabase(databaseIdentity.ADObjectId))
                {
                    DirectoryMailbox           mailbox       = null;
                    LoadBalancingMiniRecipient miniRecipient = recipient;
                    retryManager.TryRun(delegate
                    {
                        mailbox        = this.GetMailboxFromMiniRecipient(miniRecipient, this.RecipientSession.GetExternalDirectoryOrganizationId(miniRecipient), physicalDatabase);
                        mailbox.Parent = database;
                        this.NotifyObjectLoaded(mailbox);
                    });
                    if (mailbox != null)
                    {
                        yield return(mailbox);
                    }
                }
                foreach (IPhysicalMailbox consumerMailbox in physicalDatabase.GetConsumerMailboxes())
                {
                    DirectoryIdentity consumerIdentity = DirectoryIdentity.CreateConsumerMailboxIdentity(consumerMailbox.Guid, physicalDatabase.DatabaseGuid, consumerMailbox.OrganizationId);
                    yield return(new DirectoryMailbox(this, consumerIdentity, new IPhysicalMailbox[]
                    {
                        consumerMailbox
                    }, DirectoryMailboxType.Consumer));
                }
                foreach (NonConnectedMailbox disconnectedMailbox in this.GetDisconnectedMailboxesForDatabaseInternal(database, physicalDatabase))
                {
                    yield return(disconnectedMailbox);
                }
            }
            yield break;
        }
 public CachedPhysicalDatabase(IPhysicalDatabase database) : base(null)
 {
     this.database = database;
 }
Пример #7
0
        private DirectoryMailbox GetMailboxFromMiniRecipient(LoadBalancingMiniRecipient recipient, Guid organizationId, IPhysicalDatabase physicalDatabaseConnection)
        {
            List <IPhysicalMailbox> physicalMailboxes = new List <IPhysicalMailbox>(2);
            Guid exchangeGuid = recipient.ExchangeGuid;

            if (recipient.Database != null && exchangeGuid != Guid.Empty)
            {
                Guid objectGuid = recipient.Database.ObjectGuid;
                this.AddPhysicalMailboxToList(exchangeGuid, objectGuid, physicalDatabaseConnection, physicalMailboxes, false);
            }
            if (recipient.ArchiveGuid != Guid.Empty && recipient.ArchiveDatabase != null)
            {
                this.AddPhysicalMailboxToList(recipient.ArchiveGuid, recipient.ArchiveDatabase.ObjectGuid, physicalDatabaseConnection, physicalMailboxes, true);
            }
            DirectoryMailbox directoryMailbox;

            if (recipient.RecipientType == RecipientType.MailUser)
            {
                directoryMailbox = new CloudArchive(this, DirectoryIdentity.CreateMailboxIdentity(recipient.Guid, organizationId, DirectoryObjectType.CloudArchive), physicalMailboxes);
            }
            else
            {
                directoryMailbox = new DirectoryMailbox(this, DirectoryIdentity.CreateMailboxIdentity(recipient.Guid, organizationId, DirectoryObjectType.Mailbox), physicalMailboxes, DirectoryMailboxType.Organization);
                if (recipient.propertyBag.Contains(MiniRecipientSchema.ConfigurationXML) && recipient.ConfigXML != null)
                {
                    directoryMailbox.MailboxProvisioningConstraints = recipient.ConfigXML.MailboxProvisioningConstraints;
                }
            }
            if (recipient.MailboxMoveFlags.HasFlag(RequestFlags.IntraOrg) && (recipient.MailboxMoveStatus == RequestStatus.Queued || recipient.MailboxMoveStatus == RequestStatus.InProgress))
            {
                BatchName batchName = BatchName.FromString(recipient.MailboxMoveBatchName);
                if (batchName.IsLoadBalancingBatch)
                {
                    directoryMailbox.IsBeingLoadBalanced = true;
                }
            }
            return(directoryMailbox);
        }
Пример #8
0
        private IEnumerable <NonConnectedMailbox> GetDisconnectedMailboxesForDatabaseInternal(DirectoryDatabase database, IPhysicalDatabase physicalDatabase)
        {
            this.logger.LogVerbose("Getting soft deleted mailboxes for database '{0}'", new object[]
            {
                database.Name
            });
            IOperationRetryManager retryManager = LoadBalanceOperationRetryManager.Create(this.logger);

            foreach (IPhysicalMailbox disconnectedMailbox in physicalDatabase.GetNonConnectedMailboxes())
            {
                NonConnectedMailbox nonConnectedMailbox = null;
                IPhysicalMailbox    mailbox             = disconnectedMailbox;
                retryManager.TryRun(delegate
                {
                    nonConnectedMailbox = new NonConnectedMailbox(this, DirectoryIdentity.CreateNonConnectedMailboxIdentity(mailbox.Guid, mailbox.OrganizationId), new IPhysicalMailbox[]
                    {
                        mailbox
                    });
                    nonConnectedMailbox.Parent = database;
                    this.NotifyObjectLoaded(nonConnectedMailbox);
                });
                if (disconnectedMailbox != null)
                {
                    yield return(nonConnectedMailbox);
                }
            }
            yield break;
        }