// Token: 0x06001023 RID: 4131 RVA: 0x0005E840 File Offset: 0x0005CA40 private void FinalizeTask(DirectoryProcessorBaseTask task, DirectoryProcessorBaseTaskContext taskContext) { try { task.FinalizeMe(taskContext); Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "Task {0} is finalized. ", new object[] { task.ClassName }); } catch (Exception e) { this.LogException(task.RunData, e, task, taskContext); } }
// Token: 0x06001008 RID: 4104 RVA: 0x0005D9CC File Offset: 0x0005BBCC protected override DirectoryProcessorBaseTaskContext DoChunkWork(DirectoryProcessorBaseTaskContext context, RecipientType recipientType) { try { if (!(context is ADCrawlerTaskContext)) { ADCrawlerTaskContext adcrawlerTaskContext = new ADCrawlerTaskContext(context.MailboxData, context.Job, context.TaskQueue, context.Step, context.TaskStatus, context.RunData, context.DeferredFinalizeTasks); this.Initialize(recipientType); base.Logger.TraceDebug(this, "First time ADCrawler.DoChunkWork is called. ", new object[0]); } this.DownloadRecipients(base.RunData.RunFolderPath); } catch (Exception obj) { UmGlobals.ExEvent.LogEvent(UMEventLogConstants.Tuple_CopyADToFileFailed, null, new object[] { this.ADEntriesFileName, base.TenantId, base.RunId, CommonUtil.ToEventLogString(obj) }); if (recipientType != RecipientType.User) { if (recipientType == RecipientType.Group) { context.TaskStatus |= TaskStatus.DLADCrawlerFailed; } else { ExAssert.RetailAssert(false, "Unsupported type. "); } } else { context.TaskStatus |= TaskStatus.UserADCrawlerFailed; } throw; } if (recipientType == RecipientType.User) { OrgMailboxScaleOutHelper orgMailboxScaleOutHelper = new OrgMailboxScaleOutHelper(base.RunData, base.Logger); orgMailboxScaleOutHelper.CheckScaleRequirements(); } return(null); }
// Token: 0x06000FFE RID: 4094 protected abstract DirectoryProcessorBaseTaskContext DoChunkWork(DirectoryProcessorBaseTaskContext context, RecipientType recipientType);
// Token: 0x06000FFD RID: 4093 RVA: 0x0005D919 File Offset: 0x0005BB19 public DirectoryProcessorBaseTaskContext DoChunk(DirectoryProcessorBaseTaskContext context, RecipientType recipientType) { this.Logger.SetMetadataValues(this, recipientType, string.Empty); return(this.DoChunkWork(context, recipientType)); }
// Token: 0x06000FFC RID: 4092 RVA: 0x0005D917 File Offset: 0x0005BB17 public virtual void FinalizeMe(DirectoryProcessorBaseTaskContext taskContext) { }
// Token: 0x0600101C RID: 4124 RVA: 0x0005E0C8 File Offset: 0x0005C2C8 public override AssistantTaskContext InitialStep(AssistantTaskContext context) { Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "Entering DirectoryProcessorAssistant.InitialStep", new object[0]); DirectoryProcessorMailboxData directoryProcessorMailboxData = context.MailboxData as DirectoryProcessorMailboxData; AssistantTaskContext result; try { Queue <TaskQueueItem> queue = new Queue <TaskQueueItem>(); RunData runData = this.CreateRunData(directoryProcessorMailboxData); GrammarGenerator.CleanUpOldGrammarRuns(runData, DirectoryProcessorAssistant.Tracer); UmGlobals.ExEvent.LogEvent(UMEventLogConstants.Tuple_DirectoryProcessorStarted, null, new object[] { runData.TenantId, runData.MailboxGuid, runData.RunId }); List <DirectoryProcessorBaseTask> generators = this.GetGenerators(runData); List <DirectoryProcessorBaseTask> list = this.FilterGenerators(generators, runData, RecipientType.User); List <DirectoryProcessorBaseTask> list2 = this.FilterGenerators(generators, runData, RecipientType.Group); if (list.Count > 0) { queue.Enqueue(new TaskQueueItem(ADCrawler.Create(runData, RecipientType.User), RecipientType.User)); } foreach (DirectoryProcessorBaseTask task in list) { queue.Enqueue(new TaskQueueItem(task, RecipientType.User)); } if (list2.Count > 0) { queue.Enqueue(new TaskQueueItem(ADCrawler.Create(runData, RecipientType.Group), RecipientType.Group)); } foreach (DirectoryProcessorBaseTask task2 in list2) { queue.Enqueue(new TaskQueueItem(task2, RecipientType.Group)); } DirectoryProcessorBaseTaskContext directoryProcessorBaseTaskContext = new DirectoryProcessorBaseTaskContext(context.MailboxData, context.Job, queue, new AssistantStep(this.DoTask), TaskStatus.NoError, runData, new List <DirectoryProcessorBaseTask>()); result = directoryProcessorBaseTaskContext; } catch (Exception ex) { string tenantIdentifiableDN = RunData.GetTenantIdentifiableDN(directoryProcessorMailboxData.OrgId); Utilities.ErrorTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant.InitialStep, Exception='{0}' for '{1}' in database '{2}'", new object[] { ex, tenantIdentifiableDN, directoryProcessorMailboxData.DatabaseGuid }); UmGlobals.ExEvent.LogEvent(UMEventLogConstants.Tuple_DirectoryProcessorInitialStepEncounteredException, null, new object[] { tenantIdentifiableDN, directoryProcessorMailboxData.DatabaseGuid, CommonUtil.ToEventLogString(ex) }); if (ex is IOException) { throw new SkipException(ex); } throw; } return(result); }
// Token: 0x06001022 RID: 4130 RVA: 0x0005E7AC File Offset: 0x0005C9AC private void LogException(RunData runData, Exception e, DirectoryProcessorBaseTask task, DirectoryProcessorBaseTaskContext taskContext) { Utilities.ErrorTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant.DoTask, Exception='{0}' for Org '{1}' Run '{2}' Task name '{3}' Error message '{4}'", new object[] { e, runData.OrgId, runData.RunId, task.ClassName, e.Message }); UmGlobals.ExEvent.LogEvent(UMEventLogConstants.Tuple_DirectoryProcessorTaskThrewException, null, new object[] { runData.TenantId, runData.RunId, task.ClassName, CommonUtil.ToEventLogString(e) }); }
// Token: 0x0600101D RID: 4125 RVA: 0x0005E330 File Offset: 0x0005C530 public AssistantTaskContext DoTask(AssistantTaskContext context) { DirectoryProcessorBaseTaskContext directoryProcessorBaseTaskContext = context as DirectoryProcessorBaseTaskContext; ExAssert.RetailAssert(null != directoryProcessorBaseTaskContext, "Check InitialStep that it returns DirectoryProcessorBaseTaskContext. "); ExAssert.RetailAssert(null != directoryProcessorBaseTaskContext.TaskQueue, "Check InitialStep that it assigns TaskQueue to DirectoryProcessorBaseTaskContext. "); Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "Entering DirectoryProcessorAssistant.DoTask. taskContext='{0}' taskQueue size='{1}'", new object[] { directoryProcessorBaseTaskContext.ClassName, directoryProcessorBaseTaskContext.TaskQueue.Count }); if (directoryProcessorBaseTaskContext.TaskQueue.Count > 0) { TaskQueueItem taskQueueItem = directoryProcessorBaseTaskContext.TaskQueue.Peek(); ExAssert.RetailAssert(null != taskQueueItem, "Should not have added null taskQueueItem into queue. Check enqueue logic. "); ExAssert.RetailAssert(null != taskQueueItem.Task, "Should not have added null task into queue. Check enqueue logic. "); ExAssert.RetailAssert(taskQueueItem.Task.RunData == directoryProcessorBaseTaskContext.RunData, "They should reference to same RunData object. Check DirectoryProcessorAssistant.InitialStep. "); AssistantTaskContext assistantTaskContext = null; try { Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant.DoTask calls Task.DoChunkWork Task='{0}' TaskRecipientType='{1}'", new object[] { taskQueueItem.Task.ClassName, taskQueueItem.TaskRecipientType.ToString() }); assistantTaskContext = taskQueueItem.Task.DoChunk(directoryProcessorBaseTaskContext, taskQueueItem.TaskRecipientType); } catch (Exception e) { this.LogException(taskQueueItem.Task.RunData, e, taskQueueItem.Task, directoryProcessorBaseTaskContext); if (taskQueueItem.Task.ShouldWatson(e)) { throw; } assistantTaskContext = null; } if (assistantTaskContext == null) { Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant.DoTask Task='{0}' TaskRecipientType='{1}' is done. ", new object[] { taskQueueItem.Task.ClassName, taskQueueItem.TaskRecipientType.ToString() }); if (taskQueueItem.Task.ShouldDeferFinalize) { if (!directoryProcessorBaseTaskContext.DeferredFinalizeTasks.Contains(taskQueueItem.Task)) { directoryProcessorBaseTaskContext.DeferredFinalizeTasks.Add(taskQueueItem.Task); Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "Task {0} TaskRecipientType='{1}' is added to deferred finalize list. ", new object[] { taskQueueItem.Task.ClassName, taskQueueItem.TaskRecipientType.ToString() }); } } else { this.FinalizeTask(taskQueueItem.Task, directoryProcessorBaseTaskContext); } directoryProcessorBaseTaskContext.TaskQueue.Dequeue(); assistantTaskContext = new DirectoryProcessorBaseTaskContext(directoryProcessorBaseTaskContext.MailboxData, directoryProcessorBaseTaskContext.Job, directoryProcessorBaseTaskContext.TaskQueue, directoryProcessorBaseTaskContext.Step, directoryProcessorBaseTaskContext.TaskStatus, directoryProcessorBaseTaskContext.RunData, directoryProcessorBaseTaskContext.DeferredFinalizeTasks); } return(assistantTaskContext); } Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant has {0} deferred finalize tasks. Finalize them. ", new object[] { directoryProcessorBaseTaskContext.DeferredFinalizeTasks.Count }); foreach (DirectoryProcessorBaseTask task in directoryProcessorBaseTaskContext.DeferredFinalizeTasks) { this.FinalizeTask(task, directoryProcessorBaseTaskContext); } directoryProcessorBaseTaskContext.DeferredFinalizeTasks.Clear(); Utilities.DebugTrace(DirectoryProcessorAssistant.Tracer, "DirectoryProcessorAssistant has done all tasks. ", new object[0]); UmGlobals.ExEvent.LogEvent(UMEventLogConstants.Tuple_DirectoryProcessorCompleted, null, new object[] { directoryProcessorBaseTaskContext.RunData.TenantId, directoryProcessorBaseTaskContext.RunData.MailboxGuid, directoryProcessorBaseTaskContext.RunData.RunId }); return(null); }