public void ReplicateQueuedAssociations()
        {
            QueuedInProcessAssociationReplicator.Tracer.TraceDebug((long)this.GetHashCode(), "MailboxTaskProcessor.ReplicateQueuedAssociations: Processing associations.");
            ADUser mailboxAdUser = this.mailbox.FindAdUser();
            IDiagnosticsFrameFactory <IExtensibleLogger, IMailboxAssociationPerformanceTracker> diagnosticsFrameFactory = this.diagnosticsFrameFactoryCreator();
            IMailboxAssociationPerformanceTracker performanceTracker = diagnosticsFrameFactory.CreatePerformanceTracker(null);
            IExtensibleLogger      logger     = diagnosticsFrameFactory.CreateLogger(mailboxAdUser.ExchangeGuid, mailboxAdUser.OrganizationId);
            IAssociationReplicator replicator = this.immediateReplicatorCreator(logger, performanceTracker);

            using (MailboxAssociationDiagnosticsFrameFactory.Default.CreateDiagnosticsFrame("QueuedInProcessAssociationReplicator", "ReplicateAssociations", logger, performanceTracker))
            {
                bool inProcessReplicationSucceeded = true;
                GroupMailboxAccessLayerHelper.ExecuteOperationWithRetry(logger, "QueuedInProcessAssociationReplicator.ReplicateAssociations", delegate
                {
                    IStoreBuilder storeBuilder = this.storeBuilderCreator(logger, this.clientInfoString);
                    using (IAssociationStore associationStore = storeBuilder.Create(this.mailbox, performanceTracker))
                    {
                        QueuedInProcessAssociationReplicator.Tracer.TraceDebug <string>((long)this.GetHashCode(), "QueuedInProcessAssociationReplicator.ReplicateAssociationsImplementation: Created store provider. Mailbox={0}.", mailboxAdUser.ExternalDirectoryObjectId);
                        UserAssociationAdaptor masterAdaptor = new UserAssociationAdaptor(associationStore, this.adSession, this.mailbox);
                        while (this.pendingAssociations.Count > 0)
                        {
                            MailboxAssociation association = this.pendingAssociations.Dequeue();
                            inProcessReplicationSucceeded &= this.ReplicateSingleAssociation(replicator, masterAdaptor, association);
                        }
                        if (!inProcessReplicationSucceeded)
                        {
                            IReplicationAssistantInvoker replicationAssistantInvoker = this.replicationAssistantInvokerCreator(logger, this.replicationServerFqdn);
                            replicationAssistantInvoker.Invoke("QueuedInProcessAssociationReplicatorRpcReplication", masterAdaptor, new MailboxAssociation[0]);
                        }
                    }
                }, new Predicate <Exception>(GrayException.IsGrayException));
            }
            QueuedInProcessAssociationReplicator.Tracer.TraceDebug((long)this.GetHashCode(), "MailboxTaskProcessor.SendNotificationImplementation: Task completed.");
        }
Exemplo n.º 2
0
        public void Execute()
        {
            List <MailboxAssociation> list = new List <MailboxAssociation>(this.ItemLocators.Length);

            foreach (IMailboxLocator mailboxLocator in this.ItemLocators)
            {
                MailboxAssociation mailboxAssociation = this.LoadAssociation(mailboxLocator);
                if (this.UpdateAssociation(mailboxAssociation))
                {
                    this.SaveAssociation(mailboxAssociation);
                    list.Add(mailboxAssociation);
                    UpdateAssociationCommand.Tracer.TraceDebug <UserMailboxLocator>((long)this.GetHashCode(), "Saved association for user {0}", mailboxAssociation.User);
                }
                else if (mailboxAssociation.IsOutOfSync(this.MasterAdaptor.MasterLocator.IdentityHash))
                {
                    list.Add(mailboxAssociation);
                    UpdateAssociationCommand.Tracer.TraceDebug <UserMailboxLocator>((long)this.GetHashCode(), "Ignored saving association for user {0}, but association is out of sync, so replication will be attempted.", mailboxAssociation.User);
                }
                else
                {
                    UpdateAssociationCommand.Tracer.TraceDebug <UserMailboxLocator>((long)this.GetHashCode(), "Ignored saving association for user {0}", mailboxAssociation.User);
                }
            }
            IAssociationReplicator associationReplicator = this.GetAssociationReplicator();

            if (list.Count > 0 && associationReplicator != null)
            {
                associationReplicator.ReplicateAssociation(this.MasterAdaptor, list.ToArray());
            }
            this.OnPostExecute();
        }
Exemplo n.º 3
0
 public SetUserMembershipState(IExtensibleLogger logger, IAssociationReplicator associationReplicator, bool isMember, string joinedBy, IUserAssociationAdaptor masterAdaptor, IRecipientSession adSession, params UserMailboxLocator[] itemLocators) : base(logger, masterAdaptor, itemLocators)
 {
     this.associationReplicator = associationReplicator;
     this.isMember    = isMember;
     this.joinedBy    = joinedBy;
     this.adSession   = adSession;
     this.groupAdUser = base.MasterAdaptor.MasterLocator.FindAdUser();
 }
Exemplo n.º 4
0
 public PriorityReplicator(IAssociationReplicator priorityReplicator, IAssociationReplicator defaultReplicator, IMailboxLocator priorityLocator)
 {
     ArgumentValidator.ThrowIfNull("priorityReplicator", priorityReplicator);
     ArgumentValidator.ThrowIfNull("defaultReplicator", defaultReplicator);
     this.priorityLocator    = priorityLocator;
     this.priorityReplicator = priorityReplicator;
     this.defaultReplicator  = defaultReplicator;
 }
 private bool ReplicateSingleAssociation(IAssociationReplicator replicator, IAssociationAdaptor masterAdaptor, MailboxAssociation association)
 {
     QueuedInProcessAssociationReplicator.Tracer.TraceDebug <IAssociationAdaptor, MailboxAssociation>((long)this.GetHashCode(), "QueuedInProcessAssociationReplicator.ReplicateSingleAssociation: MasterAdaptor={0}, Association={1}.", masterAdaptor, association);
     return(replicator.ReplicateAssociation(masterAdaptor, new MailboxAssociation[]
     {
         association
     }));
 }
Exemplo n.º 6
0
 public ReplicatorEnabledAssociationEnumerator(IAssociationReplicator replicator, IEnumerable <MailboxAssociation> baseEnumerator, IAssociationStore storeProvider)
 {
     ArgumentValidator.ThrowIfNull("replicator", replicator);
     ArgumentValidator.ThrowIfNull("baseEnumerator", baseEnumerator);
     ArgumentValidator.ThrowIfNull("storeProvider", storeProvider);
     this.replicator     = replicator;
     this.baseEnumerator = baseEnumerator;
     this.storeProvider  = storeProvider;
 }
Exemplo n.º 7
0
 public SetGroupPinState(IExtensibleLogger logger, IAssociationReplicator associationReplicator, bool pin, IGroupAssociationAdaptor masterAdaptor, GroupMailboxLocator itemLocator, IMailboxAssociationPerformanceTracker performanceTracker = null, bool isModernGroupsNewArchitecture = false) : base(logger, masterAdaptor, new IMailboxLocator[]
 {
     itemLocator
 })
 {
     this.associationReplicator = associationReplicator;
     this.pin = pin;
     this.performanceTracker            = performanceTracker;
     this.isModernGroupsNewArchitecture = isModernGroupsNewArchitecture;
 }