protected virtual void InjectMoves(LoadContainer database, BatchName batchName, IEnumerable <LoadEntity> mailboxes, bool throwIfNotValid) { IRequestQueue injectorQueue = this.queueManager.GetInjectionQueue((DirectoryDatabase)database.DirectoryObject); IOperationRetryManager operationRetryManager = LoadBalanceOperationRetryManager.Create(this.logger); using (IEnumerator <LoadEntity> enumerator = mailboxes.GetEnumerator()) { while (enumerator.MoveNext()) { LoadEntity mailbox = enumerator.Current; if (mailbox.DirectoryObject == null) { this.logger.Log(MigrationEventType.Warning, "Not injecting move for {0} because its DirectoryObject is null", new object[] { mailbox }); } else { OperationRetryManagerResult operationRetryManagerResult = operationRetryManager.TryRun(delegate { DirectoryObject directoryObject = mailbox.DirectoryObject; ConstraintValidationResult constraintValidationResult = database.Constraint.Accept(mailbox); if (constraintValidationResult.Accepted) { database.CommittedLoad += mailbox.ConsumedLoad; if (directoryObject.SupportsMoving) { DirectoryObject directoryObject2 = database.DirectoryObject; IRequest request = directoryObject.CreateRequestToMove(directoryObject2.Identity, batchName.ToString(), this.logger); injectorQueue.EnqueueRequest(request); return; } if (throwIfNotValid) { throw new ObjectCannotBeMovedException(mailbox.DirectoryObjectIdentity.ObjectType.ToString(), mailbox.DirectoryObjectIdentity.ToString()); } } else { this.logger.Log(MigrationEventType.Warning, "Not injecting move for {0} because it violates the target database constraints: {1}", new object[] { mailbox, constraintValidationResult }); if (throwIfNotValid) { constraintValidationResult.Constraint.ValidateAccepted(mailbox); } } }); if (!operationRetryManagerResult.Succeeded && throwIfNotValid) { throw operationRetryManagerResult.Exception; } } } } }
public void ProcessRebalanceRequest(BandMailboxRebalanceData rebalanceRequest) { AnchorUtil.ThrowOnNullArgument(rebalanceRequest, "rebalanceRequest"); BandRebalanceRequest request = new BandRebalanceRequest(rebalanceRequest, this.clientFactory, this.logger); LoadContainer sourceDatabase = rebalanceRequest.SourceDatabase; IRequestQueue processingQueue = this.GetProcessingQueue(sourceDatabase); processingQueue.EnqueueRequest(request); }
private void BeginProcessingMailbox(DirectoryMailbox mailbox) { IRequestQueue requestQueue = (mailbox.Parent != null) ? this.context.QueueManager.GetProcessingQueue(mailbox.Parent) : this.context.QueueManager.MainProcessingQueue; string[] source = LoadBalanceADSettings.Instance.Value.ExcludedMailboxProcessors.Split(new char[] { ',' }); IList <MailboxProcessor> list = this.processors(this.context.QueueManager) ?? ((IList <MailboxProcessor>)Array <MailboxProcessor> .Empty); foreach (MailboxProcessor mailboxProcessor in list) { if (source.Contains(mailboxProcessor.Name)) { this.context.Logger.LogVerbose("Skipping processor {0} because it is disabled.", new object[] { mailboxProcessor.Name }); } else if (!mailboxProcessor.ShouldProcess(mailbox)) { this.context.Logger.LogVerbose("Processor {0} doesn't want to process the mailbox, ignored.", new object[] { mailboxProcessor.Name }); } else if (mailboxProcessor.RequiresRunspace) { requestQueue.EnqueueRequest(new ProcessMailboxRequest(mailbox, mailboxProcessor, this.context.Logger, this.context.CmdletPool)); } else { using (OperationTracker.Create(this.context.Logger, "Applying processor {0} to mailbox {1}.", new object[] { mailboxProcessor.GetType().FullName, mailbox.Identity })) { mailboxProcessor.ProcessMailbox(mailbox, null); } } } }