// Token: 0x06000538 RID: 1336 RVA: 0x00027650 File Offset: 0x00025850 public void MoveToArchive(TagExpirationExecutor.ItemSet itemSet, ElcSubAssistant assistant, FolderArchiver folderArchiver, int totalFailuresSoFar, ref List <Exception> allExceptionsSoFar, out List <string> foldersWithErrors, out int newMoveErrorsTotal) { if (this.PrimaryEwsClient == null) { throw new ElcEwsException(ElcEwsErrorType.PrimaryExchangeWebServiceNotAvailable, "Primary EWS url is unknown."); } foldersWithErrors = new List <string>(); newMoveErrorsTotal = 0; if (this.IsCrossPremise && this.moveToArchiveTotalCount > this.MoveToArchiveTotalCountLimit) { RemoteArchiveProcessorBase.Tracer.TraceDebug <RemoteArchiveProcessorBase>((long)this.GetHashCode(), "{0}: Move to archive total count limit reached. No more item is moved to the archive mailbox during this run.", this); return; } using (Folder folder = Folder.Bind(this.primaryMailboxSession, itemSet.FolderId)) { FolderTupleRemoteArchive folderTupleRemoteArchive = folderArchiver.GetArchiveFolderTuple(itemSet.FolderId) as FolderTupleRemoteArchive; if (folderTupleRemoteArchive != null) { RemoteArchiveProcessorBase.Tracer.TraceDebug <RemoteArchiveProcessorBase, string, string>((long)this.GetHashCode(), "{0}: Was able to open target folder {1} in the archive, corresponding to source folder {2}. Will proceed to move in batches.", this, folderTupleRemoteArchive.DisplayName, folder.DisplayName); this.MoveItemsInBatches(itemSet.Items, folder, folderTupleRemoteArchive.Folder, ExpirationExecutor.Action.MoveToArchive, totalFailuresSoFar, ref allExceptionsSoFar, out foldersWithErrors, out newMoveErrorsTotal); } else { RemoteArchiveProcessorBase.Tracer.TraceWarning <RemoteArchiveProcessorBase, string>((long)this.GetHashCode(), "{0}: Unable to get target folder in the archive corresponding to source folder {1}. Will not move anything to it.", this, folder.DisplayName); } } }
// Token: 0x0600050D RID: 1293 RVA: 0x00025F00 File Offset: 0x00024100 public void MoveToArchive(TagExpirationExecutor.ItemSet itemSet, ElcSubAssistant assistant, FolderArchiver folderArchiver, int totalFailuresSoFar, ref List <Exception> allExceptionsSoFar, out List <string> foldersWithErrors, out int newMoveErrorsTotal) { if (itemSet == null) { throw new ArgumentNullException("itemSet"); } if (assistant == null) { throw new ArgumentNullException("assistant"); } if (folderArchiver == null) { throw new ArgumentNullException("folderArchiver"); } foldersWithErrors = new List <string>(); newMoveErrorsTotal = 0; if (this.archiveMailboxSession == null) { LocalArchiveProcessor.Tracer.TraceWarning <LocalArchiveProcessor>((long)this.GetHashCode(), "{0}: Could not open archive session for this mailbox", this); return; } assistant.EnableLoadTrackingOnSession(this.archiveMailboxSession); using (Folder folder = Folder.Bind(this.primaryMailboxSession, itemSet.FolderId)) { if (folder != null) { FolderTuple archiveFolderTuple = folderArchiver.GetArchiveFolderTuple(folder.Id.ObjectId); if (archiveFolderTuple != null) { using (Folder folder2 = Folder.Bind(this.archiveMailboxSession, archiveFolderTuple.FolderId)) { if (folder2 != null) { LocalArchiveProcessor.Tracer.TraceDebug <LocalArchiveProcessor, string, string>((long)this.GetHashCode(), "{0}: Was able to open target folder {1} in the archive, corresponding to source folder {2}. Will proceed to move in batches.", this, folder2.DisplayName, folder.DisplayName); this.ExpireInBatches(itemSet.Items, folder, folder2, assistant, ExpirationExecutor.Action.MoveToArchive, totalFailuresSoFar, ref allExceptionsSoFar, out foldersWithErrors, out newMoveErrorsTotal); } else { LocalArchiveProcessor.Tracer.TraceWarning <LocalArchiveProcessor, string>((long)this.GetHashCode(), "{0}: Unable to open target folder in the archive corresponding to source folder {1}. Will not move anything to it (obviously).", this, folder.DisplayName); } goto IL_14B; } } LocalArchiveProcessor.Tracer.TraceWarning <LocalArchiveProcessor, string>((long)this.GetHashCode(), "{0}: Unable to get target folder in the archive corresponding to source folder {1}. Will not move anything to it (obviously).", this, folder.DisplayName); } else { LocalArchiveProcessor.Tracer.TraceWarning <LocalArchiveProcessor, string>((long)this.GetHashCode(), "{0}: Unable to open source folder {1}. Will not move anything from it (obviously).", this, itemSet.FolderId.ToHexEntryId()); } IL_14B :; } }
// Token: 0x0600051E RID: 1310 RVA: 0x000269B4 File Offset: 0x00024BB4 public void MoveToArchive(TagExpirationExecutor.ItemSet itemSet, ElcSubAssistant assistant, FolderArchiver folderArchiver, int totalFailuresSoFar, ref List <Exception> allExceptionsSoFar, out List <string> foldersWithErrors, out int newMoveErrorsTotal) { foldersWithErrors = new List <string>(); newMoveErrorsTotal = 0; using (Folder folder = Folder.Bind(this.primaryMailboxSession, itemSet.FolderId)) { FolderTupleCrossServerArchive folderTupleCrossServerArchive = folderArchiver.GetArchiveFolderTuple(itemSet.FolderId) as FolderTupleCrossServerArchive; if (folderTupleCrossServerArchive != null) { RemoteArchiveProcessor.Tracer.TraceDebug <RemoteArchiveProcessor, string, string>((long)this.GetHashCode(), "{0}: Was able to open target folder {1} in the archive, corresponding to source folder {2}. Will proceed to move in batches.", this, folderTupleCrossServerArchive.DisplayName, folder.DisplayName); this.MoveItemsInBatches(itemSet.Items, folder, folderTupleCrossServerArchive.Folder, assistant, ExpirationExecutor.Action.MoveToArchive, totalFailuresSoFar, ref allExceptionsSoFar, out foldersWithErrors, out newMoveErrorsTotal); } else { RemoteArchiveProcessor.Tracer.TraceWarning <RemoteArchiveProcessor, string>((long)this.GetHashCode(), "{0}: Unable to open target folder in the archive corresponding to source folder {1}. Will not move anything to it (obviously).", this, folder.DisplayName); } } }
// Token: 0x060001AA RID: 426 RVA: 0x0000C088 File Offset: 0x0000A288 internal ExpirationExecutor(MailboxData mailboxData, ElcSubAssistant elcAssistant, Trace tracer) { this.MailboxData = mailboxData; this.ElcAssistant = elcAssistant; this.tracer = tracer; this.isReportEnabled = false; this.SoftDeleteList = new List <ItemData>(); this.HardDeleteList = new List <ItemData>(); this.HardDeleteNoCalLoggingList = new List <ItemData>(); this.MoveToArchiveList = new List <ItemData>(); this.MoveToArchiveDumpsterList = new Dictionary <DefaultFolderType, List <ItemData> >(); this.MoveToPurgesList = new List <ItemData>(); this.MoveToPurgesNoCalLoggingList = new List <ItemData>(); this.MoveToDiscoveryHoldsList = new List <ItemData>(); this.MoveToDiscoveryHoldsNoCalLoggingList = new List <ItemData>(); this.MoveToMigratedMessagesList = new List <ItemData>(); this.ELCReport = new Dictionary <RetentionActionType, List <List <object> > >(); this.elcReportOverflow = false; this.separationIndices = new Dictionary <RetentionActionType, int>(); this.separationIndices.Add(RetentionActionType.DeleteAndAllowRecovery, 0); this.separationIndices.Add(RetentionActionType.PermanentlyDelete, 0); this.separationIndices.Add(RetentionActionType.MoveToArchive, 0); }
// Token: 0x06000527 RID: 1319 RVA: 0x0002701C File Offset: 0x0002521C private void MoveItemsInBatches(List <ItemData> listToSend, Folder sourceFolder, Folder targetFolder, ElcSubAssistant elcSubAssistant, ExpirationExecutor.Action retentionActionType, int totalFailuresSoFar, ref List <Exception> allExceptionsSoFar, out List <string> foldersWithErrors, out int newMoveErrorsTotal) { int count = listToSend.Count; int num = 0; int i = 0; long num2 = 0L; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; bool flag = false; Exception ex = null; ItemData[] sourceArray = listToSend.ToArray(); foldersWithErrors = new List <string>(); newMoveErrorsTotal = 0; try { while (i < count) { int num7 = (count - i >= 100) ? 100 : (count - i); List <ItemId> list; List <VersionedId> list2; bool flag2; int num8; Dictionary <ItemData.EnforcerType, int> dictionary; num2 += (long)this.CopyIdsToTmpArray(sourceArray, i, num7, this.MaxMessageSizeInArchive, out list, out list2, out flag2, out num8, out dictionary); num5 += num8; int count2 = list.Count; if (flag2) { foldersWithErrors.Add(sourceFolder.DisplayName); RemoteArchiveProcessor.Tracer.TraceDebug <RemoteArchiveProcessor, string>((long)this.GetHashCode(), "{0}: Added folder {1} to the list of bad folders to be event logged.", this, sourceFolder.DisplayName); } if (count2 > 0) { ex = null; flag = this.EwsDataProvider.MoveItems(list, targetFolder.Id, out ex); if (flag) { RemoteArchiveProcessor.Tracer.TraceDebug <RemoteArchiveProcessor, int>((long)this.GetHashCode(), "{0}: Moved to archive batch of {1} items.", this, count2); } } else { RemoteArchiveProcessor.Tracer.TraceDebug <RemoteArchiveProcessor>((long)this.GetHashCode(), "{0}: The tmpList was empty during this loop. Nothing to send, don't do anything.", this); } i += num7; num += count2; if (!flag) { RemoteArchiveProcessor.Tracer.TraceError((long)this.GetHashCode(), "{0}: An error occured when trying to expire a batch of {1} items. Expiration action is {2}. Result: {3}", new object[] { this, count2, retentionActionType.ToString(), ex }); Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_ExpirationOfCurrentBatchFailed, null, new object[] { this.primaryMailboxSession.MailboxOwner, retentionActionType.ToString(), (sourceFolder == null) ? string.Empty : sourceFolder.DisplayName, (targetFolder == null) ? string.Empty : targetFolder.DisplayName, (sourceFolder == null) ? string.Empty : sourceFolder.Id.ObjectId.ToHexEntryId(), (targetFolder == null) ? string.Empty : targetFolder.Id.ToString(), (ex == null) ? string.Empty : ex.ToString() }); newMoveErrorsTotal++; num6++; if (ex != null) { allExceptionsSoFar.Add(ex); } if (totalFailuresSoFar + newMoveErrorsTotal > MailboxData.MaxErrorsAllowed) { throw new TransientMailboxException(Strings.descELCEnforcerTooManyErrors(this.primaryMailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString(), MailboxData.MaxErrorsAllowed), new AggregateException(allExceptionsSoFar), null); } } else { num3 += (dictionary.ContainsKey(ItemData.EnforcerType.DumpsterExpirationEnforcer) ? dictionary[ItemData.EnforcerType.DumpsterExpirationEnforcer] : 0); num4 += (dictionary.ContainsKey(ItemData.EnforcerType.ExpirationTagEnforcer) ? dictionary[ItemData.EnforcerType.ExpirationTagEnforcer] : 0); } } } finally { ELCPerfmon.TotalItemsExpired.IncrementBy((long)num); ELCPerfmon.TotalSizeItemsExpired.IncrementBy(num2); ELCPerfmon.TotalItemsMoved.IncrementBy((long)num); ELCPerfmon.TotalSizeItemsMoved.IncrementBy(num2); if (this.statisticsLogEntry != null) { this.statisticsLogEntry.NumberOfItemsActuallyArchivedByDumpsterExpirationEnforcer += (long)num3; this.statisticsLogEntry.NumberOfItemsActuallyArchivedByTag += (long)num4; this.statisticsLogEntry.NumberOfItemsSkippedDueToSizeRestrictionInArchiveProcessor += (long)num5; this.statisticsLogEntry.NumberOfBatchesFailedToMoveInArchiveProcessor += (long)num6; } } }
// Token: 0x0600051F RID: 1311 RVA: 0x00026A70 File Offset: 0x00024C70 public void MoveToArchiveDumpster(DefaultFolderType folderType, List <ItemData> itemsToMove, ElcSubAssistant assistant, FolderArchiver folderArchiver, int totalFailuresSoFar, ref List <Exception> allExceptionsSoFar, out List <string> foldersWithErrors, out int newMoveErrorsTotal) { foldersWithErrors = new List <string>(); newMoveErrorsTotal = 0; using (Folder folder = Folder.Bind(this.primaryMailboxSession, folderType)) { WellKnownFolderName folderName; if (this.archiveEwsDumpsterFolderMapping.TryGetValue(folderType, out folderName)) { Exception ex; Folder defaultFolder = this.EwsDataProvider.GetDefaultFolder(folderName, out ex); if (defaultFolder != null && ex == null) { RemoteArchiveProcessor.Tracer.TraceDebug <RemoteArchiveProcessor, string, string>((long)this.GetHashCode(), "{0}: Was able to open target folder {1} in the archive, corresponding to source folder {2}. Will proceed to move in batches.", this, defaultFolder.DisplayName, folder.DisplayName); this.MoveItemsInBatches(itemsToMove, folder, defaultFolder, assistant, ExpirationExecutor.Action.MoveToArchiveDumpster, totalFailuresSoFar, ref allExceptionsSoFar, out foldersWithErrors, out newMoveErrorsTotal); } else { RemoteArchiveProcessor.Tracer.TraceWarning <RemoteArchiveProcessor, string, string>((long)this.GetHashCode(), "{0}: Unable to open target folder in the archive corresponding to source folder {1}. Will not move anything to it (obviously). Exception : {2}", this, folder.DisplayName, (ex == null) ? string.Empty : ex.ToString()); } } } }
// Token: 0x06000539 RID: 1337 RVA: 0x0002774C File Offset: 0x0002594C public void MoveToArchiveDumpster(DefaultFolderType folderType, List <ItemData> itemsToMove, ElcSubAssistant assistant, FolderArchiver folderArchiver, int totalFailuresSoFar, ref List <Exception> allExceptionsSoFar, out List <string> foldersWithErrors, out int newMoveErrorsTotal) { if (this.PrimaryEwsClient == null) { throw new ElcEwsException(ElcEwsErrorType.PrimaryExchangeWebServiceNotAvailable, "Primary EWS url is unknown."); } foldersWithErrors = new List <string>(); newMoveErrorsTotal = 0; if (this.IsCrossPremise && this.moveToArchiveTotalCount > this.MoveToArchiveTotalCountLimit) { RemoteArchiveProcessorBase.Tracer.TraceDebug <RemoteArchiveProcessorBase>((long)this.GetHashCode(), "{0}: Move to archive total count limit reached. No more item is moved to the archive mailbox during this run.", this); return; } using (Folder folder = Folder.Bind(this.primaryMailboxSession, folderType)) { DistinguishedFolderIdNameType id; if (RemoteArchiveProcessorBase.ArchiveEwsDumpsterFolderMapping.TryGetValue(folderType, out id)) { BaseFolderType baseFolderType = null; Exception ex = null; try { baseFolderType = this.ArchiveEwsClient.GetFolderById(new DistinguishedFolderIdType { Id = id }, this.FolderAllProperties.ToArray()); } catch (ElcEwsException ex2) { ex = ex2; } if (baseFolderType != null && ex == null) { RemoteArchiveProcessorBase.Tracer.TraceDebug <RemoteArchiveProcessorBase, string, string>((long)this.GetHashCode(), "{0}: Was able to open target folder {1} in the archive, corresponding to source folder {2}. Will proceed to move in batches.", this, baseFolderType.DisplayName, folder.DisplayName); this.MoveItemsInBatches(itemsToMove, folder, baseFolderType, ExpirationExecutor.Action.MoveToArchiveDumpster, totalFailuresSoFar, ref allExceptionsSoFar, out foldersWithErrors, out newMoveErrorsTotal); } else { RemoteArchiveProcessorBase.Tracer.TraceWarning <RemoteArchiveProcessorBase, string, string>((long)this.GetHashCode(), "{0}: Unable to get target folder in the archive corresponding to source folder {1}. Will not move anything to it. Exception : {2}", this, folder.DisplayName, (ex == null) ? string.Empty : ex.ToString()); } } else { RemoteArchiveProcessorBase.Tracer.TraceDebug <RemoteArchiveProcessorBase, DefaultFolderType>((long)this.GetHashCode(), "{0}: Unable to find the corresponding archive dumpster folder for foler type {1}. Will not move anything to it.", this, folderType); } } }
// Token: 0x060002E6 RID: 742 RVA: 0x000120AC File Offset: 0x000102AC internal ItemUpdater(MailboxDataForFolders mailboxData, ProvisionedFolder provisionedFolder, ElcSubAssistant elcAssistant) { this.mailboxData = mailboxData; this.provisionedFolder = provisionedFolder; this.elcAssistant = elcAssistant; this.mailboxOwner = mailboxData.MailboxSession.MailboxOwner; }
// Token: 0x0600038A RID: 906 RVA: 0x00018AAB File Offset: 0x00016CAB internal TagExpirationExecutor(MailboxData mailboxData, ElcSubAssistant elcAssistant) : base(mailboxData, elcAssistant, TagExpirationExecutor.Tracer) { ExpirationExecutor.TracerPfd.TracePfd <int, TagExpirationExecutor>((long)this.GetHashCode(), "PFD IWE {0} {1} called", 30999, this); }
// Token: 0x0600050E RID: 1294 RVA: 0x00026080 File Offset: 0x00024280 private void ExpireInBatches(List <ItemData> listToSend, Folder sourceFolder, Folder targetFolder, ElcSubAssistant elcSubAssistant, ExpirationExecutor.Action retentionActionType, int totalFailuresSoFar, ref List <Exception> allExceptionsSoFar, out List <string> foldersWithErrors, out int newMoveErrorsTotal) { int count = listToSend.Count; int num = 0; int i = 0; int num2 = 0; int num3 = 0; long num4 = 0L; int num5 = 0; int num6 = 0; int num7 = 0; int num8 = 0; OperationResult operationResult = OperationResult.Succeeded; Exception ex = null; ItemData[] sourceArray = listToSend.ToArray(); foldersWithErrors = new List <string>(); newMoveErrorsTotal = 0; try { while (i < count) { elcSubAssistant.ThrottleStoreCallAndCheckForShutdown(this.archiveMailboxSession.MailboxOwner, ELCHealthMonitor.GetArchiveResourceHealthMonitorKeys(this.archiveMailboxSession, this.primaryMailboxSession)); num2 = ((count - i >= 100) ? 100 : (count - i)); List <VersionedId> list; bool flag; int num9; Dictionary <ItemData.EnforcerType, int> dictionary; num4 += (long)LocalArchiveProcessor.CopyIdsToTmpArray(sourceArray, i, num2, this.MaxMessageSizeInArchive, out list, out flag, out num9, out dictionary); num7 += num9; num3 = list.Count; if (flag) { foldersWithErrors.Add(sourceFolder.DisplayName); LocalArchiveProcessor.Tracer.TraceDebug <LocalArchiveProcessor, string>((long)this.GetHashCode(), "{0}: Added folder {1} to the list of bad folders to be event logged.", this, sourceFolder.DisplayName); } if (num3 > 0) { GroupOperationResult groupOperationResult = sourceFolder.CopyItems(this.archiveMailboxSession, targetFolder.Id, list.ToArray()); if (groupOperationResult.OperationResult == OperationResult.Succeeded) { LocalArchiveProcessor.Tracer.TraceDebug <LocalArchiveProcessor, int>((long)this.GetHashCode(), "{0}: Copied to archive batch of {1} items. Will proceed to hard delete the batch.", this, num3); try { this.primaryMailboxSession.COWSettings.TemporaryDisableHold = true; AggregateOperationResult aggregateOperationResult = this.primaryMailboxSession.Delete(DeleteItemFlags.HardDelete | DeleteItemFlags.SuppressReadReceipt, list.ToArray()); operationResult = aggregateOperationResult.OperationResult; ex = ElcExceptionHelper.ExtractExceptionsFromAggregateOperationResult(aggregateOperationResult); goto IL_18E; } finally { this.primaryMailboxSession.COWSettings.TemporaryDisableHold = false; } } operationResult = groupOperationResult.OperationResult; ex = groupOperationResult.Exception; } else { LocalArchiveProcessor.Tracer.TraceDebug <LocalArchiveProcessor>((long)this.GetHashCode(), "{0}: The tmpList was empty during this loop. Nothing to send, don't do anything.", this); } IL_18E: i += num2; num += num3; if (operationResult == OperationResult.Failed || operationResult == OperationResult.PartiallySucceeded) { LocalArchiveProcessor.Tracer.TraceError((long)this.GetHashCode(), "{0}: An error occured when trying to expire a batch of {1} items. Expiration action is {2}. Result: {3}", new object[] { this, num3, retentionActionType.ToString(), operationResult }); Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_ExpirationOfCurrentBatchFailed, null, new object[] { this.primaryMailboxSession.MailboxOwner, retentionActionType.ToString(), (sourceFolder == null) ? string.Empty : sourceFolder.DisplayName, (targetFolder == null) ? string.Empty : targetFolder.DisplayName, (sourceFolder == null) ? string.Empty : sourceFolder.Id.ObjectId.ToHexEntryId(), (targetFolder == null) ? string.Empty : targetFolder.Id.ObjectId.ToHexEntryId(), (ex == null) ? string.Empty : ex.ToString() }); newMoveErrorsTotal++; num8++; if (ex != null) { allExceptionsSoFar.Add(ex); } if (totalFailuresSoFar + newMoveErrorsTotal > MailboxData.MaxErrorsAllowed) { throw new TransientMailboxException(Strings.descELCEnforcerTooManyErrors(this.primaryMailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString(), MailboxData.MaxErrorsAllowed), new AggregateException(allExceptionsSoFar), null); } } else { num5 += (dictionary.ContainsKey(ItemData.EnforcerType.DumpsterExpirationEnforcer) ? dictionary[ItemData.EnforcerType.DumpsterExpirationEnforcer] : 0); num6 += (dictionary.ContainsKey(ItemData.EnforcerType.ExpirationTagEnforcer) ? dictionary[ItemData.EnforcerType.ExpirationTagEnforcer] : 0); } } } finally { ELCPerfmon.TotalItemsExpired.IncrementBy((long)num); ELCPerfmon.TotalSizeItemsExpired.IncrementBy(num4); ELCPerfmon.TotalItemsMoved.IncrementBy((long)num); ELCPerfmon.TotalSizeItemsMoved.IncrementBy(num4); if (this.statisticsLogEntry != null) { this.statisticsLogEntry.NumberOfItemsActuallyArchivedByDumpsterExpirationEnforcer += (long)num5; this.statisticsLogEntry.NumberOfItemsActuallyArchivedByTag += (long)num6; this.statisticsLogEntry.NumberOfItemsSkippedDueToSizeRestrictionInArchiveProcessor += (long)num7; this.statisticsLogEntry.NumberOfBatchesFailedToMoveInArchiveProcessor += (long)num8; } } }
// Token: 0x0600050C RID: 1292 RVA: 0x00025DFC File Offset: 0x00023FFC public void MoveToArchiveDumpster(DefaultFolderType folderType, List <ItemData> itemsToMove, ElcSubAssistant assistant, FolderArchiver folderArchiver, int totalFailuresSoFar, ref List <Exception> allExceptionsSoFar, out List <string> foldersWithErrors, out int newMoveErrorsTotal) { foldersWithErrors = new List <string>(); newMoveErrorsTotal = 0; if (this.archiveMailboxSession == null) { LocalArchiveProcessor.Tracer.TraceWarning <LocalArchiveProcessor>((long)this.GetHashCode(), "{0}: Could not open archive session for this mailbox", this); return; } assistant.EnableLoadTrackingOnSession(this.archiveMailboxSession); try { using (Folder folder = Folder.Bind(this.primaryMailboxSession, folderType)) { using (Folder folder2 = Folder.Bind(this.archiveMailboxSession, folderType)) { if (folder2 != null) { LocalArchiveProcessor.Tracer.TraceDebug <LocalArchiveProcessor, DefaultFolderType>((long)this.GetHashCode(), "{0}: Was able to open target folder in the archive dumpster of type {1}. Will proceed to move in batches.", this, folderType); this.ExpireInBatches(itemsToMove, folder, folder2, assistant, ExpirationExecutor.Action.MoveToArchiveDumpster, totalFailuresSoFar, ref allExceptionsSoFar, out foldersWithErrors, out newMoveErrorsTotal); } else { LocalArchiveProcessor.Tracer.TraceWarning <LocalArchiveProcessor, DefaultFolderType>((long)this.GetHashCode(), "{0}: Unable to open target folder in the archive dumpster of type {1}. Will not move anything to it (obviously).", this, folderType); } } } } catch (ObjectNotFoundException arg) { LocalArchiveProcessor.Tracer.TraceError <LocalArchiveProcessor, ObjectNotFoundException>((long)this.GetHashCode(), "{0}: Dumpster folder does not exist in archive. Skipping move to archive dumpster for this run. Exception: {1}", this, arg); } }