Пример #1
0
        // Token: 0x06000053 RID: 83 RVA: 0x00003598 File Offset: 0x00001798
        protected override Task ReceiveMessageInternal(ComplianceMessage message)
        {
            TaskScheduler   @default = TaskScheduler.Default;
            FaultDefinition faultDefinition;

            Registry.Instance.TryGetInstance <TaskScheduler>(RegistryComponent.TaskDistribution, TaskDistributionComponent.ResourceScheduler, out @default, out faultDefinition, "ReceiveMessageInternal", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Dataflow\\WorkReceiver.cs", 77);
            TransformBlock <ComplianceMessage, ComplianceMessage> dataflowBlock = this.workBlock.GetDataflowBlock(new ExecutionDataflowBlockOptions
            {
                TaskScheduler          = @default,
                MaxDegreeOfParallelism = -1
            });
            TransformBlock <ComplianceMessage, ComplianceMessage> dataflowBlock2 = this.recordBlock.GetDataflowBlock(null);
            TransformBlock <ComplianceMessage, object>            dataflowBlock3 = this.returnBlock.GetDataflowBlock(null);

            dataflowBlock.LinkTo(dataflowBlock2, BlockBase <ComplianceMessage, ComplianceMessage> .DefaultLinkOptions);
            dataflowBlock2.LinkTo(dataflowBlock3, BlockBase <ComplianceMessage, ComplianceMessage> .DefaultLinkOptions);
            if (DataflowBlock.Post <ComplianceMessage>(dataflowBlock, message))
            {
                dataflowBlock.Complete();
                return(dataflowBlock3.Completion);
            }
            return(null);
        }
        public WorkPayload DoWork(ComplianceMessage target, WorkPayload payload)
        {
            SearchWorkDefinition   searchWorkDefinition;
            FaultDefinition        faultDefinition;
            ISearchResultsProvider searchResultsProvider;

            if (ComplianceSerializer.TryDeserialize <SearchWorkDefinition>(SearchWorkDefinition.Description, payload.WorkDefinition, out searchWorkDefinition, out faultDefinition, "DoWork", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\ApplicationPlugins\\EDiscovery\\SearchApplicationPlugin.cs", 40) && Registry.Instance.TryGetInstance <ISearchResultsProvider>(RegistryComponent.EDiscovery, EDiscoveryComponent.SearchResultProvider, out searchResultsProvider, out faultDefinition, "DoWork", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\ApplicationPlugins\\EDiscovery\\SearchApplicationPlugin.cs", 42))
            {
                SearchResult searchResult = searchResultsProvider.PerformSearch(target, searchWorkDefinition);
                searchResult.PageSize = searchWorkDefinition.DetailCount;
                return(new WorkPayload
                {
                    PayloadId = payload.PayloadId,
                    WorkDefinitionType = WorkDefinitionType.EDiscovery,
                    WorkDefinition = ComplianceSerializer.Serialize <SearchResult>(SearchResult.Description, searchResult)
                });
            }
            if (faultDefinition != null)
            {
                ExceptionHandler.FaultMessage(target, faultDefinition, true);
            }
            return(null);
        }
Пример #3
0
        public void RecordResult(ComplianceMessage message, Func <ResultBase, ResultBase> commitFunction)
        {
            IncomingEntry incomingEntry = this.GetIncomingEntry(message, true);

            incomingEntry.RecordResult(message, commitFunction);
        }
Пример #4
0
 public static bool IsToDriver(ComplianceMessage message)
 {
     return(message.MessageSource != null && message.MessageTarget.TargetType == Target.Type.Driver);
 }
 public WorkPayload Preprocess(ComplianceMessage target, WorkPayload payload)
 {
     return(payload);
 }
 public WorkPayload DoWork(ComplianceMessage target, WorkPayload payload)
 {
     return(payload);
 }
 // Token: 0x0600004B RID: 75
 protected abstract Task <ComplianceMessage> ProcessMessageInternal(ComplianceMessage message);
Пример #8
0
 public void RecordResult(ComplianceMessage message, Func <ResultBase, ResultBase> commitFunction)
 {
     RoutingCache.Instance.RecordResult(message, commitFunction);
 }
Пример #9
0
 public void ProcessedMessage(ComplianceMessage message)
 {
     MessageLogger.Instance.LogMessageProcessed(message);
     RoutingCache.Instance.ProcessedMessage(message);
 }
Пример #10
0
 public void LogMessageDispatched(ComplianceMessage message)
 {
     message.ProtocolContext.DispatchEndTime = new DateTime?(DateTime.UtcNow);
     ProtocolContext.MessageDirection direction = message.ProtocolContext.Direction;
 }
Пример #11
0
        public SearchResult PerformSearch(ComplianceMessage target, SearchWorkDefinition definition)
        {
            string          query  = definition.Query;
            SearchResult    result = new SearchResult();
            CultureInfo     culture;
            FaultDefinition faultDefinition;

            ExceptionHandler.Parser.TryRun(delegate
            {
                if (string.IsNullOrEmpty(target.Culture))
                {
                    culture = CultureInfo.InvariantCulture;
                }
                else
                {
                    culture = CultureInfo.GetCultureInfo(target.Culture);
                }
                AdditionalParameters additionalParameters = new AdditionalParameters
                {
                    Refiners = new string[]
                    {
                        FastIndexSystemSchema.Size.Name
                    }
                };
                if (query != null)
                {
                    Guid mailboxGuid = target.MessageTarget.Mailbox;
                    Guid database    = target.MessageTarget.Database;
                    IEnumerable <KeyValuePair <PagingImsFlowExecutor.QueryExecutionContext, SearchResultItem[]> > pages = null;
                    string flowName = FlowDescriptor.GetImsFlowDescriptor(FastLocalSearchResultsProvider.SearchConfig, FastIndexVersion.GetIndexSystemName(database)).DisplayName;
                    if (ExceptionHandler.Proxy.TryRun(delegate
                    {
                        pages = FastLocalSearchResultsProvider.FlowExecutor.Execute(flowName, mailboxGuid, Guid.NewGuid(), query, 0L, culture, additionalParameters, Math.Min(FastLocalSearchResultsProvider.SearchConfig.FastQueryResultTrimHits, 1), null);
                    }, TimeSpan.FromMinutes(1.0), out faultDefinition, target, new Action <ExceptionHandler.ExceptionData>(this.ProxyExceptionHandler), default(CancellationToken), null, "PerformSearch", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\ApplicationPlugins\\EDiscovery\\FastLocalSearchResultsProvider.cs", 213))
                    {
                        foreach (KeyValuePair <PagingImsFlowExecutor.QueryExecutionContext, SearchResultItem[]> keyValuePair in pages)
                        {
                            PagingImsFlowExecutor.QueryExecutionContext key = keyValuePair.Key;
                            SearchResultItem[] value = keyValuePair.Value;
                            ByteQuantifiedSize byteQuantifiedSize = default(ByteQuantifiedSize);
                            long count = FastLocalSearchResultsProvider.FlowExecutor.ReadHitCount(key);
                            IEnumerable <RefinerResult> source = FastLocalSearchResultsProvider.FlowExecutor.ReadRefiners(key);
                            RefinerResult refinerResult        = source.FirstOrDefault((RefinerResult t) => t.Name == FastIndexSystemSchema.Size.Name);
                            if (refinerResult != null)
                            {
                                byteQuantifiedSize = new ByteQuantifiedSize((ulong)refinerResult.Sum);
                            }
                            result = new SearchResult();
                            result.UpdateTotalSize((long)byteQuantifiedSize.ToMB());
                            result.UpdateTotalCount(count);
                            result.Results.Add(new SearchResult.TargetSearchResult
                            {
                                Target = target.MessageTarget,
                                Size   = result.TotalSize,
                                Count  = result.TotalCount
                            });
                        }
                    }
                }
            }, TimeSpan.FromMinutes(1.0), out faultDefinition, target, null, default(CancellationToken), null, "PerformSearch", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\ApplicationPlugins\\EDiscovery\\FastLocalSearchResultsProvider.cs", 188);
            if (faultDefinition != null)
            {
                ExceptionHandler.FaultMessage(target, faultDefinition, true);
            }
            return(result);
        }
        // Token: 0x0600002C RID: 44 RVA: 0x00003848 File Offset: 0x00001A48
        public virtual bool TryRun(Action code, TimeSpan duration, out FaultDefinition faultDefinition, ComplianceMessage context = null, Action <ExceptionHandler.ExceptionData> exceptionHandler = null, CancellationToken cancelToken = default(CancellationToken), double[] retrySchedule = null, [CallerMemberName] string callerMember = null, [CallerFilePath] string callerFilePath = null, [CallerLineNumber] int callerLineNumber = 0)
        {
            bool result2;

            try
            {
                if (retrySchedule == null)
                {
                    retrySchedule = new double[]
                    {
                        10.0,
                        20.0,
                        30.0
                    };
                }
                int  num = 0;
                long elapsedMilliseconds            = ExceptionHandler.watch.ElapsedMilliseconds;
                ExceptionHandler.ExceptionData args = new ExceptionHandler.ExceptionData
                {
                    Exception   = null,
                    RetryCount  = num,
                    ShouldRetry = false,
                    Context     = context
                };
                for (;;)
                {
                    args.RetryCount = num;
                    bool result = false;
                    ExWatson.SendReportOnUnhandledException(delegate()
                    {
                        result = this.TryRunInternal(code, ref args);
                    });
                    if (result)
                    {
                        break;
                    }
                    if (exceptionHandler != null)
                    {
                        exceptionHandler(args);
                    }
                    if (!args.ShouldRetry)
                    {
                        goto IL_17D;
                    }
                    int num2 = (int)(duration.TotalMilliseconds * (retrySchedule[(num >= retrySchedule.Length) ? (retrySchedule.Length - 1) : num] / 100.0));
                    if (num2 > 0)
                    {
                        faultDefinition = FaultDefinition.FromException(args.Exception, true, args.ShouldRetry, callerMember, callerFilePath, callerLineNumber);
                        ExceptionHandler.FaultMessage(context, faultDefinition, false);
                        if (cancelToken.WaitHandle.WaitOne(num2))
                        {
                            goto IL_17D;
                        }
                    }
                    num++;
                    if ((double)(ExceptionHandler.watch.ElapsedMilliseconds - elapsedMilliseconds) >= duration.TotalMilliseconds || elapsedMilliseconds == ExceptionHandler.watch.ElapsedMilliseconds)
                    {
                        goto IL_17D;
                    }
                }
                faultDefinition = null;
                return(true);

IL_17D:
                faultDefinition = new FaultDefinition();
                FaultRecord faultRecord = new FaultRecord();
                faultDefinition.Faults.TryAdd(faultRecord);
                faultRecord.Data["RC"]    = args.RetryCount.ToString();
                faultRecord.Data["TEX"]   = args.ShouldRetry.ToString();
                faultRecord.Data["EFILE"] = callerFilePath;
                faultRecord.Data["EFUNC"] = callerMember;
                faultRecord.Data["ELINE"] = callerLineNumber.ToString();
                if (args.Exception != null)
                {
                    faultRecord.Data["EX"] = args.Exception.ToString();
                    LocalizedException ex = args.Exception as LocalizedException;
                    if (ex != null)
                    {
                        faultRecord.Data["UM"] = ex.Message;
                    }
                }
                faultDefinition = FaultDefinition.FromException(args.Exception, true, args.ShouldRetry, callerMember, callerFilePath, callerLineNumber);
                ExceptionHandler.FaultMessage(context, faultDefinition, false);
                result2 = false;
            }
            catch (Exception error)
            {
                faultDefinition = FaultDefinition.FromException(error, true, false, callerMember, callerFilePath, callerLineNumber);
                ExceptionHandler.FaultMessage(context, faultDefinition, true);
                throw;
            }
            return(result2);
        }
 // Token: 0x0600002B RID: 43 RVA: 0x000037D8 File Offset: 0x000019D8
 public static FaultDefinition GetFaultDefinition(ComplianceMessage message)
 {
     return(message.ProtocolContext.FaultDefinition);
 }
 // Token: 0x0600002A RID: 42 RVA: 0x000037B4 File Offset: 0x000019B4
 public static bool IsFaulted(ComplianceMessage message)
 {
     return(message.ProtocolContext.FaultDefinition != null && message.ProtocolContext.FaultDefinition.IsFatalFailure);
 }
Пример #15
0
 protected abstract Task ReceiveMessageInternal(ComplianceMessage message);
Пример #16
0
 public void ReturnMessage(ComplianceMessage message)
 {
     RoutingCache.Instance.ReturnMessage(message);
 }
Пример #17
0
 public void LogMessageDispatching(ComplianceMessage message)
 {
     message.ProtocolContext.DispatchStartTime = new DateTime?(DateTime.UtcNow);
 }
Пример #18
0
 public void DispatchedMessage(ComplianceMessage message)
 {
     MessageLogger.Instance.LogMessageDispatched(message);
     RoutingCache.Instance.DispatchedMessage(message);
 }
 // Token: 0x06000003 RID: 3
 public abstract Task <ComplianceMessage> GetResponseAsync(ComplianceMessage message);
Пример #20
0
 public void SendMessage(ComplianceMessage message)
 {
     RoutingCache.Instance.SendMessage(message);
 }
Пример #21
0
        protected override void InternalProcessRecord()
        {
            TaskLogger.LogEnter();
            if (this.DataObject == null)
            {
                return;
            }
            if (base.ExchangeRunspaceConfig == null)
            {
                base.WriteError(new ComplianceJobTaskException(Strings.UnableToDetermineExecutingUser), ErrorCategory.InvalidOperation, null);
            }
            TDataObject dataObject = this.DataObject;

            switch (dataObject.JobStatus)
            {
            case ComplianceJobStatus.Starting:
            case ComplianceJobStatus.InProgress:
            {
                TDataObject dataObject2 = this.DataObject;
                base.WriteError(new ComplianceJobTaskException(Strings.CannotStartRunningJob(dataObject2.Name)), ErrorCategory.InvalidOperation, this.DataObject);
                break;
            }
            }
            TDataObject dataObject3 = this.DataObject;

            dataObject3.Resume = this.Resume;
            TDataObject dataObject4 = this.DataObject;

            dataObject4.RunBy = ((ADObjectId)base.ExchangeRunspaceConfig.ExecutingUserIdentity).Name;
            TDataObject dataObject5 = this.DataObject;

            dataObject5.JobStartTime = DateTime.UtcNow;
            TDataObject dataObject6 = this.DataObject;

            dataObject6.JobRunId = CombGuidGenerator.NewGuid();
            TDataObject dataObject7 = this.DataObject;

            dataObject7.JobStatus = ComplianceJobStatus.Starting;
            base.DataSession.Save(this.DataObject);
            TDataObject dataObject8 = this.DataObject;
            MultiValuedProperty <string> exchangeBindings = dataObject8.ExchangeBindings;

            if (exchangeBindings != null && exchangeBindings.Count > 0)
            {
                try
                {
                    Dictionary <string, ComplianceBindingErrorType> invalidBindings = new Dictionary <string, ComplianceBindingErrorType>();
                    TDataObject dataObject9 = this.DataObject;
                    dataObject9.Bindings[ComplianceBindingType.ExchangeBinding].JobMaster = base.ExchangeRunspaceConfig.IdentityName;
                    TDataObject dataObject10 = this.DataObject;
                    dataObject10.Bindings[ComplianceBindingType.ExchangeBinding].JobStartTime = DateTime.UtcNow;
                    base.DataSession.Save(this.DataObject);
                    ComplianceMessage           item = this.CreateStartJobMessage();
                    InterExchangeWorkloadClient interExchangeWorkloadClient = new InterExchangeWorkloadClient();
                    Task <bool[]> task = interExchangeWorkloadClient.SendMessageAsync(new List <ComplianceMessage>
                    {
                        item
                    });
                    IComplianceTaskCreator instance        = ComplianceTaskCreatorFactory.GetInstance(ComplianceBindingType.ExchangeBinding);
                    IEnumerable <CompositeTask> enumerable = instance.CreateTasks(base.DataSession, this.DataObject, CreateTaskOptions.None, delegate(string invalidBinding, ComplianceBindingErrorType errorType)
                    {
                        invalidBindings.Add(invalidBinding, errorType);
                    });
                    int num = 0;
                    foreach (CompositeTask compositeTask in enumerable)
                    {
                        num++;
                        int percentCompleted = (num > 99) ? 99 : num;
                        base.WriteProgress(Strings.ComplianceSearchCreateTaskActivity, Strings.ComplianceSearchTasksCreated(num), percentCompleted);
                    }
                    TimeSpan timeout = TimeSpan.FromSeconds(5.0);
                    bool     flag    = true;
                    for (int i = 0; i < 6; i++)
                    {
                        if (System.Threading.Tasks.Task.WaitAll(new System.Threading.Tasks.Task[]
                        {
                            task
                        }, timeout))
                        {
                            flag = false;
                            break;
                        }
                        base.WriteVerbose(Strings.ComplianceSearchInitializingMessage);
                    }
                    if (flag)
                    {
                        TDataObject dataObject11 = this.DataObject;
                        dataObject11.JobStatus = ComplianceJobStatus.Failed;
                        base.ThrowTerminatingError(new ComplianceJobTaskException(Strings.ComplianceSearchTimeoutError), ErrorCategory.ConnectionError, this.DataObject);
                    }
                    else if (!task.Result[0])
                    {
                        TDataObject dataObject12 = this.DataObject;
                        dataObject12.JobStatus = ComplianceJobStatus.Failed;
                        base.ThrowTerminatingError(new ComplianceJobTaskException(Strings.ComplianceSearchSendStartMessageError("Exchange")), ErrorCategory.ConnectionError, this.DataObject);
                    }
                    this.CreateWarningMessageForInvalidBindings(invalidBindings);
                    TDataObject dataObject13 = this.DataObject;
                    dataObject13.Bindings[ComplianceBindingType.ExchangeBinding].JobStatus = ComplianceJobStatus.InProgress;
                    ComplianceJobProvider complianceJobProvider = (ComplianceJobProvider)base.DataSession;
                    TDataObject           dataObject14          = this.DataObject;
                    complianceJobProvider.UpdateWorkloadResults(dataObject14.JobRunId, null, ComplianceBindingType.ExchangeBinding, ComplianceJobStatus.InProgress);
                }
                catch (Exception ex)
                {
                    TDataObject dataObject15 = this.DataObject;
                    dataObject15.JobStatus = ComplianceJobStatus.Failed;
                    base.DataSession.Save(this.DataObject);
                    throw ex;
                }
            }
            TDataObject dataObject16 = this.DataObject;

            dataObject16.Bindings[ComplianceBindingType.PublicFolderBinding].JobStatus = ComplianceJobStatus.Succeeded;
            ComplianceJobProvider complianceJobProvider2 = (ComplianceJobProvider)base.DataSession;
            TDataObject           dataObject17           = this.DataObject;

            complianceJobProvider2.UpdateWorkloadResults(dataObject17.JobRunId, null, ComplianceBindingType.PublicFolderBinding, ComplianceJobStatus.Succeeded);
            TDataObject dataObject18 = this.DataObject;

            dataObject18.Bindings[ComplianceBindingType.SharePointBinding].JobStatus = ComplianceJobStatus.Succeeded;
            ComplianceJobProvider complianceJobProvider3 = (ComplianceJobProvider)base.DataSession;
            TDataObject           dataObject19           = this.DataObject;

            complianceJobProvider3.UpdateWorkloadResults(dataObject19.JobRunId, null, ComplianceBindingType.SharePointBinding, ComplianceJobStatus.Succeeded);
            TaskLogger.LogExit();
        }