Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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());
        }