public EventsProcessingResult <string> ProcessEvents([NotNull] EventsQueryResult <TaskMetaUpdatedEvent, string> eventsQueryResult) { stateManager.MaybePersistState(); var taskIdsToProcess = new HashSet <string>(); foreach (var @event in eventsQueryResult.Events) { if (stateManager.NeedToProcessEvent(@event.Event)) { taskIdsToProcess.Add(@event.Event.TaskId); } } perfGraphiteReporter.Increment("TaskMetasToRead", taskIdsToProcess.Count); var taskMetas = perfGraphiteReporter.ReportTiming("ReadTaskMetas", () => handleTasksMetaStorage.GetMetas(taskIdsToProcess.ToArray())); perfGraphiteReporter.Increment("MissedTaskMetas", taskIdsToProcess.Count - taskMetas.Count); foreach (var taskMeta in taskMetas) { stateManager.UpdateTaskState(taskMeta.Value); } return(eventsQueryResult.LastOffset == null ? EventsProcessingResult <string> .DoNotCommitOffset() : EventsProcessingResult <string> .DoCommitOffset(eventsQueryResult.LastOffset)); }
public EventsProcessingResult <string> ProcessEvents([NotNull] EventsQueryResult <TaskMetaUpdatedEvent, string> eventsQueryResult) { string offsetToCommit = null; foreach (var @event in eventsQueryResult.Events) { if (taskIdsToProcess.Add(@event.Event.TaskId)) { taskIdsToProcessInChronologicalOrder.Add(@event.Event.TaskId); } var eventTimestamp = new Timestamp(@event.Event.Ticks); if (lastNotProcessedEventsBatchStartTimestamp == null) { lastNotProcessedEventsBatchStartTimestamp = eventTimestamp; } if (eventTimestamp - lastNotProcessedEventsBatchStartTimestamp > settings.MaxEventsProcessingTimeWindow || taskIdsToProcessInChronologicalOrder.Count > settings.MaxEventsProcessingTasksCount) { IndexTasks(); offsetToCommit = @event.Offset; } } if (eventsQueryResult.NoMoreEventsInSource) { if (taskIdsToProcessInChronologicalOrder.Any()) { IndexTasks(); } offsetToCommit = eventsQueryResult.LastOffset; } return(offsetToCommit != null ? EventsProcessingResult <string> .DoCommitOffset(offsetToCommit) : EventsProcessingResult <string> .DoNotCommitOffset()); }
public EventsProcessingResult <long?> ProcessEvents(EventsQueryResult <int, long?> eventsQueryResult) { foreach (var eventWithOffset in eventsQueryResult.Events) { ConsumedEvents.Add(eventWithOffset); } return(eventsQueryResult.Events.Any() ? EventsProcessingResult <long?> .DoCommitOffset(eventsQueryResult.Events.Last().Offset) : EventsProcessingResult <long?> .DoNotCommitOffset()); }