private static bool TryEnqueueNextHopAfterSubmit(MessageTrackingLogEntry submitEvent, TrackingContext context, Queue <MailItemTracker> remainingTrackers) { return(LogDataAnalyzer.TryEnqueueNextHopAfterSubmitInternal(submitEvent, context, remainingTrackers, false)); }
private static bool TryEnqueueNextHopAfterModeratorApprove(MessageTrackingLogEntry approvalEvent, TrackingContext context, Queue <MailItemTracker> remainingTrackers) { ILogReader logReader = RpcLogReader.GetLogReader(approvalEvent.Server, context.DirectoryContext); if (logReader == null) { return(false); } List <MessageTrackingLogEntry> messageLog = context.Cache.GetMessageLog(RpcReason.None, logReader, TrackingLogPrefix.MSGTRK, approvalEvent.MessageId, new MessageTrackingSource?(MessageTrackingSource.STOREDRIVER), SearchMessageTrackingReportImpl.SubmitEventFilterSet); if (messageLog.Count == 0) { TraceWrapper.SearchLibraryTracer.TraceError <string>(0, "Moderator approval event found, but no matching submission of the message back into transport was found on mailbox server {0}.", approvalEvent.Server); return(false); } MessageTrackingLogEntry messageTrackingLogEntry = null; foreach (MessageTrackingLogEntry messageTrackingLogEntry2 in messageLog) { if (!LogDataAnalyzer.IsEntryProcessed(messageTrackingLogEntry2, context.Tree)) { messageTrackingLogEntry = messageTrackingLogEntry2; messageTrackingLogEntry.ProcessedBy = context.Tree; break; } } if (messageTrackingLogEntry == null) { TraceWrapper.SearchLibraryTracer.TraceError(0, "All submission events found after processing moderator approval had already been processed.", new object[0]); return(false); } ILogReader logReader2 = RpcLogReader.GetLogReader(messageTrackingLogEntry.NextHopFqdnOrName, context.DirectoryContext); if (logReader2 == null) { return(false); } List <MessageTrackingLogEntry> messageLog2 = context.Cache.GetMessageLog(RpcReason.None, logReader2, TrackingLogPrefix.MSGTRK, approvalEvent.OrigMessageId, new MessageTrackingSource?(MessageTrackingSource.APPROVAL), SearchMessageTrackingReportImpl.ReceiveEventFilterSet); if (messageLog2.Count == 0) { TraceWrapper.SearchLibraryTracer.TraceError(0, "No Approval Received events found", new object[0]); return(false); } foreach (MessageTrackingLogEntry messageTrackingLogEntry3 in messageLog2) { if (!LogDataAnalyzer.IsEntryProcessed(messageTrackingLogEntry3, context.Tree) && approvalEvent.MessageId.Equals(messageTrackingLogEntry3.InitMessageId, StringComparison.Ordinal)) { if (logReader.MtrSchemaVersion >= MtrSchemaVersion.E15RTM) { if (!LogDataAnalyzer.TryEnqueueNextHopAfterSubmitInternal(messageTrackingLogEntry3, context, remainingTrackers, true)) { continue; } } else { List <MessageTrackingLogEntry> messageLog3 = context.Cache.GetMessageLog(RpcReason.None, logReader2, TrackingLogPrefix.MSGTRK, approvalEvent.OrigMessageId, messageTrackingLogEntry3.ServerLogKeyMailItemId); if (messageLog3.Count == 0) { continue; } MailItemTracker item = new MailItemTracker(messageLog3, context.Tree); remainingTrackers.Enqueue(item); } return(true); } } TraceWrapper.SearchLibraryTracer.TraceError(0, "No unprocessed Approval Received events found", new object[0]); return(false); }