// Token: 0x06000E91 RID: 3729 RVA: 0x000574B4 File Offset: 0x000556B4 private void StartInvoke() { if (this.splitState.ProgressState != this.startState) { this.splitState.ProgressState = this.startState; this.splitOperationState.StartTime = DateTime.UtcNow; } ISplitOperationState splitOperationState = this.splitOperationState; splitOperationState.RetryCount += 1; this.splitOperationState.Error = null; this.splitOperationState.ErrorDetails = null; this.splitOperationState.PartialStep = false; }
// Token: 0x06000E92 RID: 3730 RVA: 0x00057530 File Offset: 0x00055730 private void EndInvoke() { bool flag = false; if (this.splitOperationState.PartialStep) { ISplitOperationState splitOperationState = this.splitOperationState; splitOperationState.PartialStepCount += 1; } if (this.splitOperationState.Error == null) { if (this.splitOperationState.PartialStep) { this.splitOperationState.RetryCount = 0; this.logger.LogEvent(LogEventType.Verbose, string.Format("SplitOperationBase::{0}::EndInvoke - Operation {1} successfully executed partial step number {2}.", this.GetHashCode(), this.name, this.splitOperationState.PartialStepCount)); } else { flag = true; this.logger.LogEvent(LogEventType.Verbose, string.Format("SplitOperationBase::{0}::EndInvoke - Operation {1} successfully completed.", this.GetHashCode(), this.name)); } } else if (this.splitOperationState.Error is TransientException) { if ((int)this.splitOperationState.RetryCount < this.MaxRetryCount) { this.logger.LogEvent(LogEventType.Verbose, string.Format("SplitOperationBase::{0}::EndInvoke - Operation {1} executed with retryable transient error {2}. OptionalErrorDetails: {3}", new object[] { this.GetHashCode(), this.name, this.splitOperationState.Error, this.splitOperationState.ErrorDetails })); } else { flag = true; this.logger.LogEvent(LogEventType.Verbose, string.Format("SplitOperationBase::{0}::EndInvoke - Operation {1} completed all retries for transient error {2}. OptionalErrorDetails: {3}", new object[] { this.GetHashCode(), this.name, this.splitOperationState.Error, this.splitOperationState.ErrorDetails })); } } else { flag = true; this.logger.LogEvent(LogEventType.Verbose, string.Format("SplitOperationBase::{0}::EndInvoke - Operation {1} completed with permanent failure {2}. OptionalErrorDetails: {3}", new object[] { this.GetHashCode(), this.name, this.splitOperationState.Error, this.splitOperationState.ErrorDetails })); } if (flag) { this.splitOperationState.CompletedTime = DateTime.UtcNow; this.splitState.ProgressState = this.completionState; } }
// Token: 0x06000E8B RID: 3723 RVA: 0x00057438 File Offset: 0x00055638 internal SplitOperationBase(string name, IPublicFolderSession publicFolderSession, IPublicFolderSplitState splitState, IPublicFolderMailboxLoggerBase logger, IAssistantRunspaceFactory powershellFactory, ISplitOperationState splitOperationState, SplitProgressState startState, SplitProgressState completionState) { this.name = name; this.publicFolderSession = publicFolderSession; this.splitState = splitState; this.logger = logger; this.powershellFactory = powershellFactory; this.startState = startState; this.completionState = completionState; this.splitOperationState = splitOperationState; }
// Token: 0x06000F17 RID: 3863 RVA: 0x0005A154 File Offset: 0x00058354 public static Unlimited <ByteQuantifiedSize> GetMailboxQuota(IPublicFolderMailboxLoggerBase logger, IAssistantRunspaceFactory powershellFactory, Guid mailboxGuid, OrganizationId organizationId, ISplitOperationState splitOperationState) { ADObjectId mailboxDatabase = null; bool useDatabaseQuotaDefaults = false; Unlimited <ByteQuantifiedSize> mailboxQuota = Unlimited <ByteQuantifiedSize> .UnlimitedValue; string value = string.Format("{0}\\{1}", organizationId.OrganizationalUnit.Name, mailboxGuid.ToString()); PSCommand psCommand = new PSCommand(); psCommand.AddCommand("Get-Mailbox"); psCommand.AddParameter("PublicFolder"); psCommand.AddParameter("Identity", value); Mailbox publicFolderMailbox = null; PublicFolderSplitHelper.PowerShellExceptionHandler(delegate(out string originOfException, out ErrorRecord error) { error = null; originOfException = "GetMailboxQuota - RunPSCommand: Get-Mailbox -PublicFolder"; IAssistantRunspaceProxy assistantRunspaceProxy = powershellFactory.CreateRunspaceForDatacenterAdmin(organizationId); publicFolderMailbox = assistantRunspaceProxy.RunPSCommand <Mailbox>(psCommand, out error, logger); if (error == null) { mailboxQuota = publicFolderMailbox.ProhibitSendQuota; useDatabaseQuotaDefaults = (publicFolderMailbox.UseDatabaseQuotaDefaults ?? false); MailboxDatabase mailboxDatabase = publicFolderMailbox.Database; if (useDatabaseQuotaDefaults && mailboxDatabase != null) { psCommand.Clear(); psCommand.AddCommand("Get-MailboxDatabase"); psCommand.AddParameter("Identity", mailboxDatabase.Name); originOfException = "GetMailboxQuota - RunPSCommand: Get-MailboxDatabase"; mailboxDatabase = assistantRunspaceProxy.RunPSCommand <MailboxDatabase>(psCommand, out error, logger); if (error == null) { mailboxQuota = mailboxDatabase.ProhibitSendQuota; } } } }, splitOperationState); return(mailboxQuota); }
// Token: 0x06000F16 RID: 3862 RVA: 0x00059F68 File Offset: 0x00058168 public static Unlimited <ByteQuantifiedSize> GetActualItemSize(IPublicFolderMailboxLoggerBase logger, IAssistantRunspaceFactory powershellFactory, Guid mailboxGuid, OrganizationId organizationId, ISplitOperationState splitOperationState) { Unlimited <ByteQuantifiedSize> actualItemSize = ByteQuantifiedSize.Zero; Collection <PSObject> output = null; Collection <ErrorRecord> errors = null; Dictionary <string, string> paramDictionary = new Dictionary <string, string> { { "Mailbox", mailboxGuid.ToString() }, { "Organization", organizationId.OrganizationalUnit.Name } }; string text = Path.Combine(ExchangeSetupContext.InstallPath, "Scripts"); if (string.IsNullOrEmpty(text)) { throw new SplitProcessorException("PublicFolderSplitHelper::GetActualItemSize - GetExchangeScriptsPath", new Exception("ExchangeScriptsPath is null or empty")); } string scriptFullPath = Path.Combine(text, "Get-PublicFolderMailboxSize.ps1"); PublicFolderSplitHelper.PowerShellExceptionHandler(delegate(out string originOfException, out ErrorRecord error) { error = null; originOfException = "GetActualItemSize - RunPowershellScript Get-PublicFolderMailboxSize.ps1"; IAssistantRunspaceProxy assistantRunspaceProxy = powershellFactory.CreateRunspaceForDatacenterAdmin(organizationId); output = assistantRunspaceProxy.RunPowershellScript(scriptFullPath, paramDictionary, out errors, logger); if (errors == null && output != null && output.Count > 0) { actualItemSize = (ByteQuantifiedSize)output[0].BaseObject; return; } error = errors[0]; }, splitOperationState); return(actualItemSize); }
// Token: 0x06000F15 RID: 3861 RVA: 0x00059E04 File Offset: 0x00058004 public static Unlimited <ByteQuantifiedSize> GetTotalItemSize(IPublicFolderMailboxLoggerBase logger, IAssistantRunspaceFactory powershellFactory, Guid mailboxGuid, OrganizationId organizationId, ISplitOperationState splitOperationState) { Unlimited <ByteQuantifiedSize> totalItemSize = ByteQuantifiedSize.Zero; string value = string.Format("{0}\\{1}", organizationId.OrganizationalUnit.Name, mailboxGuid.ToString()); PSCommand cmd = new PSCommand(); cmd.AddCommand("Get-MailboxStatistics"); cmd.AddParameter("NoADLookup"); cmd.AddParameter("Identity", value); MailboxStatistics publicFolderMailboxStatistics = null; PublicFolderSplitHelper.PowerShellExceptionHandler(delegate(out string originOfException, out ErrorRecord error) { error = null; originOfException = "GetTotalItemSize - RunPSCommand Get-MailboxStatistics"; IAssistantRunspaceProxy assistantRunspaceProxy = powershellFactory.CreateRunspaceForDatacenterAdmin(organizationId); publicFolderMailboxStatistics = assistantRunspaceProxy.RunPSCommand <MailboxStatistics>(cmd, out error, logger); if (error == null && publicFolderMailboxStatistics != null) { totalItemSize = publicFolderMailboxStatistics.TotalItemSize; } }, splitOperationState); return(totalItemSize); }
// Token: 0x06000F1C RID: 3868 RVA: 0x0005A544 File Offset: 0x00058744 public static void PowerShellExceptionHandler(PublicFolderSplitHelper.PowerShellMethod method, ISplitOperationState splitOperationState) { if (splitOperationState == null) { PublicFolderSplitHelper.PowerShellExceptionHandler(method); return; } ErrorRecord errorRecord = null; string errorDetails = null; try { method(out errorDetails, out errorRecord); } catch (ParameterBindingException error) { splitOperationState.Error = error; splitOperationState.ErrorDetails = errorDetails; } catch (CmdletInvocationException error2) { splitOperationState.Error = error2; splitOperationState.ErrorDetails = errorDetails; } if (errorRecord != null) { splitOperationState.Error = errorRecord.Exception; splitOperationState.ErrorDetails = errorDetails; } }
// Token: 0x06000F19 RID: 3865 RVA: 0x0005A248 File Offset: 0x00058448 public static void SyncAndWaitForCompletion(Guid mailboxGuid, OrganizationId organizationId, IXSOFactory xsoFactory, IPublicFolderMailboxLoggerBase logger, ISplitOperationState splitOperationState) { ExchangePrincipal contentMailboxPrincipal; if (!PublicFolderSession.TryGetPublicFolderMailboxPrincipal(organizationId, mailboxGuid, false, out contentMailboxPrincipal)) { throw new ObjectNotFoundException(ServerStrings.PublicFolderMailboxNotFound); } PublicFolderSyncJobState publicFolderSyncJobState = PublicFolderSyncJobRpc.StartSyncHierarchy(contentMailboxPrincipal, true); int num = 0; while (publicFolderSyncJobState.JobStatus != PublicFolderSyncJobState.Status.Completed && publicFolderSyncJobState.LastError == null && (double)num++ < PublicFolderSplitConfig.Instance.TimeoutForSynchronousOperation.TotalMilliseconds / PublicFolderSplitConfig.Instance.QuerySyncStatusInterval.TotalMilliseconds) { Thread.Sleep(PublicFolderSplitConfig.Instance.QuerySyncStatusInterval.Milliseconds); publicFolderSyncJobState = PublicFolderSyncJobRpc.QueryStatusSyncHierarchy(contentMailboxPrincipal); } bool flag; if (publicFolderSyncJobState.JobStatus != PublicFolderSyncJobState.Status.Completed || PublicFolderSplitHelper.IsSyncRequired(mailboxGuid, organizationId, out flag, xsoFactory, logger)) { splitOperationState.Error = new SyncInProgressException(organizationId.OrganizationalUnit.Name, mailboxGuid.ToString()); return; } if (PublicFolderSplitHelper.HasSyncFailure(publicFolderSyncJobState)) { splitOperationState.Error = publicFolderSyncJobState.LastError; } }