// 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);
     }
 }
示例#2
0
 // 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);
 }
示例#3
0
 // Token: 0x06000FFE RID: 4094
 protected abstract DirectoryProcessorBaseTaskContext DoChunkWork(DirectoryProcessorBaseTaskContext context, RecipientType recipientType);
示例#4
0
 // 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));
 }
示例#5
0
 // 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);
        }