예제 #1
0
        // Token: 0x0600155D RID: 5469 RVA: 0x00079AD0 File Offset: 0x00077CD0
        private void RemoveMailboxFromStatesCache(MailboxProcessorMailboxData mailboxData)
        {
            Hashtable hashtable;

            if (AssistantsService.MailboxesStates.TryGetValue(WorkloadType.MailboxProcessorAssistant, out hashtable) && hashtable.ContainsKey(mailboxData.MailboxGuid))
            {
                AssistantsService.MailboxesStates[WorkloadType.MailboxProcessorAssistant].Remove(mailboxData.MailboxGuid);
            }
        }
예제 #2
0
        // Token: 0x06001557 RID: 5463 RVA: 0x00079650 File Offset: 0x00077850
        void IMailboxProcessor.ProcessSingleMailbox(MailboxData mailboxData)
        {
            MailboxProcessorMailboxData mailboxData2 = mailboxData as MailboxProcessorMailboxData;

            if (((IMailboxIssueDetector)this).IsMailboxProblemDetected(mailboxData2))
            {
                ((IMailboxIssueDetector)this).SubmitToRepair(((IMailboxIssueDetector)this).GetMailboxInformation(mailboxData2));
                return;
            }
            this.RemoveMailboxFromStatesCache(mailboxData2);
        }
예제 #3
0
        // Token: 0x0600155E RID: 5470 RVA: 0x00079B1C File Offset: 0x00077D1C
        private int GetMailboxRetyCountFromStateCache(MailboxProcessorMailboxData mailboxData)
        {
            int       result = 0;
            Hashtable hashtable;

            if (AssistantsService.MailboxesStates.TryGetValue(WorkloadType.MailboxProcessorAssistant, out hashtable) && hashtable.ContainsKey(mailboxData.MailboxGuid))
            {
                result = (int)hashtable[mailboxData.MailboxGuid];
            }
            return(result);
        }
예제 #4
0
        // Token: 0x0600155C RID: 5468 RVA: 0x00079A4C File Offset: 0x00077C4C
        private void AddMailboxToStatesCache(MailboxProcessorMailboxData mailboxData)
        {
            int       num = 1;
            Hashtable hashtable;

            if (AssistantsService.MailboxesStates.TryGetValue(WorkloadType.MailboxProcessorAssistant, out hashtable))
            {
                if (hashtable.ContainsKey(mailboxData.MailboxGuid))
                {
                    num = (int)hashtable[mailboxData.MailboxGuid];
                    num++;
                }
            }
            else
            {
                AssistantsService.MailboxesStates.Add(WorkloadType.MailboxProcessorAssistant, new Hashtable());
            }
            AssistantsService.MailboxesStates[WorkloadType.MailboxProcessorAssistant][mailboxData.MailboxGuid] = num;
        }
예제 #5
0
        // Token: 0x06001558 RID: 5464 RVA: 0x00079684 File Offset: 0x00077884
        bool IMailboxIssueDetector.IsMailboxProblemDetected(MailboxProcessorMailboxData mailboxData)
        {
            if (!mailboxData.IsMoveDestination)
            {
                return(false);
            }
            ADUser aduserFromMailboxGuid;

            try
            {
                aduserFromMailboxGuid = ADHelper.GetADUserFromMailboxGuid(mailboxData.MailboxGuid, mailboxData.TenantPartitionHint);
            }
            catch (NonUniqueRecipientException)
            {
                MailboxProcessorAssistantType.Tracer.TraceError <Guid>((long)this.GetHashCode(), "Got AD duplicate by GUID: {0}", mailboxData.MailboxGuid);
                return(false);
            }
            catch (ADTransientException)
            {
                return(false);
            }
            if (aduserFromMailboxGuid == null || (mailboxData.IsArchive && aduserFromMailboxGuid.ArchiveDatabase == null) || aduserFromMailboxGuid.Database == null)
            {
                return(false);
            }
            Guid a = mailboxData.IsArchive ? aduserFromMailboxGuid.ArchiveDatabase.ObjectGuid : aduserFromMailboxGuid.Database.ObjectGuid;

            if (a != mailboxData.DatabaseGuid)
            {
                MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Mailbox {0} is on the different database than AD user {1}. Not eligible for unlocking.", new object[]
                {
                    mailboxData.MailboxGuid,
                    aduserFromMailboxGuid.Guid
                });
                return(false);
            }
            if (aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.Completed && aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.CompletedWithWarning && aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.None && aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.Failed)
            {
                MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Mailbox with GUID {0} is being moved and not yet completed or not yet failed.", new object[]
                {
                    mailboxData.MailboxGuid
                });
                return(false);
            }
            ExchangePrincipal mailboxOwner = ExchangePrincipal.FromMailboxGuid(aduserFromMailboxGuid.Session.SessionSettings, mailboxData.MailboxGuid, mailboxData.DatabaseGuid, RemotingOptions.LocalConnectionsOnly, null, false);

            try
            {
                string clientInfoString = string.Format("{0};Action={1}", "Client=TBA", base.GetType().Name);
                using (MailboxSession.OpenAsAdmin(mailboxOwner, CultureInfo.InvariantCulture, clientInfoString, true))
                {
                    MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Mailbox {0} is not locked. No repair needed.", new object[]
                    {
                        mailboxData.MailboxGuid
                    });
                }
            }
            catch (MailboxInTransitException)
            {
                MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Found illegally locked mailbox with GUID {0}", new object[]
                {
                    mailboxData.MailboxGuid
                });
                this.AddMailboxToStatesCache(mailboxData);
                return(true);
            }
            catch (LocalizedException ex)
            {
                MailboxProcessorAssistantType.Tracer.TraceError((long)this.GetHashCode(), "{0} threw an exception of type {1} with message {2}. Was processing mailbox {3} on database {4}.", new object[]
                {
                    base.GetType().ToString(),
                    ex.GetType().ToString(),
                    ex.Message,
                    mailboxData.MailboxGuid,
                    mailboxData.DatabaseName
                });
            }
            return(false);
        }
예제 #6
0
        // Token: 0x06001559 RID: 5465 RVA: 0x00079920 File Offset: 0x00077B20
        MailboxProcessorNotificationEntry IMailboxIssueDetector.GetMailboxInformation(MailboxProcessorMailboxData mailboxData)
        {
            Guid externalDirectoryOrganizationId = (mailboxData.TenantPartitionHint != null) ? mailboxData.TenantPartitionHint.GetExternalDirectoryOrganizationId() : TenantPartitionHint.ExternalDirectoryOrganizationIdForRootOrg;

            return(new MailboxProcessorNotificationEntry(mailboxData.MailboxGuid, mailboxData.DatabaseGuid, externalDirectoryOrganizationId, this.GetMailboxRetyCountFromStateCache(mailboxData)));
        }