public virtual void InjectMoveForMailbox(DirectoryMailbox mailbox, BatchName batchName) { if (LoadBalanceADSettings.Instance.Value.UseDatabaseSelectorForMoveInjection) { LoadEntity loadEntity = this.serviceContext.GetTopologyExtractorFactoryContext().GetEntitySelectorFactory().GetExtractor(mailbox).ExtractEntity(); MailboxProvisioningResult database = this.databaseSelector.GetDatabase(new MailboxProvisioningData(mailbox.PhysicalSize, mailbox.MailboxProvisioningConstraints, loadEntity.ConsumedLoad)); database.ValidateSelection(); DirectoryIdentity database2 = database.Database; DirectoryDatabase database3 = (DirectoryDatabase)this.directoryProvider.GetDirectoryObject(database2); using (IInjectorService injectorClientForDatabase = this.clientFactory.GetInjectorClientForDatabase(database3)) { injectorClientForDatabase.InjectSingleMove(database2.Guid, batchName.ToString(), new LoadEntity(mailbox)); return; } } IRequest request = mailbox.CreateRequestToMove(null, batchName.ToString(), this.logger); this.queueManager.MainProcessingQueue.EnqueueRequest(request); }
public override string ToString() { string details = Name.ToString() + "\tPriority: " + Priority.ToString() + "\nSprites in this group:"; for (DLinkedNode item = iMan.GetActive().GetHead(); item != null; item = item.Next) { details += "\n" + ((SpriteBaseNode)item).ToString(); } Debug.WriteLine(details); return(details); }
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; } } } } }